From 08b48b2fcb9e535832d646e7430d74cc2f1f4e72 Mon Sep 17 00:00:00 2001
From: Alexander Kharin <42934906+Alexankharin@users.noreply.github.com>
Date: Sun, 13 Jul 2025 20:03:09 +0200
Subject: [PATCH] Update camera movement on video
---
README.md | 22 +++++++++++++++++-----
demo_images/Demo_camera_movement.mp4 | Bin 0 -> 1404575 bytes
demo_images/camera_movement.gif | Bin 0 -> 12359637 bytes
video_nodes.py | 2 +-
4 files changed, 18 insertions(+), 6 deletions(-)
create mode 100644 demo_images/Demo_camera_movement.mp4
create mode 100644 demo_images/camera_movement.gif
diff --git a/README.md b/README.md
index 090be3b..0a7ed58 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,7 @@
# camera-comfyUI
[](https://deepwiki.com/Alexankharin/camera-comfyUI)

+
> Custom ComfyUI nodes for advanced reprojections, point cloud processing, and camera-driven workflows.
@@ -115,12 +116,20 @@ A collection of ComfyUI custom nodes to handle diverse camera projections (pinho
| `DepthToPointCloud` | Converts Depth and image to → 3D point cloud tensor (N×7). |
| `DepthToImageNode` | Converts depth to image (N×3) using a color map. |
| `ZDepthToRayDepthNode` | Converts Z-depth (output of metric-depth-anything) to ray depth to compensate lens curvature. |
-| `TransformPointCloud` | Applies 4×4 rotation matrix to point cloud |
+| `TransformPointCloud` | Applies 4×4 rotation matrix to point cloud. |
| `ProjectPointCloud` | Z-buffer–based projection of point cloud into image + mask. |
+| `PointCloudCleaner` | Removes isolated points via voxel filtering. |
+| `PointCloudUnion` | Combines multiple point clouds into one. |
+| `LoadPointCloud` | Loads a point cloud from `.npy` or `.ply` format. |
+| `SavePointCloud` | Saves a point cloud to `.npy` or `.ply` format. |
| `CameraMotionNode` | Generates image and mask sequences along a camera trajectory with optional mask dilation/inversion. |
| `CameraInterpolationNode` | Builds a trajectory tensor from two poses. |
| `CameraTrajectoryNode` | Interactive Open3D GUI for recording camera waypoints. |
-| `PointCloudCleaner` | Removes isolated points via voxel filtering. |
+| `SaveTrajectory` | Saves a trajectory tensor to a file. |
+| `LoadTrajectory` | Loads a trajectory tensor from a file. |
+| `VideoCameraMotionSequence` | Processes video frames and depth maps along a camera trajectory, generating reprojected outputs. |
+| `DepthFramesToVideo` | Converts a sequence of depth maps into video frame tensors for saving. |
+| `VideoMetricDepthEstimate` | Estimates metric depth for a sequence of frames using VideoDepthAnything. |
---
@@ -140,6 +149,7 @@ A set of JSON workflows illustrating typical use cases. Each workflow lives in `
| **pointcloud\_inpaint.json** | Inpaint + backproject to 3D for dynamic camera motion videos |
| **Pointcloud\_walker.json** | GUI‐based camera control via Open3D |
| **sbs180\_workflow.json** | Generate stereo (side-by-side) wide-angle/fisheye/equirectangular stereo pairs from a high-res input |
+| **video_camera.json** | Camera trajectory movement workflow using `wan-vace` for video inpainting. |
---
@@ -208,11 +218,13 @@ Take a wide-angle (fisheye or equirectangular) high-resolution (e.g., 4096×4096
Interactive Open3D-based GUI for walking and setting camera trajectory inside pointcloud.
-### 11. `wan-vace_ref_to_video.json`
+### 11. `video_camera.json`
-Integrate the [wan2.1-vace] video generation model to inpaint empty or newly revealed regions during camera movement or view synthesis. This workflow demonstrates how to use the camera-comfyUI nodes to generate camera trajectories and masks, then fill missing areas with the video inpainting model for smooth, high-quality results.
+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.
-
+
2Q!HBX!ksCvaqXXa@*v&(lKLdY_v|ET CuO((Ar^(4@&UXHCHfe|jOYG=6MRm*;E5`1B#$#tM
zN0Ihwfk>(${JrKtEe>Tk5-Ar1v_R2G%8Ais#~8c*uif*b&{NpG);QaJth{$E{3RXJ
zHs1R>c1XJ14r~iM;^-^%z6A%gUI^^Dk>QNH<;d_|EI?88R(-h1Ib(eJ@h2Jl@gXH)
zA1d{uuR)AaB1n;Fmx!-_qeK4rW$gBbJA+=G#+r_-c2zDCWzU6};(fyIgIEGi+
z3mBUfi7EBAVNrz3qrKP1`~hTy&lNX(CnMPe+_n$yW%i*=aw
9z4|k8OkXuRduzZ1cH9(8?F#?Jm
zgn_dOlkKvE1}jY|agZ+?sF^c|A{-U8ICudAlJE9iFT+1+kvI)RwQ**U(k8ANoBFP?
zQD^!1B;vTBqLDk@Gtk=){AzM|>EAzmb*nv$SUyn6vo}V!F
z4YXktX@^Yep{Di`eEs>oZEEG<#^aC#V3Cxe2RN*iVI@D&>{>dpmYS!8TTz6DYS(Z{
zs5OIPe}W;fFMz-SCdl$@qbfrjnvS0Cv>E`#$C%ZWcZwlpgt*)SNY>bR@%#Smg|b6b
z3p#9klVdmDw(*3ImFmR@=ZVWGdY0eILFd9>m9X<z4cu?2CVpMmG|(Pn>-
zn~*AVH?I(~6hzRqJW53mHQLi2b8j!hNP14k{