YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
ComfyUI-H3NegativeLab
Negative prompting for MiniMax H3 in ComfyUI.
H3 is CFG-distilled โ there's no stock negative prompt input. This pack patches the H3 DiT blocks to run a shadow attention branch with your negative text while keeping the positive presentation, references, and keyframes intact. NAG-form normalized repulsion is applied to the generated video and audio targets independently.
Works with T2V, FL2VA (first/last-frame I2V), and REF2VA.
Install
Extract in comfy\custom_nodes folder / Restart ComfyUI / No additional dependencies.
ComfyUI/custom_nodes/ComfyUI-H3NegativeLab/
__init__.py
h3_negative_lab_v1_0_2.py
README.md
Nodes
H3 Shadow Negative
The everyday node. Plug in one negative CONDITIONING (from a plain CLIP Text Encode on the H3 text encoder), connect the patched MODEL to a normal BasicGuider, done.
video_scale and audio_scale control how hard the output is pushed away from the negative. Scale 1 = off for that stream. If audio_scale > 1 and no separate audio_negative is connected, the main negative is reused for audio.
tau caps the guided norm relative to the positive (prevents overcooking). alpha blends between the positive-only and guided result. start_percent / end_percent limits guidance to a window of the denoise schedule.
H3 Shadow Negative (Advanced)
Same mechanism, explicit video_negative input. Optionally connect a separate audio_negative.
For REF2VA, two modes:
Plain mode โ connect an ordinary H3 text CONDITIONING to video_negative. The patch preserves all packed REF2VA reference rows and replaces the user-prompt text in the shadow branch best-effort.
Exact mode โ duplicate your stock MiniMax H3 Reference to Video node with the same refs, same sizing, same reference order, but put your negative description in its prompt. Connect that CONDITIONING to video_negative. The patch detects matching reference metadata and builds a full alternate packed layout with correct text/vision tags and RoPE coordinates for the shadow branch.
H3 Weighted Text Encode
(phrase:weight) syntax for H3 text conditioning. Operates in embedding space โ weights above 1 emphasize, below 1 de-emphasize. The (syntax:1.5) is stripped before Qwen encoding.
Designed to feed the Shadow node's negative inputs. Safe alongside the Shadow block patch (it modifies the conditioning tensor, not the DiT blocks).
Usage
Minimal setup โ add a negative to any H3 T2V workflow:
H3 CLIP Text Encode ("blurry, static, grainy")
|
v
H3 Shadow Negative <-- MODEL (after sigma shift if used)
|
v
BasicGuider <-- positive CONDITIONING
|
v
KSampler
Console output reports per-step metrics (neg-delta, guided-delta, clamp %) so you can tell whether your negative is actually doing anything.
Defaults
These worked well in testing as starting points:
| Parameter | Basic | Advanced |
|---|---|---|
| video_scale | 3.0 | 3.0 |
| audio_scale | 1.0 | 1.0 |
| tau | 2.5 | 2.5 |
| alpha | 0.35 | 0.35 |
| start_percent | 0.0 | 0.0 |
| end_percent | 0.60 | 0.60 |
If your output looks overcooked, lower alpha first, then tau. If the negative isn't biting, raise video_scale.
Known limitations
- Block cache nodes: This patch replaces H3's DiT double_blocks via
set_model_patch_replace. Block-level cache nodes (Sage+Spectrum, T8mars, etc.) that replace the same blocks will conflict โ use one or the other per run. - Experimental: Keep fixed-seed A/B comparisons when tuning. The shadow branch adds one attention pass per active block per step; expect roughly 15-30% longer inference depending on your setup.
License
MIT