> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apiyi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Seedance 2.5: референс-видео и редактирование видео

> Как Seedance 2.5 выбирает между референс-видео, редактированием видео и продлением видео на основе ваших материалов и prompt, почему задача может быть ошибочно распознана как редактирование и как формулировать запросы для предсказуемого результата.

## Краткий ответ

У Seedance 2.5 **нет отдельного переключателя «референс-в-видео»**. Как только `content` содержит референсное видео, модель анализирует **намерение вашего prompt**, чтобы определить, является ли задача референс-в-видео, редактированием видео или расширением видео:

* prompt **изменяет исходное видео** (добавляет, удаляет, изменяет, заменяет, сохраняет что-либо без изменений) → **редактирование видео**
* prompt **продолжает исходное видео** вперёд или назад (расширяет, продолжает) → **расширение видео**
* prompt только **заимствует из материалов персонажа, движение или стиль для создания нового клипа** → **референс-в-видео**

Если задача классифицируется как редактирование, `ratio` должен быть `adaptive`, а `duration` должен быть `-1`. Передача конкретного соотношения сторон или длительности возвращает ошибку 400, обычно с упоминанием `TaskTypeConstraint`.

<Info>
  Эта страница относится только к **Seedance 2.5** (`doubao-seedance-2-5-260628`). В семействе Seedance 2.0 нет задач редактирования видео или расширения видео, поэтому эта проблема там не возникает.
</Info>

## Ключевое различие: попадает ли ресурс в итоговый результат?

|                               | Из референса в видео                                                                  | Редактирование видео                                                                                        |
| ----------------------------- | ------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| Роль ресурса                  | Только **семантический референс**: внешний вид, движение, работа камеры, стиль, голос | Исходное видео **является основой результата**; модель добавляет, удаляет или изменяет элементы поверх него |
| Соотношение сторон результата | На ваш выбор (любое из семи значений `ratio`)                                         | **Зафиксировано** в соответствии с исходным видео; `ratio` должно быть `adaptive`                           |
| Длительность результата       | На ваш выбор (`duration` от 4 до 30)                                                  | **Зафиксирована** в соответствии с исходным видео; `duration` должно быть `-1`                              |
| Требования к исходному видео  | Нет                                                                                   | Длительность должна составлять **4–30 секунд**; лучше всего работает видео короче 20 секунд                 |
| Типичный prompt               | "Танцор на пляже, персонаж с изображения 1, хореография с отсылкой к видео 1"         | "Заменить человека в видео 1 изображением 1", "Удалить фоновую музыку из видео 1"                           |

Быстрая проверка: **видите ли вы само исходное видео в результате?** Если да, это редактирование (или расширение). Если сохраняется только его «ощущение», это режим из референса в видео.

Расширение видео похоже на редактирование: соотношение сторон зафиксировано в соответствии с исходным видео, но вы по-прежнему можете задать длительность.

## Как модель принимает решение

Решение принимается в два шага: сначала анализируется ресурс `role`, затем prompt.

| Тип задачи                             | Условие для ресурса                                                    | Слова-триггеры в prompt (документация провайдера)                                  | `ratio`                    | `duration`           |
| -------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | -------------------------- | -------------------- |
| Из референса в видео                   | Хотя бы один `reference_image` / `reference_video` / `reference_audio` | Нет намерения редактировать или расширять                                          | Любое                      | Любое                |
| Редактирование видео                   | Хотя бы один `reference_video`                                         | редактировать видео, добавить, удалить / убрать, изменить / заменить / поменять на | **Должно быть `adaptive`** | **Должно быть `-1`** |
| Расширение видео                       | Хотя бы один `reference_video`                                         | расширить вперёд / назад, продолжить                                               | **Должно быть `adaptive`** | Любое                |
| Первый кадр / первый и последний кадры | `role` имеет значение `first_frame` / `last_frame`                     | Не зависит от prompt                                                               | **Должно быть `adaptive`** | Любое                |

