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

Aplicação com Stable Diffusion no estilo “Dark Fantasy”

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

Olá, pessoal!

Estou avançando nos estudos com IA aqui na Alura e gostaria de compartilhar o resultado 
de um exercício prático que desenvolvi com apoio do conteúdo do curso e da ajuda do ChatGPT.

A proposta era criar uma aplicação visual para que os funcionários de uma agência de marketing 
pudessem gerar imagens com o modelo Stable Diffusion, mas com um detalhe: todas as imagens 
deveriam seguir o estilo “dark fantasy”, mantendo uma identidade visual consistente.

Como ainda estou aprendendo, optei por seguir o caminho mais simples e funcional para mim neste 
momento, usando o Streamlit junto da API da Stability AI. A aplicação permite que o usuário insira um 
prompt e, automaticamente, o estilo "dark fantasy" é adicionado ao comando enviado ao modelo.

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):

python

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 minha chave da API:
STABILITY_API_KEY=sua_chave_aqui

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

O que aprendi:

1. Como usar o Streamlit para montar interfaces simples.

2. Como consumir uma API externa (Stability AI).

3. Como enriquecer automaticamente um prompt com estilo visual.

4. Como proteger chaves com o .env.

Gostaria de saber:

1. Como posso melhorar essa aplicação?

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

3. Alguma dica para lidar com erros ou melhorar a usabilidade?

Afinal:
- Agradeço a todos que lerem ou comentarem. 

-  comprometido em aprender e contribuir também com o que puder.
2 respostas
solução!

Oi, Ricardo! Como vai?

Agradeço por compartilhar suas reflexões e aprendizados com a comunidade Alura.

Gostei muito da proposta do seu projeto e da forma como você contextualizou o uso do estilo "dark fantasy" para manter uma identidade visual. A escolha do Streamlit torna o processo acessível e direto, ideal para explorar ideias rapidamente com IA generativa.

Continue nesse ritmo! Seu empenho em aplicar os conceitos do curso e integrar ferramentas externas mostra iniciativa e criatividade.

Dica: para modularizar, experimente mover a função gerar_imagem() para um arquivo separado como servicos.py e importar no app.py. Isso facilita testes e manutenções no futuro. Também pode usar try/except no lugar do if status_code para lidar melhor com erros.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Obrigado, Lorena. O conhecimento teórico, assim como o profissionalismo da equipe Alura, é verdadeiramente admirável e inspirador.