Framepack
Playground
Try it on WavespeedAI!Framepack is an efficient autoregressive Image-to-Video model that generates smooth, temporally consistent videos from a single image. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Features
FramePack — wavespeed-ai/framepack
FramePack is an image-to-video model designed for smooth, cinematic animation from a single input image. Upload a reference image to anchor composition and subject identity, then use a director-style prompt to control motion, pacing, and camera language (push-in, pull-back, reveals, etc.). FramePack exposes frame-level control via num_frames, making it convenient for generating clips at different lengths while keeping output stable and consistent.
Key capabilities
- Image-to-video generation anchored to a reference image
- Strong at cinematic camera moves (push-in, pull-back, reveal, orbit, tilt)
- Frame-level length control via num_frames for flexible clip duration
- Supports negative_prompt to reduce jitter, blur, distortion, and artifacts
- Resolution and aspect_ratio controls for common output formats
Use cases
- “Living poster” animations: bring key art to life with subtle motion
- Cinematic reveals: close-up → pull-back to establish scene context
- Mood shots and b-roll from a single still (rain, neon, dust motes, fog, wind)
- Trailer-style beats for marketing and social content
- Rapid iteration by keeping the same image and varying prompt/seed/frames
Pricing
Pricing scales with the number of frames generated.
| Frames | Price per run |
|---|---|
| 60 | $0.066 |
| 120 | $0.132 |
| 180 | $0.198 |
| 240 | $0.264 |
Inputs
- image (required): reference image (subject/composition anchor)
- prompt (required): motion + camera direction
- negative_prompt (optional): what to avoid (blur, jitter, distortion, etc.)
Parameters
- image: input image (upload or URL)
- prompt: director-style motion description
- negative_prompt: optional “avoid list”
- aspect_ratio: output aspect ratio (e.g., 16:9)
- resolution: output resolution (e.g., 720p)
- num_inference_steps: sampling steps
- num_frames: total frames to generate (controls clip length)
- guidance_scale: prompt adherence strength
- seed: random seed (set for reproducible results)
Prompting guide (I2V)
Write prompts like a shot list:
- Start framing: close-up / medium / wide
- Camera move: push-in / pull-back / pan / orbit
- Motion: hair, cloth, rain, particles, light flicker, subtle facial change
- Mood/lighting: neon, rim light, fog, bokeh, cinematic contrast
- Constraints: keep the subject identity and composition consistent
Example prompts
- Animate with a deliberate, unfolding sense of drama. Start with a tight close-up on the eyes, then slowly pull back to reveal the full figure on a rain-slick balcony, neon city lights shimmering in the background, subtle wind and drifting rain, cinematic lighting, smooth camera motion.
- Slow push-in on the subject, soft fog rolls through the scene, gentle light flicker, filmic contrast, no jitter, stable face and hands.
Authentication
For authentication details, please refer to the Authentication Guide.
API Endpoints
Submit Task & Query Result
# Submit the task
curl --location --request POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/framepack" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ${WAVESPEED_API_KEY}" \
--data-raw '{
"aspect_ratio": "16:9",
"resolution": "720p",
"seed": 0,
"num_inference_steps": 25,
"num_frames": 180,
"guidance_scale": 10
}'
# Get the result
curl --location --request GET "https://api.wavespeed.ai/api/v3/predictions/${requestId}/result" \
--header "Authorization: Bearer ${WAVESPEED_API_KEY}"
Parameters
Task Submission Parameters
Request Parameters
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| image | string | Yes | - | The URL of the video to generate the audio for. | |
| prompt | string | Yes | - | The positive prompt for the generation. | |
| negative_prompt | string | No | - | The negative prompt for the generation. | |
| aspect_ratio | string | No | 16:9 | 16:9, 9:16 | The aspect ratio of the generated media. |
| resolution | string | No | 720p | 720p, 480p | The resolution of the video to generate. 720p generations cost 1.5x more than 480p generations. |
| seed | integer | No | - | -1 ~ 2147483647 | The random seed to use for the generation. |
| num_inference_steps | integer | No | 25 | 4 ~ 50 | The number of inference steps to perform. |
| num_frames | integer | No | 180 | 30 ~ 1800 | The duration of the audio to generate. |
| guidance_scale | number | No | 10 | 0 ~ 32 | The guidance scale to use for the generation. |
Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data.id | string | Unique identifier for the prediction, Task Id |
| data.model | string | Model ID used for the prediction |
| data.outputs | array | Array of URLs to the generated content (empty when status is not completed) |
| data.urls | object | Object containing related API endpoints |
| data.urls.get | string | URL to retrieve the prediction result |
| data.has_nsfw_contents | array | Array of boolean values indicating NSFW detection for each output |
| data.status | string | Status of the task: created, processing, completed, or failed |
| data.created_at | string | ISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”) |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |
Result Request Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| id | string | Yes | - | Task ID |
Result Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data | object | The prediction data object containing all details |
| data.id | string | Unique identifier for the prediction, the ID of the prediction to get |
| data.model | string | Model ID used for the prediction |
| data.outputs | string | Array of URLs to the generated content (empty when status is not completed). |
| data.urls | object | Object containing related API endpoints |
| data.urls.get | string | URL to retrieve the prediction result |
| data.status | string | Status of the task: created, processing, completed, or failed |
| data.created_at | string | ISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”) |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |