$npx -y skills add prime-skills/runcomfy-agent-skills --skill image-to-videoAnimate any still image on RunComfy — this skill is a smart router that matches the user's intent to the right i2v model in the RunComfy catalog. Picks HappyHorse 1.0 I2V (Arena #1, native audio, identity preservation) for general animations, Wan 2.7 with audio_url for custom-v
| 1 | # Image-to-Video — Pro Pack on RunComfy |
| 2 | |
| 3 | [runcomfy.com](https://www.runcomfy.com/?utm_source=skills.sh&utm_medium=skill&utm_campaign=image-to-video) · [HappyHorse I2V](https://www.runcomfy.com/models/happyhorse/happyhorse-1-0/image-to-video?utm_source=skills.sh&utm_medium=skill&utm_campaign=image-to-video) · [Wan 2.7](https://www.runcomfy.com/models/wan-ai/wan-2-7/text-to-video?utm_source=skills.sh&utm_medium=skill&utm_campaign=image-to-video) · [Seedance 2.0 Pro](https://www.runcomfy.com/models/bytedance/seedance-v2/pro?utm_source=skills.sh&utm_medium=skill&utm_campaign=image-to-video) · [GitHub](https://github.com/agentspace-so/runcomfy-skills/tree/main/image-to-video) |
| 4 | |
| 5 | **Image-to-video, intent-routed.** This skill doesn't lock you to one model — it picks the right i2v model in the RunComfy catalog based on what the user actually wants: portrait animation, custom-voiceover lip-sync, or multi-modal composition. |
| 6 | |
| 7 | ```bash |
| 8 | npx skills add agentspace-so/runcomfy-skills --skill image-to-video -g |
| 9 | ``` |
| 10 | |
| 11 | ## Pick the right model for the user's intent |
| 12 | |
| 13 | | User intent | Model | Why | |
| 14 | |---|---|---| |
| 15 | | Animate a portrait — keep identity stable | **HappyHorse 1.0 I2V** | #1 on Artificial Analysis Arena (Elo 1392); strong facial fidelity | |
| 16 | | Product reveal / 360 / macro motion | **HappyHorse 1.0 I2V** | Geometry preservation + smooth camera moves | |
| 17 | | Native synchronized ambient audio in one pass | **HappyHorse 1.0 I2V** | In-pass audio synthesis | |
| 18 | | Animate **and** lip-sync to a **custom voiceover track** | **Wan 2.7 + `audio_url`** | Accepts your own MP3/WAV (3–30s, ≤15MB) and drives lip-sync to it | |
| 19 | | Multi-language dub variants (same image, different audio per call) | **Wan 2.7 + `audio_url`** | Same shot, swap `audio_url` per language | |
| 20 | | Multi-modal — image + reference video + reference audio together | **Seedance 2.0 Pro** | Up to 9 image refs, 3 video refs (2–15s each), 3 audio refs | |
| 21 | | Brand-consistent narrative with character ref + scene ref + voice ref | **Seedance 2.0 Pro** | Image holds identity, video holds scene, audio holds voice | |
| 22 | | Default if unspecified | **HappyHorse 1.0 I2V** | Best all-round quality + native audio | |
| 23 | |
| 24 | The agent reads this table, classifies the user's intent, and picks the matching subsection below. |
| 25 | |
| 26 | ## Prerequisites |
| 27 | |
| 28 | 1. **RunComfy CLI** — `npm i -g @runcomfy/cli` |
| 29 | 2. **RunComfy account** — `runcomfy login` opens a browser device-code flow. |
| 30 | 3. **CI / containers** — set `RUNCOMFY_TOKEN=<token>`. |
| 31 | 4. **A source image URL** — JPEG/PNG/WebP, min 300px, ≤10MB; aspect 1:2.5 to 2.5:1 (HappyHorse) — other models have similar specs. |
| 32 | |
| 33 | --- |
| 34 | |
| 35 | ## Route 1: HappyHorse 1.0 I2V — default for portrait / product / general animation |
| 36 | |
| 37 | **Model**: `happyhorse/happyhorse-1-0/image-to-video` · **Arena rank**: #1 (Elo 1392) |
| 38 | |
| 39 | ### Schema |
| 40 | |
| 41 | | Field | Type | Required | Default | Notes | |
| 42 | |---|---|---|---|---| |
| 43 | | `image_url` | string | yes | — | JPEG/JPG/PNG/WEBP. Min 300px. Aspect 1:2.5–2.5:1. ≤10MB. | |
| 44 | | `prompt` | string | yes | — | ≤5000 non-CJK or 2500 CJK chars. **Motion / camera / lighting** description. | |
| 45 | | `resolution` | enum | no | `1080P` | `720P` or `1080P`. | |
| 46 | | `duration` | int | no | 5 | 3–15 seconds. | |
| 47 | | `seed` | int | no | 0 | Reuse for variant comparisons. | |
| 48 | | `watermark` | bool | no | true | Provider watermark toggle. | |
| 49 | |
| 50 | Output aspect = input aspect. No independent reframing. |
| 51 | |
| 52 | ### Invoke |
| 53 | |
| 54 | ```bash |
| 55 | runcomfy run happyhorse/happyhorse-1-0/image-to-video \ |
| 56 | --input '{ |
| 57 | "image_url": "https://.../portrait.jpg", |
| 58 | "prompt": "Gentle camera drift around the subject'\''s face, subtle breathing motion, identity-stable features, soft natural light." |
| 59 | }' \ |
| 60 | --output-dir <absolute/path> |
| 61 | ``` |
| 62 | |
| 63 | ### Prompting tips |
| 64 | |
| 65 | - **Lead with motion verbs**: "drift", "dolly in", "orbit", "tilt up", "reveal", "blink", "breathe". Front-load what's MOVING. |
| 66 | - **Don't restate the image** — the model sees it. Focus tokens on what changes. |
| 67 | - **Preservation goals explicit**: "identity-stable features", "packaging unchanged", "background geometry stable". |
| 68 | - **Lighting evolution**: "rim light intensifying", "shadows short |