Criar um site gerador de imagens com IA: template e projeto no GitHub
Um template funcional para um site gerador de imagens com IA: a stack Next.js, a estrutura do projeto no GitHub, a rota do servidor que chama a API de um modelo de imagem, a página de prompt, verificações de segurança, limites de requisições e deploy. Todos os arquivos estão incluídos, para você copiar e publicar.
A maioria dos tutoriais sobre como criar um site gerador de imagens com IA termina com uma captura de tela e uma promessa vaga. Este termina com um projeto funcionando: uma caixa de prompt, uma rota do servidor que chama um modelo de imagem, um loop de polling, uma tela de resultado e um checklist de deploy. Todos os arquivos cabem nesta página, então você pode colá-los em um repositório novo, enviar para o GitHub e ter um gerador no ar na mesma tarde.
O template é pequeno de propósito. Ele tem quatro arquivos com lógica real, sem banco de dados, sem provedor de login e sem biblioteca de estado. Isso facilita a leitura de uma só vez e a expansão depois com contas, histórico ou vídeo. Se você consegue rodar npm install, consegue publicar.
💡 Resposta rápida: um site gerador de imagens é um formulário, uma rota do servidor que esconde seu token da API, um loop de polling e uma tag <img>. O resto é acabamento.
O que o template faz
O site final recebe um prompt de texto, envia para um modelo de imagem, espera o resultado e mostra a imagem com um link para download. O navegador nunca vê o seu token da API, porque cada chamada passa pela sua própria rota do servidor.
Este é o fluxo completo da requisição:
O visitante digita um prompt e clica no botão.
A página envia o prompt para /api/generate no seu servidor.
Seu servidor valida o prompt e cria um job na API de imagens.
A página consulta /api/generate/{id} a cada dois segundos para saber o status.
Quando o status muda para succeeded, a página mostra a URL da imagem.
Recursos em resumo
Recurso
Incluído
Onde fica
Formulário de prompt com limite de caracteres
Sim
components/Generator.tsx
Rota do servidor que cria o job
Sim
app/api/generate/route.ts
Rota de status para polling
Sim
app/api/generate/[id]/route.ts
Estados de carregamento, erro e timeout
Sim
components/Generator.tsx
Link de download e histórico local
Sim
Adicionado na etapa da galeria
Contas, cobrança, galerias de usuários
Não
Adicione após o primeiro lançamento
Para quem serve: desenvolvedores solo ganham um projeto de portfólio que de fato gera imagens. Agências ganham uma base que podem personalizar para um cliente em um dia. Equipes de produto ganham um protótipo para testar a demanda antes de investir em uma plataforma completa.
Stack e estrutura do projeto
Escolha a stack
O template usa Next.js com App Router, TypeScript e Tailwind CSS. Um só framework oferece a página e as rotas do servidor no mesmo repositório, e é por isso que ele combina com um primeiro projeto. Qualquer stack com servidor funciona do mesmo jeito: React com Express, SvelteKit, Nuxt ou Node puro.
Crie o projeto e envie para o GitHub em quatro comandos:
O backend é uma API de texto para imagem. A API da PicassoIA segue a convenção do Replicate: POST /v1/models/{owner}/{name}/predictions cria um job, e GET /v1/predictions/{id} retorna o status dele. No momento da escrita, a API oferece quatro modelos: picassoia/picassoia-image, picassoia/picassoia-image-editor-pro, picassoia/picassoia-video e picassoia/seedance-2.5-lite. Crie seu token na página da API da PicassoIA.
Copie o arquivo para .env.local e cole ali seu token real. create-next-app ignora todos os arquivos .env*, então adicione a linha !.env.example em .gitignore se quiser o arquivo de exemplo no repositório. Nunca coloque o token em uma variável que comece com NEXT_PUBLIC_, porque o Next.js envia essas variáveis para o navegador.
O corpo segue a convenção do Replicate, um objeto input que contém o prompt. Cada página de modelo lista campos extras, como a proporção, que você pode adicionar ao lado de prompt. A verificação de 4.000 caracteres corresponde ao limite de prompt documentado, então o usuário recebe um erro claro antes de a requisição sair do seu servidor.
Faça polling até terminar
A geração é assíncrona. A primeira chamada retorna um id, e você pede o status até que ele diga succeeded ou failed.
A verificação de id é importante. Sem ela, um visitante poderia passar ../ segmentos no caminho e fazer seu servidor chamar outro endpoint com o seu token anexado.
Trate erros e limites
Três tipos de falha aparecem no tráfego real:
Entrada inválida: retorne 400 antes de gastar uma requisição.
Erros do upstream ou filas ocupadas: retorne 502 ou 429 e deixe a página mostrar uma mensagem para tentar de novo.
Jobs lentos: pare o polling após cerca de dois minutos e avise o usuário.
A API permite 5 predições simultâneas por conta, compartilhadas entre todos os tokens. Se seu site receber dez visitantes ao mesmo tempo, cinco esperam. Adicione uma pequena fila ou desabilite o botão enquanto um job roda.
Sintoma
Causa provável
Solução
401 da API
Token errado ou ausente
Verifique .env.local e reinicie npm run dev
429 ou esperas longas
Todas as 5 vagas estão ocupadas
Coloque as requisições em fila ou mostre uma mensagem de espera
O status nunca muda
Polling com o id errado
Registre o id retornado pela primeira chamada
Funciona localmente, falha online
Variáveis não definidas na hospedagem
Adicione as duas variáveis nas configurações da hospedagem
Importe-o em app/page.tsx e renderize <Generator />. Rode npm run dev, abra localhost:3000, digite um prompt e pronto: você tem um gerador funcionando.
Galeria e downloads
Adicione dois toques quando o básico funcionar. Envolva a imagem em um link com o atributo download para que o usuário possa salvar o arquivo. Depois, guarde cada resultado em localStorage, um array de objetos { prompt, url }, e renderize tudo abaixo do formulário em forma de grade. Isso dá histórico sem banco de dados.
💡 Use o prompt como texto alternativo. Isso ajuda leitores de tela e dá à sua galeria um texto útil para os mecanismos de busca.
Como usar o Imagen 4 na PicassoIA
Antes de fixar um estilo no seu site, teste onde iterar custa pouco. O site da PicassoIA tem um playground para cada modelo, e os controles seguem o mesmo padrão: um campo de prompt, algumas configurações e um botão de gerar.
Cole um prompt estruturado: assunto, cenário, luz, lente e textura.
Escolha a proporção 16:9, se o modelo oferecer.
Clique em gerar e confira o resultado em tamanho real.
Mude um detalhe por vez e gere de novo.
Um prompt que funciona bem para saídas fotográficas:
Uma xícara de cerâmica com café preto sobre uma mesa de carvalho desgastada, luz de janela vinda da esquerda, lente de 50mm em f/2, profundidade de campo rasa, veio de madeira e vapor visíveis, cores do Kodak Portra 400.
Cada parte desse prompt tem uma função:
Parte
Exemplo
Por que ajuda
Assunto
Uma xícara de cerâmica com café preto
Nomeia a única coisa de que a imagem trata
Cenário
Uma mesa de carvalho desgastada
Dá ao fundo um material e um clima
Luz
Luz de janela vinda da esquerda
Define sombras e direção
Lente
50mm em f/2
Controla a profundidade de campo e a perspectiva
Textura
Veio de madeira, vapor
Puxa o resultado para uma fotografia real
Compare três modelos
Passe o mesmo prompt por vários modelos antes de decidir o que alimenta o site. No momento da escrita, a API oferece apenas os quatro modelos picassoia/*, então os outros desta tabela servem para escolher um estilo no playground.
Mantenha o prompt vencedor como texto inicial no atributo placeholder, e transforme seus três melhores prompts em chips de exemplo clicáveis abaixo da área de texto. Visitantes que veem um bom exemplo escrevem prompts melhores, e prompts melhores significam menos gerações desperdiçadas.
Adicione LLMs e vídeo depois
Gere código com um LLM
Você pode construir o template inteiro acima com um assistente de programação. Claude Sonnet 5 e GPT 5.6 Sol estão listados para tarefas de programação, e Gemini 3.5 Flash serve para edições rápidas. Cole a árvore de pastas deste artigo e peça um arquivo de cada vez, depois leia cada linha antes de fazer commit.
Reescreva prompts curtos
A maioria dos visitantes digita cinco palavras. Um modelo de linguagem pode expandi-las antes da chamada de imagem:
Adicione uma etapa de rewrite em route.ts que envie o texto do usuário para um modelo como o Kimi K2.6.
Instrua o modelo a retornar um prompt com assunto, luz, lente e textura.
Envie esse prompt para o modelo de imagem e mostre as duas versões ao usuário.
Anime os resultados
As mesmas duas rotas cuidam do vídeo. Troque PICASSOIA_MODEL por um modelo de vídeo, como picassoia/seedance-2.5-lite, e a saída passa a ser um link MP4. Renderize com uma tag <video controls> e aumente o intervalo de polling, porque vídeo demora mais que imagem. Para comparar opções antes, as páginas do Seedance 2.5 Lite e do Wan 3 mostram o que cada modelo produz.
Publique sem surpresas
Modere os prompts
Um gerador público é abusado em poucos dias. Passe cada prompt por um modelo de moderação antes de criar a predição. O Llama Guard 4 12B foi feito para isso: ele classifica um prompt como seguro ou inseguro, e você bloqueia a requisição quando ele diz que é inseguro. Adicione também um aviso visível com os termos sob o formulário.
Limites de requisições e filas
Risco
Solução
Um visitante inunda a rota
Limite as requisições por IP, por exemplo 10 por hora
Mais visitantes do que vagas simultâneas
Desabilite o botão enquanto um job roda e mostre uma mensagem de espera
Token vazado no navegador
Mantenha as chamadas no servidor e nunca use NEXT_PUBLIC_ para segredos
Custo descontrolado
Limite as gerações diárias e envie um alerta ao atingir 80%
Um contador em memória funciona em um único servidor. Em hospedagem serverless, cada instância de função tem sua própria memória, então use um armazenamento compartilhado para o limitador.
Faça o deploy e monitore
O deploy leva cinco etapas:
Envie o repositório para o GitHub.
Importe-o na plataforma de hospedagem de sua escolha.
Adicione PICASSOIA_API_TOKEN e PICASSOIA_MODEL como variáveis de ambiente.
Defina uma duração máxima de função longa o bastante para a sua rota de polling.
Abra a URL ao vivo e gere três imagens de teste.
Depois do lançamento, registre o status de cada job (nunca o token) e confira a taxa de falhas toda semana. Um aumento repentino geralmente indica uma mudança de modelo ou um limite atingido. Escreva também um README.md curto, com as duas variáveis, o comando de execução e uma captura de tela, porque o README é a primeira coisa que as pessoas veem em um projeto no GitHub.
Construa o seu na Picasso IA
Agora você tem as peças: uma stack, uma árvore de pastas, duas rotas do servidor, uma página de prompt e um checklist de segurança. A forma mais rápida de fazer o site parecer pronto é escolher o visual antes de escrever mais código.
Abra a Picasso IA, rode seu primeiro prompt pelo Imagen 4 ou pelo FLUX 2 Pro e salve os três resultados de que mais gostar. Esses prompts viram seus chips de exemplo, sua página inicial e seus primeiros casos de teste. Depois, crie seu token da API na página da API da PicassoIA, cole o código deste artigo em um repositório novo e clique em gerar. A primeira imagem no seu próprio domínio é o momento em que o projeto ganha vida, então faça desse prompt um bom prompt.