Communitygithub.com

comfy-h3-video-producer

Pipeline de production vidéo automatisée locale de scénario à vidéo avec ComfyUI (MiniMax H3). Utilisé lorsque l'utilisateur demande une production de storyboard vidéo via ComfyUI à partir d'un scénario, ou mentionne '一采二采/超分/班长套件/CSGlide/workflow générateur de vidéo'.

Qu'est-ce que comfy-h3-video-producer ?

ComfyUI H3 Video Producer est un pipeline de production vidéo industrielle complet, conçu pour transformer automatiquement un scénario en vidéo courte finalisée via ComfyUI en utilisant le modèle MiniMax H3. Il couvre l'ensemble du cycle : handshake du workflow (sans numéros de nœuds codés en dur), planification du réalisateur et découpage en segments, génération de prompts optimisés pour H3, soumission avec pré-vérification, surveillance automatisée avec double inspection (première prise), réception des fichiers avec nettoyage du bruit de fond audio et mixage intelligent (sidechain compression), assemblage final et reprise après panne. Basé sur des règles cinématographiques strictes, il intègre une vérification préalable de l'image clé (keyframe) pour le verrouillage facial via I2V, évitant les déformations de visage (réduction de 30% à 2%). Il prend en charge Windows (encodage UTF-8 forcé) et nécessite ComfyUI avec le nœud MiniMax H3. Le pipeline comprend des outils de diagnostic, de contrôle qualité ASR Whisper, de raffinement des visages pour les plans larges, et un mixage audio professionnel avec ducking automatique.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/abserari/drama-production-skills/tree/HEAD/skills/comfy-h3-video-producer

Demander à votre IA préférée

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

Documentation

ComfyUI H3 Scénario vers Vidéo (v5.0 – Réalisateur, Langage Audiovisuel et Génie Industriel)

Mise à jour majeure v5.0 (Novembre 2026 – Industrialisation du langage audiovisuel et résolution des 7 points de douleur clés)

  • 1. Génération préalable de l'image clé de storyboard (I2V – Scène/Personnage/Accessoire) : Fin de l'aveugle T2V sans image clé. Avant l'échantillonnage vidéo de chaque plan, le modèle génère une image clé 16:9 ( keyframe_segXX.png ) combinant la position de la caméra, les vues du personnage et les accessoires. Après validation, cette image est injectée dans le nœud I2V, verrouillant la géométrie squelettique, les textures vestimentaires et les contours des accessoires à l'image 0.
  • 2. Verrouillage du locuteur unique et protocole de suppression de la parole pour tous (Speaker Lock & Mouth Suppression) : Élimine totalement le problème de marionnette où tous les personnages bougent la bouche en même temps. Dans [Subject 1] , spécifiez clairement le seul locuteur principal ; dans [Action 1] , séparez impérativement le sujet et l'action ; les personnages non parlants se voient imposer une clause de suppression de la parole (lips tightly sealed, completely silent, showing tense glare without mouth movement).
  • 3. Carte mère de style globale (Global Style Bible) et porte de validation préalable : Refuse la dérive stylistique aléatoire d'un épisode à l'autre. Avant le lancement, il faut établir une Style Bible globale ( visual_genre, environment_base, lighting_base, color_palette, quality_base ), générer 4 échantillons de style à différents plans, les faire valider manuellement, puis les verrouiller pour toute la série.
  • 4. Rythme et densité normalisés pour les séries courtes (Pacing & Density Normalization) : Résout le problème de traînage et de marmonnement. Avec le timing standard de 175 frames (7,29 s), le dialogue doit strictement correspondre à 20~28 caractères chinois purs (rythme idéal pour les séries courtes : 3,2~4,0 caractères/s) ; déclarez explicitement spoken crisply and rapidly without dragging syllables ; terminez la parole en 4,5s, puis laissez 2,8s pour un regard froid et une réaction.
  • 5. Bibliothèque de six mouvements de caméra dynamiques de qualité cinéma et de direction des déplacements (Director Camera & Blocking) : Interdit les conversations statiques face à face ! Introduit de force 6 grands mouvements de caméra dynamiques : ① Croisement lent avec travelling avant, ② Gros plan sur un accessoire avec mise au point sur les yeux, ③ Angle hollandais oblique oppressant, ④ Retournement brusque avec regard froid, ⑤ Approche menaçante à l'oreille, ⑥ Silhouette en contre-jour en confrontation.
  • 6. Règles de prononciation du mandarin pur et porte de dérive linguistique ASR (Mandarin Purity & Language Gate) : Normalisation complète des dialogues en chinois pur (chiffres arabes convertis en caractères chinois majuscules, suppression des abréviations anglaises et des symboles illégaux) ; ajout forcé dans [Audio 1] de Strict Mandarin Chinese dialogue only, standard native Chinese accent, zero foreign tone ; intégration de la détection de langue Whisper ASR pour intercepter automatiquement les sous-titres non chinois et les dérives linguistiques.
  • 7. Boucle fermée du pipeline maître d'ingénierie Master : Consolidation de scripts/director_engine_v3.py, automatisant l'ensemble du processus : storyboard, compilation des prompts, vérification du rythme de parole, verrouillage du locuteur.

