Models/Image-to-Video API

Image-to-Video API — Input Handling and Workflow

Live150+ image-to-video models

This page covers the mechanics of turning a still image into a video through Muapi's API: how the source image is handled, first/last-frame control, duration and resolution parameters, and how long the output stays downloadable. For picking which model to use by quality, price, or use case, see the AI Video API comparison instead — this page is about how the request works, not which model wins.

How Image-to-Video Works

Every image-to-video model on Muapi takes a source image_url and a text prompt describing the motion, camera move, or scene continuation, and returns a video that animates from that starting frame. The source image sets the visual content and, on most models, the output aspect ratio — submitting a portrait image to a model without an explicit aspect_ratio parameter typically produces a portrait video, not a cropped landscape one.

Muapi exposes 150+ image-to-video models — Kling, Veo, Wan, Seedance, Runway, PixVerse, Vidu, MiniMax, and more — through the same unified REST pattern: one API key, one request/poll flow, pay-per-generation pricing with no subscription.

First/Last-Frame Control (Start-End-to-Video)

Many image-to-video models accept a second image — usually named last_image (Seedance, Kling, Wan, Veo, Vidu) or end_image_url (MiniMax Hailuo) — that fixes the final frame instead of leaving the model to freely animate the motion. This is the standard technique for a controlled transition between two known states: product A turning into product B, a before/after reveal, or a scene that must land on a specific composition. Vidu Q2 Pro Start-End additionally exposes a movement_amplitude parameter to control how much motion happens between the two endpoints. Not every model supports this — Runway's and PixVerse's image-to-video endpoints, for example, take only a single starting image — so check the model's parameter list before assuming first/last-frame support.

Representative Models

ByteDanceFirst/Last Frame

Seedance Lite I2V

Lite-tier image-to-video with first/last-frame control (last_image) and a fixed-camera option.

Image in
$0.10/generation
Try Model
KuaishouFirst/Last Frame

Kling v2.1 Pro I2V

Pro-tier image-to-video with first/last-frame control (last_image) and explicit aspect-ratio selection.

Image in
$0.40/generation
Try Model
AlibabaFirst/Last Frame

Wan 2.2 I2V

First/last-frame control (last_image) plus separate resolution and quality parameters for draft-vs-final runs.

Image in
$0.30/generation
Try Model
GoogleFirst/Last Frame

Veo 3.1 I2V

First/last-frame control (last_image), aspect ratio, and resolution in one request.

Image in
$2.50/generation
Try Model
MiniMaxFirst/Last Frame

MiniMax Hailuo 02 Pro I2V

First/last-frame control via a dedicated end_image_url field, separate from the starting image_url.

Image in
$0.60/generation
Try Model
ViduFirst/Last Frame

Vidu Q2 Pro Start-End

Purpose-built start-end-to-video model — set both endpoints plus a movement_amplitude control for how much motion happens between them.

Image in
$0.13/generation
Try Model
Runway

Runway I2V

Straightforward single-image animation with aspect ratio, resolution, and duration controls, no first/last-frame field.

Image in
$0.15/generation
Try Model
PixVerse

PixVerse v5.5 I2V

Accepts multiple reference images (images_list) plus native audio generation and multi-clip output in one request.

Image in
$0.10/generation
Try Model

Duration, Resolution, and Prompt Structure

  • Duration is typically a fixed choice (commonly 5s or 8s) rather than a free-form value — check each model's enum before submitting an arbitrary number.
  • Resolution usually trades directly against price and generation time — draft at 480p/720p, re-run the final take at 1080p once the motion and composition are confirmed.
  • Some models split resolution and quality into separate parameters (Wan 2.2), letting you keep resolution fixed while trading off a faster/cheaper generation mode.
  • Prompt structure matters more for motion than for content — the image already fixes the subject and composition, so the prompt should describe camera movement, action, and pacing rather than re-describing what's already visible in the source image.
  • A fixed-camera option (Seedance's camera_fixed) is useful when you want subject motion only, with no camera drift — check for this before assuming every model free-animates the camera by default.

Output Persistence — Download Before the URL Expires

Generated video URLs are hosted by the underlying provider and are not permanent — how long they stay reachable depends on which provider is behind the model. As a rule of thumb: WaveSpeed-backed and Runway-backed outputs stay reachable for about 7 days, while Replicate-backed and fal.ai-backed outputs typically expire after about 1 hour. Muapi does not expose which provider serves a given request, so the safe pattern is to always download and persist the output to your own storage immediately after the request completes, rather than storing only the returned URL for later use.

How to Call an Image-to-Video Model

  1. Host the source image. Upload via POST /api/v1/upload_file, or use any publicly reachable URL.
  2. Submit the request. POST /api/v1/{model-slug} with image_url, a motion-describing prompt, and any duration/resolution/first-last-frame fields the model supports.
  3. Poll for completion. Check GET /api/v1/predictions/{request_id}/result until status is completed.
  4. Download immediately. Save the output video to your own storage rather than relying on the returned URL staying valid long-term.
curl -X POST https://api.muapi.ai/api/v1/wan2.2-image-to-video \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
    "image_url": "https://example.com/product-shot.jpg",
    "prompt": "slow push-in, gentle studio light sweep",
    "resolution": "720p",
    "duration": 5
  }'
import requests

response = requests.post(
    "https://api.muapi.ai/api/v1/wan2.2-image-to-video",
    headers={"x-api-key": "YOUR_API_KEY"},
    json={
        "image_url": "https://example.com/product-shot.jpg",
        "prompt": "slow push-in, gentle studio light sweep",
        "resolution": "720p",
        "duration": 5,
    },
)
request_id = response.json()["request_id"]

result = requests.get(
    f"https://api.muapi.ai/api/v1/predictions/{request_id}/result",
    headers={"x-api-key": "YOUR_API_KEY"},
)
print(result.json())  # download result["output_url"] immediately

Frequently Asked Questions

Which image-to-video model should I use?

It depends on quality, price, and use case — see the AI Video API comparison for a full ranked breakdown. This page covers request mechanics common across all of them.

Can I control the exact ending frame of the video?

Yes, on models that support first/last-frame control — pass a second image as last_image (Seedance, Kling, Wan, Veo, Vidu) or end_image_url (MiniMax Hailuo) alongside the starting image_url.

Does the output aspect ratio match my source image?

On most models, yes, unless you explicitly override it with an aspect_ratio parameter — the source image's dimensions typically set the output's aspect ratio.

How long do I have to download the generated video?

It varies by the underlying provider — roughly 7 days for WaveSpeed/Runway-backed outputs, about 1 hour for Replicate/fal.ai-backed outputs. Since Muapi doesn't expose which provider served a given request, download and store the result immediately rather than relying on the URL staying valid.

Can I animate a portrait or square image, not just landscape?

Yes — most models inherit the source image's aspect ratio directly, so portrait and square inputs work without cropping.

Can I get image-to-video API access right now?

Yes. Sign up at muapi.ai, create an API key from your dashboard, and start calling any image-to-video model immediately — no waitlist required.