Wan - 2.2 A14B Image to Video Turbo
The 14B you can't fit, billed by the second
- image_url
- video
- url
- all_urls_json
- task_id
- raw_json
- credits_consumed
- credits_left
Wan 2.2 is the last open Wan, and the A14B image-to-video model is the good one - the 27B MoE with 14B active, Apache 2.0, still the base half of 2026's local video stack. It is also slow enough that a clip takes about 25 minutes on a 5090 without a speed LoRA, and if your card is a 12GB mid-ranger it isn't happening at all. This node is the other door: the same model family on KIE's servers, distilled for speed (that's the "Turbo"), reached from inside your graph.
You'd reach for it when you already have the first frame and you want motion out of it - the I2V workflow that beat text-to-video for everyone, because anchoring frame one removes half the consistency problems before you start. What you give up is the thing that makes local Wan attractive: your image goes to a server.
How it works
The node is a thin client over KIE's marketplace API. When the graph runs it uploads your IMAGE to KIE, then POSTs to /api/v1/jobs/createTask with the marketplace model id wan/2-2-a14b-image-to-video-turbo and your settings as the input object. It then polls /api/v1/jobs/recordInfo until the task reports success or failure.
When the task lands, the node downloads the MP4, archives it under ComfyUI/output/KIE-Results/videos, and hands you a real ComfyUI VIDEO object - so downstream nodes can't tell it apart from a local generation. Nothing is downloaded to run the model; the weights live on KIE's side.
Inputs that matter
Two are required, and they're the whole node: image_url (an IMAGE socket - your first frame) and prompt (the motion text, up to 5000 characters).
Of the optional ones, four actually change your result:
resolution-720p(default) or480p. Halve it for drafts.acceleration-none(default) orregular. The tooltip is refreshingly honest: more acceleration means faster and lower quality, and the author recommendsnone. Same tradeoff as the speed-LoRA argument over in local-land, just priced instead of configured.enable_prompt_expansion- off by default. Turn it on when your prompt is a stub; an LLM stretches it while keeping your meaning.nsfw_checker- defaults to false, which means KIE's filter is off and results come back as the model produced them. There is no guarantee it filters anything, per KIE's own note on the field.
seed is typed as a FLOAT here even though it's a seed - keep it whole. timeout_seconds defaults to 1200 and callback_url should stay empty for normal ComfyUI use.
Outputs
Seven sockets, and you'll use two. video is the native object - wire it to SaveVideo or a video preview or you'll see nothing at all, because this node is not an output node. credits_consumed and credits_left are the ones nobody expects and everybody ends up liking: after each run the node prints a receipt on its face (Credits spent / Credits left) and reports both as sockets. Also here: url, all_urls_json, task_id, and raw_json if you want the provider's full response. task_id is worth keeping when a job mysteriously times out.
Install
The pack isn't a plain one-file node - it builds its node list from KIE's live docs catalog at startup, which is why you get KIE Next / Video / Wan folders instead of one generic API node. Install it the boring way:
cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
cd ComfyUI-KIE-Nodes-Next && pip install -r requirements.txt
Then restart ComfyUI. The requirements are light - requests, Pillow, numpy, PyYAML - no torch, no model files, nothing to download. ComfyUI Manager works too; the README treats the clone as the documented manual fallback.
API key goes in once, per install: ComfyUI → Settings → KIE.ai Nodes Next → Connection, paste it, and it validates against KIE before replacing anything. You get a masked fingerprint and a ✅ CONNECTED. Headless installs can set KIE_API_KEY instead, which wins over the saved one. KIE is a credit marketplace - no subscription, top up a few dollars, spend it across every model in the catalogue.
Common issues
Nothing shows up after the run. You forgot a SaveVideo/preview node. The video exists, it's in output/KIE-Results/videos.
"Your ComfyUI build does not expose comfy_api.latest.InputImpl.VideoFromFile." The VIDEO object comes from a recent ComfyUI build. Update ComfyUI; older installs can't build the native video output.
The queue hangs for twenty minutes. That's timeout_seconds (default 1200) doing its job while KIE queues your job. Raise it for long clips at 720p rather than cancelling and re-paying.
A failed run still costs you. KIE bills the generation, not your opinion of it. Draft at 480p with acceleration: regular before spending 720p credits.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| image_url | IMAGE | — | |
| prompt | STRING | Overcast lighting, medium lens, soft lighting, low contrast lighting, edge lighting, low angle shot, desaturated colors, medium close-up shot, clean single shot, cool colors, center composition.The camera captures a low-angle close-up of a Western man outdoors, sharply dressed in a black coat over a gray sweater, white shirt, and black tie. His gaze is fixed on the lens as he advances. In the background, a brown building looms, its windows glowing with warm, yellow light above a dark doorway. As the camera pushes in, a blurred black object on the right side of the frame drifts back and forth, partially obscuring the view against a dark, nighttime background. | The text prompt to guide video generation. (Max length: 5000 characters) |
| resolutionopt | COMBO | 720p | Resolution of the generated video (480p or 720p). Default value: "720p" |
| enable_prompt_expansionopt | BOOLEAN | false | Whether to enable prompt expansion. This will use a large language model to expand the prompt with additional details while maintaining the original meaning. (Boolean value (true/false)) |
| seedopt | FLOAT | 0.000–2147483647 | Random seed for reproducibility. If None, a random seed is chosen. (Min: 0, Max: 2147483647, Step: 1) (step: 1) |
| accelerationopt | COMBO | none | Acceleration level to use. The more acceleration, the faster the generation, but with lower quality. The recommended value is 'none'. Default value: "none" |
| nsfw_checkeropt | BOOLEAN | false | Defaults to false. You can set it to false based on your needs. If set to false, our content filtering will be disabled, and all results will be returned directly by the model itself. Note: There is no guarantee that everything can be filtered out; if you are not satisfied with the results, you will need to make your own arrangements. |
| timeout_secondsopt | INT | 120030–7200 | — |
| callback_urlopt | STRING | Optional KIE callback URL. Leave empty for normal ComfyUI use. |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| url | STRING | — |
| all_urls_json | STRING | — |
| task_id | STRING | — |
| raw_json | STRING | — |
| credits_consumed | FLOAT | — |
| credits_left | FLOAT | — |