H3 Skill Promptor (Local GGUF)
Write a spec-perfect MiniMax H3 prompt locally, no API key involved
- reference_images
- video_frames
- h3_prompt
- checkpoint_hint
- validation_report
MiniMax H3 is picky about its prompts. It's a 33B omni video model that renders dialogue, sound and all, and it behaves dramatically better when you feed it the six-section Ref2VA format (or a proper base three-field prompt) instead of a sentence of vibes. The H3 Skill Promptor is the node that gets you there with zero API keys: a local GGUF vision LLM, served by a llama-server process the node spawns for you, writes the whole official-format prompt on your own GPU.
The clever part is how it writes. Most "AI prompt generator" nodes ship a hand-written system prompt that rots as the target model's spec changes. This one loads the actual h3-prompting skill document - live from ~/.claude/skills/h3-prompting/SKILL.md, with a vendored snapshot as fallback - and sends that as the spec, plus exactly one of MiniMax's own worked examples for the mode you picked. Update the skill file and the node follows. The skill is the system prompt, literally.
What you set
The required inputs that actually matter:
mode-ref2vawrites the six-section reference prompt for theMiniMax-H3-Base-Ref2VAcheckpoint.t2va/i2va/fl2va/l2vawrite the three-field base prompts for a different checkpoint,MiniMax-H3-Base-FL2VA(thecheckpoint_hintoutput tells you which you need).creative_brief- what the clip should show, in plain language. This is the only writing you do.gguf_model/mmproj- picked frommodels/LLM.mmprojdefaults toauto, pairing by filename prefix; set it tononefor a text-only model (image inputs then error).reasoning_effort-low/medium/xhigh. Note the tooltip: Qwen3.8's template only accepts these three, there's no off switch, andlowis the minimum. Each level grants its own thinking budget on top ofmax_tokens, so a long think can't starve the prompt text.
Optional inputs worth knowing: reference_images (identity/wardrobe/scene refs for ref2va, first/last frames for the base modes), video_frames (a clip as an image batch - keyframes get sampled, max_frames_to_analyze controls how many), dialogue (exact words for <d> tags, kept verbatim), and source_soundscape / source_music / sound_log - those are where you wire in the H3 Audio Soundscaper companion so the prompt's audio sections match what the source clip actually sounds like.
No silent rewrites
Output comes back through a deterministic validator built from the skill's own review checklist. Violations go back to the model exactly once, with the numbered error list; whatever comes back after that is returned as-is. Nothing is quietly "fixed" by the pipeline - the only edits are transport cleanups it reports (a stripped code fence or leaked <think> block). You get three outputs: h3_prompt, checkpoint_hint, and validation_report so you can see what passed, failed, and got retried.
Install and the real prerequisite
Install the pack once: ComfyUI Manager (search "Trent Nodes"), or comfy node registry-install trentnodes, or:
cd ComfyUI/custom_nodes
git clone https://github.com/TrentHunter82/TrentNodes.git
cd TrentNodes
pip install -r requirements.txt
Worth a heads-up from the author himself: he renamed the repo on day one, which left two entries in the registry and made Manager occasionally flag the pack as unsafe. If Manager balks, the git clone path above always works.
The load-bearing prerequisite is not pip: this node talks to an external llama-server binary, so you need a current CUDA build of llama.cpp (≥ b10450 for the qwen35 arch family). Put llama-server on PATH, set LLAMA_SERVER_BIN, or leave it at the default ~/llama.cpp/build/bin/llama-server. Models go in ComfyUI/models/LLM - the tested pair is Qwen3.8-27B-UD-Q4_K_XL.gguf (~16.4 GB) plus its mmproj-F16.gguf (~0.9 GB) from unsloth. Any current vision GGUF llama.cpp serves works; these are just the ones it was built against.
Where people get burned
- Empty prompt at high
reasoning_effort. Older builds letxhighspend the entire token budget thinking, and you got a validation failure with no text. The fix is built in now - thinking gets a separate capped allowance - but if you hit the limit-mid-think error anyway, the message tells you straight: raisemax_tokensor drop tolow. - "llama-server was not found." That's the missing CUDA build, not the node. Follow the install hint above.
- VRAM refusal. The node checks free VRAM before spawning and refuses rather than OOMing.
free_vram_firstunloads ComfyUI's own models first - useful when your card is already holding a diffusion model. base_urlis the escape hatch: point it at any OpenAI-compatible server (LM Studio, vLLM, a llama-server you started by hand) and the node skips managing one entirely.
That last part is the real selling point. Offline, uncensored, no per-call cost, and the prompt format is enforced by the model's own spec rather than your faith in a chat LLM. For the price of ~17 GB of VRAM it's the most dependable way I've found to feed H3 what it actually wants.
Inputs (22)
| Name | Type | Default | Description |
|---|---|---|---|
| mode | COMBO | ref2va | ref2va = six-section reference prompt (MiniMax-H3-Base-Ref2VA checkpoint). t2va/i2va/fl2va/l2va = three-field base prompts (MiniMax-H3-Base-FL2VA checkpoint). |
| creative_brief | STRING | What the clip should show. Plain language. | |
| gguf_model | COMBO | LLM .gguf from ComfyUI/models/LLM. | |
| mmproj | COMBO | auto | Vision projector. auto = pair by filename prefix; none = text-only (image inputs then error). |
| duration_seconds | FLOAT | 6.01–60 | Timestamp budget for the shot list. Never written into the prompt itself. |
| max_frames_to_analyze | INT | 82–16 | Keyframes sampled from video_frames. |
| temperature | FLOAT | 0.700–2 | 0.7 = Unsloth instruct default for Qwen3.8. |
| reasoning_effort | COMBO | low | Qwen3.8 thinking budget (chat_template_kwargs). The template accepts ONLY low/medium/xhigh - there is no off switch; low is the minimum. |
| seed | INT | 00–18446744073709550000 | Folded into int32 for the server. |
| reference_imagesopt | IMAGE | Picture 1..N in order. ref2va: identity/wardrobe/scene references. i2va: first frame. l2va: last frame. fl2va: first then last frame. | |
| video_framesopt | IMAGE | A clip as an image batch; keyframes are sampled. | |
| fpsopt | FLOAT | 24.001–120 | fps of video_frames, for keyframe timestamps. |
| dialogueopt | STRING | Exact words for <d> tags, kept verbatim. | |
| base_urlopt | STRING | Attach to a running OpenAI-compatible server instead of spawning one (e.g. http://127.0.0.1:8735). Empty = managed server. | |
| ctx_sizeopt | INT | 327684096–262144 | — |
| portopt | INT | 87351024–65535 | — |
| free_vram_firstopt | BOOLEAN | false | Unload ComfyUI models before spawning the server. Custom-node module caches stay resident either way. |
| max_tokensopt | INT | 3072256–8192 | Budget for the prompt text itself. Thinking gets its own capped allowance on top (low +2048, medium +3072, xhigh +7168), so it cannot starve the prompt. |
| source_soundscapeopt | STRING | Wire the H3 Audio Soundscaper's overall_soundscape here: measured diegetic sound of the source clip, used to anchor the prompt's soundscape section. | |
| source_musicopt | STRING | Wire the Soundscaper's non_diegetic_music here: the measured score anchors the prompt's music section. | |
| sound_logopt | STRING | Wire the Soundscaper's sound_log here: timestamped events help the model time sound to shots. | |
| verboseopt | BOOLEAN | false | Mirror the report to the ComfyUI console as it happens, and dump the full payloads: system prompt, user context, model thinking, raw replies. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| h3_prompt | STRING | — |
| checkpoint_hint | STRING | — |
| validation_report | STRING | — |