Geração de imagens no OpenRouter com Open WebUI e SillyTavern: o que realmente funciona

O OpenRouter lista modelos de imagem da OpenAI, Google, ByteDance e Black Forest Labs, mas o Open WebUI e o SillyTavern se conectam a eles de forma diferente. Veja as configurações exatas, a solução com gateway para o Open WebUI, as opções de fonte e prefixo do SillyTavern, as armadilhas de custo e uma lista curta de erros comuns.

Geração de imagens no OpenRouter com Open WebUI e SillyTavern: o que realmente funciona
Cristian Da Conceicao
Fundador do Picasso IA

Você já paga pelos modelos de chat através do OpenRouter, então enviar pedidos de imagem pela mesma conta parece uma vitória fácil. Sem segunda assinatura, sem painel extra, um único saldo para acompanhar. O problema é que o Open WebUI e o SillyTavern acessam o OpenRouter de formas bem diferentes. O Open WebUI fala uma rota de imagens no estilo OpenAI, e a documentação que consultei nunca cita o OpenRouter como opção. O SillyTavern lista o OpenRouter como uma fonte de imagem pronta, mas diz pouco sobre a configuração. Este artigo apresenta os dois caminhos, marca os pontos em que a documentação fica em silêncio e oferece uma lista curta de verificação para o momento em que uma renderização volta em branco.

O que o OpenRouter oferece para imagens

O OpenRouter fica na frente de vários provedores, e seu catálogo agora inclui modelos de imagem do Google, OpenAI, Black Forest Labs, xAI, ByteDance, Microsoft, Recraft, Krea e Sourceful. Você recarrega um único saldo de créditos em vez de abrir uma conta em cada laboratório, e troca de modelo mudando uma única string.

Desenvolvedor em uma mesa de madeira com dois monitores mostrando janelas de chat desfocadas sob a luz quente do fim de tarde

Como funciona o endpoint de imagens

A documentação atual do OpenRouter descreve uma rota de imagem dedicada. Você envia uma requisição POST para /api/v1/images com seu token bearer, e o corpo traz os campos abaixo.

CampoO que faz
modelSlug do modelo, como bytedance-seed/seedream-4.5
promptA descrição em texto da imagem
aspect_ratioUma proporção normalizada, ou auto para deixar o provedor escolher
resolutionUm nível de 512 até 4K
sizeAtalho para pixels explícitos, como 2048x2048
qualityauto, low, medium ou high
output_formatpng, jpeg, webp ou svg
nNúmero de imagens, de 1 a 10
streamEnvia prévias parciais como server-sent events

A resposta coloca cada imagem em um array data como texto base64 dentro de b64_json, ao lado de um media_type como image/png e de um bloco usage com a contagem de tokens e o custo. Você não recebe um link hospedado. Qualquer camada entre o OpenRouter e sua interface precisa decodificar esse texto ou salvá-lo como arquivo, e esse detalhe explica vários dos erros mais adiante neste artigo.

Para trabalho de imagem para imagem, a mesma rota aceita input_references, que podem ser endereços HTTP(S) ou data URLs em base64.

💡 Dica: Tutoriais mais antigos descrevem a saída de imagem pela rota de chat com um parâmetro modalities, usando ["image", "text"] para modelos que também escrevem texto e ["image"] para modelos apenas de imagem. Se um tutorial e a documentação atual divergirem, confie na documentação e na página do modelo que você realmente está chamando.

Modelos que valem a pena testar

Comece com uma lista curta em vez de rolar todo o catálogo. Os IDs abaixo aparecem na documentação do OpenRouter ou em exemplos de gateway da comunidade, e a coluna da direita aponta para a mesma família de modelos no PicassoIA para que você teste os prompts antes.

ID do modelo no OpenRouterCriadorMesma família no PicassoIA
openai/gpt-image-2OpenAIGPT Image 2
bytedance-seed/seedream-4.5ByteDanceSeedream 4.5
black-forest-labs/flux.2-proBlack Forest LabsFLUX.2 Pro
google/gemini-2.5-flash-imageGoogleGemini 2.5 Flash Image

O catálogo muda com frequência. Antes de copiar qualquer ID, filtre a página de modelos do OpenRouter por saída de imagem e confirme o slug letra por letra.

Antes de conectar qualquer coisa

Dez minutos de preparação poupam uma noite de erros confusos. As duas interfaces precisam das mesmas duas coisas: um token que você pode descartar e uma ideia clara do que custa uma renderização.

Crie um token separado

Gere uma nova credencial do OpenRouter usada apenas para trabalho com imagens. Se uma interface registrar o token, um chat de roleplay entrar em loop ou você colar o token em uma captura de tela por engano, você revoga um único token e sua configuração de chat normal continua funcionando. Dê a ele o nome da interface, por exemplo um token para o Open WebUI e outro para o SillyTavern, para que o registro de atividade mostre qual aplicativo gastou o quê.