<Warning>
  Список слов-триггеров **не является исчерпывающим**. Модель оценивает смысл, а не точные слова. Такие фразы, как «сохранить всё в видео без изменений», «увеличить видео 1 до HD» или «сохранить те же наряды», отсутствуют в списке, однако все они описывают обработку исходного видеоматериала, поэтому также могут быть классифицированы как редактирование видео.
</Warning>

Запрос с референсными изображениями, но без референсного видео, никогда не классифицируется как редактирование или расширение. На это нужно обращать внимание только при наличии `reference_video`.

## Реальный случай

В этом запросе требовалось «увеличить разрешение видео», одновременно задав 4:3 и 15 секунд:

```json theme={null}
{
  "model": "doubao-seedance-2-5-260628",
  "ratio": "4:3",
  "duration": 15,
  "resolution": "1080p",
  "content": [
    { "type": "text", "text": "Upscale reference video 1 to HD, keep all elements in the video unchanged, keep the outfits unchanged" },
    { "type": "video_url", "role": "reference_video", "video_url": { "url": "asset://asset-xxxx" } }
  ]
}
```

Он был немедленно отклонён с ошибкой 400:

```text theme={null}
The parameters `ratio` and `duration` specified in the request are not valid.
Seedance identified your task as video editing based on your prompt. ...
Issues: [0] `ratio` must be `adaptive`. [1] `duration` must be -1.
```

«Увеличить разрешение» вместе с «оставить без изменений» означает работу с исходным видеоматериалом, поэтому модель классифицировала это как редактирование, а задачи редактирования не принимают пользовательское соотношение сторон или длительность. Поскольку этот запрос действительно является редактированием, правильное исправление:

```json theme={null}
"ratio": "adaptive",
"duration": -1
```

После изменения результат соответствует соотношению сторон и длительности исходного видео.

## Может ли параметр принудительно задать режим референс-в-видео?

**Нет.** В 2.5 `omni_reference_task_type` принимает только три значения:

| Значение              | Эффект                                                                              |
| --------------------- | ----------------------------------------------------------------------------------- |
| `auto` (по умолчанию) | Модель принимает решение на основе ресурсов и prompt                                |
| `edit`                | Объявляет редактирование видео; ограничения редактирования проверяются при отправке |
| `extend`              | Объявляет расширение видео; ограничения расширения проверяются при отправке         |

Значения «референс-в-видео» не существует. Кроме того, `edit` / `extend` лишь **выполняют проверку раньше**; они не принудительно задают тип задачи. Если объявленный тип отличается от типа, который модель определяет по prompt, задача всё равно завершится с ошибкой `InvalidParameter.TaskTypeMismatch`.

Кратко: тип задачи определяет **prompt**. Параметры могут только соответствовать ему.

## Три надёжных подхода

