Kling 2.1 · Image to Video
Animate a still, at 720p or 1080p, for pennies
- image_url
- last_image_url
- video
- task id
Kling without the fifty-tab web app
Kling has been the reference point for closed image-to-video for two years - it's the name people compare open models against, and the reason a certain kind of comment on every open-source video release is "close, but it's not Kling". Using it normally means a browser tab, a queue, and a credit system you don't control. This node puts the same capability behind an IMAGE socket: connect a picture, write what should happen, get a VIDEO back.
Where it fits: your local pipeline (Wan, LTX, whatever you can actually run) produces and iterates the frame; Kling animates the one you keep. That's the sane division of labour - local for the ten attempts, cloud for the final.
Kling 2.1 is the mid rung now, priced at about 5.25 credits per second of output, which makes a five-second clip roughly 26 credits. That's cheap enough to iterate, which is not a sentence you could write about the Master variant.
What the node actually does
It's an HTTP client wearing a node costume. Your opening frame is encoded to PNG - or JPEG at high quality if it exceeds the 10 MiB upload cap - and uploaded once, cached for twelve hours on the content hash so a re-run with a new prompt doesn't resend it. Then the node requests a quote, creates the task with an idempotency key so retries can't double-bill, polls until the task settles, downloads the MP4 and decodes it into ComfyUI's VIDEO type. No weights, no VRAM, no dependency installs - the pack's dependency list is empty.
Timing: the poll budget follows the model's own declared task timeout plus a five-minute grace, so long 1080p renders won't be cut off by an impatient wrapper.
Inputs
prompt- what happens after the opening frame: the action and the camera. Not a description of the image you already sent.image_url- the opening frame. JPEG or PNG, though the node handles the encoding either way.resolution-720pby default;1080pcosts more per second. Pay for 1080p on the shot you're keeping.duration_seconds-5or10, billed per second. Ten seconds of a model that starts inventing faces at the four-second mark is ten seconds you paid to delete.negative_prompt- a short list of things to avoid. Keep it short; paragraph-length negatives have a way of leaking back in.guidance_scale- 0 to 1, default0.5. This is the one that confuses everyone. It is not a CFG value from 1 to 20, so don't type 7 and wonder why nothing changed. Higher is more literal, lower gives the model room.last_image_url(optional) - a closing frame the clip should land on. This is how you get a controlled transition instead of a drift.
Outputs: video (VIDEO - wire it to Save Video) and task id (STRING, your handle in the API console).
Install
comfy node install popnow-comfyui
or Manager → search PopNow → Install. Restart, then create a key at popnow.ai/api/console/keys and paste it into Settings > PopNow (or export POPNOW_API_KEY on a server). Restart again - the node list is fetched from your account's catalog at startup, so a missing Kling node usually means you skipped that. Delete the old custom_nodes/popnow_api.py if it's still there.
No downloads, no GPU. Your machine uploads a picture and downloads a clip.
Where it goes wrong
The classic Kling problem is motion that looks great for three seconds and then decomposes - extra limbs, warping background, a face that slides. You can't fix that with settings, but you can shorten the clip, use last_image_url to constrain the endpoint, and keep the prompt about one action rather than three.
Errors: PopNow 401 is the key, 40201 is an empty wallet (this is a per-second model, so a 10-second 1080p run is noticeably pricier than a 5-second 720p one), 400 names the rejected field, 40004 means that combination isn't servable - often resolution against duration, content_rejected means the model declined and refunded.
Remember that cancelling stops your wait, not the job: the render keeps going on PopNow and is charged if it succeeds.
And the standing caveat for this pack: PopNow is new and undiscussed - searching the usual communities turns up nothing about it - so there's no folklore to borrow. Keep the key in the environment, watch the printed charge for the first few runs, and set Max credits per run so a mistyped 1080p/10s experiment can't surprise you.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Describe what happens after the opening frame: the action, the camera. | |
| image_url | IMAGE | Opening frame. The clip starts from this image. JPEG or PNG only. | |
| resolution | COMBO | 720p | Output resolution. Higher tiers cost more per second. |
| duration_seconds | COMBO | 5 | Output length: 5 or 10 seconds. Billed per second. |
| negative_prompt | STRING | Things the clip should avoid, written as a short list. | |
| guidance_scale | FLOAT | 0.500–1 | How strictly the clip follows the prompt, from 0 to 1. Higher is more literal, lower gives the model more freedom. |
| last_image_urlopt | IMAGE | Optional closing frame the clip should end on. JPEG or PNG only. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| task id | STRING | The PopNow task id, for the API console logs or support. |