Перейти к основному контенту

Продолжите клип в Seedance 2.5: не более последних 30 секунд служат референсом для нового отрезка от 4 до 30 секунд в 480p, 720p или 1080p, и вы получаете один файл со склеенными клипом и продолжением.

От $0.074/с

Рабочая область

Отправить запрос

Быстрый старт

Примеры используют публичные параметры выбранного эндпоинта. Замените API-ключ и примеры медиафайлов, затем отправьте запрос со своего сервера.

SDK и интеграции
POSThttps://api.spicyapi.ai/api/v1/jobs/createTask

Аутентификация API

Храните API-ключ в серверной переменной окружения SPICY_API_KEY. Используйте Bearer-аутентификацию и Content-Type: application/json для JSON-запросов.

Authorization: Bearer $SPICY_API_KEY
# Generate the idempotency key once; reuse it when retrying after a lost response.
export SPICY_IDEMPOTENCY_KEY="${SPICY_IDEMPOTENCY_KEY:-$(uuidgen)}"
curl -X POST https://api.spicyapi.ai/api/v1/jobs/createTask \
  -H "Authorization: Bearer $SPICY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $SPICY_IDEMPOTENCY_KEY" \
  -d '{
  "model": "bytedance/seedance-2.5/video-extend",
  "input": {
    "duration_seconds": 5,
    "generate_audio": true,
    "prompt": "A slow aerial shot drifting over a misty pine forest at sunrise",
    "resolution": "720p",
    "video_url": "https://example.com/reference.mp4"
  }
}'

# Copy data.taskId from the response into TASK_ID, then poll the status.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.spicyapi.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
  -H "Authorization: Bearer $SPICY_API_KEY"

Пример построен по входной схеме этой модели — той же, по которой API проверяет каждый запрос.

Входные параметры

Поместите эти поля в объект input тела запроса. Имена и типы соответствуют API. Не предполагайте значение по умолчанию, если оно не задано.

video_urlstringОбязательноВлияет на цену

Клип, который нужно продолжить: MP4, MOV или WebM, от 2 до 60 секунд. Не более последних 30 секунд (весь клип, если он короче) становятся референсом и оплачиваются как секунды референса; всё, что раньше, не оплачивается. Обрежьте клип на моменте, с которого нужно продолжать.

По умолчанию
Не задано
Ограничения
minLength:1
format:"uri"
contentMediaType:["video/mp4","video/webm","video/quicktime"]
promptstringОбязательно

Обязательно. Опишите, что происходит дальше: следующее действие, движение камеры и звук. Персонажа, обстановку и недавнее движение уже несёт референс, так что тратьте слова на то, как продолжается план.

По умолчанию
Не задано
watermarkbooleanНеобязательно

По умолчанию выключено. Если включить, новый отрезок получит водяной знак, указывающий на генерацию ИИ; ваш клип не меняется. На цену не влияет.

По умолчанию
false
seedintegerНеобязательно

От 0 до 2147483647. Зафиксируйте, чтобы сравнивать изменения по одному полю; не указывайте ради разнообразия. Фиксированный seed не гарантирует одинакового результата.

По умолчанию
Не задано
Ограничения
minimum:0
maximum:2147483647
enable_web_searchbooleanНеобязательно

По умолчанию выключено. Если включить, модель может поискать в интернете сведения по промпту перед генерацией нового отрезка. Цена не меняется.

По умолчанию
false
generate_audiobooleanНеобязательно

По умолчанию включено: новый отрезок получает сгенерированный звук, который следует референсу. Звук вашего клипа сохраняется в любом случае; если одна сторона без звука, склеенный файл дополняется тишиной. Выбирает ценовой уровень.

По умолчанию
true
duration_secondsintegerНеобязательноВлияет на цену

Длина нового отрезка: любое целое число от 4 до 30, по умолчанию 5. Секунды референса из клипа оплачиваются сверху, поэтому отрезок 5 секунд после клипа 30 секунд оплачивает 35 секунд.

По умолчанию
5
Допустимые значения
456789101112131415161718192021222324252627282930
resolutionstringНеобязательноВлияет на цену

Размер нового отрезка: 480p, 720p или 1080p, по умолчанию 720p. Он задаёт только качество нового отрезка, поэтому выбирайте разрешение клипа. Склеенный файл сохраняет кадрирование вашего клипа без чёрных полос; чтобы стык совпал, изображение по краям может быть обрезано или слегка скорректировано на несколько процентов. Если модель вернёт заметно другие пропорции, новый отрезок масштабируется так, чтобы заполнить ваш кадр, выравнивается по центру, а всё, что выходит за края, обрезается. Определяет цену.

