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

# Vidu Q4 Preview Генерация видео

> Видео по одному начальному кадру или по референсам: до 15 изображений и 3 аудиоклипов. 3–16 секунд, до 4K, по умолчанию со звуком.

<Info>
  Модель поддерживает генерацию по изображению и по референсам, но не по одному тексту и не по паре начального и конечного кадров. После отправки получите ID задачи из `data[0].task_id` и проверяйте состояние и результат через [запрос задачи](/ru/api-reference/tasks/status).
</Info>

## Режимы генерации

`viduq4-preview` автоматически выбирает режим по изображениям, ролям и аудиореференсам. Дополнительный параметр режима не нужен.

| Входные данные | Режим |
| - | - |
| Только `first_frame_image` или одно изображение с `role: "first_frame"` | По изображению |
| Одно изображение без роли и без аудиореференса | По изображению |
| Есть роль `reference_image` или `reference`, нет явного начального кадра | По референсам |
| Всего 2–15 изображений, нет явного начального кадра | По референсам |
| Аудиореференс и 1–15 изображений, нет явного начального кадра | По референсам |

* **По изображению**: ровно один начальный кадр; промпт необязателен; аудиореференсы не допускаются.
* **По референсам**: 1–15 изображений, до 3 аудиореференсов и **обязательный промпт**. Для одного изображения без аудиореференса явно укажите `role: "reference_image"`; иначе используется режим по изображению.
* Явный начальный кадр (`first_frame_image` или `role: "first_frame"`) нельзя сочетать с другими изображениями, ролями референсов или аудиореференсами. Иначе возвращается HTTP 400.

