4DAnyone Preview Grid
Judge all 32 invented views in one look
- views
- images
Generating views is the expensive step in the 4DAnyone pipeline, and it fails in ways that are invisible one angle at a time. View 12 looks fine. View 13 has the subject's left hand melting into their hip, which means the trainer will spend its time fitting a smear and every subsequent frame inherits the problem. You want all of them side by side, with labels, before you commit to a frameset.
That's this node. It takes the views bundle and returns a single IMAGE batch: a contact sheet of every generated view, arranged in a roughly square grid, each tile labelled with the yaw (and the pitch, when the generation used more than one ring).
How it works
It decodes every video in the bundle, resizes each frame with area interpolation to tile_width (keeping tile height even, and preserving aspect), stamps a label into the corner with PIL, then composites them into one [T, H, W, 3] batch laid out cols = ceil(sqrt(n)) across. Tiles are aligned on the shortest clip - if one view has fewer frames, the sheet just stops there.
One consequence of this being a video batch rather than a still: what you're looking at is animated. Every frame of the sheet is a different instant, so when you preview it you'll see all 32 views moving together. That's exactly what you want for spotting temporal drift between angles - a view that flickers relative to its neighbours is a view the generator invented inconsistently, and no still frame will show you that.
The first tile is special: with include_input on (the default) it's your source clip, labelled INPUT. Your eye reads it as the reference the other 32 should match, which is the comparison you actually want to make.
The inputs
views from Generate Views. tile_width sets how big each tile is - 200 by default, 96 at the small end, 704 at the large end, stepping in 8s. include_input adds your source clip as the first tile. show_labels draws the yaw/pitch captions; turn it off if you're going to save the sheet and the text is noise.
One output, images. Wire it into Preview Image to scrub through it, or into Create Video if you want to hand someone the animated sheet.
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
Manager's search box works too - "ComfyUI-SplatKit". Restart afterwards. This node needs nothing beyond ComfyUI's own Python packages plus the small requirements file, so it works even on a machine where the isolated backend still isn't installed. It just can't do anything until you have a views bundle to point it at.
When it breaks
- "The views bundle holds no videos." You've connected something that isn't a completed generation, or the results folder is gone. Re-run Generate Views - cached results are reused instantly, so this costs nothing if the folder is intact.
- RAM, not VRAM. The full sheet is held as one batch:
frames × rows×tile_h × cols×tile_w × 3floats. A 48-view generation at a 704-pixel tile width is a genuinely big array, and it's the sort of thing that looks fine and then quietly eats 20GB. If ComfyUI starts crawling, droptile_widthbefore you blame the generator. - Labels overlapping at tiny tile widths. The font scales with tile height, and below about 128px it's cosmetic only. Set
show_labelsoff. - A tile that's black or frozen. That's a generation problem, not a grid problem - check the same index with 4DAnyone Load View at full resolution before deciding the whole run is bad. One dead camera angle is fixable by regenerating with a different seed or dropping that preset's ring count.
The workflows that ship with the pack put this node straight after Generate Views for good reason: it's the five-second gut check that decides whether the next hour of GPU time is worth spending.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| views | SPLATKIT_4DANYONE_VIEWS | — | |
| tile_width | INT | 20096–704 | — |
| include_input | BOOLEAN | true | — |
| show_labels | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |