Ana içeriğe geç
bytedance avatarı

Seedance 2.0 First and Last Frame API

bytedance/seedance-v2/first-last-frame

Bir görselle başlayıp başka bir görselle biten bir video üretin — ilk ve son kareyi sabitleyin, aradaki hareketi ve sesi prompt doldursun.

Çözünürlüğe göre fiyatlandırılır

Model girdisi

Input

Describe what happens between the two frames: the action, the camera move, and the sound. English, Chinese, Japanese, Indonesian, Spanish and Portuguese prompts are all understood.

Still image used as the FIRST frame of the clip. 300-6000 px on a side, under 30 MB, aspect ratio between 1:2.5 and 2.5:1.

Still image used as the LAST frame of the clip. May be the same image as the first frame, which produces a seamless loop. If its aspect ratio differs from the first frame's, the first frame wins and this image is cropped to fit.

Output resolution of the clip. Higher resolutions cost more per second of video.

Frame shape of the clip. adaptive keeps the shape of the first frame; any other value re-frames it.

Min: 4 - Max: 15

Clip length in seconds.

Additional Settings

Customize your input with more control.

Generate a synchronized soundtrack (dialogue, ambience and sound effects) together with the picture. Set false for a silent clip; the price is the same either way.

You need to be logged in to run this model and view results.
Log in

Model çıktısı

Output

Loading
Generated in 71 seconds
Logs (1 lines)

Örnek istekler

Örnekler

Example output 1

Model fiyatlandırması

Fiyatlandırma

Fiyat, çıktı videonuzun hedef çözünürlüğüne göre değişir.

480p
$0.105
çıktı videosunun saniyesi başına
yani yaklaşık $1 ile 10 saniye
720p
$0.227
çıktı videosunun saniyesi başına
yani yaklaşık $1 ile 4 saniye
1080p
$0.561
çıktı videosunun saniyesi başına
yani yaklaşık $1 ile 2 saniye

Seedance 2.0 First and Last Frame API

Seedance 2.0 First and Last Frame is a image-to-video AI model by bytedance. On ModelRunner it runs through a REST API or via MCP from any AI assistant, at $0.227 per second of video.

POST https://queue.modelrunner.run/bytedance/seedance-v2/first-last-frame

cURL

# Submit a request to the queue. Input fields go at the top level of the
# body. The optional reserved "metadata" object holds your own flat string
# tags — stored on the request, never sent to the model; filter later with
# GET https://queue.modelrunner.run/requests?metadata=<url-encoded JSON>.
curl -X POST https://queue.modelrunner.run/bytedance/seedance-v2/first-last-frame \
  -H "Authorization: Key $MRUN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "image": "https://media.modelrunner.ai/4TBsiIAoeDvW4S4KbGsqw.jpeg",
    "prompt": "Dawn mist drifts slowly across the wet meadow grass while the pink light along the horizon gradually warms.",
    "duration": 5,
    "end_image": "https://media.modelrunner.ai/1w4oW0Joi6KWugXfSNWBP.jpeg",
    "resolution": "480p",
    "aspect_ratio": "16:9",
    "generate_audio": true,
    "metadata": {
      "project": "my-project"
    }
  }'
# → { "request_id": "...", "status_url": "...", "response_url": "..." }

# Poll status_url until "COMPLETED", then fetch the result
curl "https://queue.modelrunner.run/bytedance/seedance-v2/first-last-frame/requests/$REQUEST_ID/status" \
  -H "Authorization: Key $MRUN_API_KEY"
curl "https://queue.modelrunner.run/bytedance/seedance-v2/first-last-frame/requests/$REQUEST_ID" \
  -H "Authorization: Key $MRUN_API_KEY"

JavaScript

import { modelrunner } from "@modelrunner/client";

const result = await modelrunner.subscribe("bytedance/seedance-v2/first-last-frame", {
  input: {
    "image": "https://media.modelrunner.ai/4TBsiIAoeDvW4S4KbGsqw.jpeg",
    "prompt": "Dawn mist drifts slowly across the wet meadow grass while the pink light along the horizon gradually warms.",
    "duration": 5,
    "end_image": "https://media.modelrunner.ai/1w4oW0Joi6KWugXfSNWBP.jpeg",
    "resolution": "480p",
    "aspect_ratio": "16:9",
    "generate_audio": true
  },
});
console.log(result);

Python

import os
import requests

headers = {"Authorization": f"Key {os.environ['MRUN_API_KEY']}"}

submitted = requests.post(
    "https://queue.modelrunner.run/bytedance/seedance-v2/first-last-frame",
    headers=headers,
    json={
      "image": "https://media.modelrunner.ai/4TBsiIAoeDvW4S4KbGsqw.jpeg",
      "prompt": "Dawn mist drifts slowly across the wet meadow grass while the pink light along the horizon gradually warms.",
      "duration": 5,
      "end_image": "https://media.modelrunner.ai/1w4oW0Joi6KWugXfSNWBP.jpeg",
      "resolution": "480p",
      "aspect_ratio": "16:9",
      "generate_audio": true
    },
).json()

# Poll submitted["status_url"] until "COMPLETED", then:
result = requests.get(submitted["response_url"], headers=headers).json()

Input parameters