По умолчанию
"720p"
Допустимые значения
"480p""720p""1080p"

Отследить задачу

HTTP 202 означает принятие задачи, а не завершение генерации. Сохраните полученный taskId и проверяйте эту задачу. Не создавайте новую, пока ждёте результат.

Ответ при приёме задачи
HTTP/1.1 202 Accepted
Location: /api/v1/jobs/recordInfo?taskId=job_01k3m8x9q2z4v7n5p6r8s0t1w3

{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_create",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "state": "queued",
    "estimatedCost": "0.750000"
  }
}

В ответе о приёме есть оценка стоимости — приложение сможет показать ту же сумму в истории задач и в расчётах.

Получить задачу
curl --get "https://api.spicyapi.ai/api/v1/jobs/recordInfo" \
  --data-urlencode "taskId=$TASK_ID" \
  -H "Authorization: Bearer $SPICY_API_KEY"

Начните с интервала около 2 секунд и постепенно увеличивайте его. Прекратите опрос при конечном состоянии. После сбоя соединения используйте исходный taskId. Повторно создавать задачу можно только с исходным ключом идемпотентности и исходным телом запроса.

Или пусть вызов придёт сам
import { verifyWebhook } from "@spicyapi/sdk";

// express.raw keeps the bytes we signed; express.json never matches.
app.post("/hooks/spicy", express.raw({ type: "application/json" }), (req, res) => {
  const { payload } = verifyWebhook({
    rawBody: req.body,
    timestamp: req.header("X-Webhook-Timestamp"),
    signature: req.header("X-Webhook-Signature"),
    payloadVersion: Number(req.header("X-Webhook-Payload-Version")),
    secret: process.env.SPICY_WEBHOOK_SECRET,
  });
  res.status(200).end();
  void handleFinishedTask(payload);
});

Передайте callBackUrl при создании задачи — готовая запись придёт к вам POST-запросом, и никакого опроса не понадобится. В каждой доставке есть X-Webhook-Timestamp, X-Webhook-Signature и X-Webhook-Payload-Version. Подпись — это HMAC-SHA256 в base64 от taskId.timestamp.sha256(body), поэтому проверять её нужно по исходным байтам: если разобрать JSON и сериализовать заново, байты изменятся и проверка не пройдёт. Неудачные доставки повторяются, так что один и тот же taskId может прийти дважды — сделайте обработчик идемпотентным. Сначала ответьте 2xx, работу выполняйте после: медленный обработчик считается неудачной доставкой.

Прочитать результат

Обрабатывайте output только при state, равном succeeded. При ошибке проверьте errorCode, errorMessage и request_id. Стоимость и состояния в примерах не являются фактическим счётом.

Пример ответа после завершения
{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_record",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "model": "bytedance/seedance-2.5/video-extend",
    "state": "succeeded",
    "output": {
      "assets": [
        {
          "key": "tasks/2026/08/28/job_01k3m8x9q2z4v7n5p6r8s0t1w3/3f7a1c9e5b2d48f0a6c1e3d5b7f9a1c3.mp4",
          "mime": "video/mp4",
          "url": "https://example.r2.cloudflarestorage.com/results/job_01k3m8x9q2z4v7n5p6r8s0t1w3/result.mp4?X-Amz-Signature=SIGNATURE_FROM_RESPONSE",
          "expiresAt": "2026-08-28T12:20:08.000Z"
        }
      ]
    },
    "cost": "0.750000",
    "settled": true,
    "createdAt": "2026-08-28T12:00:00Z",
    "completedAt": "2026-08-28T12:00:30Z"
  }
}

Доступные файлы можно открыть или скачать по assets[].url без заголовка API Authorization. Подписанная ссылка действует до expiresAt. Чтобы обновить её, повторно запросите задачу в течение срока хранения файла. У ожидающих или недоступных файлов URL отсутствует. Не передавайте подписанные ссылки посторонним.

SDK и интеграции

Используйте SpicyAPI в приложении, терминале, ИИ-ассистенте или визуальном процессе. Выберите руководство по настройке.

Использование в ComfyUI

Установите узлы SpicyAPI через ComfyUI Manager или командой ниже и найдите на холсте Seedance 2.5 · Video Extend. У узла те же параметры, что и на этой странице, а цена показывается до запуска.

cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi