common: ajoute le fichier runbook image-gen (manquant) + section transparence/flood-fill
This commit is contained in:
parent
998c47fb60
commit
73f435deb5
|
|
@ -0,0 +1,36 @@
|
|||
# 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é OpenRouter>` (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`.
|
||||
Loading…
Reference in New Issue