Génération d’images OpenRouter dans Open WebUI et SillyTavern : ce qui fonctionne vraiment
OpenRouter propose des modèles d’images d’OpenAI, Google, ByteDance et Black Forest Labs, mais Open WebUI et SillyTavern s’y connectent différemment. Découvrez les réglages exacts, la passerelle de contournement pour Open WebUI, les options de source et de préfixe de SillyTavern, les pièges de coût et une courte liste d’erreurs à vérifier.
Vous payez déjà vos modèles de chat via OpenRouter, alors envoyer vos requêtes d’images par le même compte semble une solution simple. Pas d’abonnement supplémentaire, pas de tableau de bord en plus, un seul solde à surveiller. Le hic, c’est que Open WebUI et SillyTavern atteignent OpenRouter de manières très différentes. Open WebUI utilise une route d’images de type OpenAI, et la documentation que j’ai consultée ne cite jamais OpenRouter comme option. SillyTavern présente OpenRouter comme une source d’images prête à l’emploi, mais en dit peu sur la configuration. Cet article détaille les deux chemins, signale les points où la documentation reste muette et vous donne une courte liste de vérifications pour le moment où un rendu revient vide.
Ce qu’OpenRouter propose pour les images
OpenRouter se place devant de nombreux fournisseurs, et son catalogue comprend désormais des modèles d’images de Google, OpenAI, Black Forest Labs, xAI, ByteDance, Microsoft, Recraft, Krea et Sourceful. Vous rechargez un seul solde de crédits au lieu d’ouvrir un compte chez chaque laboratoire, et vous changez de modèle en modifiant une seule chaîne de caractères.
Fonctionnement du point de terminaison d’images
La documentation actuelle d’OpenRouter décrit une route dédiée aux images. Vous envoyez une requête POST à /api/v1/images avec votre jeton bearer, et le corps contient les champs ci-dessous.
Champ
Rôle
model
Identifiant du modèle, par exemple bytedance-seed/seedream-4.5
prompt
La description textuelle de l’image
aspect_ratio
Un format normalisé, ou auto pour laisser le fournisseur choisir
resolution
Un palier allant de 512 jusqu’à 4K
size
Raccourci pour des pixels explicites, comme 2048x2048
quality
auto, low, medium ou high
output_format
png, jpeg, webp ou svg
n
Nombre d’images, de 1 à 10
stream
Envoie des aperçus partiels sous forme d’événements envoyés par le serveur
La réponse place chaque image dans un tableau data sous forme de texte base64 dans b64_json, à côté d’un media_type tel que image/png et d’un bloc usage contenant le nombre de tokens et le coût. Vous n’obtenez aucun lien hébergé. Tout ce qui se trouve entre OpenRouter et votre interface doit décoder ce texte ou l’enregistrer en fichier, et ce détail explique plusieurs des erreurs abordées plus loin dans cet article.
Pour les travaux d’image vers image, la même route accepte input_references, qui peuvent être des adresses HTTP(S) ou des URL de données base64.
💡 Astuce : Les anciens tutoriels décrivent la sortie d’images via la route de chat avec un paramètre modalities, en utilisant ["image", "text"] pour les modèles qui écrivent aussi du texte et ["image"] pour les modèles qui ne produisent que des images. Si un tutoriel et la documentation actuelle se contredisent, faites confiance à la documentation et à la page du modèle que vous appelez réellement.
Modèles à essayer
Commencez par une courte sélection plutôt que de parcourir tout le catalogue. Les identifiants ci-dessous figurent dans la documentation d’OpenRouter ou dans des exemples de passerelles communautaires, et la colonne de droite renvoie à la même famille de modèles sur PicassoIA pour que vous puissiez d’abord tester vos prompts.
Le catalogue change souvent. Avant de copier un identifiant, filtrez la page des modèles d’OpenRouter sur la sortie image et vérifiez le slug lettre par lettre.
Avant de vous connecter
Dix minutes de préparation vous épargnent une soirée d’erreurs déroutantes. Les deux interfaces ont besoin des mêmes deux choses : un jeton que vous pouvez jeter sans regret et une idée claire du coût d’un rendu.
Créer un jeton séparé
Générez un nouvel identifiant OpenRouter réservé aux travaux d’images. Si une interface le journalise, qu’un chat de jeu de rôle boucle ou que vous le collez par accident dans une capture d’écran, vous révoquez un seul jeton et votre configuration de chat habituelle continue de fonctionner. Nommez-le d’après l’interface, par exemple un jeton pour Open WebUI et un pour SillyTavern, afin que le journal d’activité indique quelle application a dépensé quoi.
Vérifier les crédits et la facturation
OpenRouter indique que la facturation des images est du tout ou rien. Une génération soit aboutit et est facturée en totalité, soit échoue et n’est pas facturée. Les images d’aperçu partielles livrées pendant une requête en flux ne créent pas de frais partiels. C’est une bonne nouvelle pour les tentatives échouées, mais une boucle de rendus réussis vide le crédit au plein tarif, donc gardez un petit solde pendant vos tests.
Configuration d’Open WebUI
Open WebUI est le plus délicat des deux, et la raison ne tient pas à votre configuration. Tout vient du format de requête attendu de chaque côté.
Où se trouvent les réglages
Ouvrez les Paramètres d’administration et trouvez la section Images. La documentation indique le chemin Paramètres, Admin, Experience, Images, et les noms de menus changent d’une version à l’autre, donc cherchez « Images » si le vôtre diffère. Réglez Image Generation Engine sur Default (Open AI). Vous verrez ces champs :
API Base URL, l’adresse à laquelle les requêtes sont envoyées
API credential, où votre jeton est saisi
Model, une liste déroulante ou un nom saisi
Image Size, limité à ce que le moteur permet
Les tailles documentées pour le moteur OpenAI sont 256x256, 512x512 et 1024x1024 pour DALL·E 2, puis 1024x1024, 1792x1024 et 1024x1792 pour DALL·E 3, et auto, 1024x1024, 1536x1024 et 1024x1536 pour les modèles GPT-Image.
Le problème de décalage de route
C’est ici que les configurations bloquent. Le moteur OpenAI d’Open WebUI envoie une requête de type OpenAI avec des champs tels que prompt, model, n, size, quality et un format de réponse. La route d’images documentée par OpenRouter est la sienne, /api/v1/images, avec des champs différents comme aspect_ratio et resolution. Les pages d’Open WebUI que j’ai consultées décrivent OpenAI lui-même, Azure OpenAI, un proxy LiteLLM et un service de type Image Router. Aucune ne mentionne OpenRouter.
⚠️ Attention : Je n’ai pas pu confirmer que diriger le moteur OpenAI directement vers OpenRouter fonctionne dans toutes les versions. Considérez la route directe comme une expérience. Envoyez une image de test, lisez l’erreur exacte, et seulement ensuite décidez si vous avez besoin d’une couche de traduction.
Vous disposez de trois options réalistes :
Tester la route directe. Saisissez https://openrouter.ai/api/v1 comme URL de base, collez votre jeton, tapez manuellement un identifiant de modèle et générez une seule image.
Utiliser une passerelle de traduction. Un petit service accepte les requêtes d’images de type OpenAI et les transmet à OpenRouter. La section suivante en présente une.
Utiliser un autre routeur d’images compatible OpenAI. Open WebUI documente ce schéma pour les services qui reprennent la syntaxe OpenAI.
Utiliser une passerelle dans Docker
Un projet communautaire sur Docker Hub, appelé OpenRouter Image Gateway, existe précisément pour combler cette lacune. D’après sa description, il expose POST /v1/images/generations, GET /v1/models et GET /health. Il accepte des paramètres de type OpenAI (prompt, model, n, size, quality, response_format), transmet votre jeton bearer à OpenRouter, convertit les tailles en pixels en formats OpenRouter et renvoie les images sous forme de b64_json ou d’URL.
Une fois la passerelle lancée, les champs d’Open WebUI ressemblent à ceci :
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
Utilisez http://openrouter-image-gateway:8000/v1 lorsque les deux conteneurs partagent un réseau Docker, et http://localhost:8000/v1 pour un test local sur la même machine.
⚠️ Attention : Ce logiciel est tiers et il verra votre jeton. Lisez son code source ou exécutez-le sur une machine que vous contrôlez avant de lui confier un identifiant doté d’un vrai solde. La description ne mentionne que la génération texte vers image, donc ne vous attendez pas à ce que la retouche d’images fonctionne par ce biais.
Choisir la taille et le modèle
Saisissez vous-même le nom du modèle au lieu d’utiliser la liste déroulante. Les propres instructions d’Open WebUI pour Image Router demandent exactement cela pour les fournisseurs autres qu’OpenAI, car la liste affiche les noms OpenAI et n’affichera jamais google/gemini-2.5-flash-image.
Pour la taille, choisissez l’option paysage la plus proche de la forme souhaitée, puis vérifiez le résultat. Quand une passerelle intervient, elle fait correspondre votre choix en pixels au format le plus proche, si bien qu’une demande en 1536x1024 peut revenir sous forme d’image propre en 3:2 plutôt qu’aux pixels exacts. C’est acceptable pour le chat, mais vérifiez avant de construire un flux de travail autour de dimensions précises.
Configuration de SillyTavern
SillyTavern adopte l’approche inverse. La génération d’images est une extension intégrée, et OpenRouter figure parmi les entrées de sa liste de sources.
Choisir OpenRouter comme source
La documentation officielle répertorie OpenRouter comme source cloud, aux côtés d’OpenAI, Black Forest Labs, FAL.AI, Google, x.AI, Stability AI et d’autres. Ouvrez le panneau Extensions, développez Image Generation, sélectionnez OpenRouter comme source, saisissez votre jeton et choisissez un modèle d’images.
Gardez à l’esprit que la documentation ne consacre aucune section de configuration dédiée à OpenRouter, contrairement à des sources comme Stability AI. Les libellés et l’ordre des champs peuvent varier d’une version à l’autre, donc considérez les étapes ci-dessus comme une carte et non comme un script à suivre à la lettre.
Les modes de génération que vous utiliserez
SillyTavern construit le prompt à partir du chat pour vous, et le mode détermine ce qu’il décrit.
Mode
Commande slash
Ce que vous obtenez
Yourself
you
Portrait en pied du personnage actuel
Your Face
face
Portrait en gros plan du personnage actuel
Me
me
Portrait de votre persona d’utilisateur
The Whole Story
scene
Récapitulatif visuel des événements du chat
The Last Message
last
Récapitulatif visuel du dernier message
Raw Last Message
raw_last
Dernier message envoyé tel quel comme prompt
Background
background
Arrière-plan du chat construit à partir du contexte de l’histoire
Vous pouvez accéder à ces modes de trois façons : l’élément Image Generation du menu baguette, la commande /sd suivie d’un mode ou de votre propre texte libre, ou l’icône pinceau sur un message unique pour le mode brut. La commande accepte aussi des arguments nommés, par exemple negative="blurry, extra fingers".
Les modes scene et last conviennent aux chats riches en histoire, où une seule image peut résumer ce qui vient de se passer à la table.
Des préfixes pour garder les personnages cohérents
Trois zones de texte déterminent la stabilité de vos images d’un rendu à l’autre :
Common Prompt Prefix est ajouté avant chaque prompt et définit le style général.
Character-Specific Prompt Prefix décrit l’apparence d’un personnage. Il ne fonctionne que dans les chats en tête-à-tête, pas dans les groupes.
Negative Prompt liste ce que vous ne voulez pas voir.
Une paire de départ fonctionnelle ressemble à ceci. Préfixe commun : candid 35mm photograph, natural window light, fine film grain. Préfixe de personnage : woman in her thirties, freckles, loose auburn braid, denim jacket. Gardez le préfixe de personnage court et physique, et laissez le préfixe de style porter le vocabulaire de l’éclairage et de l’objectif.
💡 Astuce : La liste des champs OpenRouter que j’ai examinée ne contient aucun champ de prompt négatif, donc cette zone risque de ne rien faire avec cette source. Décrivez plutôt ce que vous voulez en termes positifs dans le prompt principal.
Des prompts qui fonctionnent dans les deux
Quelle que soit l’interface utilisée, le modèle en face lit un seul prompt textuel. Un peu de structure améliore les résultats dans les deux applications.
Écrire des prompts photographiques
Construisez chaque prompt à partir de cinq éléments : le sujet, le décor, la lumière, l’objectif et la texture. Les prompts issus du chat dans SillyTavern tendent à être des résumés d’histoire, que les modèles gèrent mal. Réécrivez-les donc en description de caméra lorsque l’image compte.
Prompt faible
Prompt plus efficace
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
Si rédiger tout cela à la main vous semble lent, demandez à un modèle de chat de le faire. Claude Sonnet 5 et Gemini 3.5 Flash transforment tous deux un récapitulatif de scène brut en une ligne prête pour la caméra en quelques secondes.
Adapter le format à la tâche
Choisissez la forme avant le modèle. Un mauvais format gaspille un rendu.
Tâche
Format suggéré
Raison
Portrait de personnage
2:3 ou 3:4
S’adapte à un cadre haut et à un recadrage visage et épaules
Récapitulatif de scène
3:2 ou 16:9
Laisse de la place pour le décor complet
Arrière-plan de chat
16:9
Correspond à un écran large
Test rapide d’Open WebUI
1:1
Moyen le moins coûteux de vérifier que la route fonctionne
Coûts et limites qui surprennent
La plupart des factures surprenantes viennent des réglages, pas des tarifs. Le tableau liste les coupables habituels.
Situation
Pourquoi cela coûte plus cher
Que faire
Mode interactif dans SillyTavern
Les messages contenant un verbe d’action comme draw ou send suivi d’un nom comme photo ou picture déclenchent un rendu
Désactivez-le pour les discussions informelles
n supérieur à 1
Une seule requête peut renvoyer jusqu’à 10 images
Gardez-le à 1 pendant les tests
Paliers haute résolution
Le champ resolution monte jusqu’à 4K
Commencez par un palier plus bas et montez-le pour les versions finales
Boucles de nouvelles tentatives
Les essais échoués ne sont pas facturés, mais les succès répétés le sont
Arrêtez après deux ou trois tentatives et corrigez le prompt
Le mode interactif de SillyTavern mérite un second regard. Il repère des verbes d’action comme send, make, draw, paint, render, imagine, create et mail, suivis à moins de quelques caractères de mots comme pic, picture, image, drawing, painting, photo ou photograph. Une réplique de jeu de rôle qui contient par hasard « draw a picture » peut consommer du crédit sans que vous appuyiez sur quoi que ce soit.
💡 Astuce : Vérifiez votre page d’activité OpenRouter après les dix premiers rendus. Comparez le coût par image à ce que vous attendiez, puis ajustez le modèle et la résolution avant une longue session.
Corriger les erreurs courantes
Quand une image échoue, la cause tient en général à l’une de quatre choses : la route, le jeton, le slug du modèle ou la gestion du base64.
Image vierge ou message d’erreur
Suivez cette liste de vérifications dans l’ordre :
Erreur 404 ou 405. L’interface appelle une route que le serveur ne possède pas. Revérifiez l’URL de base et déterminez si vous avez besoin de la passerelle.
Erreur 401. Le jeton est incorrect, a été révoqué, ou la passerelle ne transmet pas l’en-tête bearer.
Modèle introuvable. Le slug contient une faute de frappe ou un préfixe manquant. Copiez-le depuis OpenRouter au lieu de le taper de mémoire.
Le fichier s’enregistre mais ne s’ouvre pas. Le texte base64 a été stocké sans être décodé. Comme OpenRouter renvoie b64_json, la couche intermédiaire doit le transformer en fichier image ou en URL.
Rien ne se passe du tout. Ouvrez la console de votre navigateur ou le journal du serveur et lisez la première ligne rouge avant de modifier les réglages.
Taille ou format incorrect renvoyé
OpenRouter raisonne en formats et en paliers de résolution, tandis qu’Open WebUI raisonne en pixels. Une passerelle fait la conversion entre les deux, et cette conversion reste approximative. Si vous avez besoin d’une forme exacte, appelez OpenRouter directement avec aspect_ratio et resolution, ou recadrez ensuite. Si l’image paraît étirée, vérifiez d’abord que l’interface n’impose pas une boîte d’affichage fixe avant d’incriminer le modèle.
Testez vos prompts avant de dépenser des crédits
Chaque rendu raté coûte de l’argent réel, alors réglez vos prompts là où l’itération est bon marché. PicassoIA réunit GPT Image 2, Seedream 4.5, FLUX.2 Pro et Gemini 2.5 Flash Image au même endroit, ce qui vous permet de comparer le même prompt entre éditeurs avant d’en retenir un pour un préfixe SillyTavern ou un réglage par défaut d’Open WebUI.
Voici une routine rapide qui fonctionne :
Ouvrez une page de modèle sur PicassoIA et collez votre prompt plus efficace, de style photographique.
Réglez le format que vous comptez utiliser dans le chat, par exemple 2:3 pour les portraits ou 16:9 pour les arrière-plans.
Générez deux ou trois variantes et notez les formulations qui ont le plus changé le résultat.
Lancez le même prompt sur un second modèle et gardez celui qui correspond le mieux à votre personnage.
Copiez la formulation gagnante dans votre Common Prompt Prefix ou dans votre prompt par défaut d’Open WebUI, puis basculez sur OpenRouter pour la longue session.
Prêt à essayer ? Ouvrez PicassoIA, faites passer vos trois prompts favoris par deux modèles et voyez lequel mérite une place dans votre configuration.