Save Upscaled Dataset
Write the upscaled batch back where COLMAP will find it
- images
- images_dir
The terminal node of the whole dataset upscale chain. You've loaded the originals, pushed them through SeedVR2 (or whatever upscaler), and now you need the result written back into the folder COLMAP actually reads - under the original filenames, so sparse/0/images.bin keeps matching. Save Upscaled Dataset does that with a safety scheme worth spelling out, because it's what makes the operation reversible.
The scheme: it moves the originals from images/ aside to images_lowres/ (a single atomic rename - the originals are never written to or deleted), recreates an empty images/, and writes the upscaled batch into it using the original names. On a re-run, images_lowres already exists, so it never renames again - that would move freshly-upscaled images into the lowres folder and clobber the pristine originals. Instead it reads filenames from images_lowres and overwrites images/. Same result, idempotent, and if a run dies halfway your originals are still safe in images_lowres.
The inputs that matter
images- the upscaled batch. Required.canonical_dir- wireResolve Dataset Images → canonical_dirhere; that's the images folder COLMAP expects.order_names- optional JSON list of filenames giving the exact order the batch is in (wireLoad Dataset Images (Ordered) → order_names). Required when the batch was loaded camera-major, so each upscaled frame maps back to its original filename; unconnected, it falls back to lexical order.lowres_suffix(default_lowres) - must match the Resolve node's suffix.
One guardrail baked in: the batch length must equal the number of original images, and it errors before any rename on a mismatch - nothing gets moved by a wrong-sized batch. Output is just images_dir (a STRING), and it's an output node, so it terminates the branch.
Install & gotchas
cd ComfyUI/custom_nodes
git clone https://github.com/mickmumpitz/ComfyUI-SplatKit
python_embeded\python.exe -m pip install -r ComfyUI-SplatKit/requirements.txt
Restart; no model downloads - your upscaler supplies the models. Two things to remember. First, this node's rename-at-the-end model can't work inside a frame-by-frame Meta Batch loop - that's what Prepare Dataset Upscale (swap up front) and Save Upscaled Frames (Streaming) (separate output folder) are for. Second, the lowres originals still live next to the dataset; a trainer pointed at images/ sees only the sharpened set, but the folder footprint roughly doubles. If you want to train on the equirect panoramas instead of cube faces, this is the wrong save node - the panorama upscale rail uses the streaming saver.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | The upscaled image batch. | |
| canonical_dir | STRING | Wire Resolve Dataset Images -> canonical_dir here. The images folder COLMAP expects. | |
| lowres_suffixopt | STRING | _lowres | Originals are moved to <images><suffix>. Must match the Resolve node's suffix. |
| order_namesopt | STRING | Optional JSON list of filenames giving the EXACT order the image batch is in (wire Load Dataset Images (Ordered) -> order_names). Required when the batch was loaded camera-major so each upscaled frame maps back to its original filename. Leave unconnected to fall back to lexical order. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images_dir | STRING | — |