H3 Compose → Qwen
Where Japanese notes become the English H3 prompt draft
- system_prompt
- user_prompt
- config_override
- seed
H3 Compose → Qwen is the second LLM pass in the pack, and the one that does the actual writing. The Authoring Editor holds your Japanese semantic notes - motion, camera, shots, subject appearance - and this node builds the Qwen call that turns those notes into fluent English prompt content for MiniMax H3. It's the translation bridge: analysis and authoring happen in Japanese, the final H3 prompt is English, and this is where the crossing happens.
Like every "→ Qwen" node in the pack, it doesn't run inference itself. It assembles a system prompt, user prompt, and config, and feeds them to the ComfyUI_Simple_Qwen3-VL-gguf pack. The name is honest about the direction: your structured authoring goes in, a composer-friendly request comes out.
What it needs and gives
One required input: authoring_json - the validated state straight from the Authoring Editor. One optional: base_config, for the model-selector override if you're hand-wiring. Outputs are the standard four: system_prompt, user_prompt, config_override, and seed (again pinned to 0).
The interesting engineering is in what the composer is forbidden from writing. The H3 protocol's skeleton - section names, [Shot N] labels, timestamps, <Subject N> identifiers, reference roles, retention markers - is owned by Python, not by the LLM. The prompt tells Qwen to write only natural English content: per-subject appearances, a style description, a summary overview, and one description per shot. It must copy <Subject N> labels exactly and never invent new ones. That division of labor is the right call: an uncensored local Qwen is great at prose and terrible at remembering to close brackets, and you don't want either of those traits in your protocol syntax. The config enforces it too - temperature 0.0, no thinking block, JSON-object output, a larger 3072-token budget because this call writes more than it reads.
A subtle trick: text-only, still multimodal
The composer gets no image, yet it's forced through the same multimodal handler that analyzed the references - force_mmproj keeps it there. The comment in the source spells out why: with no image, Simple Qwen would otherwise fall back to a generic text-only GGUF template that can't reliably accept the enable_thinking=False switch. The pack would rather keep one deterministic runtime than risk a model that decides to think out loud mid-compose.
Install and troubleshooting
Install the whole pack via ComfyUI Manager (search "H3 Scribe") or git clone https://github.com/last-git/h3_scribe into ComfyUI/custom_nodes, then restart. You need ComfyUI_Simple_Qwen3-VL-gguf plus the Qwen3-VL GGUF + mmproj files from the README; the pack's own dependency is just pydantic.
The error you'll meet first is the one this node's strictness is designed to produce: "Authoring references undefined canonical Subjects." That means your authoring text mentions a <Subject N> that doesn't exist after a re-analyze - go back to the Authoring Editor and fix the reference, exactly as the error says. And if Qwen misbehaves and returns the wrong shot count or a style field that's present when it shouldn't be, the downstream Validate & Render node will refuse the output rather than silently generate from a broken prompt. That's a feature: a bad prompt here would cost you a long, expensive H3 generation run.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| authoring_json | STRING | — | |
| base_configopt | STRING | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| system_prompt | STRING | — |
| user_prompt | STRING | — |
| config_override | STRING | — |
| seed | INT | — |