Mise à jour v4.1 (Novembre 2026 – Spécifications officielles v2.2 des prompts et approfondissement du timing à 175 frames)

  • Mise à niveau des spécifications de prompt vers v2.2 :
    • Intégration du guide officiel MiniMax ( references/official/base-en.txt, ref-en.txt ) ;
    • Les trois éléments de la caméra (type+ampleur+vitesse) doivent être écrits dans une phrase naturelle à l'intérieur du plan, interdiction d'empiler des tags à la fin ;
    • Déclaration claire des droits d'utilisation des ressources : ne pas copier la position de la caméra originale, ne pas copier le ratio d'occupation ;
    • Respect strict du budget de complexité : maximum 3 sujets + 1 ligne de dialogue par segment (175 frames / 7,29 s).
  • Verrouillage de la longueur de segment à 175 frames (7,29 s) :
    • 243 frames officiellement retirées, limite haute fixée à 192 frames (8,00 s), production verrouillée sur 175 frames, avec une marge de silence de 1,0~1,2 s en fin de segment ;
    • Zone d'interdiction de la couche de planification (les plans larges ne servent qu'à établir l'espace et à reconnaître les visages avant de passer aux plans moyens/rapprochés, interdiction du zoom arrière et des passages de fenêtre).
  • Défense UTF-8 totale pour Windows :
    • force_utf8_stdio() réinitialise stdout/stderr en UTF-8, éliminant les plantages dus à l'encodage GBK/CP936.
  • Extension de la boîte à outils de contrôle qualité et de raffinement des visages pour les plans larges :
    • Introduction de Whisper ASR pour le contrôle qualité des dialogues (scripts/check_dialogue_asr.py), contrôle qualité du flux optique et des coutures de fin de segment (scripts/sop_check.py), exemption de la marge de fin de segment pour la reprise (--tail-exempt) et raffinement adaptatif des visages pour les plans larges/ moyens (scripts/face_refine_pipeline.py).

Mise à jour v4.0 (Octobre 2026 – Révolution industrielle : verrouillage facial sur image clé I2V et mixage audio cinématographique)

  • Validation de l'image clé + Verrouillage géométrique I2V (pour éliminer la déformation faciale et l'adoucissement des accessoires typiques du T2V) : Une image générée par texte prend seulement 5 à 15 secondes, insatisfait, on régénère en une seconde ; il est strictement interdit de lancer un T2V aveugle de 8 minutes sans image clé ! Un contrôle qualité a posteriori ne fait que réparer après coup, à un coût élevé. Pour tout plan avec un gros plan de personnage ou une interaction clé avec un accessoire, il faut d'abord déterminer l'image clé, injecter first_frame en mode I2V, verrouiller la géométrie anatomique et les circuits de l'accessoire à l'image 0, laissant H3 gérer uniquement la cinétique temporelle et le synchronisme labial. Le taux de déformation faciale chute de 30% à moins de 2%. Voir references/keyframe_i2v_guide.md.
  • Fusion musicale de qualité cinéma et esquive intelligente de l'audio (Audio Ducking) : Interdiction totale dans le prompt de générer un bruit de fond déformé par H3 ; après le nettoyage des dialogues et des bruitages, un BGM haute-fidélité indépendant est posé sur toute la vidéo, avec sidechaincompress natif de FFmpeg pour l'esquive dynamique : le volume baisse instantanément de -14 dB lorsque la voix parle, et remonte doucement 0,3 à 0,5 s après la fin du dialogue, créant une expérience audiovisuelle de série courte commerciale. Nouvel outil scripts/cinematic_audio_mixer.py.
  • Nouvel outil de porte d'image clé scripts/keyframe_gate.py : prend en charge l'inspection de l'état de l'image clé au niveau du projet, la synchronisation avec le dépôt ComfyUI et l'injection sécurisée dans le nœud I2V.

Mise à jour v3.2 (25 Octobre 2026)

  • Ajout de la section §13 Quand mettre à jour cette compétence : six conditions de déclenchement, quatre types de contenu à ne pas importer, trois questions pour la migration, règles de placement, trois étapes d'auto-vérification après modification
  • Règle d'or en une phrase : Ne consolider que les mécanismes et critères qui restent valables après le changement de scénario ; les fichiers de projet ne sont jamais inclus dans la compétence.

Mise à jour v3.1 (Octobre 2026, consolidation après 13 segments / 86 secondes de production)

  • Ajout de la section §4.1 Limites d'obéissance de H3 (échec du zoom arrière, passage de fenêtre/porte, mouvement hors fenêtre non généré, verrouillage du plan, ordres de caméra négatifs)
  • Ajout de la section §5.1 Récupération de la mémoire vidéo (a déjà fait passer un segment de 5 à 33 minutes)
  • Ajout de 6 règles à l'arbre de décision §8 (action de fin volée, trop d'actions dans un rythme, bruitage transformé en bruit de fond, effet secondaire de quiet-gain, erreur F0)
  • Ajout à §12 de quatre versions de gradient pour la position du dialogue, comptabilité trim de cont off
  • Recommandation de longueur de segment dans §3 modifiée en 175 frames (auparavant 124/243, obsolète)
  • Correction de deux exemples obsolètes et trompeurs dans les spécifications de prompt : « le dialogue écrit à la fin du rythme » doit être au début du rythme ; « la poitrine se soulève toutes les 2,5 secondes » était interprété comme une instruction de respiration, a été supprimé

