Gerador de prompts para Stable Diffusion com LLM: configuração em Python
Se você quer um gerador de prompts para Stable Diffusion com LLM para expandir algumas palavras em um prompt completo e bem estruturado, precisa apenas de um modelo de texto e cerca de trinta linhas de Python. O modelo gera o prompt como texto; ele não renderiza imagens, então você ainda precisa processar o resultado pelo SDXL ou pela ferramenta de imagem que usar.


Pontos principais
- O LLM apenas escreve texto. Alimente sua saída na sua própria configuração de SDXL, ComfyUI ou Automatic1111.
- O modo JSON retorna um prompt positivo e um prompt negativo que você pode analisar sem regex.
- Uma expansão custa menos de $0,0001, então 1.000 prompts custam cerca de $0,09.
- Mantenha os prompts concisos: os codificadores de texto do SDXL leem apenas os primeiros 77 tokens de cada bloco.
O que o LLM faz e o que ele não faz
Modelos de imagem respondem bem a prompts densos e específicos: sujeito, cenário, lente, iluminação, meio, humor e uma lista de coisas a evitar. A maioria das pessoas digita três palavras e obtém um resultado plano. Um LLM fecha essa lacuna ao pegar sua ideia curta e escrever a versão longa em um formato consistente.
Deixe clara a divisão de trabalho. Este serviço é uma API somente texto. Ele não gera imagens, áudio ou vídeo, e não possui embeddings ou ajuste fino. Ele fica à frente do seu pipeline de imagem e escreve as instruções que o pipeline lê. É um endpoint compatível com OpenAI que serve um único modelo de pesos abertos de um provedor independente, não um produto de nenhum fornecedor de modelo de imagem.
O modelo é ajustado para responder sem recusas de conteúdo para uso adulto legal, o que importa para artistas e desenvolvedores de jogos cujos assuntos (horror, violência em ficção, temas maduros) são bloqueados em outros lugares. Conteúdo sexual envolvendo menores é um limite rígido e nunca é produzido.
Passo 1: obter uma chave e testar uma chamada
Faça login com Google ou com e-mail e senha, depois abra a página da chave de API. Uma tentativa com um clique adiciona $0,50 de crédito, válido por 7 dias e sem necessidade de cartão. Isso é suficiente para milhares de expansões de prompt, conforme mostra a seção de custos.
Verifique se tudo funciona com curl:
curl https://api.sdxlapi.com/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [
{"role": "system", "content": "You write Stable Diffusion prompts."},
{"role": "user", "content": "lighthouse in a storm"}
]
}'
Qualquer SDK OpenAI funciona assim que você alterar a URL base e a chave. Os detalhes estão na documentação.
Passo 2: um prompt de sistema que fornece saída estável
O prompt de sistema é onde a qualidade vem. Diga ao modelo o formato alvo, a ordem dos elementos, um limite de comprimento e o que omitir. Uma versão que funciona bem como ponto de partida:
Você transforma ideias curtas de imagem em prompts para SDXL. Escreva um prompt positivo de 40 a 60 palavras: assunto primeiro, depois cenário, composição, iluminação, meio ou estilo, e humor. Use frases separadas por vírgula, sem frases completas. Depois, escreva um prompt negativo de até 15 frases curtas. Não adicione texto, marcas d'água ou legendas à foto. Retorne JSON com as chaves "prompt" e "negative".
O limite de palavras é importante. Os codificadores de texto CLIP do SDXL leem prompts em blocos de 77 tokens, e qualquer coisa além disso é cortada ou tratada por um recurso de segmentação na sua interface. Mirar entre 40 e 60 palavras mantém a maioria dos prompts dentro de um único bloco, com os detalhes mais importantes primeiro.
Use uma temperatura baixa a média (0,7 a 0,9) para que o estilo permaneça consistente, mas duas execuções da mesma ideia diferem. Se precisar de saída idêntica para testes, passe um seed fixo.
Passo 3: o script em Python
Este script lê ideias de uma lista, solicita JSON e imprime o par de prompts. Ele usa o pacote oficial Python OpenAI com a URL base alterada.
import json
from openai import OpenAI
client = OpenAI(base_url="https://api.sdxlapi.com/v1", api_key="YOUR_KEY")
SYSTEM = (
"You turn short image ideas into prompts for SDXL. Write one positive "
"prompt of 40 to 60 words: subject, setting, composition, lighting, "
"medium or style, mood, as comma-separated phrases. Then a negative "
"prompt of up to 15 short phrases. Return JSON with keys "
"'prompt' and 'negative'."
)
def expand(idea: str) -> dict:
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": SYSTEM},
{"role": "user", "content": idea},
],
response_format={"type": "json_object"},
temperature=0.8,
max_tokens=400,
)
return json.loads(resp.choices[0].message.content)
for idea in ["lighthouse in a storm", "abandoned greenhouse at dawn"]:
result = expand(idea)
print(idea, "->", result["prompt"])
print("negative:", result["negative"], "\n")
O modo JSON (response_format com json_object) torna a resposta fácil de analisar. Ainda assim, envolva json.loads em um bloco try em produção e tente novamente uma vez se falhar, porque uma resposta longa cortada em max_tokens pode terminar no meio do objeto.
Passo 4: enviar prompts para sua ferramenta de imagem
A saída são strings simples, então qualquer front-end pode usá-la. Com uma instalação local do Automatic1111 ou ComfyUI, envie os dois campos para a API dele. Com um script que itera sobre um CSV de ideias, escreva os resultados em um arquivo e coloque-os em fila como um lote.
- Salve a ideia, o prompt e o prompt negativo juntos, para que você possa rastrear uma boa imagem de volta à instrução que a produziu.
- Adicione uma linha de estilo da sua própria lista ("fotografia cinematográfica", "ilustração em tinta") como um campo extra na mensagem do usuário quando quiser uma série com aparência correspondente.
- Mantenha uma pequena biblioteca de prompts que funcionaram e alimente dois ou três deles no prompt de sistema como exemplos. Exemplos few-shot direcionam o estilo de forma mais confiável do que adjetivos.
Para um projeto de roleplay ou jogo, o mesmo padrão pode ilustrar cenas de uma história, com o LLM transformando os últimos parágrafos em uma descrição visual. O artigo sobre cenários de roleplay baseados em texto cobre o lado da história.
Problemas comuns e soluções
Alguns problemas aparecem em quase todos os projetos de gerador de prompts.
O modelo adiciona comentários
Respostas que começam com "Aqui está o seu prompt" quebram pipelines. O modo JSON remove a maioria disso. Se você trabalha em texto puro, diga "saia apenas com o prompt, sem preâmbulo" e adicione uma sequência de parada para uma linha que você nunca quer ver.
Todos os prompts parecem iguais
Temperatura baixa e um template rígido dão resultados uniformes. Aumente a temperatura para 1,0, varie a linha de estilo que você passa, ou peça três alternativas e escolha uma. Penalidades (frequency_penalty, presence_penalty) são passadas e podem quebrar frases repetidas.
Prompts muito longos para o modelo de imagem
Coloque um limite rígido de palavras no prompt de sistema e verifique o comprimento no código. Truncar manualmente remove os últimos detalhes, que geralmente são os menos importantes, mas é melhor pedir ao modelo para escrever curto desde o início.
Você atinge um 429
Você enviou muitas requisições por minuto ou de uma vez. Recue por alguns segundos e tente novamente; a resposta pode incluir Retry-After: 5. Um lote com um pool de threads pequeno de 4 a 8 workers fica dentro dos limites de uma chave completa.
Quanto custam 1.000 prompts
A precificação é de $0,15 por 1M de tokens de entrada e $0,50 por 1M de tokens de saída. Uma expansão típica envia um prompt de sistema de cerca de 150 tokens mais uma ideia de 15 tokens, chamemos de 170 tokens de entrada, e recebe cerca de 120 tokens de JSON.
- Entrada: 170 × $0,15 / 1M = $0,0000255.
- Saída: 120 × $0,50 / 1M = $0,00006.
- Por prompt: cerca de $0,0000855.
- 1.000 prompts: cerca de $0,0855, ou $0,09.
Arredonde para cima para prompts de sistema mais longos ou exemplos few-shot. Se você adicionar 600 tokens de exemplos, a entrada se torna 770 tokens e 1.000 prompts custam cerca de $0,1155 para entrada + $0,06 para saída, totalizando aproximadamente $0,18. De qualquer forma, a trial de $0,50 cobre várias milhares de expansões. Requisições falhas não são cobradas, e o crédito pago nunca expira; consulte a página de preços para recargas ($20 a $500, por cripto).
Mais guias
Perguntas e respostas
O LLM pode gerar a imagem do Stable Diffusion?
Não. Ele escreve apenas texto. Você passa seu prompt para SDXL, ComfyUI, Automatic1111 ou qualquer outra ferramenta de imagem que você executar.
Qual deve ser o tamanho de um prompt para SDXL?
Cerca de 40 a 60 palavras funcionam bem, com detalhes-chave primeiro, porque os codificadores de texto leem em blocos de 77 tokens.
Ele recusa temas maduros ou sombrios?
O modelo é ajustado para responder sem recusas de conteúdo para uso adulto legal. Conteúdo envolvendo menores nunca é produzido.
Qual nome de modelo eu envio?
Envie uncensored como o ID do modelo, com a URL base https://api.sdxlapi.com/v1 e sua chave como um token Bearer.
Posso executar vários prompts em paralelo?
Uma chave completa permite 8 requisições concorrentes e 300 por minuto; uma chave de teste permite 2 e 60. Uma resposta 429 significa esperar e tentar novamente.
Sua chave está a um formulário de distância
Crie uma conta, copie a chave, altere a URL base. Essa é a configuração inteira.