Wan 2.7 VideoEdit API на Novita AI: редактирование существующих клипов с помощью подсказок и референсных изображений

Wan 2.7 VideoEdit API на Novita AI: редактирование существующих клипов с помощью подсказок и референсных изображений

Wan 2.7 VideoEdit на Novita AI — это правильная конечная точка, когда у вас уже есть видеоматериал и вы хотите, чтобы модель перестилизовала или переписала сцену, не создавая движение с нуля. Вы отправляете исходное видео на POST https://api.novita.ai/v3/async/wan2.7-videoedit, получаете обратно task_id, а затем опрашиваете GET /v3/async/task-result, пока отредактированный клип не будет готов. В этом руководстве показана точная форма запроса, когда добавлять референсные изображения и важные детали реализации, которые необходимо учесть перед внедрением в производство.

Для сравнения режимов в более широком контексте см. Wan 2.7 на Novita AI: Text-to-Video vs Image-to-Video vs Reference-to-Video.

Когда Wan 2.7 VideoEdit — правильный инструмент

Используйте Wan 2.7 VideoEdit, когда тайминг и движение камеры в исходном клипе уже достаточно хороши, и вы хотите, чтобы ИИ изменил то, что видит зритель, а не то, как построен кадр.

Типичные случаи:

  • У вас есть живое видео, и вы хотите преобразовать его в аниме, кинематографичный или стилизованный рендер.
  • Необходимо изменить одежду, окружение, реквизит или атмосферу, сохранив исходную дугу движения.
  • Вы хотите применить трансформацию по текстовой подсказке и, возможно, закрепить внешний вид с помощью референсного изображения.

Это не та конечная точка, когда:

  • Вам нужно создать новое движение только из текста. Вместо этого используйте Wan 2.7 T2V.
  • Вы хотите анимировать статичное изображение. Вместо этого используйте Wan 2.7 I2V.
  • Вам нужна сцена с несколькими персонажами и именованными референсными слотами. Вместо этого используйте Wan 2.7 R2V.

Это различие важно, потому что VideoEdit начинает с входного клипа. Если исходное движение неверно, модель не исправит для вас хореографию.

Проверенная конечная точка и рабочий процесс

Wan 2.7 VideoEdit на Novita AI использует одну конечную точку отправки и общую конечную точку для опроса результатов:

Поле Значение
Конечная точка отправки POST https://api.novita.ai/v3/async/wan2.7-videoedit
Опрос результатов GET https://api.novita.ai/v3/async/task-result?task_id=<id>
Заголовок аутентификации Authorization: Bearer $NOVITA_API_KEY
Тип содержимого application/json
Официальная документация Справочник Wan 2.7 VideoEdit API

API является асинхронным. Успешный вызов отправки возвращает task_id, а не готовый URL видео. Ваше приложение должно сохранить этот идентификатор задачи и построить вокруг него логику опроса или фоновых заданий.

Шаг 1: Получите API-ключ Novita AI

Создайте ключ в управлении ключами Novita AI и сохраните его в переменной окружения:

export NOVITA_API_KEY="your_api_key_here"

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

Шаг 2: Поймите структуру запроса

Wan 2.7 VideoEdit использует плоское JSON-тело. Запрос не вкладывает поля в input или parameters.

Как минимум отправьте:

  • video_url
  • prompt

Документированные необязательные поля, которые обычно важны в первую очередь:

  • reference_image_url для референса внешнего вида/стиля
  • resolution
  • duration
  • audio_setting
  • prompt_extend
  • seed

Шаг 3: Отправьте первый запрос VideoEdit

Это минимальный практический запрос:

curl -s -X POST https://api.novita.ai/v3/async/wan2.7-videoedit \
  -H "Authorization: Bearer $NOVITA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "video_url": "https://example.com/source-clip.mp4",
    "prompt": "Turn this office hallway scene into a neon cyberpunk corridor, preserve the walking motion and camera path",
    "resolution": "720P",
    "duration": 5
  }'

Ожидаемый ответ:

{
  "task_id": "abc123..."
}

Ничего больше не гарантируется в момент отправки. Рассматривайте запрос как шаг постановки задачи в очередь, а не как синхронный ответ о редактировании.

Шаг 4: Опрашивайте конечную точку результатов задачи

Используйте полученный task_id с общей конечной точкой task-result:

curl -s "https://api.novita.ai/v3/async/task-result?task_id=abc123..." \
  -H "Authorization: Bearer $NOVITA_API_KEY"

Стройте логику вокруг этих состояний:

Статус Значение
TASK_STATUS_QUEUED Принято и ожидает выполнения
TASK_STATUS_PROCESSING Редактирование выполняется
TASK_STATUS_SUCCEED Отредактированное видео готово
TASK_STATUS_FAILED Задача не удалась; проверьте тело ответа

Когда задача успешно завершается, ответ включает массив videos с URL отредактированного вывода и временем жизни URL. Скачайте или переместите этот актив незамедлительно, не полагаясь на размещенный URL как на постоянное хранилище.

Шаг 5: Добавьте референсное изображение, когда нужен более строгий визуальный контроль

