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 3 months ago· 3
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—