Nodes/ComfyUI-SplatKit/Add HiRes Views to Dataset
ComfyUI Node

Add HiRes Views to Dataset

Bolt real pinhole renders onto your SfM dataset without breaking it

By mickmumpitz·Created about a month ago·Updated about 19 hours ago· 17
Add HiRes Views to Dataset
  • frames
  • splat_mask
  • dataset_dir
  • report
  • num_registered
  • num_points
cameras_json
dataset_dir
retriangulatetrue
adjust_existing_camerasfalse
match_stride1
max_num_features8192
abs_pose_min_num_inliers30

Once you've built a SphereSfM dataset, this is how you make it sharper without rebuilding anything. HiRes Pano Fly-Through renders full-resolution pinhole views straight from the panorama; this node registers those renders into your existing COLMAP reconstruction as their own PINHOLE cameras. The cube faces and their poses stay exactly as they are - by default the existing cameras are pinned during registration, so the add is purely additive and cannot shift a dataset that already trains. You just end up with high-res views mixed in among the 360×360 cube faces, and the result trains with no trainer-side change: same images/ + sparse/0/ layout.

The wiring is three required inputs: frames and cameras_json (both from the HiRes node - cameras_json carries the exact intrinsics K, so views register with their true focal length rather than an estimated one), and dataset_dir pointing at an existing dataset that was built with mode=colmap_now. The add needs the original spherical reconstruction in _spheresfm_work/ to register against, so a panorama_only dataset won't work.

The inputs you'll actually tune

  • retriangulate (default on) - re-triangulate the sparse cloud including the hires views so they contribute real 3D points to the splat's init cloud (measured +7% points on the cafe dataset). Off = poses only, cheaper.
  • adjust_existing_cameras (default off) - this is the danger knob. On, bundle adjustment can move the existing panorama cameras to fit the new views. Only turn it on if the base reconstruction is shaky; off, the add is guaranteed additive.
  • match_stride (default 1) - match each hires view against every Nth existing frame. On long base trajectories, 2–3 still ties views in while cutting the pair count.
  • max_num_features (8192) and abs_pose_min_num_inliers (30) - the classic SfM registration knobs. Views failing to register? Raise features. Views sneaking in with bad poses? Raise inliers.
  • splat_mask - wire the HiRes node's splat_mask here (white = real pano detail, black = synthesized). Per-view masks land in <dataset>/masks/ so trainers can exclude the fake pixels from the loss: nerfstudio trains with --masks-path masks, Brush picks the folder up automatically. Cube faces get all-white masks so every image has one (nerfstudio requires all-or-none).

Outputs: dataset_dir, report, num_registered (how many views accepted a pose), and num_points.

Install & gotchas

Standard pack install - clone, pip install -r requirements.txt, restart; MoGe auto-downloads on first use.

The one thing that bites people: render the hires views from the same panorama the dataset was built from. SfM matches them against the existing frames by image features, and views of a different scene simply fail to register - you'll see num_registered stall near zero. And remember this node only makes sense on top of the HiRes render path; if your base dataset used plain equirect-only output, the hires views are what carry the resolution gain, so pair them with a high point cap (~3M) when you train or the added detail gets bottlenecked away.

CategorySplatKit

Inputs (9)

NameTypeDefaultDescription
framesIMAGEThe HiRes node's 'frames' output.
cameras_jsonSTRINGThe HiRes node's 'cameras_json' output -- carries the exact intrinsics (K) so the views register with true, not estimated, focal length.
dataset_dirSTRINGThe EXISTING SphereSfM dataset to add to -- wire the Dataset Project node's dataset_dir here (the same value the base SphereSfM node used as output_name), or type the dataset folder name/path. It is the folder holding images/, sparse/ and _spheresfm_work/, and must have been built with mode=colmap_now -- the add needs the original spherical reconstruction to register against.
retriangulateoptBOOLEANtrueRe-triangulate the sparse cloud including the hires views, so they contribute real 3D points to the splat's init cloud (measured +7% points on the cafe dataset). Off = poses only.
adjust_existing_camerasoptBOOLEANfalseLet bundle adjustment MOVE the existing panorama cameras to fit the new views. Off (default) pins them, so the add is purely additive and cannot break a dataset that already trains. Turn on only if the base reconstruction is shaky.
match_strideoptINT11–10Match each hires view against every Nth existing frame. 1 = all (best). Raise it on very long base trajectories to cut the pair count -- neighbouring pano frames are near-duplicates, so 2-3 still ties the views in.
max_num_featuresoptINT81921024–32768SIFT features per image. Raise if views fail to register.
abs_pose_min_num_inliersoptINT3010–300Inliers needed to accept a view's pose. Lower = more views register, at the risk of a bad pose sneaking in.
splat_maskoptIMAGEThe HiRes node's 'splat_mask' output (white = real pano detail, black = synthesized/stretched). When wired, per-view masks land in <dataset>/masks/ so splat trainers can exclude the fake pixels from the loss: nerfstudio trains with '--masks-path masks', Brush picks the folder up automatically. The cube faces get all-white masks so every image has one (nerfstudio requires all-or-none).

Outputs (4)

NameTypeDescription
dataset_dirSTRING
reportSTRING
num_registeredINT
num_pointsINT