Image-to-video API
Pass image_url with your prompt. VideoGenAPI switches to image-to-video automatically. 16 models currently advertise this mode.
Example request
curl -X POST https://videogenapi.com/api/v1/generate \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"kling-3","prompt":"The product rotates slowly under studio light","image_url":"https://example.com/product.jpg","duration":5}'
Models with image-to-video
FLUX 3 Max API
Black Forest Labs · $1.25/video
Kling 3 API
Kuaishou · Included in plans from $29
Kling 4.0 API
Kuaishou · $1.25/video
Kling 4.0 Flash API
Kuaishou · $0.75/video
Seedance 2.5 API
ByteDance · Included in plans from $29
Wan 3.0 API
Alibaba · $0.50/video
Veo 3 Fast API
Google DeepMind · $0.45/video
Veo 3.1 Fast API
Google DeepMind · $1.50/video
Grok Imagine 1.5 API
xAI · Included in plans from $29
Seedance 2 API
ByteDance · Included in plans from $29
Nano Banana API
LanneTech · Included in plans from $29
LTX Video 2 API
Lightricks · Included in plans from $29
Veo 2 API
Google DeepMind · Included in plans from $29
Minimax Hailuo 3 API
MiniMax · Included in plans from $29
Seedance 2.0 Mini API
ByteDance · Included in plans from $29
Wan 2.5 API
Alibaba · Included in plans from $29
Need first/last frame or multi-image? Veo 3.1 accepts reference_image_urls. Details in generate docs.
How image-to-video works
Image-to-video uses your image as the first frame and generates the motion described in your prompt. The request is the same as text-to-video with one extra field, so you can add it to an existing integration in minutes.
1. Host the image
Upload a JPG, PNG, GIF or WebP anywhere it is reachable by URL: your CDN, S3, or a signed link.
2. Send image_url + prompt
POST to /api/v1/generate with the model, a motion prompt and image_url. You get a generation_id back immediately.
3. Poll and download
Call GET /api/v1/status/{id} until the status is completed, then download the MP4 from video_url.
Which model for which image?
| Your image | Recommended model | Why |
|---|---|---|
| Product shot, packshot, fashion lookbook | Kling 3 | Clean 1080p motion, strong on people and products, renders in about half a minute. |
| Scene with water, fabric, smoke or action | MiniMax H3 | Physics-accurate motion, synced audio, clips up to 15 seconds, optional end frame. |
| Hero visual for a campaign, needs sound | Veo 3.1 Fast | Most polished textures and lighting with native audio, 8-second clips. |
| Many quick variants of one image | Seedance 2 | Fast renders and a wide style range, included in every plan. |
Side-by-side specs and measured generation times: Kling 3 vs MiniMax H3, Kling 3 vs Veo 3.1, all comparisons.
Writing a good motion prompt
- Describe the motion, not the image. The model already sees the picture. Say what moves: "the camera slowly orbits the bottle", "she turns her head and smiles".
- Name one camera move. Dolly in, pan left, slow orbit or static shot. Several moves in one clip tend to fight each other.
- Keep the subject consistent. Avoid asking for new objects or people that are not in the image; the first frame anchors the result.
- Match the aspect ratio. Use a vertical image for 9:16 social video and a landscape image for 16:9.
Python and JavaScript
import os, time, requests
API = "https://videogenapi.com/api/v1"
H = {"Authorization": f"Bearer {os.environ['VIDEOGEN_API_KEY']}"}
job = requests.post(f"{API}/generate", headers=H, json={
"model": "kling-3",
"prompt": "The camera slowly orbits the sneaker, soft studio light",
"image_url": "https://example.com/sneaker.jpg",
"duration": 5,
}).json()
while True:
s = requests.get(f"{API}/status/{job['generation_id']}", headers=H).json()
if s["status"] in ("completed", "failed"):
break
time.sleep(5)
print(s.get("video_url"))
const API = "https://videogenapi.com/api/v1";
const headers = { Authorization: `Bearer ${process.env.VIDEOGEN_API_KEY}`, "Content-Type": "application/json" };
const job = await (await fetch(`${API}/generate`, { method: "POST", headers, body: JSON.stringify({
model: "minimax-h3",
prompt: "Waves roll onto the beach, foam catching the light",
image_url: "https://example.com/beach.jpg",
duration: 6,
}) })).json();
let s;
do {
await new Promise(r => setTimeout(r, 5000));
s = await (await fetch(`${API}/status/${job.generation_id}`, { headers })).json();
} while (!["completed", "failed"].includes(s.status));
console.log(s.video_url);
More in the Python and JavaScript guides.
Image-to-video API FAQ
What is an image-to-video API?
An image-to-video API turns a still image into a short video clip. You send the image URL and a prompt describing the motion, and the API returns a video in which the image comes to life: a product rotates, a person turns, water starts to flow.
Which image formats can I send?
JPG, PNG, GIF and WebP, passed as a public URL in the image_url field. The model keeps the composition of your image as the first frame and animates it according to your prompt.
How much does image-to-video cost on VideoGenAPI?
Image-to-video is billed exactly like text-to-video: one video per request. Models such as Kling 3, MiniMax H3 and Seedance 2 are included in every plan, about $0.011 per video on Starter; Veo models are billed per video.
Which model is best for animating product photos?
Kling 3 is the usual choice for product and fashion images: clean 1080p motion and fast renders, around half a minute on our API. For shots that need sound or physics such as liquids and fabric, try MiniMax H3; for premium output with native audio, Veo 3.1 Fast.
Can I control the last frame?
Yes, on models that support it. MiniMax H3 accepts an end_image_url so the clip moves from your first image to your second. Veo 3.1 also accepts reference images through reference_image_urls. See the generate reference for the full list of parameters.