Nodes/ComfyUI_zura_nodes/H3 · Render selected camera angle
ComfyUI Node

H3 · Render selected camera angle

Your performance, from the other side of the room

By ZURAVFX·Created about a month ago·Updated a day ago· 2
H3 · Render selected camera angle
  • source_frames
  • source_audio
  • angle_frame
  • model
  • clip
  • video_vae
  • audio_vae
  • new_angle_frames
  • original_audio
◄seed42►
◄steps16►
◄promptcrossview. <Picture 1> defines the selected camera position and framing. <Video 1> defines the exact same performer's identity, face, clothes, gestures, expression, and speech timing. Recreate the performance from the new angle without changing the person or dialogue. Keep the full head in frame and lips faithful to the original speech.►

Multi-camera coverage without a second camera is one of the genuinely magic tricks of 2026 video models, and it's also the one most likely to hand you a stranger. This node takes a source performance, a single still of the same person from a new angle, and re-renders the shot from that view - keeping the original speech and original timing.

It's the graph-view heart of the pack's "single camera" example, and despite being one node in the editor it expands into a whole sampling subgraph when it runs.

How it works

The node is a graph builder. When ComfyUI executes it, it constructs and runs an internal chain: MiniMaxH3ReferenceToVideo with your angle_frame as the first image reference, the source window as a video reference, and the matching slice of source audio as that video's audio reference. Then it stacks guide nodes on the results - the angle still pinned at frame index 0 as a picture guide, and the speech pinned as an audio guide - and samples with a basic guider, random noise, a simple scheduler, and the res_multistep sampler.

The identity anchor is the source video window, not the previous chunk. That's what keeps the mouth and gestures faithful: H3 is being told "here is this person, here is how they moved, here is what they said" at every step. The angle still only supplies position and framing.

Long takes get chunked at 124 frames, with the tail chunk rebalanced so it isn't a runt (under 22 frames it borrows from the previous chunk) and a hard cap of 12 chunks - 62 seconds. Each chunk is an independent sample anchored on its own slice of the source, with seed incremented per chunk.

The whole pass runs on local weights. No Comfy credits, no API call.

Inputs and outputs

  • source_frames - IMAGE, the performance. Width and height must be divisible by 32 or it stops immediately.
  • source_audio - AUDIO, the speech being preserved.
  • angle_frame - IMAGE, the new camera still. One frame; it's scaled to the source raster with lanczos internally.
  • model, clip, video_vae, audio_vae - the H3 stack.
  • seed - default 42.
  • steps - default 16. Range 1–60.
  • prompt - the default text is worth reading rather than replacing. It names the still as the camera definition, the video as the identity/performance/timing definition, and explicitly asks to keep the head in frame and lips faithful. That's a well-written H3 prompt; the <Picture 1> / <Video 1> syntax is the model's own.
  • new_angle_frames - IMAGE, the rendered take.
  • original_audio - AUDIO, your source audio trimmed to the rendered duration, unmodified. Ship it with the frames.

Install

cd ComfyUI/custom_nodes && git clone https://github.com/ZURAVFX/ComfyUI_zura_nodes
pip install -r ComfyUI_zura_nodes/requirements.txt

Restart. H3 weights (base model, qwen3vl_32b text encoder, video and audio VAEs) are separate downloads in Comfy-Org's MiniMax-H3 repo, under the community licence that excludes several territories - read it before downloading.

If you want the experimental version of this workflow where you actually position a camera in 3D, that's the AnyAngle example, and it needs an entirely separate third-party install - the T8 AnyAngle Studio pack plus its reconstruction weights. The pack does not fetch those for you. For most people the still-image route is the sane starting point.

Common issues

"Resize source frames to a width and height divisible by 32." The most common failure by a mile. Resize before the node, not after.

"Choose and apply a camera in AnyAngle Studio first." angle_frame is empty. If you're driving this from the studio, you closed it without clicking Apply - that's a documented trap: closing the editor without applying does not save your camera.

"The performance must contain at least five frames at 24 fps." H3's minimum context. Trim to at least 0.21 seconds.

"Trim the source to 62 seconds or less before this H3 workflow." The 12-chunk ceiling. If you need longer coverage, render shots separately and cut them together - that's what the pack's multicam workflow does, and it's the honest way to do it.

The face isn't quite them. Expected, and documented: the new-angle still can drift from the source. Keep the camera change modest for the first pass, check the take, then push. A structurally valid graph was never a guarantee of identity.

CategoryZura/video

Inputs (10)

NameTypeDefaultDescription
source_framesIMAGE—
source_audioAUDIO—
angle_frameIMAGE—
modelMODEL—
clipCLIP—
video_vaeVAE—
audio_vaeVAE—
seedINT420–18446744073709550000—
stepsINT161–60—
promptSTRINGcrossview. <Picture 1> defines the selected camera position and framing. <Video 1> defines the exact same performer's identity, face, clothes, gestures, expression, and speech timing. Recreate the performance from the new angle without changing the person or dialogue. Keep the full head in frame and lips faithful to the original speech.—

Outputs (2)

NameTypeDescription
new_angle_framesIMAGE—
original_audioAUDIO—