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.
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.
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.
Campo
O que faz
model
Slug do modelo, como bytedance-seed/seedream-4.5
prompt
A descrição em texto da imagem
aspect_ratio
Uma proporção normalizada, ou auto para deixar o provedor escolher
resolution
Um nível de 512 até 4K
size
Atalho para pixels explícitos, como 2048x2048
quality
auto, low, medium ou high
output_format
png, jpeg, webp ou svg
n
Número de imagens, de 1 a 10
stream
Envia 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.
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ê.
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:
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.
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.
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.
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.
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.
Modo
Comando de barra
O que você recebe
Você mesmo
you
Retrato de corpo inteiro do personagem atual
Seu rosto
face
Retrato em close do personagem atual
Eu
me
Retrato da sua persona de usuário
A história completa
scene
Resumo visual dos eventos do chat
A última mensagem
last
Resumo visual da última mensagem
Última mensagem bruta
raw_last
Última mensagem enviada literalmente como prompt
Plano de fundo
background
Plano 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".
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.
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 fraco
Prompt mais forte
a girl in a tavern
woman 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 room
small attic bedroom at dusk, low-angle shot, soft window light from the right, linen sheets, visible dust in the air
a battle scene
two 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.
Trabalho
Proporção sugerida
Motivo
Retrato de personagem
2:3 ou 3:4
Cabe em um quadro alto e em um recorte de rosto e ombros
Resumo de cena
3:2 ou 16:9
Espaço para o cenário completo
Fundo do chat
16:9
Combina com uma tela larga
Teste rápido no Open WebUI
1:1
Forma mais barata de confirmar que a rota funciona
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ção
Por que custa mais
O que fazer
Modo interativo no SillyTavern
Mensagens com um verbo como draw ou send seguido de um substantivo como photo ou picture disparam uma renderização
Desligue para conversas casuais
n acima de 1
Um pedido pode devolver até 10 imagens
Mantenha em 1 durante os testes
Níveis de alta resolução
O campo resolution chega até 4K
Comece com um nível menor e suba para as versões finais
Loops de nova tentativa
Execuções que falham não são cobradas, mas os sucessos repetidos são
Pare 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.
💡 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:
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.
Erro 401. O token está errado, foi revogado ou o gateway não está encaminhando o cabeçalho bearer.
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.
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.
Nada acontece. Abra o console do navegador ou o log do servidor e leia a primeira linha vermelha antes de mudar qualquer configuração.
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:
Abra a página de um modelo no PicassoIA e cole seu prompt mais forte, no estilo de câmera.
Defina a proporção que você pretende usar no chat, como 2:3 para retratos ou 16:9 para fundos.
Gere duas ou três variações e anote quais frases mudaram mais o resultado.
Rode o mesmo prompt em um segundo modelo e fique com o que melhor combina com seu personagem.
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.