Nodes/ComfyUI-SplatKit/Load Frameset
ComfyUI Node

Load Frameset

Re-enter a pipeline you already paid for (or bring your own data)

By mickmumpitz·Created about a month ago·Updated 2 days ago· 18
Load Frameset
    • frameset
    • frames
    folder

    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.npz loads fine, but Train Sequence's motion option 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.
    CategorySplatKit/Splatting

    Inputs (1)

    NameTypeDefaultDescription
    folderSTRING

    Outputs (2)

    NameTypeDescription
    framesetSPLATKIT_FRAMESET
    framesINT