Nodes/H3 Scribe/H3 Authoring Editor
ComfyUI Node

H3 Authoring Editor

The authoring form that survives a re-analyze — and keeps your edits

By last-git·Created 30 days ago·Updated 27 days ago· 0
H3 Authoring Editor
    • authoring_json
    authoring_json
    source_snapshot
    source

    If you use H3 Scribe to make MiniMax H3 video prompts, this is the node you'll actually live in. The H3 Authoring Editor is the big editable form where Qwen's image analysis gets turned into your own video direction: motion, camera, subject appearance, shot list. It's also the clever part of the pack, because it solves the thing that makes every other "LLM writes a prompt" workflow infuriating - losing your hand-written edits every time you re-run the analysis.

    H3 Scribe is an authoring layer for MiniMax H3, the 33B open-weights video model that landed with day-zero ComfyUI support in August 2026. The pack's flow is ANALYZE → author → COMPOSE → generate. This node is the middle of that flow, the persistent form between the Qwen analysis upstream and the Compose step downstream.

    How it works

    The editor is built on a merge, not a replacement. It takes three inputs: authoring_json (your current, editable state), source_snapshot (a copy of whatever it last imported), and source (the freshly-analyzed draft from the Canonicalize step). When you hit ANALYZE the first time, source is new, the editor is empty, so it imports the draft. When you re-analyze later, the node compares the new source against the old snapshot: if nothing changed, your current text wins outright and it doesn't even reparse the upstream draft. If the image analysis did change, it does a surgical merge - re-analyze owns the image-derived fields (subject appearance, the initial-frame and style descriptions when there's an Initial picture), but you own motion, camera, throughout, and the shot list. Change the cast photo and your carefully written camera moves survive. That's the whole point of the node, and it's worth paying attention to because it's why you can iterate.

    There's a deliberate escape hatch in the merge: if re-analysis changes the subject lineup, the editor lets your text hold dangling <Subject N> references so you can repair them before hitting Compose. You'll get a clear error at the Compose boundary if you don't.

    The node is an output node, and it's a partial-execution target - ComfyUI's caching (the same backward-execution behavior behind Preview Image and Save Image) means a changed source upstream re-runs only what's behind it, while tweaking the editor itself only invalidates the generation path. The web-side JS hides the ugly backing widget and persists your text in the node's properties, so the form survives a workflow save and reload.

    The inputs that matter

    You rarely touch these as a beginner - they're wired in the bundled workflows:

    • authoring_json - the current state, also where the form's edits land.
    • source - the canonicalized draft from upstream. Leave it wired.
    • source_snapshot - the merge's memory. Leave it wired.

    The output is a single authoring_json that feeds the H3 Compose → Qwen node.

    Install and the one error you'll see

    Install the whole pack through ComfyUI Manager (search "H3 Scribe") or cd ComfyUI/custom_nodes && git clone https://github.com/last-git/h3_scribe, then restart. It needs a recent ComfyUI with the native MiniMax H3 nodes, plus the ComfyUI_Simple_Qwen3-VL-gguf pack and a Qwen3-VL GGUF + mmproj - see the pack README for the recommended model files. The node itself only depends on pydantic, and nothing here calls an API.

    The error you'll hit first: run the editor with no source and empty text and it raises "Run ① ANALYZE first." That's not a bug - the form has nothing to show until Qwen has analyzed an image. If you've edited motion by hand and a re-analyze seems to have eaten it, check whether the image actually changed; unchanged sources preserve your edits by design.

    CategoryH3 Scribe/UI

    Inputs (3)

    NameTypeDefaultDescription
    authoring_jsonSTRING
    source_snapshotSTRING
    sourceoptSTRING

    Outputs (1)

    NameTypeDescription
    authoring_jsonSTRING