WanVideo Block Activation Builder
Never hand-type a 40-character binary string again
- block_activations
The WanVideoActivationEditor wants its block selection as a single string of 40 characters, one 0-or-1 per transformer block. That's the API the underlying patch code reads. And it is a miserable way to pick blocks - which is exactly why this node exists. It's a tiny helper with one job: turn toggles and presets into that string so you never have to count characters in your head.
You'll use it in almost every activation workflow, and it slots in right before the editor: builder's block_activations output → editor's block_activations input. That's the whole loop.
What you actually set
- preset - the quick path.
all,none,first_half,second_half, then the three that encode the "early = low-level, late = semantic" hypothesis:early_blocks(blocks 0–9),mid_blocks(10–29),late_blocks(30–39). Plusalternating(every other) andsparse(every 4th). The author picked these as starting points, with exactly the right amount of "who knows, seemed useful" energy. - block_0 … block_39 - individual toggles, all optional, default off. Set the preset to
customand these become your manual selector. The UI is JavaScript-enhanced, so flipping the preset updates the checkboxes live and vice versa.
The only output is block_activations, a STRING, and it's meant for the editor (or the viewer, if you're debugging). If you want per-block strength rather than on/off, that's the separate WanVideoBlockStrengthBuilder + WanVideoAdvancedActivationEditor path - this node is purely the binary on/off selector.
Where presets come from (and how much to trust them)
Wan 2.1/2.2 is a 40-block DiT with cross-attention injecting text conditioning at every depth. The "early vs late" story is real in the broad sense - deep transformer layers do tend to carry more semantic content - but as the README and the pack's own WAN_BLOCK_RESEARCH.md admit, it's messy. Features are distributed and entangled; one block might handle color in one context and motion in another. So treat early_blocks as "a hypothesis about low-level features," not a law. The entire point of this pack is that you're supposed to experiment and log results.
Install & troubleshooting
Same pack, same story: it needs kijai's ComfyUI-WanVideoWrapper installed first (the WANVIDEOTEXTEMBEDS types it interacts with come from there). Install via ComfyUI Manager (search "ComfyUI-WanActivationEditor") or:
cd ComfyUI/custom_nodes
git clone https://github.com/fblissjr/ComfyUI-WanActivationEditor
cd ComfyUI-WanActivationEditor && pip install -r requirements.txt
then restart. The deps are minimal - torch, numpy, duckdb, zstandard.
The only real gotcha: if you wire this into WanVideoActivationEditor and see "No blocks activated" warnings, you've got an all-zeros string - check that your preset actually selected something and you didn't accidentally leave it on custom with no checkboxes. And if your output string looks short (like 40 characters but your eye says "that's fewer"), count again - it must be exactly 40 for the editor to parse it cleanly.
Inputs (41)
| Name | Type | Default | Description |
|---|---|---|---|
| preset | COMBO | 10 options: custom, all, none, first_half, second_half, early_blocks, +4 | |
| block_0opt | BOOLEAN | false | — |
| block_1opt | BOOLEAN | false | — |
| block_2opt | BOOLEAN | false | — |
| block_3opt | BOOLEAN | false | — |
| block_4opt | BOOLEAN | false | — |
| block_5opt | BOOLEAN | false | — |
| block_6opt | BOOLEAN | false | — |
| block_7opt | BOOLEAN | false | — |
| block_8opt | BOOLEAN | false | — |
| block_9opt | BOOLEAN | false | — |
| block_10opt | BOOLEAN | false | — |
| block_11opt | BOOLEAN | false | — |
| block_12opt | BOOLEAN | false | — |
| block_13opt | BOOLEAN | false | — |
| block_14opt | BOOLEAN | false | — |
| block_15opt | BOOLEAN | false | — |
| block_16opt | BOOLEAN | false | — |
| block_17opt | BOOLEAN | false | — |
| block_18opt | BOOLEAN | false | — |
| block_19opt | BOOLEAN | false | — |
| block_20opt | BOOLEAN | false | — |
| block_21opt | BOOLEAN | false | — |
| block_22opt | BOOLEAN | false | — |
| block_23opt | BOOLEAN | false | — |
| block_24opt | BOOLEAN | false | — |
| block_25opt | BOOLEAN | false | — |
| block_26opt | BOOLEAN | false | — |
| block_27opt | BOOLEAN | false | — |
| block_28opt | BOOLEAN | false | — |
| block_29opt | BOOLEAN | false | — |
| block_30opt | BOOLEAN | false | — |
| block_31opt | BOOLEAN | false | — |
| block_32opt | BOOLEAN | false | — |
| block_33opt | BOOLEAN | false | — |
| block_34opt | BOOLEAN | false | — |
| block_35opt | BOOLEAN | false | — |
| block_36opt | BOOLEAN | false | — |
| block_37opt | BOOLEAN | false | — |
| block_38opt | BOOLEAN | false | — |
| block_39opt | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| block_activations | STRING | — |