2.7 KiB
2.7 KiB
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).
Endpoint & modèle
POST https://openrouter.ai/api/v1/chat/completions- Auth :
Authorization: Bearer <clé OpenRouter>(clé dédiée dehermes-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 dansmessage.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 :
- 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.
- Détourer par flood-fill depuis les bords (
PIL.ImageDraw.floodfillavec 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()dansgsparc-mezzouna/scripts/generate_vehicle_images.py.
Exemple (édition)
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.