KIE • Camera Director
Write camera language once, reuse it on every shot
- camera_direction
- camera_plan_json
Most nodes in this pack cost money the moment you queue them. This one is free, offline, and doesn't call KIE at all: it builds a camera sentence out of structured dropdowns and hands it back as a string you paste into a video model's prompt. If you've ever watched a Seedance clip drift into a random slow zoom because you wrote "a woman walks through a market" and nothing else, this node is the fix, and it costs nothing to experiment with.
It's also a genuinely opinionated answer to an unglamorous problem. Video models take camera language as text, and humans are bad at writing it consistently - you say "wide shot" in one prompt, "establishing wide" in the next, and the model treats them as different intentions. Six dropdowns fix the vocabulary, and reusing the same node across shots fixes the consistency.
The inputs that matter
Six required enums plus one text field, all of them the author's curated lists rather than free text.
shot_size - nine choices, from extreme wide through full body, medium, close-up and macro detail. This is the single most important one; it's the difference between a landscape that happens to contain a person and a portrait that happens to have a background. camera_angle covers the usual grammar: eye level, low angle, high angle, bird's-eye, worm's-eye, Dutch angle, over-the-shoulder, POV, profile, three-quarter.
camera_movement has 21 options - locked-off, pans, tilts, dolly in/dolly out, trucks, pedestals, orbit clockwise, and more. lens is the focal-length ladder nobody bothers writing by hand: 14mm ultra-wide up to 135mm telephoto, plus anamorphic, fisheye and tilt-shift. motion_speed runs very slow → very fast (and speed ramp), and stabilization runs tripod stable → handheld energetic.
The optional focus_behavior is free text and defaults to shallow depth of field, smooth rack focus to the subject, which is a sane house style - change it to deep focus, everything sharp for a documentary look, or clear it if you don't want focus language fighting your prompt.
On naming a physical lens: this is the part of prompting that actually works. Naming real equipment - a focal length, a film stock, anamorphic glass - moves image and video models further than any stack of quality adjectives, because those tokens sit on real captions in the training data. So the lens dropdown isn't decoration; it's the highest-leverage knob in here.
Outputs
camera_direction is the sentence itself, assembled from your choices with the focus behavior appended - the thing you wire or paste into a video node's prompt field. camera_plan_json is the same seven values as JSON, indented and readable, which is what you want when you're documenting a shot or feeding a downstream node that expects structured input.
Neither output triggers a generation. Nothing is spent. You can sit here cycling shot sizes for an hour on a coffee break.
How to actually use it
Build a camera setup, then concatenate: your scene description plus camera_direction. In a node graph that means a text-concatenation node or simply a string input, which is exactly the same plumbing pattern as core PrimitiveString composition - this node is a prompt-writing widget with structure bolted on, nothing more mystical.
The real payoff is the pack's shot-planning sibling: KIE • Shot Sequence takes shot size, angle, lens, speed and stabilization once as shared setup, then per-shot prompts with their own duration and movement, and emits a director prompt plus a JSON plan. In practice you tune your look in Camera Director, commit it into the sequence, and get one text block describing a multi-shot piece that a Seedance or V1-Pro node can consume. The author's framing is worth repeating: where a provider doesn't expose native camera parameters, this camera language is how you get there - through the prompt.
Install
Same as the rest of the pack. ComfyUI Manager → search KIE.ai Nodes Next (publisher id felipeosilva). If it isn't listed, the README's registry publishing is still "prepared" rather than done, so clone it:
cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
pip install -r ComfyUI-KIE-Nodes-Next/requirements.txt
Restart ComfyUI. Requirements are light - requests, Pillow, numpy, PyYAML - and there are no model files, since nothing runs locally. Set the KIE key once in Settings → KIE.ai Nodes Next → Connection before you queue an actual generation node; KIE_API_KEY in the environment overrides it for servers.
Gotchas
More camera language is not better. Cramming dolly in and orbit clockwise and speed ramp into one shot doesn't stack; models pick one and improvise the rest. Pick the movement you mean.
Contradictions get resolved in whichever direction the model prefers. close-up with 14mm ultra-wide is a real photographic look and a prompt fight - expect the wide lens to win on spatial distortion and the framing to land wherever the model feels like it.
It doesn't know your model. Kling has native camera controls in this pack's Studio branch; a Lite text-to-video node has only its prompt. Camera Director writes text, and text is all some endpoints accept, so on those models you're describing the shot rather than commanding the camera.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| shot_size | COMBO | medium | 9 options: extreme wide, wide, full body, medium wide, medium, medium close-up, +3 |
| camera_angle | COMBO | eye level | 10 options: eye level, low angle, high angle, bird's-eye, worm's-eye, Dutch angle, +4 |
| camera_movement | COMBO | dolly in | 21 options: locked-off, pan left, pan right, tilt up, tilt down, dolly in, +15 |
| lens | COMBO | 35mm natural | 11 options: 14mm ultra-wide, 18mm wide, 24mm cinematic wide, 35mm natural, 50mm standard, 85mm portrait, +5 |
| motion_speed | COMBO | slow | 6 options: very slow, slow, moderate, fast, very fast, speed ramp |
| stabilization | COMBO | gimbal smooth | 5 options: tripod stable, gimbal smooth, steadicam organic, handheld subtle, handheld energetic |
| focus_behavioropt | STRING | shallow depth of field, smooth rack focus to the subject | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| camera_direction | STRING | — |
| camera_plan_json | STRING | — |