Repository files navigation

camera-comfyUI

Ask DeepWikiComfyUI Custom NodesCamera Movement Demo

Custom ComfyUI nodes for advanced reprojections, point cloud processing, and camera-driven workflows.


Table of Contents


Overview

A collection of ComfyUI custom nodes to handle diverse camera projections (pinhole, fisheye, equirectangular), depth‐to‐point cloud conversions, dynamic reprojections, and inpainting/outpainting pipelines. Use these nodes to craft complex VR and 3D‐aware image transformations with minimal setup.

Features

  • Continuous Reprojection: Transform images and depth maps between projection models.
  • 🌐 Point Cloud Pipelines: Convert depth to 3D, clean, transform, and reproject point clouds.
  • 🎥 Camera Motion & Outpainting: Animate camera trajectories, perform text‐guided outpainting in arbitrary views.
  • 📦 Modular Nodes: Groupable ComfyUI nodes for flexible graph composition.
  • 🛠️ Example Workflows: Ready‐to‐use JSON workflows demonstrating reprojection, inpainting, and view synthesis.

Installation

  1. Clone into your ComfyUI custom nodes folder:

    git clone https://github.com/Alexankharin/camera-comfyUI.git custom_nodes/camera-comfyUI
  2. System Dependencies (Ubuntu):

    sudo apt-get update && sudo apt-get install build-essential ffmpeg libsm6 libxext6 -y
  3. Python Requirements:

    pip install -r custom_nodes/camera-comfyUI/requirements.txt
    • Optional:open3d for GUI point cloud tools.
  4. Additional Nodes (for certain workflows):

    • Clone the following repositories directly into your custom_nodes folder:
    • Important: If the ComfyUI-Flux-Inpainting repository is cloned as ComfyUI-Flux-Inpainting-main, rename the folder to inpainting_flux:
      mv custom_nodes/ComfyUI-Flux-Inpainting-main custom_nodes/inpainting_flux
  5. Flux Models (Hugging Face):

    pip install huggingface_hub
    huggingface-cli login
  6. Restart ComfyUI to load new nodes.


Node Categories

  • Reprojection Nodes

    • ReprojectImage, ReprojectDepth, OutpaintAnyProjection
  • Matrix Nodes

    • TransformToMatrix, TransformToMatrixManual
  • Depth Nodes

    • DepthEstimatorNode, DepthToImageNode, ZDepthToRayDepthNode
    • CombineDepthsNode, DepthRenormalizer, FisheyeDepthEstimator
  • Point Cloud Nodes

    • DepthToPointCloud, TransformPointCloud, ProjectPointCloud, PointCloudUnion
    • PointCloudCleaner, LoadPointCloud, SavePointCloud, ProjectAndClean
  • Trajectory Nodes

    • CameraMotionNode, CameraInterpolationNode, CameraTrajectoryNode
    • SaveTrajectory, LoadTrajectory, PointcloudTrajectoryEnricher

Node Reference

(See inline tooltips in ComfyUI for parameter details.)

NodeDescription
ReprojectImageReproject image between projection types (Pinhole, Fisheye, Equirectangular).
ReprojectDepthSame as above but for depth maps.
OutpaintAnyProjectionExtracts a patch in any view, outpaints (Flux), reprojects back.
DepthEstimatorNodeRuns HF Depth‐Anything-v2 models to produce metric depth.
DepthToPointCloudConverts Depth and image to → 3D point cloud tensor (N×7).
DepthToImageNodeConverts depth to image (N×3) using a color map.
ZDepthToRayDepthNodeConverts Z-depth (output of metric-depth-anything) to ray depth to compensate lens curvature.
TransformPointCloudApplies 4×4 rotation matrix to point cloud.
ProjectPointCloudZ-buffer–based projection of point cloud into image + mask.
PointCloudCleanerRemoves isolated points via voxel filtering.
PointCloudUnionCombines multiple point clouds into one.
LoadPointCloudLoads a point cloud from .npy or .ply format.
SavePointCloudSaves a point cloud to .npy or .ply format.
CameraMotionNodeGenerates image and mask sequences along a camera trajectory with optional mask dilation/inversion.
CameraInterpolationNodeBuilds a trajectory tensor from two poses.
CameraTrajectoryNodeInteractive Open3D GUI for recording camera waypoints.
SaveTrajectorySaves a trajectory tensor to a file.
LoadTrajectoryLoads a trajectory tensor from a file.
VideoCameraMotionSequenceProcesses video frames and depth maps along a camera trajectory, generating reprojected outputs.
DepthFramesToVideoConverts a sequence of depth maps into video frame tensors for saving.
VideoMetricDepthEstimateEstimates metric depth for a sequence of frames using VideoDepthAnything.

Workflows

A set of JSON workflows illustrating typical use cases. Each workflow lives in workflows/ and can be loaded directly in ComfyUI.

WorkflowDescription
demo_camera_workflow.jsonMasked reprojection demo: pinhole → fisheye/equirect
outpainting_fisheye.jsonText‐guided fisheye outpainting (built‐in inpaint node)
outpainting_fisheye_flux.jsonFlux‐based outpainting with clear reprojection scheme
Outpaint_node_test.jsonTest harness for the universal outpaint node
Outpaint_fisheye180.json180° fisheye outpainting via OutpaintAnyProjection
Fisheye_depth_workflow.jsonFisheye → metric depth → point cloud → PLY export
Pointcloud.jsonMetric‐depth‐anything v2 → point cloud → camera view synthesis
pointcloud_inpaint.jsonInpaint + backproject to 3D for dynamic camera motion videos
Pointcloud_walker.jsonGUI‐based camera control via Open3D
sbs180_workflow.jsonGenerate stereo (side-by-side) wide-angle/fisheye/equirectangular stereo pairs from a high-res input
video_camera.jsonCamera trajectory movement workflow using wan-vace for video inpainting.

Example Workflows

1. demo_camera_workflow.json

Basic reprojection pipeline: apply masks, rotate pinhole camera, outpaint fisheye, move point cloud, reproject.

Initial imagePinhole Rotation

2. outpainting_fisheye.json

Simplest text‐guided fisheye outpainting built with the core inpaint node.

3. outpainting_fisheye_flux.json

Flux Inpainting ensures sharper results and explicit reprojection stages.

Flux Mask

4. Outpaint_fisheye180.json

180° fisheye outpainting via the universal OutpaintAnyProjection node.

Flux Dev

5. Fisheye_depth_workflow.json

Convert fisheye images to metric depth and generate a PLY point cloud.

Fisheye Depth→PointCloud

6. Outpaint_node_test.json

Flux Dev

Quick test for the universal outpaint node in arbitrary views and camera movement

7. Pointcloud.json

Depth→PointCloud pipeline with interactive camera movement and reprojection views.

PointCloud Demo

8. pointcloud_inpaint.json

Inpaint image with shifted camera and backproject for dynamic camera‐driven video outputs.

PointCloud Inpaint

PointCloud Inpaint Video

9. sbs180_workflow.json

Take a wide-angle (fisheye or equirectangular) high-resolution (e.g., 4096×4096) image and generate a stereo pair by moving the camera horizontally. The output is a wide-angle stereo pair (side-by-side), simulating a fisheye or equirectangular stereo camera.

Equirectangular Stereo Demo

10. Pointcloud_walker.json

Interactive Open3D-based GUI for walking and setting camera trajectory inside pointcloud.

11. video_camera.json

This workflow demonstrates camera trajectory movement using the wan-vace video inpainting model. It generates smooth camera movements along a trajectory while filling missing regions with high-quality inpainting.

Camera Movement Demo

Trajectory Concept

A trajectory in camera-comfyUI is a sequence of camera poses, each represented as a 4×4 transformation matrix. This set of matrices defines the path and orientation of the camera through 3D space, enabling smooth and complex camera movements for view synthesis, point cloud rendering, and video generation.

Creating Trajectories

There are two main ways to create a trajectory:

  • Camera Matrices Interpolation:
    Define two or more camera poses (as matrices), and interpolate between them to generate a smooth path. The CameraInterpolationNode automates this process, producing a trajectory tensor for use in camera motion nodes.

  • Walking in Open3D Environment:
    Use the interactive Open3D GUI (CameraTrajectoryNode) to "walk" through the point cloud. As you move the camera, waypoints (poses) are recorded, forming a trajectory that can be exported and reused.

Using Trajectories

The CameraMotionNode takes a trajectory (set of matrices) and interpolates camera positions and orientations along it, producing smooth camera movements for rendering sequences or videos.


Point Cloud Formats

Point clouds can be saved and loaded in two formats:

  • .npy: Numpy array format (fast, preserves all tensor data, recommended for internal pipelines).
  • .ply: Polygon File Format (widely supported, viewable in external 3D tools).

Use the SavePointCloud and LoadPointCloud nodes to handle I/O operations in either format.


Contributing

Contributions welcome! Please open issues or PRs to add features, improve docs, or refine workflows.

TODO List

  • Add processing to pointcloud or depthmap to remove outlier and lonely points at depth borders.
  • Use built-in comfyUI mask type an image.
  • Unite nodes into groups to simplify workflows.
  • Create a single workflow for view synthesis.
  • Implement easier and more flexible camera control - more complex camera movements with more than 2 points.
  • Add more examples and documentation for each node.
  • Add pointcloud union
  • Fix imports for renamed folders (e.g., inpainting_flux)
  • Integrate camera movement pipeline with video models (e.g., wan2.1) for smooth, high-quality inpainting along camera trajectories.

About

ComfyUI nodes for the different projection models and camera movements

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

