Nodes/ComfyUI-TRELLIS2_Motion/TRELLIS2 Video Angle Shift
ComfyUI Node

TRELLIS2 Video Angle Shift

The one-node 'angle shift' that hides the whole pipeline from you

By styletransfer·Created 8 months ago·Updated 8 months ago· 6
TRELLIS2 Video Angle Shift
  • images
  • background_color
  • shifted_video
angle_x15.0
angle_y0.0
frame_skip5
resolution1024
output_width0
output_height0
fov60
render_modepbr
lighting_presetstudio
animate_camerafalse
animation_range30
enable_onion_skinfalse
onion_skin_interval5
interpolate_framestrue

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:

  1. Extract frames per frame_skip (every Nth frame, default 5).
  2. Reconstruct each kept frame through TRELLIS2 (with rembg background removal first), using the pack's model downloader.
  3. Render each mesh with nvdiffrast from your shifted angle - angle_x (pitch, default 15°) and angle_y (yaw, default 0°) - auto-fitting the camera distance to each frame's geometry.
  4. 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.
  5. 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_x default 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, or cel (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 - 0 matches 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.git and pip install git+https://github.com/NVlabs/nvdiffrast.git, with TRELLIS kept outside custom_nodes/.
  • It's slow and it will burn VRAM. A 10-second clip at 30fps with default frame_skip is ~60 reconstructions plus renders. That's the README's 24GB+ VRAM recommendation made real. Drop resolution to 512 and raise frame_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-TRELLIS2 pack (PozzettiAndrea's wrapper). Same engine, different node set - this Motion pack is the one with the angle-shift and rendering pipeline. Search ComfyUI Manager for ComfyUI-TRELLIS2_Motion specifically.

For a first look at what this pack does, it's the node to hit. Just know you're buying convenience with your VRAM.

CategoryTRELLIS2

Inputs (16)

NameTypeDefaultDescription
imagesIMAGEVideo frames as image batch [N, H, W, C]
angle_xFLOAT15.0-60–60Vertical camera angle shift in degrees (pitch)
angle_yFLOAT0.0-180–180Horizontal camera angle shift in degrees (yaw)
frame_skipoptINT51–30Process every Nth frame
resolutionoptCOMBO1024TRELLIS2 processing resolution
output_widthoptINT00–4096Output width (0 = match input)
output_heightoptINT00–4096Output height (0 = match input)
fovoptFLOAT6030–120Field of view in degrees
render_modeoptCOMBOpbrRendering style
lighting_presetoptCOMBOstudioLighting configuration
animate_cameraoptBOOLEANfalseAnimate camera movement over video duration
animation_rangeoptFLOAT305–90Range of camera animation in degrees
enable_onion_skinoptBOOLEANfalseEnable onion skinning effect
onion_skin_intervaloptINT51–30Frames between onion skin ghosts
interpolate_framesoptBOOLEANtrueInterpolate skipped frames
background_coloroptCOLOR#000000Background color

Outputs (1)

NameTypeDescription
shifted_videoIMAGE