reference_image_url необязателен, но он полезным образом меняет поведение редактирования.

Используйте его, когда:

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

Пример запроса с референсным изображением:

curl -s -X POST https://api.novita.ai/v3/async/wan2.7-videoedit \
  -H "Authorization: Bearer $NOVITA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "video_url": "https://example.com/source-clip.mp4",
    "reference_image_url": "https://example.com/reference-look.png",
    "prompt": "Transform the performer into the look and color palette of the reference image while keeping the same dance timing",
    "resolution": "1080P",
    "duration": 6,
    "audio_setting": "auto"
  }'

Если результат постоянно уходит не туда, обычное решение — не более длинная подсказка, а более точная подсказка плюс лучшее референсное изображение.

Ключевые параметры, на которые стоит обратить внимание

Параметр Тип Обязательный Назначение
video_url string Да Исходное видео для редактирования
prompt string Да Описывает целевое преобразование
reference_image_url string Нет Референсное изображение для привязки внешнего вида и стиля
resolution string Нет Разрешение вывода, документированные значения: 720P и 1080P
duration integer Нет Целевая длина вывода в секундах; 0 сохраняет полную длину входного видео
audio_setting string Нет Управляет поведением генерации аудио
prompt_extend boolean Нет Позволяет модели автоматически расширять короткие подсказки
seed integer Нет Улучшает воспроизводимость при повторных попытках

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

Документированные ограничения и практические ограничения

По состоянию на 29 июля 2026 года официальная документация Novita для Wan 2.7 VideoEdit описывает следующие границы:

  • Поддерживаемые разрешения: 720P и 1080P
  • duration по умолчанию равно 0, что соответствует полной длине входного видео; при явном задании документированный диапазон длительности вывода — от 2 до 10 секунд
  • Форматы входного видео: mp4 и mov
  • Максимальный размер входного видео: до 100 МБ
  • Форматы референсного изображения: jpg, jpeg, png, webp
  • Максимальный размер референсного изображения: до 20 МБ
  • Формат выходного видео: mp4

Эти ограничения легко упустить при создании универсального медиа-пайплайна. Самая распространенная ошибка интеграции — отправка более длинного или более крупного исходного файла, чем позволяет конечная точка.

Два практических следствия:

  1. Если вы хотите, чтобы отредактированный клип сохранял исходную длину, опустите duration или установите его в 0, а не принудительно обрезайте до 2-10 секунд.
  2. Если вы быстро тестируете подсказки, сначала используйте 720P и переходите к 1080P только когда преобразование заработает.

Пример на Python: отправка и опрос

import os
import time
import requests

API_KEY = os.environ["NOVITA_API_KEY"]
BASE_URL = "https://api.novita.ai"
HEADERS = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json",
}


def submit_video_edit(
    video_url: str,
    prompt: str,
    reference_image_url: str | None = None,
    resolution: str = "720P",
    duration: int = 0,
    audio_setting: str = "auto",
    prompt_extend: bool = True,
    seed: int | None = None,
) -> str:
    payload = {
        "video_url": video_url,
        "prompt": prompt,
        "resolution": resolution,
        "duration": duration,
        "audio_setting": audio_setting,
        "prompt_extend": prompt_extend,
    }
    if reference_image_url:
        payload["reference_image_url"] = reference_image_url
    if seed is not None:
        payload["seed"] = seed

    resp = requests.post(
        f"{BASE_URL}/v3/async/wan2.7-videoedit",
        headers=HEADERS,
        json=payload,
        timeout=60,
    )
    resp.raise_for_status()
    return resp.json()["task_id"]


def poll_result(task_id: str, interval: int = 5, timeout: int = 300) -> dict:
    deadline = time.time() + timeout
    while time.time() < deadline:
        resp = requests.get(
            f"{BASE_URL}/v3/async/task-result",
            headers=HEADERS,
            params={"task_id": task_id},
            timeout=60,
        )
        resp.raise_for_status()
        data = resp.json()
        status = data.get("task", {}).get("status")

        if status == "TASK_STATUS_SUCCEED":
            return data
        if status == "TASK_STATUS_FAILED":
            reason = data.get("task", {}).get("reason", "unknown")
            raise RuntimeError(f"Task {task_id} failed: {reason}")

        time.sleep(interval)

    raise TimeoutError(f"Task {task_id} did not complete within {timeout}s")


if __name__ == "__main__":
    task_id = submit_video_edit(
        video_url="https://example.com/source-clip.mp4",
        prompt="Change the street scene into a rainy retro-futurist city at night, preserve the original tracking shot",
        reference_image_url="https://example.com/reference-frame.png",
        resolution="720P",
        duration=0,
        seed=42,
    )
    print(f"Submitted task: {task_id}")

    result = poll_result(task_id)
    video = result["videos"][0]
    print("Edited video URL:", video["video_url"])
    print("URL TTL:", video["video_url_ttl"])

Пример cURL с опросом через оболочку

