Load Frameset
Re-enter a pipeline you already paid for (or bring your own data)
- frameset
- frames
Training a sequence of gaussian splats is the slow part. Eventually you will do one of two things that make the window between "dataset exists" and "train" annoying: reopen the graph a day later and discover you'd have to regenerate everything upstream to get a frameset socket again, or wish you could point this pipeline at data you produced somewhere else. Load Frameset is the answer to both. It reads a frameset folder off disk and hands you the same socket Export Frameset produces, so you can start training without re-running the generator.
The layout it expects
A frameset is a folder of frame folders, and the structure is plain enough to fake by hand if you ever need to:
output/splatkit/framesets/<clip>/
frame_000/
transforms.json # camera entries, each with a file_path to an image
images/*.png # RGBA - the alpha channel is the matte
sparse_pcd.ply # the point cloud for this frame
frame_001/
...
skeleton.npz # optional: body pose, drives Train's motion option
Point folder at the top folder and the node validates the whole thing up front: every frame directory present, every transforms.json parseable, every referenced image and every sparse_pcd.ply existing and non-empty. That's deliberate - a frameset half-written by an interrupted export should fail here, in a second, not forty minutes into training.
A single frame folder also works, and gives you one static splat instead of a moving sequence. Same layout, one frame_000. That's the cheapest way to test the trainer and your VGG-19 weights without generating a whole clip's worth of views first.
The pack also accepts compatible datasets from other producers as long as they match this layout - but note what it deliberately doesn't accept: general COLMAP exports. Those need per-view calibration, validated distortion handling and corrected RADIAL parameters before a splat trainer can use them, so don't point it at the sparse/0 folder from a photogrammetry run and expect it to work. Equirectangular input is unsupported here too (that's the panorama branch's territory).
Inputs and outputs
One input: folder, a path string. Two outputs: frameset (into Train Sequence) and frames, an INT count - connect it to nothing or use it to sanity-check that you really got 121 frames and not 20.
You'll want the path to be reachable and stable. On a ComfyUI server bound to a network address, free-form path widgets are restricted to ComfyUI's own input, output, temp and models folders, and this node follows that rule. The override, for a server you've secured yourself, is an environment variable:
SPLATKIT_ALLOW_REMOTE=1
Installing it
The pack, then the backend, because training itself runs in the isolated environment:
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 afterwards, or install through ComfyUI Manager by searching "ComfyUI-SplatKit". This node only reads metadata and hashes files, so it's light - but the thing you're loading it for (Train Sequence) needs the managed backend plus VGG-19 weights in models/splatkit/4danyone/. Backend setup is a one-time manual step with installer.bat from the GitHub Releases page; Windows and NVIDIA only.
Refreshing on change
The node reports an IS_CHANGED value derived from a fingerprint of the frameset's own files - transforms, point clouds, images, and the skeleton if present. Practically: fixing a broken frame in place and re-queueing will retrain, because ComfyUI sees the fingerprint move. That's the behaviour you want, and it's also why deleting and re-exporting over an existing folder is safer than it looks - the frameset is content-addressed by that fingerprint, not by name.
When it breaks
- "Frameset folder does not exist: …" - the path is empty, wrong, or has a stray quote in it. Empty string is the widget default, and it's the most common cause.
- "No frames under … expected frame_NNN/transforms.json." - you pointed at the clip folder instead of the folder containing the frame folders.
- "Incomplete frame 7 in … missing or invalid image, cameras or point cloud." - the export didn't finish that frame. The good news: Export Frameset skips already-exported frames, so re-running it with the same range fills in the gap without redoing the rest.
- A frameset with no
skeleton.npzloads fine, but Train Sequence'smotionoption silently does nothing and warm-starts in place instead. You'll see that note in the console; it's the single most common reason a sequence looks jittery for no obvious reason.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| folder | STRING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| frameset | SPLATKIT_FRAMESET | — |
| frames | INT | — |