camera-comfyUI

Ask DeepWikiComfyUI Custom NodesCamera Movement Demo

Custom ComfyUI nodes for advanced reprojections, point cloud processing, and camera-driven workflows.


Table of Contents


Overview

A collection of ComfyUI custom nodes to handle diverse camera projections (pinhole, fisheye, equirectangular), depth‐to‐point cloud conversions, dynamic reprojections, and inpainting/outpainting pipelines. Use these nodes to craft complex VR and 3D‐aware image transformations with minimal setup.

Features

  • Continuous Reprojection: Transform images and depth maps between projection models.
  • 🌐 Point Cloud Pipelines: Convert depth to 3D, clean, transform, and reproject point clouds.
  • 🎥 Camera Motion & Outpainting: Animate camera trajectories, perform text‐guided outpainting in arbitrary views.
  • 📦 Modular Nodes: Groupable ComfyUI nodes for flexible graph composition.
  • 🛠️ Example Workflows: Ready‐to‐use JSON workflows demonstrating reprojection, inpainting, and view synthesis.

Installation

  1. Clone into your ComfyUI custom nodes folder:

    git clone https://github.com/Alexankharin/camera-comfyUI.git custom_nodes/camera-comfyUI
  2. System Dependencies (Ubuntu):

    sudo apt-get update && sudo apt-get install build-essential ffmpeg libsm6 libxext6 -y
  3. Python Requirements:

    pip install -r custom_nodes/camera-comfyUI/requirements.txt
    • Optional:open3d for GUI point cloud tools.
  4. Additional Nodes (for certain workflows):

    • Clone the following repositories directly into your custom_nodes folder:
    • Important: If the ComfyUI-Flux-Inpainting repository is cloned as ComfyUI-Flux-Inpainting-main, rename the folder to inpainting_flux:
      mv custom_nodes/ComfyUI-Flux-Inpainting-main custom_nodes/inpainting_flux
  5. Flux Models (Hugging Face):

    pip install huggingface_hub
    huggingface-cli login
  6. Restart ComfyUI to load new nodes.


Node Categories

  • Reprojection Nodes

    • ReprojectImage, ReprojectDepth, OutpaintAnyProjection
  • Matrix Nodes

    • TransformToMatrix, TransformToMatrixManual
  • Depth Nodes

    • DepthEstimatorNode, DepthToImageNode, ZDepthToRayDepthNode
    • CombineDepthsNode, DepthRenormalizer, FisheyeDepthEstimator
  • Point Cloud Nodes

    • DepthToPointCloud, TransformPointCloud, ProjectPointCloud, PointCloudUnion
    • PointCloudCleaner, LoadPointCloud, SavePointCloud, ProjectAndClean
  • Trajectory Nodes

    • CameraMotionNode, CameraInterpolationNode, CameraTrajectoryNode
    • SaveTrajectory, LoadTrajectory, PointcloudTrajectoryEnricher

Node Reference

(See inline tooltips in ComfyUI for parameter details.)

NodeDescription
ReprojectImageReproject image between projection types (Pinhole, Fisheye, Equirectangular).
ReprojectDepthSame as above but for depth maps.
OutpaintAnyProjectionExtracts a patch in any view, outpaints (Flux), reprojects back.
DepthEstimatorNodeRuns HF Depth‐Anything-v2 models to produce metric depth.
DepthToPointCloudConverts Depth and image to → 3D point cloud tensor (N×7).
DepthToImageNodeConverts depth to image (N×3) using a color map.
ZDepthToRayDepthNodeConverts Z-depth (output of metric-depth-anything) to ray depth to compensate lens curvature.
TransformPointCloudApplies 4×4 rotation matrix to point cloud.
ProjectPointCloudZ-buffer–based projection of point cloud into image + mask.
PointCloudCleanerRemoves isolated points via voxel filtering.
PointCloudUnionCombines multiple point clouds into one.
LoadPointCloudLoads a point cloud from .npy or .ply format.
SavePointCloudSaves a point cloud to .npy or .ply format.
CameraMotionNodeGenerates image and mask sequences along a camera trajectory with optional mask dilation/inversion.
CameraInterpolationNodeBuilds a trajectory tensor from two poses.
CameraTrajectoryNodeInteractive Open3D GUI for recording camera waypoints.
SaveTrajectorySaves a trajectory tensor to a file.
LoadTrajectoryLoads a trajectory tensor from a file.
VideoCameraMotionSequenceProcesses video frames and depth maps along a camera trajectory, generating reprojected outputs.
DepthFramesToVideoConverts a sequence of depth maps into video frame tensors for saving.
VideoMetricDepthEstimateEstimates metric depth for a sequence of frames using VideoDepthAnything.

Workflows

A set of JSON workflows illustrating typical use cases. Each workflow lives in workflows/ and can be loaded directly in ComfyUI.

WorkflowDescription
demo_camera_workflow.jsonMasked reprojection demo: pinhole → fisheye/equirect
outpainting_fisheye.jsonText‐guided fisheye outpainting (built‐in inpaint node)
outpainting_fisheye_flux.jsonFlux‐based outpainting with clear reprojection scheme
Outpaint_node_test.jsonTest harness for the universal outpaint node
Outpaint_fisheye180.json180° fisheye outpainting via OutpaintAnyProjection
Fisheye_depth_workflow.jsonFisheye → metric depth → point cloud → PLY export
Pointcloud.jsonMetric‐depth‐anything v2 → point cloud → camera view synthesis
pointcloud_inpaint.jsonInpaint + backproject to 3D for dynamic camera motion videos
Pointcloud_walker.jsonGUI‐based camera control via Open3D
sbs180_workflow.jsonGenerate stereo (side-by-side) wide-angle/fisheye/equirectangular stereo pairs from a high-res input
video_camera.jsonCamera trajectory movement workflow using wan-vace for video inpainting.

Example Workflows

1. demo_camera_workflow.json

Basic reprojection pipeline: apply masks, rotate pinhole camera, outpaint fisheye, move point cloud, reproject.

Initial imagePinhole Rotation

2. outpainting_fisheye.json

Simplest text‐guided fisheye outpainting built with the core inpaint node.

3. outpainting_fisheye_flux.json

Flux Inpainting ensures sharper results and explicit reprojection stages.

Flux Mask

4. Outpaint_fisheye180.json

180° fisheye outpainting via the universal OutpaintAnyProjection node.

Flux Dev

5. Fisheye_depth_workflow.json

Convert fisheye images to metric depth and generate a PLY point cloud.

Fisheye Depth→PointCloud

6. Outpaint_node_test.json

Flux Dev

Quick test for the universal outpaint node in arbitrary views and camera movement

7. Pointcloud.json

Depth→PointCloud pipeline with interactive camera movement and reprojection views.

PointCloud Demo

8. pointcloud_inpaint.json

Inpaint image with shifted camera and backproject for dynamic camera‐driven video outputs.

PointCloud Inpaint

PointCloud Inpaint Video

9. sbs180_workflow.json

Take a wide-angle (fisheye or equirectangular) high-resolution (e.g., 4096×4096) image and generate a stereo pair by moving the camera horizontally. The output is a wide-angle stereo pair (side-by-side), simulating a fisheye or equirectangular stereo camera.

Equirectangular Stereo Demo

10. Pointcloud_walker.json

Interactive Open3D-based GUI for walking and setting camera trajectory inside pointcloud.

11. video_camera.json

This workflow demonstrates camera trajectory movement using the wan-vace video inpainting model. It generates smooth camera movements along a trajectory while filling missing regions with high-quality inpainting.

Camera Movement Demo

Trajectory Concept

A trajectory in camera-comfyUI is a sequence of camera poses, each represented as a 4×4 transformation matrix. This set of matrices defines the path and orientation of the camera through 3D space, enabling smooth and complex camera movements for view synthesis, point cloud rendering, and video generation.

Creating Trajectories

There are two main ways to create a trajectory:

  • Camera Matrices Interpolation:
    Define two or more camera poses (as matrices), and interpolate between them to generate a smooth path. The CameraInterpolationNode automates this process, producing a trajectory tensor for use in camera motion nodes.

  • Walking in Open3D Environment:
    Use the interactive Open3D GUI (CameraTrajectoryNode) to "walk" through the point cloud. As you move the camera, waypoints (poses) are recorded, forming a trajectory that can be exported and reused.

Using Trajectories

The CameraMotionNode takes a trajectory (set of matrices) and interpolates camera positions and orientations along it, producing smooth camera movements for rendering sequences or videos.


Point Cloud Formats

Point clouds can be saved and loaded in two formats:

  • .npy: Numpy array format (fast, preserves all tensor data, recommended for internal pipelines).
  • .ply: Polygon File Format (widely supported, viewable in external 3D tools).

Use the SavePointCloud and LoadPointCloud nodes to handle I/O operations in either format.


Contributing

Contributions welcome! Please open issues or PRs to add features, improve docs, or refine workflows.

TODO List

  • Add processing to pointcloud or depthmap to remove outlier and lonely points at depth borders.
  • Use built-in comfyUI mask type an image.
  • Unite nodes into groups to simplify workflows.
  • Create a single workflow for view synthesis.
  • Implement easier and more flexible camera control - more complex camera movements with more than 2 points.
  • Add more examples and documentation for each node.
  • Add pointcloud union
  • Fix imports for renamed folders (e.g., inpainting_flux)
  • Integrate camera movement pipeline with video models (e.g., wan2.1) for smooth, high-quality inpainting along camera trajectories.

About

ComfyUI nodes for the different projection models and camera movements

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

camera-comfyUI

Ask DeepWikiComfyUI Custom NodesCamera Movement Demo

Custom ComfyUI nodes for advanced reprojections, point cloud processing, and camera-driven workflows.


Table of Contents


Overview

A collection of ComfyUI custom nodes to handle diverse camera projections (pinhole, fisheye, equirectangular), depth‐to‐point cloud conversions, dynamic reprojections, and inpainting/outpainting pipelines. Use these nodes to craft complex VR and 3D‐aware image transformations with minimal setup.

Features

  • Continuous Reprojection: Transform images and depth maps between projection models.
  • 🌐 Point Cloud Pipelines: Convert depth to 3D, clean, transform, and reproject point clouds.
  • 🎥 Camera Motion & Outpainting: Animate camera trajectories, perform text‐guided outpainting in arbitrary views.
  • 📦 Modular Nodes: Groupable ComfyUI nodes for flexible graph composition.
  • 🛠️ Example Workflows: Ready‐to‐use JSON workflows demonstrating reprojection, inpainting, and view synthesis.

Installation

  1. Clone into your ComfyUI custom nodes folder:

    git clone https://github.com/Alexankharin/camera-comfyUI.git custom_nodes/camera-comfyUI
  2. System Dependencies (Ubuntu):

    sudo apt-get update && sudo apt-get install build-essential ffmpeg libsm6 libxext6 -y
  3. Python Requirements:

    pip install -r custom_nodes/camera-comfyUI/requirements.txt
    • Optional:open3d for GUI point cloud tools.
  4. Additional Nodes (for certain workflows):

    • Clone the following repositories directly into your custom_nodes folder:
    • Important: If the ComfyUI-Flux-Inpainting repository is cloned as ComfyUI-Flux-Inpainting-main, rename the folder to inpainting_flux:
      mv custom_nodes/ComfyUI-Flux-Inpainting-main custom_nodes/inpainting_flux
  5. Flux Models (Hugging Face):

    pip install huggingface_hub
    huggingface-cli login
  6. Restart ComfyUI to load new nodes.


Node Categories

  • Reprojection Nodes

    • ReprojectImage, ReprojectDepth, OutpaintAnyProjection
  • Matrix Nodes

    • TransformToMatrix, TransformToMatrixManual
  • Depth Nodes

    • DepthEstimatorNode, DepthToImageNode, ZDepthToRayDepthNode
    • CombineDepthsNode, DepthRenormalizer, FisheyeDepthEstimator
  • Point Cloud Nodes

    • DepthToPointCloud, TransformPointCloud, ProjectPointCloud, PointCloudUnion
    • PointCloudCleaner, LoadPointCloud, SavePointCloud, ProjectAndClean
  • Trajectory Nodes

    • CameraMotionNode, CameraInterpolationNode, CameraTrajectoryNode
    • SaveTrajectory, LoadTrajectory, PointcloudTrajectoryEnricher

Node Reference

(See inline tooltips in ComfyUI for parameter details.)

NodeDescription
ReprojectImageReproject image between projection types (Pinhole, Fisheye, Equirectangular).
ReprojectDepthSame as above but for depth maps.
OutpaintAnyProjectionExtracts a patch in any view, outpaints (Flux), reprojects back.
DepthEstimatorNodeRuns HF Depth‐Anything-v2 models to produce metric depth.
DepthToPointCloudConverts Depth and image to → 3D point cloud tensor (N×7).
DepthToImageNodeConverts depth to image (N×3) using a color map.
ZDepthToRayDepthNodeConverts Z-depth (output of metric-depth-anything) to ray depth to compensate lens curvature.
TransformPointCloudApplies 4×4 rotation matrix to point cloud.
ProjectPointCloudZ-buffer–based projection of point cloud into image + mask.
PointCloudCleanerRemoves isolated points via voxel filtering.
PointCloudUnionCombines multiple point clouds into one.
LoadPointCloudLoads a point cloud from .npy or .ply format.
SavePointCloudSaves a point cloud to .npy or .ply format.
CameraMotionNodeGenerates image and mask sequences along a camera trajectory with optional mask dilation/inversion.
CameraInterpolationNodeBuilds a trajectory tensor from two poses.
CameraTrajectoryNodeInteractive Open3D GUI for recording camera waypoints.
SaveTrajectorySaves a trajectory tensor to a file.
LoadTrajectoryLoads a trajectory tensor from a file.
VideoCameraMotionSequenceProcesses video frames and depth maps along a camera trajectory, generating reprojected outputs.
DepthFramesToVideoConverts a sequence of depth maps into video frame tensors for saving.
VideoMetricDepthEstimateEstimates metric depth for a sequence of frames using VideoDepthAnything.

Workflows

A set of JSON workflows illustrating typical use cases. Each workflow lives in workflows/ and can be loaded directly in ComfyUI.

WorkflowDescription
demo_camera_workflow.jsonMasked reprojection demo: pinhole → fisheye/equirect
outpainting_fisheye.jsonText‐guided fisheye outpainting (built‐in inpaint node)
outpainting_fisheye_flux.jsonFlux‐based outpainting with clear reprojection scheme
Outpaint_node_test.jsonTest harness for the universal outpaint node
Outpaint_fisheye180.json180° fisheye outpainting via OutpaintAnyProjection
Fisheye_depth_workflow.jsonFisheye → metric depth → point cloud → PLY export
Pointcloud.jsonMetric‐depth‐anything v2 → point cloud → camera view synthesis
pointcloud_inpaint.jsonInpaint + backproject to 3D for dynamic camera motion videos
Pointcloud_walker.jsonGUI‐based camera control via Open3D
sbs180_workflow.jsonGenerate stereo (side-by-side) wide-angle/fisheye/equirectangular stereo pairs from a high-res input
video_camera.jsonCamera trajectory movement workflow using wan-vace for video inpainting.

Example Workflows

1. demo_camera_workflow.json

Basic reprojection pipeline: apply masks, rotate pinhole camera, outpaint fisheye, move point cloud, reproject.

Initial imagePinhole Rotation

2. outpainting_fisheye.json

Simplest text‐guided fisheye outpainting built with the core inpaint node.

3. outpainting_fisheye_flux.json

Flux Inpainting ensures sharper results and explicit reprojection stages.

Flux Mask

4. Outpaint_fisheye180.json

180° fisheye outpainting via the universal OutpaintAnyProjection node.

Flux Dev

5. Fisheye_depth_workflow.json

Convert fisheye images to metric depth and generate a PLY point cloud.

Fisheye Depth→PointCloud

6. Outpaint_node_test.json

Flux Dev

Quick test for the universal outpaint node in arbitrary views and camera movement

7. Pointcloud.json

Depth→PointCloud pipeline with interactive camera movement and reprojection views.

PointCloud Demo

8. pointcloud_inpaint.json

Inpaint image with shifted camera and backproject for dynamic camera‐driven video outputs.

PointCloud Inpaint

PointCloud Inpaint Video

9. sbs180_workflow.json

Take a wide-angle (fisheye or equirectangular) high-resolution (e.g., 4096×4096) image and generate a stereo pair by moving the camera horizontally. The output is a wide-angle stereo pair (side-by-side), simulating a fisheye or equirectangular stereo camera.

Equirectangular Stereo Demo

10. Pointcloud_walker.json

Interactive Open3D-based GUI for walking and setting camera trajectory inside pointcloud.

11. video_camera.json

This workflow demonstrates camera trajectory movement using the wan-vace video inpainting model. It generates smooth camera movements along a trajectory while filling missing regions with high-quality inpainting.

Camera Movement Demo

Trajectory Concept

A trajectory in camera-comfyUI is a sequence of camera poses, each represented as a 4×4 transformation matrix. This set of matrices defines the path and orientation of the camera through 3D space, enabling smooth and complex camera movements for view synthesis, point cloud rendering, and video generation.

Creating Trajectories

There are two main ways to create a trajectory:

  • Camera Matrices Interpolation:
    Define two or more camera poses (as matrices), and interpolate between them to generate a smooth path. The CameraInterpolationNode automates this process, producing a trajectory tensor for use in camera motion nodes.

  • Walking in Open3D Environment:
    Use the interactive Open3D GUI (CameraTrajectoryNode) to "walk" through the point cloud. As you move the camera, waypoints (poses) are recorded, forming a trajectory that can be exported and reused.

Using Trajectories

The CameraMotionNode takes a trajectory (set of matrices) and interpolates camera positions and orientations along it, producing smooth camera movements for rendering sequences or videos.


Point Cloud Formats

Point clouds can be saved and loaded in two formats:

  • .npy: Numpy array format (fast, preserves all tensor data, recommended for internal pipelines).
  • .ply: Polygon File Format (widely supported, viewable in external 3D tools).

Use the SavePointCloud and LoadPointCloud nodes to handle I/O operations in either format.


Contributing

Contributions welcome! Please open issues or PRs to add features, improve docs, or refine workflows.

TODO List

  • Add processing to pointcloud or depthmap to remove outlier and lonely points at depth borders.
  • Use built-in comfyUI mask type an image.
  • Unite nodes into groups to simplify workflows.
  • Create a single workflow for view synthesis.
  • Implement easier and more flexible camera control - more complex camera movements with more than 2 points.
  • Add more examples and documentation for each node.
  • Add pointcloud union
  • Fix imports for renamed folders (e.g., inpainting_flux)
  • Integrate camera movement pipeline with video models (e.g., wan2.1) for smooth, high-quality inpainting along camera trajectories.

About

ComfyUI nodes for the different projection models and camera movements

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

