AI2Go Save Metadata (Civitai) Advanced
When the auto-trace can't tell which prompt ran — wire the override
- images
- images
This is the same node as AI2Go Save Metadata (Civitai), with one addition that changes when you reach for it: optional override sockets. The basic version auto-traces everything from the graph. The Advanced version still does that, but lets you wire in positive, negative, steps, cfg, seed, sampler_name, and scheduler - and anything you wire wins over the trace.
That matters most for dynamic prompts. Consider the pack's AI2Go Prompt Batch: one graph, a list of prompts, and the only thing that changes between queued runs is the index. The basic node's trace handles that case by reading the batch node's current index and resolving the exact line. It works, but "exact line resolved by index at save time" is one layer of cleverness away from "just give me the string that actually ran." Wiring the Prompt Batch's positive and negative outputs straight into these sockets is the reliable path: no static-graph guessing, just the string.
The inputs that matter
Same as the basic node - images, filename_prefix (with %date:...% token support), save_workflow (off by default) - plus the overrides:
positive/negative- wire a Prompt Batch (or any text source) in here.steps,cfg,seed,sampler_name,scheduler- optional; only wired values override the trace.
Model and LoRAs are always auto-traced on both nodes. That's a deliberate design call: a variable-length LoRA chain isn't practical to socket, and it's static graph data regardless of which prompt ran - the same model and LoRAs load for every queue item, so the trace is unambiguous there. Enabled rows are picked up from stock Load LoRA and rgthree's Power Lora Loader / Lora Loader Stack, including multiple LoRAs in one node.
When you'd pick this over the basic node
Two scenarios. First, dynamic or batched prompts where you don't want to trust index-resolved tracing - wire the prompt strings and never think about it again. Second, multi-sampler graphs. Both nodes assume one KSampler; if you're running a hires-fix pass with two samplers, the trace can't tell which one to read, and it'll warn about unresolved fields in the log. Wiring the override sockets in that case is the documented fix. If you never hit either situation, save yourself a socket and use the basic node - it's the same output, fewer wires.
Install and the shared pack caveats
cd ComfyUI/custom_nodes
git clone https://github.com/Little-God1983/ComfyUI-AI2Go-Utils
Restart ComfyUI. Pillow is the only runtime dependency. As with everything in this pack: it's published for reference, issues are disabled, and it's GPL-3.0 if you want to fork and adapt it.
One note if you're chasing the "why doesn't Civitai show my prompt" problem specifically: check what's actually in the file before swapping nodes. Use the 🔎 Test detection button on either version to preview the trace output, and confirm your generation path ends at a single KSampler with a recognizable checkpoint/LoRA loader. If your workflow routes through something the tracer doesn't recognize, you'll get a named warning in the log - that's the author's way of telling you to reach for the overrides rather than guessing.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | Images to save. | |
| filename_prefix | STRING | AI2Go | Filename prefix (supports %date:...% tokens like Save Image). |
| save_workflow | BOOLEAN | false | Also embed the ComfyUI workflow/prompt chunks (off = only the Civitai `parameters` chunk). |
| positiveopt | STRING | Override positive prompt (wire the Prompt Batch 'positive' output). | |
| negativeopt | STRING | Override negative prompt (wire the Prompt Batch 'negative' output). | |
| stepsopt | INT | Override steps. | |
| cfgopt | FLOAT | Override CFG scale. | |
| seedopt | INT | Override seed. | |
| sampler_nameopt | STRING | Override sampler name. | |
| scheduleropt | STRING | Override scheduler. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |