# IAKifech Ep02 — postmortem sous-titres desync + freeze fin + logo (24/07/2026) ## Contexte `iakifech_ep02_final_v3.mp4` (99,46s) analysé sur demande de Nabil : sous-titres en avance sur la voix, long silence/image figée en fin de vidéo, doute sur le logo. ## 1. Sous-titres en avance sur la voix — CONFIRMÉ, cause trouvée Mesure : pixel-diff de la zone sous-titres vs onset audio réel (RMS 10ms) sur 3 transitions → sous-titres changent **0,40 à 0,70s avant** que la voix ne reprenne (moyenne ~0,57s). Cause : le corps vidéo (`ep02_body.mp4` = `final-1.mp4` du skill `moneyprinterturbo`, task `2fbc4b36-44de-48e4-8e3f-704c84c78eb1` sur `moneyprinterturbo-api`, VPS) est généré avec voix + sous-titres **synchronisés en interne** sur la voix edge-tts par défaut (`fr-FR-RemyMultilingualNeural-Male`, `audio.mp3` = 75,55s, `subtitle.srt` calé dessus). Ensuite la piste audio a été remplacée manuellement par une voix ElevenLabs (`ep02_george.mp3`, 79,49s, débit différent) SANS régénérer `subtitle.srt` sur ce nouveau timing. Les sous-titres restent gravés aux timestamps Rémy, qui ne collent plus au débit George. C'est déjà documenté (mais pas corrigé) dans `BRAND.md` du projet : « edge-tts déjà utilisé par erreur sur l'épisode 2 ». ## 2. Silence + image figée en fin de vidéo — CONFIRMÉ, cause partielle - Silence audio réel : 79,06s → fin (99,46s) = **20,4s de silence**. - `ep02_george.mp3` (voix utilisée) = 79,49s → colle à la fin de la parole détectée. - `ep02_body.mp4` (corps vidéo) = **75,57s seulement** → manque ~3,9s pour couvrir la voix George. - Assemblage final : image quasi figée ~79s→90,5s (11,5s), puis `outro.mp4` (5,5s, fichier validé BRAND.md) 90,5s→96s. Total vidéo 96s, total audio 99,46s. - Total body(75,57)+outro(5,5)=81,07s attendu au minimum, réel 99,46s → **~18s d'écart non expliqué**. Script d'assemblage non retrouvé (probablement commande ffmpeg ad hoc de l'agent pendant la session, non sauvegardée en fichier) — donc padding non reproductible, cause exacte du delta encore ouverte. ## 3. Logo — présent et correct (à corriger : mon diagnostic initial était faux) Vérifié par comparaison pixel des coins entre `ep02_body.mp4` (aucun logo, std=8,9 coin haut-gauche) et `iakifech_ep02_final_v3.mp4` (logo présent, std=70,5, même zone) → le logo est ajouté après le rendu moneyprinterturbo, dans une étape séparée. Mesures sur le logo appliqué : cercle marine ~115px de diamètre (10,6% de la largeur 1080px, cohérent avec le ~8% visé dans `BRAND.md`), coin haut-gauche, icône blanche + accent or (RGB 237,213,48 — cohérent avec le ton "accent_bright" navy-safe du système de marque Nyora). Présent aussi sur l'écran de fin. Correctement appliqué sur ce rendu — pas de logo gris/minuscule comme sur une version antérieure. ## Recommandations pour la suite (saison 2 / ep03+) 1. Ne jamais garder les sous-titres brûlés par moneyprinterturbo si la voix est remplacée après coup : soit regénérer un `.srt` aligné sur `ep02_george.mp3` (whisper ou timestamps ElevenLabs) puis re-burn, soit désactiver le burn-in sous-titre côté moneyprinterturbo et le faire dans une étape dédiée post-voix. 2. Calculer la durée de hold/freeze dynamiquement (durée_voix − durée_body), jamais une valeur fixe/ad hoc, et sauvegarder la commande d'assemblage dans un script versionné (pas une commande one-shot en session agent). 3. `logo_B_v6.png` validé dans `BRAND.md` — fonctionne bien tel qu'appliqué ici, rien à changer sur ce point. Fichiers sources (VPS `hermes-nabil`, `/data/nyora/ia-tn/`) : `ep02_body.mp4`, `ep02_george.mp3`, `ep02_elevenlabs.mp3` (non utilisé), `outro.mp4`, `BRAND.md`, `ENDING-BRIEF.md`, `TACHES.md`. Skill source : `moneyprinterturbo` (manuellement rédigé, hors curator auto).