Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Mão na Massa] Aplicação com Stable Diffusion no estilo

Nesta fase de revisão de alguns cursos e já com bem maior conhecimento e domínio de estou refazendo e aprimirando alguns trabalhos meus, pórem sem descartar o original. À disposição

[Mão na Massa] Aplicação com Stable Diffusion no estilo "Dark Fantasy"

Criei uma aplicação visual que permite aos funcionários de uma agência de marketing gerar imagens no estilo "dark fantasy" usando o modelo Stable Diffusion, mantendo uma identidade visual consistente. Utilizei Streamlit e a API da Stability AI, permitindo que o usuário insira um prompt ao qual o estilo "dark fantasy" é automaticamente adicionado.

Tecnologias utilizadas:

• [x] Python

• [x] Streamlit

• [x] Requests

• [x] API da Stability AI (Stable Diffusion)

• [x] .env para proteger a chave da API

Código resumido (app.py):


import streamlit as st

import requests, os, base64

from dotenv import load_dotenv

from PIL import Image

from io import BytesIO
load_dotenv()

API_KEY = os.getenv("STABILITY_API_KEY")
def gerar_imagem(prompt):
    headers = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}
    prompt_estilizado = f"{prompt}, dark fantasy style, highly detailed, cinematic lighting"
    body = {
        "text_prompts": [{"text": prompt_estilizado}],
        "cfg_scale": 7, "height": 512, "width": 512,
        "samples": 1, "steps": 30,
    }
    r = requests.post(
        "https://api.stability.ai/v1/generation/stable-diffusion-v1-6/text-to-image",
        headers=headers, json=body
    )
    if r.status_code == 200:
        img_base64 = r.json()["artifacts"][0]["base64"]
        return Image.open(BytesIO(base64.b64decode(img_base64)))
    else:
        st.error(f"Erro: {r.status_code}")
        return None
st.title("Gerador de Imagens Dark Fantasy")
prompt = st.text_input("Descreva a imagem que deseja:")
if st.button("Gerar Imagem"):
    if prompt.strip():
        with st.spinner("Gerando..."):
            img = gerar_imagem(prompt)
            if img: st.image(img, caption="Imagem gerada!")
    else:
        st.warning("Digite um prompt.")

Outras dicas:

• Criei um arquivo .env para armazenar a chave da API: STABILITY_API_KEY=sua_chave_aqui

• Para rodar a aplicação: streamlit run app.py

O que aprendi:

• Como usar o Streamlit para montar interfaces simples.

• Como consumir uma API externa (Stability AI).

• Como enriquecer automaticamente um prompt com estilo visual.

• Como proteger chaves com o . env.

Gostaria de saber:

• Como posso melhorar essa aplicação?

• Existe uma forma mais elegante ou eficiente de modularizar o código?

• Alguma dica para lidar com erros ou melhorar a usabilidade?

Agradeço a todos que lerem ou comentarem. Estou comprometido em aprender e contribuir também com o que puder!

2 respostas
solução!

Olá, Ricardo!

Parabéns pelo projeto da aplicação com Stable Diffusion e Streamlit, ficou muito legal e bem organizado, especialmente o cuidado com a API key!

Sobre suas perguntas, para melhorar a aplicação, você poderia, por exemplo, permitir que o usuário ajuste alguns parâmetros da geração de imagem, como cfg_scale ou steps, ou talvez adicionar uma pequena galeria para exibir as imagens criadas na sessão.

Quanto à modularização do código, uma forma é separar a lógica da chamada à API da Stability AI. Mover essa parte para uma função específica, ou até mesmo para um arquivo .py dedicado (como api_stability.py), deixaria seu app.py principal mais limpo, focado na interface.

Para erros e usabilidade, uma dica é tentar mostrar mensagens mais claras quando a API retornar um erro, detalhando um pouco mais o problema para o usuário, além do status code. Oferecer exemplos de prompts na interface também costuma ajudar bastante quem está começando a usar o app.

Mas to caçando pelo em ovo rsrs, você já fez um ótimo trabalho! Essas são apenas algumas ideias para continuar evoluindo o projeto.

Espero ter ajudado! Bons estudos!

Sucesso

Muito obrigado Victor.