Auto_Metadata_Ksampler_Stamp by Steve Lasmin
Your seed, steps, and full prompt, stamped onto the image — no more digging through workflow JSON
- image
- stamped_image
ComfyUI already embeds your whole workflow JSON into the PNG - so why would you want text burned onto the image itself? Because the embedded metadata is invisible until you drag the file back in or open an EXIF viewer. If you want the seed, steps, CFG, and the actual positive/negative prompts readable at a glance - on a screenshot, in a Discord upload, on a Civitai post - AutoMetadataKSamplerStamp just paints them onto the bottom of the image for you. It's a tiny single-node utility with zero configuration, and it does exactly one thing well.
What it actually is
This is a small, self-contained pack (one node, one Python file, no real dependencies) from an author going by Steve Lasmin / Eklipsis, who publishes via Boosty. The node sits between your VAE Decode and your Save Image. Feed it the image tensor, and it inspects the workflow that's currently running, pulls out every KSampler's settings and prompts, and stamps them as clean white text on a black bar added to the bottom of the frame. Multi-sampler workflows get one labeled section per sampler, so an img2img pass, a refiner, or a tiled sampler all show up separately with their own settings. That's a genuinely nice touch - the common alternative (stringing %KSampler.seed% placeholders into a filename) only gets you one sampler's values, and it buries them in a filename instead of putting them on the image where the viewer's eye lands.
How it works
The trick is the hidden PROMPT input. ComfyUI automatically hands every node the full workflow JSON as a hidden input at execution time - the node doesn't call any API, needs no key, and never touches the PNG's embedded metadata. It scans that JSON for nodes whose class name is a known sampler (KSampler, KSamplerAdvanced, SamplerCustom, the Efficient/SDXL/Tiled variants, and anything else starting with KSampler), validates each one actually has steps and cfg inputs, then traces the positive and negative connections back to the CLIPTextEncode they come from. It even handles the SDXL dual-encoder case (text_g/text_l) and prints G: ... | L: ... when the two prompts differ. Then it word-wraps everything to your image width, sizes the font relative to the image (roughly width/60, min 12px), and renders it onto a black bar appended at the bottom.
One subtlety worth knowing: it processes every image in the batch and stamps each one separately, so you get a matching bar on all of them rather than a mangled composite. The bar is burned in, so your output image is taller than your input - plan around that if you're feeding the result into an upscaler.
The inputs and outputs that matter
There's exactly one input you touch:
- image (IMAGE) - wire in your VAE Decode or preview output. Everything else is automatic: the
PROMPTandunique_idinputs are hidden and supplied by ComfyUI.
The single output, stamped_image (IMAGE), goes into a Save Image node or straight to a preview. That's the whole API.
Installing it
ComfyUI Manager should find it if you search "Auto Metadata Ksampler Stamp". Otherwise, the README's recommended path:
cd ComfyUI/custom_nodes
git clone https://github.com/Eklipsis/auto_metadata_ksampler_stamp_by_steve_lasmin.git
Then restart ComfyUI. No model downloads, no weights, no heavy dependencies - the only requirement is Pillow, which ships with ComfyUI anyway, so it's about as painless as custom nodes get.
Where people get caught
The big one: this stamps what's in the workflow that's currently running, not the history of whatever image you load into it. It's a live rendering aid, not a retroactive annotator - hook it up before you generate.
Second, the prompt tracing only goes one step. If your positive conditioning passes through a ConditioningCombine, ConditioningConcat, or a refiner's conditioning swap before reaching the sampler, the node can't see the raw text and prints Conditioning mix from: ConditioningCombine instead of your actual prompt. Same if you use a sampler class that doesn't start with KSampler and isn't in its hardcoded list - version 1.0.1 deliberately narrowed detection to avoid false positives, so oddball custom samplers just get skipped.
Third, there's no per-character styling or opacity control - white on black, fixed layout, done. And the license is restrictive: free to use commercially, but you can't redistribute modified versions without the author's written approval. Fine for personal use; just don't bundle a tweaked copy into your own pack.
If the bar feels huge on a small image, that's the font floor kicking in (12px minimum) - it's the price of keeping long negative prompts legible.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| stamped_image | IMAGE | — |