<Tabs>
  <Tab title="Размер вывода не имеет значения">
    Универсальная настройка, рекомендуемая в документации провайдера. При наличии референсных материалов отправляйте следующее. Независимо от того, какую подзадачу выберет модель, запрос не завершится ошибкой из-за ограничений параметров.

    ```json theme={null}
    "omni_reference_task_type": "auto",
    "ratio": "adaptive",
    "duration": -1
    ```

    Компромисс: если задача классифицируется как преобразование референса в видео, **модель выбирает длительность** (в наших тестах — 10 секунд или больше), и стоимость зависит от неё. Не рекомендуется для задач, чувствительных к стоимости.
  </Tab>

  <Tab title="Фиксированные соотношение сторон и длительность">
    Чтобы самостоятельно задать `ratio` и `duration`, модель должна классифицировать задачу как преобразование референса в видео. Это зависит от prompt:

    * Описывайте материалы как то, на что нужно **ориентироваться, что заимствовать или имитировать**, и указывайте, **что именно** используется как референс (движение, работа камеры, стиль, внешний вид персонажа)
    * Сосредоточьтесь на **новой сцене, которую вы хотите получить**, а не на том, что делать с исходным видео
    * Избегайте формулировок вроде «добавить / удалить / изменить / заменить / поменять на», «сохранить … без изменений», «повысить разрешение / восстановить» или «расширить / продолжить»

    | Вероятно будет воспринято как редактирование                | Переформулировано как преобразование референса в видео                                                |
    | ----------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
    | Заменить человека в видео 1 девушкой с изображения 1        | Девушка с изображения 1 бежит вдоль пляжа, используя движение и работу камеры из видео 1 как референс |
    | Сохранить сцену из видео 1 и добавить кота                  | Кот проходит мимо угла улицы в уличном стиле видео 1                                                  |
    | Повысить разрешение видео 1, сохранить одежду без изменений | Новый кадр с подиума с внешним видом персонажа и одеждой из видео 1                                   |
  </Tab>

  <Tab title="Повторная попытка в коде">
    Когда prompt поступают от конечных пользователей и вы не можете их контролировать, перехватите эту ошибку 400 и повторно отправьте запрос один раз. Ошибка возвращается при отправке, поэтому задача не создаётся, а ошибки параметров 400 не тарифицируются.

    ```python theme={null}
    import os
    import requests

    URL = "https://api.apiyi.com/seedance/api/v3/contents/generations/tasks"
    HEADERS = {
        "Authorization": f"Bearer {os.environ['APIYI_API_KEY']}",
        "Content-Type": "application/json",
        "Accept-Encoding": "identity",
    }

    def submit(payload: dict) -> str:
        resp = requests.post(URL, headers=HEADERS, json=payload, timeout=300)
        if resp.status_code == 400 and "TaskTypeConstraint" in resp.text:
            # Classified as edit / extend / first-frame: release ratio and duration, then resubmit
            payload = {**payload, "ratio": "adaptive", "duration": -1}
            resp = requests.post(URL, headers=HEADERS, json=payload, timeout=300)
        resp.raise_for_status()
        return resp.json()["id"]
    ```

    После повторной попытки вы больше не контролируете соотношение сторон или длительность. Если ваш продукт должен гарантировать характеристики вывода, верните ошибку пользователю и попросите его переформулировать запрос вместо незаметного повтора.
  </Tab>
</Tabs>

## Когда появляется ошибка

| Сценарий                                                                                                       | Когда возникает сбой                                                                                                                            | Код ошибки                            |
| -------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------- |
| `edit` / `extend` указаны явно, параметры нарушают ограничения                                                 | 400 при отправке                                                                                                                                | `InvalidParameter.TaskTypeConstraint` |
| Не указано или указано `auto`, модель классифицирует задачу как редактирование, параметры нарушают ограничения | В документации провайдера указано, что задача завершается сбоем асинхронно, но **она также может вернуть 400 при отправке** (как в случае выше) | `InvalidParameter.TaskTypeConstraint` |
| Указанный тип отличается от классификации модели                                                               | Задача завершается сбоем после начала выполнения                                                                                                | `InvalidParameter.TaskTypeMismatch`   |

Для этих двух ошибок требуются разные исправления: для `TaskTypeConstraint` измените параметры; для `TaskTypeMismatch` измените prompt (или снова установите `omni_reference_task_type` в `auto`).

## Примечания по стоимости

* **Результат редактирования видео имеет ту же длительность, что и исходное видео**, а не ту, которую вы хотели. За исходное видео длительностью 25 секунд взимается плата примерно как за 25 секунд.
* **В задачах с референсным видео кадры входного видео также преобразуются в тарифицируемые tokens**. Более длинные источники с более высоким разрешением стоят дороже.
* При использовании `duration: -1` в задаче преобразования референса в видео модель выбирает длительность, которая может оказаться больше ожидаемой.

Проверка длительности исходного видео перед отправкой позволяет избежать большинства неожиданностей. Чтобы проверить фактическую стоимость задачи, см. [Как найти фактическую стоимость видео Seedance по task\_id?](/ru/faq/seedance-task-cost-lookup).

## Связанная документация

<CardGroup cols={2}>
  <Card title="API генерации видео" icon="video" href="/ru/api-capabilities/seedance2/video-generation">
    Типы задач и ограничения параметров, полные параметры запроса
  </Card>

  <Card title="Обзор Seedance 2.0 / 2.5" icon="film" href="/ru/api-capabilities/seedance2/overview">
    Различия между 2.5 и 2.0, полное использование редактирования и расширения
  </Card>
</CardGroup>