Input parameters of Seedance 2.0 First and Last Frame
NameTypeRequiredDescription
promptstringyesDescribe what happens between the two frames: the action, the camera move, and the sound. English, Chinese, Japanese, Indonesian, Spanish and Portuguese prompts are all understood.
imagestring (uri)yesStill image used as the FIRST frame of the clip. 300-6000 px on a side, under 30 MB, aspect ratio between 1:2.5 and 2.5:1.
end_imagestring (uri)yesStill image used as the LAST frame of the clip. May be the same image as the first frame, which produces a seamless loop. If its aspect ratio differs from the first frame's, the first frame wins and this image is cropped to fit.
resolutionenumnoOutput resolution of the clip. Higher resolutions cost more per second of video. One of: 480p, 720p, 1080p. Default: "720p".
aspect_ratioenumnoFrame shape of the clip. adaptive keeps the shape of the first frame; any other value re-frames it. One of: 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive. Default: "adaptive".
durationintegernoClip length in seconds. Default: 5.
generate_audiobooleannoGenerate a synchronized soundtrack (dialogue, ambience and sound effects) together with the picture. Set false for a silent clip; the price is the same either way. Default: true.

Machine-readable: OpenAPI schema · llms.txt

Use Seedance 2.0 First and Last Frame from Claude & Cursor (MCP)

Point Claude Code, Claude Desktop, Cursor, or any MCP client at the ModelRunner MCP server and Seedance 2.0 First and Last Frame becomes a tool your assistant can call directly — it authorizes via OAuth (no API key in config) and runs this model with the run_model tool using the endpoint bytedance/seedance-v2/first-last-frame.

MCP client config (Claude Desktop, Cursor)

{
  "mcpServers": {
    "modelrunner": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.modelrunner.run/mcp"]
    }
  }
}

Claude Code

claude mcp add --transport http modelrunner https://mcp.modelrunner.run/mcp

Then ask your assistant, for example: “Run bytedance/seedance-v2/first-last-frame on ModelRunner to generate video”. MCP setup guide.

Model Detayları

Model Detayları

Seedance 2.0 First and Last Frame, bir görselle başlayıp başka bir görselle biten bir klip üretir. İki durağan görseli de siz verirsiniz — `image` ilk kare, `end_image` son karedir — prompt ise arada olanları anlatır: aksiyonu, kamera hareketini ve sesi. Ses sonradan dublajlanmak yerine görüntüyle birlikte üretilir; böylece diyalog, ortam sesi ve ses efektleri ekranda hareket edenlerle örtüşür. Klipler 24 fps’de, 480p’den 1080p’ye kadar, 4 ile 15 saniye arasında sürer.

## En uygun olduğu işler - Bir görseli kontrollü ve göze rahat gelen bir geçişle başka bir görsele dönüştürmek - Klibin kurguya temiz biçimde oturması için ilk ve son kareyi birebir sabitlemek - İki storyboard karesi ya da iki ürün durumu arasında animasyon üretmek (kapalıdan açığa, öncesi ve sonrası) - Kusursuz döngüler — `image` ve `end_image` için aynı URL’yi verin, klip başladığı yere geri döner

## Şu durumlarda başka bir model seçin - Elinizde yalnızca bir başlangıç karesi varsa ve klibin nerede biteceği önemli değilse — `bytedance/seedance-v2/image-to-video` kullanın - İki kareyi sabitlemek yerine kimliği, kıyafeti ya da stili birkaç referans fotoğrafla yönlendirmek istiyorsanız — `bytedance/seedance-v2/reference-to-video` kullanın - Elinizdeki bir görüntüyü yeniden tarzlıyor ya da uzatıyorsanız — `bytedance/seedance-v2/video-to-video` kullanın - Sabit bir seed ile tekrarlanabilir çalıştırmalar, kilitli bir kamera ya da 15 saniyeden uzun tek bir çekim gerekiyorsa — bunların hiçbiri burada sunulmuyor

## İpuçları - İki kare arasında inandırıcı bir bağ olmalı — model aralarında cross-fade yapmaz, bir hikâye kurar - İki görselin en-boy oranı farklıysa ilk kare esas alınır ve son kare sığacak şekilde kırpılır; kırpma önemliyse oranları kendiniz eşleştirin - İlk karenin biçimini korumak için `aspect_ratio` alanını `adaptive` bırakın; yalnızca bilerek yeniden çerçevelemek istediğinizde açıkça ayarlayın - Prompt’u geçişe ayırın: ne hareket ediyor, hangi sırayla ve ne duyuluyor

## Sınırlamalar - İki kare arasındaki büyük bir fark (sahnenin ya da kimliğin tamamen değişmesi) klibin ortasında sapmaya yol açabilir - İki durağan görselden herhangi birindeki ince doku ve küçük metin, çekim hareket etmeye başlayınca yumuşar - Hızlı hareket ve kalabalıklar 480p’de bulanıklaşır; 720p ve üzeri detayı korur

ModelRunner JavaScript client ile çalıştırmak için: ```js import { modelrunner } from "@modelrunner/client";

const result = await modelrunner.subscribe("bytedance/seedance-v2/first-last-frame", { input: { prompt: "The gull lifts off the railing and banks out over the bay as the mist thins, then wheels back and settles on the same railing exactly as it started", image: "https://media.modelrunner.ai/lLzL0kzIHxtmdFBBhc9WO.jpeg", end_image: "https://media.modelrunner.ai/lLzL0kzIHxtmdFBBhc9WO.jpeg", resolution: "720p", aspect_ratio: "adaptive", duration: 6, }, }); ```