Nodes/KIE.ai Nodes Next/KIE • Camera Director
ComfyUI Node

KIE • Camera Director

Write camera language once, reuse it on every shot

By felipederosilva·Created 2 months ago·Updated a day ago· 3
KIE • Camera Director
    • camera_direction
    • camera_plan_json
    ◄shot_sizemedium►
    ◄camera_angleeye level►
    ◄camera_movementdolly in►
    ◄lens35mm natural►
    ◄motion_speedslow►
    ◄stabilizationgimbal smooth►
    ◄focus_behaviorshallow depth of field, smooth rack focus to the subject►

    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.

    CategoryKIE Next/Studio/Direction

    Inputs (7)

    NameTypeDefaultDescription
    shot_sizeCOMBOmedium9 options: extreme wide, wide, full body, medium wide, medium, medium close-up, +3
    camera_angleCOMBOeye level10 options: eye level, low angle, high angle, bird's-eye, worm's-eye, Dutch angle, +4
    camera_movementCOMBOdolly in21 options: locked-off, pan left, pan right, tilt up, tilt down, dolly in, +15
    lensCOMBO35mm natural11 options: 14mm ultra-wide, 18mm wide, 24mm cinematic wide, 35mm natural, 50mm standard, 85mm portrait, +5
    motion_speedCOMBOslow6 options: very slow, slow, moderate, fast, very fast, speed ramp
    stabilizationCOMBOgimbal smooth5 options: tripod stable, gimbal smooth, steadicam organic, handheld subtle, handheld energetic
    focus_behavioroptSTRINGshallow depth of field, smooth rack focus to the subject—

    Outputs (2)

    NameTypeDescription
    camera_directionSTRING—
    camera_plan_jsonSTRING—