diff --git a/tutorials/video/minimax/minimax-h3.mdx b/tutorials/video/minimax/minimax-h3.mdx index 8741491142..1040894f30 100644 --- a/tutorials/video/minimax/minimax-h3.mdx +++ b/tutorials/video/minimax/minimax-h3.mdx @@ -1,6 +1,6 @@ --- title: "ComfyUI MiniMax H3 Video Generation Guide" -description: "How to use open-weights MiniMax H3 in ComfyUI: text-to-video, image-to-video, and reference-to-video workflows with native stereo audio, prompt writing tips, and Sage Attention speedups." +description: "Run open-weights MiniMax H3 in ComfyUI: text-to-video, image-to-video, and reference-to-video Workflows with native stereo audio." sidebarTitle: "Overview" --- @@ -8,19 +8,18 @@ import UpdateReminder from "/snippets/tutorials/update-reminder.mdx"; [MiniMax H3](https://www.minimax.io/blog/minimax-h3) is MiniMax's open-weights omni-modal model. It understands text, images, video, and audio in one context and generates video with **native stereo audio** (voice, SFX, and music in a single pass). Open weights target about 1 megapixel (768px short edge) at 24fps for up to ~15 seconds. 2K is a hosted-service output and needs a separate upscale pass in ComfyUI. +Commercial use of locally generated outputs requires a [MiniMax commercial license](https://comfy.org/minimax/license). See [Commercial licensing](#commercial-licensing) for tiers and pricing. + Documentation is split across six pages: -- **Overview** (this page): capabilities, checkpoints, workflow index, resolution, clip length, steps, sampler, speedups -- **[Native workflows](/tutorials/video/minimax/minimax-h3-native)**: T2V, I2V, R2V, and native-node techniques +- **Overview** (this page): capabilities, checkpoints, Workflow index, resolution, clip length, steps, sampler, speedups +- **[Native Workflows](/tutorials/video/minimax/minimax-h3-native)**: T2V, I2V, R2V, and native-Node techniques - **[Multiframe Reference](/tutorials/video/minimax/minimax-h3-multiframe)**: anchor reference frames on the timeline - **[Fun ControlNet Union](/tutorials/video/minimax/minimax-h3-fun-controlnet)**: control video or inpainting with a mask - **[Prompt guide](/tutorials/video/minimax/minimax-h3-prompt-guide)**: official guides, tips, embeddings - **[FastH3](/tutorials/video/minimax/minimax-h3-fastvideo)**: FastVideo sparse-attention checkpoints - -H3's open weights let you run the model locally. Commercial use of locally generated outputs requires a [MiniMax commercial license](https://comfy.org/minimax/license), available through Comfy, the only official reseller. Generations on Comfy Cloud already include commercial rights. See [Commercial licensing](#commercial-licensing) for tiers and pricing. - ## Key features @@ -33,14 +32,29 @@ H3's open weights let you run the model locally. Commercial use of locally gener ## Getting started -1. Update ComfyUI: base T2V/I2V/R2V templates need **0.30.0+**; Multiframe Reference **0.34.0+**; Fun ControlNet Union, sparse attention, and Model Attention Backend **0.35.0+**; FastH3 **0.36.0+** -2. **Template Library** > **Video** > pick a MiniMax H3 workflow -3. Download models from the pop-up (tens of GB; allow time and disk space) +Each feature needs a minimum ComfyUI version: + +| Feature | Minimum version | +| --- | --- | +| Base T2V, I2V, and R2V templates | **0.30.0+** | +| Multiframe Reference | **0.34.0+** | +| Fun ControlNet Union, sparse attention, and `Model Attention Backend` | **0.35.0+** | +| FastH3 | **0.36.0+** | +| Fun ControlNet Union 2.0 | **0.38.0+** | + +1. Update ComfyUI to the version your Workflow needs. +2. Open **Template Library** > **Video** and select a MiniMax H3 Workflow. +3. Download the models from the pop-up. The files total tens of GB, so allow time and disk space. Weights live on Hugging Face: [Comfy-Org/MiniMax-H3](https://huggingface.co/Comfy-Org/MiniMax-H3). -Use **pruned** checkpoints when both full and pruned builds exist. Pruned builds store adaln in a shared curve table (`adaln_t_table`) that ComfyUI reads from the file; templates load `minimax_h3_*_pruned_int8_convrot.safetensors`. LoRAs distilled on **full** builds carry adaln tensors that do not exist on pruned builds (shape mismatch; those weights are skipped). Turbo LoRAs have no adaln tensors and work on either build. +Use **pruned** checkpoints when both full and pruned builds exist. + +- Pruned builds store adaln in a shared curve table (`adaln_t_table`) that ComfyUI reads from the file. +- Templates load `minimax_h3_*_pruned_int8_convrot.safetensors`. +- LoRAs distilled on **full** builds carry adaln tensors that do not exist on pruned builds (shape mismatch; those weights are skipped). +- Turbo LoRAs have no adaln tensors and work on either build. ## Choosing the checkpoint precision @@ -55,15 +69,15 @@ Pick the smallest build that fits in VRAM. Change only the `UNETLoader` file; Co | [`pruned_bf16`](https://huggingface.co/Comfy-Org/MiniMax-H3/blob/main/diffusion_models/minimax_h3_fl2va_pruned_bf16.safetensors) | 40 GB | Unquantized pruned | | [`bf16`](https://huggingface.co/Comfy-Org/MiniMax-H3/blob/main/diffusion_models/minimax_h3_fl2va_bf16.safetensors) | 66 GB | Full unquantized build | -Links are `fl2va` (T2V/I2V); `ref2va` files are in the same folder at the same sizes. **Comfy Kitchen attention cannot run `int8_convrot` checkpoints**; use a `bf16` build with that backend. +Links are `fl2va` (T2V/I2V); `ref2va` files are in the same folder at the same sizes. If VRAM is tight, step down a size: CPU offload costs more than precision tradeoffs. On RTX 30-series, INT8 matrix ops are ~2× FP16 and there is no FP8 path, so INT8 often beats FP8 at the same file size. H3 also needs video and audio VAEs: [video fp16 / int8_convrot](https://huggingface.co/Comfy-Org/MiniMax-H3/tree/main/vae) and [audio fp32](https://huggingface.co/Comfy-Org/MiniMax-H3/blob/main/vae/minimax_h3_audio_vae_fp32.safetensors). Templates use int8 video + fp32 audio; int8 video decodes ~2× faster on ComfyUI 0.36.0+. Swap files on `VAELoader` like the diffusion model. -## Workflow index +## Choosing a template Workflow -Six template workflows ship today (examples, not an exhaustive list). The library also includes an I2V continuation variant (`video_minimax_h3_i2v_continuation`). +Six `video_minimax_h3_*` template Workflows are available (examples, not an exhaustive list): `t2v`, `i2v`, `r2v`, `multiframe_reference`, `fun_controlnet_union`, and `i2v_continuation`. @@ -76,46 +90,75 @@ Six template workflows ship today (examples, not an exhaustive list). The librar Lock in a character, style, motion, camera move, or voice from reference images, videos, and audio - Anchor reference frames at specific points along the output timeline with chained Add Guide nodes + Anchor reference frames at specific points along the output timeline with chained Add Guide Nodes Drive H3 with a Canny, Depth, HED, MLSD, or Pose control video, or run video inpainting with a mask + + Extend a clip by loading the previous last frame and describing the next segment + -**MiniMax H3 Image to Video** covers T2V and first/last-frame I2V (`t2va` / `fl2va`). **MiniMax H3 Reference to Video** covers R2V (`ref2va`). +Two templates cover several modes: + +- `MiniMax H3 Image to Video` covers T2V and first/last-frame I2V (`t2va` / `fl2va`). +- `MiniMax H3 Reference to Video` covers R2V (`ref2va`). -Reference conditioning only applies when it reaches the sampler. T2V/I2V templates sample inside a subgraph wired to **Image to Video** only. A **Reference to Video** node on the canvas is ignored without error. Use the R2V template (or a workflow built from it) for reference-driven output. +Reference conditioning only applies when it reaches the sampler. T2V/I2V templates sample inside a Subgraph wired to `Image to Video` only. A `Reference to Video` Node on the canvas is ignored without error. Use the R2V template (or a Workflow built from it) for reference-driven output. Prompt resources: [prompt guide](/tutorials/video/minimax/minimax-h3-prompt-guide). ## Setting the output resolution -**Resolution Selector** sets `width` and `height` on the H3 node: +`Resolution Selector` sets `width` and `height` on the H3 Node: + +- `aspect_ratio`: Presets such as `16:9 (Widescreen)`, `9:16 (Portrait Widescreen)`, `1:1 (Square)`. +- `megapixels`: Total pixel count (higher = larger, slower). +- `multiple`: Rounds `width` and `height` to this grid. The Node defaults to `8`, so set it to `32` for H3. + +Templates open at `megapixels` `0.4` with `multiple` `32`: + +| Aspect ratio | Resolution at 0.4 MP | +| --- | --- | +| 16:9 | 864×480 | +| 1:1 (the I2V default) | 640×640 | -- **Aspect ratio**: Presets such as `16:9 (Widescreen)`, `9:16 (Portrait Widescreen)`, `1:1 (Square)` -- **Megapixels**: Total pixel count (higher = larger, slower) -- **Multiple**: Round to this grid; keep **32** for H3 +A 0.4 MP render is fast and fine for drafts. Raise `megapixels` before a final render. -Templates open at **Megapixels** **0.4**: **864×480** at 16:9, **640×640** at 1:1 (the I2V default). A 0.4 MP render is fast and fine for drafts; raise **Megapixels** before a final render. +For 16:9 native quality: -For 16:9 native quality, set **Megapixels** to **0.98** or enter **1344 × 768** on the node. H3 is trained near 1 MP, with a 768-pixel short edge and up to a 768×1344 area. Sizes above 768×1344 render slower without adding detail, and quality drops the further you move from the trained resolution. For 2K, generate at native size and upscale separately. +- Set `megapixels` to `0.98` or enter `1344 × 768` on the Node. +- H3 is trained near 1 MP, with a 768-pixel short edge and up to a 768×1344 area. Sizes above 768×1344 render slower without adding detail, and quality drops the further you move from the trained resolution. +- For 2K, generate at native size and upscale separately. -The H3 nodes have no 768×1344 cap on output size: `width` and `height` step by **32** up to 16384 per axis. Reference videos on **Reference to Video** are downscaled to fit a 768px short edge and a 768×1344 area. Reference images follow `ref_image_size`: **match** scales them to the generation's pixel area, **max** to a 2048px short edge. +The H3 Nodes have no 768×1344 cap on output size: `width` and `height` step by `32` up to 16384 per axis. Reference videos on `Reference to Video` are downscaled to fit a 768px short edge and a 768×1344 area. Reference images follow `ref_image_size`: `match` scales them to the generation's pixel area, and `max` scales them to a 2048px short edge. ### Upscaling to higher resolution -Use a **latent upscaler** on the 24-channel video latent to avoid VAE round-trip ghosting. [Minimax_h3_latent_Upscaler](https://huggingface.co/LBH-123-AI/Minimax_h3_latent_Upscaler) (unofficial) needs [minimax_h3_latent_upscaler_3d_conv_v1_bf16.safetensors](https://huggingface.co/LBH-123-AI/Minimax_h3_latent_Upscaler/blob/main/minimax_h3_latent_upscaler_3d_conv_v1/minimax_h3_latent_upscaler_3d_conv_v1_bf16.safetensors) in `ComfyUI/models/latent_upscale_models/` and its [custom node](https://github.com/LBH-123-AI/Comfyui_Minimax_h3_latent_Upscaler). Chain **Minimax H3 Latent Upscaler (3D)** after a low-res pass (`scale` 1.0–4.0, default 2.0), then re-sample at target resolution. +Use a latent upscaler on the 24-channel video latent to avoid VAE round-trip ghosting. + +1. Install [Minimax_h3_latent_Upscaler](https://huggingface.co/LBH-123-AI/Minimax_h3_latent_Upscaler) (unofficial): its [Custom Node](https://github.com/LBH-123-AI/Comfyui_Minimax_h3_latent_Upscaler) and [minimax_h3_latent_upscaler_3d_conv_v1_bf16.safetensors](https://huggingface.co/LBH-123-AI/Minimax_h3_latent_Upscaler/blob/main/minimax_h3_latent_upscaler_3d_conv_v1/minimax_h3_latent_upscaler_3d_conv_v1_bf16.safetensors), saved in `ComfyUI/models/latent_upscale_models/`. +2. Chain `Minimax H3 Latent Upscaler (3D)` after a low-res pass (`scale` 1.0–4.0, default 2.0). +3. Re-sample at the target resolution. + +Refine guidance: -Latent upscale saves time, not peak VRAM (refine still runs at target size). Treat refine as partial denoise: `denoise` **0.1–0.5** keeps composition; go higher only to rework the first pass. Give the refine sampler enough steps to rebuild multistep history (see Sampler and scheduler). +- Latent upscale saves time, not peak VRAM (refine still runs at target size). +- Treat refine as partial denoise: `denoise` `0.1`–`0.5` keeps composition. Go higher only to rework the first pass. +- Give the refine sampler enough steps to rebuild multistep history (see Choosing the sampler and scheduler). -Video and audio latents are separate (24 + 32 channels). The upscaler only spatially enlarges video; audio is unchanged until refine denoises both. Low refine `denoise` preserves first-pass audio. To keep audio exactly, decode the first pass with `VAEDecodeAudio` before refine and wire that track into final `CreateVideo` (add `SaveAudioAdvanced` for a lossless export). +Audio handling: -## Clip length +- Video and audio latents are separate (24 + 32 channels). The upscaler only spatially enlarges video; audio is unchanged until refine denoises both. +- Low refine `denoise` preserves first-pass audio. +- To keep audio exactly, decode the first pass with `VAEDecodeAudio` before refine and wire that track into the final `CreateVideo` (add `SaveAudioAdvanced` for a lossless export). -H3 is trained on short clips; native nodes accept a wider range without blocking over-length requests. +## Setting the clip length + +H3 is trained on short clips; native Nodes accept a wider range without blocking over-length requests. Templates expose `duration` in seconds, converted to frames on the `17k+5` grid at 24fps. @@ -126,93 +169,108 @@ Templates expose `duration` in seconds, converted to frames on the `17k+5` grid | Frame grid | `17k+5` at 24 fps (124 frames ≈ 5.2 s) | | Template default | 5 s → 124 frames | -`duration` and `length` round **up** to the next `17k+5` value: a 5 s request renders 124 frames (5.17 s), and a `length` of 120 also renders 124. Frames pack from frame 0 in 17-frame blocks, so the leftover 5 frames are the last block, not the first. Requests that fall between the same two grid points render the same clip. +`duration` and `length` round up to the next `17k+5` value: a 5 s request renders 124 frames (5.17 s), and a `length` of 120 also renders 124. Frames pack from frame 0 in 17-frame blocks, so the leftover 5 frames are the last block, not the first. Requests that fall between the same two grid points render the same clip. -Long clips at full resolution exhaust VRAM first; lower megapixels to fit. +Long clips at full resolution exhaust VRAM first; lower `megapixels` to fit. ### Chaining clips Beyond the trained range, chain I2V continuations from each clip's last frame. Errors compound (faces lose texture first); turbo/distilled schedules show burn sooner. -Use `video_minimax_h3_i2v_continuation` (empty prompt): load the previous last frame, describe the next segment. Prefer short continuous shots and cut before burn shows. For longer chains, [H3-Anti-Burn-LoRA](https://huggingface.co/Imagineer13/H3-Anti-Burn-LoRA/blob/main/h3_antiburn_universal_v1.safetensors) on clips after the first at `strength_model` ~0.5 (tune for your continuation style). +1. Open `video_minimax_h3_i2v_continuation` (empty prompt). +2. Load the previous last frame and describe the next segment. +3. Prefer short continuous shots and cut before burn shows. -## Step count +For longer chains, use [H3-Anti-Burn-LoRA](https://huggingface.co/Imagineer13/H3-Anti-Burn-LoRA/blob/main/h3_antiburn_universal_v1.safetensors) on clips after the first at `strength_model` ~0.5 (tune for your continuation style). -Defaults (Lightning LoRA **off**): **20 steps**. With turbo on: **8** for T2V/I2V (and continuation), **4** for R2V, Multiframe, and Fun ControlNet. On T2V/I2V subgraphs, `turbo_mode`, `turbo_steps`, and `turbo_model_strength` control the distilled LoRA. A 4-step fl2va file is also listed: [`minimax_h3_fl2v_turbo_4step_v1.0_768p_comfyui_bf16.safetensors`](https://huggingface.co/Comfy-Org/MiniMax-H3/blob/main/loras/minimax_h3_fl2v_turbo_4step_v1.0_768p_comfyui_bf16.safetensors) with `turbo_steps` **4**. +## Setting the step count -Reference shots need more steps: reference tokens ride every step, so 4-step turbo can barely apply references (pose/face drift). For tight reference match, keep turbo off or raise toward **25**. +Defaults with the Lightning LoRA off are `20` steps. With turbo on: -Distilled schedules smooth fine detail (skin, fabric, hair) vs 20-step base. Each turbo file is mode-specific; test at a fixed seed before stacking style LoRAs. `turbo_steps` and `turbo_model_strength` are adjustable: higher steps + lower strength (less than 1) move back toward base quality and cost time. Example: 4-step file at 6–8 steps, strength ~0.8. +| Template | Steps with turbo on | +| --- | --- | +| T2V, I2V, and I2V continuation | `8` | +| R2V, Multiframe, and Fun ControlNet | `4` | -Turbo LoRAs shorten the schedule, not per-step time (merged at load). Running a 4-step LoRA at 20 steps takes about as long as base 20 steps. +Turbo settings: -Guidance by content: +- On T2V/I2V Subgraphs, `turbo_mode`, `turbo_steps`, and `turbo_model_strength` control the distilled LoRA. +- A 4-step fl2va file is also listed: [`minimax_h3_fl2v_turbo_4step_v1.0_768p_comfyui_bf16.safetensors`](https://huggingface.co/Comfy-Org/MiniMax-H3/blob/main/loras/minimax_h3_fl2v_turbo_4step_v1.0_768p_comfyui_bf16.safetensors) with `turbo_steps` `4`. +- Turbo LoRAs shorten the schedule, not per-step time (merged at load). Running a 4-step LoRA at 20 steps takes about as long as base 20 steps. -- Simple shots: **12–16** steps often enough -- High-frequency detail (chainmail, filigree, many small objects): improves up to ~**50**; below that, triangular grid artifacts under motion (worse with turbo) -- Most motion/prompt gains by step **16**; little visible change past **50** -- Soft frames at native resolution are usually a resolution issue, not steps +Reference shots need more steps. Reference tokens ride every step, so 4-step turbo can barely apply references (pose/face drift). For tight reference match, keep turbo off or raise toward `25`. -Audio converges later than video in the joint denoise. Speech and timbre need **12+** steps; at **8** steps audio is often the weak link. +Distilled schedules smooth fine detail (skin, fabric, hair) compared with the 20-step base: -## Sampler and scheduler +- Each turbo file is mode-specific. Test at a fixed seed before stacking style LoRAs. +- `turbo_steps` and `turbo_model_strength` are adjustable. Higher steps plus lower strength (less than 1) move back toward base quality and cost time. +- Example: a 4-step file at 6–8 steps, strength ~0.8. -Templates use **`res_multistep`** + **`simple`**. T2V/I2V/FastH3 hide these inside the subgraph; R2V, Multiframe, and Fun ControlNet expose `KSamplerSelect` and `BasicScheduler` on canvas. +Guidance by content: -`res_multistep` is second-order multistep (first step is Euler). Splitting the schedule across two samplers drops multistep history: the second sampler's first step is first-order again. Keep one sampler run, or give the second enough steps to warm up. +- Simple shots: `12`–`16` steps often enough. +- High-frequency detail (chainmail, filigree, many small objects): improves up to ~`50`; below that, triangular grid artifacts under motion (worse with turbo). +- Most motion/prompt gains by step `16`; little visible change past `50`. +- Soft frames at native resolution are usually a resolution issue, not steps. + +Audio converges later than video in the joint denoise. Speech and timbre need `12`+ steps; at `8` steps audio is often the weak link. -Default H3 shifts are `shift` **12** and `audio_shift` **3** from the model definition (no extra node). FastH3 templates set **ModelSamplingMiniMaxH3** to `shift_video` **10**, `shift_audio` **3**. Wrong video shift on distilled builds (e.g. **3** instead of **10** on 8-step) can show grid artifacts. Custom finetunes may need their own pair on **ModelSamplingMiniMaxH3** (see the file's model card). [DMAD 4-step LoRA](https://huggingface.co/ZhengmingYu/DMAD/blob/main/minimax_h3/dmad_minimax_h3_4step_full_critic_comfyui.safetensors) uses `shift` **12**, `audio_shift` **2**, **`lcm`** + **`simple`**. +## Choosing the sampler and scheduler -## Speeding up generation with Sage Attention +Templates use `res_multistep` + `simple`. T2V/I2V/FastH3 hide these inside the Subgraph; R2V, Multiframe, and Fun ControlNet expose `KSamplerSelect` and `BasicScheduler` on canvas. -[Sage Attention](https://github.com/woct0rdho/SageAttention) can roughly **2×** speed with small quality impact (optional install): +`res_multistep` is second-order multistep (first step is Euler). Splitting the schedule across two samplers drops multistep history: the second sampler's first step is first-order again. Keep one sampler run, or give the second enough steps to warm up. + +Shift values: -1. `pip install` the wheel matching your PyTorch/CUDA from [releases](https://github.com/woct0rdho/SageAttention/releases) -2. Install [KJNodes](https://github.com/kijai/ComfyUI-KJNodes) for `Patch Sage Attention KJ` -3. Insert between `UNETLoader` and `BasicGuider`; set `sage_attention` to `auto` -4. Or launch with `--use-sage-attention` +| Setup | `shift` (video) | `audio_shift` | +| --- | --- | --- | +| Default H3 (from the model definition, no extra Node) | `12` | `3` | +| FastH3 templates (`ModelSamplingMiniMaxH3` with `shift_video` and `shift_audio`) | `10` | `3` | +| [DMAD 4-step LoRA](https://huggingface.co/ZhengmingYu/DMAD/blob/main/minimax_h3/dmad_minimax_h3_4step_full_critic_comfyui.safetensors) (`lcm` + `simple`) | `12` | `2` | -Sage needs float16/bfloat16; some H3 layers use other dtypes and fall back to PyTorch attention (console warnings are normal). +- Wrong video shift on distilled builds (for example `3` instead of `10` on 8-step) can show grid artifacts. +- Custom finetunes may need their own pair on `ModelSamplingMiniMaxH3` (see the file's model card). -### Quality degradation with INT8 attention +### Avoiding quality degradation with INT8 attention End-of-clip morphing or garbled on-screen text with Sage often comes from INT8 attention quantization (hot channels in late blocks). -- Templates use **`int8_convrot`** checkpoints. **Comfy Kitchen does not support them** ([issue #15529](https://github.com/Comfy-Org/ComfyUI/issues/15529)). Use default attention, or switch `UNETLoader` to **`pruned_bf16`** then change backend. +- **Comfy Kitchen attention** runs on the template **`int8_convrot`** checkpoints in ComfyUI 0.33.0 and later. Earlier versions crash on the first step with a `quant_qk_per_thread_int8` alignment error. - On **bf16** checkpoints, **Comfy Kitchen attention** (channel rotation before quantize) clears artifacts at similar speed. -Add **Model Attention Backend** (`comfy kitchen attention`) on the model path to `BasicGuider` (after LoRA/turbo), or use `--use-ck-attention` (0.32.0+). Requires `comfy-kitchen` INT8 kernels on your hardware. +Add `Model Attention Backend` (`comfy kitchen attention`, experimental) on the model path to `BasicGuider` (after LoRA/turbo), or use `--use-ck-attention` (0.32.0+). Requires `comfy-kitchen` INT8 kernels on your hardware. ## Speeding up generation with sparse attention -**Model Sparse Attention** (0.35.0+, experimental) cuts attention cost on long clips. For base H3 use `method` **`sol-attn`** (`sla`/`vsa` need matching weights). Needs CUDA + `sol_attn` from `comfy-kitchen`; otherwise layers stay dense. +`Model Sparse Attention` (0.35.0+, experimental) cuts attention cost on long clips. For base H3 use `method` `sol-attn` (`sla`/`vsa` need matching weights). Needs CUDA + `sol_attn` from `comfy-kitchen`; otherwise layers stay dense. -- Defaults `start_percent` **0.2**, `end_percent` **1.0**. Later start (~**0.4**) and earlier end (~**0.9**) protect opening/closing frames. -- Keep **`sink_conditioning`** at **`exact_kv_and_rows`** on H3 (protects packed text/audio/reference rows). -- **`tau`**: higher = sparser/faster (`1.0` ~16% exact blocks, `1.3` default, `2.0` ~2.7%). -- Short sequences below `min_tokens` (default **12288**) see little gain. +- Defaults `start_percent` `0.2`, `end_percent` `1.0`. Later start (~`0.4`) and earlier end (~`0.9`) protect opening/closing frames. +- Keep `sink_conditioning` at `exact_kv_and_rows` on H3 (protects packed text/audio/reference rows). +- `tau`: higher = sparser/faster (`1.0` ~16% exact blocks, `1.3` default, `2.0` ~2.7%). +- Short sequences below `min_tokens` (default `12288`) see little gain. -FastH3 uses **`vsa`** at `keep_percent` **10**; see [FastH3 page](/tutorials/video/minimax/minimax-h3-fastvideo). +FastH3 uses `vsa` at `keep_percent` `10`; see [FastH3 page](/tutorials/video/minimax/minimax-h3-fastvideo). ### Checking whether sparse attention is active -Base H3 templates do not include the node. Add **Model Sparse Attention** between `UNETLoader` and `BasicGuider`, then turn on **`verbose`** (Advanced, off by default) to log one line per attention shape. +Base H3 templates do not include the Node. Add `Model Sparse Attention` between `UNETLoader` and `BasicGuider`, then turn on `verbose` (Advanced, off by default) to log one line per attention shape. Calls that stay dense log `dense ( tokens): ` or `dense (, , , ): `. Only the first failing condition is reported: | Logged reason | What to change | | --- | --- | -| `no compiled sol_attn kernel for this GPU` | The installed `comfy-kitchen` has no kernel for your GPU. Update it, or leave the node out on that machine. | -| ` tokens < min_tokens ` | Raise the resolution or clip length, or lower `min_tokens` (default **12288**). | +| `no compiled sol_attn kernel for this GPU` | The installed `comfy-kitchen` has no kernel for your GPU. Update it, or leave the Node out on that machine. | +| ` tokens < min_tokens ` | Raise the resolution or clip length, or lower `min_tokens` (default `12288`). | | `sigma outside the start/end window` | Widen `start_percent` and `end_percent`. | | `block in dense_blocks` | Remove that block index from `dense_blocks`. | | `no H3 layout for this call` | `vsa` only. Select `sol-attn`. | Calls that succeed log `sparse (, , , ), sinks /` or `sparse producer path: tokens, `. -Three conditions never log, even with `verbose` on: activations that are not bfloat16 on the H3 path, a `head_dim` other than **128**, and missing rope frequencies all fall back silently. +Three conditions never log, even with `verbose` on: activations that are not bfloat16 on the H3 path, a `head_dim` other than `128`, and missing rope frequencies all fall back silently. -`vsa` is bound to the FastH3 checkpoint. It reads a learned coarse branch from `to_gate_compress` layers that only those weights carry, so on any other H3 checkpoint the node prints `VSA: the model has no to_gate_compress layers; running the fine stage without the coarse branch` and runs the fine stage alone. That warning is not gated by `verbose`. +`vsa` is bound to the FastH3 checkpoint. It reads a learned coarse branch from `to_gate_compress` layers that only those weights carry, so on any other H3 checkpoint the Node prints `VSA: the model has no to_gate_compress layers; running the fine stage without the coarse branch` and runs the fine stage alone. That warning is not gated by `verbose`. ## Commercial licensing