Kling O3 · Text to Video
No image, no seed, and no free retries
- video
- task id
What it is
The plainest of the Kling O3 nodes: type a prompt, pick a shape and length, get 3 to 15 seconds back at up to 4K, in 16:9, 9:16 or 1:1. No frame to feed it, no reference cast, no source clip. Just words, a meter, and Kling 3.0 Omni running somewhere that isn't your computer.
That last part is the point. Kling has never shipped weights. There is no quantized GGUF of this in anyone's models folder, and there never will be, so a hosted node is not a compromise here - it's the only mechanism that exists. The trade is the usual one for API nodes: your prompt leaves the machine, the model's filter is final, and every call costs money. In exchange you get a frontier closed model inside a graph that can still do your local upscaling, masking and compositing afterwards.
How it runs
The node is an HTTP client wearing a node costume. On Run it assembles a request from your widgets - omitting anything still sitting on a "model default" or -1 so the model decides - asks SpicyAPI what the run will cost, honours your per-run spending ceiling if you set one, submits, polls while printing progress on the node, then downloads the MP4 and decodes it into a ComfyUI VIDEO. Save Video writes it out. Nothing about the node is Kling-specific; the same machinery is behind all 189 model nodes in the pack.
Inputs, in the order you should care
prompt is where the work is. Describe the scene, the action and the camera move in plain language, and if you turned audio on, put dialogue in quotes and name the sounds you want - the node's own tooltip says exactly that, and it's the author telling you how the endpoint reads a prompt. Long beats clever: video models reward specifics about what moves and how the camera behaves, and this one is no different.
Then the two that decide your bill:
- duration_seconds, 3 to 15 in whole seconds, billed per second
- resolution, 720p out of the box, with the tooltip's blunt warning that higher tiers cost more per second
And the two that change the shape of the output:
- aspect_ratio - 16:9, 9:16 or 1:1
- generate_audio - off by default, native soundtrack (voices, effects, ambience) when on, and it raises the per-second rate
shot_type governs editing. single gives one continuous shot. multi lets the model cut your prompt into several shots by itself - good for a montage feel, less predictable than it sounds. customize hands it a shot list instead: multi_prompt takes JSON, a list of objects each with a prompt and a duration_seconds, and their lengths must add up to the duration you chose. Getting that sum wrong is a validation error, not a clip.
Outputs are video, wire it to Save Video, and task id, a string naming the exact job on SpicyAPI. Keep it when you raise a ticket; it beats describing what you did.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi
Restart ComfyUI. That's the whole install - no dependency list, no model file, nothing to download. Add your key under Settings > SpicyAPI (or SPICY_API_KEY in the environment on a headless box), restart once so the node list is pulled from your account, and you're done. ComfyUI Manager users can search the pack title, SpicyAPI. You'll want a recent ComfyUI - the pack uses the V3 node API and is tested against 0.39 - on Python 3.10 or newer.
The honest downsides
There's no seed. So there's no such thing as a repeatable draw here, and no "same settings, new dice" either - every run is a purchase and you can't dial one back in. If you're used to seed-hunting your way to a good local clip, that reflex is expensive on this node.
Costs stack in two directions. Duration multiplies the per-second rate; resolution and audio each move the rate itself. A 15-second 4K run with sound is not a 5-second 720p silent run with a bigger number in front of it. Watch the badge as you change options, and set Max cost per run in the settings panel - an over-budget quote stops before anything is charged, which is the only guardrail you get.
Cancel doesn't mean cancel. Your job keeps running server-side, gets charged if it succeeds, and stays in your console for up to 14 days. Abandoning a slow run doesn't abandon the bill.
Failure codes are worth knowing. No SpicyAPI key is set means the key isn't visible to this ComfyUI user directory. 40310 is an unverified email. 40004 names an option combination no deployment serves. Anything ending in request_id ... is support's problem, and they'd like that id.
Model list looks stale? Restart. The node list is built from your account's catalogue at startup, so anything added on the SpicyAPI side shows up only after a restart - and without a key at all, you get the list bundled with the release.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Describe the scene, the action and the camera. With sound on, add dialogue in quotes and the sounds you want. | |
| aspect_ratio | COMBO | 16:9 | Output aspect ratio. |
| resolution | COMBO | 720p | Output resolution. Higher tiers cost more per second. |
| generate_audio | BOOLEAN | false | Generate a native soundtrack (voices, effects, ambience) with the picture. Audio costs more per second. |
| duration_seconds | INT | 53–15 | Output length in whole seconds, from 3 to 15. Billed per second. |
| shot_type | COMBO | single | single keeps one continuous shot; multi lets the model cut the prompt into several shots on its own; customize follows the shot list you give in multi_prompt. |
| multi_prompt | STRING | Shot list for shot_type customize: one entry per shot, in order, each with its own prompt and length in seconds. The lengths must add up to duration_seconds. JSON. A list of objects with "prompt", "duration_seconds". | |
| seed | INT | 00–2147483647 | This model takes no seed, so the number is never sent. Changing it makes ComfyUI run the node again: set 'control after generate' to randomize for a new result on every run; every run is billed. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| task id | STRING | The SpicyAPI task id, for the console logs or support. |