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

Продолжите клип в Wan 2.5: последний кадр вашего видео открывает новый фрагмент в 5 или 10 секунд со звуком, а в ответ вы получаете один файл со склеенными оригиналом и продолжением в 480p, 720p или 1080p. Необязательная аудиодорожка задаёт темп новой части.

От $0.045/с

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

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

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

Примеры используют публичные параметры выбранного эндпоинта. Замените 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": "alibaba/wan-2.5/video-extend",
  "input": {
    "duration_seconds": 5,
    "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, до 60 секунд. Его последний кадр становится стартовым кадром нового фрагмента, поэтому режьте по чистому, резкому кадру. Исходник не оплачивается.

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

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

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

По умолчанию выключено. Включайте для идеи в одну строку; оставьте выключенным, если промпт уже описывает точное действие.

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

Звук нового фрагмента: реплика или музыкальный сигнал, которому нужно следовать, чтобы речь и удары ритма попали туда, куда вы ожидаете. WAV или MP3, от 3 до 30 секунд, до 15 МБ. Аудио длиннее нового фрагмента обрезается в конце; если оно короче, остаток фрагмента беззвучен. Оригинал сохраняет собственный звук.

По умолчанию
Не задано
Ограничения
minLength:1
format:"uri"
contentMediaType:["audio/mpeg","audio/wav"]
duration_secondsintegerНеобязательноВлияет на цену

Длина нового фрагмента: ровно 5 или 10 секунд, по умолчанию 5. Ваш оригинал добавляется спереди и не оплачивается. Короткие фрагменты лучше держат руки и волосы, поэтому сначала подберите вид на пяти секундах.

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

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

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

Чего не должно быть в новом фрагменте: второго человека, субтитров, предмета, который последний кадр постоянно приносит. До 500 символов.

По умолчанию
Не задано
Ограничения
maxLength:500
promptstringНеобязательно

Необязательно. Что происходит дальше: следующее действие, движение камеры и строка о звуке. Последний кадр уже определяет объект и декорации, поэтому слова потратьте на движение. До 1500 символов.

По умолчанию
Не задано
Ограничения
maxLength:1500

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

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": "alibaba/wan-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 или командой ниже и найдите на холсте Wan 2.5 · Video Extend. У узла те же параметры, что и на этой странице, а цена показывается до запуска.

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