Files
PozzettiAndrea-ComfyUI-Sharp/nodes/__init__.py
T
Andrea Pozzetti c37c544b33 Add SharpRayToPlanarDepth — standalone ray-distance → planar-Z node
Single-responsibility conversion node that sits between a depth source
(e.g. PanoramaSplit on an equirect depth pano) and SHARP's predict
node. Makes the convention boundary visible in the graph instead of
hiding it as a 'depth_convention' toggle inside the predict node.

Inputs:
  image       IMAGE       — per-face depth in ray-distance convention
  intrinsics  INTRINSICS  — per-face K (normalized or pixel, auto-detected)
  extrinsics  EXTRINSICS  — pass-through (optional, not used in the math)

Outputs:
  image       IMAGE       — per-face depth in planar-Z convention
  extrinsics  EXTRINSICS  — pass-through
  intrinsics  INTRINSICS  — pass-through, rescaled to pixel-K if input
                            was normalized (consistent units downstream)

Math: planar_z = ray_distance × cos_map where
  cos_map[u, v] = 1 / sqrt(((u-cx)/fx)² + ((v-cy)/fy)² + 1)

Inherits the same fx<2.0 normalized-K sniff added to the three Sharp
predict nodes earlier this cycle, so workflows that wire PanoPack's
utils3d-style normalized intrinsics get auto-rescaled to pixel-K.

Predict-side note: SharpPredictGaussiansFromMetricDepth still has the
'depth_convention' input -- now redundant when this node is used.
Workflows can drop the toggle (use default planar_z) and instead wire
ray-distance depth through SharpRayToPlanarDepth first. Keeping the
toggle in place so existing workflows don't break; deprecation /
removal is a later cleanup.
2026-05-29 00:17:23 +02:00

79 lines
4.9 KiB
Python

