ComfyUI Node

Output Core

Filenames and folders that tell you what made the image

By sickollie·Created 2 months ago·Updated 7 days ago· 17
Output Core
  • images
  • images
  • save_path
  • subfolder
  • filename_prefix
output_root_SickOllie_Art
subfolder_literal
subfolder_var_1clean_name
subfolder_var_2[None]
subfolder_var_3[None]
subfolder_var_4[None]
subfolder_delimiter_
filename_literal
filename_var_1raw_stem
filename_var_2model_name
filename_var_3time_hhmmss
filename_var_4[None]
filename_var_5[None]
filename_var_6[None]
filename_delimiter_
extensionpng
quality95
counter_digits5
save_prompt_jsontrue
save_workflow_jsontrue
save_civitai_parameterstrue
clean_name
raw_stem
model_name
seed0
prompt_index0
outfit_index0
scene_index0
prompt_file
outfit_file
scene_file
saved_path
generation_info
applied_loras

Stock SaveImage gives you a timestamp and a folder that fills up. SickOllie's Classic Output Core (SOOutputBuilderSave) is the save node that remembers everything else: it builds output folders and filenames from dropdown variables, auto-detects the upstream model and LoRA, hashes them, and writes the whole generation story into the file as ComfyUI metadata plus Civitai-readable parameters. After a few hundred test images, folders named _SickOllie_Art/clean_name/raw_stem_seed_time are a lot easier to mine than a wall of ComfyUI_00001.

How it works

You feed it decoded images, and it constructs a path from a root plus up to four subfolder variable slots and up to six filename variable slots, joined by delimiters (default _). The variables are where the magic is: clean_name, raw_stem, model_name, seed, prompt_index, outfit_index, scene_index, file stems, and date/time parts. So subfolder = clean_name + filename = raw_stem _ model_name _ time_hhmmss gives you _SickOllie_Art/my_lora_v2/my_lora_v2_flux1-dev_153042.png - readable at a glance.

On the metadata side it auto-discovers upstream model/LoRA resources by walking the workflow, computes file hashes (with a cache), and builds both ComfyUI prompt/workflow JSON chunks and an A1111/Civitai-style parameters block. PNG, JPG, and WebP are supported with a quality control (JPG/WebP only) and counter_digits for uniqueness. LoRA tested/use history records only after a successful save, so a failed write doesn't lie to your Library.

Inputs and outputs that matter

The required ones: images, output_root (default _SickOllie_Art), the subfolder_var_* and filename_var_* dropdowns, extension, and the three metadata toggles - save_prompt_json, save_workflow_json, save_civitai_parameters. There's also a saved_path read-only display that shows the last write. The context values (clean_name, raw_stem, model_name, seed, indexes, file names) come as inputs so you can wire them from upstream - in Classic you do the wiring; Studio's Auto Context handles it for you.

Outputs: images (passthrough), save_path, subfolder, and filename_prefix - all strings you can log or feed to a display.

Installing it

Part of the SickOllie pack:

cd ComfyUI/custom_nodes
git clone https://github.com/sickollie/SickOllie

or ComfyUI Manager → "SickOllie". Restart, Ctrl+F5.

Where people get burned

The biggest one: if you want the image to reload its workflow later, use PNG and keep prompt + workflow metadata enabled. JPG and WebP are inspection-only - the graph chunk doesn't travel. Second, Civitai matching is exact-hash: a converted, merged, or differently quantized model won't match its published version even with a similar name, so expect some Model hash gaps on non-vanilla files. And on filenames, delimiter habits bite: pick _ and stick with it, because a variable that resolves empty (say [None] in a subfolder slot) can collapse a path into something you didn't intend. If a folder looks wrong, check which slots are [None].

CategorySick Ollie/Classic

Inputs (35)

NameTypeDefaultDescription
imagesIMAGE
output_rootSTRING_SickOllie_ArtRoot output folder relative to ComfyUI output.
subfolder_literalSTRING
subfolder_var_1COMBOclean_name16 options: [None], clean_name, raw_stem, model_name, seed, prompt_index, +10
subfolder_var_2COMBO[None]16 options: [None], clean_name, raw_stem, model_name, seed, prompt_index, +10
subfolder_var_3COMBO[None]16 options: [None], clean_name, raw_stem, model_name, seed, prompt_index, +10
subfolder_var_4COMBO[None]16 options: [None], clean_name, raw_stem, model_name, seed, prompt_index, +10
subfolder_delimiterSTRING_
filename_literalSTRING
filename_var_1COMBOraw_stem16 options: [None], clean_name, raw_stem, model_name, seed, prompt_index, +10
filename_var_2COMBOmodel_name16 options: [None], clean_name, raw_stem, model_name, seed, prompt_index, +10
filename_var_3COMBOtime_hhmmss16 options: [None], clean_name, raw_stem, model_name, seed, prompt_index, +10
filename_var_4COMBO[None]16 options: [None], clean_name, raw_stem, model_name, seed, prompt_index, +10
filename_var_5COMBO[None]16 options: [None], clean_name, raw_stem, model_name, seed, prompt_index, +10
filename_var_6COMBO[None]16 options: [None], clean_name, raw_stem, model_name, seed, prompt_index, +10
filename_delimiterSTRING_
extensionCOMBOpng3 options: png, jpg, webp
qualityINT951–100Used for jpg/webp quality. PNG ignores this.
counter_digitsINT51–10
save_prompt_jsonBOOLEANtrueEmbed Comfy prompt metadata inside the saved image.
save_workflow_jsonBOOLEANtrueEmbed workflow metadata inside the saved image for reload.
save_civitai_parametersBOOLEANtrueEmbed Civitai-readable generation metadata inside the saved image.
clean_nameSTRING
raw_stemSTRING
model_nameSTRINGConnect a model name string here if desired.
seedINT0-1125899906842624–1125899906842624
prompt_indexINT0-2147483648–2147483647
outfit_indexINT0-2147483648–2147483647
scene_indexINT0-2147483648–2147483647
prompt_fileSTRING
outfit_fileSTRING
scene_fileSTRING
saved_pathSTRINGRead-only display of the most recent save path.
generation_infooptSTRING
applied_lorasoptSTRING

Outputs (4)

NameTypeDescription
imagesIMAGE
save_pathSTRING
subfolderSTRING
filename_prefixSTRING