Sequence Player
Orbit a moving gaussian splat inside the node
- sequence
Most splat viewing gives you two options: a still preview of one file, or a render from a camera somebody fixed in advance. Sequence Player is the third one, and it's the one that actually tells you whether a sequence worked - a real splat renderer embedded in the node, pointed at your trained sequence, running while you drag the camera around it. The subject keeps moving underneath you and you get to walk around them.
It sounds like a nicety. It isn't. Splats can look fine from the one angle they were trained from hardest and fall apart from the side, and a sequence can look fine at frame 30 and be full of floating debris by frame 90. Orbiting through the moving subject is how you catch both.
How it works
There's no rendering on your server. The node registers the sequence's splat/ folder behind a small HTTP route, keyed by a hash of the resolved path, and ComfyUI's frontend - using an embedded copy of the antimatter15 splat renderer, vendored into the pack under web/ - pulls the frames and renders them in the browser. The route only serves plain filenames from inside the registered folder, so it isn't a general file reader.
That also explains the one hard requirement: the sequence must have playback files. Train Sequence writes a compact .splatsh copy alongside the full-SH .ply files, precisely so this node has something to stream. Load Sequence repairs missing or truncated playback files if it finds them; if you never trained, there's nothing to play.
The controls are the standard set, and once you know them the node is genuinely pleasant:
drag orbit
right-drag pan
wheel zoom
space play / pause
arrows step a frame
F reset the view
Inputs and outputs
sequence in, and that's the whole schema - no outputs at all. It's an output node; queue it and it draws itself.
The reason to keep it in the graph permanently is that it's the fastest feedback loop you have. Change a training setting, re-run, and the player re-registers the new folder on the next queue; you're looking at the new sequence in seconds, from any angle.
Installing it
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, or ComfyUI Manager → "ComfyUI-SplatKit". Two things have to be in place for the node to work at all: the pack's web/ assets served by a current ComfyUI (0.34 or newer), and the aiohttp route registration, which uses ComfyUI's own PromptServer. Both are already there in a normal install. To have a sequence worth playing, you need the isolated backend installed via installer.bat from the GitHub Releases page.
When it breaks
- "No playable sequence in … Train writes one there." The folder has
ply/but not thesplat/playback copy. Load Sequence pointed at the same folder will rebuild it; do that first, then re-queue the player. - "The SplatKit player route did not register. Restart ComfyUI." The route is registered at import time. If it failed - usually a
serveroraiohttpimport problem, or a reload quirk - a restart fixes it. - A black node with no controls. Usually the browser side: hard-refresh the ComfyUI tab. The pack is built so a failed frontend script degrades gracefully - the rest of the graph still runs - but this node's entire UI is javascript, so there's nothing to fall back to.
- Choppy playback on a long sequence. The player streams the compact
.splatshframes, one per sequence frame; 121 frames of a dense splat is a lot of data to hold in a browser tab. Drop the frame range you trained if you're only inspecting, or step through with the arrows instead of playing. - Accessing the server from another machine. The route serves from a token registered in that process, so the browser has to be looking at the same ComfyUI instance that trained the sequence. Loading an old workflow on a second machine and pressing play shows you nothing, even though the node looks fine.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| sequence | SPLATKIT_SEQUENCE | — |
Outputs (0)
No outputs