Output Core
The SickOllie save node that decodes and names your results for you
- images
- samples
- vae
- images
Studio Output Core (SOOutputBuilderSaveStudio) is Classic Output Core with the wiring removed. Same variable-driven path building, same ComfyUI plus Civitai metadata, same PNG/JPG/WebP choice - but where Classic demands you feed it clean_name, seed, and every index by hand, Studio reads that context from the workflow graph itself. It'll even decode latents for you. In the Studio flow it's the single terminal node: Generation Core's samples + vae go in, organized, metadata-rich files come out.
How it works
The variable system is the same as Classic - output_root plus subfolder_var_1..4 and filename_var_1..6 slots with literal strings and delimiters - but the variable menu is bigger: it adds main_folder and main_trigger, plus date_mmdd, time_hhmm, and a full datetime_yyyymmdd_hhmmss for people who like timestamps that sort themselves. Defaults give you a sensible output_root placeholder, clean_name in the subfolder, and raw_stem_model_name_time_hhmmss in the filename.
The headline difference is Auto Context: it reads recognized upstream Studio state from the workflow, so the model name, LoRA clean name, resolved prompt, seed, and indexes are discovered rather than wired. That's why the Studio graph gets away with no metadata bundle - Output Core reaches back up the graph and pulls the context itself. It can also accept either a decoded images (which takes priority) or samples + vae to decode internally, so you can hang it straight off Generation Core without a VAE Decode node.
Metadata handling is identical to Classic: save_prompt_json, save_workflow_json, and save_civitai_parameters toggles, with the same PNG-for-round-trip rule and the same Civitai exact-hash caveat. The index inputs are string-backed in Studio ("0" rather than 0), which is a small but thoughtful detail - blank dashboard values can't fail prompt validation.
Inputs and outputs that matter
Set output_root to your project name, pick subfolder/filename variables, choose extension (png/jpg/webp), quality for JPG/WebP, and flip the three metadata toggles. Optional: images or samples + vae, plus generation_info and applied_loras overrides. Output: images passthrough - Studio deliberately exposes just the one output, since save-path reporting lives in the dashboard.
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
Same metadata discipline as Classic: save PNG with prompt + workflow metadata on, or the reload ability is gone. The Auto Context makes it easy to stop thinking about wiring, which is the risk - if you rename or bypass a Studio node upstream, context comes from what's actually connected, so an image saved from a half-built graph may carry less than you'd expect. And remember the decode behavior: images wins when both are connected, so if you're feeding a decoded stream and the output looks different from the latent path, that's the priority rule working as documented.
Inputs (37)
| Name | Type | Default | Description |
|---|---|---|---|
| output_root | STRING | Project Folder Name | Root output folder relative to ComfyUI output. |
| subfolder_literal | STRING | — | |
| subfolder_var_1 | COMBO | clean_name | 18 options: [None], clean_name, raw_stem, model_name, main_folder, main_trigger, +12 |
| subfolder_var_2 | COMBO | [None] | 18 options: [None], clean_name, raw_stem, model_name, main_folder, main_trigger, +12 |
| subfolder_var_3 | COMBO | [None] | 18 options: [None], clean_name, raw_stem, model_name, main_folder, main_trigger, +12 |
| subfolder_var_4 | COMBO | [None] | 18 options: [None], clean_name, raw_stem, model_name, main_folder, main_trigger, +12 |
| subfolder_delimiter | STRING | _ | — |
| filename_literal | STRING | — | |
| filename_var_1 | COMBO | raw_stem | 18 options: [None], clean_name, raw_stem, model_name, main_folder, main_trigger, +12 |
| filename_var_2 | COMBO | model_name | 18 options: [None], clean_name, raw_stem, model_name, main_folder, main_trigger, +12 |
| filename_var_3 | COMBO | time_hhmmss | 18 options: [None], clean_name, raw_stem, model_name, main_folder, main_trigger, +12 |
| filename_var_4 | COMBO | [None] | 18 options: [None], clean_name, raw_stem, model_name, main_folder, main_trigger, +12 |
| filename_var_5 | COMBO | [None] | 18 options: [None], clean_name, raw_stem, model_name, main_folder, main_trigger, +12 |
| filename_var_6 | COMBO | [None] | 18 options: [None], clean_name, raw_stem, model_name, main_folder, main_trigger, +12 |
| filename_delimiter | STRING | _ | — |
| extension | COMBO | png | 3 options: png, jpg, webp |
| quality | INT | 951–100 | Used for jpg/webp quality. PNG ignores this. |
| counter_digits | INT | 51–10 | — |
| save_prompt_json | BOOLEAN | true | Embed Comfy prompt metadata inside the saved image. |
| save_workflow_json | BOOLEAN | true | Embed workflow metadata inside the saved image for reload. |
| save_civitai_parameters | BOOLEAN | true | Embed Civitai-readable generation metadata inside the saved image. |
| clean_name | STRING | — | |
| raw_stem | STRING | — | |
| model_name | STRING | Connect a model name string here if desired. | |
| seed | INT | 0-1125899906842624–1125899906842624 | — |
| prompt_index | STRING | 0 | Resolved prompt index override. String-backed so blank legacy/dashboard values cannot fail prompt validation. |
| outfit_index | STRING | 0 | Resolved outfit index override. String-backed so blank legacy/dashboard values cannot fail prompt validation. |
| scene_index | STRING | 0 | Resolved scene index override. String-backed so blank legacy/dashboard values cannot fail prompt validation. |
| prompt_file | STRING | — | |
| outfit_file | STRING | — | |
| scene_file | STRING | — | |
| saved_path | STRING | Read-only display of the most recent save path. | |
| imagesopt | IMAGE | Decoded IMAGE input. Takes priority when connected. | |
| generation_infoopt | STRING | — | |
| applied_lorasopt | STRING | — | |
| samplesopt | LATENT | Optional latent samples. If images is not connected, Output Core decodes these with the VAE input before saving. | |
| vaeopt | VAE | VAE used to decode samples when saving directly from latents. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |