Pro API: генерация видео со звуком
Клип из промпта или анимация изображения, которое ты предоставляешь. Файл в формате MP4, со звуком, если ты об этом попросишь.
Создать видео
POST /videos
{ "prompt": "a woman in a white linen dress walks along a beach at sunset, wind in her hair, she turns and smiles at the camera",
"width": 1080, "height": 1920, "audio": true }| Поле | Тип | По умолчанию | Что делает |
|---|---|---|---|
prompt | string | обязательное | Действие, настроение, свет. Описывай движение. |
width, height | int | 720 x 1280 | По умолчанию вертикальный. Смотри сетку цен ниже. |
quality | string | max: режим Ультра (самый детальный рендер), см. Режим Ультра. | |
consistency | string | standard | enhanced: усиленная согласованность, более стабильное движение, лица и фон на протяжении всего времени, до 721 кадра за кадр (30 с при 24 fps, 24 с при 30), расширения включены. Только в режиме Качество. См. Усиленная согласованность. |
mode | string | ltx25 | ltx25: движок 2.5 (звук, автоматическая длительность, 1080p, конечный кадр). turbo: отключён 11 октября 2026 года; запрос turbo рендерится в Качество 480p (та же ориентация, та же длина, не более 241 кадра, фиксированная длина), по цене Качество 480p. |
duration_auto | bool | true | Движок определяет длину из промпта, до 20 с при 24 fps (16 с при 30, 8 с при 60: ограничение считается в кадрах, см. fps), а length тогда игнорируется. Установи false для фиксированной длины, заданной через length. При consistency enhanced выше 30 fps длина всегда фиксированная (иначе fps_requires_fixed_duration). |
length | int | 121 | Длина в кадрах при частоте fps, всегда вида 8n+1; длительность равна (length - 1) / fps. Максимум 481 (721 при consistency enhanced). При 24 fps: 73 (3 с), 121 (5 с), 241 (10 с), 361 (15 с), 481 (20 с; 721, то есть 30 с, в enhanced). При 30: 241 (8 с), 481 (16 с; 721, 24 с). При 60: 241 (4 с), 481 (8 с; 721, 12 с). Используется для фиксированной длины (duration_auto установлен в false); игнорируется при автоматической длительности. |
fps | int | 30 | Частота кадров в кадрах в секунду: 24, 30 или 60. По умолчанию 30, рекомендуемая настройка (чёткое движение); 60: самая плавная; 24: кинематографическая. 50, только с consistency enhanced, даёт лёгкое замедление (примерно 0,83x: движок задаёт движение как при 60 и воспроизводит при 50). length считается в кадрах при этой частоте. Цена не меняется (фиксированная за клип); максимальная длина меняется, так как считается в кадрах. Расширение сохраняет частоту кадров предыдущего клипа, а последовательность, частоту первого кадра. Частота, которую режим не поддерживает: invalid_fps, где перечислены допустимые. |
audio | bool | false | Звук, генерируемый вместе с изображением (атмосфера, голос). Удваивает цену клипа (см. Форматы и цена). |
image | string | Начальный кадр в base64: видео анимирует это изображение. | |
end_image | string | Конечный кадр в base64, вместе с image: клип переходит от одного к другому (только движок 2.5). Переход выдаётся в запрошенном размере от 480p до 1080p и оплачивается как клип этого формата. | |
keyframes | array | Ключевые кадры (режим Качество): от 1 до 4 объектов { "image": base64, "at": seconds, "strength": 0.1 to 1 (1 by default) }. Клип показывает каждое изображение в нужный момент, например персонажа в середине кадра, который начинается и заканчивается на пустой локации. Длина становится фиксированной (length, duration_auto принудительно false); 0 < at < length, не менее 0,5 с между двумя ключевыми кадрами; точность около трети секунды. Работает с image и end_image. Не в Ультра и не в Multi-Ref; в расширении только с consistency enhanced (см. Усиленная согласованность). Та же цена, что и у клипа того же формата. | |
lora, lora_strength | string, number | Обученный персонаж на аккаунте (name из GET /loras) и его сила (от 0 до 1). | |
lora2, lora2_strength | string, number | Второй персонаж. | |
multiref | object | Добавь от 1 до 4 персонажей (12 в Ультра) из GET /characters, а также сохранённые объекты, животных и локацию из GET /subjects, вызываемых через @Имя в промпте, см. Multi-Ref Видео. | |
seed | int | случайный | Сид рендера, от 0 до 4294967295. Одинаковый seed, тот же промпт, то же изображение и те же настройки (формат, длина, звук, режим) дают один и тот же клип с незначительными отличиями при смене видеокарты. При автоматической длительности иначе выбранная длина меняет клип: для точного воспроизведения установи duration_auto в false и укажи length. |
steps | int | движок | Оставь пустым. |
Частота кадров по умолчанию: 30 fps. Раньше клипы рендерились при 24 fps. Без fps клип той же
length будет короче, чем прежде (241 кадр: 8 с вместо 10 с). Отправь "fps": 24, чтобы
сохранить прежнее поведение.
Ответ:
{ "jobId": "...", "seed": 908172, "cost": 30 }Стоимость рассчитывается и объявляется при отправке, до любого списания. seed тоже возвращается,
независимо от того, задал ли ты его или он был выбран случайно.
Форматы и цена
Видео тарифицируется по формату как фиксированная ставка независимо от его длины. База: 5 кредитов.
Фиксированная ставка умножается на 2 при 720p и на 3 при 1080p, а звук удваивает цену.
Коэффициенты применяются к базовой ставке, а не друг к другу: 1080p со звуком стоит 5 x 3 x 2 = 30
кредитов. До 481 кадра, то есть 20 с при 24 fps, длина ничего не меняет (5 с или 20 с, та же ставка).
Свыше 481 кадра (до 721, только с consistency enhanced, фиксированная длина) цена формата
удваивается. Частота кадров (fps) не меняет цену, но уровни считаются в кадрах:
при 30 fps обычная цена действует до 16 с; при 60, до 8 с (12 с по двойной цене в enhanced).
Одно исключение: в Качестве 480p без звука стоит 2 кредитов, независимо от длины (с 11 октября 2026 года). Multi-Ref и усиленная согласованность сохраняют фиксированную ставку формата, 5 кредитов.
| Формат | Короткая сторона | Примеры размеров | Без звука | Со звуком |
|---|---|---|---|---|
| 480p | 480 | 480 x 832, 832 x 480 | 2 (5 в Multi-Ref и усиленной согласованности) | 10 |
| 720p | 720 | 720 x 1280, 1280 x 720 | 10 | 20 |
| 1080p | 1080 | 1080 x 1920, 1920 x 1080 | 15 | 30 |
Размер, который ты получаешь. Движок работает в кратных 32 и в два этапа, поэтому файл выходит 768 x 1280 (или 1280 x 768) для 720p и 1088 x 1920 (или 1920 x 1088) для 1080p. 480p остаётся 480 x 832 (или 832 x 480), кроме режима усиленной согласованности. Это важно, если ты склеиваешь или накладываешь наши рендеры.
Режим turbo был отключён 11 октября 2026 года: запрос turbo рендерится в Качество 480p
и оплачивается соответственно (2 кредитов без звука, 10 со звуком).
Узнай цену до отправки
POST /videos/quote принимает то же тело, что и POST /videos, и выполняет те же расчёты, но
ничего не создаётся: нет рендера, не резервируются кредиты, не расходуется квота. Вызывай его
перед подтверждением, особенно при работе агента в рамках бюджета.
{ "cost": 30, "mode": "ltx25", "format": "1080p", "audio": true, "fps": 30, "duration_auto": true,
"seconds_max": 16, "detail": "flat 5 x 3 (1080p) x 2 (sound) = 30" }detail поясняет расчёт; fps: использованная частота кадров, а seconds_max: длина в секундах
при этой частоте. С "consistency": "enhanced" запрос принимает фиксированную длину до 721 кадра и
применяет ставку свыше 481 кадра (x 2 (over 20 s) в detail при 24 fps, x 2 (over 481 frames) при
другой частоте). Тот же маршрут существует для изображений, POST /images/quote, который
всегда отвечает { "cost": 1, ... }: изображение всегда стоит 1 кредит.
Для клипа Ультра с посекундной оплатой смета указывает оплачиваемую длительность в seconds, а detail расписывает цену за секунду.
Опрос, загрузка, отмена
Те же маршруты, что и для изображений, в разделе /videos.
GET /videos/{jobId}:pending/completed/failed, те же поля. Расширение с усиленной согласованностью может завершиться какfailedс"error": "extension_not_applied"(движок не подхватил конец предыдущего клипа): ничего не списывается, отправь заново.GET /videos/{jobId}/file: MP4 (Content-Type: video/mp4).POST /videos/{jobId}/cancel: отменяет, ничего не списывается.
В Ультра с посекундной оплатой рендер, который уже рассчитывается, больше не останавливается: отмена отвечает 409 render_in_progress, и клип доставляется и оплачивается. Клип, который движок отклоняет на выходе, завершается как failed, с фразой в detail и кодом движка в reason: ничего не списывается.
Видео занимает от 1 до 5 минут, дольше при холодном старте движка. Опрашивай каждые 3 секунды и
скачивай сразу после получения статуса completed: файл не архивируется.
Несколько кадров в одном клипе
Один промпт может содержать несколько кадров с жёсткими склейками, всего до 20 секунд при 24 fps (16 с при 30, по умолчанию). Описывай их
по порядку: Shot 1: <framing>, <action>. Cut to Shot 2: .... Повторяй в каждом кадре всё, что должно
оставаться неизменным (персонаж, одежда, место, свет), и заканчивай одной строкой общего настроения.
Не указывай тайм-коды: оставь duration_auto включённым, и движок сам определит длину (до 20 с при 24 fps, 16 с при 30) и
место склейки. Лучше всего работают два-четыре кадра на клип.
A cinematic sequence of three shots, same woman, same place, same lighting throughout.
Shot 1: Wide shot, night, light rain on a narrow Paris street with glowing café windows. A woman in a long beige trench coat walks toward the camera under a transparent umbrella, wet cobblestones reflecting warm yellow streetlights.
Cut to Shot 2: Close-up on her face under the umbrella, raindrops on the plastic, warm café light on her cheek, she smiles softly.
Cut to Shot 3: Medium shot from inside the café through the rainy window, she pushes the door open and steps in, warm light spilling onto the wet pavement.
Calm, melancholic, romantic mood.Несколько кадров в одном клипе или последовательность? Они делают разные вещи:
| Несколько кадров в одном клипе | Последовательность (расширения) | |
|---|---|---|
| Между кадрами | Жёсткие склейки | Без склейки: каждый кадр продолжает движение |
| Длина | Максимум 20 с при 24 fps (16 с при 30) | Длиннее |
| Рендеры | Один | По одному на кадр |
| Цена | Один клип | По одному клипу за кадр |
Расширить клип
Клип можно расширить: следующий кадр продолжает движение предыдущего без
остановки на стыке. Он направляется примерно по последней секунде предыдущего клипа, а не по одному
стоп-кадру. Добавь в POST /videos:
| Поле | Тип | По умолчанию | Что делает |
|---|---|---|---|
extend_job_id | string | Клип для расширения: рендер с твоей лицензии, взятый вскоре после завершения. | |
extend_frames | int | 25 | Сколько кадров с конца клипа направляет следующий кадр: 9, 17, 25, 33, 41 или 49 (25, примерно 1 с при 24 fps). |
extend_video | string | Вместо extend_job_id: конец клипа, который у тебя есть, в виде base64 MP4 ровно из extend_frames кадров, не более 8 МБ. |
Расширенный кадр сохраняет разрешение предыдущего клипа: width и height игнорируются
с extend_job_id, а с extend_video размер считывается из отправленного файла. Он содержит
только новые кадры, так что кадры, выложенные подряд, образуют одно непрерывное видео. Он сохраняет частоту кадров
предыдущего клипа: не указывай fps (он берётся оттуда) или указывай ту же; иная будет
отклонена (extend_fps_mismatch). length: это новая продолжительность кадра (121 = ещё 5 с при
24 fps), и она точная: автоматическая длительность не применяется
к расширению. Расширение стоит как клип.
Ограничения: нельзя одновременно использовать конечный кадр или ключевые кадры, кроме случаев с усиленной согласованностью.
Звук продолжается на стыке. При audio: true, когда конец предыдущего клипа содержит звуковую
дорожку, новый кадр подхватывает этот звук вместо создания нового. С extend_job_id отрезанный
конец сохраняет звук клипа; с extend_video отправь конец вместе со звуком. Без звуковой дорожки в
этом конце, в усиленной согласованности и в Ультра, звук начинается заново с
кадра: используй одну и ту же атмосферу в каждом промпте, чтобы стык был как можно менее заметен на слух.
Расширяй клип вскоре после его завершения. Позже он у нас уже недоступен
(clip_unavailable), и ты отправляешь его конец самостоятельно в extend_video.
Расширить план Ультра вперёд или назад
План, отрендеренный в Ультра посекундно, тоже расширяется в Ультра, вперёд или назад; любой другой клип расширяется, как описано выше. Отправь POST /videos с "quality": "max" и:
| Поле | Тип | По умолчанию | Что делает |
|---|---|---|---|
extend_job_id | string | План Ультра для расширения, отрендеренный твоей лицензией менее 24 часов назад. | |
extend_upload_id | string | Вместо него, для более старого плана: идентификатор, который возвращает POST /extensions (ниже), после загрузки его исходного файла. | |
extend_direction | string | forward | forward рендерит продолжение; backward рендерит моменты непосредственно перед планом, чтобы поставить их перед ним. |
- Рендер содержит только новую часть, длиной с клип Ультра (
length/fps, 5 с при автоматической длительности). Он берёт разрешение плана (widthиheightигнорируются) и стыкуется с его последним кадром (forward) или с первым (backward). - Без начального изображения, референсов (
multiref), движения и усиленной согласованности.backwardне входит в последовательность, которая ставит свои планы один за другим. - Цена: новая часть по цене Ультра за секунду, плюс за каждую секунду расширяемого плана 2 кредитов в 480p, 5 в 720p и 13 в 1080p (
ultra.extend_per_secondвGET /pricing). Эти секунды округляются вверх до целой секунды (с точностью до 0,1 с) и считаются при 24 кадрах в секунду: план с более высокой частотой кадров считается пропорционально (2 с при 60 fps считаются как 5 с).POST /videos/quoteс теми же полями возвращаетextend_secondsи точную цену. - План старше 24 часов: загрузи его исходный файл в том виде, в каком его выдал
GET /videos/{jobId}/file.POST /extensionsс{ "size": <байты> }возвращаетupload_id,upload_url,headersиexpires_in(900 с); отправь файл черезPUT upload_urlровно с этимиheaders, затем передайextend_upload_idв течение 2 часов. Одна загрузка служит для одного рендера: MP4 от 4 до 30 с, не более 60 МБ и 1080p. Перед рендером каждое видео, отправляемое в режим Ultra (движение или видео для продления), проверяется, и при отказе ничего не списывается (400 input_video_out_of_limits): от 24 до 60 кадров в секунду, соотношение ширины и высоты от 0,4 до 2,5 и на один рендер не более 30 с и 10 файлов для видео и опорных звуков вместе. Для реалистичного лица перекодированный или смонтированный файл отклоняется (400 engine_refused): проходит только оригинал. Видео, которое отрендерил не режим Ультра (например, рендер другого режима), не продлевается в Ультра, если на нём реалистичное лицо (400 extension_real_face, ничего не списывается): продли его в режиме Качество или переделай план в Ультра.
Усиленная согласованность
С "consistency": "enhanced" клип рендерится по отдельной дорожке, которая сохраняет движение, лица и
фон более стабильными на протяжении времени. Она поддерживает до 721 кадра за кадр, то есть 30 с при 24 fps и 24 с при 30 (length, фиксированная длина)
и предназначена в основном для длинных видео:
- Первый кадр: обычный клип (промпт, начальный кадр,
keyframes,end_image), до 721 кадра. - Расширение:
extend_job_id(илиextend_video) как в Расширить клип, с той жеconsistency.lengthпо-прежнему является новой продолжительностью (до 721, то есть ещё 30 с при 24 fps). Расширение с усиленной согласованностью также принимаетkeyframes, гдеatотсчитывается от первого нового кадра, и конечный кадрend_image, устанавливаемый на последний кадр кадра: например, начальный кадр первого кадра, чтобы длинное видео зациклилось.
Только режим Качество (mode ltx25, без quality: "max"), до 1080p, не в Multi-Ref
(400 consistency_mode). Цена: фиксированная ставка формата (480p без звука:
5 кредитов) до 481 нового кадра (20 с при 24 fps), удваивается сверх (см.
сетку цен выше). Частоты кадров: 24, 30, 50 или 60. Выше 30 длина фиксированная
(иначе fps_requires_fixed_duration); 50 даёт лёгкое замедление (см. fps). Рендер занимает больше времени, чем у стандартного
клипа, а начало может ожидать более мощной видеокарты (длинные кадры). Последовательность сохраняет одинаковую
consistency для всех своих кадров. Размер доставки: такой же, как в Качестве при 720p и 1080p; при 480p
короткая сторона выходит 448 (448 x 832, 832 x 448, 448 x 448), так как эта дорожка работает в кратных 64.
Некоторые промпты пока не поддерживаются. Для них один кадр не более 20 с (15 с с
end_image, при фиксированной длине) рендерится в стандартной согласованности по той же цене. Сверх этого
(length выше 481 при duration_auto: false или выше 361 с end_image), в расширении или в
последовательности запрос отклоняется с 400 consistency_explicit: укороти кадр или запроси
consistency: "standard".
Длинное видео (последовательности)
Клип длится максимум 481 кадр, то есть 20 с при 24 fps (721 с усиленной согласованностью, 30 с при 24 fps). Для более длинных последовательность записывает каждый кадр по мере завершения его рендера, затем объединяет их в один MP4 без перекодирования. Одна минута, например, это 3 кадра по 20 с или 2 кадра по 30 с при усиленной согласованности при 24 fps.
POST /sequencesоткрывает последовательность и отвечает{ "sequence_id": "seq_...", ... }.POST /videosс"sequence_id": "seq_..."для каждого кадра: первый как обычно, следующие сextend_job_id, установленным на предыдущий кадр. Каждый кадр записывается в последовательность в порядке отправки сразу после того, какGET /videos/{jobId}фиксирует его завершение.POST /sequences/{id}/exportпосле завершения последнего кадра. Отвечаетseconds,resolutionиfile_url.GET /sequences/{id}/file: собранное видео (MP4).
Дополнительно: GET /sequences/{id} возвращает состояние (записанные или ещё ожидаемые кадры),
POST /sequences/{id}/clips с { "job_id": "..." } записывает рендер вручную, а
DELETE /sequences/{id} удаляет последовательность немедленно.
Правила. Все кадры имеют одинаковое разрешение (расширения его сохраняют) и одинаковый выбор звука: все
со звуком или все без, одинаковую consistency и одинаковую частоту кадров (fps): первый кадр их устанавливает, а кадр,
который отличается, отклоняется (409 consistency_mismatch, 409 sequence_fps_mismatch; 422 encoding_mismatch
для кадра, записанного вручную). Кадр без fps берёт частоту последовательности. Максимум
30 кадров на последовательность и 5 последовательностей в работе на лицензию.
Что мы храним и как долго. Кадры последовательности в работе удаляются через 30 минут после добавления последнего, а собранное видео через 24 часа после экспорта. Затем всё исчезает.
Экспорт папки проекта
Папка проекта собирает в одном ZIP всё, что нужно, чтобы продолжить работу над видео в другом месте или автоматизировать её: кадры, их референсы, монтаж и манифест, по которому каждый кадр можно отрендерить заново. Она бесплатна: ничего не рендерится.
POST /videos/{jobId}/export: один рендерPOST /videos(отдельный кадр, Multi-Ref, продление).POST /sequences/{id}/project: все кадры последовательности, один за другим.- Необязательное тело, те же варианты, что в окне экспорта приложения:
include_media(по умолчаниюtrue): видео кадров и их подписанные оригиналы.false: никакого видео (ни клипа, ни оригинала, ни фильма); кадры сохраняют текст, настройки и референсы ("state": "expired"), а манифест содержитvideos_included: false.include_references(по умолчаниюtrue): ракурсы персонажей и изображения элементов, вreferences/.false: ни один не копируется; их имена, @упоминания,idи отпечатки остаются в манифесте (references_included: false).exclude_references: референсы, которые не нужно копировать, по одному, поid(character_id,subject_id), имени или @упоминанию, например["@Parc", "chr_..."](не более 200). Манифест содержитreferences_included: "partial"и"included": falseу каждого исключённого (false, если исключены все). Элемент, который не указывает ни на один референс экспорта:400 unknown_reference.include_film(только последовательность, по умолчаниюfalse): фильм уже собранной последовательности; требуетinclude_media(иначе400 invalid_export_options, как и параметр, который не является булевым, илиexclude_references, который не является списком строк).manifest_only: true: только манифест, без ZIP.
Ответ: { "manifest": { ... }, "file_url": "...", "export_id": "exp_...", "expires_at": "...", "bytes": n }, а GET /exports/{id}/file скачивает ZIP. Один экспорт одновременно на лицензию (409 export_in_progress), не более 2 ГБ (413 export_too_large: экспортируй кадры по одному).
| Файл | Содержимое |
|---|---|
tendre-project.json | Манифест (схема tendre.project/1, ключи на английском). Для каждого кадра: его состояние, введённый промпт (prompt) и отправленный в движок (prompt_sent), настройки, seed, стоимость, продление (extends, direction), референсы, связанные со своими файлами, и api_request, тело POST /videos, которое рендерит кадр заново (null, если изображение было отправлено только в base64); в начале references_included: true в ZIP (файлы референсов лежат в references/), false при manifest_only (референсы без файлов: files пуст, только отпечатки sha256); манифест без этого поля (прежние экспорты) читается как true. Папка, экспортированная приложением, где клиент выбирает референсы по одному, несёт true, false или "partial", и каждый референс может нести included (если его нет: как в начале, false, если там false, иначе true); невключённый референс сохраняет имя, @упоминание, id и описание, с пустым files. project.settings содержит настройки первого кадра (quality, width, height, fps, audio, output_format "mp4") и settings_from_shot, id этого кадра. Папка, экспортированная приложением, может содержать блок app, зарезервированный для приложения: игнорируй его |
shots/NN/clip.mp4 | Рендер каждого кадра, пока он есть на сервере; shots/NN/original.mp4 или .mov: подписанный файл движка, байт в байт, если он ещё существует |
references/ | Ракурсы персонажей и изображения использованных локаций, объектов, животных, стилей и нарядов |
timeline.otio, timeline.fcpxml | Монтаж (OpenTimelineIO; FCPXML для Final Cut Pro и DaVinci Resolve), медиа по пути относительно папки |
film.mp4 | Собранное видео последовательности, только с include_film: true и если она уже собрана (POST /sequences/{id}/export); иначе assembled в манифесте равно null |
Что мы храним и как долго. Для каждого принятого POST /videos сервер хранит карточку рендера без единого изображения или видео: текст, настройки, идентификаторы (изображение, отправленное в base64, оставляет только свой отпечаток). Она удаляется через 24 часа после отправки; после этого экспорт отвечает 404 unknown_export. ZIP удаляется через 45 минут после первого скачивания и не позднее чем через 2 часа после создания. Кадр, которого на сервере уже нет, выходит с "state": "expired", без файла, но с текстом, настройками и референсами: агент может отрендерить его заново через api_request.
Последовательность. Сборка удаляет кадры один за другим. Чтобы получить и кадры, и фильм, экспортируй проект до сборки, затем собери и экспортируй снова с { "include_film": true }: фильм добавится, а кадры тогда выйдут как expired.
Режим Ультра
Режим Ультра даёт самый детальный рендер видео. Добавь "quality": "max" в POST /videos (с mode ltx25, значением по умолчанию). Он оплачивается посекундно или по фиксированной цене с LoRA или при расширении клипа, отрендеренного не посекундно; расширение плана Ультра, вперёд или назад, оплачивается посекундно. POST /videos/quote даёт точную цену твоего запроса.
Посекундно
Клип оплачивается посекундно в зависимости от разрешения, звук включён:
| Разрешение | Цена |
|---|---|
| 480p | 4 кредитов в секунду |
| 720p | 8 кредитов в секунду |
| 1080p | 20 кредитов в секунду |
- Длительность: от 4 до 30 с при 24 кадрах в секунду, известна до рендера: 5 с при автоматической длительности (
duration_auto, по умолчанию), иначеlength/fps(24, еслиfpsне указан), с округлением до секунды. - Формат: запрошенный, в ближайшем соотношении сторон; 480p рендерится в 480p. Выше 1080p:
resolution_outside_ultra. - Начальное изображение (
image): возможно. Движок может отклонить текст или изображение при отправке:400 engine_refused, причина вdetail, код вcode; ничего не списывается. - Без сида:
seedигнорируется, и ответ его не содержит. - Отмена: свободна, пока рендер ждёт своей очереди; после начала расчёта
409 render_in_progress, и клип доставляется и оплачивается. - В Ультра нет конечного изображения, ключевых кадров и усиленной согласованности.
По фиксированной цене
С LoRA или при расширении клипа, отрендеренного не посекундно, Ультра рендерится полной видеомоделью по фиксированной цене:
| Запрошенный формат | Доставленный размер | Фиксированная цена за клип |
|---|---|---|
| 480p или 720p | Как в таблице выше при 720p (1280 x 768), запрос 480p рендерится в 720p | 40 кредитов |
| 1080p | Как в таблице выше (1920 x 1088) | 60 кредитов |
Цена фиксированная за формат: звук и длина ничего не меняют. Ультра начинается с 720p: запрос 480p
рендерится и тарифицируется в 720p. POST /videos/quote даёт точную цену. Максимум: 1080p (1920 x 1088) в любом режиме, 4K больше не предлагается. Больший размер отклоняется (ultra_4k_unavailable с quality: "max", resolution_above_quality без него).
- Длина: максимум 481 кадр, как у любого клипа (20 с при 24 fps, 16 с при 30, 8 с при 60). Расширения и длинные видео работают и в Ультра. Расширение сохраняет размер продолжаемого клипа, а ниже 720p тарифицируется по цене 720p.
- Время: несколько минут для клипа 5 с, дольше для клипа 20 с. Начало может ожидать освобождения мощной видеокарты.
- Нет перехода (
end_image) в Ультра (ultra_incompatible). - Нет ключевых кадров (
keyframes) в Ультра (keyframes_mode). - LoRA персонажа с твоего аккаунта применяется в Ультра так же, как в обычном режиме.
Multi-Ref Видео
Клип, в котором играют от 1 до 4 персонажей (до 12 в Ультра), каждый узнаваемый, на необязательной локации, с сохранёнными
объектами, животными и сохранённой локацией, когда это нужно. Персонажи берутся из
GET /characters: созданные из одной фотографии через API или в приложении. Объекты, животные и локации берутся из GET /subjects. Добавь объект
multiref в POST /videos (разрешение videos) и вызывай каждого персонажа через @Имя в
промпте:
{
"prompt": "@Lea walks toward @Tom in a sunny kitchen and hands him a cup. Sound: footsteps, soft music.",
"multiref": {
"characters": [
{ "character_id": "chr_8f3a...", "name": "Lea", "description": "a 28 year old woman with long red hair" },
{ "character_id": "chr_21bc...", "name": "Tom", "description": "a 30 year old man", "strength": 1.2 }
],
"background_b64": "<optional: an image of the location>",
"background_description": "a sunny kitchen"
},
"width": 1088, "height": 1920,
"audio": true
}Поле multiref | Что делает |
|---|---|
characters[].character_id | Персонаж из GET /characters |
characters[].name | Одно слово (буквы, цифры, _), то, что пишется после @ в промпте |
characters[].description | Краткое описание на английском; по умолчанию его kind |
characters[].strength | Вес сходства, от 0 до 2 (1 по умолчанию) |
characters[].sheet_id | Необязательно: какой sheet использовать для персонажа с несколькими (по умолчанию самый новый) |
characters[].voice | С "audio": true, characters[0] и characters[1]: character (по умолчанию) это голос из его профиля, если он онлайн (has_voice у персонажа), иначе голос, созданный моделью; generated запрашивает голос, созданный моделью. Ответ сообщает, какой использован (voices). |
characters[].voice_b64 | Необязательно, только characters[0] и characters[1], с "audio": true: другой голос для персонажа, аудиофайл (WAV, MP3, OGG, FLAC) в base64, не более 4 МБ (достаточно короткого фрагмента), который имеет приоритет над голосом профиля |
background_b64, background_description | Необязательная локация: изображение и несколько слов на английском |
- Промпт на английском, один абзац в настоящем времени;
Sound:для звука, реплики диалога в кавычках,exactly 2 peopleи позиции каждого, когда это важно, без отрицаний. Существо описывается тем, что оно есть.@Имя, не совпадающее ни с одним персонажем, будет отклонено (unknown_mention). - Форматы (
widthxheight): портрет 480 x 832, 720 x 1280, 1088 x 1920; пейзаж 832 x 480, 1280 x 720, 1920 x 1088; квадрат 480 x 480, 720 x 720, 1088 x 1088. Нет 4K; 480p только в Качестве. - Режимы: Качество (по умолчанию) или Ультра (
quality: "max"). Нет расширения и нет перехода. - Длина: автоматическая (
duration_auto, по умолчанию) или фиксированная сduration_auto: falseиlength121 (5 с), 241 (10 с) или 481 (20 с) при 24 fps; при другой частоте те же продолжительности в кадрах, максимум 481 (при 30: 145, 297, 481; при 60: 297, 481). - Частота кадров:
fps24, 30 (по умолчанию) или 60, как для любого клипа;lengthсчитается в кадрах при этой частоте, максимум 481 (16 с при 30, 8 с при 60). - Цена: цена клипа. В Качестве фиксированная цена формата из сетки выше,
удвоенная со звуком; 480p без звука остаётся 5 кредитов (сниженная цена
Качества не применяется к Multi-Ref).
POST /videos/quoteс"multiref": trueдаёт точную цену. - Сервер подбирает ракурсы под точный формат видео: отправляй персонажей как есть. Персонаж, у которого
только один ракурс, рендерится с
warningslimited_likenessв ответе: сходство ограничено (см. Ограниченное сходство). - Голоса профиля: со звуком
characters[0]иcharacters[1]по умолчанию говорят голосом из своего профиля, если он онлайн (has_voice);voicegeneratedпозволяет модели создать голос. Ответ указывает голос каждого вvoices(character_id,voice:character,customилиgenerated). - Голоса персонажей (
voice_b64): модель заставляет персонажа говорить этим голосом, включая движение губ; сервер берёт первые 5 секунд. Максимум два голоса, дляcharacters[0]иcharacters[1](движок поддерживает 2 голоса). Упорядочиcharactersпо диалогу:characters[0]говорит первым,characters[1]отвечает. Требуется звук ("audio": true), иначеvoice_requires_audio; голос на другом персонаже:voice_slot; нечитаемый файл:unsupported_audio_format; более 4 МБ:audio_too_large. Используются только первые 5 секунд: отправляй короткий фрагмент. Всё тело запроса не должно превышать 30 МБ (иначе413без JSON-тела). Без доплаты. - Опрос, загрузка и отмена такие же, как для любого видео (см. Опрос, загрузка, отмена выше).
Сохранённые объекты, животные и локации. Ещё два поля multiref добавляют
объекты, сохранённые из твоих собственных изображений:
Поле multiref | Что делает |
|---|---|
subjects[] | Объекты и животные (subject_id, затем необязательные name, description, strength). Они делят слоты с персонажами: не более 4 референсов всего; в Ультра до 30 изображений всего (см. ниже). |
location | Одна сохранённая локация в качестве декорации (subject_id, затем необязательные name, description, strength): её изображения с собственной силой. Заменяет background_b64 (оба вместе: multiref_incompatible). Требует хотя бы одного персонажа, объекта или животного рядом. |
name по умолчанию берётся как первое слово из названия объекта, и каждый @Имя в промпте сопоставляется
как имя персонажа. Локация, переданная в subjects, или объект, переданный как location, будут отклонены
(invalid_subject_type). Цена не меняется: это цена клипа. Объект используется с первыми 5 изображениями (в Ультра со всеми, не более 6).
"multiref": {
"characters": [{ "character_id": "chr_8f3a...", "name": "Lea" }],
"subjects": [{ "subject_id": "sub_1c2d...", "name": "Rex" }],
"location": { "subject_id": "sub_9e8f...", "name": "Loft" }
},
"prompt": "@Lea throws a ball to @Rex across @Loft. Sound: barking, laughter."В Ультра клип Multi-Ref следует правилам Ультра с посекундной оплатой: та же цена за секунду, звук включён, от 4 до 30 с при 24 кадрах в секунду (5 с при автоматической длительности), от 480p до 1080p, без сида.
- Каждый персонаж передаётся со своей character sheet (или, если её нет, со всеми своими изображениями), и сервер собирает всё в одно изображение; каждый объект, животное или локация со всеми своими изображениями (не более 6).
- Первый рендер персонажа готовит это изображение, что занимает на несколько десятков секунд больше: его
jobIdтогда начинается сsdp-и отслеживается как остальные. - Без голоса:
voice_b64и голос профиля игнорируются (warningsvoice_ignored), аstrengthне действует. - Движок может отклонить референсное изображение (например, реальное лицо): рендер завершается как
failedс причиной, и ничего не списывается.
Стили, наряды и движение. Только в Ультра (quality: "max"): ещё три поля multiref; в других режимах запрос отклоняется (multiref_ultra_only) и никогда не рендерится без них.
Поле multiref | Что делает |
|---|---|
styles[] | Сохранённые стили (subject_id, затем необязательные name, description): весь клип перенимает их визуальный облик (технику, свет, цвета, фактуры), но никогда их содержание. |
outfits[] | Сохранённые наряды (те же поля плюс worn_by), надетые так, как на их изображениях. worn_by (необязательно) это name одного из персонажей: оно добавляет "<Имя> wears <Наряд>." в начало сцены. Без него напиши это в промпте: @Lea wears @RedGown. |
motion | Одно видео движения от 4 до 30 с: { "motion_id": ... } (загруженное через POST /motions) или { "video_b64": ... } (MP4, MOV, WebM или MKV, не более 20 МБ) и необязательное description движения на английском. mode определяет, что клип из него перенимает: camera (по умолчанию) движение камеры, кадрирование и ритм; choreography движения тела, жесты и их ритм. Никогда человека или место из видео; цена одинакова в обоих режимах. Сервер приводит его примерно к 410 000 пикселей (856 × 482 при 16:9) и 24 кадрам в секунду, без звука; соотношение ширины и высоты от 0,4 до 2,5. |
- Не более 30 изображений в Ультра: персонажи, объекты, стили, наряды и локация вместе (
multiref_too_many_images), из них не более 12 персонажей (сверх этогоmultiref_characters_required). Рекомендуется 8: от 9 до 12 рендер проходит сwarningsmany_characters, так как некоторые могут пропасть или смешаться. Стиль внеstylesили наряд внеoutfitsотклоняется (invalid_subject_type). -
Цена движения: 3 кредитов за секунду видео движения (с округлением вверх до секунды) сверх рендера, указано в
GET /pricing(ultra.motion_per_second);POST /videos/quoteс тем жеmultiref.motionвозвращаетmotion_secondsи точную цену. - Прямая загрузка тяжёлого видео движения:
POST /motionsс{ "size": <байты> }(не более 20 МБ) возвращаетmotion_id,upload_url,headersиexpires_in(900 с); отправь файл черезPUT upload_urlровно с этимиheaders, затем передайmultiref.motion.motion_idвPOST /videosв течение 2 часов. Одинmotion_idслужит для одного рендера.
"quality": "max",
"multiref": {
"characters": [{ "character_id": "chr_8f3a...", "name": "Lea" }],
"styles": [{ "subject_id": "sub_a1b2..." }],
"outfits": [{ "subject_id": "sub_c3d4...", "name": "RedGown", "worn_by": "Lea" }],
"motion": { "motion_id": "4f0c2a9b1d7e6a35", "description": "a low tracking shot from the side" }
},
"prompt": "@Lea walks along a seaside promenade at sunset."Коды ошибок стилей, нарядов и движения приведены в разделе Ограничения и ошибки.
С MCP-сервером агент делает всё это через tendre_multiref_video: задай
сцену и назови персонажей, объекты, животных и локацию (subjects, location_id).
Face swap
Человек, снятый в твоём собственном видео, становится одним из твоих персонажей: лицо,
волосы, тело и одежда (или только голова, см. part), при этом сохраняются жесты, губы и обстановка, а также голос, если у персонажа нет своего (см. voice). Это Face swap
из приложения, на одном отрывке не более 20 с: один персонаж, без цепочек и
переходов. Запрос: POST /faceswap (разрешение videos):
{
"video_b64": "<the video in base64: MP4, MOV, WebM or MKV, 20 MB at most>",
"character_id": "chr_8f3a...",
"start": 2,
"duration": 6,
"scene": "@Lea wears a long red coat.",
"zone": "normal",
"likeness": 1
}| Поле | Что делает |
|---|---|
video_b64 | Видео, не более 20 МБ, с одним хорошо различимым человеком. Если превышает, сначала обрежь или сожми его, или используй MCP-инструмент tendre_face_swap, который принимает до 95 МБ. |
character_id, sheet_id | Персонаж из GET /characters и его sheet, если их несколько (по умолчанию самый новый). |
name | Необязательно, не более 60 символов: имя персонажа, по умолчанию то, которое у него есть в GET /characters. Имя персонажа, созданного в приложении, появляется онлайн только после того, как приложение его отправит (приложение 0.9.1 и новее; иначе name равно null в GET /characters): укажи его, чтобы вызывать через @Имя в scene, иначе вызывай его Image 1. |
start, duration | Отрывок в секундах: с start (0 по умолчанию), в течение duration (по умолчанию до конца видео, не более 20 с). |
scene | Необязательно, на английском, не более 400 символов: что должно измениться или быть уточнено. Персонаж вызывается @Имя (первое слово его имени, см. name) или Image 1. Без сцены он двигается точно так же, как человек в кадре. Никогда не заставляй персонажа в ней говорить и не описывай его рот, взгляд или голову («says», «looks at the camera», «smiles»): он копирует их из видео, а указание заставляет его их выдумывать, с рассинхронизированными губами и повёрнутой головой. Описывай то, что меняется вокруг: одежду, аксессуар, свет. |
description | Необязательно, на английском, не более 360 символов: кто этот персонаж ("a 28 year old woman with long red hair, wearing a black leather jacket"). По умолчанию его kind и одежда. |
part | full (по умолчанию): персонаж целиком. head: только голова (лицо и волосы); снятое тело, одежда и обстановка остаются. Персонаж тогда рендерится по трём портретам его character sheet, обрезанным до головы (heads_only в ответе); персонаж с одним или двумя ракурсами сохраняет их целиком. Описание по умолчанию называет только его kind, без одежды, а zone по умолчанию tight. |
zone | Пространство вокруг снятого силуэта, в котором может быть нарисован персонаж: tight (Узкая), normal (по умолчанию) или wide (Широкая: место для больших ушей, крыльев, широкого телосложения). С part head это пространство вокруг головы, по умолчанию tight. |
likeness | Насколько плотно персонаж придерживается своих ракурсов, от 0,5 до 2 (1 по умолчанию). |
audio | true по умолчанию: звук видео сохраняется, губы следуют за ним. false: видео без звука. |
voice | character (по умолчанию): звук видео преобразуется в голос из профиля персонажа, если у него есть голос онлайн (has_voice в GET /characters), в том же рендере и без изменения темпа, поэтому губы остаются синхронными. Без голоса профиля остаётся снятый голос. original: сохранить снятый голос. Ответ сообщает, какой голос использован (voice: character, custom, original или none без звука). |
voice_b64 | Необязательно, со звуком: другой голос для персонажа (WAV, MP3, OGG, FLAC, не более 2 МБ; используются первые 20 секунд), который имеет приоритет над голосом профиля. Звук видео преобразуется в этот голос без изменения темпа. |
seed | Сид рендера, от 0 до 4294967295, для повторного рендера или вариаций. |
Видео и голос вместе: не более 22 МБ, чтобы тело запроса не превысило 30 МБ (иначе 413 без JSON-тела).
- Сервер подготавливает всё. Он вырезает отрывок, устанавливает рабочую частоту кадров (30 fps для источника при 29 fps и выше, включая 50 и 60, 24 ниже) и рабочий формат (кратные 128, короткая сторона 768, соотношение, ближайшее к твоему видео), и подбирает ракурсы персонажа под этот формат.
- Что ты получаешь: это видео отрывка в рабочем формате, около одного мегапикселя (768 x 1408 для вертикального видео, например), с пропорциями твоего видео в пределах 5%. Полное разрешение и несколько персонажей подряд остаются эксклюзивными для десктопного приложения tendre.AI: оно вставляет персонажа обратно в оригинальное видео в полном разрешении и цепочкой добавляет несколько персонажей.
- Цена: 6 кредитов за секунду подготовленного отрывка (
secondsв ответе), округлённых до следующего кредита. Ответ содержитjobId,seed,costи подготовленный отрывок (width,height,length,fps,seconds,audio,voice,views,part). Персонаж только с одним ракурсом рендерится сwarningslimited_likeness. - Нет котировки: ни
POST /videos/quote, ниtendre_quoteот MCP не знают Face swap. Чтобы рассчитать цену до отправки, прочитайgrid.body_swapизGET /pricing: секунды отрывка xper_block_720p(цена блока) /block_seconds(длина блока), округлённые до следующего кредита. - Некоторые сцены рендерятся по трём портретам персонажа, обрезанным до головы (
heads_onlyв ответе), и одежда из его ракурсов больше не навязывается: сцена решает. - Face swap считается использованием персонажа и откладывает его удаление, как и Multi-Ref.
- Опрос, загрузка и отмена такие же, как для любого видео (см. Опрос, загрузка, отмена выше):
GET /videos/{jobId},GET /videos/{jobId}/file,POST /videos/{jobId}/cancel. - Собственные ошибки:
video_required,video_too_large,unreadable_video,invalid_start,passage_too_short,invalid_duration,invalid_zone,invalid_likeness,invalid_scene,invalid_description,invalid_character_name,invalid_part,invalid_voice_choice,character_required,unknown_character,audio_too_large(голос более 2 МБ),face_swap_too_large(отрывок всё ещё слишком тяжёлый после подготовки: укоротиduration),server_busy(два видео уже готовятся: повтори послеRetry-After, 20 с),face_swap_unavailableиface_swap_price_missing(Face swap закрыт или без цены: повтори позже). Что означает каждая: Ограничения и ошибки. - Твоё видео проходит через наши серверы при подготовке, затем поступает на видеокарту для рендера, как любое исходное изображение.
Используй только видео людей, давших своё согласие: это правило условий использования.
С MCP-сервером агент делает всё это через tendre_face_swap.