# 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).