Nodes/Trent Nodes/H3 Skill Promptor (Local GGUF)
ComfyUI Node

H3 Skill Promptor (Local GGUF)

Write a spec-perfect MiniMax H3 prompt locally, no API key involved

By TrentHunter82·Created 9 months ago·Updated 3 days ago· 39
H3 Skill Promptor (Local GGUF)
  • reference_images
  • video_frames
  • h3_prompt
  • checkpoint_hint
  • validation_report
moderef2va
creative_brief
gguf_model
mmprojauto
duration_seconds6.0
max_frames_to_analyze8
temperature0.70
reasoning_effortlow
seed0
fps24.00
dialogue
base_url
ctx_size32768
port8735
free_vram_firstfalse
max_tokens3072
source_soundscape
source_music
sound_log
verbosefalse

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 - ref2va writes the six-section reference prompt for the MiniMax-H3-Base-Ref2VA checkpoint. t2va / i2va / fl2va / l2va write the three-field base prompts for a different checkpoint, MiniMax-H3-Base-FL2VA (the checkpoint_hint output 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 from models/LLM. mmproj defaults to auto, pairing by filename prefix; set it to none for 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, and low is the minimum. Each level grants its own thinking budget on top of max_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 let xhigh spend 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: raise max_tokens or drop to low.
  • "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_first unloads ComfyUI's own models first - useful when your card is already holding a diffusion model.
  • base_url is 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.

CategoryTrent/VLM

Inputs (22)

NameTypeDefaultDescription
modeCOMBOref2varef2va = six-section reference prompt (MiniMax-H3-Base-Ref2VA checkpoint). t2va/i2va/fl2va/l2va = three-field base prompts (MiniMax-H3-Base-FL2VA checkpoint).
creative_briefSTRINGWhat the clip should show. Plain language.
gguf_modelCOMBOLLM .gguf from ComfyUI/models/LLM.
mmprojCOMBOautoVision projector. auto = pair by filename prefix; none = text-only (image inputs then error).
duration_secondsFLOAT6.01–60Timestamp budget for the shot list. Never written into the prompt itself.
max_frames_to_analyzeINT82–16Keyframes sampled from video_frames.
temperatureFLOAT0.700–20.7 = Unsloth instruct default for Qwen3.8.
reasoning_effortCOMBOlowQwen3.8 thinking budget (chat_template_kwargs). The template accepts ONLY low/medium/xhigh - there is no off switch; low is the minimum.
seedINT00–18446744073709550000Folded into int32 for the server.
reference_imagesoptIMAGEPicture 1..N in order. ref2va: identity/wardrobe/scene references. i2va: first frame. l2va: last frame. fl2va: first then last frame.
video_framesoptIMAGEA clip as an image batch; keyframes are sampled.
fpsoptFLOAT24.001–120fps of video_frames, for keyframe timestamps.
dialogueoptSTRINGExact words for <d> tags, kept verbatim.
base_urloptSTRINGAttach to a running OpenAI-compatible server instead of spawning one (e.g. http://127.0.0.1:8735). Empty = managed server.
ctx_sizeoptINT327684096–262144
portoptINT87351024–65535
free_vram_firstoptBOOLEANfalseUnload ComfyUI models before spawning the server. Custom-node module caches stay resident either way.
max_tokensoptINT3072256–8192Budget 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_soundscapeoptSTRINGWire the H3 Audio Soundscaper's overall_soundscape here: measured diegetic sound of the source clip, used to anchor the prompt's soundscape section.
source_musicoptSTRINGWire the Soundscaper's non_diegetic_music here: the measured score anchors the prompt's music section.
sound_logoptSTRINGWire the Soundscaper's sound_log here: timestamped events help the model time sound to shots.
verboseoptBOOLEANfalseMirror the report to the ComfyUI console as it happens, and dump the full payloads: system prompt, user context, model thinking, raw replies.

Outputs (3)

NameTypeDescription
h3_promptSTRING
checkpoint_hintSTRING
validation_reportSTRING