Kling V3 Omni (BudgetPixel)
The one BudgetPixel node that does all four video jobs
- end_image
- image
- reference_images
- video
- video
Kling V3 Omni is the node you reach for when you don't want to pick a Kling variant. It's one model that covers text-to-video, image-to-video (with an optional end frame), reference-images-to-video with up to seven images, and video-to-video editing - all in a single node. Most of the other Kling nodes in this pack specialize; this one is the generalist, and at 85 credits per second it's the mid-priced option between the standard and 4K tiers.
Like every node in the BudgetPixel pack, this one doesn't run anything locally. You give it a prompt (and optionally some media), it POSTs a job to the BudgetPixel API, polls until the render is done, and downloads the result back into your graph as a core VIDEO value. No GPU, no model files, no Kling weights sitting in your ComfyUI directory. That's the whole API-wrapper pattern in one paragraph - if you want Kling, it's not like you had a local option anyway, since Kling has never shipped open weights.
The inputs that matter
prompt(required) - your text description. This is where all the effort goes for text-to-video.image- the start frame for image-to-video.end_imagepairs with it to interpolate a clip between two frames.reference_images- up to seven images that guide the video. This is the reference-to-video mode, and it's mutually exclusive withimage/end_image; you can't mix start frames and reference images in one request.video- an input video that flips the node into video-edit mode. You can bring up to four reference images along with it, but not start/end frames.length_seconds- 3–15 seconds (default 5). In video-edit mode set it to the input's rounded duration; that's what billing uses.resolution(720p / 1080p / 4k) andaspect_ratio- the usual. Aspect ratio is ignored once an image or video sets the frame.generate_audio- default off. It raises the per-second rate at 720p/1080p (no price impact at 4K), and it's simply unavailable in video-edit mode, where the model forces sound off.
Output is a single video socket carrying a ComfyUI VIDEO. Wire it into a Save Video node or a frame extractor.
Where people get burned
The video-edit mode has two quirks that surprise people. First, output length follows the input - set length_seconds to match or you'll be billed against the wrong number. Second, audio is always off when you edit an existing video; there's no way around it, it's a model constraint, not a setting you missed.
The other classic trap is the interrupt behavior, which is shared across the whole pack: if you hit stop while a job is polling, the node gives up waiting, but the server-side render keeps running - and keeps billing. Interrupting a Kling render to save credits does the opposite.
Install and first run
Install via ComfyUI Manager (search "BudgetPixel") or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/budgetpixel-ai/comfyui-budgetpixel.git
pip install -r comfyui-budgetpixel/requirements.txt
Restart ComfyUI and the node lives under Add Node → BudgetPixel → Video. You'll need a BudgetPixel API key (included in every paid plan) set as the BUDGETPIXEL_API_KEY environment variable or in a budgetpixel.json file inside the pack folder - there's no key widget, deliberately, so shared workflows don't leak secrets.
If you get a MissingAPIKeyError, that's the key not being found. If the node's video socket shows up but nothing saves, you're probably on an older ComfyUI - these nodes output the core VIDEO type, which needs a 2025+ ComfyUI build. And use the BudgetPixel Cost Estimate node first if you're unsure what a 15-second 1080p clip will run you, because per-second video billing adds up fast.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Text description of the video. | |
| aspect_ratioopt | COMBO | 16:9 | Aspect ratio. Ignored when an input image or video already sets the frame. |
| end_imageopt | IMAGE | Optional end frame, used together with `image` (the start frame) to interpolate the video between the two frames. Same input forms as `image`. | |
| generate_audioopt | BOOLEAN | false | Generate audio with the video. Raises the 720p/1080p per-second rate (no price impact at 4K); unavailable on video-edit. |
| imageopt | IMAGE | Optional start frame for image-to-video. Provide a public image URL, a data URI, raw base64, or an uploaded-file URL from POST /v1/uploads. Omit for text-to-video. Can't be combined with `reference_images`. | |
| length_secondsopt | INT | 53–15 | Video length in seconds (3–15). For video-edit, set this to the input video's rounded duration. |
| reference_imagesopt | IMAGE | Optional reference images that guide the generated video. Each item is a public image URL, a data URI, raw base64, or an uploaded-file URL from POST /v1/uploads. Can't be combined with `image`/`end_image` (start/end frames). Up to 7 on their own (reference-images-to-video); up to 4 when accompanying a `video` edit. | |
| resolutionopt | COMBO | 720p | Output resolution. Pricing varies by resolution — see `resolution_pricing` in GET /v1/models. |
| videoopt | VIDEO | Optional input video for video-to-video editing. Provide a public video URL or an uploaded-file URL from POST /v1/uploads (videos are passed by URL, not inlined). When set, the request runs in video-edit mode: up to 4 `reference_images` may guide the edit, start/end frames are not supported, audio is always off, and the output length matches the input video — set `length_seconds` to the input's duration rounded to whole seconds (3–15), which is what billing uses. | |
| force_rerunopt | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |