Nodes/crypswolfy69 nodes/✦ ALCHEMIST // MINIMAX H3
ComfyUI Node

✦ ALCHEMIST // MINIMAX H3

MiniMax H3 Doesn't Want a Prompt, It Wants a Script

By babydjac·Created 25 days ago·Updated 8 days ago· 1
✦ ALCHEMIST // MINIMAX H3
  • source_image
  • prompt
  • reasoning
  • model_used
  • status
◄actionidle►
◄providerxAI / Grok►
◄modelgrok-4.20-non-reasoning►
◄reasoningprovider default►
◄simple_prompta baker opens the shutters at dawn►
◄clip_seconds8.0►
◄h3_aspect16:9►
◄nsfwtrue►
◄h3_musicauto►
◄extra_direction►
◄api_key►
◄temperature0.80►
◄max_tokens1400►
◄remember_keytrue►
◄custom_base_url►
◄reroll0►

MiniMax H3 made one thing obvious the moment people started running it: you can't prompt it like a silent image model and get the good version. It has native stereo audio and a shot language, and the official guidance is a three-field document - the description, the room sound, and the score, as separate fields. Which is a writing task, not a prompting task, and most of us are bad at writing shot descriptions.

That's the job Alchemist's MINIMAX H3 node does. You give it "a baker opens the shutters at dawn", it gives you back the document.

Quick context on the model itself: H3 landed in August 2026 as MiniMax's 33B omni-modal video generator - text, image, video and audio in one context, 4–15 second clips up to 2K, native synced stereo audio, and it took the top spot in Artificial Analysis's video-editing arena. The weights are open, with the catch that the licence is void in the US, EU, UK and Korea. None of that has anything to do with this node, which only writes text - but it's why you're here.

How it works

The system prompt encodes H3's document format and nothing else:

integrated_multimodal_description: ...
overall_soundscape: ...
non_diegetic_music: ...

The description block opens on [Shot 1], and later shots get a clock - At 00:03.500, [Shot 2]. The look is stated up front (live-action, cinematic, animated, 2D). Subject, then action, then setting, then camera, and the camera has to say three things: type, amplitude, speed - "a slow, shallow push-in" and not just "cinematic". Spoken lines go in <d>[English] the exact words.</d> dialogue tags. Soundscape is diegetic only, the stuff a mic in the room would catch, and the music field is the score, or N/A when there shouldn't be one.

Your clip_seconds and h3_aspect go into the user message, so the document is written to fit a clip length you actually intend to render instead of one the LLM invented.

Inputs, outputs

simple_prompt is the shot. clip_seconds (4–15, the range the model itself supports) and h3_aspect are worth setting honestly. h3_music exists because the node can only write the score if you tell it something - auto lets the LLM decide, none forces N/A in the field, and the named options put a direction in the prompt. source_image feeds a frame in, if you're doing image-to-video and want the description to match what's actually in the shot.

provider, model and reasoning are the LLM controls. There's a nsfw toggle like its siblings, and the same advanced layer (temperature, max_tokens, api_key, custom_base_url, remember_key, reroll) you can mostly ignore. On reasoning models, reasoning is the difference between about nine seconds and forty - H3 docs are long, so don't set it high just because it's there.

Outputs: prompt (the document - wire it into whatever H3 node you're running, as the prompt/text input), reasoning, model_used, and status. Keep status if you're comparing two providers; you'll want the record.

Install

ComfyUI Manager, search crypswolf69, or:

cd ComfyUI/custom_nodes
git clone https://github.com/babydjac/crypswolf69.git
pip install -r crypswolf69/requirements.txt

Restart, hard-refresh. One dependency (aiohttp), no models for this node. Paste your API key into api_key and run the node's action widget to vault it, or export XAI_API_KEY / OPENAI_API_KEY / whatever your provider uses. The action widget runs in the browser and resets to idle; it never queues a generation.

Note that the pack targets ComfyUI's newer node API (comfy_api.latest), so a very old ComfyUI gives you an empty node search rather than an error message.

Where people get burned

Feeding the raw document to a node that wants one line. That's what the format is - three labelled fields in one string, which is what H3's own guide specifies. Some third-party H3 nodes flatten or re-parse it. If your clip ignores the score, check what your H3 node does with the text before blaming the writer.

Long documents, low max_tokens. The default 1400 is tuned for this, but if you've lowered it, a truncated document loses the music fields first. The symptom is a clip with no audio direction, not an error.

Refusals. OpenAI, Anthropic and Google refuse adult content; the node raises instead of handing you the refusal. xAI/Grok is the default, OpenRouter reaches uncensored models, and a local Ollama server is the free, unfiltered option - with the caveat that an 8B local model writes a noticeably weaker shot description than Grok does. Cheaper, not better.

Vision providers. source_image needs a model with eyes. DeepSeek has none, and the pack's model list doesn't filter that out for you.

Categoryprompting/alchemist

Inputs (17)

NameTypeDefaultDescription
actionCOMBOidleRuns in the browser and resets to idle. Never queues a generation.
providerCOMBOxAI / GrokWhich LLM answers. Use FETCH MODELS after switching.
modelCOMBOgrok-4.20-non-reasoningModel id. FETCH MODELS repopulates this from the live API.
reasoningCOMBOprovider defaultOnly bites on reasoning models, where it is the difference between 9s and 42s. Ignored elsewhere.
simple_promptSTRINGa baker opens the shutters at dawn—
clip_secondsFLOAT8.04–15—
h3_aspectCOMBO16:95 options: 16:9, 9:16, 1:1, 4:3, 21:9
nsfwBOOLEANtrueNSFW allows all explicit adult content. SFW keeps it non-explicit.
source_imageoptIMAGE—
h3_musicoptCOMBOauto5 options: auto, none, tense strings, warm piano, synth pulse
extra_directionoptSTRING—
api_keyoptSTRINGLeave empty to use the vaulted key or the provider env var.
temperatureoptFLOAT0.800–2—
max_tokensoptINT140064–32000—
remember_keyoptBOOLEANtrue—
custom_base_urloptSTRINGOverride the provider endpoint. Required for the Custom provider.
rerolloptINT00–4294967295Output is cached while inputs are unchanged, so repeat queues are free. Bump this to force a fresh call.

Outputs (4)

NameTypeDescription
promptSTRING—
reasoningSTRING—
model_usedSTRING—
statusSTRING—