Nodes/ComfyUI-SplatKit/4DAnyone Export Frameset
ComfyUI Node

4DAnyone Export Frameset

Where invented camera angles become an actual dataset

By mickmumpitz·Created about a month ago·Updated 2 days ago· 18
4DAnyone Export Frameset
  • views
  • frameset
  • frames
first_frame0
last_frame120
matting_batch8

Export Frameset is the unglamorous middle node of the 4DAnyone chain, and it's the one that decides whether the glamorous node was worth running. Generate Views hands you a bundle of synchronized videos - 16, 24, 32, even 48 invented camera angles around one person. No gaussian splat trainer can eat that. This node turns each frame of that generation into matted images with camera files and a carved hull: the frameset Train Sequence actually reads.

What it does

A frameset is the layout that 4DAnyone-style training expects, and it's deliberately plain:

output/splatkit/framesets/<clip>/
  frame_000/
    transforms.json     # one camera per view: intrinsics + pose
    images/00.png ...   # RGBA, alpha channel = the matte
    sparse_pcd.ply      # visual hull for this frame
  frame_001/
  ...
  skeleton.npz          # body pose, when it was found

The node runs the exporter inside SplatKit's managed backend environment. It mattes every generated view with BiRefNet - the segmentation network ComfyUI itself shipped into core in 2026, and a genuinely good pick here because alpha edges on hair are exactly where the cheaper cutout models fall apart - writes the cameras, then carves a visual hull per frame from those mattes. That hull is the point: it gives the optimiser a plausible starting shape instead of a random cloud, which is most of why these frames train quickly at all.

Two design decisions are worth knowing before you queue anything. First, frames already exported are skipped. Export 0–20, look at the result, then widen to 0–120 and only the missing frames get made. Second, it carries the body pose forward as skeleton.npz when it can find it - that file is what lets Train Sequence's motion option move gaussians between frames instead of fading an arm out and regrowing it somewhere else. No pose found, and you get a console line saying the trainer will warm-start without motion.

Inputs and outputs

Four inputs, and you'll touch three of them.

views comes straight from 4DAnyone Generate Views. The other two that matter are first_frame and last_frame - inclusive, 0 to 120 being the whole clip, 0 and 20 being the quick sanity check the guide tells you to start with. matting_batch (default 8) is how many views BiRefNet mattes per GPU pass; drop it to 4 or 2 if matting runs out of memory, raise it if you're wide open.

Out come frameset (wire it to Train Sequence) and frames (an INT count, handy for logging or for a sanity check that 21 frames is really 21).

Installing it

Install the pack normally, then install the backend, because this node runs in the backend 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
# Linux / non-portable: python -m pip install -r ComfyUI-SplatKit/requirements.txt

(Or ComfyUI Manager → search "ComfyUI-SplatKit" → install → restart.) That requirements.txt is small on purpose - opencv, trimesh, scikit-image, click, matplotlib. The heavy stack (Python 3.11, torch 2.8.0, CUDA 12.8, gsplat 1.4.0) lives in a separate environment under bin/, built once by the installer bundle from the pack's GitHub Releases page using a SHA-256-verified gsplat wheel. Do not pip-install that stack into ComfyUI's Python. The pinned versions differ and you'll break the host.

You also supply the weights, because nothing here downloads: the 4DAnyone checkpoint, VAE and prompt context in models/splatkit/4danyone/, and BiRefNet's model.safetensors, config.json, birefnet.py and BiRefNet_config.py together in models/splatkit/birefnet/. All four BiRefNet files are required, and the node checks for them up front and tells you which one is missing.

When it breaks

  • "Run Generate Views with 4DAnyone Model Loader to select BiRefNet before exporting." The loader's BiRefNet selection isn't decorative - export reads the folder from it. Fix the loader, not this node.
  • Out of memory during matting. Lower matting_batch. It frees ComfyUI's own models from VRAM before it starts, so if it still OOMs, the batch size is the lever.
  • "N of M frames were not exported (first missing: frame X)." The exporter deliberately carries on past a frame whose hull failed - one bad frame shouldn't kill a job - and this error stops a gapped sequence from training silently. The usual cause is a camera where the matte found no person. Check the generated views with the Preview Grid or Load View before blaming the exporter.

Budget for the storage, too: RGBA PNGs at full resolution, times 32 cameras, times 121 frames, is not a small folder.

CategorySplatKit/4DAnyone

Inputs (4)

NameTypeDefaultDescription
viewsSPLATKIT_4DANYONE_VIEWSFrom 4DAnyone Generate Views.
first_frameINT00–120First frame of the generated clip to export.
last_frameINT1200–120Last frame, inclusive. 0 to 120 is the whole clip; 0 to 20 is a quick test of the chain.
matting_batchINT81–64How many views BiRefNet mattes per GPU batch. Higher is faster but uses more VRAM; lower it if matting runs out of memory.

Outputs (2)

NameTypeDescription
framesetSPLATKIT_FRAMESET
framesINT