New video4d_nodes.py for static-camera footage:
- TemporalStaticPlate: static/dynamic split from temporal median color+depth
deviation, morphological closing, background completion from deep-depth
quantiles (bg_min_separation guards against movers swaying in place),
diffusion fill with behind-the-mover depth for never-revealed regions
- SplatFramesFromVideo: every frame = shared static base + per-frame dynamic
splats (constant count, pixel-identity order); bimodal depth snap at
silhouettes kills hair-veil smears; stride-1 seam band and
background-pushed edge splats close static/dynamic seam holes
- RenderSplatSequence: render each frame along an interpolated trajectory
(images + coverage masks + disparities)
- BakeRenderFill: unproject WAN-VACE-filled disocclusion pixels (depth
continued from the rendered background by max-propagation) into the
static layer, so the exported scene handles occlusions itself
- SaveSplats4DVideo: antimatter15 .splat frames -> streamable .splat4d
(https://github.com/adamraudonis/splats4D, pip install splats4d)
- MedianFrames / BlendImagesByMask / ScaleMasks helpers
workflows/fisheye_video_to_splats4d.json wires the full graph including the
WAN 2.1 VACE render-space disocclusion fill (fisheye-space inpainting warps
wide-angle geometry - fill happens on pinhole renders) and intermediate
previews (depth, motion mask, plate, raw/WAN/baked novel renders, replay).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>