ComfyUI H3 Script-to-Video (v5.0 Director-Level Cinematic Language & Industrial Engineering Standard)
v5.0 Major Milestone Update (2026-11, Industrialization of Cinematic Language & Full Assault on Seven Key Production Pain Points)
- 1. Pre-production Shot Keyframe Generation (I2V Scene/Character/Prop Joint Keyframing): Completely ends blind T2V runs without keyframes. Before video sampling for each shot, a 16:9 joint keyframe (
keyframe_segXX.png) is generated by the image model using the shot's camera position, character turnaround sheets, and prop designs. After quality approval, this is fed into the I2V node, locking the skeletal geometry, clothing texture, and prop outline at frame 0.- 2. Solo Speaker Lock & Full Ensemble Mouth Suppression Protocol: Eliminates the marionette disaster where everyone on screen moves their mouths with the dialogue. The sole speaking subject is explicitly designated in
[Subject 1], subject-verb separation is enforced in[Action 1], and a strict mouth suppression clause (e.g.,lips tightly sealed, completely silent, showing tense glare without mouth movement) is appended for non-speaking characters.- 3. Global Style Bible & Pre-production Style Lock Gate: Prevents random style drift between episodes. A Global Style Bible (
visual_genre,environment_base,lighting_base,color_palette,quality_base) must be established before production starts. Four sample images at different shot scales are generated for manual confirmation, then the style is locked and inherited for the entire series.- 4. Short Drama Golden Speech Rate & Density Normalization: Solves problems of slow, drawling speech. Under the standard 175-frame (7.29s) timing, dialogue strictly matches 20-28 pure Chinese characters (short drama golden rate 3.2-4.0 chars/sec); and explicitly declares
spoken crisply and rapidly without dragging syllablesin[Audio 1]. The first 4.5s are for rapid speech, and the last 2.8s transition to a cold stare and action reaction.- 5. Six Cinematic Dynamic Camera Moves & Blocking Library: Strictly forbids continuous stationary two-shots! Six dynamic camera maneuvers are mandatory: ① cross-screen slow dolly, ② prop close-up pull focus to eyes, ③ Dutch angle oblique approach, ④ back-turning head cold glance, ⑤ ear-leaning pressure approach, ⑥ side-light silhouette confrontation.
- 6. Standard Mandarin Pronunciation Protocol & ASR Language Drift Gate: All dialogue is normalized to pure Chinese (Arabic numerals to uppercase Chinese characters, stripping English abbreviations and illegal symbols);
Strict Mandarin Chinese dialogue only, standard native Chinese accent, zero foreign toneis forced in[Audio 1]. Integrated Whisper ASR language detection automatically intercepts non-Chinese subtitles and language drift.- 7. Engineering Master Director Pipeline Closed Loop: Builds
scripts/director_engine_v3.pyfor full automation of shot list compilation, prompt compilation, speech rate/density calculation, and speaker lock.v4.1 Update (2026-11, Official v2.2 Prompt Convention & 175-Frame Timing Deep Dive)
- Prompt Specification Upgrade to v2.2:
- Integrates MiniMax official prompt guide (
references/official/base-en.txt,ref-en.txt);- Camera movement trifecta (type + amplitude + speed) is written as natural language within the shot, strictly forbidding tag stacking at the end;
- Asset rights explicitly state
do not copy original image camera position, do not copy occupation ratio;- Strict complexity budget: maximum 3 subjects + 1 line of dialogue per segment (175 frames/7.29s).
- Segment Length Locked to Primary 175 Frames (7.29s):
- 243 frames officially retired, hard upper limit set to 192 frames (8.00s), production primary uniformly locked to 175 frames, with 1.0~1.2s silence buffer at the segment tail;
- Scheduling layer compliance forbidden zones (long shot only for establishing space and face recognition before cutting to medium/close-up; dolly back and through-window shots forbidden).
- Windows UTF-8 Full Terminal Defense:
force_utf8_stdio()uniformly resets stdout/stderr to UTF-8, preventing GBK/CP936 encoding-related crashes.- Quality Inspection & Long-Shot Face Fix Toolchain Expansion:
- Introduces Whisper ASR dialogue quality check (
scripts/check_dialogue_asr.py), tail-segment optical flow & seam quality check (scripts/sop_check.py), reconnection tail-segment buffer exemption (--tail-exempt), and medium/long-shot adaptive face refinement (scripts/face_refine_pipeline.py).v4.0 Update (2026-10, Industrial-Grade First-Frame Face Lock to Prevent Deformation & Dual Revolution in Cinematic Audio Mixing)
- First-Frame Image Generation Verification + I2V Geometric Face Lock Mandate (Radically Cure T2V Face Deformation & Prop Softening): Single image generation takes only 5-15 seconds, with instant redraw if unsatisfactory; strictly forbidden to blindly run an 8-minute T2V without a locked first frame! Post-generation quality checks are merely reactive, expensive, and treat symptoms, not the root cause. Any shot with a character close-up or key prop interaction must first have a keyframe, inject it as
first_framein I2V mode, locking anatomical geometry and prop circuitry at frame 0, leaving H3 only responsible for temporal dynamics and lip sync. Face deformation rate drops from 30% to below 2%. Seereferences/keyframe_i2v_guide.md.- Cinematic Music Integration & Intelligent Audio Ducking: Prompts strictly forbid H3's built-in generation of distorted ambience. After cleaning dialogue and Foley, a single independent high-fidelity BGM is laid across the entire film. FFmpeg native
sidechaincompresshandles dynamic ducking: audio dips -14dB instantly with vocal onset, and smoothly rises 0.3-0.5s after dialogue ends, creating the audiovisual pleasure of commercial short dramas. New toolscripts/cinematic_audio_mixer.py.- New Keyframe Gate Tool
scripts/keyframe_gate.py: Supports engineering-level keyframe status inspection, ComfyUI storage synchronization, and safe I2V node injection.v3.2 Update (2026-10-25)
- Added §13 When to Update This Skill: six trigger conditions, four categories of content not to bring in, three migration questions, placement rules, three-step self-check after modification.
- One-sentence discipline: Only precipitate mechanisms and criteria that remain valid after a script change. Project files never enter the skill.
v3.1 Update (2026-10, Practical Precipitation from 13 Segments / 86-Second Final Film)
- Added §4.1 H3 Compliance Boundaries (failed dolly-back, through-window/door shots, no motion generated outside windows, shot scale lock, negative camera directives).
- Added §5.1 VRAM Recovery (once made a segment run from 5 minutes to 33 minutes).
- Added 6 rules to §8 Decision Tree (ending action stolen, too many actions in one beat, Foley laid as ambience, quiet-gain side effects, F0 misjudgment).
- Added §12 four-tier dialogue position gradients,
cont offtrim accounting.- Recommended segment length in §3 changed to 175 frames (previously 124/243, outdated).
- Corrected two misleading old examples in the prompt specification: "dialogue written at the end of a beat" should be at the very beginning; "chest rises every 2.5 seconds" was misinterpreted as a vocal instruction generating breathing sounds, and has been deleted.
Transforming a script into a finished video: Handshake → Director Orchestration → Keyframe Verification (I2V) → Prompts → Submission → Monitoring & Dual Check → Segment Collection → Ducking Mixing & Stitching.
v4's Core Insight: Upgrade "guesswork video generation + costly post-generation quality checks" to "low-cost, proactive image control through front-loaded keyframes + I2V face lock execution + cinematic ducking mix."
An Absolute Rule: One Task = One Local Project Directory + One Director Console Project Name (
h3_chain/<project_name>). These two are fixed from the first segment until theconcatis complete. Changing them is not just "files in the wrong place" – it directly breaks reconnection: The resumption tool finds the previous segment bychain.order[k-1]. If the project name changes, it's lost, and the current segment will be silently treated as the first segment and regenerated, and the final output will be placed in the directory of another film. The binding is written into thechainfield ofproject.json. Thesubmitcommand checks this every time. Inconsistency leads to direct rejection (not a warning). To change, you must do a full swap: new project + new director console project name, starting from the first segment. Full rules in §10.1.
0. Operational Contract (First, Clarify Roles)
| Role | Responsible For |
|---|---|
| Agent (Fully Automated) | Reading scripts, director orchestration, keyframe verification, writing prompts, preflight checks, submission, monitoring, dual checks, segment collection, ambience cleanup, music ducking & mixing, stitching, delivery, writing logbooks |
| User (Only Three Things) | ① Open ComfyUI and load the workflow, say "ready" ② One-time approval of script/style/keyframe candidates ③ Watch and approve the final video |
Seven Things the Agent Must Not Do
- Must not submit before the workflow handshake (
wf_map.jsondoesn't exist). - Must not skip the
gate(first-pass dual check) and go directly tofinish-- the script will reject it, don't try to bypass. - Must not write state/keyframes/temporary wav files into the skill directory (
paths.pyhas hard guardrails). - Must not rewire nodes based on "last time's node IDs" -- only inject three data points, never touch the upscale/final node connections.
- Must not skip keyframe verification and blindly run pure text-to-video (T2V) when a character close-up or key prop interaction is involved -- static image verification takes only 5-15 seconds, with instant redraw if unsatisfactory; running an 8-minute T2V and then post-quality-checking is a costly suicide. You must first define the keyframe, inject it as
first_frame, and use the I2V face/prop lock! - Must not submit the next segment without extracting frames to check the visuals first -- preflight only checks text structure, not visuals. After the video lands, extract 4-6 frames for a quick mosaic view before submitting the next segment; this also avoids the "dirty VRAM state" caused by submitting two segments too quickly (see §5.1).
- Must not blindly copy current project files into the skill -- project name/character name/segment number/
plan.json/assets/*.json/original prompt text for a segment/current trim account/blacklisted seeds stay in the project directory. Only precipitate mechanisms, criteria, and writing methods that remain valid after a script change. Criteria and placement rules in §13.
Only stop to ask the user in these four situations: Script ambiguity affecting shot structure / style or aspect ratio finalization / missing assets that cannot be defined with text / the same segment fails quality check 3 times.
1. Core Toolset (Complete Production Toolchain)
| Tool | Function | Key Subcommands |
|---|---|---|
scripts/h3wf.py | Workflow handshake: Reads the actually executed graph from ComfyUI, automatically identifies node roles | sync show doctor |
scripts/sop_run.py | Production: Submission (includes preflight), auto-monitoring, waiting for final video | submit watch final abort |
scripts/h3proj.py | Project & Gate: Logbook, first-pass dual check, visual sign-off, segment collection, stitching, residue cleanup | new status gate review finish concat residue |
scripts/keyframe_gate.py | Keyframe Verification & I2V Injection: Keyframe status inspection, ComfyUI storage sync, first_frame injection | --project --seg --sync |
scripts/face_refine_pipeline.py | External long-shot face refinement workflow: Conditional face refinement for medium/long shots, direct audio passthrough, graceful degradation for missing custom nodes | --input --output --char-ref --dry-run |
scripts/cinematic_audio_mixer.py | Cinematic Music Ducking Mixing: External standalone BGM, sidechaincompress auto-ducking for vocals | --input --output --bgm --volume |
scripts/check_dialogue_asr.py | Dialogue ASR Auto-Comparison: VAD locates speech segments → Whisper transcription → comparison with <d> original text | --file --text --seg |
scripts/sop_check.py | Tail Segment Action Energy & Seam Similarity QC: 8-frame contact sheet, action optical flow ratio, keyframe comparison | --video --seg |
scripts/shisei_pose.py | (Optional) Combat/Confrontation Pose: Multi-view pose retrieval and line art extraction | --search --duo --get --view |
Interpreter fixed to a venv with cv2:
C:/Users/windows/.workbuddy/binaries/python/envs/default/Scripts/python.exe (hereafter PY)
2. Step 0: Workflow Handshake (First Task Every Session, Cannot Be Skipped)
Why It Can't Be Hardcoded: User workflows are updated (adding a third pass, changing upscale resolution, changing output prefix). Once node IDs change, a hardcoded "fix wiring" command will break a working pipeline -- this was the root cause of every v2 error.
Core Principle: The user can change parameters on the canvas at any time (upscale resolution, model, sampling steps). Generation must use their current values.
submit always rechecks the canvas-saved version first (h3wf.refresh_if_stale):
If the file's mtime has changed, it re-reads the graph and outputs exactly which parameters changed ([wf ] Detected N parameter changes).
The h3_data, seed, and filename_prefix for rack/desk/cast are injected at runtime and are not considered user changes; they are excluded.
However, there's an unavoidable API-level limitation that must be communicated to the user:
ComfyUI canvas state is only saved to ComfyUI/user/default/workflows/*.json after saving the workflow (Ctrl+S). Unsaved canvas changes are invisible to any API.
So, every time work starts, tell the user: If you change parameters, please Ctrl+S.
If the user has also pressed Queue once after changing, that execution graph enters /history and can be caught by the second criterion.
Steps:
- First, remind the user: Open the ComfyUI desktop application, load the workflow to be used, and wait for them to say "ready".
- Prerequisite:
syncreads the most recently successfully completed video task from ComfyUI/history.- Just switched workflows / just set up → Ask the user to manually run one task (any segment, just needs to succeed) in the interface, then
sync. - Never succeeded in running a task → Use the interface file as a fallback:
h3wf.py sync --from-ui "<workflow>.json"(requires ComfyUI to be running).
- Just switched workflows / just set up → Ask the user to manually run one task (any segment, just needs to succeed) in the interface, then
- Health check + identification:
$PY scripts/h3wf.py show # Just view the identification result $PY scripts/h3wf.py sync # After identification passes, save as the basis for this production session - Interpret the output: All five required roles (
rack/desk/cast/seed/final) must have values; if missing, the workflow has changed node class names. Paste this line for the user to see, don't guess. The[note]section explains how multi-candidate choices were made. The same output also provides three things; missing any of them will cause issues downstream:- Project Name (Director Console
chain.name):submituses this to decide where the final video goes in theh3_chain/directory, and on the firstsubmit, it writes this intoproject.json.chainas a binding. Displaying «—» means no project name was set in the director console, andsubmitwill fall back to the skill project name and issue a warning -- this effectively starts a different film (and won't write the binding). Changing the name after binding will be rejected, see §10.1. - First-Pass Prefix:
watch/gate --latestrelies on this to recognize only first-pass files. Displaying «—» leads to falling back to a full prefix, and after the whole chain runs, upscale/final videos might be mistaken for first-pass files in the dual check. [WARN]Collection Pipeline: If the "segment tail return" or its "sequence anchor" node is not connected, the final video won't return to the director console, and the next segment won't be able to connect.
- Project Name (Director Console
- Allow headless startup when ComfyUI is not open (port 8188, doesn't affect the desktop app):
However, prioritize the user's own instance; node state should be based on their interface.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
What if the workflow changes?: h3wf.py doctor will list changes (node IDs changed / prefix changed / project name changed / role missing).
If confirmed as an intentional update → h3wf.py sync --force re-handshakes, and all subsequent submissions automatically use the new graph.
submit rechecks the fingerprint every time. Unconfirmed drift will lead to direct rejection (it won't silently use the old graph for a full night's run).
During the handshake, a history_seq watermark is recorded: execution graphs older than this are not considered drift (they are old records left before /history was cleared). Only graphs generated after the handshake that differ will be rejected.
3. Step 1: Director Orchestration (Mandatory, First Thing After Receiving Script)
It is forbidden to write prompts directly after receiving a script. First, load the director-advisor skill to generate a complete shot plan:
- Deconstruct the five elements: Emotional Tone / Dramatic Beats / Character Relationships / Space / Action
- Determine the rhythmic skeleton: Number of shots, tension curve (only one peak), opening and closing shots
- Design shot by shot: Shot scale = emotional distance, camera movement = emotional motion, one action unit per shot, duration 1-3s (max 5s). Each shot includes a one-line design rationale.
- Anchor with 1-2 real film case examples (only from
director-advisor/references/master_cases.md)
Then convert into H3 segments according to references/directing_bridge.md, and save the segment plan table:
{"name": "Film Title", "segs": [
{"seg": "seg01", "length": 175, "shots": "1-4", "dialogue": false,
"hook": "First segment: Establish space from a wide shot", "sfx": true, "event": "She walks into the stone house and sets down the lamp"}
]}
length: 175 (≈7.29s, 3-4 shots) is the recommended value; 124 (≈5.17s, 1-2 shots) / 243 (≈10.13s, 2-4 shots) are also usable. Key formula: Net new frames = length − cont_frames. When cont_frames=5, 175 frames leaves 170 net frames (7.08s), 124 frames leaves 85 net frames (3.54s) -- with the same continuation overhead, 175's net output is doubled, and rendering takes only 4–4.5 minutes, making it the sweet spot for cost-effectiveness. Use 175 for segments with dialogue too, don't use 243: the longer the segment, the easier dialogue runs to the end (see §12 Dialogue Timeline Absolute Rule).hook: Continuity from the previous segment (pose/eyeline/lighting carryover). If you can't write a hook, the segment breakdown is wrong.dialogue/sfx: Determines which items the audio gate checks (silence check for no-dialogue segments, turn off--fxfor no-Foley segments).- Validation:
$PY scripts/h3proj.py plan --check
One segment = one event, can contain multiple shots within ([Beat N] marks the shot position; write "hard cut to..." and H3 will cut accordingly);
Cannot change spaces (maps) or main events. Cut points must land on an action, not be evenly divided by seconds.
While writing shots, simultaneously pass two content checks (details in references/vividness.md):
- Four Logic Questions: What does the character want to do at this moment? Where are they, facing whom? Is time/lighting continuous? Is the causality from the previous action maintained?
- Three Vividness Requirements: Each beat must provide at least one "action cause + environment reaction + material texture touch". It cannot be just "standing and talking".
3.1 Optional Enhancement: High-Quality Combat & Dual Confrontation Pose Pipeline (Shisei Pose Guidance)
When the script involves close-quarters combat, weapon clash, dual over-the-shoulder confrontation, or complex limb entanglement, to avoid common video model problems ("soft" actions, anatomical deformation, 180° axis flipping), load the local Shisei pose guidance (details in references/shisei_combat_pipeline.md):
- Pose Retrieval: Use the local retrieval script to query 55 dual-confrontation movements and 288 single movements:
python scripts/shisei_pose.py --duo --search "close quarters" - Multi-View Line Art Extraction: Based on the director's camera position, export line art for 5 major views (
front/side/diag45° angle /above/below) to the project directory:python scripts/shisei_pose.py --get D001 --view diag --out references/poses - First Frame Skeletal Anchoring: The extracted pose line art, combined with the character sheet (e.g.,
sal_character_sheet.jpg), is fed jointly into an image generation engine (Imagen / Qwen) to produce a 100% compositionally sound first frame. This is then injected into MiniMax H3, eliminating spatial drift and floppy actions.
3.2 Mandatory Procedure: Shot Keyframe Image Generation Verification & I2V Geometric Face Lock (Keyframe Gate)
Industrial Mandate (Highest Priority Insight): For any segment containing a character front-facing/waist-up close-up or key prop interaction (e.g., watch disassembly, gun holding, counting money, stamping), blind pure text-to-video (T2V) generation is strictly forbidden! The process must be: "Keyframe image generation verification ➔ Image-to-Video (I2V) face lock to prevent deformation."
- Core Logic:
- Static image generation takes only 5~15 seconds/image, concentrating all latent space resolution on facial features, hair, and prop microstructure. Redraw in seconds if unsatisfied;
- Single video segment rendering takes 4~8 minutes. Pure text-to-video, without a physical anchor, is highly prone to anatomical drift. "Post-generation auto quality checks" are 40x more expensive to redraw and treat only symptoms, not the root cause;
- After injecting the selected keyframe into the
first_frameport ofMiniMaxH3ImageToVideo, frame 0 acts as a geometric ground truth. The model doesn't need to hallucinate structure; its attention is fully allocated to driving motion and aligning lip movements. The face deformation rate drops from 30% to below 2%!
- Execution Flow:
- G0 Character Asset Cards: Before production starts, prepare 2+3 head-decoupled character design cards per
references/character_sheet_standard.md; - G1.5 Keyframe Image Verification: After writing the shot plan, use image generation tools to quickly generate a 16:9 keyframe movie still. Verify facial features, eye focus, and prop correctness;
- Finalization & Save: After verification, save to
<project>/segments/<seg_id>_keyframe.png(or.jpg); - Auto-Detection & I2V Mounting: When the pipeline detects the keyframe image, it uses
scripts/keyframe_gate.pyto automatically sync it to ComfyUI and connect it to thefirst_frameport. If not detected, it gracefully degrades to pure text-to-video drive. Seereferences/keyframe_i2v_guide.md.
- G0 Character Asset Cards: Before production starts, prepare 2+3 head-decoupled character design cards per
4. Step 2: Write Prompts (Standard = references/prompt_standard_v2.md)
- Seven-section structure,
[Beat N],<Audio N>voice cards,overall_soundscapethree-layer sound: not a single character of the section names can be changed. - Prompts are written into
segments/<seg>.txt(pure prompt body, do not wrap in code blocks). - Voice cards:
voice_card.jsonin the project takes priority (template copied byh3proj.py new), word-consistent across all segments. - preflight doesn't need to be run separately:
submitinternally callscheck_prompt_v2.check(). FAIL results in direct rejection. To run it separately in advance:$PY scripts/check_prompt_v2.py --file segments/seg01.txt --length 243
Format quick reference (refer to the specification document for details): All <Subject N> must include permission=; zero tolerance for emotion words;
For each beat, sound effects: list items one by one + close with "only these N types, no other sounds"; dialogue end distance from segment end ≥1.0s; one line of dialogue per segment.
Negation Backfire (Tested, Hit Twice): H3 treats entity names in forbidden terms as positive prompts to draw.
Writing "Strictly forbid generating water tornadoes, water spouts, fountains" in error-prevention constraints results in a white water column appearing in the image;
writing "helmet brim tilts upward" in the action description results in a transparent helmet appearing over the character's head.
Rule: To make something not appear, completely delete its name from the sentence and replace it with a positive description of what you do want to see
(Example: "vertically downward bird's-eye view, only a round sunken depression and a black figure sinking into the water"), instead of writing "not X, don't want X".
error-prevention constraints should only contain abstract constraints (no watermark/no subtitles/no deformed hands/no flame glow effects).
Continuation Latent Can Distort the First Beat's Subject (Reproduced 5 Times in This Project, The Most Expensive Pitfall):
Segments with --cont consistently generate a tall back figure wearing a black robe with long flowing hair on the first beat, even though --
the previous segment's tail frame was "top-down view of water surface + a black shadow falling into water" (seg02) or "Chen Mo's facial close-up, black T-shirt" (seg03). The reference image was correctly injected ([rack] 1 asset: Chen Mo→Chen Mo.png), the text meticulously described the clothing word for word, but none of this suppressed the effect.
With the same prompt, same reference image, same seed range, changing to --cont off immediately normalizes the result both times (seg02's first beat reverts to a black T-shirt, short-haired Chen Mo; seg03's first beat reverts to a pure empty cityscape overhead shot).
Judgment and Disposition:
- Project Conclusion: Keep continuation, but only pin 5 frames (
cont_frames: 5inproject.json, i.e., 0.21 seconds). What the user wants is "a few frames to ensure context consistency". 39 frames (1.625 seconds) is too wasteful and requires trimming the head of each segment later. For pure hard cuts (e.g., beach → outside door, a script-mandated location jump), use--cont off. Whether anchor contamination still occurs at 5 frames needs to be tested and documented; if the first beat's character is wrong, first try--cont off. - General Criterion: Continuation is only potentially useful when "same space, same camera position, direct action continuation"; once the first beat's character clothing/body type/hairstyle is wrong, try
--cont offfirst for one verification (first pass only takes 2 minutes). This is much faster than fixing the text, and fixing the text is ineffective. - When continuation is enabled, a
[cont ] Carrying on from clip_xxxx (…)message is printed; confirm the keyframe before deciding whether to keep it.
4.1 H3 Compliance Boundaries (Read Before Writing Prompts)
These are hard boundaries verified by experiment. Changing the text is useless, changing the seed is useless. They can only be worked around in the writing style. All from continuous records of 13 segments / 86 seconds of final footage.
| What You Want H3 To Do | Experimental Result | Alternative Writing Method |
|---|---|---|
| Dolly back / pull back / push in (displacement camera motion) | Failed 4 out of 4. Even writing "only pull back until the gear stick is visible" still results in pulling back past the window, revealing a different interior wall. | Use pure pan (same camera position, only change the angle: first pan down to the floor, then pan back up), or a direct hard cut. |
| Camera passes through a window/hole into an interior | H3 will conveniently open the door. Even writing "the door remains closed, only pass through the empty window opening" is useless. | Hard cut within the segment to the interior. Trim the segment head to the cut point during assembly. This is more reliable than any camera transition. |
| Outside window scenery is moving (car is driving) | Cannot be generated. Even rewriting "three white dashed lines rushing towards the character per second" is useless (inter-frame difference in the window area: motionlessness 1.26 / with motion written 4.15; human eye can't tell the difference). | The sense of motion is compensated by the engine sound and slight body vibrations added in post-production. Don't rely on generation. |
| "Shot scale unchanged / don't push in / don't dolly" | Low compliance; the camera will still push in during the latter half. | Change to a positive description "The entire X (from the top of the doorframe to the pedal) is always visible in the frame." Use "what must be included" to control the scale. |
| "Don't appear X / not X" | Reverse effect; X appears (same as negation backfire above). | Completely delete the name X from the sentence. |
| Perform more than 2 actions in one beat | Each action is only half-completed, or the "least interesting" one is skipped entirely (e.g., closing the door loses to "placing both hands on the steering wheel"). | Maximum of two actions per beat; split the beat or delete actions if there are four. |
| "Finish speaking around the Xth second / start at the Nth beat beginning" | Time descriptions are completely ineffective. | H3's timeline is determined by the order of textual events. You can only adjust the relative positions of the blocks. |
| Writing multiple time-period camera moves in a single segment (0-3s push, 3-5s stop) | Qwen3-VL mistakes this for a mid-segment camera position change, causing an internal flash cut. | A single segment's [Shot 1] must strictly contain only one camera move instruction that lasts from start to end. |
| Writing "rises from chair" in a medium/close-up shot | The character's head shoots past the top edge of the frame, cutting off half the head. | For intense scenes, use "leans sharply forward across table with veins bulging" (angrily lunges forward, supported by the table). |
| Writing plural facial features (brows/eyes) or negative sentences in a profile shot | The model tries to draw both eyes or is affected by negation backfire, forcing the character's head to turn towards the camera. | Strictly forbidden: plural facial features and turn/camera words. Use only positive profile static descriptions. Lock the tail frame with the TailLock latent variable clamp. |
| Calm voiceprint causing high-tension dialogue to sound weak | The reference audio's calm intonation locks the audio latent space's energy. | Use the T8mars protocol: add a roaring paralinguistic prefix to the dialogue, and inject a physical impact transient Foley at 0.4s to spike the sound energy (+10dB). |
In a nutshell: H3 responds to "what must be in the frame," not "don't do this with the camera." It responds to "the order of events," not "seconds."
Continuation segments have one more specific boundary: At the frame where the continuation block ends, the model is most prone to "resetting" back to the reference image's composition. If this happens to be a hard cut at the same time, it creates an opportunity for H3 to "start a new shot." This was experimentally observed: seg02 v1's first 38 frames perfectly carried over the continuity, and immediately after frame 39, the character disappeared entirely, jumping to a wide empty shot from the reference image. So: Don't write hard cuts in continuation segments. A one-shot take with the same camera position is the most stable. To switch shots, start a new segment.
5. Step 3: Generation, Monitoring, Collection (One Command Per Action)
# ① Submission (preflight + project registration + continuation + seed selection + baseline recording)
$PY scripts/sop_run.py submit --seg seg01 --assets assets.json [--length 243] [--silent]
# assets.json: {"Character1":"cglide/<project>/Character1.png", "Scene":"cglide/<project>/Scene.png"}
# --dry-run Only assemble, don't submit (don't register new segment, don't touch project file), and let ComfyUI validate required image inputs
# --chain <project_name> Override chain.name in the handshake graph (must equal bound value, otherwise reject)
# --rebind Only use when actually changing the director console project name (rebinds, breaks continuation from here)
# --cont auto|off|<continuation_path> default auto=carry on from previous segment, off=treat as first segment
# --allow-nocont Use when this segment genuinely needs an independent start: allow "no continuation segment found"
# ② Monitoring (recommended to run in background: waits until first-pass video lands, then immediately performs dual check)
$PY scripts/sop_run.py watch --seg seg01 --timeout 3600
**Must release GPU immediately upon judging failure.** As soon as the first pass lands, the second pass might start running. Waiting for the complete quality check (frame extraction + visual quantification, ~10-15 seconds) to finish before aborting often means the third pass / upscale process has already started, wasting compute. Therefore, `watch` now operates in two stages:
- **Immediate audio quick check upon landing** (`_fast_audio_gate` ...
[Cont'd] ...
- **Structured audio detailed check** run in background; results are appended but don't block the pipeline.