The mark shipped as an opaque 400x400 square, which reads as a hard tile on the Manager's pack card. The frontend's PackBanner draws the icon twice into a 7:3 box: once bg-cover plus blur(10px) at opacity-30 as a backdrop, once object-contain on top. bg-cover crops to the centre and zooms about 2.3x, so it samples mostly glow and lifts the surround to ~47, while the contained copy still shows the icon's own near-black corners at ~17. Measured off a card screenshot, that is a 26-34 level step at the tile edge; the same measurement on rgthree-comfy, whose icon is a transparent SVG, is 2-3 levels. Alpha now comes from luminance, which is the right derivation for artwork that is additive glow on near-black, and it removes the edge outright. Checked against a local reimplementation of PackBanner that reproduces the screenshot's tile corners exactly. The trade is that the pale mark washes out on ComfyUI's light theme. Taken deliberately: the dark theme is the common case, and it is what the comparable packs do. A dark backing disc was the alternative and reads as a grey blob on light instead. No version bump. The registry stores the icon URL rather than the bytes and the Manager hotlinks it, so replacing the file on main restyles every card; only a changed URL would need a republish. Also worth recording: Banner is deliberately still unset, because PackBanner resolves banner_url || icon, so a banner replaces the mark instead of sitting behind it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015p88qHFcfungDkCbG1n7z2
ComfyUI-FastImageSequence
A fast PNG image-sequence saver for ComfyUI.
The built-in Save Image (Advanced) node encodes each frame of a batch one at a time. For long sequences (video / frame dumps) that's slow — almost all the time goes into single-threaded zlib PNG compression, not metadata.
This node encodes the frames of a batch in parallel. PyAV releases the GIL during compression, so encoding scales with your CPU cores. The output bytes are identical to the built-in node — same pixels, same compression, same file size — it's just much faster.
It also embeds the prompt/workflow metadata in only the first frame by default, so the workflow is still recoverable from the sequence without bloating every single frame.
Node
Save Image Sequence (Fast 16-bit) (category: image)
| Input | Default | Notes |
|---|---|---|
images |
— | The image batch to save. |
filename_prefix |
ComfyUI |
Supports the usual tokens (%date:yyyy-MM-dd%, etc.). |
bit_depth |
16-bit |
8-bit or 16-bit PNG. |
metadata (advanced) |
first_frame |
first_frame / all / none. |
threads (advanced) |
0 (auto) |
Encoder threads. 0 = min(8, CPU count). |
Drop it in wherever you'd use Save Image (Advanced). It handles the whole batch itself, including the first-frame metadata, so wire the entire sequence into this one node (don't split it across two save nodes — that would collide on the sequential file numbering).
Performance
Measured on a 16-core CPU, 457 frames at 1920×1088, 16-bit RGB (worst-case noisy content; real frames are faster):
| threads | ms/frame | 457 frames |
|---|---|---|
| 1 (built-in, serial) | 372 | ~170 s |
| 4 | 101 | ~46 s |
| 8 (auto default) | 60 | ~27 s |
| 16 | 43 | ~20 s |
| 24 | 44 | ~20 s (no gain) |
Scaling flattens at your core count — there's no benefit to setting threads
higher than the number of CPU cores. 0 (auto = 8) already captures most of the
win; set it to your core count for the last few seconds.
For reference, metadata injection costs ~0.9 ms/frame (~0.2% of the total), so
the metadata option is about file size / cleanliness, not speed.
Installation
Clone into your ComfyUI custom_nodes directory and restart:
cd ComfyUI/custom_nodes
git clone https://github.com/dreevelle/ComfyUI-FastImageSequence.git
av, numpy and torch ship with ComfyUI, so there are no extra dependencies
to install.
Notes
- Output is byte-identical to Save Image (Advanced) for the same input — this node only changes how fast the frames are written, not the result.
- True 16-bit PNGs (IHDR bit depth 16). Note that Pillow downsamples 16-bit
color PNGs to 8-bit when reading them, so a
PIL.Image.open(...).modecheck will reportRGBeven though the file on disk is genuinely 16-bit. - Self-contained: it copies the small PNG encode/metadata helpers rather than importing from ComfyUI internals, so a core update won't break it.