TRELLIS2 Video Angle Shift
The one-node 'angle shift' that hides the whole pipeline from you
- images
- background_color
- shifted_video
This is the node the pack is named after: drop in a video, give it a couple of camera angles, and get back the same motion seen from a different viewpoint. TRELLIS2 Video Angle Shift is the all-in-one that does in a single node what the rest of the pack does across four - reconstruct every frame into 3D with TRELLIS2, re-render from a shifted camera, interpolate the skipped frames back, optionally onion-skin it, and hand you a finished video.
If you want the demo result fast, this is the node. If you want control - separate meshes, your own trajectory, per-step tweaks - the modular path (VideoToMeshes → CameraTrajectory → MeshSequenceRenderer) is waiting, and the pack's own README says as much: "for more control, use the individual nodes." The convenience node is the trade: less wiring, fewer knobs.
How it works
Under the hood it's the entire pipeline compressed into one process() call:
- Extract frames per
frame_skip(every Nth frame, default 5). - Reconstruct each kept frame through TRELLIS2 (with rembg background removal first), using the pack's model downloader.
- Render each mesh with nvdiffrast from your shifted angle -
angle_x(pitch, default 15°) andangle_y(yaw, default 0°) - auto-fitting the camera distance to each frame's geometry. - Interpolate the frames you skipped back into the timeline (
interpolate_frames, default on) using linear blending between rendered neighbors, so the output is a full-length video, not a sparse one. - Optionally onion-skin the result.
If animate_camera is on, the yaw sweeps through animation_range across the clip - a moving camera on top of the re-shoot, which is a genuinely impressive effect from a single node.
The inputs that matter
- images - required, your video frames as an
[N, H, W, C]batch from a video loader. - angle_x / angle_y - the whole point. Pitch and yaw of the new camera.
angle_xdefault 15° gives you a slightly high, classic three-quarter view; 0 gets you eye-level. - frame_skip - the cost dial, same as in VideoToMeshes. Every kept frame is a full TRELLIS2 reconstruction, so at default 5 you process a fifth of the clip. Raise it on long videos.
- interpolate_frames - keep it on unless you want a choppy every-Nth-frame output; it's what makes the shifted video still feel like the original footage.
- render_mode -
pbr,wireframe, orcel(note: this node's renderer is simpler than MeshRenderer's - no normal/depth modes, and cel is basic quantization, not the full shading pass). PBR is the default and the one you want. - output_width / output_height -
0matches the input size; otherwise 64-step values up to 4096. - enable_onion_skin / onion_skin_interval - the ghost-trail shortcut (3 ghosts, every Nth frame).
Output is shifted_video, a full-length IMAGE batch ready for VHS_VideoCombine.
Installing
Same setup as the whole pack:
cd ComfyUI/custom_nodes
git clone https://github.com/styletransfer/ComfyUI-TRELLIS2_Motion
cd ComfyUI-TRELLIS2_Motion
python install.py --full
pip install git+https://github.com/microsoft/TRELLIS.git
pip install git+https://github.com/NVlabs/nvdiffrast.git
Restart ComfyUI; it sits at the top level of the TRELLIS2 category.
Common issues
- It needs everything. This one node requires TRELLIS2 and nvdiffrast and CUDA, all at once - it validates all three up front and raises clear errors per missing piece. The pack's dependency triad is the entire troubleshooting section here:
pip install git+https://github.com/microsoft/TRELLIS.gitandpip install git+https://github.com/NVlabs/nvdiffrast.git, with TRELLIS kept outsidecustom_nodes/. - It's slow and it will burn VRAM. A 10-second clip at 30fps with default
frame_skipis ~60 reconstructions plus renders. That's the README's 24GB+ VRAM recommendation made real. Dropresolutionto 512 and raiseframe_skip; the interpolation covers the gaps. - Result quality is visibly simpler than the modular path. The convenience renderer uses flat-ish shading and a single light direction, so PBR texture detail doesn't fully carry through. If the output looks "dimmer" or plainer than you expected, that's the trade - reach for MeshSequenceRenderer for the full material pass.
- Don't confuse it with the famous
ComfyUI-TRELLIS2pack (PozzettiAndrea's wrapper). Same engine, different node set - this Motion pack is the one with the angle-shift and rendering pipeline. Search ComfyUI Manager forComfyUI-TRELLIS2_Motionspecifically.
For a first look at what this pack does, it's the node to hit. Just know you're buying convenience with your VRAM.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | Video frames as image batch [N, H, W, C] | |
| angle_x | FLOAT | 15.0-60–60 | Vertical camera angle shift in degrees (pitch) |
| angle_y | FLOAT | 0.0-180–180 | Horizontal camera angle shift in degrees (yaw) |
| frame_skipopt | INT | 51–30 | Process every Nth frame |
| resolutionopt | COMBO | 1024 | TRELLIS2 processing resolution |
| output_widthopt | INT | 00–4096 | Output width (0 = match input) |
| output_heightopt | INT | 00–4096 | Output height (0 = match input) |
| fovopt | FLOAT | 6030–120 | Field of view in degrees |
| render_modeopt | COMBO | pbr | Rendering style |
| lighting_presetopt | COMBO | studio | Lighting configuration |
| animate_cameraopt | BOOLEAN | false | Animate camera movement over video duration |
| animation_rangeopt | FLOAT | 305–90 | Range of camera animation in degrees |
| enable_onion_skinopt | BOOLEAN | false | Enable onion skinning effect |
| onion_skin_intervalopt | INT | 51–30 | Frames between onion skin ghosts |
| interpolate_framesopt | BOOLEAN | true | Interpolate skipped frames |
| background_coloropt | COLOR | #000000 | Background color |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| shifted_video | IMAGE | — |