# OPENROUTER-IMAGE-GEN — Génération / édition d'images IA (nano-banana) Note partagée aux 3 instances Hermes. Source : projet gsparc-mezzouna, 2026-06-14. Pour produire ou retoucher une image (nettoyage de photo, fond neutre, illustration), utiliser OpenRouter en sortie image. À distinguer de la **vision/OCR** (lecture d'image → texte, cf [bifrost-access](bifrost-access.md)). ## Endpoint & modèle - `POST https://openrouter.ai/api/v1/chat/completions` - Auth : `Authorization: Bearer ` (clé dédiée de `hermes-platform/.env`, ex. `HERMES_PERSO_OPENROUTER_KEY`). - Modèle : **`google/gemini-2.5-flash-image`** (nano-banana) — vraie capacité **image-out**. - Coût : payant mais négligeable (~fraction de centime / image). ## PIÈGES - Mettre **`"modalities": ["image","text"]`** dans le payload, sinon pas de sortie image. - L'image générée est dans **`choices[0].message.images[0].image_url.url`** (data-URL base64), **PAS** dans `message.content`. - DeepSeek ne fait NI vision NI image-out (cf bifrost-access). - Pour de l'**édition** d'une image existante : envoyer l'image source en `image_url` (data:base64) dans le même message que le prompt texte. ## TRANSPARENCE (piège majeur) nano-banana **ne renvoie PAS d'alpha réel** : la sortie est RGB même en demandant explicitement un "transparent background PNG". Pour obtenir un **PNG transparent fiable** : 1. Générer le sujet sur **fond blanc plat** (#FFFFFF), centré avec marge, **sans ombre ni dégradé**, le sujet ne touchant pas les bords. 2. **Détourer par flood-fill depuis les bords** (`PIL.ImageDraw.floodfill` avec une couleur sentinelle + seuil), puis convertir la sentinelle → alpha 0. Cela préserve les **blancs intérieurs** (carrosserie/marquages blancs) car ils ne sont pas connexes au fond. - rembg/onnxruntime : indisponible sur Python 3.14 (pas de wheel). Le flood-fill PIL est suffisant et sans dépendance lourde. - Code de réf : `_cutout_white()` dans `gsparc-mezzouna/scripts/generate_vehicle_images.py`. ## Exemple (édition) ```bash curl -s https://openrouter.ai/api/v1/chat/completions \ -H "Authorization: Bearer $OPENROUTER_KEY" -H "Content-Type: application/json" \ -d '{"model":"google/gemini-2.5-flash-image","modalities":["image","text"], "messages":[{"role":"user","content":[ {"type":"text","text":"Place the vehicle on a pure flat white background, centered, no shadow, keep it exactly."}, {"type":"image_url","image_url":{"url":"data:image/jpeg;base64,..."}}]}]}' # -> .choices[0].message.images[0].image_url.url (data:image/png;base64,...) PUIS flood-fill -> alpha ``` Implémentation de référence : `gsparc-mezzouna/scripts/generate_vehicle_images.py`.