Synvow Multiangle Camera
Drag a 3D camera, get a camera-angle prompt for free
- image
- prompt
- image
Synvow Multiangle Camera is the kind of node you don't know you need until you've typed "camera angle, low angle shot, close-up" into a prompt for the tenth time and gotten a hero shot anyway. It gives you a little interactive 3D viewport where you spin and zoom a camera, and it writes the prompt words for you. It belongs to the small family of tools built around Qwen multi-angle generation - the author names ComfyUI-qwenmultiangle (jtydhr88) as the direct inspiration - so if you're doing character or product consistency across shots, this is squarely aimed at you.
The node is a pure utility: it takes angles in, prints out a formatted prompt string. There's no model, no API, no key, and - rare for a camera tool - no heavyweight dependencies. Everything it imports (torch, PIL, numpy, folder_paths) already ships inside ComfyUI.
How it actually works
The mechanism is dead simple, and it's all in Multiangle_Camera.py. Your three camera inputs get snapped into discrete buckets:
- horizontal_angle (0–360) maps to 8 azimuth directions - "front view", "front-right quarter view", "right side view", and so on, with 22.5° boundaries.
- vertical_angle (–60 to 60) maps to 5 elevations: "extreme low-angle shot", "low-angle shot", "eye-level shot", "elevated shot", "high-angle shot".
- zoom (0–10) maps to 3 distances: "wide shot", "medium shot", "close-up".
Then it concatenates them into the output prompt: <sks> front view eye-level shot medium shot. That <sks> token is the giveaway - it's a DreamBooth-style placeholder. This prompt only means something to a model or LoRA that was trained to recognize it, which in practice means Qwen-Image-Edit 2511 paired with a Multiple-Angles LoRA. Feed the string to a vanilla checkpoint and <sks> is just noise; you'll get a random camera angle and wonder why the node is lying to you. It isn't - it's speaking the LoRA's language.
The inputs and outputs that matter
You only ever set three things by hand, and the 3D widget lets you set them by dragging instead of typing:
horizontal_angle- spin the camera around the subject.vertical_angle- tilt up or down.zoom- push in for the close-up, pull back for the wide.
size_mode and max_long_edge (default 1024) control output resolution: "custom" resizes your image so the long edge matches max_long_edge, "original" leaves it alone. The optional image input takes an IMAGE tensor; if you leave it disconnected, the node's own UI gives you a load button and drag-and-drop upload instead. Either way it needs an image - if both are missing, it raises a ValueError rather than producing a blank result.
Two outputs, both useful: prompt (STRING, wire it into your text prompt) and image (IMAGE - the processed/resized source, which you'd feed into the editing model alongside the prompt).
Installing it
The lazy way: ComfyUI Manager → search "SynVow" → install, then restart. The manual way:
cd ComfyUI/custom_nodes
git clone https://github.com/shumoLR/Comfyui_SynVow_MultiangleCamera
# restart ComfyUI
That's the whole install. No requirements.txt, no model downloads, no weights to fetch - the only moving part is the JS extension, and it pulls three.js from the esm.sh CDN at page load. That's the one thing that bites people: offline or firewall-blocked, the pretty 3D viewport won't render, though the node still works fine through the sliders.
Where people get burned
The big one: the <sks> prompt is not a free universal camera control. This node is a prompt formatter - the actual multi-angle magic comes from a Qwen-Image-Edit model plus the fal Multiple-Angles LoRA, which is the setup the original qwenmultiangle project expects. Grab that LoRA before you blame the node. Second: the interactive viewport needs the CDN reachable, as noted. And third, the angle buckets are coarse - 22.5° steps mean "rotate 15°" may land in the same bucket. If you need fine control, this tool isn't that; it's for getting consistent, readable camera-language shots fast.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| horizontal_angle | INT | 00–360 | — |
| vertical_angle | INT | 0-60–60 | — |
| zoom | FLOAT | 5.00–10 | — |
| size_mode | COMBO | custom | 2 options: custom, original |
| max_long_edge | INT | 102464–8192 | — |
| imageopt | IMAGE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| prompt | STRING | — |
| image | IMAGE | — |