Camera Angle Control
Turn camera directions into prompt words the model actually gets
- camera_description
Camera Angle Control is a prompt-writing helper that turns sliders into camera direction. Instead of typing "three-quarter view from the right, low angle, telephoto" and hoping the phrasing lands, you move four sliders - rotation, vertical angle, distance, focal length - and the node builds the descriptive text for you. One output, one string, straight into a text box or a concatenation node. It's aimed at the people who want repeatable, consistent camera setups across a series of shots without retyping the same description and praying the wording doesn't drift.
How it works
The node is a set of keyword-mapping functions dressed as sliders. Each axis has an enable_ toggle plus a value slider, and only enabled axes contribute to the output (they're joined with commas). The ranges map to real cinematography vocabulary:
rotation_value(−180 to 180) - front view through slight/two-thirds/profile angles to behind-the-subject and back view. The-/+sign picks the side.vertical_value(−100 to 100) - eye level, then high angle / bird's-eye view going up, low angle / worm's-eye view going down.depth_value(−100 to 100) - mid shot through close-up / macro at the positive end, full-body and wide establishing shots at the negative end.focal_length_value(0–600mm) - fisheye, wide angle, standard, portrait, telephoto, super-telephoto.
The one input you should leave on is precise_mode (default true) - it appends the exact numbers to the keywords (three-quarter view from right (angle 45.0°)). Turn it off for a cleaner keyword-only string that some models read more naturally.
The honest take
This node is most valuable on modern models with LLM-based text encoders, and that's not a coincidence. The knowledge base's prompt engineering essay makes the point: naming a physical camera is one of the highest-leverage moves there is on models like Z-Image, Krea, and Flux - the encoder was trained on real captions that describe cameras - while old-school tag spam is largely inert. So a natural "low angle shot, worm's eye view from below (vertical angle -80.0), telephoto lens (200.0mm)" description is exactly the input those models reward. On SDXL it still helps, but the effect is subtler.
Installing
This is one of the 26 nodes in ComfyUI-Flow-Assistor - ComfyUI Manager (search "Flow Assistor") or:
cd ComfyUI/custom_nodes
git clone https://github.com/Merserk/ComfyUI-Flow-Assistor.git
Restart after cloning. Current ComfyUI required (V3-only pack), no extra dependencies or model downloads.
Where people get burned
The output is just the camera description - there's no subject, lighting, or scene in it, so if you wire it straight into CLIP Text Encode by itself you'll get a very empty image. Concatenate it with your actual prompt. And remember the enable toggles: sliders sitting at their defaults do nothing until you flip the matching enable_ switch, which trips people up more than it should - set enable_rotation on, then drag the value. Lastly, precise mode's numeric suffixes can read as noise on SDXL; if the results feel cluttered, flip precise_mode off before abandoning the node.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| precise_mode | BOOLEAN | true | Include exact numbers alongside viewpoint keywords. |
| enable_rotationopt | BOOLEAN | false | — |
| rotation_valueopt | FLOAT | 0-180–180 | — |
| enable_verticalopt | BOOLEAN | false | — |
| vertical_valueopt | FLOAT | 0-100–100 | — |
| enable_depthopt | BOOLEAN | false | — |
| depth_valueopt | FLOAT | 0-100–100 | — |
| enable_focal_lengthopt | BOOLEAN | false | — |
| focal_length_valueopt | FLOAT | 500–600 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| camera_description | STRING | — |