TASK_ID=$(curl -s -X POST https://api.novita.ai/v3/async/wan2.7-videoedit \
  -H "Authorization: Bearer $NOVITA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "video_url": "https://example.com/source-clip.mp4",
    "prompt": "Convert the clip into a hand-drawn anime city scene, preserve the running motion",
    "resolution": "720P",
    "duration": 0,
    "prompt_extend": true
  }' | jq -r '.task_id')

while true; do
  RESULT=$(curl -s "https://api.novita.ai/v3/async/task-result?task_id=$TASK_ID" \
    -H "Authorization: Bearer $NOVITA_API_KEY")
  STATUS=$(echo "$RESULT" | jq -r '.task.status')

  if [ "$STATUS" = "TASK_STATUS_SUCCEED" ]; then
    echo "$RESULT" | jq -r '.videos[0].video_url'
    break
  fi

  if [ "$STATUS" = "TASK_STATUS_FAILED" ]; then
    echo "$RESULT"
    break
  fi

  sleep 5
done

Если вы интегрируете с бэкенд-сервиса, поместите этот цикл опроса в воркер, а не удерживайте пользовательский запрос на всё время генерации.

Ценообразование, кредиты и что проверить перед оценкой стоимости

Novita AI раскрывает цены на видеомодели на страницах моделей и цен, но эти цифры могут меняться. Для Wan 2.7 VideoEdit уточняйте текущие ставки непосредственно на странице цен Novita AI и на странице модели, указанной в официальной документации, прежде чем публиковать оценки стоимости для клиентов.

Для инженерного планирования более безопасное предположение:

  • Стоимость зависит от настроек генерируемого клипа, а не от единого фиксированного тарифа за запрос.
  • 1080P — неправильная базовая линия для итераций.
  • Более короткие клипы легче проверять и дешевле отлаживать.

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

Распространенные ошибки интеграции

Отправка необработанных загрузок вместо доступного URL. Документированная структура запроса предполагает ввод медиа через URL. Убедитесь, что ваш исходный клип уже доступен по стабильному URL, на который может ссылаться ваш сервер.

Использование VideoEdit для изменения движения. VideoEdit — это конечная точка трансформации, а не хореографии. Если исходное движение неверно, перегенерируйте с помощью T2V или I2V.

Путаница между ограничениями исходного видео и референсного изображения. Исходное видео — это более крупный ресурс: mp4/mov, до 100 МБ. Меньший лимит в 20 МБ относится к reference_image_url, а не к video_url.

Слишком агрессивный опрос. Обращение к конечной точке task-result каждую секунду не нужно для многоклипных видеозадач. Обычно лучшей отправной точкой является интервал 5-10 секунд.

Игнорирование времени жизни URL (TTL). URL результата временный. Сохраните актив незамедлительно, если отредактированный клип важен для дальнейшей обработки.

Пропуск конкретики в подсказке. “Сделать лучше” — это не подсказка для редактирования. Опишите целевой стиль, окружение, обработку объекта и то, какое движение должно остаться неизменным.

Какую конечную точку Wan 2.7 следует выбрать?

Используйте это быстрое правило:

  • Выбирайте VideoEdit, если у вас уже есть исходное видео.
  • Выбирайте I2V, если у вас есть исходное изображение или вы хотите продолжить работу с неподвижного кадра.
  • Выбирайте T2V, если у вас есть только текст.
  • Выбирайте R2V, если согласованность личности и контроль персонажа по референсу важнее, чем редактирование существующего клипа.

Это разделение позволяет сохранить вашу интеграцию простой. Команды часто чрезмерно используют text-to-video для задач, которые на самом деле являются проблемами редактирования на основе подсказок.

Если вы строите оркестрацию вокруг этой конечной точки, сравните Macaron V1 Tall Quick Start на Novita AI и Qwen3.8-Max на Novita AI для более весомых модельных якорей.

Часто задаваемые вопросы

Какая конечная точка Novita AI используется для Wan 2.7 VideoEdit?

POST https://api.novita.ai/v3/async/wan2.7-videoedit. Она возвращает task_id, затем вы опрашиваете GET https://api.novita.ai/v3/async/task-result?task_id=<id> на завершение.

Могу ли я предоставить референсное изображение вместе с исходным видео?

Да. Документированная структура запроса поддерживает необязательный параметр reference_image_url вместе с video_url и prompt, что полезно для более точного управления итоговым внешним видом.

Какую длину видео поддерживает Wan 2.7 VideoEdit на Novita AI?

По состоянию на 29 июля 2026 года, duration по умолчанию равен 0, что соответствует полной длине входного видео. При явном задании duration документированный диапазон составляет 2-10 секунд.

Принимает ли Wan 2.7 VideoEdit большие исходные видео?

Да, в пределах документированного лимита. Официальная документация указывает входные mp4/mov размером до 100 МБ. Отдельный лимит в 20 МБ применяется к необязательному референсному изображению.

Что мне использовать: Wan 2.7 VideoEdit или Wan 2.7 I2V?

Используйте VideoEdit, если у вас уже есть клип и вы хотите его преобразовать. Используйте I2V, если вашей отправной точкой является статичное изображение или рабочий процесс на основе изображения.

Рекомендуемые статьи