camera-comfyUI

Ask DeepWikiComfyUI Custom NodesCamera Movement Demo

Custom ComfyUI nodes for advanced reprojections, point cloud processing, and camera-driven workflows.


Table of Contents


Overview

A collection of ComfyUI custom nodes to handle diverse camera projections (pinhole, fisheye, equirectangular), depth‐to‐point cloud conversions, dynamic reprojections, and inpainting/outpainting pipelines. Use these nodes to craft complex VR and 3D‐aware image transformations with minimal setup.

Features

  • Continuous Reprojection: Transform images and depth maps between projection models.
  • 🌐 Point Cloud Pipelines: Convert depth to 3D, clean, transform, and reproject point clouds.
  • 🎥 Camera Motion & Outpainting: Animate camera trajectories, perform text‐guided outpainting in arbitrary views.
  • 📦 Modular Nodes: Groupable ComfyUI nodes for flexible graph composition.
  • 🛠️ Example Workflows: Ready‐to‐use JSON workflows demonstrating reprojection, inpainting, and view synthesis.

Installation

  1. Clone into your ComfyUI custom nodes folder:

    git clone https://github.com/Alexankharin/camera-comfyUI.git custom_nodes/camera-comfyUI
  2. System Dependencies (Ubuntu):

    sudo apt-get update && sudo apt-get install build-essential ffmpeg libsm6 libxext6 -y
  3. Python Requirements:

    pip install -r custom_nodes/camera-comfyUI/requirements.txt
    • Optional:open3d for GUI point cloud tools.
  4. Additional Nodes (for certain workflows):

    • Clone the following repositories directly into your custom_nodes folder:
    • Important: If the ComfyUI-Flux-Inpainting repository is cloned as ComfyUI-Flux-Inpainting-main, rename the folder to inpainting_flux:
      mv custom_nodes/ComfyUI-Flux-Inpainting-main custom_nodes/inpainting_flux
  5. Flux Models (Hugging Face):

    pip install huggingface_hub
    huggingface-cli login
  6. Restart ComfyUI to load new nodes.


Node Categories

  • Reprojection Nodes

    • ReprojectImage, ReprojectDepth, OutpaintAnyProjection
  • Matrix Nodes

    • TransformToMatrix, TransformToMatrixManual
  • Depth Nodes

    • DepthEstimatorNode, DepthToImageNode, ZDepthToRayDepthNode
    • CombineDepthsNode, DepthRenormalizer, FisheyeDepthEstimator
  • Point Cloud Nodes

    • DepthToPointCloud, TransformPointCloud, ProjectPointCloud, PointCloudUnion
    • PointCloudCleaner, LoadPointCloud, SavePointCloud, ProjectAndClean
  • Trajectory Nodes

    • CameraMotionNode, CameraInterpolationNode, CameraTrajectoryNode
    • SaveTrajectory, LoadTrajectory, PointcloudTrajectoryEnricher

Node Reference

(See inline tooltips in ComfyUI for parameter details.)

NodeDescription
ReprojectImageReproject image between projection types (Pinhole, Fisheye, Equirectangular).
ReprojectDepthSame as above but for depth maps.
OutpaintAnyProjectionExtracts a patch in any view, outpaints (Flux), reprojects back.
DepthEstimatorNodeRuns HF Depth‐Anything-v2 models to produce metric depth.
DepthToPointCloudConverts Depth and image to → 3D point cloud tensor (N×7).
DepthToImageNodeConverts depth to image (N×3) using a color map.
ZDepthToRayDepthNodeConverts Z-depth (output of metric-depth-anything) to ray depth to compensate lens curvature.
TransformPointCloudApplies 4×4 rotation matrix to point cloud.
ProjectPointCloudZ-buffer–based projection of point cloud into image + mask.
PointCloudCleanerRemoves isolated points via voxel filtering.
PointCloudUnionCombines multiple point clouds into one.
LoadPointCloudLoads a point cloud from .npy or .ply format.
SavePointCloudSaves a point cloud to .npy or .ply format.
CameraMotionNodeGenerates image and mask sequences along a camera trajectory with optional mask dilation/inversion.
CameraInterpolationNodeBuilds a trajectory tensor from two poses.
CameraTrajectoryNodeInteractive Open3D GUI for recording camera waypoints.
SaveTrajectorySaves a trajectory tensor to a file.
LoadTrajectoryLoads a trajectory tensor from a file.
VideoCameraMotionSequenceProcesses video frames and depth maps along a camera trajectory, generating reprojected outputs.
DepthFramesToVideoConverts a sequence of depth maps into video frame tensors for saving.
VideoMetricDepthEstimateEstimates metric depth for a sequence of frames using VideoDepthAnything.

Workflows

A set of JSON workflows illustrating typical use cases. Each workflow lives in workflows/ and can be loaded directly in ComfyUI.

WorkflowDescription
demo_camera_workflow.jsonMasked reprojection demo: pinhole → fisheye/equirect
outpainting_fisheye.jsonText‐guided fisheye outpainting (built‐in inpaint node)
outpainting_fisheye_flux.jsonFlux‐based outpainting with clear reprojection scheme
Outpaint_node_test.jsonTest harness for the universal outpaint node
Outpaint_fisheye180.json180° fisheye outpainting via OutpaintAnyProjection
Fisheye_depth_workflow.jsonFisheye → metric depth → point cloud → PLY export
Pointcloud.jsonMetric‐depth‐anything v2 → point cloud → camera view synthesis
pointcloud_inpaint.jsonInpaint + backproject to 3D for dynamic camera motion videos
Pointcloud_walker.jsonGUI‐based camera control via Open3D
sbs180_workflow.jsonGenerate stereo (side-by-side) wide-angle/fisheye/equirectangular stereo pairs from a high-res input
video_camera.jsonCamera trajectory movement workflow using wan-vace for video inpainting.

Example Workflows

1. demo_camera_workflow.json

Basic reprojection pipeline: apply masks, rotate pinhole camera, outpaint fisheye, move point cloud, reproject.

Initial imagePinhole Rotation

2. outpainting_fisheye.json

Simplest text‐guided fisheye outpainting built with the core inpaint node.

3. outpainting_fisheye_flux.json

Flux Inpainting ensures sharper results and explicit reprojection stages.

Flux Mask

4. Outpaint_fisheye180.json

180° fisheye outpainting via the universal OutpaintAnyProjection node.

Flux Dev

5. Fisheye_depth_workflow.json

Convert fisheye images to metric depth and generate a PLY point cloud.

Fisheye Depth→PointCloud

6. Outpaint_node_test.json

Flux Dev

Quick test for the universal outpaint node in arbitrary views and camera movement

7. Pointcloud.json

Depth→PointCloud pipeline with interactive camera movement and reprojection views.

PointCloud Demo

8. pointcloud_inpaint.json

Inpaint image with shifted camera and backproject for dynamic camera‐driven video outputs.

PointCloud Inpaint

PointCloud Inpaint Video

9. sbs180_workflow.json

Take a wide-angle (fisheye or equirectangular) high-resolution (e.g., 4096×4096) image and generate a stereo pair by moving the camera horizontally. The output is a wide-angle stereo pair (side-by-side), simulating a fisheye or equirectangular stereo camera.

Equirectangular Stereo Demo

10. Pointcloud_walker.json

Interactive Open3D-based GUI for walking and setting camera trajectory inside pointcloud.

11. video_camera.json

This workflow demonstrates camera trajectory movement using the wan-vace video inpainting model. It generates smooth camera movements along a trajectory while filling missing regions with high-quality inpainting.

Camera Movement Demo

Trajectory Concept

A trajectory in camera-comfyUI is a sequence of camera poses, each represented as a 4×4 transformation matrix. This set of matrices defines the path and orientation of the camera through 3D space, enabling smooth and complex camera movements for view synthesis, point cloud rendering, and video generation.

Creating Trajectories

There are two main ways to create a trajectory:

  • Camera Matrices Interpolation:
    Define two or more camera poses (as matrices), and interpolate between them to generate a smooth path. The CameraInterpolationNode automates this process, producing a trajectory tensor for use in camera motion nodes.

  • Walking in Open3D Environment:
    Use the interactive Open3D GUI (CameraTrajectoryNode) to "walk" through the point cloud. As you move the camera, waypoints (poses) are recorded, forming a trajectory that can be exported and reused.

Using Trajectories

The CameraMotionNode takes a trajectory (set of matrices) and interpolates camera positions and orientations along it, producing smooth camera movements for rendering sequences or videos.


Point Cloud Formats

Point clouds can be saved and loaded in two formats:

  • .npy: Numpy array format (fast, preserves all tensor data, recommended for internal pipelines).
  • .ply: Polygon File Format (widely supported, viewable in external 3D tools).

Use the SavePointCloud and LoadPointCloud nodes to handle I/O operations in either format.


Contributing

Contributions welcome! Please open issues or PRs to add features, improve docs, or refine workflows.

TODO List

  • Add processing to pointcloud or depthmap to remove outlier and lonely points at depth borders.
  • Use built-in comfyUI mask type an image.
  • Unite nodes into groups to simplify workflows.
  • Create a single workflow for view synthesis.
  • Implement easier and more flexible camera control - more complex camera movements with more than 2 points.
  • Add more examples and documentation for each node.
  • Add pointcloud union
  • Fix imports for renamed folders (e.g., inpainting_flux)
  • Integrate camera movement pipeline with video models (e.g., wan2.1) for smooth, high-quality inpainting along camera trajectories.

About

ComfyUI nodes for the different projection models and camera movements

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

