WanVideo Direct Injector
The 'I don't care about your projection layer' injection node
- model
- text_embeds
- injection_embeds
- model
- text_embeds
By the time you reach this node you've probably met the pack's core frustration: the text_embedding projection layer normalizes embeddings by content, so two very different prompts can measure as nearly identical after projection - and everything downstream of that is a fight to force a measurable difference back in. The amplifier fights it before projection, the projection booster fights it after. This node says: screw the projection, I'll construct the context myself.
That's the pitch, and it's the most aggressive tool in the pack. Instead of relying on the normal text-encoding pipeline, WanVideoDirectInjector takes an injection_prompt (a plain string, multiline), a difference_target (10–90%, default 50%), and an injection_mode, and configures the model to force the injected context to hit that difference level in your chosen blocks. You also get the usual block_activations 40-char string, and an optional injection_embeds if you'd rather feed pre-made embeddings than a raw prompt.
The three modes
- additive - add the injection onto the main context. Effects stack; can overshoot.
- replace - swap the context outright in the activated blocks. Most aggressive; closest to "the injected prompt is the prompt."
- blend (default) - mix toward the target difference. The middle ground, and the sane starting point.
difference_target is the number you actually tune. 50% is a visible, not-too-broken starting place; push toward 90% and you're in "weird on purpose" territory. The author's framing is honest: the ladder goes amplifier → projection booster → latent encoder/injector → direct injector, and this is the final rung - the one you use when subtle isn't working.
Outputs are model and text_embeds (with the injection config attached), passed through to the sampler.
The honest caveat
Read how it's implemented and a pattern emerges that runs through this whole pack: the node writes a direct_injection config into transformer_options and a flag into the embeds, and the actual enforcement depends on the patcher honoring it during generation. The config plumbing is real and the design is coherent, but "forces specified difference level" is closer to a contract than a guarantee in the current build - the enforcement lives on the WanVideoWrapper side of the pipe. So treat it as the experimental heavy hammer it claims to be: worth trying when the ladder fails, not something to build a production pipeline on.
Install & troubleshooting
Same pack install, WanVideoWrapper first:
cd ComfyUI/custom_nodes
git clone https://github.com/kijai/ComfyUI-WanVideoWrapper # required first
git clone https://github.com/fblissjr/ComfyUI-WanActivationEditor
cd ComfyUI-WanActivationEditor && pip install -r requirements.txt
Restart ComfyUI (or ComfyUI Manager, search "ComfyUI-WanActivationEditor"). Deps: torch, numpy, duckdb, zstandard.
The one thing to check first when results look off: your block_activations string. The node quietly passes through - no injection at all - if no blocks are set (it logs "No blocks activated" in the console, which is easy to miss). If you're seeing nothing and the blocks are set, verify you're using recent WanVideoWrapper, then try blend with a lower target before you go full replace.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| model | WANVIDEOMODEL | — | |
| text_embeds | WANVIDEOTEXTEMBEDS | — | |
| injection_prompt | STRING | — | |
| difference_target | FLOAT | 5010–90 | — |
| injection_mode | COMBO | blend | 3 options: additive, replace, blend |
| block_activations | STRING | 0000000000000000000000000000000000000000 | — |
| injection_embedsopt | WANVIDEOTEXTEMBEDS | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| model | WANVIDEOMODEL | — |
| text_embeds | WANVIDEOTEXTEMBEDS | — |