Nodes/ComfyUI-SplatKit/HiRes Pano Fly-Through
ComfyUI Node

HiRes Pano Fly-Through

A ComfyUI node in SplatKit with 22 inputs and 4 outputs.

By mickmumpitz·Created 19 days ago·Updated a day ago· 0
HiRes Pano Fly-Through
  • panorama
  • moge_model
  • frames
  • hole_mask
  • cameras_json
  • splat_mask
anchors0, 0, 0 0.15, 0, 0.4 0.3, 0.05, 0.8
orientationfixed_forward
length49
width1920
height1080
fov_deg75
edge_modelayered
movement_scale0.15
scale_modeauto
mesh_width2048
edge_rtol0.050
bg_extend_px24
moge_level9
merge_long1920
moge_ckpt
output_namecomfy_hires
directions6
spiral_radius0.00
spiral_turns1.0
spiral_phase_deg0
CategorySplatKit

Inputs (22)

NameTypeDefaultDescription
panoramaIMAGE
anchorsSTRING0, 0, 0 0.15, 0, 0.4 0.3, 0.05, 0.8Camera fly-through points, same frame/format as Camera Plot: +Z forward into the pano, +X right, +Y up, origin = start camera. One 'x,y,z' per line or JSON [[x,y,z],...]. Keep the moves SMALL here -- this node closes disocclusions from a single pano, it cannot invent a whole new viewpoint.
orientationCOMBOfixed_forwardfixed_forward = camera keeps the pano's forward heading (pure dolly; least tearing). look_forward = camera turns to face the path tangent. look_at_point = camera stays AIMED at a fixed anchor point picked automatically per direction (where that direction's forward ray hits the scene) -- with a spiral this turns the orbit into an arc AROUND the spot, like a crane shot.
lengthINT491–257Frames along the path. 1 = a single still at the first anchor.
widthINT1920256–8192Output width. This is a REAL pinhole render -- unlike the WAN control path (6x512 cube faces), detail here is limited only by the input panorama.
heightINT1080256–8192
fov_degFLOAT7520–140Horizontal field of view of the rendered camera.
edge_modeCOMBOlayeredHow disocclusions are handled. layered = re-grown background layer behind the holes (sharpest, slowest). fill = push-pull hole fill (fast, soft). stretch = never punch holes at all (rubber-sheet smear). cut = leave the holes (WAN-style mask).
movement_scaleFLOAT0.150.01–3Travel gain. scale_mode=auto: the path's most extreme frame reaches this fraction of the scene depth. absolute: 1 anchor unit = this x median scene depth. travel: the farthest frame sits exactly this fraction of the MEDIAN scene depth from the origin. Small values (0.05-0.3) keep disocclusions small enough to close convincingly.
scale_modeCOMBOautoauto = renormalise the whole path against the scene depth (collision guard, anchor magnitude ignored). absolute = anchor coords taken literally in units of median scene depth. travel = origin-anchored: movement_scale directly sets how far the path's farthest frame gets from the pano origin, as a fraction of the median scene depth -- predictable travel, same for every direction. No collision guard (a warning prints if the path would cross geometry).
mesh_widthoptCOMBO2048Geometry (depth-grid) resolution. Independent of output resolution -- colour always comes from the full-res panorama. 4096 = 33M triangles: much slower, sharper silhouettes.
edge_rtoloptFLOAT0.0500.005–0.5Depth-edge sensitivity (relative depth jump that counts as a discontinuity). Lower = more geometry treated as an edge = more holes cut but fewer smears.
bg_extend_pxoptINT244–128layered mode: how far (in depth-grid pixels) the background is re-grown behind each silhouette. Must exceed the disocclusion width; raise it if holes survive at large movement_scale.
moge_leveloptINT90–9MoGe detail level. 9 = max (this node is about quality).
merge_longoptINT1920512–4096Panorama depth-merge resolution (long side). The dominant MoGe cost; 1920x960 is the full-quality setting.
moge_ckptoptCOMBOMoGe checkpoint from ComfyUI/models/MoGe. 'auto (download)' fetches 'Ruicheng/moge-vitl' into that folder on first use (~1.2GB). Drop your own model.pt in models/MoGe to pick it here, or wire a MoGe Model Loader node into 'moge_model'.
moge_modeloptMOGE_MODELOptional: a pre-loaded MoGe model from the MoGe Model Loader node. Overrides moge_ckpt; load once and reuse across nodes.
output_nameoptSTRINGcomfy_hires
directionsoptINT61–36Render the SAME path once per azimuth, fanned evenly around the panorama (360/directions apart: 6 -> every 60 deg). The output is one batch of directions x length frames, in order. Each direction starts at the pano origin and is scaled/collision-guarded independently, so a path that clears a wall in one direction still clears it in the others. 1 = single direction.
spiral_radiusoptFLOAT0.000–1Optional spiral: the camera orbits up-left-down-right around its line of sight while it flies the path (with look_at_point it orbits the anchor spot instead). 0 = off. Units are fractions of the MEDIAN scene depth, applied AFTER path scaling -- the orbit size no longer rides on movement_scale, so raising the travel does not widen the spiral. 0.02-0.1 is a usable orbit. Sweeps parallax across the frame -- good for splat/SfM coverage.
spiral_turnsoptFLOAT1.00.1–8Full circles the spiral completes over the path's length.
spiral_phase_degoptFLOAT00–360Which way the spiral sets off from the start point. 0 = up (then left, down, right). 90 = left first, 180 = down first, 270 = right.

Outputs (4)

NameTypeDescription
framesIMAGE
hole_maskIMAGE
cameras_jsonSTRING
splat_maskIMAGE