Qwen Multiangle Camera
Drag a camera around in 3D and never type 'eye-level shot' again
- image
- Prompt
- Camera Info
You know that trick where Qwen-Image-Edit re-shoots the same subject from a new camera angle? This is the node that turns that trick from "type a phrase and hope" into "grab a handle in a 3D scene and drag." The Qwen Multiangle Camera node gives you an interactive Three.js viewport - your image floating on a card in 3D space, with colored handles around it - and every drag gets translated into a camera prompt the Multiple-Angles LoRA actually understands.
Let me clear up the first thing: the name is a lie. It doesn't call any API, needs no key, and generates nothing by itself. It's a prompt-formatting widget. What it formats is worth it, though - the community moved camera framing from a ControlNet problem to a LoRA-plus-prompt problem, and this node is the comfy end of that pipeline. The modidex notes on the LoRA report 90%+ success over a few hundred runs at 4-step inference, working on stylized and painterly sources, and it was the first thing that did angles for locations, not just subjects.
What it actually does
The node ships an interactive 3D preview (Vue + Three.js, bundled in the pack - you don't build anything). Three handles orbit your image:
- Pink ring handle - horizontal angle / azimuth (0–360°)
- Cyan arc handle - vertical angle / elevation (−30° to 60°)
- Gold line handle - distance / zoom (0–10)
Behind the scenes the Python side buckets your continuous angles into the discrete vocabulary the LoRA was trained on: 8 horizontal directions, 4 elevation levels, 3 distance classes. Drag freely; the node snaps your intent to the closest real phrase. It outputs something like <sks> front-right quarter view elevated shot close-up.
The inputs and outputs that matter
The node is a UI-first widget, so honestly you'll set almost nothing by hand:
- horizontal_angle, vertical_angle, zoom - the three sliders. Drag the 3D handles instead; they sync both ways. The tooltips tell you the real ranges: azimuth 0–360°, elevation −30° to 60°, distance 0 (wide) to 10 (close-up).
- camera_view - a checkbox that switches the preview into the camera's own perspective, with orbit controls (drag to rotate, scroll to zoom). Handy for checking your shot before committing.
- default_prompts - a trap. It's marked deprecated in the source and does literally nothing. Leave it alone.
- image (optional) - plug in your source image and it appears in the 3D scene as the card you're framing. Only the first frame is used for preview; the actual editing still runs on your real input downstream.
Outputs: Prompt (STRING) is the one you use - wire it straight into the prompt input of your Qwen-Image-Edit workflow. There's also Camera Info (LOAD3D_CAMERA), which carries the preview camera's position/target for 3D-camera viewer nodes; ignore it unless you're building scenes.
Installing it
Grab it via ComfyUI Manager (search "ComfyUI-qwenmultiangle") or:
cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyUI-qwenmultiangle.git
Then restart ComfyUI. The dirty secret is the model, not the node: you must also download the fal/Qwen-Image-Edit-2511-Multiple-Angles-LoRA from Hugging Face into your ComfyUI/models/loras folder, or the node produces perfect prompts that do nothing. No pip install needed - it's a V3-API node with the frontend prebuilt and committed, so no npm step either.
Typical workflow
LoadImage → Qwen Multiangle Camera (image in for preview) → its Prompt out into the text encoder or the editor node's prompt, alongside your Qwen-Image-Edit-2511 model. On consumer VRAM you'll want the GGUF quantizations plus a Lightning step-reduction LoRA - the full 20B at bf16 won't fit, and the 4-step path is what makes iterating a few hundred times affordable.
Where people get burned
- Language mismatch. The prompt always comes out in English. If your base prompt is Chinese or Japanese, the model tends to ignore the mismatched English camera terms - the README says so outright. That's what the sibling Translate node fixes.
- Drift and splitting. The editor re-emits the whole frame, and chaining multiple edits makes characters split badly (a storyboard author's exact complaint). For a sequence of angles, re-run each shot from the original rather than feeding the last output forward.
- LoRA not applying. Wrong folder, or a LoRA trained on a different revision. 2511 accepts 2509 LoRAs, so most Multiple-Angles variants work - just check where you put it.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| horizontal_angle | INT | 00–360 | Camera azimuth angle (0-360°) |
| vertical_angle | INT | 0-30–60 | Camera elevation angle (-30° to 60°) |
| zoom | FLOAT | 5.00–10 | Camera distance (0=wide, 10=close-up) |
| default_prompts | BOOLEAN | true | Deprecated, kept for backward compatibility |
| camera_view | BOOLEAN | false | Toggle camera perspective preview |
| imageopt | IMAGE | Optional input image to display in the 3D scene |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| Prompt | STRING | — |
| Camera Info | LOAD3D_CAMERA | — |