Zhati · Essai Visuel sur les Relations
Ceci est un workflow reproductible, extrait du film finalisé « Pourquoi certaines bonnes personnes fréquentent-elles les mauvaises personnes ? ». L'objectif n'est pas de reproduire le même script, mais de permettre à chaque nouvel épisode de suivre la même méthode de production :
Une histoire de relation centrée sur un objet concret + grandes lettres en police Song + texture cinéma/tournage réel/photo + narration sobre + couverture 3:4.
Ce qui est fixe, c'est la méthode, pas le contenu
Fixe : grammaire narrative en 16 battements, normes de police/palette/mouvement/son, couverture 3:4, règles strictes de sources et d'éthique, QA.
Variable : script, narration, musique, film/tournage client/produit/photo/stock autorisé, portraits, fond de couverture, texte de publication.
L'IA peut chercher elle-même des vidéos de fond : quand le client n'a pas de contenu, utilisez scripts/stock_search.py pour chercher sur Mixkit/Coverr/Pexels/Pixabay, sélectionnez 3 candidats, utilisez scripts/fetch_stock.py pour télécharger, supprimer la piste audio, normaliser et écrire le manifeste. Voir references/stock-sources.md.
Le « Septième Ciel » de la version mère, Freud/Aristote/Kant, ne sont que des références d'implémentation, pas des éléments obligatoires pour chaque épisode. Si le client veut un vrai magasin, utilisez son contenu ; s'il veut des exemples tirés de l'histoire du cinéma, changez pour 2-3 films du domaine public ; s'il n'a pas de contenu, faites du texte pur/graphique. Ne forcez pas un film ou un visage juste pour « l'unité de la série ».
Voir references/client-brief.md et references/asset-strategy.md pour les détails sur le choix.
Vérifiez d'abord si le format est applicable
Applicable :
- Sujets émotionnels chinois : relations homme-femme, amour, intimité, limites, estime de soi, donner et recevoir, rupture et réconciliation, etc.
- Histoires de clients (marques/organisations) qui veulent parler de « relation, limites, respect, compagnie » et qui se prêtent à une expression essayistique.
- Utilisateurs qui veulent un essai vidéo paysage de 2:40–3:40, avec narration, sous-titres et une ambiance cinématographique.
- Utilisateurs qui disent explicitement « dans le style des Bonnes personnes et mauvaises personnes », « en utilisant le modèle précédent », « fais-en une série ».
Non applicable :
- Lancement de produit pur / vente / montage rapide / démonstration de fonctionnalités ; d'autres formats sont plus adaptés.
- L'utilisateur demande d'utiliser des extraits encore sous droit d'auteur (comme Casablanca, In the Mood for Love) sans autorisation. Expliquez d'abord le risque, puis passez à des films du domaine public ou demandez au client de fournir du contenu autorisé.
- L'utilisateur veut un format vertical 9:16. Ce modèle est 16:9 avec couverture 3:4 ; le format vertical nécessite une refonte complète de la mise en page, un simple recadrage ne suffit pas.
Spécifications de la vidéo finale (par défaut)
| Élément | Valeur par défaut |
|---|---|
| Vidéo principale | 1920×1080 / 30 ips / 2:40–3:40 |
| Format d'image | 16:9 |
| Langue | Narration en chinois simplifié + sous-titres incrustés + SRT |
| Couverture | 1080×1440 (3:4), PNG + JPG |
| Son | Narration + musique originale + bruit de pluie, environ −15 LUFS, crête réelle ≤ −1,5 dBFS |
| Sous-titres | Incrustés dans l'image, fichier .srt séparé fourni |
| Livrables | MP4, SRT, couverture 3:4, texte de publication, sources du matériel, projet éditable |
| Validation client | Brief → Première image fixe → Version finale (3 points de validation) |
Emplacement de la version mère (référence d'implémentation)
Version mère de référence (non distribuée avec ce dépôt ; utilisée uniquement comme référence de contenu et de structure) :
- En développement local :
~/Desktop/自媒体/good-people-wrong-person - Sur d'autres machines : utilisez
--refpour pointer vers votre propre projet maître
Le nouvel épisode ne doit pas utiliser par défaut le matériel de la version mère. Utilisez --ref uniquement pour récupérer vendor/, les polices, les textures et une piste audio de placeholder ; les films, portraits, images fixes, scripts et sons doivent être remplacés selon le brief client.
La version mère contient :
index.html: composition huashu-motion complète du film de 201,37 secondes.cover/cover.html: fichier source de la couverture 3:4 en 1080×1440.assets/movies/: extraits vérifiés, sans piste audio, complétés en nombre entier d'images du « Septième Ciel » (1927).assets/portraits/: portraits du domaine public de Freud, Aristote, Kant.assets/stills/,assets/textures/,assets/fonts/,vendor/.assets/score.wav: mixage final de la narration + musique + pluie de l'épisode précédent. Doit être remplacé pour le nouvel épisode, ne peut pas être réutilisé.output/: livrables de l'épisode précédent, uniquement à titre de référence, ne les copiez pas tels quels.
Si la version mère n'existe plus : utilisez templates/index.template.html et templates/cover-3x4.template.html pour restaurer le code ; les extraits de films et les portraits doivent être obtenus et vérifiés à nouveau selon references/rights-and-ethics.md.
Comment démarrer un nouvel épisode
SKILL="$HOME/.agents/skills/zhati-relationship-film"
$SKILL/scripts/new_episode.sh mon-slug-episode --base "$HOME/films-relations"
Le script va :
- Créer un nouveau projet dans
$BASE_DIR/mon-slug-episode(par défaut$HOME/films-relations, modifiable avec--base) ; - Copier le code template le plus récent du skill (
index.html,cover/cover.html), puis copiervendor/, les polices, les textures et un jeu de matériel de démarrage depuis la version mère ; - Copier
assets/score.wavde la version mère comme piste audio de placeholder (pour que la page puisse d'abord être exécutée) ; - Générer les modèles
BRIEF.md,script.txt,sous-titres.srt,traitement.md,sources-materiel.md,texte-publication.md,assets.manifest.json; - Créer
assets/imported/, afficher les prochaines étapes et les emplacements de texte/matériel à remplacer.
Suivez ensuite le pipeline ci-dessous. Ne sautez pas l'étape de rédaction d'un nouveau script et de nouveaux sous-titres.
Pipeline
0. Lire le brief client, verrouiller le contenu + le matériel
Lisez d'abord references/client-brief.md, résumez les exigences du client en un plan de contenu de 10 lignes :
Public / Plateforme / Durée / Thème en une phrase / Question d'accroche / Deux concepts / Perspective mentale ou psychologique / Tournant éthique / Une petite phrase / Mode et source du matériel
Puis lisez references/beat-sheet.md, et placez le thème dans les 16 battements narratifs. Le mode du matériel doit être décidé avant d'écrire le script : tournage client / film du domaine public / stock autorisé / photo / texte pur / mixte. Ne rédigez pas d'abord 3 minutes avant de demander le matériel au client.
Structure par défaut :
- Accroche (une question)
- Histoire concrète (pluie/parapluie ; peut être remplacé par un autre objet concret, mais un objet doit traverser toute l'histoire)
- Limitation du type « Ceci est une histoire fictive »
- Distinction de deux concepts (gentillesse vs. convenance, ou la paire de concepts de cet épisode)
- Perspective philosophique A (amitié/réciprocité/respect, etc.)
- Limite d'une personne (« Les efforts seuls d'une personne ne peuvent pas accomplir une relation à deux »)
- Question sur le tournant émotionnel (pourquoi est-on triste mais on attend quand même la prochaine fois)
- Perspective psychologique (répétition/modèle ; utiliser « une façon de comprendre », sans faire de diagnostic)
- Reconnaissance du modèle (effort pour gagner la reconnaissance)
- Froideur et doute de soi
- Tournant éthique (le mal n'est pas de votre faute ; la responsabilité incombe à l'auteur du mal)
- Limites et exceptions (tromperie, changement, voir après avoir côtoyé)
- Introspection (deux questions ; miroir/réflexion)
- Perspective philosophique B (respect de soi)
- Une toute petite phrase (action réalisable)
- Exercice et conclusion (garder la douceur, mais aussi se préserver une place)
- Générique de fin / sources
Si le nouveau thème ne nécessite pas deux philosophes, un seul suffit ; si la perspective psychologique n'est pas nécessaire, fusionnez les battements 8-9 en un seul paragraphe. N'inventez pas de citations ou de diagnostics juste pour remplir la structure.
1. Écrire le nouveau script
- Objectif : 950–1150 caractères chinois, environ 3 minutes à vitesse normale. Si l'utilisateur a fourni un script, éditez-le d'abord pour « enlever ce qui est superflu pour pouvoir respirer », sans changer son point de vue.
- Conservez les expressions limitatives : une façon de comprendre / pas une explication pour tout le monde / la responsabilité du mal ne peut être déléguée à l'autre.
- La fin doit contenir une « petite action » ou « petite phrase » mémorable, par exemple « J'ai froid aussi, j'ai besoin de ce parapluie aussi ».
- Écrire dans
script.txt, une ligne par paragraphe, pour faciliter la génération des sous-titres.
2. Générer la nouvelle narration et la nouvelle timeline
Privilégiez l'utilisation du propre clone vocal local de l'utilisateur (voir skill macos-local-voice), ne téléchargez pas d'enregistrement de référence. Si aucune voix n'est disponible, demandez explicitement à l'utilisateur : enregistrement personnel / clone local / voix système / sans son.
Production :
- Une narration complète
assets/voice.wav(48 kHz, si possible 24-bit) ; - Les heures de début et de fin phrase par phrase (JSON ou CSV), précises à 0,01 s près ;
- Un nouveau tableau
CUES([début, fin, texte]).
Ne réutilisez pas la narration de 194 secondes de la version mère. La timeline de la version mère sert uniquement à comprendre le rythme, pas comme audio pour le nouvel épisode.
3. Musique et mixage
- Conservez l'orientation « piano/cordes/ambiance légère + bruit de pluie », n'utilisez pas de chansons préexistantes sous droit d'auteur.
- Objectif du mixage : narration claire, musique autour de −28 à −32 LUFS, le tout environ −15 LUFS, crête réelle ≤ −1,5 dBFS.
- Produisez
assets/score.wav, remplacez la piste de placeholder ; la balise<audio id="score" ...>de la page est conservée, mais la durée doit être modifiée. - Ce modèle utilise
id="score"et nonom-sound, donc lors du rendu, ajoutez--silent, sinonom rendertentera de reconstruire la piste audio. Voir la section « Son » dereferences/visual-system.md.
4. Recaler les temps
C'est l'étape la plus souvent sous-estimée. Tous les temps de la version mère sont codés en dur ; dès que la nouvelle narration est changée, chaque scène doit être recalibrée.
Attribuez les nouvelles durées aux 16 scènes selon les proportions de references/beat-sheet.md, puis :
- Modifiez d'abord le tableau
CUES, ledata-durationdu nœud racine,DURdans le JS,<audio data-duration>. - Chaque scène commence au « point de départ de la première phrase de narration de ce segment », et se termine au début de la première phrase du segment suivant.
- Les temps d'animation à l'intérieur d'une scène sont mis à l'échelle proportionnellement à « nouvelle durée / ancienne durée » ; ne décalez pas seulement le début, sinon la seconde moitié dérivera.
- Les
data-start/data-duration/data-media-start/data-playback-ratedes fenêtres vidéo doivent également être recalculés ; assurez-vous que l'extrait ne se termine pas avant le fondu. Les extraits de la version mère sont déjà complétés en nombre entier d'images, mais si vous changez de source vidéo, vous devez à nouveau compléter les images. - Après chaque modification d'une scène, utilisez
om stillpour vérifier àstart+0.5s,start+2s,end-0.5s, et assurez-vous qu'il n'y a pas de rémanence d'ancien texte, pas de collision de texte, pas d'image vide.
La liste de remplacement détaillée se trouve dans references/text-slots.md ; la méthode de recalage dans references/retiming.md.
5. Remplacer le texte, pas l'ADN visuel
Remplacez un par un les emplacements de texte dans index.html (voir references/text-slots.md), y compris :
- La variable de titre
filmTitle, les deux lignes d'accroche ; - Les quatre paragraphes en grandes lettres de l'histoire du parapluie ;
- La limitation « histoire fictive » ;
- Les étiquettes des deux images sur la gentillesse/la convenance ;
- Les paragraphes et sources d'Aristote/Freud/Kant ;
- Les moments de froid, de tournant, de responsabilité, de miroir, d'introspection, d'action, de fin, de générique ;
- Chaque phrase de sous-titre dans
CUES.
Conservez :
- La palette, l'association Songti/PingFang/EB Garamond ;
- Le fond pellicule, la pluie, le parapluie, le grain, le vignettage, les flashs blancs, le souligné bordeaux ;
- Les marges latérales du 16:9 et la bande de sous-titres en bas ;
- Le rythme « une scène, un événement », ne mettez pas tous les mots sur le même écran.
Ne conservez pas l'ancien texte de la version mère. Si le nouvel épisode fait intervenir des penseurs autres qu'« Aristote/Freud/Kant », vérifiez à nouveau leurs sources et indiquez « interprétation/application » dans l'image, sans fabriquer de fausses citations directes.
6. Remplacer le matériel (obligatoire, selon les instructions du client)
La version mère utilise « Le Septième Ciel » (1927), mais ce n'est qu'une implémentation de référence. Choisissez un mode selon references/asset-strategy.md :
- Tournage client/photo/produit/magasin : prioritaire ; indiquez clairement l'autorisation/consentement pour le portrait ; les visages doivent rester réels, sans lissage excessif ; le produit doit être un « objet dans la relation », pas une publicité agressive.
- Film du domaine public : vous pouvez continuer avec « Le Septième Ciel », ou passer à 1-3 films du domaine public ; supprimez la piste audio, complétez les images, extrayez des images fixes, étiquetez chaque film.
- L'IA cherche elle-même des stock gratuits : quand le client n'a pas de contenu, cherchez d'abord 3 candidats à montrer au client ; après confirmation, utilisez
scripts/fetch_stock.pypour télécharger/normaliser. Ne piratez pas depuis YouTube/streaming/films sous droit d'auteur ; ne contournez pas les filigranes/paiements. Inscrivez la source, la licence, le crédit dans le manifeste. - Stock sous licence : conservez la licence/le bon de commande ; n'utilisez pas d'aperçu avec filigrane.
- Photos/archives/portraits : indiquez photo/statue/peinture ; domaine public ou autorisation client ; n'utilisez pas d'IA pour générer de faux personnages historiques.
- Texte pur/graphiques : quand il n'y a pas de séquence vidéo, laissez les caractères et les espaces vides constituer l'image ; ne forcez pas un film.
- Mixte : maximum 2-3 sources ; un seul étalonnage, une seule police, crédit pour chaque source.
Après le remplacement, vous devez :
- Modifier le
srccorrespondant àdata-asset-slot; - Recalculer les fenêtres vidéo avec
ffprobe; - Réextraire les images fixes ;
- Modifier
#credit,#credits .cols,sources-materiel.md; - Exécuter
python3 scripts/asset_report.py --manifest assets.manifest.json --project ..
N'utilisez pas d'extraits de Casablanca, Vacances romaines, In the Mood for Love ou d'autres films encore protégés par le droit d'auteur, sauf si le client fournit une autorisation écrite explicite.
7. Vérifier, rendre, visionner
cd "$HOME/films-relations/mon-slug-episode"
om check . --samples 6
om render . --silent --fps 30 --workers 4 --video extract
om qa out/<nouveau-fichier>.mp4
Le rendu prend environ 25-35 minutes (1080p/30 ips/4 workers, pour une durée de l'ordre de 201 secondes). N'utilisez pas du 720p pour faire passer du 1080p.
Si om sur votre machine est un script wrapper (par exemple qui configure l'environnement Node/Chrome), pointez OM vers lui ; les scripts/ essayeront $OM, om, ~/.agents/skills/huashu-motion/bin/om dans cet ordre.
Points à vérifier impérativement :
om check: 0 erreur ;om qa: aucune variation d'image d'une frame à l'autre ;- Vérification par échantillonnage : accroche, chaque limite de scène, tournant, Freud, fin, générique ;
- Visionnage à froid indépendant (trouvez un agent qui n'a pas participé à la production pour ne visionner que la vidéo finale), corrigez au moins les MUST-FIX ;
ffprobeconfirme : 1920×1080/30 ips/bonne durée/AAC 48 kHz stéréo ;- Décodage complet sans erreur ; niveau sonore/crête conformes.
8. Couverture et texte de publication
- Couverture : copiez
cover/cover.html, remplacez le titre, la durée, l'accroche du bas, la source ; rendez en 1080×1440 PNG + JPG. La mise en page du modèle : petit label en haut + grand titre (en ambre pour « mauvaises personnes ») + parapluie/deux personnes au milieu + une phrase clé en bas + source. - Texte de publication : selon
references/publishing.md, produisez les versions longue/courte/version Bilibili/commentaire épinglé/tags ; ne réutilisez pas directement le texte de l'épisode précédent. - Le générique de fin et le logo d'angle conservent les limitations nécessaires comme « images de film, pas un cas réel », « perspective d'interprétation, pas un diagnostic ».
9. Livraison
mon-slug-episode/output/
<slug>_1080p_30fps.mp4
<slug>_sous-titres.srt
<slug>_couverture_3x4.png
<slug>_couverture_3x4.jpg
<slug>_texte-publication.md
sources-materiel.md
description-projet.md
Règles strictes (non-négociables pour la livraison)
- Nouveau script : le nouvel épisode doit avoir une nouvelle narration enregistrée/générée ; ne peut pas réutiliser l'audio de 194 secondes de la version mère avec les nouveaux sous-titres.
- Nouveau texte :
index.htmlne doit pas contenir de phrases complètes de la version mère ; utilisezreferences/text-slots.mdpour vérifier point par point. - Droits d'auteur / matériel : films, contenu client, stock, portraits, musique, sons doivent tous avoir une trace de source/autorisation ; chaque source a un crédit ; les identifiants titre/année/récit non réel sont dans l'image.
- Éthique : pas de diagnostic, pas de blâme de la victime, pas de fausses citations de philosophes, pas de personnages de film présentés comme des cas réels.
- Image : aucun texte rogné, aucun caractère isolé en fin de ligne, aucun texte qui chevauche les sous-titres ; si l'épisode utilise toujours la métaphore du parapluie, les deux personnages doivent être sous le parapluie à la fin.
- Son : narration claire, pas d'écrêtage, pas de silence inattendu ; le rendu
--silentconserve la piste audio personnalisée. - Visionnage : les MUST-FIX du visionnage à froid indépendant sont corrigés, ou bien documentés explicitement sur la raison de leur conservation.
À ne pas faire
- Ne réutilisez pas directement l'ancien texte, les anciens sous-titres ou l'ancienne narration de la version mère.
- Ne considérez pas « Le Septième Ciel »/Freud/Aristote/Kant comme un matériel fixe ; ne les forcez pas si le client n'en a pas besoin.
- Ne transformez pas toutes les scènes en la même image + le même texte ; la grammaire des scènes de la version mère varie.
- N'utilisez pas de dégradé bleu-violet, de néon, de fond étoilé à l'IA.
- Ne recadrez pas simplement le format 16:9 en couverture 3:4 ; utilisez
cover/cover.htmlpour recomposer la mise en page. - Ne mettez pas les paroles de philosophes/experts en « citation » avec des guillemets ; utilisez « il a discuté de / une façon de comprendre ».
- N'utilisez pas de films sous droit d'auteur, de visages de clients, de conversations privées ou de produits non divulgués sans autorisation du client.
- Ne téléchargez pas de fonds depuis YouTube/Bilibili/streaming/films sous droit d'auteur ; ne contournez pas les filigranes, les paiements ou les restrictions géographiques ; utilisez uniquement des stock gratuits/autorisés explicitement.
- N'utilisez pas d'étiquettes diagnostiques comme « physique à aimant à personnes toxiques », « cerveau amoureux » comme titres ; utilisez des questions, pas des jugements.
Carte des fichiers
references/client-brief.md: brief client, matrice de contenu, points de validation.references/asset-strategy.md: tournage client/domaine public/stock/photo/texte pur/mixte, unification multi-source, emplacements de contenu, manifeste.references/stock-sources.md: recherche, licence, téléchargement et crédit pour Mixkit/Coverr/Pexels/Pixabay/Commons.references/beat-sheet.md: structure des 16 battements, proportions, événements visuels, fonction du texte.references/visual-system.md: palette, polices, cadrage, parapluie/pluie, son, couverture.references/text-slots.md: liste de remplacement point par point.references/retiming.md: méthode de réorganisation de la timeline avec la nouvelle narration.references/rights-and-ethics.md: sources vidéo/portraits/sons/éthique.references/publishing.md: titres, texte long, texte court, description Bilibili, commentaire épinglé, tags.templates/index.template.html: composition de la version mère.templates/cover-3x4.template.html: couverture 3:4.templates/assets.manifest.example.json: modèle de manifeste de matériel.scripts/new_episode.sh: création d'un nouveau projet.scripts/prepare_media.sh: complément d'images, extraction d'images fixes, vérification de la source vidéo.scripts/render.sh: wrapper de rendu avec--silent.scripts/render_cover.sh: rendu decover/cover.htmlen 1080×1440 PNG/JPG.scripts/verify.sh: check/qa/ffprobe/décodage/niveau sonore.scripts/asset_report.py: vérification des fichiers/droits/crédits/scènes du manifeste de matériel.scripts/stock_search.py: recherche en ligne de stock gratuit, sortie des candidats/page/licence.scripts/fetch_stock.py: téléchargement, suppression de la piste audio, normalisation 1920×1080/30 ips, et mise à jour du manifeste.