camera-comfyUI

Ask DeepWikiComfyUI Custom NodesCamera Movement Demo

Custom ComfyUI nodes for advanced reprojections, point cloud processing, and camera-driven workflows.


Table of Contents


Overview

A collection of ComfyUI custom nodes to handle diverse camera projections (pinhole, fisheye, equirectangular), depth‐to‐point cloud conversions, dynamic reprojections, and inpainting/outpainting pipelines. Use these nodes to craft complex VR and 3D‐aware image transformations with minimal setup.

Features

  • Continuous Reprojection: Transform images and depth maps between projection models.
  • 🌐 Point Cloud Pipelines: Convert depth to 3D, clean, transform, and reproject point clouds.
  • 🎥 Camera Motion & Outpainting: Animate camera trajectories, perform text‐guided outpainting in arbitrary views.
  • 📦 Modular Nodes: Groupable ComfyUI nodes for flexible graph composition.
  • 🛠️ Example Workflows: Ready‐to‐use JSON workflows demonstrating reprojection, inpainting, and view synthesis.

Installation

  1. Clone into your ComfyUI custom nodes folder:

    git clone https://github.com/Alexankharin/camera-comfyUI.git custom_nodes/camera-comfyUI
  2. System Dependencies (Ubuntu):

    sudo apt-get update && sudo apt-get install build-essential ffmpeg libsm6 libxext6 -y
  3. Python Requirements:

    pip install -r custom_nodes/camera-comfyUI/requirements.txt
    • Optional:open3d for GUI point cloud tools.
  4. Additional Nodes (for certain workflows):

    • Clone the following repositories directly into your custom_nodes folder:
    • Important: If the ComfyUI-Flux-Inpainting repository is cloned as ComfyUI-Flux-Inpainting-main, rename the folder to inpainting_flux:
      mv custom_nodes/ComfyUI-Flux-Inpainting-main custom_nodes/inpainting_flux
  5. Flux Models (Hugging Face):

    pip install huggingface_hub
    huggingface-cli login
  6. Restart ComfyUI to load new nodes.


Node Categories

  • Reprojection Nodes

    • ReprojectImage, ReprojectDepth, OutpaintAnyProjection
  • Matrix Nodes

    • TransformToMatrix, TransformToMatrixManual
  • Depth Nodes

    • DepthEstimatorNode, DepthToImageNode, ZDepthToRayDepthNode
    • CombineDepthsNode, DepthRenormalizer, FisheyeDepthEstimator
  • Point Cloud Nodes

    • DepthToPointCloud, TransformPointCloud, ProjectPointCloud, PointCloudUnion
    • PointCloudCleaner, LoadPointCloud, SavePointCloud, ProjectAndClean
  • Trajectory Nodes

    • CameraMotionNode, CameraInterpolationNode, CameraTrajectoryNode
    • SaveTrajectory, LoadTrajectory, PointcloudTrajectoryEnricher

Node Reference

(See inline tooltips in ComfyUI for parameter details.)

NodeDescription
ReprojectImageReproject image between projection types (Pinhole, Fisheye, Equirectangular).
ReprojectDepthSame as above but for depth maps.
OutpaintAnyProjectionExtracts a patch in any view, outpaints (Flux), reprojects back.
DepthEstimatorNodeRuns HF Depth‐Anything-v2 models to produce metric depth.
DepthToPointCloudConverts Depth and image to → 3D point cloud tensor (N×7).
DepthToImageNodeConverts depth to image (N×3) using a color map.
ZDepthToRayDepthNodeConverts Z-depth (output of metric-depth-anything) to ray depth to compensate lens curvature.
TransformPointCloudApplies 4×4 rotation matrix to point cloud.
ProjectPointCloudZ-buffer–based projection of point cloud into image + mask.
PointCloudCleanerRemoves isolated points via voxel filtering.
PointCloudUnionCombines multiple point clouds into one.
LoadPointCloudLoads a point cloud from .npy or .ply format.
SavePointCloudSaves a point cloud to .npy or .ply format.
CameraMotionNodeGenerates image and mask sequences along a camera trajectory with optional mask dilation/inversion.
CameraInterpolationNodeBuilds a trajectory tensor from two poses.
CameraTrajectoryNodeInteractive Open3D GUI for recording camera waypoints.
SaveTrajectorySaves a trajectory tensor to a file.
LoadTrajectoryLoads a trajectory tensor from a file.
VideoCameraMotionSequenceProcesses video frames and depth maps along a camera trajectory, generating reprojected outputs.
DepthFramesToVideoConverts a sequence of depth maps into video frame tensors for saving.
VideoMetricDepthEstimateEstimates metric depth for a sequence of frames using VideoDepthAnything.

Workflows

A set of JSON workflows illustrating typical use cases. Each workflow lives in workflows/ and can be loaded directly in ComfyUI.

WorkflowDescription
demo_camera_workflow.jsonMasked reprojection demo: pinhole → fisheye/equirect
outpainting_fisheye.jsonText‐guided fisheye outpainting (built‐in inpaint node)
outpainting_fisheye_flux.jsonFlux‐based outpainting with clear reprojection scheme
Outpaint_node_test.jsonTest harness for the universal outpaint node
Outpaint_fisheye180.json180° fisheye outpainting via OutpaintAnyProjection
Fisheye_depth_workflow.jsonFisheye → metric depth → point cloud → PLY export
Pointcloud.jsonMetric‐depth‐anything v2 → point cloud → camera view synthesis
pointcloud_inpaint.jsonInpaint + backproject to 3D for dynamic camera motion videos
Pointcloud_walker.jsonGUI‐based camera control via Open3D
sbs180_workflow.jsonGenerate stereo (side-by-side) wide-angle/fisheye/equirectangular stereo pairs from a high-res input
video_camera.jsonCamera trajectory movement workflow using wan-vace for video inpainting.

Example Workflows

1. demo_camera_workflow.json

Basic reprojection pipeline: apply masks, rotate pinhole camera, outpaint fisheye, move point cloud, reproject.

Initial imagePinhole Rotation

2. outpainting_fisheye.json

Simplest text‐guided fisheye outpainting built with the core inpaint node.

3. outpainting_fisheye_flux.json

Flux Inpainting ensures sharper results and explicit reprojection stages.

Flux Mask

4. Outpaint_fisheye180.json

180° fisheye outpainting via the universal OutpaintAnyProjection node.

Flux Dev

5. Fisheye_depth_workflow.json

Convert fisheye images to metric depth and generate a PLY point cloud.

Fisheye Depth→PointCloud

6. Outpaint_node_test.json

Flux Dev

Quick test for the universal outpaint node in arbitrary views and camera movement

7. Pointcloud.json

Depth→PointCloud pipeline with interactive camera movement and reprojection views.

PointCloud Demo

8. pointcloud_inpaint.json

Inpaint image with shifted camera and backproject for dynamic camera‐driven video outputs.

PointCloud Inpaint

PointCloud Inpaint Video

9. sbs180_workflow.json

Take a wide-angle (fisheye or equirectangular) high-resolution (e.g., 4096×4096) image and generate a stereo pair by moving the camera horizontally. The output is a wide-angle stereo pair (side-by-side), simulating a fisheye or equirectangular stereo camera.

Equirectangular Stereo Demo

10. Pointcloud_walker.json

Interactive Open3D-based GUI for walking and setting camera trajectory inside pointcloud.

11. video_camera.json

This workflow demonstrates camera trajectory movement using the wan-vace video inpainting model. It generates smooth camera movements along a trajectory while filling missing regions with high-quality inpainting.

Camera Movement Demo

Trajectory Concept

A trajectory in camera-comfyUI is a sequence of camera poses, each represented as a 4×4 transformation matrix. This set of matrices defines the path and orientation of the camera through 3D space, enabling smooth and complex camera movements for view synthesis, point cloud rendering, and video generation.

Creating Trajectories

There are two main ways to create a trajectory:

  • Camera Matrices Interpolation:
    Define two or more camera poses (as matrices), and interpolate between them to generate a smooth path. The CameraInterpolationNode automates this process, producing a trajectory tensor for use in camera motion nodes.

  • Walking in Open3D Environment:
    Use the interactive Open3D GUI (CameraTrajectoryNode) to "walk" through the point cloud. As you move the camera, waypoints (poses) are recorded, forming a trajectory that can be exported and reused.

Using Trajectories

The CameraMotionNode takes a trajectory (set of matrices) and interpolates camera positions and orientations along it, producing smooth camera movements for rendering sequences or videos.


Point Cloud Formats

Point clouds can be saved and loaded in two formats:

  • .npy: Numpy array format (fast, preserves all tensor data, recommended for internal pipelines).
  • .ply: Polygon File Format (widely supported, viewable in external 3D tools).

Use the SavePointCloud and LoadPointCloud nodes to handle I/O operations in either format.


Contributing

Contributions welcome! Please open issues or PRs to add features, improve docs, or refine workflows.

TODO List

  • Add processing to pointcloud or depthmap to remove outlier and lonely points at depth borders.
  • Use built-in comfyUI mask type an image.
  • Unite nodes into groups to simplify workflows.
  • Create a single workflow for view synthesis.
  • Implement easier and more flexible camera control - more complex camera movements with more than 2 points.
  • Add more examples and documentation for each node.
  • Add pointcloud union
  • Fix imports for renamed folders (e.g., inpainting_flux)
  • Integrate camera movement pipeline with video models (e.g., wan2.1) for smooth, high-quality inpainting along camera trajectories.

About

ComfyUI nodes for the different projection models and camera movements

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

