Nodes/KIE.ai Nodes Next/Kling 3.0 Omni Reference To Video
ComfyUI Node

Kling 3.0 Omni Reference To Video

Character references, and the one JSON field you have to fill in yourself

By felipederosilva·Created about a month ago·Updated a day ago· 3
Kling 3.0 Omni Reference To Video
    • video
    • url
    • all_urls_json
    • task_id
    • raw_json
    • credits_consumed
    • credits_left
    ◄prompt►
    ◄timeout_seconds1200►
    ◄callback_url►
    ◄expert_override_json{}►

    What "reference to video" means here

    Every other mode in Kling's family takes a frame - this takes who. You hand it reference images of a subject (a character, a product, a face) and it generates a shot with that subject in it, held consistent across the clip. It's the reference-conditioning branch of the family tree, and it's the same idea as reference-image conditioning in the open ecosystem: instead of describing the character in words and hoping, you show the model.

    This is the node for "my character, in a new scene, doing something" rather than "this exact still, but moving."

    Kling is Kuaishou's closed model, so there's no local option. The API route here is KIE.ai - a reseller with its own account and credits, not ComfyUI's official Partner Nodes. KIE_Next_kling_3_0_omni_reference_to_video_6f0ef717 lives under KIE Next / Video / Kling.

    Why this node looks half-finished

    It ships with exactly one required widget: prompt. Then timeout_seconds, callback_url, and expert_override_json.

    That's the pack's automatic node factory at work. KIE Next reads KIE's API documentation index and builds a ComfyUI node per documented endpoint, turning request fields into widgets. When a documentation page has example payloads but no published request schema, there are no fields to convert - so you get a prompt box and the expert override escape hatch. The reference-image fields on this endpoint are in that category.

    Practical consequence: to actually send references, you fill in the JSON yourself.

    A working recipe

    Upload your reference image with the pack's KIE • Upload Image utility node - it takes an IMAGE, pushes it to KIE's file host and outputs the resulting url. Then paste into expert_override_json:

    {
      "image_urls": ["https://your-uploaded-reference.png"],
      "prompt": "the character walks through a rain-lit alley, cinematic, handheld"
    }
    

    The node merges that object into the request input before sending, so field names have to be KIE's, not yours. The prompt widget still works if you'd rather type the prompt there - an override only wins where the keys collide.

    The rest of the plumbing is the same as every generated node in this pack: upload → POST createTask → poll recordInfo until success (interval grows from ~2.5s to a 15s cap) → download the MP4 into output/KIE-Results/videos/ → hand back a native VIDEO.

    Inputs and outputs, honestly

    Required: prompt - the one field the factory could infer. Optional: timeout_seconds (1200 by default, so twenty minutes of patience; raise it for long or high-res jobs), callback_url (leave empty unless you're running a webhook server), expert_override_json (your reference URL goes here for now).

    Outputs: video, url, all_urls_json, task_id, raw_json, credits_consumed, credits_left. Wire video into a Save Video or preview; keep raw_json for failure forensics; watch the credit receipt that prints on the node after every successful run. If KIE's balance service is briefly down, credits_left returns -1 and the generation still completes.

    The honest caveat about consistency

    A reference image is a condition, not an identity lock. The pack's own documentation says this out loud, and the open-model community learned it the hard way through 2025 and 2026: reference conditioning is strong for a face and weaker for full-body design - outfit, proportions, hair length in non-frontal views. If you need the same character across fifty shots, the reliable answer remains a trained LoRA or an edit model in a chain, not a single reference frame. This node is for one shot with the right character in it.

    Install

    cd ComfyUI/custom_nodes
    git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
    

    Restart ComfyUI. Then Settings → KIE.ai Nodes Next → Connection → Paste / replace KIE.ai API key: it's validated before being saved, kept outside your workflow, and confirmed with a masked fingerprint and ✅ CONNECTED (plus your current credit balance when KIE is reachable). Headless installs can export KIE_API_KEY; it takes priority over the saved one. Dependencies are requests, Pillow, numpy, PyYAML - nothing exotic. Manager install works where the pack is listed, and the repo ships a ZIP and one-click Windows installer under dist/.

    Things that will bite you

    • The node may gain real widgets later. These nodes are generated at startup and the catalog re-syncs at most once a day. When KIE publishes a request schema for this page, an image socket shows up. The override JSON keeps working; it just stops being mandatory.
    • Older ComfyUI builds fail on video output. If you see an error about comfy_api.latest not exposing a video-from-file helper, update ComfyUI rather than the pack.
    • Bad JSON fails the run before it's sent - good, that's local validation saving you a paid failed job. The error names expert_override_json, so watch your quotes and trailing commas.
    • Moderation follows the model. Your reference images and prompt go to KIE and then to Kuaishou's filter. There is no local bypass for a closed model - nothing to abliterate, no weights to nudge.
    CategoryKIE Next/Video/Kling

    Inputs (4)

    NameTypeDefaultDescription
    promptSTRINGPrompt sent to this KIE model.
    timeout_secondsoptINT120030–7200—
    callback_urloptSTRINGOptional KIE callback URL. Leave empty for normal ComfyUI use.
    expert_override_jsonoptSTRING{}Expert-only payload overrides for APIs whose documentation has no request schema yet.

    Outputs (7)

    NameTypeDescription
    videoVIDEO—
    urlSTRING—
    all_urls_jsonSTRING—
    task_idSTRING—
    raw_jsonSTRING—
    credits_consumedFLOAT—
    credits_leftFLOAT—