- Quando Usar Este Início Rápido
- Passo 1: Obtenha sua Chave de API Novita
- Passo 2: Confirme o Endpoint e o Modelo
- Passo 3: Envie sua Primeira Requisição
- Passo 4: Faça Polling para Obter o Resultado
- Exemplo em Python: Ponta a Ponta
- Exemplo cURL
- Parâmetros Principais
- O que o Qwen Image Gera Bem
- Erros Comuns e Correções
- Perguntas Frequentes
- Artigos Recomendados
A API Qwen Image text-to-image na Novita AI gera imagens a partir de prompts de texto usando o modelo Qwen Image de 20B — a mesma base que alimenta a API Qwen Image Edit para tarefas de edição precisas. Este início rápido cobre o fluxo de trabalho assíncrono completo: envie uma solicitação de geração, obtenha um ID de tarefa, faça polling até a conclusão e recupere a URL da sua imagem. O endpoint é POST https://api.novita.ai/v3/async/qwen-image-txt2img.
Quando Usar Este Início Rápido
Use este guia quando precisar:
- Gerar imagens a partir de prompts de texto com renderização de texto de alta qualidade em inglês ou chinês via
POST /v3/async/qwen-image-txt2img. - Construir pipelines que criem cartazes, elementos gráficos ou conteúdo ilustrado onde a legibilidade do texto dentro da imagem seja importante.
- Prototipar rapidamente contra uma API hospedada, em vez de executar o modelo de 20B em infraestrutura GPU local.
O modelo Qwen Image é especialmente forte em gerar imagens com texto legível e estilizado embutido na saída — pense em cartazes, placas, maquetes de produtos e capas gráficas. Se o seu caso de uso envolve editar uma imagem existente em vez de gerar do zero, veja a API Qwen Image Edit. Se você quiser uma visão geral completa dos recursos e benchmarks do modelo Qwen Image, o post de lançamento do Qwen Image na Novita AI cobre a arquitetura e os resultados de benchmark em detalhes.
Passo 1: Obtenha sua Chave de API Novita
Crie uma conta Novita AI e navegue até gerenciamento de chaves de API. Gere uma chave e armazene-a como uma variável de ambiente:
export NOVITA_API_KEY="sua_chave_api_aqui"
Mantenha a chave fora do código do lado do cliente, bundles frontend e controle de versão.
Passo 2: Confirme o Endpoint e o Modelo
| Item | Valor |
|---|---|
| Endpoint de geração | POST https://api.novita.ai/v3/async/qwen-image-txt2img |
| Endpoint de polling de resultado | GET https://api.novita.ai/v3/async/task-result?task_id=<id> |
| Modelo | Qwen Image (20B MMDiT) |
| Documentação da API | Referência Qwen Image txt2img da Novita AI |
A API segue um padrão assíncrono de duas etapas comum a todos os endpoints de geração de imagem da Novita AI. A chamada de geração retorna apenas um task_id; você consulta o endpoint de resultado separadamente até que a tarefa seja concluída.
O preço é de $0,02 por imagem, consistente com o endpoint Qwen Image Edit. Verifique a taxa atual na página de preços da Novita AI antes de fazer uma estimativa de custo.
Passo 3: Envie sua Primeira Requisição
Envie um POST para o endpoint de geração com um prompt e um size opcional:
curl -s -X POST https://api.novita.ai/v3/async/qwen-image-txt2img \
-H "Authorization: Bearer $NOVITA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Uma paisagem montanhosa cinematográfica ao nascer do sol, luz dourada quente, ultra-detalhada, 8K",
"size": "1024*1024"
}'
Uma resposta 200 bem-sucedida retorna:
{
"task_id": "abc123..."
}
Salve o task_id. Você o usará no próximo passo.
Passo 4: Faça Polling para Obter o Resultado
Envie um GET para o endpoint de resultado da tarefa com o task_id como parâmetro de consulta:
curl -s "https://api.novita.ai/v3/async/task-result?task_id=abc123..." \
-H "Authorization: Bearer $NOVITA_API_KEY"
A resposta inclui um campo status. Continue fazendo polling até que o status seja TASK_STATUS_SUCCEED:
{
"task": {
"task_id": "abc123...",
"status": "TASK_STATUS_SUCCEED"
},
"images": [
{
"image_url": "https://...",
"image_url_ttl": "3600",
"image_type": "png"
}
]
}
A image_url é uma URL com tempo limitado — o valor image_url_ttl (em segundos) informa por quanto tempo ela permanece válida. Baixe a imagem imediatamente ou a sirva através de seu próprio armazenamento se precisar de acesso de longo prazo.
Valores de status a serem tratados:
| Status | Significado |
|---|---|
TASK_STATUS_QUEUED |
Requisição está na fila, ainda não iniciada |
TASK_STATUS_PROCESSING |
Geração em andamento |
TASK_STATUS_SUCCEED |
Imagem está pronta; leia images[0].image_url |
TASK_STATUS_FAILED |
Geração falhou; verifique task.reason |
Exemplo em Python: Ponta a Ponta
Este script envia uma requisição de geração, faz polling até a conclusão e imprime a URL da imagem.
import os
import time
import requests
API_KEY = os.environ["NOVITA_API_KEY"]
BASE_URL = "https://api.novita.ai"
def generate_image(prompt: str, size: str = "1024*1024") -> str:
response = requests.post(
f"{BASE_URL}/v3/async/qwen-image-txt2img",
headers={
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
},
json={"prompt": prompt, "size": size},
)
response.raise_for_status()
return response.json()["task_id"]
def poll_result(task_id: str, interval: float = 2.0, max_attempts: int = 60) -> str:
for _ in range(max_attempts):
response = requests.get(
f"{BASE_URL}/v3/async/task-result",
headers={"Authorization": f"Bearer {API_KEY}"},
params={"task_id": task_id},
)
response.raise_for_status()
data = response.json()
status = data["task"]["status"]
if status == "TASK_STATUS_SUCCEED":
return data["images"][0]["image_url"]
elif status == "TASK_STATUS_FAILED":
reason = data["task"].get("reason", "unknown")
raise RuntimeError(f"Geração falhou: {reason}")
time.sleep(interval)
raise TimeoutError(f"Tarefa {task_id} não foi concluída após {max_attempts} polls")
if __name__ == "__main__":
prompt = (
"Um cartaz com os dizeres 'Bem-vindo à Novita AI' em letras neon em negrito "
"contra um horizonte urbano escuro à noite, iluminação cinematográfica"
)
task_id = generate_image(prompt, size="1024*1024")
print(f"ID da Tarefa: {task_id}")
image_url = poll_result(task_id)
print(f"URL da Imagem: {image_url}")
Exemplo cURL
Padrão de dois comandos para o fluxo de trabalho completo:
# Passo 1: Enviar requisição de geração
TASK_ID=$(curl -s -X POST https://api.novita.ai/v3/async/qwen-image-txt2img \
-H "Authorization: Bearer $NOVITA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Um jardim japonês sereno com cerejeiras, lago de carpas, névoa matinal, estilo aquarela",
"size": "1024*1536"
}' | python3 -c "import sys,json; print(json.load(sys.stdin)['task_id'])")
echo "ID da Tarefa: $TASK_ID"
# Passo 2: Fazer polling até concluir
while true; do
STATUS=$(curl -s "https://api.novita.ai/v3/async/task-result?task_id=$TASK_ID" \
-H "Authorization: Bearer $NOVITA_API_KEY")
STATE=$(echo $STATUS | python3 -c "import sys,json; print(json.load(sys.stdin)['task']['status'])")
echo "Status: $STATE"
if [ "$STATE" = "TASK_STATUS_SUCCEED" ]; then
echo $STATUS | python3 -c "import sys,json; print(json.load(sys.stdin)['images'][0]['image_url'])"
break
elif [ "$STATE" = "TASK_STATUS_FAILED" ]; then
echo "Geração falhou"
break
fi
sleep 2
done
Parâmetros Principais
| Parâmetro | Tipo | Obrigatório | Padrão | Observações |
|---|---|---|---|---|
prompt |
string | Sim | — | Descrição textual da imagem a ser gerada. Suporta inglês e chinês. |
size |
string | Não | 1024*1024 |
Largura × altura em pixels, formatado como L*A. Cada dimensão: 256–1536. |
Opções de tamanho a considerar:
| Caso de uso | Tamanho recomendado |
|---|---|
| Quadrado (redes sociais, perfil) | 1024*1024 |
| Retrato (mobile, cartaz) | 1024*1536 |
| Paisagem (banner, miniatura) | 1536*1024 |
Não há parâmetros separados de negative_prompt, steps ou cfg_scale neste endpoint — o modelo lida com essas decisões internamente. Concentre seu prompt no que a imagem deve conter e em seu estilo visual.
O que o Qwen Image Gera Bem
A arquitetura MMDiT de 20B dá ao Qwen Image uma vantagem genuína em algumas áreas específicas:
Texto em imagens. A maioria dos modelos de geração de imagem tem dificuldade com texto legível — palavras ficam borradas, letras trocam e layouts de várias linhas colapsam. O Qwen Image lida com texto em inglês e chinês com precisão notavelmente melhor. Cartazes, placas, rótulos e gráficos legendados são casos de uso viáveis, não um lance de cara ou coroa.
Consistência semântica. Quando um prompt descreve uma cena com múltiplos elementos e relações espaciais específicas, o Qwen Image tende a honrar a intenção do layout de forma mais confiável do que arquiteturas menores ou mais antigas.
Seguimento de prompts em escala. Prompts longos e detalhados que descrevem múltiplos atributos — cena, iluminação, estilo, paleta de cores, objetos específicos — produzem saídas que refletem o prompt completo em vez de se ater a uma única palavra-chave.
Onde é menos adequado: fluxos de trabalho de geração em tempo real ou interativos. O padrão assíncrono implica latência inerente entre requisição e resultado. Se seu caso de uso requer feedback de sub-segundo, este endpoint não é a escolha certa.
Erros Comuns e Correções
401 Não Autorizado: Verifique se o cabeçalho Authorization está formatado como Bearer <chave> com um espaço após Bearer. Confirme se a chave está ativa no console Novita AI.
400 Requisição Inválida no size: O parâmetro size deve usar * como separador (ex.: 1024*1024), não x, × ou um array JSON. Cada dimensão deve estar entre 256 e 1536.
TASK_STATUS_FAILED sem motivo: Geralmente causado por um prompt que aciona a filtragem de conteúdo. Simplifique o prompt e tente novamente. Evite prompts com violência explícita, conteúdo sexual ou conteúdo que possa ativar filtros de segurança.
URL da imagem expirada (403 ou 404 na URL): O campo image_url_ttl informa por quanto tempo a URL é válida. Baixe a imagem imediatamente após o polling ser bem-sucedido, ou armazene-a em seu próprio armazenamento de objetos.
Polling lento: O tempo de geração varia com a carga do servidor. Começar o polling em intervalos de 2 segundos é razoável. Se a tarefa ainda estiver como TASK_STATUS_QUEUED após 10 segundos, continue fazendo polling — a profundidade da fila pode aumentar durante horários de pico.
Perguntas Frequentes
Existe um endpoint compatível com OpenAI para o Qwen Image txt2img?
Não. O endpoint /v3/async/qwen-image-txt2img usa a API de imagem assíncrona nativa da Novita AI, não o formato de geração de imagem do OpenAI. Se você precisar de geração de imagem compatível com OpenAI, a Novita AI oferece modelos FLUX e SDXL através de endpoints compatíveis — veja a documentação da Novita AI.
Qual é a diferença entre este endpoint e o endpoint Qwen Image Edit?
Este endpoint gera imagens apenas a partir de um prompt de texto — nenhuma imagem de entrada é necessária. O endpoint Qwen Image Edit recebe uma imagem existente mais uma instrução de texto e modifica a imagem de acordo. Use txt2img quando estiver criando do zero; use edit quando precisar alterar algo em uma imagem existente.
O modelo suporta proporções diferentes de quadrado?
Sim. Use o parâmetro size para definir largura e altura independentemente, entre 256 e 1536 pixels por dimensão. Proporções altas (ex.: 1024*1536) funcionam bem para conteúdo retrato; proporções largas (ex.: 1536*1024) são adequadas para banners e miniaturas.
Como obtenho resultados consistentes em múltiplas gerações?
Não há parâmetro seed no endpoint txt2img. Cada requisição produz um resultado diferente. Se você precisar de saída reproduzível, salve a URL da imagem imediatamente e armazene a imagem em seu próprio armazenamento, em vez de regenerar.
Posso usar esta API em um job em lote?
Sim. Envie múltiplas requisições de geração e colete os IDs das tarefas, depois faça polling delas em paralelo. Cada requisição retorna seu próprio task_id, então fluxos de trabalho em lote são diretos — você não precisa esperar uma terminar para enviar a próxima.