camera-comfyUI

Ask DeepWikiComfyUI Custom NodesCamera Movement Demo

Custom ComfyUI nodes for advanced reprojections, point cloud processing, and camera-driven workflows.


Table of Contents


Overview

A collection of ComfyUI custom nodes to handle diverse camera projections (pinhole, fisheye, equirectangular), depth‐to‐point cloud conversions, dynamic reprojections, and inpainting/outpainting pipelines. Use these nodes to craft complex VR and 3D‐aware image transformations with minimal setup.

Features

  • Continuous Reprojection: Transform images and depth maps between projection models.
  • 🌐 Point Cloud Pipelines: Convert depth to 3D, clean, transform, and reproject point clouds.
  • 🎥 Camera Motion & Outpainting: Animate camera trajectories, perform text‐guided outpainting in arbitrary views.
  • 📦 Modular Nodes: Groupable ComfyUI nodes for flexible graph composition.
  • 🛠️ Example Workflows: Ready‐to‐use JSON workflows demonstrating reprojection, inpainting, and view synthesis.

Installation

  1. Clone into your ComfyUI custom nodes folder:

    git clone https://github.com/Alexankharin/camera-comfyUI.git custom_nodes/camera-comfyUI
  2. System Dependencies (Ubuntu):

    sudo apt-get update && sudo apt-get install build-essential ffmpeg libsm6 libxext6 -y
  3. Python Requirements:

    pip install -r custom_nodes/camera-comfyUI/requirements.txt
    • Optional:open3d for GUI point cloud tools.
  4. Additional Nodes (for certain workflows):

    • Clone the following repositories directly into your custom_nodes folder:
    • Important: If the ComfyUI-Flux-Inpainting repository is cloned as ComfyUI-Flux-Inpainting-main, rename the folder to inpainting_flux:
      mv custom_nodes/ComfyUI-Flux-Inpainting-main custom_nodes/inpainting_flux
  5. Flux Models (Hugging Face):

    pip install huggingface_hub
    huggingface-cli login
  6. Restart ComfyUI to load new nodes.


Node Categories

  • Reprojection Nodes

    • ReprojectImage, ReprojectDepth, OutpaintAnyProjection
  • Matrix Nodes

    • TransformToMatrix, TransformToMatrixManual
  • Depth Nodes

    • DepthEstimatorNode, DepthToImageNode, ZDepthToRayDepthNode
    • CombineDepthsNode, DepthRenormalizer, FisheyeDepthEstimator
  • Point Cloud Nodes

    • DepthToPointCloud, TransformPointCloud, ProjectPointCloud, PointCloudUnion
    • PointCloudCleaner, LoadPointCloud, SavePointCloud, ProjectAndClean
  • Trajectory Nodes

    • CameraMotionNode, CameraInterpolationNode, CameraTrajectoryNode
    • SaveTrajectory, LoadTrajectory, PointcloudTrajectoryEnricher

Node Reference

(See inline tooltips in ComfyUI for parameter details.)

NodeDescription
ReprojectImageReproject image between projection types (Pinhole, Fisheye, Equirectangular).
ReprojectDepthSame as above but for depth maps.
OutpaintAnyProjectionExtracts a patch in any view, outpaints (Flux), reprojects back.
DepthEstimatorNodeRuns HF Depth‐Anything-v2 models to produce metric depth.
DepthToPointCloudConverts Depth and image to → 3D point cloud tensor (N×7).
DepthToImageNodeConverts depth to image (N×3) using a color map.
ZDepthToRayDepthNodeConverts Z-depth (output of metric-depth-anything) to ray depth to compensate lens curvature.
TransformPointCloudApplies 4×4 rotation matrix to point cloud.
ProjectPointCloudZ-buffer–based projection of point cloud into image + mask.
PointCloudCleanerRemoves isolated points via voxel filtering.
PointCloudUnionCombines multiple point clouds into one.
LoadPointCloudLoads a point cloud from .npy or .ply format.
SavePointCloudSaves a point cloud to .npy or .ply format.
CameraMotionNodeGenerates image and mask sequences along a camera trajectory with optional mask dilation/inversion.
CameraInterpolationNodeBuilds a trajectory tensor from two poses.
CameraTrajectoryNodeInteractive Open3D GUI for recording camera waypoints.
SaveTrajectorySaves a trajectory tensor to a file.
LoadTrajectoryLoads a trajectory tensor from a file.
VideoCameraMotionSequenceProcesses video frames and depth maps along a camera trajectory, generating reprojected outputs.
DepthFramesToVideoConverts a sequence of depth maps into video frame tensors for saving.
VideoMetricDepthEstimateEstimates metric depth for a sequence of frames using VideoDepthAnything.

Workflows

A set of JSON workflows illustrating typical use cases. Each workflow lives in workflows/ and can be loaded directly in ComfyUI.

WorkflowDescription
demo_camera_workflow.jsonMasked reprojection demo: pinhole → fisheye/equirect
outpainting_fisheye.jsonText‐guided fisheye outpainting (built‐in inpaint node)
outpainting_fisheye_flux.jsonFlux‐based outpainting with clear reprojection scheme
Outpaint_node_test.jsonTest harness for the universal outpaint node
Outpaint_fisheye180.json180° fisheye outpainting via OutpaintAnyProjection
Fisheye_depth_workflow.jsonFisheye → metric depth → point cloud → PLY export
Pointcloud.jsonMetric‐depth‐anything v2 → point cloud → camera view synthesis
pointcloud_inpaint.jsonInpaint + backproject to 3D for dynamic camera motion videos
Pointcloud_walker.jsonGUI‐based camera control via Open3D
sbs180_workflow.jsonGenerate stereo (side-by-side) wide-angle/fisheye/equirectangular stereo pairs from a high-res input
video_camera.jsonCamera trajectory movement workflow using wan-vace for video inpainting.

Example Workflows

1. demo_camera_workflow.json

Basic reprojection pipeline: apply masks, rotate pinhole camera, outpaint fisheye, move point cloud, reproject.

Initial imagePinhole Rotation

2. outpainting_fisheye.json

Simplest text‐guided fisheye outpainting built with the core inpaint node.

3. outpainting_fisheye_flux.json

Flux Inpainting ensures sharper results and explicit reprojection stages.

Flux Mask

4. Outpaint_fisheye180.json

180° fisheye outpainting via the universal OutpaintAnyProjection node.

Flux Dev

5. Fisheye_depth_workflow.json

Convert fisheye images to metric depth and generate a PLY point cloud.

Fisheye Depth→PointCloud

6. Outpaint_node_test.json

Flux Dev

Quick test for the universal outpaint node in arbitrary views and camera movement

7. Pointcloud.json

Depth→PointCloud pipeline with interactive camera movement and reprojection views.

PointCloud Demo

8. pointcloud_inpaint.json

Inpaint image with shifted camera and backproject for dynamic camera‐driven video outputs.

PointCloud Inpaint

PointCloud Inpaint Video

9. sbs180_workflow.json

Take a wide-angle (fisheye or equirectangular) high-resolution (e.g., 4096×4096) image and generate a stereo pair by moving the camera horizontally. The output is a wide-angle stereo pair (side-by-side), simulating a fisheye or equirectangular stereo camera.

Equirectangular Stereo Demo

10. Pointcloud_walker.json

Interactive Open3D-based GUI for walking and setting camera trajectory inside pointcloud.

11. video_camera.json

This workflow demonstrates camera trajectory movement using the wan-vace video inpainting model. It generates smooth camera movements along a trajectory while filling missing regions with high-quality inpainting.

Camera Movement Demo

Trajectory Concept

A trajectory in camera-comfyUI is a sequence of camera poses, each represented as a 4×4 transformation matrix. This set of matrices defines the path and orientation of the camera through 3D space, enabling smooth and complex camera movements for view synthesis, point cloud rendering, and video generation.

Creating Trajectories

There are two main ways to create a trajectory:

  • Camera Matrices Interpolation:
    Define two or more camera poses (as matrices), and interpolate between them to generate a smooth path. The CameraInterpolationNode automates this process, producing a trajectory tensor for use in camera motion nodes.

  • Walking in Open3D Environment:
    Use the interactive Open3D GUI (CameraTrajectoryNode) to "walk" through the point cloud. As you move the camera, waypoints (poses) are recorded, forming a trajectory that can be exported and reused.

Using Trajectories

The CameraMotionNode takes a trajectory (set of matrices) and interpolates camera positions and orientations along it, producing smooth camera movements for rendering sequences or videos.


Point Cloud Formats

Point clouds can be saved and loaded in two formats:

  • .npy: Numpy array format (fast, preserves all tensor data, recommended for internal pipelines).
  • .ply: Polygon File Format (widely supported, viewable in external 3D tools).

Use the SavePointCloud and LoadPointCloud nodes to handle I/O operations in either format.


Contributing

Contributions welcome! Please open issues or PRs to add features, improve docs, or refine workflows.

TODO List

  • Add processing to pointcloud or depthmap to remove outlier and lonely points at depth borders.
  • Use built-in comfyUI mask type an image.
  • Unite nodes into groups to simplify workflows.
  • Create a single workflow for view synthesis.
  • Implement easier and more flexible camera control - more complex camera movements with more than 2 points.
  • Add more examples and documentation for each node.
  • Add pointcloud union
  • Fix imports for renamed folders (e.g., inpainting_flux)
  • Integrate camera movement pipeline with video models (e.g., wan2.1) for smooth, high-quality inpainting along camera trajectories.

About

ComfyUI nodes for the different projection models and camera movements

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