<RequestExample>
  ```bash cURL theme={null}
  curl --request POST \
    --url https://api.apimart.ai/v1/videos/generations \
    --header 'Authorization: Bearer <token>' \
    --header 'Content-Type: application/json' \
    --data '{
      "model": "viduq4-preview",
      "prompt": "Девушка оборачивается и улыбается, длинные волосы развеваются на ветру, камера медленно приближается",
      "image_urls": ["https://example.com/first-frame.png"],
      "duration": 5,
      "resolution": "1080p"
    }'
  ```

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

  response = requests.post(
      "https://api.apimart.ai/v1/videos/generations",
      headers={"Authorization": "Bearer <token>"},
      json={
          "model": "viduq4-preview",
          "prompt": "Девушка оборачивается и улыбается, длинные волосы развеваются на ветру, камера медленно приближается",
          "image_urls": ["https://example.com/first-frame.png"],
          "duration": 5,
          "resolution": "1080p"
      }
  )
  response.raise_for_status()
  print(response.json())
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch("https://api.apimart.ai/v1/videos/generations", {
    method: "POST",
    headers: {
      Authorization: "Bearer <token>",
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      model: "viduq4-preview",
      prompt: "Девушка оборачивается и улыбается, длинные волосы развеваются на ветру, камера медленно приближается",
      image_urls: ["https://example.com/first-frame.png"],
      duration: 5,
      resolution: "1080p"
    })
  });
  if (!response.ok) throw new Error(await response.text());
  console.log(await response.json());
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "code": 200,
    "data": [
      {
        "status": "submitted",
        "task_id": "task_01K..."
      }
    ]
  }
  ```
</ResponseExample>

## Заголовки запроса

<ParamField header="Authorization" type="string" required>
  Авторизация Bearer в формате `Bearer <token>`, где `<token>` — ваш APIMart API Key.
</ParamField>

## Параметры запроса

<ParamField body="model" type="string" required>
  Точное значение: `viduq4-preview`, строчными буквами.
</ParamField>

<ParamField body="prompt" type="string">
  Промпт для генерации видео, до 20 000 символов.

  * По изображению: необязателен. Если не задан, модель формирует содержание по начальному кадру.
  * По референсам: обязателен. При отсутствии возвращается HTTP 400.
</ParamField>

<ParamField body="image_urls" type="string[]">
  Массив изображений. Поддерживаются общедоступные URL и Base64 Data URL, например `data:image/png;base64,...`.

  * По изображению: ровно одно изображение как начальный кадр.
  * По референсам: суммарно 1–15 изображений вместе с `image_with_roles`.

  Можно сочетать с `image_with_roles`; количество суммируется. Не сочетайте с `first_frame_image` или явной ролью `first_frame`. Для одного изображения без роли выбор режима также зависит от наличия аудиореференса.
</ParamField>

<ParamField body="image_with_roles" type="object[]">
  Массив изображений с ролями. Один элемент для режима по изображению; суммарно 1–15 изображений с `image_urls` для режима по референсам.

  <Expandable title="Показать поля изображений">
    <ParamField body="url" type="string" required>
      Общедоступный URL изображения или Base64 Data URL.
    </ParamField>

    <ParamField body="role" type="string">
      Роль изображения, без учёта регистра:

      * `first_frame`: начальный кадр для режима по изображению.
      * `reference_image`: изображение-референс; также допускается `reference`.
      * Не задана или пустая: без аудиореференса режим определяется общим количеством — одно изображение для режима по изображению, два и более для режима по референсам. При наличии аудиореференса используется режим по референсам.

      Другие значения, например `last_frame`, синхронно возвращают HTTP 400.
    </ParamField>
  </Expandable>

  Можно сочетать с `image_urls` для передачи референсов, но роли начального кадра нельзя смешивать с референсными материалами.
</ParamField>

<ParamField body="first_frame_image" type="string">
  Только для режима по изображению. Общедоступный URL или Base64 Data URL начального кадра.

  При использовании этого поля не передавайте другие изображения или аудиореференсы. Для режима по референсам используйте `image_urls` или `image_with_roles`.
</ParamField>

<ParamField body="audio_urls" type="string[]">
  Массив URL аудиореференсов, только для режима по референсам. Вместе с `audio_url` не более 3 клипов.

  Требуется MP3, каждый клип 3–12 секунд и не более 50MB. Даже при наличии аудиореференса необходимы хотя бы одно изображение и `prompt`.

  Неверный формат или длительность аудио приводят к сбою во время выполнения и полному возврату средств, а не к синхронному HTTP 400 при отправке.
</ParamField>

<ParamField body="audio_url" type="string">
  URL одного аудиореференса. Требования те же, что у `audio_urls`; суммарно не более 3 клипов в двух полях.
</ParamField>

<ParamField body="aspect_ratio" type="string" default="16:9">
  Только для режима по референсам. Допустимы `1:1`, `9:16`, `16:9`, `3:4`, `4:3`. По умолчанию `16:9`.

  В режиме по изображению соотношение сторон определяется начальным кадром, а этот параметр игнорируется.
</ParamField>

<ParamField body="size" type="string">
  Совместимый псевдоним `aspect_ratio` с теми же значениями. Рекомендуется использовать только одно из этих полей. В режиме по изображению не действует.
</ParamField>

<ParamField body="duration" type="integer" default="5">
  Длительность видео в секундах. Поддерживаются 3–16 секунд, но не 1–2 секунды.
</ParamField>

<ParamField body="resolution" type="string" default="720p">
  Разрешение: `540p`, `720p`, `1080p`, `2K` или `4K`, без учёта регистра.
</ParamField>

<ParamField body="audio" type="boolean" default="true">
  Добавлять ли диалоги и звуковые эффекты в видео.

  * `true`: видео со звуковой дорожкой (по умолчанию).
  * `false`: видео без звука.

  Стоимость видео со звуком и без звука одинакова.
</ParamField>

<ParamField body="seed" type="integer">
  Случайное зерно. Не передавайте или укажите `0` для случайного значения.
</ParamField>

## Требования к материалам

* По изображению: требуется ровно один начальный кадр; аудиореференсы не принимаются.
* По референсам: обязательны 1–15 изображений; дополнительно можно передать до 3 аудиореференсов.
* PNG, JPEG, JPG и WEBP, не более 50MB на изображение.
* При Base64 весь запрос должен быть меньше 20MB. Рекомендуются общедоступные URL.
* URL изображений должны быть общедоступны. Замените адреса из примеров на реально доступные.

<Warning>
  Оба режима требуют изображения и не поддерживают `last_frame_image`. Смешивание начального кадра с референсами, превышение количества изображений/аудио и подобные ошибки возвращают HTTP 400 при отправке, без создания задачи и списания средств. Неверный формат или длительность аудиореференса приводят к сбою при выполнении и возврату средств.
</Warning>

## Примеры запросов

### Только начальный кадр, без промпта

```json theme={null}
{
  "model": "viduq4-preview",
  "image_urls": ["https://example.com/first-frame.png"]
}
```

По умолчанию создаётся видео длительностью 5 секунд в 720p со звуком.

### Начальный кадр с явной ролью и вывод в 4K

```json theme={null}
{
  "model": "viduq4-preview",
  "prompt": "Камера медленно приближается, человек естественно улыбается",
  "image_with_roles": [
    {
      "url": "https://example.com/first-frame.png",
      "role": "first_frame"
    }
  ],
  "duration": 8,
  "resolution": "4K",
  "audio": true
}
```

### Видео без звука через поле начального кадра

```json theme={null}
{
  "model": "viduq4-preview",
  "first_frame_image": "https://example.com/first-frame.png",
  "duration": 5,
  "resolution": "1080p",
  "audio": false
}
```

### Видео по нескольким изображениям и аудиореференсу

```json theme={null}
{
  "model": "viduq4-preview",
  "prompt": "Мальчик с изображения 1 говорит с девушкой с изображения 2, используя содержание аудиореференса, в кафе с изображения 3",
  "image_urls": [
    "https://example.com/boy.png",
    "https://example.com/girl.png",
    "https://example.com/cafe.png"
  ],
  "audio_urls": ["https://example.com/line.mp3"],
  "aspect_ratio": "16:9",
  "duration": 8,
  "resolution": "720p"
}
```

### Режим по референсам с одним изображением

```json theme={null}
{
  "model": "viduq4-preview",
  "prompt": "Человек с референсного изображения входит в кафе и машет сотрудникам",
  "image_with_roles": [
    {
      "url": "https://example.com/person.png",
      "role": "reference_image"
    }
  ],
  "aspect_ratio": "9:16",
  "duration": 5,
  "resolution": "1080p"
}
```

В примере нет аудиореференса; режим по референсам явно выбран ролью `reference_image`. Замените все URL изображений и аудио на доступные адреса материалов.

## Ответ на отправку

<ResponseField name="code" type="integer">
  Код ответа; `200` означает успех.
</ResponseField>

<ResponseField name="data" type="array">
  Результат отправки задачи.

  <Expandable title="Показать поля задачи">
    <ResponseField name="status" type="string">
      `submitted` означает успешную отправку, а не завершение генерации.
    </ResponseField>

    <ResponseField name="task_id" type="string">
      ID задачи для запроса состояния и результата.
    </ResponseField>
  </Expandable>
</ResponseField>

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

Опрашивайте каждые 5–10 секунд и прекращайте при `completed` или `failed`. Используйте единый endpoint:

```bash theme={null}
curl --request GET \
  --url https://api.apimart.ai/v1/tasks/task_01K... \
  --header 'Authorization: Bearer <token>'
