Hunyuan Video Block Lora Select
Dial in a Hunyuan LoRA block by block
- blocks
HunyuanVideo's transformer is 60 blocks deep - 20 "double stream" blocks where video and text are processed jointly, then 40 "single stream" blocks after they merge - and, same story as Flux, a LoRA's effect isn't evenly spread across them. Community trial-and-error settled on a rough rule of thumb early on: earlier double-stream blocks lean toward motion, later ones toward character and identity. Whether that holds for any given LoRA is genuinely a "test it yourself" situation, but the underlying capability - turning specific blocks off rather than just lowering overall LoRA strength - is real and is exactly what this node does.
Every block starts at 0, meaning off. That default catches people out constantly: drop this node into a graph, forget to actually enable any blocks, and your LoRA appears to do nothing.
How it works
Same mechanism as its Flux sibling: one float slider per block acting as an alpha multiplier for that block's LoRA contribution. Set a block to 0 to remove the LoRA's effect there entirely, 1 for normal strength, or higher to push it further than the LoRA was trained at. The full selection across all 60 blocks packs into one output that a compatible LoRA loader elsewhere in the graph reads to know what to actually apply.
The inputs and outputs that matter
This node is 60 near-identical widgets rather than a handful of meaningful ones - double_blocks.0. through double_blocks.19. (20 total), then single_blocks.0. through single_blocks.39. (40 total), each 0–1000 in steps of 0.01. The practical workflow is never "tune all 60" - it's zero out the ones you suspect are causing an unwanted effect, or, if you're chasing the motion-versus-identity split people talk about, sweep the early double-stream blocks against the later ones and compare at a fixed seed.
The single output, blocks (SELECTEDDITBLOCKS), feeds into whatever HunyuanVideo LoRA loader in your graph is built to consume this selection.
How to install it
Via ComfyUI Manager: search "KJNodes for ComfyUI," install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/kijai/ComfyUI-KJNodes
pip install -r ComfyUI-KJNodes/requirements.txt
then restart ComfyUI.
Common issues & troubleshooting
The LoRA seems to have zero effect. Check every block isn't still sitting at its default of 0 - this is the single most common mistake with this node, and it's silent, no error, just a LoRA that quietly does nothing.
Guides referencing specific block ranges seem out of date or don't apply. Block behavior isn't guaranteed stable across different LoRAs, checkpoints, or pipeline changes over time - a range that worked for one LoRA's motion-versus-character split is a starting point to test, not a rule that transfers automatically. If an older guide's block numbers don't reproduce what it describes, treat it as a hypothesis and re-test rather than assume the guide (or the node) is broken.
No easy way to save the result as a portable LoRA file. Like the Flux version, this is a live, in-graph selector - it adjusts what gets applied during sampling, it doesn't bake a new .safetensors file to disk. If you need a merged, exportable LoRA, that's a separate offline tool's job.
Note: comfyicu doesn't currently have HunyuanVideo in its curated knowledge base the way Wan and LTX are covered - if a block-behavior claim above doesn't match what you observe, that's the gap talking, not a settled fact.
Inputs (60)
| Name | Type | Default | Description |
|---|---|---|---|
| double_blocks.0. | FLOAT | 0.000–1000 | — |
| double_blocks.1. | FLOAT | 0.000–1000 | — |
| double_blocks.2. | FLOAT | 0.000–1000 | — |
| double_blocks.3. | FLOAT | 0.000–1000 | — |
| double_blocks.4. | FLOAT | 0.000–1000 | — |
| double_blocks.5. | FLOAT | 0.000–1000 | — |
| double_blocks.6. | FLOAT | 0.000–1000 | — |
| double_blocks.7. | FLOAT | 0.000–1000 | — |
| double_blocks.8. | FLOAT | 0.000–1000 | — |
| double_blocks.9. | FLOAT | 0.000–1000 | — |
| double_blocks.10. | FLOAT | 0.000–1000 | — |
| double_blocks.11. | FLOAT | 0.000–1000 | — |
| double_blocks.12. | FLOAT | 0.000–1000 | — |
| double_blocks.13. | FLOAT | 0.000–1000 | — |
| double_blocks.14. | FLOAT | 0.000–1000 | — |
| double_blocks.15. | FLOAT | 0.000–1000 | — |
| double_blocks.16. | FLOAT | 0.000–1000 | — |
| double_blocks.17. | FLOAT | 0.000–1000 | — |
| double_blocks.18. | FLOAT | 0.000–1000 | — |
| double_blocks.19. | FLOAT | 0.000–1000 | — |
| single_blocks.0. | FLOAT | 0.000–1000 | — |
| single_blocks.1. | FLOAT | 0.000–1000 | — |
| single_blocks.2. | FLOAT | 0.000–1000 | — |
| single_blocks.3. | FLOAT | 0.000–1000 | — |
| single_blocks.4. | FLOAT | 0.000–1000 | — |
| single_blocks.5. | FLOAT | 0.000–1000 | — |
| single_blocks.6. | FLOAT | 0.000–1000 | — |
| single_blocks.7. | FLOAT | 0.000–1000 | — |
| single_blocks.8. | FLOAT | 0.000–1000 | — |
| single_blocks.9. | FLOAT | 0.000–1000 | — |
| single_blocks.10. | FLOAT | 0.000–1000 | — |
| single_blocks.11. | FLOAT | 0.000–1000 | — |
| single_blocks.12. | FLOAT | 0.000–1000 | — |
| single_blocks.13. | FLOAT | 0.000–1000 | — |
| single_blocks.14. | FLOAT | 0.000–1000 | — |
| single_blocks.15. | FLOAT | 0.000–1000 | — |
| single_blocks.16. | FLOAT | 0.000–1000 | — |
| single_blocks.17. | FLOAT | 0.000–1000 | — |
| single_blocks.18. | FLOAT | 0.000–1000 | — |
| single_blocks.19. | FLOAT | 0.000–1000 | — |
| single_blocks.20. | FLOAT | 0.000–1000 | — |
| single_blocks.21. | FLOAT | 0.000–1000 | — |
| single_blocks.22. | FLOAT | 0.000–1000 | — |
| single_blocks.23. | FLOAT | 0.000–1000 | — |
| single_blocks.24. | FLOAT | 0.000–1000 | — |
| single_blocks.25. | FLOAT | 0.000–1000 | — |
| single_blocks.26. | FLOAT | 0.000–1000 | — |
| single_blocks.27. | FLOAT | 0.000–1000 | — |
| single_blocks.28. | FLOAT | 0.000–1000 | — |
| single_blocks.29. | FLOAT | 0.000–1000 | — |
| single_blocks.30. | FLOAT | 0.000–1000 | — |
| single_blocks.31. | FLOAT | 0.000–1000 | — |
| single_blocks.32. | FLOAT | 0.000–1000 | — |
| single_blocks.33. | FLOAT | 0.000–1000 | — |
| single_blocks.34. | FLOAT | 0.000–1000 | — |
| single_blocks.35. | FLOAT | 0.000–1000 | — |
| single_blocks.36. | FLOAT | 0.000–1000 | — |
| single_blocks.37. | FLOAT | 0.000–1000 | — |
| single_blocks.38. | FLOAT | 0.000–1000 | — |
| single_blocks.39. | FLOAT | 0.000–1000 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| blocks | SELECTEDDITBLOCKS | The modified diffusion model. |