Nodes/ꘇ Genereti/ꘇ top.feedback
ComfyUI Node

ꘇ top.feedback

The smear trail node — and why Queue gives you nothing back

By languel·Created about a month ago·Updated 3 days ago· 1
ꘇ top.feedback
  • image
  • image
◄decay0.96►
◄translate_x0.00►
◄translate_y0.00►
◄scale1.00►
◄rotate0.00►
◄blendscreen►

Feedback is the oldest trick in generative visuals: take the frame you just drew, transform it a little, fade it a little, and draw the new frame on top. Repeat and you get trails, smears, zoom tunnels, kaleidoscopic buildup. TouchDesigner users do it constantly; ComfyUI users usually can't, because the graph is acyclic - there's no way to wire a node's output back into itself.

top.feedback solves that by keeping the history inside the node. No cyclic connection, no hack. But read the next sentence before you build on it: this is a live-mode node. In a normal Queue run it returns the input untouched, because a queued graph has no notion of "the previous frame".

How it works

The node holds a previous output frame, transforms it by translate_x, translate_y, scale and rotate, multiplies it by decay, and then blends it underneath (or over) the incoming image. Two GPU textures alternate as front/back buffers, which is why there's a loop arrow on the node - click it to wipe the history and start clean.

blend is the mode that matters most:

  • screen (default) and add accumulate light. History appears through opaque black, so this is the mode for glowing trails on a dark canvas. Screen saturates more gently than add; add blows out faster.
  • over composites using the source's alpha. If your source frames are fully opaque this covers the history every frame - which is correct and also why a full-frame opaque source over over looks like feedback isn't working.

Decay is applied per rendered frame, so trail length is a function of frame rate as well as the slider. A trail that looks right at 30fps will be noticeably longer at 120.

The inputs that matter

image in, image out. decay (0..1, default 0.96) is trail length - 0.9 is a short comet, 0.98 is a smeared mess you'll have to reset. The transform controls are what give feedback its direction: a tiny scale above 1 zooms outward forever, a small translate_x drags everything sideways, rotate spins the trail. blend picks the compositing flavour.

Output goes into top.bloom, top.convolve (blur), or straight back into the node's own upstream chain - the pack's own Texture-Lab example is drawing → feedback → blur → corner pin → composite, and the author notes that a bloomed feedback output can even drive top.displace. That's the painterly loop, and it's the best reason to own this pack.

Install

Manager → search ꘇ Genereti → install, or:

git clone https://github.com/languel/genereti.git custom_nodes/genereti
./.venv/bin/python -m pip install -r custom_nodes/genereti/requirements.txt

Restart, refresh the browser page. One frontend dependency; no model downloads. Live rendering needs WebGPU support in your browser - if the preview is static, that's the first thing to check, not the node. Find it as ꘇ top.feedback under Genereti / TOP (search genereti), and open Workflows → Genereti → ꘇ-Texture-Lab for a working chain.

Traps

Queue returns the input. This is by design and it's documented: "Queue returns current IMAGE without temporal history." If you're running a queued graph and expecting trails, you're watching the input. Feedback only exists in live mode.

A fully opaque source over over hides everything. Either use screen/add, or give your source real transparency.

You can't see the reset in the graph. History lives in the node, resets on the loop arrow, and isn't serialised into the workflow. Reopening a file doesn't restore a trail state.

Decay compounds with frame rate, as above. Tune it in the mode you'll actually run.

Pack status: super-alpha, early classroom testing. Back up your workflows.

CategoryGenereti / TOP

Inputs (7)

NameTypeDefaultDescription
imageIMAGE—
decayFLOAT0.960–1—
translate_xFLOAT0.00-4–4—
translate_yFLOAT0.00-4–4—
scaleFLOAT1.000.001–8—
rotateFLOAT0.00-360–360—
blendoptCOMBOscreen3 options: screen, add, over

Outputs (1)

NameTypeDescription
imageIMAGE—