Mememage Workflow Fields
Stop re-typing your settings — read them off the graph
- fields
The most annoying part of writing provenance metadata by hand is that you're copying down values that already exist. Your seed, your steps, your sampler, your model - they're all sitting in the graph right now, typed into KSampler widgets. Mememage Workflow Fields does the re-typing for you: it reads the generation parameters straight out of the workflow and packs them into a clean generation field on the record. Think of it as EXIF for your render, pulled from the graph instead of the pixels.
How it finds them
A latent tensor carries no metadata; the settings live in the graph, and this node reads the graph directly. Rather than hunting for specific node types - which multiply endlessly (KSampler, Flux custom-sampling stacks, whatever ships next week) - it harvests a fixed vocabulary of input names (seed/noise_seed, steps, cfg/guidance, sampler_name, …) onto standard tags. Same mapping whether you use KSampler or a Flux custom-sampling rig. It follows wired values back to their literal (a seed driven from a primitive is captured, not blanked), traces the conditioning graph for the prompts, and - the part I appreciate - never guesses. A param it can't confidently read is simply absent, not filled with junk.
The toggles
Every parameter has its own on/off switch, all defaulting to on: model, positive_prompt, negative_prompt, seed, steps, cfg, guidance, sampler, scheduler, denoise, loras. Turn off what you don't want emitted; an off param is never produced. Two things worth knowing:
cfgandguidanceare separate tags on purpose. A Flux guidance scale is a distilled guidance, not interchangeable with CFG. If you don't want it, flip it off - it won't ride along as a bogus cfg.- It only emits the params you toggle; a
baseinput merges upstream fields first.
The output is a single fields object (with the generation data nested under a generation key). Wire it into Mememage Encode's fields socket, or into a Mememage Fields gatherer to merge your own hand-entered fields on top.
One important boundary
This is the curated, readable summary. Encode's embed_workflow toggle still stores the entire graph as comfy_prompt regardless - the full recipe rides in the verifiable record. These are two different things: this node gives you clean, queryable fields; comfy_prompt gives you the whole graph for exact reproduction. Both are worth having, and they don't conflict.
Installing it
Same pack as everything here. ComfyUI Manager → search "Mememage" → Install → restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/sememtac/mememage-comfy
<ComfyUI-python> -m pip install mememage
Restart; it's under Mememage/Fields. No models or keys.
Common issues
- A param you toggled on is missing from the output. By design, not a bug - it only emits what it can confidently read. An exotic or custom sampler stack can leave some values unreadable. The README is upfront that this is best-effort over the standard SD/SDXL nodes; a custom sampler may leave fields blank even when on.
- It's never cached, so it always runs. The node deliberately re-reads the graph every execution (the
IS_CHANGEDNaN trick from the plumbing layer), because a randomized seed or edited prompt would otherwise go stale. If you feel the graph re-running more than you expect, this node is likely why - and that's correct behavior, not a leak. - Confused by cfg vs guidance? You're not alone. Flux users should treat
guidanceas its own thing; SD1.5/SDXL users can leave it on harmlessly or off.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| baseopt | STRING | Optional upstream fields to merge first. | |
| modelopt | BOOLEAN | true | — |
| positive_promptopt | BOOLEAN | true | — |
| negative_promptopt | BOOLEAN | true | — |
| seedopt | BOOLEAN | true | — |
| stepsopt | BOOLEAN | true | — |
| cfgopt | BOOLEAN | true | — |
| guidanceopt | BOOLEAN | true | Flux's guidance scale — its own tag (a distilled guidance, NOT interchangeable with cfg). Off if you don't want it. |
| sampleropt | BOOLEAN | true | — |
| scheduleropt | BOOLEAN | true | — |
| denoiseopt | BOOLEAN | true | — |
| lorasopt | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| fields | STRING | — |