Создаёт короткие видео по текстовому описанию, референсным изображениям и исходному ролику, а ещё умеет менять уже снятое видео по вашему сценарию. Цена зависит от разрешения, длительности и наличия исходного видео. Для 720p/1080p: 4 сек - 60 ₽, 6 сек - 80 ₽, 8 сек - 100 ₽, 10 сек - 120 ₽, с исходным видео - 150 ₽ за генерацию.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Gemini Omni от Google делает короткие видео на 4-10 секунд со звуком. Ролик можно получить из одного текстового описания, собрать по картинкам-референсам или сделать на основе своего видео: поменять место действия, одежду, стиль, сохранив движение.
Кроме видео, у нейросети есть два подготовительных режима - они бесплатные:
Где это пригодится:
Каждый вызов создаёт асинхронную операцию. Сначала вы получаете id, потом проверяете статус, пока не появится результат. Видео в 720p и 1080p обычно готово за 1,5-3 минуты, в 4K - около 6 минут. Персонаж и голос создаются за несколько секунд.
POST /api/v1/operationsAuthorization: Bearer brth_...id операции и стартовый статус queued.Режим выбирается параметром generation_type:
video - видео. Используется, если generation_type не передан. Внутри режима есть варианты: только текст, текст с картинками-референсами, текст с исходным видео, с готовыми персонажами и голосом.character - создать персонажа по фото и описанию. Результат - ID персонажа.audio - создать голос. Результат - ID голоса.Обычный порядок для серии роликов с одним героем: создать голос (audio), затем персонажа с этим голосом (character), затем видео с ID персонажа (video).
{
"tool": "gemini-omni",
"input": {
"generation_type": "video",
"prompt": "...",
"duration": "4",
"aspect_ratio": "16:9",
"resolution": "1080p"
}
}
tool - slug нейросети, всегда "gemini-omni".input - параметры запуска. Все поля передаются прямо внутри этого объекта, без дополнительной вложенности.video, character и audio нужны разные поля, лишние можно не передавать.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
generation_type | enum | Нет | Режим: video - видео, character - создать персонажа, audio - создать голос. Если не передан, используется video. |
video| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
prompt | string | Да, в режиме video | Описание ролика: что происходит, кто в кадре, движение камеры, стиль, звук и реплики. От 3 до 4000 символов. |
image_urls | string[] (url) | Нет | Картинки-референсы: до 7 ссылок на .jpg, .jpeg, .png или .webp, каждый файл до 20 МБ. В prompt удобно ссылаться на них по порядку: «с первой картинки», «со второй картинки». |
video_source_urls | string[] (url) | Нет | Исходное видео: массив из одной ссылки на .mp4, .mov или .webm, до 100 МБ и до 30 секунд. С видео меняется цена - см. «Ценообразование». |
video_trim_start | number | Нет | Только вместе с video_source_urls. С какой секунды исходного видео брать фрагмент, от 0 до 30, можно с десятыми. По умолчанию 0. |
video_trim_end | number | Нет | Только вместе с video_source_urls. На какой секунде закончить фрагмент, от 0 до 30. Должно быть больше video_trim_start, а сам фрагмент - не длиннее 10 секунд. По умолчанию 10. |
character_ids | object[] | Нет | Готовые персонажи из режима character, до 3 штук. Каждый элемент - объект { "id": "..." }, ID до 200 символов. |
audio_id | string | Нет | ID голоса из режима audio, до 200 символов. Можно не передавать. |
duration | enum | Нет | Длина ролика в секундах, строкой: "4", "6", "8" или "10". Число без кавычек API не примет. По умолчанию "4". |
aspect_ratio | enum | Нет | Формат кадра: - горизонтальный, - вертикальный. По умолчанию . |
В одном запросе действует общий лимит на входные материалы: число картинок + 2 × число видео + число персонажей - не больше 7. Например, 3 картинки, 1 видео и 2 персонажа - это 3 + 2 + 2 = 7, предел.
character| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
character_image_url | string (url) | Да | Фото персонажа: одна ссылка строкой (не массивом) на .jpg, .jpeg, .png или .webp, до 20 МБ. |
character_descriptions | string | Да | Описание персонажа: внешность, одежда, характер, манера держаться. От 3 до 2000 символов. |
character_name | string | Нет | Имя персонажа, до 100 символов. Возвращается в результате вместе с ID. |
character_audio_id | string | Нет | ID голоса из режима audio, до 200 символов. Задаёт персонажу тембр и манеру речи. |
audio| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
audio_voice_id | enum | Нет | Базовый тембр. По умолчанию achernar. Женские: achernar (мягкий, высокий), aoede (бодрый), autonoe (яркий), callirrhoe (лёгкий), despina (мягкий), erinome (чистый), gacrux (зрелый), kore (уверенный), laomedeia (радостный, выше среднего), leda (молодой, выше среднего), sulafat (тёплый), vindemiatrix (нежный), zephyr (яркий, выше среднего). Мужские: achird (дружелюбный), algenib (хриплый, низкий), algieba (лёгкий, ниже среднего), alnilam (ровный, ниже среднего), charon (интеллигентный, низкий), enceladus (придыхающий, низкий), fenrir (живой, молодой), iapetus (чистый, ниже среднего), orus (ровный, ниже среднего), puck (радостный), rasalgethi (интеллигентный), sadachbia (выразительный, низкий), sadaltager (рассудительный), schedar (мягкий, ниже среднего), umbriel (мягкий, низкий), zubenelgenubi (непринуждённый, ниже среднего). Нейтральный: pulcherrima (напористый, выше среднего). Если высота не указана - средняя. |
audio_name | string | Да | Название голоса, от 1 до 210 символов. Возвращается в результате вместе с ID. |
audio_voice_description | string | Нет | Описание голоса: возраст, тембр, темп, эмоции, акцент. До 20 000 символов. |
audio_example_dialogue | string | Нет | Пример реплики этим голосом, до 120 символов. |
Все ссылки на файлы - внешние http/https URL. Картинки принимаются в jpg, jpeg, png и webp, видео - в mp4, mov и webm. Ссылки на файлы других форматов API отклонит с ошибкой validation_error.
Только описание, без файлов. Ролик 6 секунд в 1080p - 80 ₽. Звук, музыку и реплики стоит описать прямо в prompt.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "gemini-omni",
"input": {
"generation_type": "video",
"prompt": "Утренняя пекарня: пекарь достаёт из печи противень с круассанами, от них идёт пар, солнечный свет падает через окно. Камера медленно отъезжает. Звук: потрескивание корочки и тихая музыка",
"duration": "6",
"aspect_ratio": "16:9",
"resolution": "1080p"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'gemini-omni',
input: {
generation_type: 'video',
prompt: 'Утренняя пекарня: пекарь достаёт из печи противень с круассанами, от них идёт пар, солнечный свет падает через окно. Камера медленно отъезжает. Звук: потрескивание корочки и тихая музыка',
duration: '6',
aspect_ratio: '16:9',
resolution: '1080p',
},
}),
})
const data = await response.json()
console.log(data.id, data.status, data.cost)
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'gemini-omni',
'input': {
'generation_type': 'video',
'prompt': 'Утренняя пекарня: пекарь достаёт из печи противень с круассанами, от них идёт пар, солнечный свет падает через окно. Камера медленно отъезжает. Звук: потрескивание корочки и тихая музыка',
'duration': '6',
'aspect_ratio': '16:9',
'resolution': '1080p',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Две картинки: героиня и интерьер. Вертикальный ролик 4 секунды в 720p - 60 ₽.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "gemini-omni",
"input": {
"generation_type": "video",
"prompt": "Девушка с первой картинки стоит в интерьере со второй картинки, улыбается и машет рукой в камеру. Мягкий дневной свет, камера медленно приближается",
"image_urls": [
"https://cdn.example.com/reference-image-1.jpg",
"https://cdn.example.com/reference-image-2.png"
],
"duration": "4",
"aspect_ratio": "9:16",
"resolution": "720p"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'gemini-omni',
input: {
generation_type: 'video',
prompt: 'Девушка с первой картинки стоит в интерьере со второй картинки, улыбается и машет рукой в камеру. Мягкий дневной свет, камера медленно приближается',
image_urls: [
'https://cdn.example.com/reference-image-1.jpg',
'https://cdn.example.com/reference-image-2.png',
],
duration: '4',
aspect_ratio: '9:16',
resolution: '720p',
},
}),
})
const data = await response.json()
console.log(data.id, data.status, data.cost)
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'gemini-omni',
'input': {
'generation_type': 'video',
'prompt': 'Девушка с первой картинки стоит в интерьере со второй картинки, улыбается и машет рукой в камеру. Мягкий дневной свет, камера медленно приближается',
'image_urls': [
'https://cdn.example.com/reference-image-1.jpg',
'https://cdn.example.com/reference-image-2.png',
],
'duration': '4',
'aspect_ratio': '9:16',
'resolution': '720p',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Из исходного видео берётся фрагмент со 2-й по 10-ю секунду, и модель переделывает его по описанию. С исходным видео цена фиксированная: 150 ₽ в 720p и 1080p при любой duration.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "gemini-omni",
"input": {
"generation_type": "video",
"prompt": "Перенеси действие из видео в заснеженный зимний лес, одежду героя замени на тёплую куртку, движения оставь прежними",
"video_source_urls": [
"https://cdn.example.com/source-video-1.mp4"
],
"video_trim_start": 2,
"video_trim_end": 10,
"duration": "8",
"aspect_ratio": "16:9",
"resolution": "1080p"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'gemini-omni',
input: {
generation_type: 'video',
prompt: 'Перенеси действие из видео в заснеженный зимний лес, одежду героя замени на тёплую куртку, движения оставь прежними',
video_source_urls: [
'https://cdn.example.com/source-video-1.mp4',
],
video_trim_start: 2,
video_trim_end: 10,
duration: '8',
aspect_ratio: '16:9',
resolution: '1080p',
},
}),
})
const data = await response.json()
console.log(data.id, data.status, data.cost)
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'gemini-omni',
'input': {
'generation_type': 'video',
'prompt': 'Перенеси действие из видео в заснеженный зимний лес, одежду героя замени на тёплую куртку, движения оставь прежними',
'video_source_urls': [
'https://cdn.example.com/source-video-1.mp4',
],
'video_trim_start': 2,
'video_trim_end': 10,
'duration': '8',
'aspect_ratio': '16:9',
'resolution': '1080p',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
В character_ids передаются ID из режима character, в audio_id - ID из режима audio. В prompt опишите, что персонаж делает и говорит. Ролик 8 секунд в 1080p - 100 ₽.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "gemini-omni",
"input": {
"generation_type": "video",
"prompt": "Лиза сидит в уютном кафе с чашкой какао и рассказывает в камеру: «Привет! Сегодня покажу самое вкусное какао в городе». Тёплый свет, лёгкий шум кафе на фоне",
"character_ids": [
{
"id": "c7e41b2a9d3f4a6e8b05f1d27a9c3e10"
}
],
"audio_id": "5b8d2f0e6a1c4d93b7e2a4f0c9d18e36",
"duration": "8",
"aspect_ratio": "9:16",
"resolution": "1080p"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'gemini-omni',
input: {
generation_type: 'video',
prompt: 'Лиза сидит в уютном кафе с чашкой какао и рассказывает в камеру: «Привет! Сегодня покажу самое вкусное какао в городе». Тёплый свет, лёгкий шум кафе на фоне',
character_ids: [
{
id: 'c7e41b2a9d3f4a6e8b05f1d27a9c3e10',
},
],
audio_id: '5b8d2f0e6a1c4d93b7e2a4f0c9d18e36',
duration: '8',
aspect_ratio: '9:16',
resolution: '1080p',
},
}),
})
const data = await response.json()
console.log(data.id, data.status, data.cost)
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'gemini-omni',
'input': {
'generation_type': 'video',
'prompt': 'Лиза сидит в уютном кафе с чашкой какао и рассказывает в камеру: «Привет! Сегодня покажу самое вкусное какао в городе». Тёплый свет, лёгкий шум кафе на фоне',
'character_ids': [
{
'id': 'c7e41b2a9d3f4a6e8b05f1d27a9c3e10',
},
],
'audio_id': '5b8d2f0e6a1c4d93b7e2a4f0c9d18e36',
'duration': '8',
'aspect_ratio': '9:16',
'resolution': '1080p',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Бесплатно. Результат - текст с именем и ID персонажа. character_audio_id можно не передавать.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "gemini-omni",
"input": {
"generation_type": "character",
"character_image_url": "https://cdn.example.com/character-1.jpg",
"character_descriptions": "Девушка 28 лет, рыжие волосы до плеч, веснушки, горчичный вязаный свитер, светлые джинсы, белые кеды. Весёлая, открытая, часто улыбается",
"character_name": "Лиза",
"character_audio_id": "5b8d2f0e6a1c4d93b7e2a4f0c9d18e36"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'gemini-omni',
input: {
generation_type: 'character',
character_image_url: 'https://cdn.example.com/character-1.jpg',
character_descriptions: 'Девушка 28 лет, рыжие волосы до плеч, веснушки, горчичный вязаный свитер, светлые джинсы, белые кеды. Весёлая, открытая, часто улыбается',
character_name: 'Лиза',
character_audio_id: '5b8d2f0e6a1c4d93b7e2a4f0c9d18e36',
},
}),
})
const data = await response.json()
console.log(data.id, data.status, data.cost)
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'gemini-omni',
'input': {
'generation_type': 'character',
'character_image_url': 'https://cdn.example.com/character-1.jpg',
'character_descriptions': 'Девушка 28 лет, рыжие волосы до плеч, веснушки, горчичный вязаный свитер, светлые джинсы, белые кеды. Весёлая, открытая, часто улыбается',
'character_name': 'Лиза',
'character_audio_id': '5b8d2f0e6a1c4d93b7e2a4f0c9d18e36',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Бесплатно. Результат - текст с названием и ID голоса.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "gemini-omni",
"input": {
"generation_type": "audio",
"audio_voice_id": "aoede",
"audio_name": "Голос Лизы",
"audio_voice_description": "Молодая женщина, бодрый тёплый голос, говорит быстро и с улыбкой",
"audio_example_dialogue": "Привет! Сегодня покажу, где в нашем городе самый вкусный какао."
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'gemini-omni',
input: {
generation_type: 'audio',
audio_voice_id: 'aoede',
audio_name: 'Голос Лизы',
audio_voice_description: 'Молодая женщина, бодрый тёплый голос, говорит быстро и с улыбкой',
audio_example_dialogue: 'Привет! Сегодня покажу, где в нашем городе самый вкусный какао.',
},
}),
})
const data = await response.json()
console.log(data.id, data.status, data.cost)
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'gemini-omni',
'input': {
'generation_type': 'audio',
'audio_voice_id': 'aoede',
'audio_name': 'Голос Лизы',
'audio_voice_description': 'Молодая женщина, бодрый тёплый голос, говорит быстро и с улыбкой',
'audio_example_dialogue': 'Привет! Сегодня покажу, где в нашем городе самый вкусный какао.',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "gemini-omni",
"cost": 60,
"balance_after": 440,
"created_at": "2026-09-30T12:46:25Z"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "gemini-omni",
"cost": 60,
"created_at": "2026-09-30T12:46:25Z",
"completed_at": "2026-09-30T12:49:22Z",
"result": {
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/gemini-omni/video-1.mp4"
]
},
"error_message": null
}
Обратите внимание на поле tool: при проверке статуса операций character и audio в нём приходит gemini-omni-character и gemini-omni-audio, а не gemini-omni. Ответ на создание операции во всех режимах содержит "tool": "gemini-omni".
{
"id": "op_uuid-123",
"status": "completed",
"tool": "gemini-omni-character",
"cost": 0,
"created_at": "2026-09-30T12:46:25Z",
"completed_at": "2026-09-30T12:46:31Z",
"result": {
"type": "text",
"text": "Google Omni Character\nИмя: Лиза\nId: c7e41b2a9d3f4a6e8b05f1d27a9c3e10"
},
"error_message": null
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "gemini-omni-audio",
"cost": 0,
"created_at": "2026-09-30T12:46:25Z",
"completed_at": "2026-09-30T12:46:30Z",
"result": {
"type": "text",
"text": "Google Omni Audio\nИмя: Голос Лизы\nId: 5b8d2f0e6a1c4d93b7e2a4f0c9d18e36"
},
"error_message": null
}
Если модель не смогла сделать ролик, операция завершается со статусом failed, в result приходит null, а причина - в error_message. Списанная сумма возвращается на баланс.
{
"id": "op_uuid-123",
"status": "failed",
"tool": "gemini-omni",
"cost": 60,
"created_at": "2026-09-30T12:46:25Z",
"completed_at": "2026-09-30T12:47:02Z",
"result": null,
"error_message": "Ваш запрос не прошел модерацию."
}
Сохраните id из ответа на создание и запрашивайте операцию по нему:
GET /api/v1/operations/{id}
curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
async function waitForResult(id: string) {
while (true) {
const response = await fetch(`https://bratuha.ru/api/v1/operations/${id}`, {
headers: { Authorization: 'Bearer brth_ваш_ключ' },
})
const operation = await response.json()
if (operation.status === 'completed') return operation.result
if (operation.status === 'failed') throw new Error(operation.error_message)
await new Promise((resolve) => setTimeout(resolve, 10_000))
}
}
Статус меняется так: queued - в очереди, processing - идёт генерация, затем completed или failed. Для видео достаточно опрашивать раз в 5-10 секунд. Одну операцию можно запрашивать не чаще раза в секунду, иначе придёт 429.
Что лежит в result, зависит от режима.
Видео (video) - одна ссылка на MP4 в массиве urls:
{
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/gemini-omni/video-1.mp4"
]
}
type - всегда "video".urls - массив из одной ссылки на готовый ролик.Файл - MP4 (H.264) со звуковой дорожкой AAC, 24 кадра в секунду. Размер кадра задают resolution и aspect_ratio: например, 720p и 9:16 дают 720×1280. Длина - выбранная duration.
Персонаж (character) и голос (audio) - текст, в котором есть имя и ID:
{
"type": "text",
"text": "Google Omni Character\nИмя: Лиза\nId: c7e41b2a9d3f4a6e8b05f1d27a9c3e10"
}
ID стоит в строке Id:. Достать его можно так:
const match = operation.result.text.match(/Id:\s*(\S+)/)
const characterId = match?.[1]
import re
match = re.search(r'Id:\s*(\S+)', operation['result']['text'])
character_id = match.group(1) if match else None
ID персонажа передаётся в видео как { "id": "..." } внутри character_ids, ID голоса - в audio_id видео или в character_audio_id персонажа.
Цена фиксированная за операцию и зависит от режима, длины, разрешения и того, передано ли исходное видео.
Видео без исходного ролика (только текст, картинки, персонажи, голос):
duration | 720p | 1080p | 4k |
|---|---|---|---|
"4" | 60 ₽ | 60 ₽ | 150 ₽ |
"6" | 80 ₽ | 80 ₽ | 180 ₽ |
"8" | 100 ₽ | 100 ₽ | 220 ₽ |
"10" | 120 ₽ | 120 ₽ | 330 ₽ |
Видео с исходным роликом (video_source_urls) стоит одинаково при любой duration и любом фрагменте:
| Разрешение | Цена |
|---|---|
720p или 1080p | 150 ₽ |
4k | 250 ₽ |
Создание персонажа (character) и голоса (audio) - 0 ₽.
Картинки-референсы, персонажи, голос и формат кадра на цену не влияют. Точная сумма приходит в поле cost ответа на создание операции и сразу списывается с баланса.
POST /api/v1/operations не идемпотентен: каждый повтор запроса создаёт новую платную операцию. Если ответ на создание потерялся, не отправляйте запрос заново вслепую - сначала проверьте историю операций в личном кабинете.queued, результат нужно забирать по id. Это касается и бесплатных режимов character и audio. При проверке статуса у них в поле tool приходит gemini-omni-character или gemini-omni-audio - не сравнивайте это поле строго с gemini-omni.http/https ссылками, которые открываются без авторизации. Ссылки на localhost и внутренние адреса не принимаются. Расширение в URL должно совпадать с допустимыми.duration передаётся строкой: "4", а не 4.image_urls и video_source_urls - массивы, даже если файл один. character_image_url в режиме character - наоборот, одна ссылка строкой.failed. Считайте материалы до отправки.video_trim_end должен быть больше video_trim_start, а разница - не больше 10 секунд, иначе модель вернёт ошибку.failed с сообщением о модерации. Деньги за такие операции возвращаются.failed с сообщением «сервис временно недоступен». Такой запрос можно повторить через несколько минут, деньги за неудачную попытку возвращаются.prompt нет ни реплик, ни звуков, звуковая дорожка в файле будет, но почти беззвучная. Опишите, что должно звучать: голос, музыку, шумы.id той операции, которая их создала.16:99:1616:9resolution | enum | Нет | Разрешение: 720p, 1080p или 4k. По умолчанию 1080p. 720p и 1080p стоят одинаково. |