Wan 2.7 - Text to Video
Bring your own soundtrack, get up to 15 seconds
- audio_url
- video
- url
- all_urls_json
- task_id
- raw_json
- credits_consumed
- credits_left
Text-to-video from a model with no downloadable weights, in a family that stopped shipping them after 2.2. That's the deal and there's no clever workaround - KIE's hosted endpoint is one of the few doors into Wan 2.7, and this node makes that door a socket in your graph.
The distinguishing feature against its 2.6 sibling is the audio_url input: you can hand it an audio track and the model conditions on it. That's rare in this category and it turns this node into the T2V one you'd use when the video has to hit a beat.
How it works
prompt is required (minimum 1 character, max 5000, Chinese and English). Optional: audio_url as an AUDIO socket, negative_prompt, resolution (1080p default, 720p), ratio (16:9, 9:16, 1:1, 4:3, 3:4), duration (integer, 2 to 15, default 5), prompt_extend, watermark, seed, plus nsfw_checker, timeout_seconds and callback_url.
Connected audio gets converted and uploaded to KIE for you. The node then posts to /api/v1/jobs/createTask with model wan/2-7-text-to-video, polls /api/v1/jobs/recordInfo until the task resolves, downloads the MP4 into ComfyUI/output/KIE-Results/videos, and returns a native ComfyUI VIDEO - so your local audio comes in as an AUDIO tensor and your local graph gets video back out.
Inputs that matter
prompt- scene and motion. Everything else here is secondary.duration- 2 to 15 seconds as an integer, not an enum, so you're not stuck on 5/10 multiples.audio_url- the interesting one. Wire in music or a voice track and the output conditions on it.resolution-1080pby default;720pfor iteration.prompt_extend- on by default; it rewrites short prompts, which is helpful for a one-liner and annoying when you were precise.seed- set it to reproduce a take. Defaults to 123456, which makes accidental repeats more likely than you'd expect.negative_prompt- 500 characters, useful default shipped.
Outputs
video for save/preview/chain. url and all_urls_json keep the hosted files, task_id traces a job, raw_json is the untouched response, and credits_consumed / credits_left give you the bill - also printed as a receipt on the node after each run. With audio conditioning in play you'll want that receipt: longer clips with a soundtrack are the priciest configuration.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
cd ComfyUI-KIE-Nodes-Next && pip install -r requirements.txt
Restart ComfyUI, then look in KIE Next / Video / Wan. The pack ships no model files and installs four light Python dependencies (requests, Pillow, numpy, PyYAML) because the model runs on KIE's servers, not on your card.
Key, once: Settings → KIE.ai Nodes Next → Connection → Paste / replace KIE.ai API key. It validates the key before replacing anything stored and then shows ✅ CONNECTED with a masked fingerprint. The full key never reaches the frontend or the workflow JSON. Headless servers can set KIE_API_KEY, which takes priority over the saved key. KIE: pre-paid credits, no subscription.
Common issues
Your audio and the video disagree. Conditioning on audio is not lip-sync. For a talking face, use the speech-to-video or animate nodes instead; this one is for rhythm and mood.
The same clip keeps coming back. seed defaults to a fixed 123456 - change it, or lock it deliberately when comparing prompts.
Repeated take on duration > 10 costs real money. KIE bills per second at the resolution tier. Test at 720p/5s.
Timeout. Default timeout_seconds is 1200; 15-second 1080p jobs queue longer at peak. Raise it.
No visible result. Attach a save or preview node, and update ComfyUI if you hit a comfy_api.latest error - this node takes audio in and gives back a native VIDEO.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | A futuristic city street at night, neon reflections shimmering on the wet ground. The camera slowly pushes forward as a silver hover car glides in from the left. Giant holographic billboards flicker in the distance, creating a cinematic atmosphere. | Positive prompt. Minimum length: 1 character. Maximum length: 5000 characters. |
| negative_promptopt | STRING | blurry, low quality, flicker, distorted characters | Negative prompt. Maximum length: 500 characters. |
| audio_urlopt | AUDIO | — | |
| resolutionopt | COMBO | 1080p | Video resolution. - `720p`: 720p - `1080p`: 1080p |
| ratioopt | COMBO | 16:9 | Video aspect ratio. - `16:9`: Landscape - `9:16`: Portrait - `1:1`: Square - `4:3`: Landscape 4:3 - `3:4`: Portrait 3:4 |
| durationopt | INT | 52–15 | Video duration in seconds. - Minimum: `2` - Maximum: `15` - Default: `5` |
| prompt_extendopt | BOOLEAN | true | Whether to enable intelligent prompt rewriting. Default value: `true`. |
| watermarkopt | BOOLEAN | false | Whether to add an AI-generated watermark. Default value: `false`. |
| seedopt | INT | 1234560–2147483647 | Random seed. - Minimum: `0` - Maximum: `2147483647` |
| 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 | — |