ComfyUI Node
Camera Plot Fly-Through (Perspective)
A ComfyUI node in SplatKit with 20 inputs and 5 outputs.
Camera Plot Fly-Through (Perspective)
- panorama
- moge_model
- frames
- hole_mask
- splat_mask
- cameras_json
- camera_preview
◄anchors0, 0, 0
0.2, 0.02, 0.5
0.4, 0.05, 1.0►
◄orientationlook_forward►
◄length81►
◄width1920►
◄height1080►
◄focal_mm28.0►
◄sensor_width_mm36.00►
◄edge_modelayered►
◄point_budget4000►
◄mesh_width2048►
◄edge_rtol0.050►
◄bg_extend_px24►
◄moge_level9►
◄merge_long1920►
◄output_namecomfy_camplot_persp►
◄dataset_dir►
◄moge_ckpt▾►
◄look_at_target0, 0, 3►
CategorySplatKit
Inputs (20)
| Name | Type | Default | Description |
|---|---|---|---|
| panorama | IMAGE | — | |
| anchors | STRING | 0, 0, 0 0.2, 0.02, 0.5 0.4, 0.05, 1.0 | Fly-through points, in the SAME literal units as the geometry overlay: +Z forward/into the pano, +X right, +Y up, origin = the pano camera. The camera goes EXACTLY where you place each point (WYSIWYG, no rescaling, no collision guard). One 'x,y,z' per line, or JSON [[x,y,z],...]; 6 numbers adds a per-anchor look target. Need at least 2 points. Keep moves SMALL -- a single pano only holds so much parallax. |
| orientation | COMBO | look_forward | look_forward = camera faces the path tangent. look_at_target = every frame aims at the SAME shared point -- set it in the look_at_target widget or drag the orange 'look' marker in the editor. per_point_look = each anchor has its own draggable look target and the aim sweeps between them. Unlike the equirect node the camera is NOT re-aimed at the pano centre on frame 0 -- it looks exactly where the editor's heading arrow points. |
| length | INT | 811–513 | Frames along the path. 1 = a single still at the first anchor. If this feeds a WAN/VACE pass keep it at 4n+1 (81, 121, ...). |
| width | INT | 1920256–8192 | Output width. A REAL pinhole render -- detail is limited by the INPUT PANORAMA's resolution, not by this number. See the 'pano width for 1:1' line the node prints. |
| height | INT | 1080256–8192 | Output height. With square pixels the aspect ratio sets the VERTICAL field of view, exactly like cropping a sensor to 16:9. |
| focal_mm | FLOAT | 28.04–400 | Lens focal length, as written on the barrel. Wider = more FOV = more of the pano per pixel = sharper, but more disocclusion visible. On full-frame: 14mm=104deg, 24mm=74deg, 28mm=65deg, 35mm=54deg, 50mm=40deg. Long lenses magnify the pano hard -- check the sharpness warning the node prints. |
| sensor_width_mm | FLOAT | 36.003–120 | Sensor/gate WIDTH the focal length is quoted against. Full-frame 36.0 (default) | Super35 / cine 24.89 | APS-C 23.6 | MFT 17.3 | Super16 12.52. Only the focal:sensor RATIO matters, so leave it at 36 if you just want to think in full-frame millimetres. |
| edge_mode | COMBO | layered | What happens where the move tears the environment open. layered = re-grow a real background layer from the pano (sharpest, slowest). fill = fast soft push-pull fill. cut = leave the holes and report them in hole_mask -- use this to drive a WAN/VACE inpaint. stretch = never tear (rubber-sheet smear); only for tiny moves. |
| point_budget | INT | 4000500–40000 | Max points in the editor's geometry overlay cloud. Placement only -- it never affects the render. 4000 is plenty. |
| mesh_widthopt | COMBO | 2048 | GEOMETRY (depth-grid) resolution, independent of output resolution -- colour always comes from the full-res panorama. 4096 = 33M triangles: much slower, sharper silhouettes. Worth raising for long lenses, which magnify silhouette stair-stepping. |
| edge_rtolopt | FLOAT | 0.0500.005–0.5 | Depth-edge sensitivity (relative depth jump counting as a discontinuity). Lower = more geometry treated as an edge = more holes cut but fewer smears. |
| bg_extend_pxopt | INT | 244–128 | layered 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 larger moves. |
| moge_levelopt | INT | 90–9 | MoGe detail level. 9 = max; this node is about quality. |
| merge_longopt | INT | 1920512–4096 | Panorama depth-merge resolution (long side). The dominant MoGe cost; 1920x960 is the full-quality setting. |
| output_nameopt | STRING | comfy_camplot_persp | — |
| dataset_diropt | STRING | Wire a Dataset Project node here to write cameras_json under it instead of under output_name. | |
| moge_ckptopt | COMBO | MoGe 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_modelopt | MOGE_MODEL | Optional: a pre-loaded MoGe model from the MoGe Model Loader node. Overrides moge_ckpt; load once and reuse across nodes. | |
| look_at_targetopt | STRING | 0, 0, 3 | The single world point ALL frames aim at when orientation = look_at_target. 'x, y, z' in the SAME literal units as the anchors / geometry overlay. Draggable in the editor (the orange 'look' marker). Ignored by the other orientation modes. |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| frames | IMAGE | — |
| hole_mask | IMAGE | — |
| splat_mask | IMAGE | — |
| cameras_json | STRING | — |
| camera_preview | IMAGE | — |