Génération d’images avec OpenRouter : modèles, API et tarifs
OpenRouter réunit derrière un seul endpoint des modèles d’image de Google, OpenAI, Black Forest Labs, ByteDance et d’autres. Cet article présente le format des requêtes, les paramètres qui modifient la qualité et le coût, l’écart de prix entre les modèles, et les cas où une plateforme dédiée aux images convient mieux.
OpenRouter s’est fait un nom comme porte d’accès unique à des centaines de modèles de texte, et il fait désormais de même pour les images. Un compte, une facture et une même structure de requête vous permettent de passer d’un modèle d’image à l’autre (Google, OpenAI, Black Forest Labs, ByteDance et d’autres) en changeant une seule chaîne de caractères. Ce confort est réel, mais quelques détails déterminent si une fonctionnalité d’image reste bon marché ou devient discrètement coûteuse.
Cet article vous guide dans la génération d’images avec OpenRouter, de la première requête à la facture mensuelle : les modèles au choix, l’appel API exact, les paramètres qui modifient la qualité et un regard franc sur le coût d’une image. Il montre aussi quand une plateforme dédiée comme PicassoIA convient mieux, si vous préférez un contrôle depuis le navigateur plutôt que du code.
Ce que fait la génération d’images avec OpenRouter
Un seul endpoint, de nombreux fournisseurs
La génération d’images sur OpenRouter passe par un endpoint dédié, POST /api/v1/images. Vous envoyez un slug de modèle model et un prompt, et les données d’image au format base64 vous sont renvoyées. Derrière cette porte unique se trouvent des fournisseurs distincts, chacun avec son propre modèle, ses limites et son prix. OpenRouter gère le routage, l’authentification et la facturation, si bien que votre code ne dialogue jamais directement avec ces fournisseurs.
Le catalogue est vaste. Au moment de la rédaction, il comprend des modèles d’image de Google, OpenAI, Black Forest Labs, xAI, ByteDance, Microsoft, Recraft, Krea et Sourceful, et la liste change souvent. Filtrer la liste publique des modèles d’OpenRouter par sortie image permet de voir ce qui est disponible à un moment donné.
À qui cela convient le mieux
Une passerelle unique est utile dans quelques situations :
Prototypage : testez cinq modèles avec le même prompt sans ouvrir cinq comptes.
Solutions de repli : si un fournisseur est lent ou en panne, envoyez la même requête ailleurs.
Facturation unifiée : une seule facture au lieu d’une par éditeur.
Pipelines mixtes : une application qui envoie déjà des prompts textuels via OpenRouter peut ajouter des images avec le même token.
Elle est moins utile lorsque vous avez besoin d’un éditeur visuel, d’une galerie des résultats passés ou d’un contrôle manuel de chaque réglage. C’est un travail pour le navigateur, auquel nous revenons vers la fin.
Appeler l’endpoint images
La plus petite requête fonctionnelle
Il vous faut un compte OpenRouter, un token secret avec des crédits et un slug de modèle. Stockez le token dans une variable d’environnement. Cet article l’appelle OPENROUTER_TOKEN, mais vous êtes libre de choisir ce nom.
curl -X POST "https://openrouter.ai/api/v1/images" \
-H "Authorization: Bearer $OPENROUTER_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"model": "bytedance-seed/seedream-4.5",
"prompt": "a red panda astronaut floating in space"
}'
C’est la requête complète. Le slug suit le modèle author/model-name, et ici il pointe vers Seedream 4.5. Tout le reste est facultatif, ce qui explique qu’un premier test prenne environ deux minutes.
Les paramètres qui modifient le résultat
L’endpoint images accepte une longue liste de champs facultatifs. Voici ceux qui comptent le plus :
Paramètre
Ce qu’il contrôle
Valeurs d’exemple
resolution
Palier de taille de sortie
512, 768, 1K, 2K, 4K
aspect_ratio
Forme du cadre
1:1, 16:9, 9:16, 4:3, 3:4
size
Raccourci pour un palier ou des pixels explicites
Un nom de palier ou une largeur et une hauteur
quality
Effort de rendu
auto, low, medium, high
output_format
Type de fichier
png, jpeg, webp, svg
background
Transparence
auto, transparent, opaque
output_compression
Taille du fichier pour webp et jpeg
0 à 100
n
Images par requête
1 à 10, si pris en charge
seed
Sortie reproductible
Tout entier, si pris en charge
input_references
Images de référence pour le travail image vers image
Une liste d’images
stream
Aperçus partiels via server-sent events
true ou false
Tous les modèles n’acceptent pas tous les champs. Chaque modèle dispose d’une route endpoints qui liste les paramètres pris en charge, les tarifs et la disponibilité du streaming. Lisez-la avant de vous fier à un réglage. Le format de sortie svg n’a de sens qu’avec les modèles capables de produire du vectoriel.
Le streaming mérite une mention à part. Avec stream activé, l’endpoint envoie les images partielles au fur et à mesure de leur formation, si bien qu’une interface peut afficher un aperçu approximatif en quelques instants au lieu d’un simple spinner vide. Les aperçus sont gratuits : seule une image finie est facturée. Si votre application a un écran d’attente, c’est le moyen le moins cher de la rendre plus réactive.
💡 Astuce : Changez une seule chose à la fois. Si vous changez le modèle et le prompt ensemble, vous ne saurez pas lequel a modifié le résultat. Fixez un seed lorsque le modèle le permet et ne faites varier qu’un champ par essai.
Lire la réponse
Les images arrivent sous forme de texte base64 dans un tableau data. Chaque élément contient b64_json, les octets encodés, et media_type, comme image/png ou image/svg+xml. La réponse comprend aussi un objet usage, et usage.cost indique ce que cette tâche a facturé.
import base64, os, requests
resp = requests.post(
"https://openrouter.ai/api/v1/images",
headers={"Authorization": f"Bearer {os.environ['OPENROUTER_TOKEN']}"},
json={
"model": "bytedance-seed/seedream-4.5",
"prompt": "a ceramic mug on a marble counter, soft window light",
"aspect_ratio": "16:9",
},
timeout=120,
)
resp.raise_for_status()
body = resp.json()
image = body["data"][0]
with open("mug.png", "wb") as f:
f.write(base64.b64decode(image["b64_json"]))
print(image["media_type"], body["usage"]["cost"])
Décodez les octets, écrivez-les sur le disque ou dans un stockage objet, et consignez usage.cost à côté du prompt qui les a produits. Après une semaine, ce journal est une liste de prix plus honnête que n’importe quelle page tarifaire.
Les tâches d’image prennent plus de temps que les appels de texte. Réglez donc un délai d’attente côté client généreux, comme le fait l’exemple ci-dessus avec 120 secondes. Un délai par défaut de quelques secondes couperait des résultats tout à fait valables.
Modèles à essayer
Les fournisseurs du catalogue
Voici comment s’alignent les principaux fournisseurs, avec les pages de modèles correspondantes sur PicassoIA lorsqu’elles existent :
Google : la famille d’images Gemini. Le slug google/gemini-2.5-flash-image apparaît dans les exemples d’OpenRouter, et le même modèle est disponible sur PicassoIA sous le nom Gemini 2.5 Flash Image.
OpenAI : GPT Image, où le réglage de qualité fait beaucoup varier le prix. Voir GPT Image 2.
Black Forest Labs : la gamme Flux, par exemple Flux 2 Pro.
Recraft : des modèles adaptés au vectoriel, capables de renvoyer du SVG, comme Recraft v4.1.
xAI, Microsoft, Krea et Sourceful : Grok Imagine, MAI-Image, les modèles de Krea et Riverflow, que vous ne trouverez le plus souvent qu’au travers de passerelles comme OpenRouter.
Pour récupérer la liste en direct depuis votre code, appelez la route des modèles. Pour examiner les fournisseurs, les paramètres et les prix d’un modèle, ajoutez son slug et /endpoints :
Fonctionne à partir de prompts et de photos de référence
Les forces évoluent à chaque version, alors testez vos propres prompts avant de confier un projet à un seul modèle. Un test sérieux prend environ une heure :
Rédigez dix prompts tirés de votre travail réel, pas d’exemples fictifs, dont deux avec du texte dans l’image et deux avec des personnes.
Lancez chaque prompt sur les mêmes trois modèles avec des valeurs aspect_ratio et resolution identiques.
Consignez usage.cost et le nombre de secondes pris par chaque tâche.
Notez les résultats à l’aveugle, noms de modèles masqués, puis divisez le coût total par le nombre d’images que vous publieriez réellement.
Ce dernier chiffre, le coût par image utilisable, tranche le débat. Un modèle à $0.02 qui demande quatre essais pour atteindre le résultat coûte $0.08 par image utilisable, soit deux fois plus qu’un modèle à $0.04 qui y parvient du premier coup.
Le coût réel d’une image
L’écart de prix
Le tutoriel d’OpenRouter a chiffré une image aux réglages par défaut pour 20 modèles. La fourchette allait de $0.006 à $0.134, soit un écart de 22 fois. Les modèles les moins chers commencent autour d’un centime par image. Cet écart pèse bien plus sur votre facture que la longueur du prompt, les nouvelles tentatives ou une astuce de mise en cache ingénieuse.
Dans la pratique, cet écart répartit les modèles en deux groupes. Les modèles de brouillon, proches d’un centime par image, conviennent aux idées, aux miniatures et aux tests rapides. Les modèles premium, plus proches du haut de la fourchette, conviennent aux rendus finaux et aux visuels phares. Beaucoup d’équipes combinent les deux : brouillon avec les modèles bon marché, rendu avec les modèles premium.
Trois modes de facturation
Les modèles ne facturent pas tous de la même manière :
À l’image : un prix forfaitaire pour chaque résultat, quelle que soit la taille.
Au mégapixel : le prix augmente avec la résolution, donc la 4K coûte plus cher que la 1K.
Au token : les tokens d’entrée et de sortie sont comptés. Selon les tarifs publiés au moment de la rédaction, GPT-5.4 Image 2 facture $8.00 par million de tokens d’entrée et $15.00 par million de tokens de sortie, la sortie image étant à $30.00 par million de tokens.
La facturation au token est la plus difficile à prévoir. La longueur du prompt, les images de référence et le réglage de qualité entrent tous dans le total, si bien que usage.cost est le seul chiffre vraiment fiable. Les prix changent : vérifiez la page du modèle avant de prévoir un budget.
Les tâches échouées ne coûtent rien
La facturation est tout ou rien. Une génération soit se termine et est facturée en totalité, soit échoue et n’est pas facturée. Les streams annulés ne sont pas facturés non plus, et les aperçus partiels reçus avant la fin d’un stream ne créent pas de facturation partielle. Cela rend les nouvelles tentatives plus sûres qu’il n’y paraît : vous ne payez qu’une fois le résultat que vous gardez. Gérez malgré tout les erreurs correctement. Vérifiez le statut HTTP, attendez avant de relancer une tâche en échec, et arrêtez après quelques tentatives pour qu’un mauvais prompt ne tourne pas en boucle indéfiniment.
Calcul du budget pour 1 000 images
Prenez trois prix dans cette fourchette et multipliez-les :
Prix par image
1 000 images
10 000 images
$0.006
$6
$60
$0.04
$40
$400
$0.134
$134
$1 340
💡 Astuce : Ajoutez votre taux de nouvelles tentatives. Si un prompt sur trois nécessite une seconde tentative parce que le premier résultat est passé à côté, ajoutez environ un tiers au budget. Les tâches échouées ne coûtent rien, mais les résultats décevants, eux, coûtent.
3 erreurs qui gonflent votre facture
Laisser la qualité en mode automatique
Avec quality réglé sur auto, c’est le fournisseur qui décide de l’effort à fournir. Sur les modèles dont le prix suit la qualité, un résultat high peut coûter bien plus cher qu’un résultat low. Utilisez low pendant que vous itérez sur un prompt, et ne passez à high que pour le rendu final.
Stocker le base64 dans votre base de données
Une image 2K encodée en base64 représente souvent plusieurs Mo de texte. Enregistrer cette chaîne dans une ligne de base de données ralentit chaque requête qui la traverse. Écrivez le fichier dans un stockage objet, ne gardez que son URL dans la base, et utilisez webp ou jpeg avec output_compression lorsque la taille du fichier compte davantage que le détail sans perte.
Ignorer le routage des fournisseurs
Plusieurs fournisseurs peuvent servir le même modèle, et leurs endpoints peuvent différer par le prix et les paramètres pris en charge. Si vous ne définissez aucune préférence, OpenRouter choisit à votre place. Fixez l’ordre et décidez si les solutions de repli sont acceptables :
{
"model": "google/gemini-2.5-flash-image",
"prompt": "A minimalist logo for a coffee roaster",
"provider": {
"order": ["google-ai-studio", "google-vertex"],
"allow_fallbacks": true
}
}
Désactivez allow_fallbacks lorsque vous avez besoin d’une sortie et d’un prix identiques à chaque appel, et laissez-le activé lorsque la disponibilité compte davantage.
Utiliser Seedream 4.5 sur PicassoIA
Si vous préférez vous passer du code, le même modèle que dans les exemples d’OpenRouter est disponible dans le navigateur. Seedream 4.5 crée des images allant jusqu’en 4K à partir d’un prompt textuel, sans rien installer.
Ouvrez la page du modèle de Seedream 4.5 et connectez-vous.
Rédigez le prompt en quatre parties : sujet, décor, lumière et objectif. Essayez : une tasse à café en céramique sur un plan de travail en marbre, lumière douce de fenêtre venant de la gauche, objectif 85 mm, faible profondeur de champ, grain de film Kodak Portra 400.
Choisissez le format : 16:9 pour les en-têtes de blog, 1:1 pour les vignettes produit, 9:16 pour les publications verticales.
Générez et examinez. Modifiez un seul détail, puis relancez, comme vous le feriez pour un seul champ d’API.
💡 Astuce : Les idées vagues donnent des prompts faibles. Demandez à un grand modèle de langage comme Claude Sonnet 5 ou Gemini 3.5 Flash de développer une idée d’une ligne en prompt photo détaillé, avec lumière, objectif et texture, puis collez le résultat dans le modèle d’image.
L’API développeur de PicassoIA
PicassoIA propose aussi sa propre API développeur pour les pipelines et les scripts. L’URL de base est https://api.picassoia.com/v1, et les requêtes s’authentifient avec un token bearer qui commence par pia_sk_. Le flux est asynchrone et vous paraîtra familier si vous avez utilisé d’autres API de type prédiction : vous créez une tâche, vous l’interrogez, puis vous récupérez le résultat.
POST /v1/models/{owner}/{name}/predictions crée une tâche.
GET /v1/predictions/{id} vérifie son statut et renvoie le résultat.
POST /v1/predictions/{id}/cancel arrête une tâche encore en cours.
GET /v1/predictions liste vos tâches récentes.
Pour les images, l’API propose PicassoIA Image et PicassoIA Image Editor Pro, ainsi que deux modèles vidéo. Un compte peut lancer 5 prédictions simultanément, et les prompts sont limités à 4 000 caractères. L’accès à l’API dépend de formules précises : vérifiez laquelle sur la page tarifaire avant de construire quoi que ce soit dessus. Le catalogue du navigateur est bien plus large, avec plus de 200 modèles de texte vers image à tester avant d’en choisir un pour un script.
Créez vos premières images dès aujourd’hui
La meilleure façon de trancher la question de la passerelle est de tester un même prompt dans les deux sens. Envoyez-le via l’endpoint images d’OpenRouter, consignez usage.cost, puis collez le même texte sur une page de modèle sur PicassoIA et comparez le rendu, la vitesse et l’effort demandé.
Choisissez un prompt issu de votre travail : une photo produit, un en-tête de blog, un portrait pour une page d’accueil. Essayez deux ou trois modèles sur PicassoIA, modifiez un détail par essai, et gardez les résultats que vous publieriez vraiment. Vous saurez en un après-midi quelle voie convient à votre projet, et vous aurez de vraies images à montrer.