Nodes/ꘇ Genereti/ꘇ top.feedbackref
ComfyUI Node

ꘇ top.feedbackref

Reach back one frame from anywhere in the graph

By languel·Created about a month ago·Updated 3 days ago· 1
ꘇ top.feedbackref
  • image
  • image
◄reference►
◄width512►
◄height512►

ComfyUI graphs can't loop. A wire goes one way, so the second you want a pixel that depends on the output of the node chain you're currently building, you're stuck. top.feedbackref is the escape hatch: it reads a live node or output, including a composite that comes after it in the graph, and hands you its previous frame. It's how you build a real feedback system - as opposed to top.feedback, which keeps its own history internal - without a cyclic connection.

Everything you know about dependency cycles is why this node has to exist. The KB's node-plumbing doc makes the same point from the other direction: ComfyUI's execution is a backward walk from output nodes, and anything that would need its own result is simply not expressible. A one-frame delay is the standard fix, and it's what this implements.

How it works

You point reference at a live IMAGE node or output. It accepts a #nodeID, an @persistentRef, or a unique node title - type the node's name in, or pick from the list. The field is a plain string widget, and the tooltip spells out the rest: convert the field to a STRING input and you can wire it instead of typing. It samples the previous frame and is explicitly not a queued IMAGE connection.

The pattern the author recommends, and the one that works: feed this node through your processing into a composite with the fresh source, then point the reference at that composite. You get a loop, one frame deep, with no cycle in the graph.

Optional image seeds the first frame from a queued IMAGE - wire a constant or a loaded picture in and your loop starts from something instead of from nothing. width and height size the empty seed when there's no seeding image, so an un-seeded loop begins as a transparent frame of that size.

The inputs that matter

reference is the node. image (optional) is the seed. width/height are the fallback dimensions. One image output.

This is the node to reach for when top.feedback's self-contained history isn't enough - when the thing you want to feed back is a composite that includes the feedback, a bloomed version of it, or a corner-pinned version of it. At that point internal state can't help you and you need a reference.

Install

ComfyUI 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 and refresh. Requirements are one frontend pin - no models, no services - and live reference sampling needs a WebGPU-capable browser. Find it as ꘇ top.feedbackref under Genereti / TOP; search genereti since the leading glyph sorts badly.

Traps

In Queue it does nothing clever. Documented behaviour: "Queue returns the seed or transparent IMAGE, never follows browser references." If you queue a workflow with a feedbackref in it, that branch is empty or seeded - no history, no loop. Live mode only.

References break on rename. Picking by node title means renaming or recreating that node quietly changes what you're reading. Prefer #nodeID for workflows you'll save and re-open.

One frame is one frame. There's no longer history here; if you need a long trail with a specific blend, top.feedback (or a chain of these) is more direct.

Feedback + opaque sources still behave the way feedback does - a full-frame opaque image composited with over erases history. Same physics, different node.

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

CategoryGenereti / TOP

Inputs (4)

NameTypeDefaultDescription
referenceSTRINGPick a live IMAGE node/output, or type #nodeID, @persistentRef, or a unique node title. Convert this field to a STRING input for a wired reference. Samples the previous frame; this is not a queued IMAGE connection.
widthINT5121–4096—
heightINT5121–4096—
imageoptIMAGE—

Outputs (1)

NameTypeDescription
imageIMAGE—