```

Пример успешного ответа (URL видео приведён для примера):

```json theme={null}
{
  "code": 200,
  "data": {
    "id": "task_01K...",
    "status": "completed",
    "progress": 100,
    "result": {
      "videos": [
        {
          "url": ["https://example.com/generated-video.mp4"]
        }
      ]
    }
  }
}
```

| Состояние | Действие |
| - | - |
| `pending` | В очереди; продолжать опрос |
| `processing` | Генерация; продолжать опрос |
| `completed` | Успех; получить ссылки из массива `data.result.videos[0].url` |
| `failed` | Сбой; прочитать причину из `data.error.message`, прекратить опрос; полный возврат средств |

Ссылки действуют 24 часа. Своевременно скачайте и сохраните видео. Определяйте завершение по `status`, а не по фиксированным значениям прогресса.

## Оплата

Стоимость зависит от длительности и разрешения: стоимость = длительность (секунды) × цена секунды для выбранного разрешения.

Актуальные цены указаны в [тарифах моделей](https://apimart.ai/pricing). Оба режима стоят одинаково, со звуком или без. Изображения и аудиореференсы не оплачиваются дополнительно. При сбое задачи средства автоматически возвращаются полностью.

## Типичные ошибки параметров

Следующие случаи синхронно возвращают HTTP 400 без создания задачи и списания средств:

| Проблема | Действие |
| - | - |
| Нет изображений | Передайте один начальный кадр или 1–15 изображений-референсов в зависимости от режима |
| Явный начальный кадр смешан с другими изображениями, ролями референсов или аудио | Для режима по изображению оставьте один начальный кадр; для режима по референсам удалите явные поля или роли начального кадра |
| Неподдерживаемая `role`, например `last_frame` | Используйте `first_frame`, `reference_image`, `reference` или пустое значение |
| Более 15 изображений-референсов | Ограничьте сумму `image_urls` и `image_with_roles` до 15 |
| Более 3 аудиореференсов | Ограничьте сумму `audio_urls` и `audio_url` до 3 |
| Нет `prompt` в режиме по референсам | Добавьте промпт до 20 000 символов |
| Неподдерживаемое соотношение сторон, например `21:9` | Используйте `1:1`, `9:16`, `16:9`, `3:4` или `4:3` |
| Передан `last_frame_image` | Удалите поле; пара начального и конечного кадров не поддерживается |
| `duration` меньше 3 или больше 16 | Используйте целое число от 3 до 16 секунд |
| Неподдерживаемое разрешение, например `480p` или `8K` | Используйте `540p`, `720p`, `1080p`, `2K` или `4K` |

## Другие модели Vidu

Для генерации по тексту или по начальному и конечному кадрам используйте [Vidu Q3 Pro / Turbo](/ru/api-reference/videos/vidu-q3-pro/generation). Эта модель уже поддерживает несколько изображений-референсов; [Vidu Q3 Mix / Standard](/ru/api-reference/videos/vidu-q3/generation) также предлагает генерацию по референсам. Для клипов 1–2 секунды выберите `viduq3-pro`; минимум этой модели — 3 секунды.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.