Transformer un scénario en vidéo finalisée : Handshake → Planification Réalisateur → Validation Image Clé (I2V) → Prompts → Soumission → Surveillance Double Inspection → Réception → Mixage avec Esquive et Assemblage.

Principe clé de la v4 : Passer de 'générer une vidéo en aveugle + contrôle qualité après coup avec régénération coûteuse' à 'contrôle d'image préalable à faible coût + exécution I2V verrouillant les visages + mixage audio cinématographique avec esquive'.

Règle d'airain : une tâche = un répertoire de projet local + un nom de projet de table de montage (h3_chain/<nom_du_projet>). Ces deux éléments ne doivent jamais être changés depuis la définition du premier segment jusqu'à la fin du concat. Changer n'est pas 'mal ranger un fichier', mais interrompt directement la reprise : le module de reprise cherche le segment précédent via chain.order[k-1] ; si le nom du projet change, il ne le trouve pas, et le segment actuel est silencieusement traité comme le premier segment, redessiné, et la vidéo finale se retrouve dans le répertoire d'un autre film. La liaison est écrite dans le champ chain du project.json, et submit la vérifie à chaque fois : une incohérence entraîne un rejet direct (pas un simple avertissement). Pour changer, il faut tout changer : nouveau projet + nouveau nom de table de montage, et recommencer depuis le premier segment. Règles complètes à la §10.1.

