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"
}'
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())
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());
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01K..."
}
]
}
Vidu Q4 Preview
Vidu Q4 Preview Генерация видео
Видео по одному начальному кадру или по референсам: до 15 изображений и 3 аудиоклипов. 3–16 секунд, до 4K, по умолчанию со звуком.
POST
/
v1
/
videos
/
generations
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"
}'
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())
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());
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01K..."
}
]
}
Модель поддерживает генерацию по изображению и по референсам, но не по одному тексту и не по паре начального и конечного кадров. После отправки получите ID задачи из
data[0].task_id и проверяйте состояние и результат через запрос задачи.Режимы генерации
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.
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"
}'
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())
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());
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01K..."
}
]
}
Заголовки запроса
string
обязательно
Авторизация Bearer в формате
Bearer <token>, где <token> — ваш APIMart API Key.Параметры запроса
string
обязательно
Точное значение:
viduq4-preview, строчными буквами.string
Промпт для генерации видео, до 20 000 символов.
- По изображению: необязателен. Если не задан, модель формирует содержание по начальному кадру.
- По референсам: обязателен. При отсутствии возвращается HTTP 400.
string[]
Массив изображений. Поддерживаются общедоступные URL и Base64 Data URL, например
data:image/png;base64,....- По изображению: ровно одно изображение как начальный кадр.
- По референсам: суммарно 1–15 изображений вместе с
image_with_roles.
image_with_roles; количество суммируется. Не сочетайте с first_frame_image или явной ролью first_frame. Для одного изображения без роли выбор режима также зависит от наличия аудиореференса.object[]
Массив изображений с ролями. Один элемент для режима по изображению; суммарно 1–15 изображений с
Можно сочетать с
image_urls для режима по референсам.Показать Показать поля изображений
Показать Показать поля изображений
string
обязательно
Общедоступный URL изображения или Base64 Data URL.
string
Роль изображения, без учёта регистра:
first_frame: начальный кадр для режима по изображению.reference_image: изображение-референс; также допускаетсяreference.- Не задана или пустая: без аудиореференса режим определяется общим количеством — одно изображение для режима по изображению, два и более для режима по референсам. При наличии аудиореференса используется режим по референсам.
last_frame, синхронно возвращают HTTP 400.image_urls для передачи референсов, но роли начального кадра нельзя смешивать с референсными материалами.string
Только для режима по изображению. Общедоступный URL или Base64 Data URL начального кадра.При использовании этого поля не передавайте другие изображения или аудиореференсы. Для режима по референсам используйте
image_urls или image_with_roles.string[]
Массив URL аудиореференсов, только для режима по референсам. Вместе с
audio_url не более 3 клипов.Требуется MP3, каждый клип 3–12 секунд и не более 50MB. Даже при наличии аудиореференса необходимы хотя бы одно изображение и prompt.Неверный формат или длительность аудио приводят к сбою во время выполнения и полному возврату средств, а не к синхронному HTTP 400 при отправке.string
URL одного аудиореференса. Требования те же, что у
audio_urls; суммарно не более 3 клипов в двух полях.string
по умолчанию:"16:9"
Только для режима по референсам. Допустимы
1:1, 9:16, 16:9, 3:4, 4:3. По умолчанию 16:9.В режиме по изображению соотношение сторон определяется начальным кадром, а этот параметр игнорируется.string
Совместимый псевдоним
aspect_ratio с теми же значениями. Рекомендуется использовать только одно из этих полей. В режиме по изображению не действует.integer
по умолчанию:"5"
Длительность видео в секундах. Поддерживаются 3–16 секунд, но не 1–2 секунды.
string
по умолчанию:"720p"
Разрешение:
540p, 720p, 1080p, 2K или 4K, без учёта регистра.boolean
по умолчанию:"true"
Добавлять ли диалоги и звуковые эффекты в видео.
true: видео со звуковой дорожкой (по умолчанию).false: видео без звука.
integer
Случайное зерно. Не передавайте или укажите
0 для случайного значения.Требования к материалам
- По изображению: требуется ровно один начальный кадр; аудиореференсы не принимаются.
- По референсам: обязательны 1–15 изображений; дополнительно можно передать до 3 аудиореференсов.
- PNG, JPEG, JPG и WEBP, не более 50MB на изображение.
- При Base64 весь запрос должен быть меньше 20MB. Рекомендуются общедоступные URL.
- URL изображений должны быть общедоступны. Замените адреса из примеров на реально доступные.
Оба режима требуют изображения и не поддерживают
last_frame_image. Смешивание начального кадра с референсами, превышение количества изображений/аудио и подобные ошибки возвращают HTTP 400 при отправке, без создания задачи и списания средств. Неверный формат или длительность аудиореференса приводят к сбою при выполнении и возврату средств.Примеры запросов
Только начальный кадр, без промпта
{
"model": "viduq4-preview",
"image_urls": ["https://example.com/first-frame.png"]
}
Начальный кадр с явной ролью и вывод в 4K
{
"model": "viduq4-preview",
"prompt": "Камера медленно приближается, человек естественно улыбается",
"image_with_roles": [
{
"url": "https://example.com/first-frame.png",
"role": "first_frame"
}
],
"duration": 8,
"resolution": "4K",
"audio": true
}
Видео без звука через поле начального кадра
{
"model": "viduq4-preview",
"first_frame_image": "https://example.com/first-frame.png",
"duration": 5,
"resolution": "1080p",
"audio": false
}
Видео по нескольким изображениям и аудиореференсу
{
"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"
}
Режим по референсам с одним изображением
{
"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 изображений и аудио на доступные адреса материалов.
Ответ на отправку
integer
Код ответа;
200 означает успех.array
Получение результата
Опрашивайте каждые 5–10 секунд и прекращайте приcompleted или failed. Используйте единый endpoint:
curl --request GET \
--url https://api.apimart.ai/v1/tasks/task_01K... \
--header 'Authorization: Bearer <token>'
{
"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, прекратить опрос; полный возврат средств |
status, а не по фиксированным значениям прогресса.
Оплата
Стоимость зависит от длительности и разрешения: стоимость = длительность (секунды) × цена секунды для выбранного разрешения. Актуальные цены указаны в тарифах моделей. Оба режима стоят одинаково, со звуком или без. Изображения и аудиореференсы не оплачиваются дополнительно. При сбое задачи средства автоматически возвращаются полностью.Типичные ошибки параметров
Следующие случаи синхронно возвращают 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. Эта модель уже поддерживает несколько изображений-референсов; Vidu Q3 Mix / Standard также предлагает генерацию по референсам. Для клипов 1–2 секунды выберитеviduq3-pro; минимум этой модели — 3 секунды.