MetaHub Save Image Advanced
The full node, for when auto-detect isn't enough
- images
Here's a spoiler: this node is the real one. The simple MetaHub Save Image node you'll usually see in workflows is a thin wrapper that delegates straight to MetaHubSaveNode internally - the Advanced version just exposes every override it normally hides behind the scenes. Same auto-extraction of seed, steps, prompts, model hashes, and LoRAs, same dual metadata chunks (A1111 parameters text plus the full Image MetaHub JSON). The difference is sockets: when the auto-detector can't parse something, the Advanced node lets you tell it the answer by hand.
The author's own guidance is that you shouldn't reach for this first. Default to the simple node; open the Advanced one when the console says a field wasn't detected, when you're benchmarking, or when you're maintaining an old workflow that already uses it.
What the override sockets are for
Every generation parameter is an optional input that defaults to null - leave it unconnected and the node auto-detects from the graph. Connect one and it replaces what was detected:
seed,steps,cfg,sampler_name,scheduler,denoise- the sampler paramsmodel_name,vae_name- override the detected filenamespositive,negative- override the prompts
Because they use forceInput, ComfyUI renders them as connection inputs rather than text fields, so they're invisible until you wire something in. That's deliberate - it keeps the node looking clean while letting you patch exactly the gaps in auto-detection. The classic case: a custom-node-heavy workflow that only gets partial metadata, where you connect just the missing positive or seed.
Two fields genuinely useful beyond patching:
quality(1–100, default 95) - JPEG/WebP quality.generation_time_override- feed it theelapsed_timeoutput from the MetaHub Timer node for real workflow timing in the analytics chunk. Also worth knowing:vram_peak_mbandgpu_device_overrideexist for custom benchmarking, andfilename_prefixis deprecated in favor offilename_pattern.
Like the simple node, it's an output node - no outputs, just save and terminate.
Installing
Same pack, same steps. ComfyUI Manager, search ImageMetaHub Save, install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/LuqP2/ImageMetaHub-ComfyUI-Save.git
It's published on the Comfy Registry as imagemetahub-comfyui-save, so comfy node install imagemetahub-comfyui-save works too. No model downloads, and despite the README mentioning a requirements.txt, the pack ships zero Python dependencies - it runs on PIL, numpy, and torch that ComfyUI already has.
Troubleshooting
The same failure modes as its simpler sibling apply: "Model hash is 0000000000" means the checkpoint file isn't in a searched path (set COMFYUI_CHECKPOINT_PATH or move it into ComfyUI/models/checkpoints/), and LoRA detection only understands standard LoraLoader nodes. If you're connecting override sockets and the console still flags a field, double-check the value you're feeding matches what the extractor expects - a typo'd sampler_name gets written into your metadata and quietly lives there forever.
The one trap specific to this node is overkill: it's easy to think you need the Advanced version because the simple one exists, but the extra sockets are for edge cases, not daily driving. Start simple, escalate when the console tells you to.
Inputs (24)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| filename_patternopt | STRING | ComfyUI_%counter% | Filename pattern with placeholders |
| file_formatopt | COMBO | PNG | File format |
| qualityopt | INT | 951–100 | JPEG/WebP quality |
| output_pathopt | STRING | Custom output directory (empty = ComfyUI default) | |
| user_tagsopt | STRING | Optional Image MetaHub tags (comma-separated) | |
| notesopt | STRING | Optional Image MetaHub notes | |
| project_nameopt | STRING | Optional Image MetaHub project name | |
| seedopt | INT | Override seed | |
| stepsopt | INT | Override steps | |
| cfgopt | FLOAT | Override CFG scale | |
| sampler_nameopt | STRING | Override sampler name | |
| scheduleropt | STRING | Override scheduler | |
| model_nameopt | STRING | Override model filename | |
| positiveopt | STRING | Override positive prompt | |
| negativeopt | STRING | Override negative prompt | |
| denoiseopt | FLOAT | Override denoise strength | |
| vae_nameopt | STRING | Override VAE filename | |
| generation_timeopt | FLOAT | 0.00 | Generation time in seconds |
| filename_prefixopt | STRING | ComfyUI | Deprecated: use filename_pattern |
| upscale_modelopt | STRING | Upscale model name | |
| vram_peak_mbopt | FLOAT | Override VRAM peak (MB) | |
| gpu_device_overrideopt | STRING | Override GPU device name | |
| generation_time_overrideopt | FLOAT | Timestamp from MetaHub Timer Node (elapsed time calculated automatically) |
Outputs (0)
No outputs