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

[Projeto] 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:

  • Python
  • Streamlit
  • Requests
  • API da Stability AI (Stable Diffusion)
  • .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 minha 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!

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.