Nodes/ComfyUI_PHRenderFormerWrapper/RenderFormer Camera Target
ComfyUI Node

RenderFormer Camera Target

A dolly move without leaving ComfyUI

By paulh4x·Created about a year ago·Updated about a year ago· 37
RenderFormer Camera Target
  • start_camera
  • CAMERA_SEQUENCE
end_pos_x0.00
end_pos_y-2.00
end_pos_z0.00
end_look_at_x0.00
end_look_at_y0.00
end_look_at_z0.00
end_fov38

Static renders get boring fast. If you want the camera to move - a slow push-in, a pan across the object, a dolly around it - RenderFormerCameraTarget is how you do it in this pack. You give it a start camera and an end state, and it hands back a CAMERA_SEQUENCE that the Scene Builder interpolates into a full video. It's one of the 15 nodes in paulh4x/ComfyUI_PHRenderFormerWrapper, the "100% vibecoded" wrapper around Microsoft's RenderFormer (SIGGRAPH 2025).

How it works

This is a keyframe node: it takes your existing CAMERA as the start keyframe, and your typed-in values as the end keyframe, and produces a sequence containing exactly those two states ({"sequence": [start, end]}). It doesn't generate intermediate frames itself - the Scene Builder does that when it sees num_frames > 1. So the mental model is: Camera Target defines where the shot ends; the Scene Builder fills in every frame between.

The inputs

  • start_camera - the CAMERA output of a RenderFormerCamera node. This is frame zero.
  • end_pos_x/y/z - where the camera ends up. Defaults mirror the static camera node (0, -2, 0).
  • end_look_at_x/y/z - where the camera is looking at the end of the move (defaults 0, 0, 0).
  • end_fov - field of view at the end, in degrees, default 37.5.

One output: CAMERA_SEQUENCE, which wires into the Scene Builder's optional camera_sequence input.

The workflow

RenderFormerCamera ──CAMERA──▶ RenderFormerCameraTarget ──CAMERA_SEQUENCE──▶ RenderFormerSceneBuilder (num_frames > 1) ──SCENE_SEQUENCE──▶ RenderFormerGenerator ──IMAGES──▶ Create Video

The important gotcha: you still wire the plain CAMERA output of the start camera into the Scene Builder's required camera input, and the CAMERA_SEQUENCE into camera_sequence. Then set num_frames above 1 on the Scene Builder. Miss that and you'll render a single frame - the sequence only activates when num_frames > 1.

Installing it

# ComfyUI Manager: search "ComfyUI_PHRenderFormerWrapper"
cd ComfyUI/custom_nodes/
git clone https://github.com/paulh4x/ComfyUI_PHRenderFormerWrapper.git
cd ComfyUI_PHRenderFormerWrapper
git clone https://github.com/microsoft/renderformer.git renderformer
pip install -r requirements.txt
python -c "import imageio; imageio.plugins.freeimage.download()"

Restart ComfyUI.

Common issues

  • The video is a still - num_frames is 1 on the Scene Builder, or you connected the sequence to the wrong input. Sequence → camera_sequence, static camera → camera.
  • Flickering in the animation - the README is upfront about this: per-frame precision varies slightly, and camera animations can flicker, especially with high-reflective materials. It's a known model/wrapper limitation. Shorter moves and less glossy materials help.
  • Only two keyframes - correct, and by design. Multi-keyframe and bezier interpolation are on the pack's to-do list. For now, chain multiple Camera Target → Scene Builder pairs if you need a more complex path, or accept simple linear moves.

It's the cheapest way to get video out of this pack - a two-keyframe dolly is 90% of the motion you need for a v2v or reference-video shot.

CategoryPHRenderFormer

Inputs (8)

NameTypeDefaultDescription
start_cameraCAMERA
end_pos_xFLOAT0.00-10–10
end_pos_yFLOAT-2.00-10–10
end_pos_zFLOAT0.00-10–10
end_look_at_xFLOAT0.00-10–10
end_look_at_yFLOAT0.00-10–10
end_look_at_zFLOAT0.00-10–10
end_fovFLOAT381–179

Outputs (1)

NameTypeDescription
CAMERA_SEQUENCECAMERA_SEQUENCE