Files
nas-runbooks/common/vps-hermes-nabil-visuels-yasmi.md

72 lines
4.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# VPS hermes-nabil — pipeline visuels Yasmi (logo + scènes tunisiennes)
**Contexte** : génération de visuels publicitaires Yasmi sur hermes-nabil (VPS Contabo).
Fichiers dans `/data/nyora/` du container (`docker exec hermes-nabil …` via `ssh vps.internal`).
## Problème rencontré (18/07/2026)
Visuels avec logo YASMI illisible, doublé, + rectangle gris opaque.
**Causes** : (1) le lettrage du logo était décrit dans le prompt IA → le modèle l'a dessiné lui-même (flou, doublé) ; (2) artefact d'édition IA (rectangle gris) ; (3) ancien fichier logo = photo 440×1413 non détourée.
## Solution (19/07/2026)
- `nyora_logo.py` : surimpression déterministe du logo. Mesure la luminance de la zone d'ancrage → `logo_yasmi.png` (vert foncé) sur fond clair, `logo_yasmi_blanc.png` sur fond sombre (seuil 120). Hauteur 8,5 % de l'image, positions bas | haut-gauche | haut-droite | bas-droite. Branché dans `nyora_mannequin.py` ET `nyora_produit.py`.
- Prompt mannequin : exige « AUCUN texte, lettrage, filigrane, logo » — ne jamais mentionner YASMI dans un prompt d'image.
- `nyora_scenes.py` : 28 scènes tunisiennes régionales (Nord, Cap Bon, Nord-Ouest, Sahel, Sud-Est, oasis du Sud-Ouest) + 5 profils de mannequins tunisiennes élégantes. `--scene tozeur --mannequin chignon`.
- Variantes logo générées par recoloration PIL (alpha conservé) : blanc + ivoire.
## Règles permanentes
1. Logo et produit ne passent JAMAIS par un modèle d'image IA.
2. Rectangle gris / lettrage flou / logo doublé = l'IA a touché au logo → jeter et régénérer.
3. Tiers premium obligatoire pour l'essayage virtuel (fidélité broderie).
4. Sauvegardes : `*.bak_20260719` dans /data/nyora et /data/SOUL.md.bak_20260719.
## Vérification rapide
```
ssh vps.internal "docker exec hermes-nabil python3 /data/nyora/nyora_scenes.py | head"
ssh vps.internal "docker exec hermes-nabil python3 -c 'import sys;sys.path.insert(0,\"/data/nyora\");from nyora_logo import choisir_variante;print(choisir_variante(\"/data/nyora/out/mannequin_sidi_v1.png\"))'"
```
## Filet de sécurité watermark Google (19/07/2026)
Bug de régression documenté (discuss.ai.google.dev, 01/2026) : le sparkle
visible Google peut s'injecter même en accès API sur certains modèles
(Nano Banana Pro = gemini-3-pro-image), alors que l'accès API ne devrait
normalement porter que le SynthID invisible.
Correctif : nyora_watermark.py (nettoyer_coin) — patch miroir + fondu sur le
coin bas-droite, sans dépendance lourde (PIL seul). Branché automatiquement
dans nyora_produit.py (décor IA) et nyora_mannequin.py (brut, avant logo).
Test réel du 19/07 sur gemini-3-pro-image via OpenRouter : aucun sparkle
visible détecté (analyse pixel + aperçu ASCII du coin). Le filet reste actif
par sécurité car le bug est intermittent côté Google.
## Production reelle et bug de concurrence (19/07/2026)
Trois visuels livres sur Telegram (Gafsa, Nefta, Sfax) depuis une photo de
reference — gemini-3-pro-image, 1080x1350, logo lisible, aucun sparkle Google.
### Bug corrige : chemins temporaires fixes
`nyora_mannequin.py` et `nyora_produit.py` ecrivaient dans des chemins fixes
(`/tmp/mannequin_brut.png`, `/tmp/mannequin_logo.html`, `/tmp/produit_detoure.png`,
`/tmp/decor_ia.png`). Deux executions simultanees s'ecrasaient, et trois Chrome
headless en parallele depassaient le timeout de 120 s.
**Correctif** : `tempfile.mktemp()` avec prefixe unique.
**Regle** : lancer les generations **en serie**, jamais en parallele.
### Nouveau module : nyora_telegram.py
`python3 /data/nyora/nyora_telegram.py image.png "legende" [image2.png "legende2"]`
Token et chat_id lus dans `/data/.env`, jamais affiches.
### Transfert de fichier vers le VPS (methode validee)
Ne **jamais** utiliser des chunks base64 en here-doc SSH : tronque et tres couteux.
1. `curl -F "file=@fichier" https://tmpfiles.org/api/v1/upload`
2. Le lien `/dl/{id}/nom` renvoie une **page HTML** — en extraire l URL reelle
(`grep -oE "https?://tmpfiles.org/dl/[^\"]*\.jpg"`)
3. Telecharger cote VPS, verifier par `md5sum`, puis `docker cp` dans le container.
### Limite : heritage du physique du mannequin source
Le mannequin genere herite fortement du physique visible sur la photo de reference.
Une photo portee par un mannequin europeen donne un rendu europeen malgre
`--mannequin`. Pour un rendu tunisien fidele : fournir des photos de **vetements
seuls** (a plat ou sur cintre).