Mãos digitando em um notebook ao lado de um cartão de papel simples e um dispositivo de segurança USB sobre uma mesa de madeira

Confira créditos e cobrança

O OpenRouter afirma que a cobrança de imagens é tudo ou nada. Uma geração ou termina e é cobrada integralmente, ou falha e não é cobrada. As imagens de prévia parcial entregues durante uma requisição em streaming não geram cobranças parciais. Isso é uma boa notícia para tentativas que falham, mas também significa que um loop de renderizações bem-sucedidas consome o crédito pelo preço cheio, então mantenha um saldo pequeno enquanto testa.

Configuração do Open WebUI

O Open WebUI é o mais difícil dos dois, e o motivo não está na sua configuração. Tudo se resume a qual formato de requisição cada lado espera.

Onde ficam as configurações

Abra as Configurações de Administrador e encontre a seção Images. A documentação indica o caminho Settings, Admin, Experience, Images, e os nomes dos menus mudam entre versões, então procure por "Images" se o seu for diferente. Defina Image Generation Engine como Default (Open AI). Você verá estes campos:

  • API Base URL, o endereço para onde as requisições são enviadas
  • API credential, onde entra o seu token
  • Model, uma lista suspensa ou um nome digitado
  • Image Size, limitado ao que o engine permite

As listas de tamanhos documentadas para o engine da OpenAI são 256x256, 512x512 e 1024x1024 para o DALL·E 2, depois 1024x1024, 1792x1024 e 1024x1792 para o DALL·E 3, e auto, 1024x1024, 1536x1024 e 1024x1536 para os modelos GPT-Image.

O problema de incompatibilidade de rota

É aqui que as configurações costumam travar. O engine OpenAI do Open WebUI envia uma requisição no estilo OpenAI com campos como prompt, model, n, size, quality e um formato de resposta. A rota de imagem documentada do OpenRouter é a própria /api/v1/images, com campos diferentes como aspect_ratio e resolution. As páginas do Open WebUI que consultei descrevem a própria OpenAI, o Azure OpenAI, um proxy LiteLLM e um serviço no estilo Image Router. Nenhuma menciona o OpenRouter.

⚠️ Atenção: Não consegui confirmar que apontar o engine da OpenAI diretamente para o OpenRouter funciona em todas as versões. Trate a rota direta como um experimento. Envie uma imagem de teste, leia o erro exato e só então decida se você precisa de uma camada de tradução.

Você tem três opções realistas:

  1. Teste a rota direta. Digite https://openrouter.ai/api/v1 como base URL, cole seu token, digite manualmente um ID de modelo e gere uma imagem.
  2. Use um gateway de tradução. Um pequeno serviço aceita requisições de imagem no estilo OpenAI e as encaminha ao OpenRouter. A próxima seção mostra um deles.
  3. Use outro roteador de imagens compatível com OpenAI. O Open WebUI documenta esse padrão para serviços que copiam a sintaxe da OpenAI.

Usando um gateway no Docker

Existe um projeto da comunidade no Docker Hub chamado OpenRouter Image Gateway, criado exatamente para essa lacuna. Segundo a descrição, ele expõe POST /v1/images/generations, GET /v1/models e GET /health. Ele aceita parâmetros no estilo OpenAI (prompt, model, n, size, quality, response_format), encaminha seu token bearer ao OpenRouter, converte tamanhos em pixels para proporções do OpenRouter e devolve as imagens como b64_json ou como uma URL.

Com o gateway em execução, os campos do Open WebUI ficam assim:

Image Generation Engine: Default (Open AI)
API Base URL:  http://openrouter-image-gateway:8000/v1
API credential: <your OpenRouter token>
Model:         google/gemini-2.5-flash-image

Use http://openrouter-image-gateway:8000/v1 quando os dois contêineres compartilharem uma rede Docker, e http://localhost:8000/v1 para um teste local na mesma máquina.

⚠️ Atenção: Este é um software de terceiros, e ele verá seu token. Leia o código-fonte ou execute-o em uma máquina que você controla antes de confiar a ele uma credencial com saldo real. A descrição também menciona apenas texto para imagem, então não espere que a edição de imagens funcione por ele.

Mini PC compacto sobre uma prateleira de pinho ao lado de um roteador e cabos Ethernet enrolados, visto de cima

Escolhendo tamanhos e modelos

Digite você mesmo o nome do modelo em vez de usar a lista suspensa. As próprias instruções do Image Router no Open WebUI pedem exatamente isso para provedores que não são da OpenAI, porque a lista mostra nomes da OpenAI e nunca exibirá google/gemini-2.5-flash-image.

