Communitygithub.com

Zhati-Agent : Essai Visuel sur les Relations Sentimentales

Génère un essai visuel de 3 minutes en chinois sur les relations amoureuses, dans le style de Zhati : matériel client personnalisable (tournage client, films du domaine public, stock gratuit trouvé par IA, photos, texte pur, mixte), colonne vertébrale visuelle parapluie/pluie/pellicule, animations en police Song, couverture 3:4. À utiliser lorsque l'utilisateur demande une vidéo d'essai sur les relations/l'amour, un épisode personnalisé client ou un nouvel épisode dans le style de « Les bonnes personnes et les mauvaises personnes ».

Qu'est-ce que Zhati-Agent : Essai Visuel sur les Relations Sentimentales ?

Cette compétence (« skill ») est un workflow reproductible pour créer des essais vidéo de 3 minutes (2:40–3:40) sur les relations amoureuses, la famille et les émotions, dans le style distinctif de « Les bonnes personnes et les mauvaises personnes » de Zhati. Elle est conçue pour les agents AI comme Claude, Cursor ou Codex, et fournit une méthodologie complète incluant un storyboard de 17 battements, une palette visuelle (police Song, pellicule, pluie/parapluie), des normes audio (-15 LUFS) et une couverture 3:4. Le point clé est que le workflow est fixe tandis que le contenu est flexible : l'AI peut s'adapter à tout brief client, en utilisant des séquences filmées par le client, des films du domaine public, des photos, ou des photos libres de droits trouvées automatiquement via des scripts (`stock_search.py`, `fetch_stock.py`). La compétence gère l'ensemble du pipeline : génération d'un nouveau script, synchronisation, composition vidéo, mixing audio, vérification de la qualité, et création de la couverture. Elle insiste sur des garde-fous éthiques (pas de diagnostic, pas de blâme de la victime, attribution correcte des sources, pas de contenu sous copyright non autorisé) et produit un livrable complet (MP4, SRT, couverture, notes de publication).

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add Alzat007/zhati-relationship-film

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

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émentValeur par défaut
Vidéo principale1920×1080 / 30 ips / 2:40–3:40
Format d'image16:9
LangueNarration en chinois simplifié + sous-titres incrustés + SRT
Couverture1080×1440 (3:4), PNG + JPG
SonNarration + musique originale + bruit de pluie, environ −15 LUFS, crête réelle ≤ −1,5 dBFS
Sous-titresIncrustés dans l'image, fichier .srt séparé fourni
LivrablesMP4, SRT, couverture 3:4, texte de publication, sources du matériel, projet éditable
Validation clientBrief → 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 --ref pour 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 :

  1. Créer un nouveau projet dans $BASE_DIR/mon-slug-episode (par défaut $HOME/films-relations, modifiable avec --base) ;
  2. Copier le code template le plus récent du skill (index.html, cover/cover.html), puis copier vendor/, les polices, les textures et un jeu de matériel de démarrage depuis la version mère ;
  3. Copier assets/score.wav de la version mère comme piste audio de placeholder (pour que la page puisse d'abord être exécutée) ;
  4. Générer les modèles BRIEF.md, script.txt, sous-titres.srt, traitement.md, sources-materiel.md, texte-publication.md, assets.manifest.json ;
  5. 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 :

  1. Accroche (une question)
  2. Histoire concrète (pluie/parapluie ; peut être remplacé par un autre objet concret, mais un objet doit traverser toute l'histoire)
  3. Limitation du type « Ceci est une histoire fictive »
  4. Distinction de deux concepts (gentillesse vs. convenance, ou la paire de concepts de cet épisode)
  5. Perspective philosophique A (amitié/réciprocité/respect, etc.)
  6. Limite d'une personne (« Les efforts seuls d'une personne ne peuvent pas accomplir une relation à deux »)
  7. Question sur le tournant émotionnel (pourquoi est-on triste mais on attend quand même la prochaine fois)
  8. Perspective psychologique (répétition/modèle ; utiliser « une façon de comprendre », sans faire de diagnostic)
  9. Reconnaissance du modèle (effort pour gagner la reconnaissance)
  10. Froideur et doute de soi
  11. Tournant éthique (le mal n'est pas de votre faute ; la responsabilité incombe à l'auteur du mal)
  12. Limites et exceptions (tromperie, changement, voir après avoir côtoyé)
  13. Introspection (deux questions ; miroir/réflexion)
  14. Perspective philosophique B (respect de soi)
  15. Une toute petite phrase (action réalisable)
  16. Exercice et conclusion (garder la douceur, mais aussi se préserver une place)
  17. 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 non om-sound, donc lors du rendu, ajoutez --silent, sinon om render tentera de reconstruire la piste audio. Voir la section « Son » de references/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, le data-duration du nœud racine, DUR dans 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-rate des 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 still pour 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.py pour 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 :

  1. Modifier le src correspondant à data-asset-slot ;
  2. Recalculer les fenêtres vidéo avec ffprobe ;
  3. Réextraire les images fixes ;
  4. Modifier #credit, #credits .cols, sources-materiel.md ;
  5. 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 ;
  • ffprobe confirme : 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)

  1. 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.
  2. Nouveau texte : index.html ne doit pas contenir de phrases complètes de la version mère ; utilisez references/text-slots.md pour vérifier point par point.
  3. 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.
  4. É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.
  5. 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.
  6. Son : narration claire, pas d'écrêtage, pas de silence inattendu ; le rendu --silent conserve la piste audio personnalisée.
  7. 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.html pour 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 de cover/cover.html en 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.

Skills associés