Kling 2.5 Turbo Image-to-Video
The fast, cheap way to animate a frame
- image
- last_image
- client
- video_url
Kling 2.5 Turbo is the budget end of the Kling family, and this node is how you reach it from ComfyUI. Give it a still frame, describe the motion you want, and a cloud server returns a 5- or 10-second clip. It's not the newest Kling - that's O3 and 2.6 - but Turbo exists because sometimes you want to animate a frame without lighting money on fire, and that's exactly the job it's good at.
It ships in the ERPK Collection, the community pack wrapping the WaveSpeed AI API. No local model, no VRAM math: WaveSpeed's cloud does the work, you pay per clip.
How it works
Connect an image, write a prompt (max 2500 characters), pick duration and prompt-adherence, and the node uploads your frame to api.wavespeed.ai. It polls every 10 seconds, up to 15 minutes, then hands you a video_url STRING. That string goes into the pack's Preview Anything node to watch and download.
One quirk worth knowing before you start: on this endpoint the seed widget is cache control, not reproducibility. Fixed value → ComfyUI serves a cached result and skips the call. Randomized → fresh, billed generation every queue. You choose.
The inputs that matter
image- your start frame as an IMAGE tensor; preferred overimage_url(a URL fallback, with the API's constraints: JPG/JPEG/PNG, min 300×300, aspect between 1:2.5 and 2.5:1).prompt- the motion. Max 2500 chars, so it won't fit a novella; keep it to what moves and how.model- Kling 2.5 Turbo or Kling 2.5 Turbo Pro. Pro is the one that supportslast_image, an end-frame for keyframe interpolation - genuinely handy if you want the clip to finish on a specific shot instead of wherever the model stops.guidance_scale- 0.0 to 1.0, default 0.5. Higher = sticks closer to your prompt, less creative deviation. This is the knob to turn when the clip keeps ignoring your instructions.negative_prompt- what to suppress. Works the way you'd expect from image models; useful for killing recurring artifacts.duration- 5 or 10 seconds, a combo box.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/eRepublik-Labs/comfyui-nodes-erpk.git erpk
cd erpk
pip install -r requirements.txt
Or ComfyUI Manager → search erpk → ERPK Custom Nodes. Nothing to download; the only prerequisite is a WaveSpeed API key with credits, set via right-click canvas > ERPK Settings (Settings > ERPK > API Keys).
Common issues
- "Starting image is required" - you must connect
imageorimage_url; the node won't guess a start frame for you. - Cached videos that won't change - you fixed the seed. The endpoint has no real seed parameter, so a fixed value reuses the last result. Randomize to force a new generation (and a new charge).
- Blurry or ignored motion - raise
guidance_scaletoward 0.7–0.8. If that kills the creativity you wanted, that's the tradeoff the knob exists for. - Costs sneaking up - Turbo is the cheap tier, but it's still per clip. Batch your prompting before you queue.
If 2.5 Turbo feels too soft for the shot, the Kling 2.6 and O3 nodes in the same pack are the quality ladder up. If it's plenty, congratulations - you found the economical one.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| model | COMBO | Kling 2.5 Turbo | Model variant: Kling 2.5 Turbo (Std) or Kling 2.5 Turbo Pro (higher quality, supports last_image) |
| prompt | STRING | Text description of the desired motion/scene (max 2500 chars) | |
| image_url | STRING | Starting image URL (JPG/JPEG/PNG, min 300x300, aspect 1:2.5-2.5:1). Fallback when the IMAGE input is not connected. | |
| imageopt | IMAGE | Starting image as a ComfyUI IMAGE tensor. Preferred — takes precedence over `image_url` when connected. | |
| last_imageopt | IMAGE | Pro only: end-frame image as a ComfyUI IMAGE tensor for keyframe interpolation. Preferred — takes precedence over `last_image_url` when connected. | |
| clientopt | WAVESPEED_AI_API_CLIENT | WaveSpeed API client (optional if API key is configured in Settings) | |
| negative_promptopt | STRING | Elements to suppress or avoid in the generated video | |
| guidance_scaleopt | FLOAT | 0.500–1 | Prompt adherence; higher values reduce creative deviation (0.0-1.0) |
| durationopt | COMBO | 5 | Video duration in seconds (5 or 10) |
| last_image_urlopt | STRING | Pro only: end-frame URL for keyframe interpolation. Fallback when the last_image IMAGE input is not connected. | |
| seedopt | INT | -1-1–2147483647 | Cache control: randomize re-runs generation each queue; a fixed value reuses the cached video. This endpoint has no seed parameter, so it is not sent to the API. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video_url | STRING | — |