Save Image Advanced (BMP)
BMP, but with 32-bit alpha and DPI — for the rare places that actually need it
- images
- masks
Save Image Advanced (BMP) is the answer to the one legitimate complaint about plain BMP: it can't hold transparency. The simple Save Image (BMP) flattens everything to 24-bit RGB, which is fine until you're handing a transparent asset to software that only accepts BMP. This advanced variant adds a bit depth toggle - 24bit or 32bit - and in 32-bit mode it'll clip an alpha mask into the file. Suddenly the "ancient format" supports your cut-out transparent sprite, which is the scenario most people actually run into: game engines and legacy tools that read BMP but not PNG, and need RGBA.
What's different from the simple node
- Bit Depth -
24bit(RGB, no alpha) or32bit(RGBA). This is the headline control. In 32-bit mode, the frontend enables the alpha widgets; in 24-bit it disables them, because there's nowhere for the alpha to go. - Join Alpha Channel - with 32-bit selected and a mask connected, the image gets its alpha from the mask. The tooltip is explicit that this only works on 32-bit depth, so don't set 24-bit and wonder why nothing happened.
- Invert Alpha - flips the mask before clipping, for pipelines that produce inverse masks.
- DPI (1–600, default 300) - BMP carries DPI metadata, and this is one of the few formats where a print pipeline actually cares.
- Save to Input Folder - mirrors the file into your input folder for reuse.
Everything else is the standard terminal-save shape: Images input, optional Masks, Filename Prefix with the pack's token support (%date:yyyy-MM-dd%, %hour%, %minute%, %width%, %height%), no outputs.
How it works, briefly
Pillow writes BMP with an (x_dpi, y_dpi) hint and the node picks the mode from bit depth: RGB for 24-bit, RGBA for 32-bit. When joining alpha, the mask is resampled to the image size (LANCZOS) and dropped into the alpha channel before saving. That's the whole mechanism - the value isn't in clever code, it's in the format plumbing being handled for you.
Be realistic about BMP
Uncompressed (or lightly compressed) means big files. A 32-bit BMP at 1024×1024 is roughly 4 MB before any of its format quirks. And "32-bit BMP" support is not universal even among tools that read BMP fine - some readers silently ignore the alpha. If your target software can take PNG or TIFF, use those and skip this node; the advanced TIFF and AVIF savers in this pack are better homes for transparency and DPI. BMP's real constituency is the stubborn legacy pipeline, and for that this node is the right amount of effort.
Install
Ships in ComfyUI-Image-Process: ComfyUI Manager → search "ComfyUI-Image-Process", or git clone https://github.com/wakaura-asaho/comfyui-image-process into custom_nodes plus pip install -r comfyui-image-process/requirements.txt, then restart. Standard pack deps (numpy, Pillow 12.1+, scipy, opencv, scikit-image), no model downloads, modern ComfyUI required (frontend ≥ 1.37, base ≥ 0.12).
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | The images to be saved. | |
| bit_depth | COMBO | 24bit | The bit depth to use when saving images as BMP. 32bit supports alpha channel. |
| join_alpha | BOOLEAN | false | Clip the image with the provided mask. Please note this only works on 32bit bit depth. |
| invert_alpha | BOOLEAN | false | Whether to invert the alpha channel before saving. |
| 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. |
| dpi | INT | 3001–600 | The DPI to use when saving images. |
| save_to_input_folder | BOOLEAN | false | Whether to sync the image to the input folder. |
| masksopt | 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