Para o tamanho, escolha a opção paisagem mais próxima do formato que você quer e confira o resultado. Quando um gateway fica no meio, ele converte sua escolha de pixels na proporção mais próxima, então um pedido de 1536x1024 pode voltar como uma imagem de proporção 3:2 em vez desses pixels exatos. Isso serve para o chat, mas confira antes de montar um fluxo de trabalho que depende de dimensões exatas.

Configuração do SillyTavern

O SillyTavern segue a abordagem oposta. A geração de imagens é uma extensão integrada, e o OpenRouter é uma das entradas na lista de fontes.

Escolha o OpenRouter como fonte

A documentação oficial lista o OpenRouter como uma fonte em nuvem, ao lado de OpenAI, Black Forest Labs, FAL.AI, Google, x.AI, Stability AI e outras. Abra o painel de Extensões, expanda Image Generation, escolha OpenRouter como fonte, insira seu token e selecione um modelo de imagem.

Saiba que a documentação não traz uma seção de configuração dedicada ao OpenRouter, ao contrário de fontes como a Stability AI. Os rótulos e a ordem dos campos podem mudar entre versões, então trate os passos acima como um mapa, não como um roteiro fixo.

Jovem escrevendo uma história em um notebook em um café de canto com chuva na janela

Modos de geração que você vai usar

O SillyTavern monta o prompt para você a partir do chat, e o modo define o que ele descreve.

ModoComando de barraO que você recebe
Você mesmoyouRetrato de corpo inteiro do personagem atual
Seu rostofaceRetrato em close do personagem atual
EumeRetrato da sua persona de usuário
A história completasceneResumo visual dos eventos do chat
A última mensagemlastResumo visual da última mensagem
Última mensagem brutaraw_lastÚltima mensagem enviada literalmente como prompt
Plano de fundobackgroundPlano de fundo do chat criado a partir do contexto da história

Você pode chegar a esse recurso de três formas: o item Image Generation no menu da varinha mágica, o comando /sd seguido de um modo ou do seu próprio texto livre, ou o ícone de pincel em uma mensagem específica para o modo bruto. O comando também aceita argumentos nomeados, por exemplo negative="blurry, extra fingers".

Quatro amigos ao redor de uma mesa de carvalho jogando um RPG de mesa com um notebook e miniaturas

Os modos scene e last combinam com chats cheios de história, em que uma única imagem pode resumir o que acabou de acontecer na mesa.

Prefixos que mantêm os personagens consistentes

Três caixas de texto determinam o quão estáveis suas imagens ficam de uma renderização para a outra:

  • Common Prompt Prefix é adicionado antes de cada prompt e define o estilo geral.
  • Character-Specific Prompt Prefix descreve a aparência de um personagem. Ele só funciona em chats individuais, não em grupos.
  • Negative Prompt lista o que você não quer ver.

Um par inicial que funciona fica assim. Prefixo comum: candid 35mm photograph, natural window light, fine film grain. Prefixo do personagem: woman in her thirties, freckles, loose auburn braid, denim jacket. Mantenha o prefixo do personagem curto e físico, e deixe o prefixo de estilo cuidar da iluminação e da linguagem de lente.

💡 Dica: A lista de campos do OpenRouter que revisei não tem um campo de prompt negativo, então essa caixa pode não fazer nada nesta fonte. Descreva o que você quer em termos positivos dentro do prompt principal.

Mesa de ilustrador vista de cima com retratos impressos, lápis de cor e um caderno de desenho

Prompts que funcionam nos dois

Qualquer que seja a interface, o modelo do outro lado lê um único prompt de texto. Um pouco de estrutura melhora os resultados nos dois aplicativos.

Escreva prompts fotográficos

Monte cada prompt com cinco partes: assunto, cenário, luz, lente e textura. Os prompts derivados do chat no SillyTavern tendem a ser resumos de história, que os modelos processam mal, então reescreva-os como uma descrição de câmera quando a imagem for importante.

Prompt fracoPrompt mais forte
a girl in a tavernwoman in a wool cloak at a candlelit tavern table, 35mm f/1.8, warm side light, wood grain and pewter cups in sharp focus
my roomsmall attic bedroom at dusk, low-angle shot, soft window light from the right, linen sheets, visible dust in the air
a battle scenetwo riders on a muddy road at dawn, 70mm lens, overcast light, wet leather and mud splashes, shallow depth of field

Se escrever tudo isso à mão parece lento, peça a um modelo de chat para fazer a reescrita. Claude Sonnet 5 e Gemini 3.5 Flash transformam um resumo bruto de cena em uma linha pronta para câmera em poucos segundos.

Ajuste a proporção ao trabalho

