TemporalSplice
Splice across frames — recolor line art, kill AnimateDiff shimmer
- lower
- upper
- LATENT
TemporalSplice takes the same splice idea as its spatial siblings and rotates it ninety degrees - it splits latents by frequency over time instead of frequency over space. Things that don't move between frames are "low temporal frequency"; things that do are "high temporal frequency." So the node can pass the static, stable detail of one latent while taking the moving, changing detail from another. It was built to experiment with coloring line-art animations - keep the linework rock-solid, only let the color change - and it turns out to be handy for a second job: scrubbing the boiling, shimmering artifacts AnimateDiff loves to inject into the static parts of a rotoscoped shot.
How it works
The mechanism is a Gaussian blur, but applied along the frame axis of your latent batch rather than across the image. A batch of latents in ComfyUI is shape B, C, H, W - for AnimateDiff-style work, B is your frames. The node builds a 1D Gaussian kernel over time, blurs each channel across frames with circular padding (so it wraps cleanly on loops), and splits each latent into blur(frames) - the stuff that doesn't move - and frames − blur(frames) - the stuff that does. Then it recombines, taking static content from lower and moving content from upper, exactly like SpliceLatents takes low-frequency from one and texture from the other.
The sigma FLOAT (default 1.0) is the standard deviation of that temporal Gaussian - how many frames count as "static." Small sigma keeps almost everything as motion detail; large sigma treats more of the shot as stable. wetness (FLOAT, 0–1, default 1) blends between the spliced result and plain addition. Both lower and upper latents are optional, but at least one must be connected, and the other becomes zeros if left dangling.
Wiring it in
lower(LATENT, optional) - the latent whose non-moving detail you keep.upper(LATENT, optional) - the latent whose moving detail you keep.sigma,wetness- the two tuning knobs.- Output: a single LATENT.
For the line-art coloring use case: keep the line-art pass as lower (its linework is static across frames, so it dominates the "doesn't move" band), feed the color pass as upper, and the splice hands you colored line art where the lines never wobble. For rotoscope cleanup, pass the artifact-y pass through and it pulls the stable structure out of a cleaner frame set.
Installing it
It's in the SpliceTools pack, which is refreshingly bare: no requirements.txt, no model downloads - pure torch plus ComfyUI's own helpers. Install via ComfyUI Manager by searching SpliceTools, or:
cd ComfyUI/custom_nodes
git clone https://github.com/AustinMroz/ComfyUI-SpliceTools
Restart ComfyUI and the node appears under latent → advanced.
Where it bites
TemporalSplice only has something to work with if you feed it a sequence of frames. A single-frame latent has no temporal signal - the code just passes it through, and single frames or very short batches get repeated to fill the kernel. So wire it to a batch of frames (AnimateDiff output, or a multi-frame latent batch), not one latent. Also, like SpliceLatents, the output is bare samples - any noise_mask on the inputs doesn't survive.
One honest note on scope: the README frames this as experimental tooling for animation experiments, not a finished video filter. If you're on modern video models (Wan, LTX), you're likely not on AnimateDiff latents anymore and this won't apply. But if you're in the SD 1.5 + AnimateDiff corner - and there's still a stubborn crowd there for exactly this sort of control - TemporalSplice is the closest thing to a purpose-built fix for the temporal artifacts you've been patching around.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| sigma | FLOAT | 1.00 | — |
| wetness | FLOAT | 1.00–1 | — |
| loweropt | LATENT | — | |
| upperopt | LATENT | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |