Seedance API: Seedance 2.5 и 2.0 из России

Видео ByteDance по одному ключу: по описанию, из первого/последнего кадра (image-to-video), по фото-, видео- и аудиореференсам. Цена за секунду в рублях, возврат при ошибке.

Seedance 2.5 — новейшая модель

Ролики до 30 секунд со звуком, до 30 фото- и 10 видеореференсов, 480p/720p/1080p. ID: seedance-2.5.

Seedance 2.0, 2.0 Fast, 2.0 Mini

До 15 секунд, до 4K у 2.0; Fast и Mini — быстрее и дешевле для черновиков. ID: seedance-2.0, seedance-2.0-fast, seedance-2.0-mini.

Пример: видео из кадра (i2v)

curl -X POST https://mixmedia.tech/api/v1/jobs/createTask \
  -H "Authorization: Bearer $MIXMEDIA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"seedance-2.5","input":{"prompt":"Камера медленно наезжает, героиня оборачивается, дождь, неон","first_frame_url":"https://example.com/frame-01.png","resolution":"720p","duration":"5","aspect_ratio":"9:16"}}'

# статус (или передайте callBackUrl — пришлём результат сами)
curl "https://mixmedia.tech/api/v1/jobs/recordInfo?taskId=TASK_ID" \
  -H "Authorization: Bearer $MIXMEDIA_API_KEY"
import os, time, requests

API = "https://mixmedia.tech/api/v1"
H = {"Authorization": f"Bearer {os.environ['MIXMEDIA_API_KEY']}"}

task = requests.post(f"{API}/jobs/createTask", headers=H, json={
  "model": "seedance-2.5",
  "input": {
    "prompt": "Камера медленно наезжает, героиня оборачивается, дождь, неон",
    "first_frame_url": "https://example.com/frame-01.png",
    "resolution": "720p",
    "duration": "5",
    "aspect_ratio": "9:16"
  }
}).json()
task_id = task["data"]["taskId"]

while True:
    info = requests.get(f"{API}/jobs/recordInfo", headers=H, params={"taskId": task_id}).json()["data"]
    if info["state"] in ("success", "fail"):
        break
    time.sleep(5)
print(info["state"], info.get("resultJson"))
const API = "https://mixmedia.tech/api/v1";
const H = { Authorization: `Bearer ${process.env.MIXMEDIA_API_KEY}`, "Content-Type": "application/json" };

const { data } = await (await fetch(`${API}/jobs/createTask`, {
  method: "POST", headers: H,
  body: JSON.stringify({
    "model": "seedance-2.5",
    "input": {
      "prompt": "Камера медленно наезжает, героиня оборачивается, дождь, неон",
      "first_frame_url": "https://example.com/frame-01.png",
      "resolution": "720p",
      "duration": "5",
      "aspect_ratio": "9:16"
    }
  }),
})).json();

let info;
do {
  await new Promise((r) => setTimeout(r, 5000));
  info = (await (await fetch(`${API}/jobs/recordInfo?taskId=${data.taskId}`, { headers: H })).json()).data;
} while (!["success", "fail"].includes(info.state));
console.log(info.state, info.resultJson);

Свой файл сначала загрузите через POST /api/v1/files/upload и передайте полученную ссылку.

Цены Seedance за секунду

Цена = ставка × (длительность + длина видеореференсов). Видна до запуска; при ошибке возвращается.

Модель (ID)Качествоза секундус видео-референсом
seedance-2.5480p14,72 ₽8,82 ₽
seedance-2.5720p33,08 ₽19,85 ₽
seedance-2.51080p58,95 ₽35,22 ₽
seedance-2.0480p10,11 ₽6,13 ₽
seedance-2.0720p21,75 ₽13,15 ₽
seedance-2.01080p54,28 ₽33,03 ₽
seedance-2.04k110,58 ₽68,05 ₽
seedance-2.0-fast480p6,1 ₽3,63 ₽
seedance-2.0-fast720p13,11 ₽7,85 ₽
seedance-2.0-mini480p1,62 ₽0,98 ₽
seedance-2.0-mini720p3,5 ₽2,12 ₽

Вопросы и ответы

Чем Seedance 2.5 отличается от 2.0?

Seedance 2.5 делает ролики до 30 секунд и принимает больше референсов; Seedance 2.0 поддерживает 4K и до 15 секунд. Fast и Mini — экономичные версии 2.0.

Куда писать с вопросами?

В Telegram @mixmedia_robot — ответим по API, оплате и интеграции. Для обращений с историей есть раздел «Поддержка» в кабинете.

Как оплатить API из России?

Пополните баланс в кабинете картой любого российского банка или через СБП. Баланс общий для сайта и API, списание — за каждый запуск, без подписки и минимального платежа.

Нужен ли VPN?

Нет. API и сайт работают из России напрямую: запросы идут на mixmedia.tech/api/v1, ссылки на результаты — на наш домен.

Что будет, если генерация не удалась?

Цена списывается при создании задачи и автоматически возвращается на баланс, если задача завершилась ошибкой (state = fail).

Какие лимиты?

Лимиты на число одновременных задач и запросов в минуту зависят от модели и указаны в документации. Если нужен больший поток — напишите в поддержку.

Как работают вебхуки?

Передайте callBackUrl в createTask — когда задача станет success или fail, мы отправим POST с тем же JSON, что у recordInfo. Подпись X-Signature = HMAC-SHA256 от сырого тела с вашим секретом whsec_…; до 4 попыток доставки. Подробнее.

Начать

Войдите, создайте ключ в кабинете, пополните баланс картой РФ или СБП — и отправьте первый запрос.

Вопросы? Напишите в Telegram @mixmedia_robot.