Nodes/Kinburg-Nodes/Generation Info
ComfyUI Node

Generation Info

Every setting that made this image, dumped onto the node

By Kinburg·Created 3 months ago·Updated 6 days ago· 1
Generation Info
  • passthrough
  • extra
  • passthrough
  • info
  • data

You've got the winning image. Now, what exactly produced it - the seed, the sampler, the shift, every widget setting upstream of the sampler? Generation Info answers that by tapping your latent and walking the graph, then dumping every upstream node's widget values where you can actually read them.

The mechanism is the clever part. It reads ComfyUI's hidden resolved PROMPT (the graph as it's actually about to run), walks upstream from the link you give it, and lists each node's literal widget values - [RandomNoise] noise_seed: …, [KSamplerSelect] sampler_name: …, and so on. The dump appears on the node (collapsed; click to expand), and it comes out two ways: a human-readable info string and a machine-readable data dump for further processing. It's an output node, so the text also lands in the UI.

The inputs that matter:

  • passthrough - your LATENT, tapped downstream of where the branches converge (e.g. the sampler's LATENT output), so the upstream walk reaches them all. This is the whole setup: one wire.
  • extra - optional GEN_INFO from a node that reports its own runtime facts, e.g. Chimera's gen_extra_info, which knows the resolved step split and sigma boundary that a graph walk can't see (a walk only reads widget literals). It merges in front of the walked settings into one dump.

The outputs:

  • passthrough - the same latent, unchanged, so the node sits inline.
  • info - the human-readable dump, ready for a text node.
  • data - the structured dump, for the Generation Info Filter node.

Why the extra input is subtle: it's an addition to a dump, not a dump on its own. If a branch skips this node, it has none of the shared settings - and the Filter's differences mode then keeps every field the other branches have, because present-vs-absent counts as a difference. That's exactly what you want when comparing branches, and it's the reason the pack wires this node upstream of a Set Accumulator (gen info) rather than into it directly.

The realistic use: you're running a parameter sweep and you want the settings recorded with each image so the comparison later shows what changed. Wire Generation Info into the latent path, pipe data into a Set Accumulator (gen info), and the pack's Image Compare can render each image's settings underneath it. Without this node you'd be reconstructing settings from memory - which, mid-sweep, is never reliable.

Install via ComfyUI Manager (search "Kinburg-Nodes") or:

cd ComfyUI/custom_nodes
git clone https://github.com/Kinburg/Kinburg-Nodes

then restart. No dependencies beyond the pack. It's a one-author personal collection with per-package docs and a 1395-check test suite. The main thing to get right is where you tap passthrough - tap too early and the walk misses branches. Downstream of convergence, as the tooltip says, is the spot.

CategoryKinburg-Nodes/util

Inputs (2)

NameTypeDefaultDescription
passthroughLATENTPass your LATENT through here — tap it downstream of where the branches converge (e.g. the sampler's LATENT output) so the upstream walk reaches them all. The node lists every upstream node's widget settings.
extraoptGEN_INFOOptional GEN_INFO from a node that reports its OWN runtime facts — e.g. Chimera's 'gen_extra_info', which knows the resolved step split, the sigma boundary and the per-stage times that a graph walk can't see (a walk only reads widget literals). It is an ADDITION, not a whole dump: it gets merged IN FRONT of the walked settings into a single one, so the branch still feeds one Set Accumulator (gen info) and stays one image. Wiring such a node straight into the accumulator instead would give that branch a dump with none of the shared settings — and the Filter's 'differences' mode then keeps every field the other branches have, since present-vs-absent counts as a difference.

Outputs (3)

NameTypeDescription
passthroughLATENT
infoSTRING
dataGEN_INFO