camera-comfyUI

Ask DeepWikiComfyUI Custom NodesCamera Movement Demo

Custom ComfyUI nodes for advanced reprojections, point cloud processing, and camera-driven workflows.


Table of Contents


Overview

A collection of ComfyUI custom nodes to handle diverse camera projections (pinhole, fisheye, equirectangular), depth‐to‐point cloud conversions, dynamic reprojections, and inpainting/outpainting pipelines. Use these nodes to craft complex VR and 3D‐aware image transformations with minimal setup.

Features

  • Continuous Reprojection: Transform images and depth maps between projection models.
  • 🌐 Point Cloud Pipelines: Convert depth to 3D, clean, transform, and reproject point clouds.
  • 🎥 Camera Motion & Outpainting: Animate camera trajectories, perform text‐guided outpainting in arbitrary views.
  • 📦 Modular Nodes: Groupable ComfyUI nodes for flexible graph composition.
  • 🛠️ Example Workflows: Ready‐to‐use JSON workflows demonstrating reprojection, inpainting, and view synthesis.

Installation

  1. Clone into your ComfyUI custom nodes folder:

    git clone https://github.com/Alexankharin/camera-comfyUI.git custom_nodes/camera-comfyUI
  2. System Dependencies (Ubuntu):

    sudo apt-get update && sudo apt-get install build-essential ffmpeg libsm6 libxext6 -y
  3. Python Requirements:

    pip install -r custom_nodes/camera-comfyUI/requirements.txt
    • Optional:open3d for GUI point cloud tools.
  4. Additional Nodes (for certain workflows):

    • Clone the following repositories directly into your custom_nodes folder:
    • Important: If the ComfyUI-Flux-Inpainting repository is cloned as ComfyUI-Flux-Inpainting-main, rename the folder to inpainting_flux:
      mv custom_nodes/ComfyUI-Flux-Inpainting-main custom_nodes/inpainting_flux
  5. Flux Models (Hugging Face):

    pip install huggingface_hub
    huggingface-cli login
  6. Restart ComfyUI to load new nodes.


Node Categories

  • Reprojection Nodes

    • ReprojectImage, ReprojectDepth, OutpaintAnyProjection
  • Matrix Nodes

    • TransformToMatrix, TransformToMatrixManual
  • Depth Nodes

    • DepthEstimatorNode, DepthToImageNode, ZDepthToRayDepthNode
    • CombineDepthsNode, DepthRenormalizer, FisheyeDepthEstimator
  • Point Cloud Nodes

    • DepthToPointCloud, TransformPointCloud, ProjectPointCloud, PointCloudUnion
    • PointCloudCleaner, LoadPointCloud, SavePointCloud, ProjectAndClean
  • Trajectory Nodes

    • CameraMotionNode, CameraInterpolationNode, CameraTrajectoryNode
    • SaveTrajectory, LoadTrajectory, PointcloudTrajectoryEnricher

Node Reference

(See inline tooltips in ComfyUI for parameter details.)

NodeDescription
ReprojectImageReproject image between projection types (Pinhole, Fisheye, Equirectangular).
ReprojectDepthSame as above but for depth maps.
OutpaintAnyProjectionExtracts a patch in any view, outpaints (Flux), reprojects back.
DepthEstimatorNodeRuns HF Depth‐Anything-v2 models to produce metric depth.
DepthToPointCloudConverts Depth and image to → 3D point cloud tensor (N×7).
DepthToImageNodeConverts depth to image (N×3) using a color map.
ZDepthToRayDepthNodeConverts Z-depth (output of metric-depth-anything) to ray depth to compensate lens curvature.
TransformPointCloudApplies 4×4 rotation matrix to point cloud.
ProjectPointCloudZ-buffer–based projection of point cloud into image + mask.
PointCloudCleanerRemoves isolated points via voxel filtering.
PointCloudUnionCombines multiple point clouds into one.
LoadPointCloudLoads a point cloud from .npy or .ply format.
SavePointCloudSaves a point cloud to .npy or .ply format.
CameraMotionNodeGenerates image and mask sequences along a camera trajectory with optional mask dilation/inversion.
CameraInterpolationNodeBuilds a trajectory tensor from two poses.
CameraTrajectoryNodeInteractive Open3D GUI for recording camera waypoints.
SaveTrajectorySaves a trajectory tensor to a file.
LoadTrajectoryLoads a trajectory tensor from a file.
VideoCameraMotionSequenceProcesses video frames and depth maps along a camera trajectory, generating reprojected outputs.
DepthFramesToVideoConverts a sequence of depth maps into video frame tensors for saving.
VideoMetricDepthEstimateEstimates metric depth for a sequence of frames using VideoDepthAnything.

Workflows

A set of JSON workflows illustrating typical use cases. Each workflow lives in workflows/ and can be loaded directly in ComfyUI.

WorkflowDescription
demo_camera_workflow.jsonMasked reprojection demo: pinhole → fisheye/equirect
outpainting_fisheye.jsonText‐guided fisheye outpainting (built‐in inpaint node)
outpainting_fisheye_flux.jsonFlux‐based outpainting with clear reprojection scheme
Outpaint_node_test.jsonTest harness for the universal outpaint node
Outpaint_fisheye180.json180° fisheye outpainting via OutpaintAnyProjection
Fisheye_depth_workflow.jsonFisheye → metric depth → point cloud → PLY export
Pointcloud.jsonMetric‐depth‐anything v2 → point cloud → camera view synthesis
pointcloud_inpaint.jsonInpaint + backproject to 3D for dynamic camera motion videos
Pointcloud_walker.jsonGUI‐based camera control via Open3D
sbs180_workflow.jsonGenerate stereo (side-by-side) wide-angle/fisheye/equirectangular stereo pairs from a high-res input
video_camera.jsonCamera trajectory movement workflow using wan-vace for video inpainting.

Example Workflows

1. demo_camera_workflow.json

Basic reprojection pipeline: apply masks, rotate pinhole camera, outpaint fisheye, move point cloud, reproject.

Initial imagePinhole Rotation

2. outpainting_fisheye.json

Simplest text‐guided fisheye outpainting built with the core inpaint node.

3. outpainting_fisheye_flux.json

Flux Inpainting ensures sharper results and explicit reprojection stages.

Flux Mask

4. Outpaint_fisheye180.json

180° fisheye outpainting via the universal OutpaintAnyProjection node.

Flux Dev

5. Fisheye_depth_workflow.json

Convert fisheye images to metric depth and generate a PLY point cloud.

Fisheye Depth→PointCloud

6. Outpaint_node_test.json

Flux Dev

Quick test for the universal outpaint node in arbitrary views and camera movement

7. Pointcloud.json

Depth→PointCloud pipeline with interactive camera movement and reprojection views.

PointCloud Demo

8. pointcloud_inpaint.json

Inpaint image with shifted camera and backproject for dynamic camera‐driven video outputs.

PointCloud Inpaint

PointCloud Inpaint Video

9. sbs180_workflow.json

Take a wide-angle (fisheye or equirectangular) high-resolution (e.g., 4096×4096) image and generate a stereo pair by moving the camera horizontally. The output is a wide-angle stereo pair (side-by-side), simulating a fisheye or equirectangular stereo camera.

Equirectangular Stereo Demo

10. Pointcloud_walker.json

Interactive Open3D-based GUI for walking and setting camera trajectory inside pointcloud.

11. video_camera.json

This workflow demonstrates camera trajectory movement using the wan-vace video inpainting model. It generates smooth camera movements along a trajectory while filling missing regions with high-quality inpainting.

Camera Movement Demo

Trajectory Concept

A trajectory in camera-comfyUI is a sequence of camera poses, each represented as a 4×4 transformation matrix. This set of matrices defines the path and orientation of the camera through 3D space, enabling smooth and complex camera movements for view synthesis, point cloud rendering, and video generation.

Creating Trajectories

There are two main ways to create a trajectory:

  • Camera Matrices Interpolation:
    Define two or more camera poses (as matrices), and interpolate between them to generate a smooth path. The CameraInterpolationNode automates this process, producing a trajectory tensor for use in camera motion nodes.

  • Walking in Open3D Environment:
    Use the interactive Open3D GUI (CameraTrajectoryNode) to "walk" through the point cloud. As you move the camera, waypoints (poses) are recorded, forming a trajectory that can be exported and reused.

Using Trajectories

The CameraMotionNode takes a trajectory (set of matrices) and interpolates camera positions and orientations along it, producing smooth camera movements for rendering sequences or videos.


Point Cloud Formats

Point clouds can be saved and loaded in two formats:

  • .npy: Numpy array format (fast, preserves all tensor data, recommended for internal pipelines).
  • .ply: Polygon File Format (widely supported, viewable in external 3D tools).

Use the SavePointCloud and LoadPointCloud nodes to handle I/O operations in either format.


Contributing

Contributions welcome! Please open issues or PRs to add features, improve docs, or refine workflows.

TODO List

  • Add processing to pointcloud or depthmap to remove outlier and lonely points at depth borders.
  • Use built-in comfyUI mask type an image.
  • Unite nodes into groups to simplify workflows.
  • Create a single workflow for view synthesis.
  • Implement easier and more flexible camera control - more complex camera movements with more than 2 points.
  • Add more examples and documentation for each node.
  • Add pointcloud union
  • Fix imports for renamed folders (e.g., inpainting_flux)
  • Integrate camera movement pipeline with video models (e.g., wan2.1) for smooth, high-quality inpainting along camera trajectories.

About

ComfyUI nodes for the different projection models and camera movements

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

