MiniMax-H3 Effect Embeddings
The MiniMax-H3 'effects' that ship as files, not words — and how to make them actually fire
- prompt
- tokens
- findings
Somewhere on MiniMax's H3 model page there are ten "effect embeddings" - bullet time, dark magic, fire breath, the Truman Show pull-back, four seasons, and five more - that are supposed to give you the exact shot you're picturing. The problem is that "embedding" here is doing real work, and the word means something different than it did back in the EasyNegative days. This node is the part of the pytraveler MiniMax-H3 pack that drops those ten effects into a finished prompt the right way, and tells you when it can't.
Here's the thing that makes them worth understanding: they aren't keywords. You don't ask H3 for "bullet time" in prose and hope the model feels it. Each effect file is a single bf16 tensor, fifty to a hundred and forty positions of prompt that someone already pushed through H3's text encoder - a Qwen3-VL-32B, hence the tensor key qwen3vl_32b and width 5120 - saved as numbers. When the text contains embedding:minimaxh3_bullet_time, ComfyUI's tokenizer splices those exact encoded positions back into the sequence at that point. So an effect costs prompt length, not adjectives; it arrives at full strength or not at all; and there is no rephrasing it and no (embedding:x:0.8) dial - H3 tokenizes with weights disabled, so asking for half of one is just asking for nothing.
That's also why this sounds like the technique the community wrote off. Textual inversion died because CLIP-trained vectors can't bind to the Qwen and Mistral encoders that took over in 2026. These survive because they were never meant to be portable: MiniMax encoded them against H3's own encoder, and ComfyUI 0.33.0 added embedding: support so they'd reach H3's tokenizer at all. On anything older, the node warns you - the token is read as ordinary words and you get a video that never got the memo.
The inputs that matter
Three inputs, and really only two of them need your attention:
prompt- whatever text you want the tokens in: a writer node's output, a loaded file, something typed. It passes through character for character; only the tokens are touched, and rerunning never stacks them.placement- where the tokens land. Default is start of the description (opens the description field, where the effect was meant to modify), with top of the prompt and end of the prompt as the alternatives. This isn't taste. ComfyUI's tokenizer joins everything that follows a token onto one line, so a token at the top flattens every field separator below it into a single space. At the end, nothing follows it, so nothing gets flattened.effects- the grid: a checkbox per effect with its cost in prompt positions read from the file's own header.
Outputs: prompt (the finished text, wired wherever your H3 prompt goes), tokens (an INT - how many positions the chosen effects eat, real numbers read off the safetensors headers, so you can watch them against your context budget), and findings (what it noticed, empty when all's well - worth routing to a text preview while you're learning the placement rules).
Install and the one real gotcha
The pack installs the usual way - ComfyUI Manager (search "MiniMax-H3 Prompt Rewriter"), or:
cd ComfyUI/custom_nodes
git clone https://github.com/pytraveler/MiniMax-H3-Prompt-Rewriter-ComfyUI
then install requirements into ComfyUI's Python and restart. Don't let the pack's headline LoRA scare you off this node: that 52 GB 27B model belongs to the rewriter nodes. Effect Embeddings loads nothing and generates nothing - a run is ~12 ms of string work. The only download is the ten effect files (~10 MB) via the button on the node, fetched from Comfy-Org/MiniMax-H3 into ComfyUI's own models/embeddings folder, which is the only place embedding: ever looks. The requirement that actually bites: ComfyUI 0.33.0 or newer, checked at run time.
Where people get burned
Every way this fails is silent, which is the whole reason it's a node instead of a string you type. A capital Embedding: is dropped without a word, as is a token glued to the word in front of it. A trailing full stop is the sneaky one: the path layer on Windows drops a trailing dot, so embedding:minimaxh3_dark_magic. loads there and quietly loses the effect on Linux. And two effects at once - a spiral ascent through four seasons - is allowed but nobody promises the model can reconcile two chunks of encoded prompt. If the video comes out looking like the prompt never asked, that's the self-check's cue: the pack's other nodes watch for exactly these, and the findings output says so out loud.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | The prompt to put the tokens into. Anything: a writer node's output, a loaded file, something typed here. It is passed through character for character apart from the tokens themselves -- nothing is re-wrapped, re-labelled or rebuilt from parsed fields. Running it twice does not stack them: the node takes its own tokens back out before it puts them in, so unticking an effect removes it. | |
| placement | COMBO | start of the description | Where in the prompt the tokens go. It matters more than it looks. 'start of the description' opens the description field itself, after its label -- the field the writers put the scene in, and the field every downstream node reads. This is the position an effect was meant to modify. 'top of the prompt' puts them above everything, before the alignment sentence and the field labels. 'end of the prompt' puts them last. Worth knowing why that is not just a matter of taste: ComfyUI's tokenizer joins everything that follows a token onto one line, so a token at the top flattens every blank line between the fields below it into a single space before H3 ever sees the prompt. Nothing follows a token at the end, so nothing is flattened. The node says when this is happening. A prompt with no field labels has no description to open, so it falls back to the top and says so. |
| effectsopt | STRING | {} | Which effects to add. The grid is drawn by this pack's own interface: a tick, the name, and what it costs in prompt positions. Any combination is allowed and they are added in the order listed. Whether two of them combine into anything sensible is not something this pack can promise -- they are separate pieces of encoded prompt, and asking for a spiral ascent through four seasons is asking the model to reconcile them. Files that are not on disk are marked, and the button fetches all ten in about ten megabytes. They go to ComfyUI's own models/embeddings folder, which is the only place 'embedding:' looks. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| prompt | STRING | — |
| tokens | INT | How many positions of the prompt the chosen effects take up once expanded. Read out of the safetensors header of each file that is present, so it is the real number rather than a table in this pack; effects that have not been downloaded yet contribute their published count. Worth watching next to the length rules: these positions are spent on the effect and not on your scene. |
| findings | STRING | What the node did and what it noticed, one per line -- files that are not on disk, a placement that could not be honoured, line breaks the tokenizer will flatten. Empty when there is nothing to say. Route it into a text preview to keep it in sight. |