0. Contrat de fonctionnement (d'abord, clarifier qui fait quoi)

QuiResponsable de
Agent (entièrement automatique)Lire le scénario, planifier la réalisation, valider l'image clé, écrire les prompts, preflight, soumettre, surveiller, double inspection, réception, nettoyer le bruit de fond, mixer la musique avec esquive, assembler, livrer, tenir le journal de bord
Utilisateur (fait seulement trois choses)① Ouvrir ComfyUI et charger le workflow, dire « prêt » ② Réglage unique du scénario/style/candidat d'image clé ③ Voir la vidéo et approuver

Sept choses que l'Agent ne doit pas faire

  1. Ne pas soumettre tant que le handshake du workflow n'est pas fait (wf_map.json n'existe pas).
  2. Ne pas sauter la gate (double inspection de la première prise) pour passer directement à finish – le script le rejettera, ne pas essayer de contourner.
  3. Ne pas écrire l'état/les images extraites/les wav temporaires dans le répertoire de la compétence (paths.py a des garde-fous stricts).
  4. Ne pas modifier les connexions en se basant sur « les numéros de nœuds de la dernière fois » – injecter seulement trois segments de données, ne jamais toucher aux connexions des nœuds de sur-échantillonnage ou de sortie finale.
  5. Ne jamais sauter la validation de l'image clé et lancer une génération T2V aveugle en présence d'un gros plan de personnage ou d'une interaction clé avec un accessoire – la validation statique de l'image clé ne prend que 5 à 15 secondes, on peut régénérer en une seconde si on est insatisfait ; lancer un T2V de 8 minutes et faire un contrôle qualité après coup est un suicide à coût élevé. Il faut d'abord déterminer l'image clé, injecter first_frame et utiliser I2V pour verrouiller le visage et les accessoires !
  6. Ne jamais soumettre le segment suivant sans avoir d'abord extrait quelques images pour voir le résultat – le preflight ne vérifie que la structure du texte, pas l'image. Après la réception, extraire d'abord 4 à 6 frames de la grille pour un aperçu, puis soumettre le suivant ; cela évite aussi « l'état mémoire sale dû à deux soumissions trop rapides » (voir §5.1).
  7. Ne pas copier aveuglément les fichiers du projet en cours dans la compétence – nom du film/nom du personnage/numéro de segment/ plan.json / assets/*.json / texte du prompt d'un segment en cours / journal trim / seed de la liste noire, tout cela reste dans le répertoire du projet. Ne consolider que les mécanismes, critères et formulations qui « restent valables après un changement de scénario ». Critères et règles de placement à la §13.

Il n'y a que ces quatre cas où l'on s'arrête pour demander à l'utilisateur : ambiguïté du scénario affectant la structure du storyboard / réglage du style ou du format / matériel manquant et impossible à définir par texte / 3 régénérations du même segment échouées.

1. Boîte à outils principale (chaîne d'outils de production complète)

OutilFonctionSous-commandes clés
scripts/h3wf.pyHandshake du workflow : lire le graphe réellement exécuté depuis ComfyUI, reconnaître automatiquement le rôle des nœudssync show doctor
scripts/sop_run.pyProduction : soumission (avec preflight intégré), surveillance automatique, attente de la vidéo finalesubmit watch final abort
scripts/h3proj.pyGestion du projet et portes : journal de bord, double inspection de la première prise, signature visuelle, réception, assemblage, nettoyage des résidusnew status gate review finish concat residue
scripts/keyframe_gate.pyValidation de l'image clé et injection I2V : inspection de l'état de l'image clé, synchronisation avec le dépôt ComfyUI, injection de first_frame--project --seg --sync
scripts/face_refine_pipeline.pyRaffinement externe des visages pour les plans larges : raffinement conditionnel des visages sur les plans moyens/larges, passage direct de l'audio, dégradation douce en cas d'absence de nœud personnalisé--input --output --char-ref --dry-run
scripts/cinematic_audio_mixer.pyMixage audio cinématographique avec esquive intelligente : BGM indépendant externe, sidechaincompress pour esquiver automatiquement la voix--input --output --bgm --volume
scripts/check_dialogue_asr.pyComparaison automatique des dialogues ASR : localisation des segments vocaux par VAD → transcription Whisper → comparaison avec le texte original <d>--file --text --seg
scripts/sop_check.pyContrôle qualité de l'énergie d'action de fin de segment et de la similarité des coutures : grille de 8 contacts, ratio de flux optique d'action, comparaison des images clés--video --seg
scripts/shisei_pose.py(Optionnel) Pose de combat/confrontation : recherche de pose multi-angles et extraction de dessin au trait--search --duo --get --view

L'interpréteur fixe est le venv avec cv2 : C:/Users/windows/.workbuddy/binaries/python/envs/default/Scripts/python.exe (ci-après PY)

2. Étape 0 : Handshake du workflow (première chose à faire à chaque début de projet, non contournable)

Pourquoi on ne peut pas le figer : l'utilisateur met à jour son workflow (ajout d'une troisième prise, changement de taille de sur-échantillonnage, changement de préfixe de sortie). Si le numéro de nœud change, une « réparation de connexion » codée en dur cassera une chaîne qui fonctionnait – c'était la cause racine de toutes les erreurs de la v2.

Principe clé : l'utilisateur peut modifier les paramètres à tout moment sur le canevas (taille de sur-échantillonnage, modèle, nombre d'étapes d'échantillonnage). La génération doit utiliser ses valeurs actuelles. submit vérifie à chaque fois la version sauvegardée du canevas (h3wf.refresh_if_stale) : si le mtime du fichier a changé, il relit le graphe et affiche les paramètres qui ont changé un par un ([wf ] Détection de N modifications de paramètres). h3_data, seed, filename_prefix de rack/desk/cast sont injectés à l'exécution, ne comptent pas comme des modifications utilisateur, et sont exclus de la détection.

Mais il y a une limitation au niveau de l'API qui ne peut être contournée et doit être signalée à l'utilisateur : l'état du canevas de ComfyUI n'est enregistré dans ComfyUI/user/default/workflows/*.json qu'après la sauvegarde du workflow (Ctrl+S). Les modifications non sauvegardées ne peuvent être lues par aucune interface. Donc, au début de chaque projet, il faut dire à l'utilisateur : si vous modifiez des paramètres, faites Ctrl+S. Si l'utilisateur a également cliqué sur Queue une fois, ce graphe d'exécution se retrouve dans /history et peut être capté par le deuxième critère.

Actions :

  1. Rappeler d'abord à l'utilisateur : ouvrez l'application de bureau ComfyUI, chargez le workflow que vous allez utiliser, attendez qu'il dise « d'accord ».
  2. Prérequis : sync lit la dernière tâche vidéo réussie dans ComfyUI /history.
    • Si le workflow vient d'être changé / vient d'être installé → demandez à l'utilisateur de lancer une exécution manuelle (n'importe quel segment, pourvu que ça marche), puis sync.
    • Si aucune exécution n'a jamais réussi → utiliser le fichier de l'interface comme solution de repli : h3wf.py sync --from-ui "<workflow>.json" (nécessite que ComfyUI tourne).
  3. Vérification de l'état + identification :
    $PY scripts/h3wf.py show      # Voir uniquement le résultat de l'identification
    $PY scripts/h3wf.py sync      # Après identification réussie, enregistrer comme référence pour la production actuelle
    
  4. Interpréter la sortie : les cinq rôles essentiels rack/desk/cast/seed/final doivent tous avoir une valeur ; s'il en manque un, c'est que le workflow a changé de nom de classe de nœud. Collez cette ligne à l'utilisateur, ne devinez pas par vous-même. La note [note] explique comment les multiples candidats ont été sélectionnés. Ce même résultat donne trois autres informations, dont l'absence fera trébucher les étapes suivantes :
    • Nom du projet (chain.name de la table de montage) : submit l'utilise pour décider dans quel répertoire de h3_chain/ placer la vidéo finalisée, et la première fois qu'il soumet, il l'écrit dans project.json.chain comme liaison. S'il affiche « — », cela signifie que la table de montage n'a pas de nom de projet, et submit utilisera alors le nom du projet de la compétence et émettra un avertissement – cela équivaut à démarrer un autre film (et n'écrira pas de liaison). Changer le nom après la liaison sera rejeté, voir §10.1.
    • Préfixe de la première prise : watch/gate --latest l'utilisent pour ne reconnaître que les fichiers de la première prise. S'il affiche « — », on tombe sur tous les préfixes, ce qui peut entraîner, après la chaîne complète, que la version sur-échantillonnée ou finale soit considérée comme la première prise pour la double inspection.
    • [WARN] Chaîne de réception : si « placement de fin de segment » ou son « ancre d'ordre » n'est pas connecté, la vidéo finalisée ne reviendra pas à la table de montage, et le segment suivant ne pourra pas être raccordé.
  5. Si ComfyUI n'est pas ouvert, il est autorisé à démarrer sans tête (port 8188, n'affecte pas l'application de bureau) :
    cd "D:/Comfy-Desktop/ComfyUI-Installs/ComfyUI (1)/ComfyUI"
    ".venv/Scripts/python.exe" main.py --port 8188 \
      --input-directory "D:/Comfy-Desktop/ComfyUI-Shared/input" \
      --output-directory "D:/Comfy-Desktop/ComfyUI-Shared/output" \
      --enable-assets --disable-auto-launch
    
    Mais utilisez de préférence l'instance ouverte par l'utilisateur, l'état des nœuds est basé sur son interface.

Que faire si le workflow a changé : h3wf.py doctor listera « numéro de nœud changé / préfixe changé / nom du projet changé / rôle manquant ». Si la mise à jour est intentionnelle → h3wf.py sync --force pour refaire le handshake, puis toutes les soumissions utiliseront automatiquement le nouveau graphe. submit vérifie l'empreinte à chaque fois. Une dérive non confirmée sera rejetée (pas de risque d'utiliser l'ancien graphe toute la nuit). Lors du handshake, un marqueur de niveau history_seq est enregistré : les graphes d'exécution plus anciens que ce marqueur ne sont pas considérés comme une dérive (ils datent d'avant la purge du /history). Seuls les nouveaux graphes générés après le handshake qui sont différents seront rejetés.

3. Étape 1 : Planification du réalisateur (obligatoire, première chose à faire après avoir reçu le scénario)

Il n'est pas permis d'écrire directement les prompts après avoir reçu le scénario. Chargez d'abord la compétence director-advisor pour obtenir un storyboard complet :

  1. Décomposer les cinq éléments : tonalité émotionnelle / rythme dramatique / relations entre les personnages / espace / action
  2. Déterminer le squelette rythmique : nombre de plans, courbe de tension (un seul point culminant), plan d'ouverture et plan de clôture
  3. Concevoir plan par plan : type de plan = distance émotionnelle, mouvement de caméra = mouvement émotionnel, un plan = une unité d'action, durée 1-3s (max 5s), chaque plan avec une ligne de justification de conception
  4. Accrocher 1-2 exemples réels de films (uniquement depuis director-advisor/references/master_cases.md )

Convertissez ensuite en segments H3 en utilisant references/directing_bridge.md et enregistrez la table de planification des segments :

{"name": "Nom du film", "segs": [
  {"seg": "seg01", "length": 175, "shots": "1-4", "dialogue": false,
   "hook": "Premier segment : établir l'espace en plan général", "sfx": true, "event": "Elle entre dans la maison en pierre et pose la lampe"}
]}
  • length : 175 (≈7,29s, 3-4 plans) est la valeur recommandée ; 124 (≈5,17s, 1-2 plans) / 243 (≈10,13s, 2-4 plans) sont également utilisables. Formule clé : nouvelles images nettes = length − cont_frames. Avec cont_frames=5, 175 images nettes restent 170 (7,08s), 124 images nettes restent 85 (3,54s) – pour le même coût de reprise, le rendement net de 175 est double, et le rendu ne prend que 4 à 4,5 minutes, ce qui est le point d'inflexion du rapport coût-efficacité. Les segments avec dialogue utilisent également 175, pas 243 : plus le segment est long, plus le dialogue risque d'atteindre la fin (voir §12 Règle d'airain de la chronologie du dialogue).
  • hook : la continuité avec le segment précédent (continuité de posture/regard/lumière). Si on ne peut pas écrire de hook, c'est que le découpage est mauvais.
  • dialogue/sfx : détermine les éléments que la porte audio vérifie (segment sans dialogue : vérifier le silence ; segment sans bruitage : désactiver --fx).
  • Validation : $PY scripts/h3proj.py plan --check

Un segment = un événement, peut contenir plusieurs plans ( [Beat N] représente la position du plan, écrivez « coupe franche vers… » et H3 exécutera) ; on ne peut pas changer d'espace (carte) ni d'événement principal. Le point de coupe doit être sur une action, pas une répartition égale en secondes.

En écrivant le storyboard, passez simultanément deux contrôles de contenu (voir references/vividness.md pour les détails) :

  • Quatre questions logiques : que veut faire le personnage à ce moment ? Où est-il, vers qui se tourne-t-il ? Le temps/la lumière sont-ils continus ? La cause et l'effet de l'action précédente sont-ils maintenus ?
  • Trois éléments de vivacité : chaque rythme doit avoir au moins une « cause de l'action + réaction de l'environnement + sensation tactile de la matière ». Pas seulement « debout en parlant ».

3.1 Amélioration optionnelle : Pipeline de pose de combat de haute qualité et de confrontation à deux (Shisei Pose Guidance)

Lorsque le scénario implique un combat rapproché, un affrontement à l'arme blanche, une confrontation en champ-contrechamp à deux ou des enchevêtrements corporels complexes, pour éviter les problèmes courants des modèles vidéo (mouvements mous, déformation anatomique, inversion de l'axe 180°), activez le guidage de pose Shisei local (voir references/shisei_combat_pipeline.md) :

  • Recherche de pose : utilisez le script de recherche local pour interroger 55 actions de confrontation à deux et 288 actions individuelles :
    python scripts/shisei_pose.py --duo --search "corps à corps"
    
  • Extraction du dessin au trait multi-angles : selon la position de la caméra du réalisateur, exportez les dessins au trait de 5 angles de vue ( front face / side profil / diag 45° oblique / above plongée / below contre-plongée) vers le répertoire du projet :
    python scripts/shisei_pose.py --get D001 --view diag --out references/poses
    
  • Ancrage squelettique de l'image clé : combinez le dessin au trait de la pose extrait avec la fiche du personnage ( sal_character_sheet.jpg etc.) et injectez le tout dans le moteur de génération d'images (Imagen / Qwen), produisant une image clé 100% rigoureuse en termes de composition, puis injectez-la dans MiniMax H3, éliminant la dérive spatiale et les mouvements mous.

3.2 Étape obligatoire : Validation de l'image clé du storyboard et verrouillage géométrique I2V (Keyframe Gate)

Règle d'airain industrielle (priorité cognitive la plus élevée) : Pour tout plan avec un gros plan de visage / plan américain, ou une interaction clé avec un accessoire (comme démonter une montre, tenir une arme, compter de l'argent, tamponner), Il est strictement interdit de lancer une génération T2V aveugle ! Il faut exécuter « Validation de l'image clé générée ➔ Génération vidéo à partir d'image (I2V) avec verrouillage facial anti-déformation ».

  1. Logique centrale :
    • Une image statique ne prend que 5 ~ 15 secondes/image, toute l'énergie latente peut être concentrée sur les traits du visage, les cheveux et la microstructure des accessoires ; insatisfait, on régénère en une seconde ;
    • Le rendu d'un segment vidéo prend 4 ~ 8 minutes. La génération purement T2V, sans point d'ancrage physique, est très sujette à la dérive anatomique ; un « contrôle qualité automatique » après coup coûte 40 fois plus cher et ne traite que les symptômes ;
    • En injectant l'image clé sélectionnée dans le port first_frame du MiniMaxH3ImageToVideo, l'image 0 sert de valeur de vérité géométrique verrouillée. Le modèle n'a pas besoin de deviner la structure, toute son attention est allouée à « l'action motrice et l'alignement labial ». Le taux de déformation faciale chute de 30% à moins de 2% !
  2. Processus d'exécution :
    • G0 Fiche d'actif du personnage : avant de commencer, préparez la fiche de personnage découplée 2+3 têtes selon references/character_sheet_standard.md ;
    • G1.5 Validation de l'image clé : après avoir écrit le storyboard, utilisez l'outil de génération d'images pour rapidement générer une photo de film 16:9 de l'image clé, vérifiez les traits du visage, la focalisation du regard et l'exactitude des accessoires ;
    • Finalisation et enregistrement : après validation, sauvegardez dans <projet>/segments/<seg_id>_keyframe.png (ou .jpg) ;
    • Reconnaissance automatique et montage I2V : lorsque le pipeline détecte que l'image clé existe, il la synchronise automatiquement avec ComfyUI via scripts/keyframe_gate.py et connecte le port first_frame. Si elle n'est pas détectée, il dégrade automatiquement et en douceur vers un pur pilotage par texte. Voir references/keyframe_i2v_guide.md.

4. Étape 2 : Écrire les prompts (standard = references/prompt_standard_v2.md)

  • Sept squelettes de paragraphe, [Beat N], cartes vocales <Audio N>, overall_soundscape avec trois couches sonores, pas un mot du nom du segment ne peut être changé.
  • Écrire les prompts dans segments/<seg>.txt (uniquement le texte du prompt, sans bloc de code).
  • Carte vocale : voice_card.json du projet est prioritaire ( h3proj.py new a déjà copié le modèle), cohérent mot pour mot d'un segment à l'autre.
  • Pas besoin d'exécuter preflight séparément : submit appelle check_prompt_v2.check() en interne, un FAIL entraîne un rejet direct. Pour une vérification anticipée : $PY scripts/check_prompt_v2.py --file segments/seg01.txt --length 243

Aide-mémoire sur le format (les détails sont dans le document de spécification) : tous les <Subject N> avec 权限= ; tolérance zéro pour les mots d'émotion ; chaque rythme 音效: avec une liste un par un + « seulement ces N types, aucun autre son » comme clause de fermeture ; fin du dialogue à ≥1,0 s de la fin du segment ; une ligne de dialogue par segment.

Contrecoup des mots négatifs (testé, deux fois) : H3 traite les noms d'entités dans les mots interdits comme des invites positives pour les dessiner. Si vous écrivez « Il est strictement interdit de générer une trombe d'eau, une colonne d'eau, un jet d'eau » dans 防错约束 (contraintes anti-erreur), l'image se retrouvera avec une colonne d'eau blanche ; Si vous écrivez « le bord avant du casque se soulève » dans la description de l'action, le personnage principal aura un casque transparent en l'air. Règle : pour qu'une chose n'apparaisse pas, supprimez complètement son nom de la phrase, et remplacez-la par une description positive de ce que vous voulez vraiment voir (Exemple : « plan plongeant vertical, seulement un creux rond descendant et une silhouette noire immergée dans l'eau »), au lieu d'écrire « pas de X, ne pas avoir X ». 防错约束 ne doit contenir que des contraintes abstraites (pas de filigrane / pas de sous-titres / pas de mains déformées / pas d'effet de lumière de flamme).

Le latent de reprise déforme le personnage au premier rythme (reproduit 5 fois dans ce projet, le piège le plus coûteux) : Les segments avec --cont génèrent de manière stable au premier rythme une silhouette de dos grande, vêtue d'une robe noire, les cheveux longs défaits, même si – l'image de fin du segment précédent était « plan plongeant sur l'eau + ombre noire tombant dans l'eau » (seg02) ou « plan rapproché du visage de Chen Mo, t-shirt noir » (seg03), et que l'image de référence a été correctement injectée ([rack] 1 matériau : Chen Mo→Chen Mo.png), et que le texte a été écrit mot pour mot sur les vêtements, tout cela n'a pas suffi à l'empêcher. Avec le même prompt, la même image de référence, la même plage de seeds, en passant à --cont off, les deux fois, tout est revenu à la normale (seg02 : le premier rythme est redevenu Chen Mo en t-shirt noir cheveux courts ; seg03 : le premier rythme est redevenu un pur plan d'ensemble vide de la ville en plongée).

Jugement et traitement :

  • Conclusion de ce projet : conservez la reprise, mais seulement 5 frames ( cont_frames: 5 dans project.json, soit 0,21 seconde). Ce que veut l'utilisateur, c'est « quelques frames pour garantir la cohérence contextuelle ». 39 frames (1,625 s) est un gaspillage, et il faudrait les couper une par une en post-production. En cas de coupe franche (plage → porte, ce genre de saut de lieu dans le scénario), utilisez --cont off. Il faut tester et enregistrer si la contamination par l'ancre se produit encore avec 5 frames ; si le personnage au premier rythme est incorrect, essayez d'abord --cont off.
  • Jugement général : la reprise n'est utile que pour « même espace, même position de caméra, continuité directe de l'action » ; dès que les vêtements/la silhouette/la coiffure du personnage au premier rythme sont différents, essayez d'abord --cont off (une première prise ne prend que 2 minutes), c'est beaucoup plus rapide que de modifier le texte, et la modification du texte est inefficace.
  • Lorsque la reprise est activée, [cont ] Reprise de clip_xxxx (…) est affiché ; confirmez l'image clé avant de décider de la conserver ou non.

4.1 Limites d'obéissance de H3 (à lire avant d'écrire les prompts)

Ce sont des limites dures testées empiriquement, changer le texte ne sert à rien, changer de seed non plus. On ne peut que les contourner dans la formulation. Toutes proviennent de l'enregistrement continu de 13 segments / 86 secondes de production.

Ce que vous voulez qu'il fasseRésultat du testPar quoi le remplacer
Zoom arrière / recul / zoom avant (mouvement de caméra avec déplacement)4 tentatives, 4 échecs. Même en écrivant « s'arrêter lorsqu'on voit le levier », il sort toujours par la fenêtre, révélant une autre paroi intérieureUtiliser un pur panoramique (même position de caméra, seulement l'angle change : d'abord panoramique vers le bas jusqu'au sol, puis vers le haut), ou une coupe franche
La caméra traverse une fenêtre/un trou pour entrer dans un intérieurIl ouvre la porte accessoirement. Même en écrivant « la porte reste fermée, entrer uniquement par l'ouverture de la fenêtre vide », ça ne marche pasCoupe franche à l'intérieur du segment pour entrer dans l'intérieur, puis couper la tête du segment au montage ; c'est plus fiable que n'importe quel mouvement de caméra de transition
Mouvement de la scène à l'extérieur de la fenêtre (voiture en mouvement)Non généré. Même en réécrivant « trois lignes pointillées blanches défilent par seconde vers le visage », ça ne marche pas (différence inter-image des pixels extérieurs : 1,26 à l'arrêt / 4,15 après écriture, indiscernable à l'œil nu)La sensation de mouvement est créée par le bruit du moteur en post-production + de légères vibrations de la carrosserie, ne comptez pas sur la génération
« Plan fixe / ne pas zoomer / ne pas faire de zoom avant/arrière »Faible obéissance, le zoom avant se produit quand même dans la seconde moitiéRemplacer par une description positive « le cadre montre toujours tout le X (du bord supérieur du cadre de la porte à la pédale) » – contrôler avec « ce qui doit être inclus »
« Ne pas faire apparaître X / ne pas être X »Effet inverse, X est dessiné (comme le contrecoup des mots négatifs ci-dessus)Supprimer complètement le nom de X de la phrase
Faire plus de 2 actions dans le même rythmeChacune n'est faite qu'à moitié, ou la plus « inintéressante » est complètement ignorée (fermer la porte perd face à « poser les deux mains sur le volant »)Un rythme : au maximum deux actions ; pour quatre actions, diviser le rythme ou supprimer
« Finir de parler environ à la Xème seconde / commencer au début du Nème rythme »Les descriptions temporelles sont totalement inefficacesLa chronologie de H3 est déterminée par l'ordre des événements textuels, on ne peut que modifier la position relative des blocs
Écrire plusieurs mouvements de caméra dans un seul segment (0-3s zoom avant, 3-5s arrêt)Qwen3-VL pense à tort qu'il y a un changement de position de caméra au milieu, provoquant des coupures intempestives dans le segmentUn seul segment [Shot 1] doit contenir strictement 1 instruction de mouvement de caméra qui traverse tout le segment
Écrire « debout » (rises from chair) dans un plan moyen/rapprochéLe sommet de la tête du personnage sort du bord supérieur du cadre, la moitié de la tête est coupéePour une scène explosive, utiliser leans sharply forward across table with veins bulging (se pencher brusquement en avant en s'appuyant sur la table)
Écrire des traits du visage au pluriel (sourcils/yeux) ou une phrase négative dans une scène de profilPour dessiner les deux yeux ou à cause du contrecoup des mots négatifs, le personnage tourne de force la tête vers la caméraInterdire les traits au pluriel et les mots turn/camera, utiliser uniquement une description statique positive de profil, verrouiller la fin avec le dispositif de serrage de latent TailLock
Le timbre vocal calme empêche de crier lors d'une scène intenseLe ton calme de l'audio de référence verrouille l'énergie latente audioUtiliser le protocole T8mars : ajouter un préfixe de parole rugissante au dialogue, et injecter une impulsion sonore transitoire de collision physique (+10 dB) en 0,4 s

En résumé : H3 obéit à « ce qui doit être dans l'image », pas à « ce que la caméra ne doit pas faire » ; il obéit à « l'ordre des événements », pas aux « secondes ».

Il y a aussi une limite spécifique pour les segments en reprise : à la frame de fin du bloc de reprise, le modèle a tendance à « réinitialiser » la composition vers l'image de référence. Si à ce moment précis il y a une coupe franche, cela lui donne l'occasion de « démarrer un autre plan » – testé dans seg02 première version : les 38 premières frames étaient parfaites en termes de reprise, mais à la 39ème frame, le personnage disparaissait complètement, laissant place au plan d'ensemble sans personne de l'image de référence. Donc : pas de coupe franche dans un segment en reprise. Un plan-séquence + même position de caméra = le plus stable ; pour changer de plan, créez un segment séparé.

5. Étape 3 : Génération, surveillance, réception (une commande par chose)

# ① Soumission (preflight + enregistrement du projet + reprise + sélection de seed + enregistrement de la ligne de base)
$PY scripts/sop_run.py submit --seg seg01 --assets matériel.json [--length 243] [--silent]
#    matériel.json : {"Personnage1":"cglide/<projet>/Personnage1.png", "Scène":"cglide/<projet>/Scène.png"}
#    --dry-run        Assembler sans soumettre (n'enregistre pas le nouveau segment, ne touche pas au dossier du projet), et fait vérifier à ComfyUI les champs obligatoires du graphe
#    --chain <nom_projet>  Remplace le chain.name du graphe de handshake (doit être égal à la valeur liée, sinon rejet)
#    --rebind         À utiliser uniquement si l'on veut vraiment changer le projet de la table de montage (change la liaison, la reprise est cassée à partir de là)
#    --cont auto|off|<chemin_segment_préc>   Par défaut auto=reprendre le segment précédent; off=comme premier segment
#    --allow-nocont   À utiliser lorsque ce segment doit vraiment commencer indépendamment : autorise à ne pas avoir de segment précédent pour la reprise

# ② Surveillance (recommandé en arrière-plan : cette commande attend que la première prise soit enregistrée, puis effectue immédiatement la double inspection)
$PY scripts/sop_run.py watch --seg seg01 --timeout 3600

**En cas d'échec, il faut libérer le GPU immédiatement.** Dès que la première prise est enregistrée, la deuxième commence ; si on attend la fin du contrôle qualité complet (extraction d'images + quantification visuelle, une dizaine de secondes) avant d'abort, la troisième prise/le sur-échantillonnage sont souvent déjà en cours et gaspillent la puissance de calcul. Donc `watch` est maintenant divisé en deux parties :
- **Vérification audio rapide dès l'enregistrement** (`_fast_audio_gate`)

... [tronqué pour la traduction]

Individual skills in this repo

This repo contains 5 individual skills — each has its own dedicated page.

comfy-h3-render-core

短剧工业化管线·第 3 工序:H3 物理视频渲染与防翻车调度。负责与本地 ComfyUI 服务交互,调度 MiniMax H3 进行 Turbo 8-step 视频生成。硬核沉淀:Windows WDDM 驱动锁防御、潜空间 32 整除铁律、单人发音锁定与全员闭嘴抑制指令装配、首帧 I2V 安全注入、分镜间显存防泄漏。

drama-audio-soundstage

短剧工业化管线·第 4 工序:声音工程与智能避让配乐。负责 H3 视频生成后的声音精修。硬核沉淀:谱减法音频门控(消灭风噪/电流床音)、Whisper ASR 纯普通话语种漂移拦截、FFmpeg 原生侧链动态避让混音(Sidechain Ducking,台词开口 BGM 瞬降 -14dB,闭嘴扬起)。

drama-director-staging

短剧工业化管线·第 1 工序:编剧与导演分镜调度。负责将剧情大纲或小说文本转化为符合短剧视听规律的工业级分镜。内置:6 大动态运镜轮换决策树、台词纯中文汉字归一化(数字大写)、短剧快节奏 20~28 字密度调控、单人发言与旁观者闭嘴标注。

drama-finishing-upscaler

短剧工业化管线·第 5 工序:终期成片与 1080p 超分增强。负责全集分镜无损拼接与院线级 1080p 超分辨率放大。硬核沉淀:FFmpeg concat 零损耗直拼、RealESRGAN x2plus GPU 独占 FP16 批量超分(~4.8fps)、原生高质量避让音轨无损混流、ffprobe 工业级物理参数验收。

drama-keyframe-forge

短剧工业化管线·第 2 工序:分镜定帧与资产一致性。负责在视频渲染前,建立全局风格母卡 (Style Bible),并为每个分镜前置生成“场景+人物+道具”三合一的 16:9 高清定帧垫图。彻底根治 T2V 盲跑带来的人脸变形、角色换脸、场景变色与道具软化。

Skills associés