H3 Validate & Render
The node that writes the actual H3 prompt syntax for you
- final_prompt
H3 Validate & Render is where the pack finally commits to a MiniMax H3 prompt. The Compose pass wrote fluent English, but the H3 protocol is a structured format - subject_definitions, retention_analysis, [Shot N] At 00:00.000, … blocks - and this node is what assembles that format deterministically. It takes your authoring state and the composer's English output, checks they're consistent, and emits the final final_prompt string the generation graph consumes. You should never hand-write this syntax, and this node is the reason you don't have to.
The division of labor is the whole architecture of the pack: the LLM writes natural language, Python writes the protocol. The composer prompt is explicit that the model must not emit any H3 section syntax - that's this node's job, and the reason it's trustable is that it can't get the brackets wrong, because it never asks a model to write them.
What it checks before it renders
Two required inputs: authoring_json (your validated editorial state) and composer_json (the composer's English output). One output: final_prompt. Before writing anything, it runs a gauntlet of cross-checks:
- Shot count must match - the composer returning 4 shots when you authored 5 is a hard error, not a silent truncation.
- Every
<Subject N>appearance the composer returns must correspond to a real subject, with no duplicates and no invented labels. - Style presence must match: if your authoring has no style, the composer may not invent one.
- In Ref2VA the summary overview is mandatory; in I2VA it must be absent, and I2VA's composer may not leak internal subject aliases into the prose.
All of this exists because a malformed prompt isn't a gentle failure - it's a long, expensive H3 generation that produces garbage. Better to fail in milliseconds with a readable error.
What the rendered prompt looks like
For Ref2VA, the output is a block-structured prompt: subject_definitions (each subject bound to its Picture and target appearance, with retention markers like fully_preserved), a summary, a retention_analysis (weak reference for the Initial picture vs. full preservation for cast subjects), detailed_description with timestamped [Shot N] blocks, then overall_soundscape and non_diegetic_music. I2VA renders a different, first-frame-focused structure referencing <Picture 1> at 0.00s. Timestamps come from your shot starts, formatted 00:00.000 - another thing you'd never want to hand-write.
Install and troubleshooting
Install the pack via ComfyUI Manager (search "H3 Scribe") or git clone https://github.com/last-git/h3_scribe into ComfyUI/custom_nodes, then restart. Beyond that: a recent ComfyUI with native MiniMax H3 nodes, ComfyUI_Simple_Qwen3-VL-gguf, and the Qwen + H3 model files from the README. The pack's own dependency is just pydantic.
The errors this node raises are the pack's way of telling you to fix your authoring: "Composer changed the shot count" and "Authoring references undefined canonical Subjects" both mean go back to the Authoring Editor. One more thing worth knowing about H3 itself: the model's weights ship under a community licence that excludes the US, EU, UK and South Korea, so if you're in one of those regions the local-generation path isn't licensed to you regardless of how clean this prompt is - a licensing check, not a node problem.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| authoring_json | STRING | — | |
| composer_json | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| final_prompt | STRING | — |