Seedream 5.0 Pro 提供開始 | 画像ジェネレーターで試す →

Framepack

wavespeed-ai /

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.

image-to-video
入力

ドラッグ&ドロップまたはクリックでアップロード

preview

待機中

$0.1981回あたり·~50 / $10

次:

サンプルすべて表示

He abruptly kicks his chair back, drawing a revolver with startling speed and aiming it into the oppressive darkness of the doorway.

Animate this scene with a deliberate and unfolding sense of drama. The camera should begin with a tight close-up on the woman's intensely focused eyes, before slowly and dramatically pulling back to reveal her full figure standing on the rain-slicked balcony. As the camera pulls back, a sudden gust of wind should whip through the scene, causing her crimson gown to billow dramatically around her, and strands of her dark hair to fly across her face. She should lift one hand slowly and deliberately, as if anticipating or reacting to something in the cityscape below. The neon lights of the metropolis in the background should flicker erratically, casting dynamic and shifting shadows across the balcony and her form. A distant siren should wail, its sound seemingly carried on the wind. The rain on the balcony floor should briefly intensify, creating visible ripples and reflections of the dramatic lighting. The overall animation should build a sense of heightened tension and impending conflict through its deliberate and impactful movements.

Aeronaut leaps across a chasm between airships, grappling hook firing mid-air.

Shaman slams their staff into the ground, unleashing a violent, controlled vortex of sand and scrap metal.

A fierce female warrior swings a long sword with full strength. Her expression is intense and focused, and her long hair flows dramatically through the air with the force of her movement

In a blur of silk and shadow, the masked figure sidesteps and executes a single, lethally precise strike with a poisoned stiletto.

関連モデル

README

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.

FramesPrice 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.
注記:本サイトは第三者が提供するAIモデルを使用しています。

Framepack API — Quick start

Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/wavespeed-ai/framepack with your input as JSON. The endpoint returns a prediction id. Start polling the result endpoint around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. On completed, read output values from data.outputs. Examples for Framepack below.

HTTP example
set -euo pipefail

: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"

REQUEST_BODY=$(cat <<'JSON'
{
    "prompt": "A cinematic shot of a city at sunset, soft golden light",
    "image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
    "aspect_ratio": "16:9",
    "resolution": "720p",
    "seed": 0,
    "num_inference_steps": 25,
    "num_frames": 180,
    "guidance_scale": 10
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/framepack" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $WAVESPEED_API_KEY" \
  -d "$REQUEST_BODY")

TASK=$(printf '%s' "$SUBMIT_RESPONSE" | jq 'if has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "$TASK" | jq -r '.id')
if [ -z "$PREDICTION_ID" ] || [ "$PREDICTION_ID" = "null" ]; then
  printf 'Submission response did not contain a prediction id
' >&2
  exit 1
fi
RESULT_URL=$(printf '%s' "$TASK" | jq -r '.urls.get // empty')
if [ -z "$RESULT_URL" ]; then
  RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/$PREDICTION_ID/result"
fi

# 2. Poll until the prediction finishes.
while true; do
  RESPONSE=$(curl --silent --show-error --fail-with-body "$RESULT_URL" \
    -H "Authorization: Bearer $WAVESPEED_API_KEY")
  RESULT=$(printf '%s' "$RESPONSE" | jq 'if has("data") then .data else . end')
  STATUS=$(printf '%s' "$RESULT" | jq -r '.status')
  case "$STATUS" in
    completed) printf '%s\n' "$RESULT" | jq '.outputs'; break ;;
    failed|cancelled|timeout) printf '%s\n' "$RESULT" | jq . >&2; exit 1 ;;
    created|processing) sleep 2 ;;
    *) printf 'Unexpected status: %s
' "$STATUS" >&2; exit 1 ;;
  esac
done
Node.js example
const submitUrl = "https://api.wavespeed.ai/api/v3/wavespeed-ai/framepack";
const apiKey = process.env.WAVESPEED_API_KEY;
if (!apiKey) throw new Error('Set WAVESPEED_API_KEY');

async function requestJson(url, options = {}) {
  const response = await fetch(url, options);
  if (!response.ok) throw new Error(await response.text());
  return response.json();
}

// 1. Submit the prediction.
const body = await requestJson(submitUrl, {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
        "prompt": "A cinematic shot of a city at sunset, soft golden light",
        "image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
        "aspect_ratio": "16:9",
        "resolution": "720p",
        "seed": 0,
        "num_inference_steps": 25,
        "num_frames": 180,
        "guidance_scale": 10
}),
});
const task = body.data ?? body;
if (!task.id) throw new Error("Submission response did not contain a prediction id");
const resultUrl = task.urls?.get ||
  `https://api.wavespeed.ai/api/v3/predictions/${task.id}/result`;

// 2. Poll until the prediction finishes.
while (true) {
  const resultBody = await requestJson(resultUrl, {
    headers: { "Authorization": `Bearer ${apiKey}` },
  });
  const result = resultBody.data ?? resultBody;
  if (result.status === "completed") {
    console.log(result.outputs);
    break;
  }
  if (["failed", "cancelled", "timeout"].includes(result.status)) throw new Error(JSON.stringify(result));
  if (!["created", "processing"].includes(result.status)) throw new Error("Unexpected status: " + result.status);
  await new Promise(resolve => setTimeout(resolve, 2000));
}
Python example
import json
import os
import time
from urllib.request import Request, urlopen

api_key = os.environ["WAVESPEED_API_KEY"]
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
payload = {
    "prompt": "A cinematic shot of a city at sunset, soft golden light",
    "image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
    "aspect_ratio": "16:9",
    "resolution": "720p",
    "seed": 0,
    "num_inference_steps": 25,
    "num_frames": 180,
    "guidance_scale": 10
}

def request_json(url, data=None):
    request = Request(url, data=data, headers=headers, method="POST" if data else "GET")
    with urlopen(request) as response:
        return json.load(response)

# 1. Submit the prediction.
body = request_json("https://api.wavespeed.ai/api/v3/wavespeed-ai/framepack", json.dumps(payload).encode())
task = body.get("data", body)
if not task.get("id"):
    raise RuntimeError("Submission response did not contain a prediction id")
result_url = task.get("urls", {}).get("get") or f"https://api.wavespeed.ai/api/v3/predictions/{task['id']}/result"

# 2. Poll until the prediction finishes.
while True:
    result_body = request_json(result_url)
    result = result_body.get("data", result_body)
    status = result.get("status")
    if status == "completed":
        print(result.get("outputs", []))
        break
    if status in {"failed", "cancelled", "timeout"}:
        raise RuntimeError(result)
    if status not in {"created", "processing"}:
        raise RuntimeError(f"Unexpected status: {status}")
    time.sleep(2)

Framepack API — Frequently asked questions

What is the Framepack API?

Framepack is a WaveSpeedAI model for video generation from images, exposed as a REST API 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. You can call it programmatically or try it from the playground above.

How do I call the Framepack API?

POST your input parameters to the model's REST endpoint (shown in the API tab of this playground) with your WaveSpeedAI API key in the Authorization header. Submission returns a prediction ID. Poll the result endpoint starting around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. The playground generates production-oriented Python, JavaScript, and cURL examples with timeouts, transient-error handling, and safe GET retries. Full request/response shape is documented at https://wavespeed.ai/docs/docs-api/wavespeed-ai/framepack.

How much does Framepack cost per run?

Framepack starts at $0.20 per run. That figure is the base price — the final charge scales with the parameters you set in the form (output size, length, count, references, or whatever knobs this model exposes), so a higher-quality or larger output costs more than a minimal one. The exact cost for your current input is shown live next to the Generate button before you submit, and the actual per-call charge is recorded on the prediction afterwards.

What inputs does Framepack accept?

Key inputs: `prompt`, `image`, `aspect_ratio`, `resolution`, `seed`, `guidance_scale`. The full JSON schema (types, defaults, allowed values) is rendered above the Generate button and mirrored in the API reference at https://wavespeed.ai/docs/docs-api/wavespeed-ai/framepack.

How long does Framepack take to generate?

Average end-to-end generation time on WaveSpeedAI is around 727 seconds per request — measured across recent runs. Queue time scales with global demand; live status is visible in the prediction record.

Can I use Framepack outputs commercially?

Commercial usage rights depend on the model's license, set by its provider (WaveSpeedAI). The license summary appears on the model card above; see WaveSpeedAI's Terms of Service for platform-level conditions.

Framepack | Fast Image-to-Video API | WaveSpeedAI