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!