Nodes/H3 Scribe/H3 Validate & Render
ComfyUI Node

H3 Validate & Render

The node that writes the actual H3 prompt syntax for you

By last-git·Created 30 days ago·Updated 27 days ago· 0
H3 Validate & Render
    • final_prompt
    authoring_json
    composer_json

    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.

    CategoryH3 Scribe/Semantics

    Inputs (2)

    NameTypeDefaultDescription
    authoring_jsonSTRING
    composer_jsonSTRING

    Outputs (1)

    NameTypeDescription
    final_promptSTRING