trend-explainer-video : Chaîne de production de vidéos de commentaire sur les classements
Utilise C:/Users/<votre nom d'utilisateur>/.workbuddy/skills/video-talkcraft (le skill TalkCraft) comme moteur de rendu. Ce skill fournit le squelette d'ingénierie, les scripts complets, les repères visuels et le dépannage pratique pour les contenus de type classement. La théorie vidéo et les vérifications générales sont dans TalkCraft lui-même, ce skill ne les répète pas.
Étapes de la chaîne (commandes et pièges dans references/pipeline.md)
- Capture instantanée : Capture unique de la page de classement (curl avec user-agent), sauvegardée dans
data/snapshot.md/.jsoncomme seule source de vérité – classement, étoiles, description, langue doivent provenir de cette seule capture, toute invention est interdite. - Script de commentaire
script.json: Structure de 35 phrases fixe = 1 introduction + 10 projets × (phrase de classement + phrase détaillée / nombre total d'étoiles + phrase "comment l'utiliser" + phrase du total d'étoiles) + 3 sections de fin (résumé / citation / CTA). Règles strictes : les nombres en caractères chinois ; chaque projet doit commencer par « Premier / Deuxième… » ; ajouter une phrase « comment l'utiliser » pour chaque projet (commence par un verbe, explique l'utilisation / comment faire / quel problème résout). L'introduction commence directement par « Aujourd'hui, dans ce GitHub Trending de la semaine, je vais vous présenter les dix premiers d'un coup ». - Synthèse vocale :
synth_voice.py(VOICE/RATE en haut, edge-tts nécessite HTTP_PROXY) →assemble_voice.py(full.wav + timestamps.json) →cp audio/full.wav remotion/public/narration.wav. - Reconstruction de la timeline :
make_timing.py→gen_beats.py(inclut la génération d'anchors.json) →gen_cues.py. Les trois tables d'ancres doivent être synchronisées : REPO_ANCHORS de gen_beats, REPO_CFG de gen_cues, REPO_CFG de all.tsx, plus sceneFor dans scenes/index.ts (les numéros de scènes de fin chart/quote/cta sont décalés après insertion de phrases). Tout changement de paramètres de voix = reconstruction complète de la chaîne, jamais un simple remplacement de piste audio. - Mise en œuvre du projet : Copier le squelette depuis
assets/remotion-template/; modifiersrc/data.ts(données de la capture), les cinq tableauxREPO_CFG/USES/STEPS/ICONS/DETAILSdanssrc/scenes/all.tsx+RANK_LIST(table des scènes de classement). Le reste du code des scènes est réutilisé tel quel.npx tsc --noEmitpour vérification. - Rendu :
node <video-talkcraft>/scripts/render_shots.mjs --all --concat out/assembled.mp4 --audio out/full-mix.wav --mux out/v?.mp4(full-mix est automatiquement re-rendu selon l'empreinte du timing). - Vérifications automatisées (livraison seulement si tout vert) : beat_lint → motion_check (immobilité + tremblement) → sfx_check solo+mix → workbench_contract_lint. Seuils et traitements en cas d'échec dans pipeline.md.
- Livraison : loudnorm en deux passes (mesure → normalisation linéaire) → delivery.mp4 → relancer sfx_check --mix → present_files.
- Couverture :
gen_cover.pygénère une couverture verticale générique 1080×1920 (sans projet spécifique, réutilisable sur le long terme), produit cover_vertical.png/.jpg.
Visuels différenciés de cette chaîne (version v16, voir references/style-guide.md)
- Page de classement indépendante
RankPage: La scène lors de l'énonciation du rang est plein écran avec une page indépendante « N-ième » (gros caractères dorés 240px + RANK #N + nom du dépôt + nombre d'étoiles + barre de progression en 10 segments), ne partage pas l'écran avec le contenu du projet. - Trois éléments de scène de contenu :
IllBg(arrière-plan d'illustration plein écran, blur30+assombrissement) +OgiCard(carte d'illustration animée, EFFECT PREVIEW + Ken Burns + points lumineux + balayage lumineux) +DemoPanel(démonstration terminal/grille), accompagnés de 3 USES (emoji) +DetailBlock(carrousel détaillé). - Scène d'illustration en trois étapes « Comment utiliser »
HowScene: Trois étapes, chacune avec une carte d'illustrationStepIcon(fond dégradé + grand emoji + badge STEP), pilotée par les deux tableauxSTEPS/ICONS. - Effets d'ambiance plein écran : Trois bandes lumineuses avec phases décalées pour balayer l'écran, pour traiter les segments immobiles détectés par motion_check (obligatoire sur les petites cartes / scènes de texte).
- Palette sombre : Voir style-guide.md ; étoiles en doré #FFC94D, augmentation hebdomadaire en vert #63E6A4.
Pièges fréquents (voir references/pipeline.md)
- La génération d'images ImageGen peut subir un rate limiting 429 → utiliser des cartes d'icônes emoji (StepIcon) pour les illustrations, et PIL programmatique (gen_cover.py) pour les couvertures, zéro coût, stables et pertinentes ; dès que le service revient, on peut repasser aux images AI.
- Segments immobiles motion_check (freezedetect noise=0.003) : les petites cartes / textes statiques / arrière-plans flous, les effets sinusoïdaux lents ne suffisent pas → les trois bandes lumineuses Ambient avec phases décalées (≥3 bandes, 2 bandes créent un vide).
- Le rendu serveur de
<Video>plante toujours → utiliserOffthreadVideo+muted. - fps des médias ≠ fps de sortie → motion_check détecte des « images doublons » ; utiliser
minterpolate=mi_mode=blendpour l'interpolation par flot optique. - Windows : les liens symboliques sont tous refusés → copier les répertoires ; ffmpeg 7+ n'a pas
-vsync→ utiliser-fps_mode passthrough. - edge-tts nécessite un proxy :
HTTP_PROXY/HTTPS_PROXY=http://<votre proxy>. - Modifier all.tsx : utiliser une réécriture atomique en Python (les races EBUSY de Windows peuvent faire échouer une édition); la transmission de code Python contenant des backticks via heredoc bash est tronquée → écrire un .py avec Write puis exécuter.
Références rapides sur l'environnement
- bash PATH à compléter à chaque session :
PortableGit usr/bin+ffmpeg-bin; python dans un venv :C:/Users/<votre nom d'utilisateur>/.workbuddy/binaries/python/envs/default/Scripts/python.exe; node en version managée directe ; tsc vianode_modules/typescript/lib/tsc.js(bin/tsc est détourné par fnm shim).