$npx -y skills add prime-skills/runcomfy-agent-skills --skill wan-2-7Generate text-to-video with Wan 2.7 (Wan-AI's flagship motion model) on RunComfy. Documents Wan 2.7's strengths (multi-reference conditioning, audio-driven lip-sync via audio_url, smoother transitions, prompt expansion), the duration / resolution / aspect-ratio schema, and when
| 1 | # Wan 2.7 — Pro Pack on RunComfy |
| 2 | |
| 3 | [runcomfy.com](https://www.runcomfy.com/?utm_source=skills.sh&utm_medium=skill&utm_campaign=wan-2-7) · [Text-to-video](https://www.runcomfy.com/models/wan-ai/wan-2-7/text-to-video?utm_source=skills.sh&utm_medium=skill&utm_campaign=wan-2-7) · [GitHub](https://github.com/agentspace-so/runcomfy-skills/tree/main/wan-2-7) |
| 4 | |
| 5 | Wan-AI's **Wan 2.7** — flagship video model with multi-reference conditioning and audio-driven lip-sync — hosted on the **RunComfy Model API**. |
| 6 | |
| 7 | ```bash |
| 8 | npx skills add agentspace-so/runcomfy-skills --skill wan-2-7 -g |
| 9 | ``` |
| 10 | |
| 11 | ## When to pick this model (vs siblings) |
| 12 | |
| 13 | | You want | Use | |
| 14 | |---|---| |
| 15 | | Lip-sync video to an audio track you supply | **Wan 2.7** (`audio_url`) | |
| 16 | | Multi-reference fine motion control | **Wan 2.7** | |
| 17 | | Smooth transitions, accurate motion physics | **Wan 2.7** | |
| 18 | | Currently-#1 blind-vote video model | HappyHorse 1.0 | |
| 19 | | Multi-modal cinematic with image+video+audio refs + in-pass voice generation | Seedance 2.0 Pro | |
| 20 | | Cinematic motion editing on existing footage | Kling Video O1 | |
| 21 | | Ultra-fast iteration | LTX 2 | |
| 22 | |
| 23 | If the user said "Wan" / "Wan 2.7" / "wan-ai" / "alibaba video" explicitly, route here regardless. |
| 24 | |
| 25 | ## Prerequisites |
| 26 | |
| 27 | 1. **RunComfy CLI** — `npm i -g @runcomfy/cli` |
| 28 | 2. **RunComfy account** — `runcomfy login` opens a browser device-code flow. |
| 29 | 3. **CI / containers** — set `RUNCOMFY_TOKEN=<token>` instead of `runcomfy login`. |
| 30 | |
| 31 | ## Endpoints + input schema |
| 32 | |
| 33 | ### `wan-ai/wan-2-7/text-to-video` |
| 34 | |
| 35 | | Field | Type | Required | Default | Notes | |
| 36 | |---|---|---|---|---| |
| 37 | | `prompt` | string | yes | — | Up to ~5000 chars / ~1500 tokens. | |
| 38 | | `audio_url` | string | no | — | WAV/MP3, 3–30s, ≤15MB. **Drives lip-sync.** Omit → background music auto-generated. | |
| 39 | | `aspect_ratio` | enum | no | `16:9` | `16:9`, `9:16`, `1:1`, `4:3`, `3:4`. | |
| 40 | | `resolution` | enum | no | `1080p` | `720p` or `1080p`. | |
| 41 | | `duration` | enum | no | `5` | 2–15 (whole seconds). | |
| 42 | | `negative_prompt` | string | no | — | Up to 500 chars. Concrete issues to avoid. | |
| 43 | | `enable_prompt_expansion` | bool | no | true | Auto-rewrites short prompts. Disable for literal control. | |
| 44 | | `seed` | int | no | — | 0..2^31-1. Reuse for variants. | |
| 45 | |
| 46 | ## How to invoke |
| 47 | |
| 48 | **Default (5s 1080p 16:9, prompt-expanded):** |
| 49 | |
| 50 | ```bash |
| 51 | runcomfy run wan-ai/wan-2-7/text-to-video \ |
| 52 | --input '{"prompt": "<user prompt>"}' \ |
| 53 | --output-dir <absolute/path> |
| 54 | ``` |
| 55 | |
| 56 | **Audio-driven lip-sync (your own track):** |
| 57 | |
| 58 | ```bash |
| 59 | runcomfy run wan-ai/wan-2-7/text-to-video \ |
| 60 | --input '{ |
| 61 | "prompt": "Medium close-up of the spokesperson, warm key light, locked tripod, slight breathing motion.", |
| 62 | "audio_url": "https://.../voiceover.mp3", |
| 63 | "duration": 12, |
| 64 | "aspect_ratio": "9:16" |
| 65 | }' \ |
| 66 | --output-dir <absolute/path> |
| 67 | ``` |
| 68 | |
| 69 | **Literal control (no auto-expansion):** |
| 70 | |
| 71 | ```bash |
| 72 | runcomfy run wan-ai/wan-2-7/text-to-video \ |
| 73 | --input '{ |
| 74 | "prompt": "<exactly what you want, verbatim>", |
| 75 | "enable_prompt_expansion": false, |
| 76 | "negative_prompt": "no subtitles, no flicker, no distorted hands" |
| 77 | }' \ |
| 78 | --output-dir <absolute/path> |
| 79 | ``` |
| 80 | |
| 81 | ## Prompting — what actually works |
| 82 | |
| 83 | **Camera + motion in plain English.** "Slow dolly in", "locked tripod, low angle", "handheld follow", "crane move from above". Front-load the shot. |
| 84 | |
| 85 | **One primary action per clip.** Don't pile up multiple competing actions. Pick the beat: "she turns, then smiles" not "she turns AND smiles AND a bus passes AND...". |
| 86 | |
| 87 | **Use `negative_prompt` for concrete issues.** Good: "no subtitles, no watermark, no flicker". Bad (vague): "no bad lighting". |
| 88 | |
| 89 | **Prompt expansion is on by default.** Short prompts get auto-rewritten by the model. For terse / literal prompts (e.g. brand-strict ad copy), disable with `enable_prompt_expansion: false`. |
| 90 | |
| 91 | **Audio specs matter.** `audio_url` must be 3–30s, ≤15MB, WAV/MP3. Out-of-range files reject. Match audio length to clip duration. |
| 92 | |
| 93 | **Iterate seeds.** Reuse the same seed when you want consistent output across variants of the same prompt. Change seed for genuine variety. |
| 94 | |
| 95 | **Anti-patterns:** |
| 96 | - Static-frame descriptions → motion will be vague. |
| 97 | - Vague negatives ("no bad colors") → ignored. |
| 98 | - Audio outside the 3–30s / 15MB / WAV-MP3 spec → rejected. |
| 99 | - Prompts > 5000 chars / 1500 tokens → degraded output. |
| 100 | |
| 101 | ## Where it shines |
| 102 | |
| 103 | | Use case | Why Wan 2.7 | |
| 104 | |---|---| |
| 105 | | **Lip-synced ads with |