Nodes/JSON Dynamic Loader/Fast Absolute Saver (Metadata)
ComfyUI Node

Fast Absolute Saver (Metadata)

Save images anywhere, as PNG, WebP, or video, with your scores in the filename

By ethanfel·Created 7 months ago·Updated 2 months ago· 2
Fast Absolute Saver (Metadata)
  • images
  • audio
  • latent
  • latent
output_pathD:\Datasets\Sharp_Output
filename_prefixframe
save_format
use_timestampfalse
auto_incrementtrue
counter_digits4
filename_with_scorefalse
metadata_keysharpness_score
save_workflow_metadatafalse
save_metadata_pngfalse
save_latenttrue
max_threads0
webp_losslesstrue
webp_quality100
webp_method4
video_fps24
video_crf18
video_pixel_format
video_bitrate10
prores_profile
gif_dither
scores_info

Fast Absolute Saver is the pack's heavyweight: a save node built for dataset pipelines, not for sharing pretty outputs on Civitai. The default output_path - D:\Datasets\Sharp_Output - tells you exactly who this is for: someone assembling a training set folder, usually sharpness-filtered, and wanting every frame saved fast, scored, and named in a way a script can sort. It writes to any absolute path you give it, saves PNG or WebP stills or encodes an image batch straight to video, and can append a quality score to each filename so the dataset curates itself.

How it works

On execution it moves the whole batch off the GPU in one shot, then either runs the image path (threaded PNG/WebP saving via a thread pool - max_threads, 0 = auto) or hands the frames to ffmpeg for video. Filenames follow prefix_NUMBER with configurable padding; auto_increment scans the target folder once and starts at the highest existing number so you don't overwrite previous runs, and use_timestamp instead stamps a unique time suffix.

The scores_info input is the interesting bit: it's a plain STRING that the node parses for per-frame scores (F:<frame> ... Score: <n>). When you connect the text output of a sharpness-scoring node, each file gets its number baked into the name (frame_0001_87.png), and metadata_key (default sharpness_score) names the value written into the PNG's metadata. That's the whole dataset trick - score in the filename, score in the file, sorted folder.

The inputs that matter

  • output_path - absolute destination. Relative paths are joined onto ComfyUI's base directory, and the default is a Windows path; on Linux/macOS you must change it. Missing folders are created.
  • save_format - 13 options. png and webp are stills; the rest are video containers (mp4, webm, h265-mp4, av1-mp4, gif, ffv1-mkv, prores-mov) plus three NVENC GPU variants. The node shows only the widgets relevant to the chosen format.
  • scores_info (optional) - the score text to parse; skip it and you just get clean prefix_NUMBER names.
  • audio (optional AUDIO) and latent (optional LATENT) - audio gets muxed into video encodes; latent is passed through the latent output and, with save_latent, written as a .latent sidecar next to each media file.

Video and the ffmpeg gotcha

Video formats need a real ffmpeg binary. The node looks for one in this order: a bundled copy in its own folder → imageio_ffmpeg (shipped by VideoHelperSuite if you have it) → system PATH → and if none exists (or you picked an nvenc_* format), it downloads a ~125 MB static NVENC-enabled ffmpeg from BtbN builds into the node's folder. Two things to know: that download is one-time but not instant, and if no NVENC encoder is actually available, it silently falls back to the equivalent CPU codec for the same container (printed as a warning) so your run's output isn't lost. Quality knobs: video_crf (18 default; lower = better, 0 = lossless), video_fps, video_bitrate (NVENC, in Mbps), prores_profile, gif_dither.

Metadata follows the save: PNG stills embed the score plus prompt/workflow chunks when save_workflow_metadata is on; for non-PNG output, save_metadata_png writes a sidecar PNG carrying the workflow, and video gets an ffmetadata stream with score averages. The latent output always passes the connected latent through, so the node slots into a graph without breaking the latent chain.

Install

Part of ComfyUI-JSON-Dynamic. ComfyUI Manager → search JSON Dynamic Loader, or:

cd ComfyUI/custom_nodes
git clone https://github.com/ethanfel/ComfyUI-JSON-Dynamic.git
# restart ComfyUI

No Python packages to install; the only "heavy" dependency is the optional self-downloaded ffmpeg described above.

Verdict

If you're building a dataset - especially a sharpness-filtered one - this is the save node you want: fast, scored filenames, latent sidecars, and video export from the same node. If you just want to save a few images to output/, the built-in SaveImage is simpler. It's a specialist tool that knows exactly who it's for.

CategoryJSON Dynamic/io

Inputs (25)

NameTypeDefaultDescription
imagesIMAGE
output_pathSTRINGD:\Datasets\Sharp_Output
filename_prefixSTRINGframe
save_formatCOMBO13 options: png, webp, mp4, webm, h265-mp4, av1-mp4, +7
use_timestampBOOLEANfalse
auto_incrementBOOLEANtrue
counter_digitsINT41–12
filename_with_scoreBOOLEANfalse
metadata_keySTRINGsharpness_score
save_workflow_metadataBOOLEANfalse
save_metadata_pngBOOLEANfalse
save_latentBOOLEANtrue
max_threadsINT00–128
webp_losslessBOOLEANtrue
webp_qualityINT1000–100
webp_methodINT40–6
video_fpsINT241–120
video_crfINT180–51
video_pixel_formatCOMBO6 options: yuv420p, yuv422p, yuv444p, yuv420p10le, rgb24, bgra
video_bitrateINT101–999
prores_profileCOMBO5 options: lt, standard, hq, 4444, 4444xq
gif_ditherCOMBO9 options: sierra2_4a, floyd_steinberg, bayer, sierra2, sierra3, burkes, +3
scores_infooptSTRING
audiooptAUDIO
latentoptLATENT

Outputs (1)

NameTypeDescription
latentLATENT