Save Image Advanced (ICO)
The ICO builder with a slot for every icon size — and alpha masks per slot
- images_16
- masks_16
- images_24
- masks_24
- images_32
- masks_32
- images_48
- masks_48
- images_64
- masks_64
- images_128
- masks_128
- images_256
- masks_256
Save Image Advanced (ICO) is the grown-up version of the pack's plain Save Image (ICO) node. Where the simple one takes a batch and hopes the frames are legal sizes, this one gives you a dedicated image input for each of the seven standard icon sizes (16, 24, 32, 48, 64, 128, 256), each with its own optional alpha mask, plus color-depth, compression, and ordering controls. It's the node you reach for when you're building a real app icon and you care about how the 16px version differs from the 256px one - which, for a well-crafted icon, is a lot.
This is squarely a "pro" variant of a niche format, so let's be honest about the audience: if you make desktop apps, game launchers, or any product whose icon ships as a .ico, this is arguably the best tool in the ComfyUI ecosystem for the job. If you're generating icons as a hobby, the simple SaveImageICO is probably enough.
The per-size slots
Seven Images (16) through Images (256) inputs, all optional, plus matching Alpha Masks (16) … Alpha Masks (256). Wire in only the sizes you need - the README is explicit that the node only errors when no slot is connected at all. Each mask clips its slot's image before bundling, which is how you get a transparent icon: generate art, derive a mask (background removal or a manual alpha), and let the node apply it per size rather than having to prepare RGBA images yourself. Invert Alpha flips those masks if your pipeline produces inverse masks.
A practical note: the same 256px artwork will not read well as a 16px icon. The whole point of the per-size slots is that you can feed an optimized, simplified version into Images_16 and the detailed render into Images_256, then let the node package them into one file that Windows serves up appropriately everywhere.
The format controls
- Color Depth -
8bit(256-color palette, small files, dithering),16bit(RGB, no alpha), or32bit(RGBA, the default choice for anything with transparency). The frontend disables alpha widgets unless 32bit is selected, mirroring how Join Alpha only works on 32-bit BMP in the rest of the pack. - Compression -
none(classic BMP frames, maximal compatibility) orZIP(PNG-compressed frames). ZIP is smaller and fine on Windows Vista and newer; choosenoneonly if you're targeting genuinely ancient systems. - Sort by Size - reorders frames smallest-to-largest before bundling. Harmless and tidy; leave it on if you want deterministic files.
- Save Invalid as PNG - same safety net as the simple node: a frame that isn't square at its slot's size gets dumped as an
_INVALID.pnginstead of silently vanishing. - Save to Input Folder - copies the finished
.icointo your input folder so a downstream workflow (or another tool) can load it directly.
No outputs - terminal save node. Outputs to ComfyUI/output with the standard filename_prefix token support (%date:yyyy-MM-dd%, %hour%, %minute%, and the rest).
Install & gotchas
Same pack, same story: ComfyUI-Image-Process via ComfyUI Manager, or git clone https://github.com/wakaura-asaho/comfyui-image-process into custom_nodes plus pip install -r comfyui-image-process/requirements.txt. Needs the pack's usual numpy/Pillow 12.1+/scipy/opencv/scikit-image deps, no models, and modern ComfyUI (frontend ≥ 1.37, base ≥ 0.12).
The one thing that'll bite you: the masks are per-slot and the node won't resize anything. If you connect a mask whose dimensions don't match its slot's image, it's resampled rather than rejected - usually fine, but a mismatched mask is a common source of "why is my icon square-edged." And as with the simple node, don't expect resizing: Images_16 must actually be 16×16, so build your size ladder in the graph before this node.
Inputs (22)
| Name | Type | Default | Description |
|---|---|---|---|
| color_depth | COMBO | 8bit | The color depth of the images. |
| compression | COMBO | none | The compression of the images. |
| join_alpha | BOOLEAN | false | Whether to join the alpha channel of the images. |
| invert_alpha | BOOLEAN | false | Whether to invert the alpha channel of the images. |
| filename_prefix | STRING | ComfyUI | The prefix for the file to save. This may include formatting information such as %date:yyyy-MM-dd% or %Empty Latent Image.width% to include values from nodes. |
| save_to_input_folder | BOOLEAN | false | Whether to sync the image to the input folder. |
| sort_by_size | BOOLEAN | false | When enabled, the images will be sorted by size before being bundled into the ICO file. |
| save_invalid_as_png | BOOLEAN | true | When enabled, images that fail ICO validation are saved as individual PNG files with an `_INVALID` suffix. When disabled, invalid images are silently discarded. |
| images_16opt | IMAGE | The images to be bundled into a single ICO file. The input image must be 16x16 for this slot. | |
| masks_16opt | MASK | Optional alpha channel masks to clip the saved images. If provided, these masks will be applied to the corresponding images before saving. | |
| images_24opt | IMAGE | The images to be bundled into a single ICO file. The input image must be 24x24 for this slot. | |
| masks_24opt | MASK | Optional alpha channel masks to clip the saved images. If provided, these masks will be applied to the corresponding images before saving. | |
| images_32opt | IMAGE | The images to be bundled into a single ICO file. The input image must be 32x32 for this slot. | |
| masks_32opt | MASK | Optional alpha channel masks to clip the saved images. If provided, these masks will be applied to the corresponding images before saving. | |
| images_48opt | IMAGE | The images to be bundled into a single ICO file. The input image must be 48x48 for this slot. | |
| masks_48opt | MASK | Optional alpha channel masks to clip the saved images. If provided, these masks will be applied to the corresponding images before saving. | |
| images_64opt | IMAGE | The images to be bundled into a single ICO file. The input image must be 64x64 for this slot. | |
| masks_64opt | MASK | Optional alpha channel masks to clip the saved images. If provided, these masks will be applied to the corresponding images before saving. | |
| images_128opt | IMAGE | The images to be bundled into a single ICO file. The input image must be 128x128 for this slot. | |
| masks_128opt | MASK | Optional alpha channel masks to clip the saved images. If provided, these masks will be applied to the corresponding images before saving. | |
| images_256opt | IMAGE | The images to be bundled into a single ICO file. The input image must be 256x256 for this slot. | |
| masks_256opt | MASK | Optional alpha channel masks to clip the saved images. If provided, these masks will be applied to the corresponding images before saving. |
Outputs (0)
No outputs