Escolha o formato antes de escolher o modelo. Uma proporção errada desperdiça uma renderização.

TrabalhoProporção sugeridaMotivo
Retrato de personagem2:3 ou 3:4Cabe em um quadro alto e em um recorte de rosto e ombros
Resumo de cena3:2 ou 16:9Espaço para o cenário completo
Fundo do chat16:9Combina com uma tela larga
Teste rápido no Open WebUI1:1Forma mais barata de confirmar que a rota funciona

Retrato em close de um artista conceitual olhando um monitor, iluminado suavemente por uma janela lateral

Custos e limites que surpreendem as pessoas

A maioria das contas surpreendentes vem das configurações, não dos preços. A tabela lista os suspeitos de sempre.

SituaçãoPor que custa maisO que fazer
Modo interativo no SillyTavernMensagens com um verbo como draw ou send seguido de um substantivo como photo ou picture disparam uma renderizaçãoDesligue para conversas casuais
n acima de 1Um pedido pode devolver até 10 imagensMantenha em 1 durante os testes
Níveis de alta resoluçãoO campo resolution chega até 4KComece com um nível menor e suba para as versões finais
Loops de nova tentativaExecuções que falham não são cobradas, mas os sucessos repetidos sãoPare depois de duas ou três tentativas e corrija o prompt

O modo interativo do SillyTavern merece uma segunda olhada. Ele observa verbos de ação como send, make, draw, paint, render, imagine, create e mail, seguidos em poucos caracteres por palavras como pic, picture, image, drawing, painting, photo ou photograph. Uma linha de roleplay que por acaso contém "draw a picture" pode gastar crédito sem que você aperte nada.

Vista de cima de uma mesa com calculadora, caderno, notebook e café sob uma luz suave de janela

💡 Dica: Confira sua página de atividade no OpenRouter depois das primeiras dez renderizações. Compare o custo por imagem com o que você esperava e ajuste o modelo e a resolução antes de uma sessão longa.

Corrigindo erros comuns

Quando uma imagem falha, a causa costuma ser uma de quatro coisas: a rota, o token, o slug do modelo ou o tratamento do base64.

Imagem em branco ou aviso de erro

Siga esta lista de verificação na ordem:

  1. Erro 404 ou 405. A interface está chamando uma rota que o servidor não tem. Revise a base URL e confira se você precisa do gateway.
  2. Erro 401. O token está errado, foi revogado ou o gateway não está encaminhando o cabeçalho bearer.
  3. Modelo não encontrado. O slug tem um erro de digitação ou um prefixo que falta. Copie-o do OpenRouter em vez de digitar de memória.
  4. O arquivo é salvo, mas não abre. O texto base64 foi guardado sem ser decodificado. Como o OpenRouter devolve b64_json, a camada intermediária precisa transformar isso em um arquivo de imagem ou em uma URL.
  5. Nada acontece. Abra o console do navegador ou o log do servidor e leia a primeira linha vermelha antes de mudar qualquer configuração.

Cabo Ethernet azul conectado a uma porta cinza de roteador com luzes indicadoras desfocadas atrás

Tamanho ou proporção errados retornados

O OpenRouter pensa em proporções e níveis de resolução, enquanto o Open WebUI pensa em pixels. Um gateway faz a tradução entre eles, e a tradução é aproximada. Se você precisar de um formato exato, chame o OpenRouter diretamente com aspect_ratio e resolution, ou recorte depois. Quando a imagem parecer esticada, confira se a interface está forçando uma caixa de exibição fixa antes de culpar o modelo.

Teste prompts antes de gastar créditos

Toda renderização desperdiçada custa dinheiro de verdade, então ajuste seus prompts onde iterar é barato. O PicassoIA reúne GPT Image 2, Seedream 4.5, FLUX.2 Pro e Gemini 2.5 Flash Image em um só lugar, para que você compare o mesmo prompt entre criadores antes de escolher um para um prefixo do SillyTavern ou um padrão do Open WebUI.

Aqui está uma rotina rápida que funciona:

  1. Abra a página de um modelo no PicassoIA e cole seu prompt mais forte, no estilo de câmera.
  2. Defina a proporção que você pretende usar no chat, como 2:3 para retratos ou 16:9 para fundos.
  3. Gere duas ou três variações e anote quais frases mudaram mais o resultado.
  4. Rode o mesmo prompt em um segundo modelo e fique com o que melhor combina com seu personagem.
  5. Copie a formulação vencedora para o seu Common Prompt Prefix ou para o prompt do Open WebUI e depois troque para o OpenRouter na sessão longa.

Pronto para testar? Abra o PicassoIA, rode seus três prompts favoritos em dois modelos e veja qual deles ganha um lugar na sua configuração.

Compartilhe este artigo

Escolha seu idioma