APNext H3 Manual Scenes (script → lists)
Hand-write every H3 scene, get render-ready lists
- scenes
- durations
- lengths
- scenes_text
- scene_count
- total_seconds
What it is
Every multi-scene writer in this pack - Crossover, Scenes, Music Video, Short Film - spits out matching scenes / durations / lengths lists that the render side consumes. H3 Manual Scenes is the version where you author the scenes instead of an LLM. Paste the finished MiniMax H3 prompts yourself, and out come the same three lists, ready to plug into MiniMax H3 Reference to Video exactly like a writer's output would be. No model is called. No API key, no Claude Code, no GPU cost, no waiting - it's pure parsing and frame math.
Why would you want that? Because sometimes you don't want a model anywhere near your story. You edited a writer's output and want to re-render your exact text. You're building a reusable render harness and don't want to burn LLM quota every time you queue it. Or you just want full control over every shot. This is the "manual override" for the whole family, and it shares the writers' contract so the render side of any of their workflows plugs in unchanged.
How it works
The script input accepts two formats, and the node splits them automatically:
=== SCENE NN | duration: S.S ===envelopes - the exact format the writers emit, so you can grab ascenes_textoutput, paste it, edit to taste, and render.- Bare prompts, split wherever a line starts with
subject_definitions:- handy for hand-typed scenes that never went through a writer.
Durations come from three places, in priority order: the envelope's own duration: header, then the optional durations box (comma- or space-separated values in scene order, e.g. 12, 10, 11.5), then default_duration (12 s). Everything gets clamped to H3's 5.2–15.1 s range and snapped to the model's frame grid (5 + 17k frames at 24 fps), so the clip you render is exactly as long as the frame math expects - no audio drift in a music video, no staggered cuts in a film. This is the same snapping the writers use internally, which is why the lists match theirs.
Inputs and outputs
Only two inputs matter, both on the node's face:
script- your finished H3 scene prompts, in order. Each scene becomes one rendered clip.default_duration- fallback seconds per scene when nothing names one (5.2–15.1).
Outputs mirror the writers: scenes (list) → the video node's prompt, durations (list, seconds), lengths (list, frame counts - wire this straight into the video node's length, no math node needed), plus scenes_text, scene_count and total_seconds for preview and sanity checks.
Installing it
It ships in dagthomas/comfyui_dagthomas. ComfyUI Manager → search comfyui_dagthomas → Install, then restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/dagthomas/comfyui_dagthomas
cd comfyui_dagthomas
pip install -r requirements.txt
That's it - nothing extra to install for this node, and no model files. To actually render your scenes you still need ComfyUI's MiniMax H3 video node and weights (check the H3 license's territory restrictions before committing), but the node itself is self-contained.
Common issues
- Empty
scriptraises an error - paste at least one scene. - "No scenes found" means your text matched neither format: use
=== SCENE NN ===envelopes or make sure each scene starts at asubject_definitions:line. - Durations get clamped to 5.2–15.1 s. A 3-second scene isn't possible - H3 doesn't render that short, and the node will quietly snap it to the floor rather than error.
- Durations beyond the
durationslist just fall back todefault_duration, so a long run doesn't need every value spelled out.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| script | STRING | The finished H3 scene prompts, in order. Either `=== SCENE NN | duration: S.S ===` envelopes (the writers' contract), or bare prompts split wherever a line starts with `subject_definitions:`. Each scene is one rendered clip. | |
| default_duration | FLOAT | 12.05.2–15.1 | Seconds per scene when neither the envelope header nor the durations box names one. Snapped to H3's frame grid. |
| durationsopt | STRING | Optional per-scene durations, comma or space separated in scene order (e.g. `12, 10, 11.5`). An envelope's own `duration:` wins over this list; scenes beyond the list fall back to default_duration. |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| scenes | STRING | — |
| durations | FLOAT | — |
| lengths | INT | — |
| scenes_text | STRING | — |
| scene_count | INT | — |
| total_seconds | FLOAT | — |