Adds two new IMAGE outputs (B, 1536, 1536, 3) — per-pixel (X, Y, Z) in camera space — alongside the existing scalar metric_depth outputs. Mirrors MoGe2Inference's depth_raw / points_raw pairing so SHARP can feed PanoramaDepthMerge.face_points directly. Motivation: PanoramaDepthMerge.face_points expects a 3D point map, not a depth scalar. Wiring layer_0_metric_depth (which is depth replicated to 3 channels for IMAGE compatibility) into face_points silently produced wrong geometry: the merger's ||points|| computation gave ||(d, d, d)|| = d × sqrt(3) per pixel and treated it as ray distance, inflating everything by ~73% with no shape-mismatch error. The new points are computed as: x_cam = (u - cx) / fx y_cam = (v - cy) / fy points[u, v] = (x_cam * Z, y_cam * Z, Z) By construction ||points|| equals the correct ray distance — what PanoramaDepthMerge consumes via np.linalg.norm. Intrinsics rescaled to the 1536² depth grid via the same sx/sy ratio used elsewhere; relies on the existing fx<2.0 normalized-K sniff at the top of execute() so PanoPack-style normalized K is auto-converted before the math runs. Output socket order: layer_0_metric_depth, layer_1_metric_depth, extrinsics_mdepth, intrinsics_mdepth, layer_0_points_raw, layer_1_points_raw. New outputs appended at the END so existing workflows that wired extrinsics_mdepth / intrinsics_mdepth by slot index continue to work — those slots (2, 3) are unchanged. Log line gains a ||v|| range for the layer-0 point map so the user can sanity-check that depth × unprojection produced scene-scale 3D positions (||v|| ≈ Z at face centers, ~sqrt(3)·Z at 90° face corners).
Warning
Warning, uses experimental package
comfy-envto attempt a one click isolated install. Will download and use pixi package manager.
ComfyUI-Sharp
Installation
Three options, in order of speed → reliability:
- ComfyUI Manager (recommended) — search for
Sharpin the Manager and click Install from the highest version displayed. If that doesn't work, try nightly. - Manager via Git URL — in ComfyUI Manager: "Install via Git URL" with
https://github.com/PozzettiAndrea/ComfyUI-Sharp.git. - Manual (most reliable):
cd ComfyUI/custom_nodes git clone https://github.com/PozzettiAndrea/ComfyUI-Sharp.git cd ComfyUI-Sharp pip install -r requirements.txt --upgrade python install.py
Please report any problems you hit during installation or use of my nodes — open a Discussion or Issue. Very grateful for your help! 🙏
ComfyUI wrapper for SHARP by Apple - monocular 3D Gaussian Splatting in under 1 second.
2 Example workflows.
Workflow 1: standard/user input focal length.

https://github.com/user-attachments/assets/479fb066-4d40-4d7c-a8d4-d1224fc22efa
Workflow 2: focal length extraction from exif data.
https://github.com/user-attachments/assets/b0c3e196-aa93-4380-8f8b-9c19b833b818
Note: for PLY inference this model is good on its own, but for the Gaussian Viewer node, you're going to need to install this node as well! https://github.com/PozzettiAndrea/ComfyUI-GeometryPack
Model auto-downloads on first run. For offline use, place sharp_2572gikvuh.pt in ComfyUI/models/sharp/.
Model architecture
Nodes
- Load SHARP Model - (down)Load the SHARP model
- SHARP Predict - Generate 3D Gaussians from a single image
- Load Image with EXIF - Load image and auto-extract focal length from EXIF (35mm equivalent)
Images with EXIF data get focal length auto-calculated when using the Load Image with EXIF node.
Community
Questions or feature requests? Open a Discussion on GitHub.
Join the Comfy3D Discord for help, updates, and chat about 3D workflows in ComfyUI.
Credits
Thanks to Apple for releasing SHARP as open source.

