Skip to content

How to Create Video from Image

Animate a still image into video. In Get3W this is the first-to-video run type — your image becomes the first frame.

Quick Start

Video takes longer than images, so submit asynchronously and poll:

bash
curl -X POST "https://api.get3w.com/v1/kling/kling-3/first-to-video" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "image_url": "https://your-cdn.com/your-image.png",
    "prompt": "A person slowly turning their head and smiling",
    "duration": 5,
    "resolution": "1080p"
  }'
python
import time
import requests

headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}

task = requests.post(
    "https://api.get3w.com/v1/kling/kling-3/first-to-video",
    headers=headers,
    json={
        "image_url": "https://your-cdn.com/your-image.png",
        "prompt": "A person slowly turning their head and smiling",
        "duration": 5,
        "resolution": "1080p"
    }
).json()

time.sleep(task.get("estimated_duration") or 30)

while True:
    data = requests.get(
        f"https://api.get3w.com/v1/requests/{task['id']}",
        headers=headers
    ).json()

    if data["status"] == "completed":
        print(data["outputs"][0])
        break
    if data["status"] == "failed":
        print(f"Failed ({data['code']}):", data["error"])
        break

    time.sleep(5)

Choosing a Model

SlugNotes
google/veo-3.1/first-to-videoHighest quality, native audio
google/veo-3.1-fast/first-to-videoFaster and cheaper Veo
kling/kling-3/first-to-videoStrong motion, reliable
kling/kling-3-turbo/first-to-videoFaster Kling
bytedance/seedance-2.5/first-to-videoGood prompt adherence
alibaba/wan-3/first-to-videoGeneral purpose
minimax/hailuo-2.3/first-to-videoCreative, expressive motion
runway/gen-4.5/first-to-videoCinematic look

Common Parameters

ParameterTypeDescription
image_urlstringURL of the first frame
promptstringDescription of the desired motion
durationintegerVideo length in seconds
resolutionstringOutput resolution, e.g. 720p, 1080p
seedintegerSeed for reproducibility

Supported durations and resolutions vary per model. Both affect price.

Run typeUse when
first-to-videoYou have one image to animate
first-last-to-videoYou have a start and end frame to interpolate between
reference-to-videoYou want to guide the video with reference images
text-to-videoYou have no source image

Swap the run type in the path and adjust the inputs — for example first-last-to-video takes both a first and last frame.

Workflow

  1. Host your image at a publicly reachable URL — the provider fetches it directly
  2. Pick a model based on quality, speed, and cost
  3. Write a motion prompt describing movement, not just the scene
  4. Submit and poll, or pass ?webhook= to get a callback instead
  5. Download the output before it expires

Tips

  • Describe motion, not content — the image already establishes the scene, so the prompt should say what moves
  • Keep motion plausible — motion that contradicts the image tends to produce artifacts
  • Start short — validate at 5s before paying for longer clips
  • Use webhooks for batches — polling many long video tasks in parallel gets unwieldy fast

Next Steps

Released under the MIT License.