ImageToSplat
One photo, one splat cloud, no camera rig needed
- image
- splats
The old way to get a 3D Gaussian splat scene was to shoot a video around an object and fit splats to the footage - minutes of capture, a reconstruction pass, a whole pipeline. ImageToSplat is the shortcut: one single image in, a full splat cloud out, predicted by a model called SHARP (Apple's ml-sharp, bundled as a submodule of this pack). It's the single most magical node in camera-comfyUI and the reason this pack can turn a lone photo into something you can orbit.
Be honest about what it's good at, though. Single-image splat prediction is impressive and genuinely useful for scene backsplats, camera-move previews, and seeding a larger world - but it's predicting geometry it can't actually see, so the back sides of objects come out hallucinated and the cloud is really a "solid-ish shell from one viewpoint." The pack itself treats it as a building block: ImageToSplat feeds the fusion pipelines, the outpainting-based world enrichers, and the static part of the 4D workflow. It's not a photogrammetry replacement.
What you set
image- the photo.horizontal_fov(default 60°) tells SHARP the lens, which it uses to compute focal length. This matters more than people expect: a phone photo guessed at 60° when it was really ~70° comes out subtly flattened. Match it to your source (EXIF or the node that produced the image).checkpoint- a.ptcheckpoint from your input folder, or<download default>to fetch SHARP's model automatically on first run.device(default auto) - pin cpu/cuda if you need to.
Output: splats, a GSPLAT object ready for FuseSplats, RotateSplats, RenderSplat, or the 4D builders.
What it actually needs
SHARP is the whole engine, and it's not trivial. The submodules/ml-sharpt checkout and gsplat are mandatory - install.py sets both up (Manager runs it automatically), and gsplat JIT-compiles CUDA kernels on first use, so the very first call has a real compile pause and requires a CUDA GPU with a matching PyTorch build. The checkpoint downloads on first run if you accept the default. The README is upfront that missing any of these only disables the SHARP nodes rather than the whole pack - so if ImageToSplat is absent from your graph, that's the diagnosis.
Install
Shared camera-comfyUI install: Manager → search "camera-comfyUI" → Install, or clone https://github.com/Alexankharin/camera-comfyUI into custom_nodes/ and run python install.py. If the node loads but errors, re-run python install.py - a failed SHARP/gsplat step is the usual culprit and the script is idempotent.
Troubleshooting
- Cloud is great from the front, mush from behind: that's single-image splat prediction, not a bug. Orbit expectations accordingly.
- First run is very slow: SHARP weights download + gsplat JIT compile. Watch the console and let it finish once.
- Geometry looks wrong-scale or squashed: your
horizontal_fovis off. This is the #1 fixable mistake - tune it until known proportions look right. - Node missing from the palette: SHARP/gsplat install failed. Re-run
python install.pyand check the console for the exact error. - Pair with depth for better results: feeding the pack's depth pipeline and scale-aligning (DepthScaleAnchor) before fusing into a world gives noticeably sturdier geometry than using ImageToSplat in isolation.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| horizontal_fov | FLOAT | 60.001–179 | Horizontal field of view in degrees used to compute focal length. |
| checkpoint | COMBO | <download default> | Select a .pt checkpoint from the input folder or download the default model. |
| deviceopt | COMBO | auto | 3 options: auto, cpu, cuda |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| splats | GSPLAT | — |