Nodes/ComfyUI API Toolkit/Kling Camera Control
ComfyUI Node

Kling Camera Control

Give your Kling video a camera move without touching the prompt

By IxMxAMAR·Created 5 months ago·Updated 2 months ago· 1
Kling Camera Control
    • KLING_CAMERA
    typesimple
    horizontal0.00
    vertical0.00
    pan0.00
    tilt0.00
    roll0.00
    zoom0.00

    Kling's text-to-video model will happily animate your scene, but left to itself it tends to hold the camera mostly still. This node is the fix: a small builder that packages up a camera move and hands it to a generation node, so your dolly, pan, tilt or zoom is actually enforced instead of requested in the prompt and half-ignored. You reach for it when a static shot is driving you up the wall and you want the camera work to be deliberate.

    The name is a little misleading - it doesn't call the Kling API at all. It's a pure payload builder. You pick a movement type (simple, horizontal, vertical, pan, tilt, roll, or zoom) and set the six axis values (horizontal, vertical, pan, tilt, roll, zoom), each on a −10 to 10 scale, and it assembles those into a KLING_CAMERA object on its single output. That output is the camera_control input you'll find on this pack's Kling Text to Video and Kling Image to Video nodes. Nothing happens until you wire the purple pipe into one of those.

    What actually matters to set:

    • type - the movement kind. simple just applies the raw axis values; the named ones bias the result toward that move. zoom is the one people reach for most.
    • The axis you're using. You can leave the rest at 0. A small value is usually plenty - think of −10 to 10 as "a little" to "a lot" rather than precise physics. Start at 2–3.
    • If you set nothing but type, you get a simple move with zero on every axis, which is the same as no camera control at all. Set at least one axis.

    The whole point of this node is that it's boring on purpose. Put it between your workflow's inputs and the video node, tweak the axes, and re-queue until the move feels right. Because every node in this pack implements IS_CHANGED, each queue run re-sends the camera config - you get a fresh shot every time, not a cached one.

    Installing it

    This ships inside the ComfyUI-API-Toolkit pack, so there's nothing to install separately:

    • ComfyUI Manager: search "API Toolkit" and install.
    • Manual: cd ComfyUI/custom_nodes && git clone https://github.com/IxMxAMAR/ComfyUI-API-Toolkit && pip install -r requirements.txt, then restart ComfyUI.

    The pack's requirements for the Kling service are just requests and PyJWT - camera control touches neither, so it works even if you skipped the optional audio/Gemini deps.

    Gotchas

    The camera object is passed straight into the API call, and Kling only honors it for the models and modes that support camera control. If your generation ignores it entirely, it's usually because you're on std mode or a model that doesn't take the field - pro is where you'll actually see it work. And remember the video still has to be a camera move that makes sense for your subject; roll on a close-up of a face is a good way to learn what motion sickness in a render looks like.

    Beyond that, the usual Kling API caveats apply: it's a cloud call, so each queue costs credits, and your prompt and image leave the machine. That's the price of a model you can't download, and it's the one case the community actually signs off on.

    CategoryAPI Toolkit/Kling AI/Config

    Inputs (7)

    NameTypeDefaultDescription
    typeCOMBOsimpleCamera movement type.
    horizontalFLOAT0.00-10–10Horizontal camera movement (-10 to 10).
    verticalFLOAT0.00-10–10Vertical camera movement (-10 to 10).
    panFLOAT0.00-10–10Camera pan (-10 to 10).
    tiltFLOAT0.00-10–10Camera tilt (-10 to 10).
    rollFLOAT0.00-10–10Camera roll (-10 to 10).
    zoomFLOAT0.00-10–10Camera zoom (-10 to 10).

    Outputs (1)

    NameTypeDescription
    KLING_CAMERAKLING_CAMERA