"""ComfyUI-Sharp nodes aggregation."""
from .load_model import NODE_CLASS_MAPPINGS as LOAD_MODEL_MAPPINGS
from .load_model import NODE_DISPLAY_NAME_MAPPINGS as LOAD_MODEL_DISPLAY_MAPPINGS
from .predict import NODE_CLASS_MAPPINGS as PREDICT_MAPPINGS
from .predict import NODE_DISPLAY_NAME_MAPPINGS as PREDICT_DISPLAY_MAPPINGS
from .load_image_exif import NODE_CLASS_MAPPINGS as LOAD_IMAGE_EXIF_MAPPINGS
from .load_image_exif import NODE_DISPLAY_NAME_MAPPINGS as LOAD_IMAGE_EXIF_DISPLAY_MAPPINGS
from .sample_panorama import NODE_CLASS_MAPPINGS as SAMPLE_PANORAMA_MAPPINGS
from .sample_panorama import NODE_DISPLAY_NAME_MAPPINGS as SAMPLE_PANORAMA_DISPLAY_MAPPINGS
from .merge_gaussians import NODE_CLASS_MAPPINGS as MERGE_GAUSSIANS_MAPPINGS
from .merge_gaussians import NODE_DISPLAY_NAME_MAPPINGS as MERGE_GAUSSIANS_DISPLAY_MAPPINGS
from .predict_depth import NODE_CLASS_MAPPINGS as PREDICT_DEPTH_MAPPINGS
from .predict_depth import NODE_DISPLAY_NAME_MAPPINGS as PREDICT_DEPTH_DISPLAY_MAPPINGS
from .project_depth_to_panorama import NODE_CLASS_MAPPINGS as PROJECT_DEPTH_MAPPINGS
from .project_depth_to_panorama import NODE_DISPLAY_NAME_MAPPINGS as PROJECT_DEPTH_DISPLAY_MAPPINGS
from .align_depth_maps import NODE_CLASS_MAPPINGS as ALIGN_DEPTH_MAPPINGS
from .align_depth_maps import NODE_DISPLAY_NAME_MAPPINGS as ALIGN_DEPTH_DISPLAY_MAPPINGS
from .panorama_cube_split import NODE_CLASS_MAPPINGS as PANORAMA_CUBE_SPLIT_MAPPINGS
from .panorama_cube_split import NODE_DISPLAY_NAME_MAPPINGS as PANORAMA_CUBE_SPLIT_DISPLAY_MAPPINGS
from .refined_depth_from_gaussians import NODE_CLASS_MAPPINGS as REFINED_DEPTH_MAPPINGS
from .refined_depth_from_gaussians import NODE_DISPLAY_NAME_MAPPINGS as REFINED_DEPTH_DISPLAY_MAPPINGS
from .predict_gaussian_attrs import NODE_CLASS_MAPPINGS as PREDICT_ATTRS_MAPPINGS
from .predict_gaussian_attrs import NODE_DISPLAY_NAME_MAPPINGS as PREDICT_ATTRS_DISPLAY_MAPPINGS
from .predict_metric_depth import NODE_CLASS_MAPPINGS as PREDICT_MDEPTH_MAPPINGS
from .predict_metric_depth import NODE_DISPLAY_NAME_MAPPINGS as PREDICT_MDEPTH_DISPLAY_MAPPINGS
from .predict_gaussians_from_depth import NODE_CLASS_MAPPINGS as PREDICT_GFD_MAPPINGS
from .predict_gaussians_from_depth import NODE_DISPLAY_NAME_MAPPINGS as PREDICT_GFD_DISPLAY_MAPPINGS
from .predict_foreground import NODE_CLASS_MAPPINGS as PREDICT_FG_MAPPINGS
from .predict_foreground import NODE_DISPLAY_NAME_MAPPINGS as PREDICT_FG_DISPLAY_MAPPINGS
from .image_attrs_to_ply import NODE_CLASS_MAPPINGS as IMAGE_ATTRS_MAPPINGS
from .image_attrs_to_ply import NODE_DISPLAY_NAME_MAPPINGS as IMAGE_ATTRS_DISPLAY_MAPPINGS
from .scale_image_values import NODE_CLASS_MAPPINGS as SCALE_IMAGE_MAPPINGS
from .scale_image_values import NODE_DISPLAY_NAME_MAPPINGS as SCALE_IMAGE_DISPLAY_MAPPINGS
from .ray_to_planar_depth import NODE_CLASS_MAPPINGS as RAY_TO_PLANAR_MAPPINGS
from .ray_to_planar_depth import NODE_DISPLAY_NAME_MAPPINGS as RAY_TO_PLANAR_DISPLAY_MAPPINGS
# Aggregate all node mappings
NODE_CLASS_MAPPINGS = {}
NODE_DISPLAY_NAME_MAPPINGS = {}
NODE_CLASS_MAPPINGS.update(LOAD_MODEL_MAPPINGS)
NODE_CLASS_MAPPINGS.update(PREDICT_MAPPINGS)
NODE_CLASS_MAPPINGS.update(LOAD_IMAGE_EXIF_MAPPINGS)
NODE_CLASS_MAPPINGS.update(SAMPLE_PANORAMA_MAPPINGS)
NODE_CLASS_MAPPINGS.update(MERGE_GAUSSIANS_MAPPINGS)
NODE_CLASS_MAPPINGS.update(PREDICT_DEPTH_MAPPINGS)
NODE_CLASS_MAPPINGS.update(PROJECT_DEPTH_MAPPINGS)
NODE_CLASS_MAPPINGS.update(ALIGN_DEPTH_MAPPINGS)
NODE_CLASS_MAPPINGS.update(PANORAMA_CUBE_SPLIT_MAPPINGS)
NODE_CLASS_MAPPINGS.update(REFINED_DEPTH_MAPPINGS)
NODE_CLASS_MAPPINGS.update(PREDICT_ATTRS_MAPPINGS)
NODE_CLASS_MAPPINGS.update(PREDICT_MDEPTH_MAPPINGS)
NODE_CLASS_MAPPINGS.update(PREDICT_GFD_MAPPINGS)
NODE_CLASS_MAPPINGS.update(PREDICT_FG_MAPPINGS)
NODE_CLASS_MAPPINGS.update(IMAGE_ATTRS_MAPPINGS)
NODE_CLASS_MAPPINGS.update(SCALE_IMAGE_MAPPINGS)
NODE_CLASS_MAPPINGS.update(RAY_TO_PLANAR_MAPPINGS)
NODE_DISPLAY_NAME_MAPPINGS.update(LOAD_MODEL_DISPLAY_MAPPINGS)
NODE_DISPLAY_NAME_MAPPINGS.update(PREDICT_DISPLAY_MAPPINGS)
NODE_DISPLAY_NAME_MAPPINGS.update(LOAD_IMAGE_EXIF_DISPLAY_MAPPINGS)
NODE_DISPLAY_NAME_MAPPINGS.update(SAMPLE_PANORAMA_DISPLAY_MAPPINGS)
NODE_DISPLAY_NAME_MAPPINGS.update(MERGE_GAUSSIANS_DISPLAY_MAPPINGS)
NODE_DISPLAY_NAME_MAPPINGS.update(PREDICT_DEPTH_DISPLAY_MAPPINGS)
NODE_DISPLAY_NAME_MAPPINGS.update(PROJECT_DEPTH_DISPLAY_MAPPINGS)
NODE_DISPLAY_NAME_MAPPINGS.update(ALIGN_DEPTH_DISPLAY_MAPPINGS)
NODE_DISPLAY_NAME_MAPPINGS.update(PANORAMA_CUBE_SPLIT_DISPLAY_MAPPINGS)
NODE_DISPLAY_NAME_MAPPINGS.update(REFINED_DEPTH_DISPLAY_MAPPINGS)
NODE_DISPLAY_NAME_MAPPINGS.update(PREDICT_ATTRS_DISPLAY_MAPPINGS)
NODE_DISPLAY_NAME_MAPPINGS.update(PREDICT_MDEPTH_DISPLAY_MAPPINGS)
NODE_DISPLAY_NAME_MAPPINGS.update(PREDICT_GFD_DISPLAY_MAPPINGS)
NODE_DISPLAY_NAME_MAPPINGS.update(PREDICT_FG_DISPLAY_MAPPINGS)
NODE_DISPLAY_NAME_MAPPINGS.update(IMAGE_ATTRS_DISPLAY_MAPPINGS)
NODE_DISPLAY_NAME_MAPPINGS.update(SCALE_IMAGE_DISPLAY_MAPPINGS)
NODE_DISPLAY_NAME_MAPPINGS.update(RAY_TO_PLANAR_DISPLAY_MAPPINGS)
__all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS"]