Nodes/ComfyTV/Multiangle
ComfyUI Node

Multiangle

Grab a 3D camera widget, drag it around, and the AI re-renders your subject from that angle

By jtydhr88·Created 3 months ago·Updated about 16 hours ago· 725
Multiangle
  • image
  • image
force_run_token0
project_id
parent_output_id0
workflowQwen Edit 2511 Multiangle
horizontal_angle0
vertical_angle0
zoom5.0
main_prompt
custom_params{}

Multiangle is the "what does the back of this look like?" node. You've got a product shot or a character render and you want a side view, a back view, a three-quarter that doesn't exist yet. Instead of re-prompting from scratch and praying for consistency, you grab a 3D camera widget on the node, drag the handles to pick azimuth, elevation, and distance, and the model re-renders your subject from that viewpoint.

This is a generative stage, not a transform. That's the key distinction the pack keeps hammering: Multiangle is not Rotate (which spins the pixels you already have - instant, no Run, and your subject's unseen back remains unseen). Multiangle actually invents the new perspective, and it needs a Run and a real diffusion backend to do it.

How it works

The 3D camera widget writes three values: horizontal_angle (azimuth, 0–360), vertical_angle (pitch, -30..60), and zoom (distance). ComfyTV then composes the camera description into view keywords - things like "front-right quarter view, eye-level shot, medium shot" - using the <sks> token structure of the workflow's Multiangle LoRA, appends your optional main_prompt as supplementary context, and runs the workflow.

The shipped default is Qwen Edit 2511 Multiangle (Qwen Image-Edit + the Multiple-Angles LoRA). It needs real model files in your ComfyUI/models/ tree before anything renders:

  • Qwen Image Edit base → Comfy-Org/Qwen-Image-Edit_ComfyUI
  • Lightning 4-step LoRAlightx2v/Qwen-Image-Edit-2511-Lightning
  • Multiple-Angles LoRAPVC-Inc/Qwen-Image-Edit-2511-Multiple-Angles-LoRA

The pack's docs/models.md gives the exact folder layout; it's worth checking before your first Run, because an empty "nothing happened" on a generative stage is almost always a missing checkpoint.

The inputs that matter

  • image (optional) - the subject you're re-shooting. This is the whole point: wire your source render in.
  • horizontal_angle / vertical_angle / zoom - the camera position. Set them with the widget; that's what they're for.
  • workflow - which multiangle workflow to run (default Qwen Edit 2511 Multiangle).
  • main_prompt - optional subject context only. The pack's docs are explicit: don't hand-edit the <sks> camera structure in the workflow, and don't put camera direction in the prompt - the stage composes that. main_prompt is for "the red motorcycle," not "shot from the left."

One output: image (COMFYTV_IMAGE), the re-rendered view, ready for the picker, Image Variations, or a video stage.

Install

Same as every ComfyTV stage:

cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyTV

Restart ComfyUI - fully, and on Desktop/macOS into the running instance's custom_nodes by absolute path, with __init__.py verified at the top level. No extra Python deps.

Realistic expectation-setting: results are only as consistent as the base model + LoRA allow. Subjects with strong identity (logos, faces, text) are the hard cases - the model invents plausible geometry, and "plausible" is doing a lot of work. For a hero product that must be exact, treat Multiangle as a concept tool and keep the angles gentle.

CategoryComfyTV/Image

Inputs (10)

NameTypeDefaultDescription
force_run_tokenINT00–2147483647Internal — bumped on Run to invalidate ComfyUI's input cache.
project_idSTRINGInternal — populated by the projectStore on the frontend.
parent_output_idINT00–2147483647Internal — lineage parent set by spawn handlers on the frontend.
workflowCOMBOQwen Edit 2511 MultiangleWhich multiangle workflow to run.
horizontal_angleINT00–360
vertical_angleINT0-30–60
zoomFLOAT5.00–10
main_promptSTRINGOptional supplementary description appended after the LoRA's camera keywords.
custom_paramsSTRING{}Internal — JSON of user-defined parameter attachments/values for this node.
imageoptCOMFYTV_IMAGE

Outputs (1)

NameTypeDescription
imageCOMFYTV_IMAGE