camera-comfyUI

Ask DeepWikiComfyUI Custom NodesCamera Movement Demo

Custom ComfyUI nodes for advanced reprojections, point cloud processing, and camera-driven workflows.


Table of Contents


Overview

A collection of ComfyUI custom nodes to handle diverse camera projections (pinhole, fisheye, equirectangular), depth‐to‐point cloud conversions, dynamic reprojections, and inpainting/outpainting pipelines. Use these nodes to craft complex VR and 3D‐aware image transformations with minimal setup.

Features

  • Continuous Reprojection: Transform images and depth maps between projection models.
  • 🌐 Point Cloud Pipelines: Convert depth to 3D, clean, transform, and reproject point clouds.
  • 🎥 Camera Motion & Outpainting: Animate camera trajectories, perform text‐guided outpainting in arbitrary views.
  • 📦 Modular Nodes: Groupable ComfyUI nodes for flexible graph composition.
  • 🛠️ Example Workflows: Ready‐to‐use JSON workflows demonstrating reprojection, inpainting, and view synthesis.

Installation

  1. Clone into your ComfyUI custom nodes folder:

    git clone https://github.com/Alexankharin/camera-comfyUI.git custom_nodes/camera-comfyUI
  2. System Dependencies (Ubuntu):

    sudo apt-get update && sudo apt-get install build-essential ffmpeg libsm6 libxext6 -y
  3. Python Requirements:

    pip install -r custom_nodes/camera-comfyUI/requirements.txt
    • Optional:open3d for GUI point cloud tools.
  4. Additional Nodes (for certain workflows):

    • Clone the following repositories directly into your custom_nodes folder:
    • Important: If the ComfyUI-Flux-Inpainting repository is cloned as ComfyUI-Flux-Inpainting-main, rename the folder to inpainting_flux:
      mv custom_nodes/ComfyUI-Flux-Inpainting-main custom_nodes/inpainting_flux
  5. Flux Models (Hugging Face):

    pip install huggingface_hub
    huggingface-cli login
  6. Restart ComfyUI to load new nodes.


Node Categories

  • Reprojection Nodes

    • ReprojectImage, ReprojectDepth, OutpaintAnyProjection
  • Matrix Nodes

    • TransformToMatrix, TransformToMatrixManual
  • Depth Nodes

    • DepthEstimatorNode, DepthToImageNode, ZDepthToRayDepthNode
    • CombineDepthsNode, DepthRenormalizer, FisheyeDepthEstimator
  • Point Cloud Nodes

    • DepthToPointCloud, TransformPointCloud, ProjectPointCloud, PointCloudUnion
    • PointCloudCleaner, LoadPointCloud, SavePointCloud, ProjectAndClean
  • Trajectory Nodes

    • CameraMotionNode, CameraInterpolationNode, CameraTrajectoryNode
    • SaveTrajectory, LoadTrajectory, PointcloudTrajectoryEnricher

Node Reference

(See inline tooltips in ComfyUI for parameter details.)

NodeDescription
ReprojectImageReproject image between projection types (Pinhole, Fisheye, Equirectangular).
ReprojectDepthSame as above but for depth maps.
OutpaintAnyProjectionExtracts a patch in any view, outpaints (Flux), reprojects back.
DepthEstimatorNodeRuns HF Depth‐Anything-v2 models to produce metric depth.
DepthToPointCloudConverts Depth and image to → 3D point cloud tensor (N×7).
DepthToImageNodeConverts depth to image (N×3) using a color map.
ZDepthToRayDepthNodeConverts Z-depth (output of metric-depth-anything) to ray depth to compensate lens curvature.
TransformPointCloudApplies 4×4 rotation matrix to point cloud.
ProjectPointCloudZ-buffer–based projection of point cloud into image + mask.
PointCloudCleanerRemoves isolated points via voxel filtering.
PointCloudUnionCombines multiple point clouds into one.
LoadPointCloudLoads a point cloud from .npy or .ply format.
SavePointCloudSaves a point cloud to .npy or .ply format.
CameraMotionNodeGenerates image and mask sequences along a camera trajectory with optional mask dilation/inversion.
CameraInterpolationNodeBuilds a trajectory tensor from two poses.
CameraTrajectoryNodeInteractive Open3D GUI for recording camera waypoints.
SaveTrajectorySaves a trajectory tensor to a file.
LoadTrajectoryLoads a trajectory tensor from a file.
VideoCameraMotionSequenceProcesses video frames and depth maps along a camera trajectory, generating reprojected outputs.
DepthFramesToVideoConverts a sequence of depth maps into video frame tensors for saving.
VideoMetricDepthEstimateEstimates metric depth for a sequence of frames using VideoDepthAnything.

Workflows

A set of JSON workflows illustrating typical use cases. Each workflow lives in workflows/ and can be loaded directly in ComfyUI.

WorkflowDescription
demo_camera_workflow.jsonMasked reprojection demo: pinhole → fisheye/equirect
outpainting_fisheye.jsonText‐guided fisheye outpainting (built‐in inpaint node)
outpainting_fisheye_flux.jsonFlux‐based outpainting with clear reprojection scheme
Outpaint_node_test.jsonTest harness for the universal outpaint node
Outpaint_fisheye180.json180° fisheye outpainting via OutpaintAnyProjection
Fisheye_depth_workflow.jsonFisheye → metric depth → point cloud → PLY export
Pointcloud.jsonMetric‐depth‐anything v2 → point cloud → camera view synthesis
pointcloud_inpaint.jsonInpaint + backproject to 3D for dynamic camera motion videos
Pointcloud_walker.jsonGUI‐based camera control via Open3D
sbs180_workflow.jsonGenerate stereo (side-by-side) wide-angle/fisheye/equirectangular stereo pairs from a high-res input
video_camera.jsonCamera trajectory movement workflow using wan-vace for video inpainting.

Example Workflows

1. demo_camera_workflow.json

Basic reprojection pipeline: apply masks, rotate pinhole camera, outpaint fisheye, move point cloud, reproject.

Initial imagePinhole Rotation

2. outpainting_fisheye.json

Simplest text‐guided fisheye outpainting built with the core inpaint node.

3. outpainting_fisheye_flux.json

Flux Inpainting ensures sharper results and explicit reprojection stages.

Flux Mask

4. Outpaint_fisheye180.json

180° fisheye outpainting via the universal OutpaintAnyProjection node.

Flux Dev

5. Fisheye_depth_workflow.json

Convert fisheye images to metric depth and generate a PLY point cloud.

Fisheye Depth→PointCloud

6. Outpaint_node_test.json

Flux Dev

Quick test for the universal outpaint node in arbitrary views and camera movement

7. Pointcloud.json

Depth→PointCloud pipeline with interactive camera movement and reprojection views.

PointCloud Demo

8. pointcloud_inpaint.json

Inpaint image with shifted camera and backproject for dynamic camera‐driven video outputs.

PointCloud Inpaint

PointCloud Inpaint Video

9. sbs180_workflow.json

Take a wide-angle (fisheye or equirectangular) high-resolution (e.g., 4096×4096) image and generate a stereo pair by moving the camera horizontally. The output is a wide-angle stereo pair (side-by-side), simulating a fisheye or equirectangular stereo camera.

Equirectangular Stereo Demo

10. Pointcloud_walker.json

Interactive Open3D-based GUI for walking and setting camera trajectory inside pointcloud.

11. video_camera.json

This workflow demonstrates camera trajectory movement using the wan-vace video inpainting model. It generates smooth camera movements along a trajectory while filling missing regions with high-quality inpainting.

Camera Movement Demo

Trajectory Concept

A trajectory in camera-comfyUI is a sequence of camera poses, each represented as a 4×4 transformation matrix. This set of matrices defines the path and orientation of the camera through 3D space, enabling smooth and complex camera movements for view synthesis, point cloud rendering, and video generation.

Creating Trajectories

There are two main ways to create a trajectory:

  • Camera Matrices Interpolation:
    Define two or more camera poses (as matrices), and interpolate between them to generate a smooth path. The CameraInterpolationNode automates this process, producing a trajectory tensor for use in camera motion nodes.

  • Walking in Open3D Environment:
    Use the interactive Open3D GUI (CameraTrajectoryNode) to "walk" through the point cloud. As you move the camera, waypoints (poses) are recorded, forming a trajectory that can be exported and reused.

Using Trajectories

The CameraMotionNode takes a trajectory (set of matrices) and interpolates camera positions and orientations along it, producing smooth camera movements for rendering sequences or videos.


Point Cloud Formats

Point clouds can be saved and loaded in two formats:

  • .npy: Numpy array format (fast, preserves all tensor data, recommended for internal pipelines).
  • .ply: Polygon File Format (widely supported, viewable in external 3D tools).

Use the SavePointCloud and LoadPointCloud nodes to handle I/O operations in either format.


Contributing

Contributions welcome! Please open issues or PRs to add features, improve docs, or refine workflows.

TODO List

  • Add processing to pointcloud or depthmap to remove outlier and lonely points at depth borders.
  • Use built-in comfyUI mask type an image.
  • Unite nodes into groups to simplify workflows.
  • Create a single workflow for view synthesis.
  • Implement easier and more flexible camera control - more complex camera movements with more than 2 points.
  • Add more examples and documentation for each node.
  • Add pointcloud union
  • Fix imports for renamed folders (e.g., inpainting_flux)
  • Integrate camera movement pipeline with video models (e.g., wan2.1) for smooth, high-quality inpainting along camera trajectories.

About

ComfyUI nodes for the different projection models and camera movements

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages