Переносит движение из референс-видео на персонажа с изображения, чтобы он повторял позу, жесты и динамику как в оригинале. Цена зависит от разрешения и длительности: 720p — 18 ₽/сек, 1080p — 26 ₽/сек.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Kling 3.0 Motion Control нужен для сценариев, где у вас уже есть:
Модель переносит движение из видео на персонажа с изображения и возвращает готовый ролик. Это удобно для анимации персонажей, танцев, коротких сцен для рекламы и любых задач, где важно повторить жесты, темп и пластику из исходного видео.
В API у модели два практических режима:
character_orientation = "video" - сильнее ориентируется на позы и динамику из референс-видео, подходит для роликов до 30 секунд;character_orientation = "image" - сильнее держится за исходное изображение, но подходит только для более коротких роликов, обычно до 10 секунд.Каждый вызов создаёт асинхронную операцию. Сразу после запроса API возвращает id, стартовый статус и стоимость запуска, а готовый результат нужно получать отдельной проверкой статуса.
POST /api/v1/operationsAuthorization: Bearer brth_...id, стартовый статус и стоимость.Практически у Kling 3.0 Motion Control есть два сценария вызова:
character_orientation = "video";character_orientation = "image".Базовая форма запроса:
{
"tool": "kling-3-0-motion-control",
"input": {
"...": "..."
}
}
tool - slug нейросети. Для этой модели всегда используйте "kling-3-0-motion-control".input - параметры конкретного запуска.input_urls и video_urls передаются массивы URL, но для этой модели в каждый массив нужно передавать только по одному файлу.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
prompt | string | Нет | Дополнительное текстовое описание сцены, внешнего вида и атмосферы. Полезно, когда нужно уточнить фон, стиль или настроение ролика. Максимум 2500 символов. |
input_urls | string[] (url) | Да | Массив с одним внешним URL изображения персонажа или объекта, который нужно анимировать. Разрешены только http/https ссылки. Максимум 1 файл. Допустимые расширения: .jpg, .jpeg, .png. |
video_urls | string[] (url) | Да | Массив с одним внешним URL референс-видео, из которого берётся движение. Разрешены только http/https ссылки. Максимум 1 файл. Допустимые расширения: .mp4, .mov. |
character_orientation | enum | Да | Режим переноса движения. Варианты: video - сильнее повторяет движение и позы из видео, подходит для роликов до 30 секунд; image - сильнее держится за исходное изображение и доступен только для роликов до 10 секунд. |
mode | enum | Да | Разрешение результата. Варианты: 720p, 1080p. Влияет на итоговую цену. |
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "kling-3-0-motion-control",
"input": {
"prompt": "Девушка повторяет движения из танцевального референса, мягкий студийный свет, аккуратный фон без лишних деталей",
"input_urls": [
"https://cdn.example.com/source-character-1.jpg"
],
"video_urls": [
"https://cdn.example.com/source-motion-1.mp4"
],
"character_orientation": "video",
"mode": "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: 'kling-3-0-motion-control',
input: {
prompt:
'Девушка повторяет движения из танцевального референса, мягкий студийный свет, аккуратный фон без лишних деталей',
input_urls: ['https://cdn.example.com/source-character-1.jpg'],
video_urls: ['https://cdn.example.com/source-motion-1.mp4'],
character_orientation: 'video',
mode: '720p',
},
}),
})
const data = await response.json()
console.log(data)
import requests
response = requests.post(
"https://bratuha.ru/api/v1/operations",
headers={
"Authorization": "Bearer brth_ваш_ключ",
"Content-Type": "application/json",
},
json={
"tool": "kling-3-0-motion-control",
"input": {
"prompt": "Девушка повторяет движения из танцевального референса, мягкий студийный свет, аккуратный фон без лишних деталей",
"input_urls": ["https://cdn.example.com/source-character-1.jpg"],
"video_urls": ["https://cdn.example.com/source-motion-1.mp4"],
"character_orientation": "video",
"mode": "720p",
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "kling-3-0-motion-control",
"input": {
"prompt": "Персонаж повторяет жест руками из короткого референса, сохраняет исходный ракурс и внешний вид, чистый светлый фон",
"input_urls": [
"https://cdn.example.com/source-character-2.png"
],
"video_urls": [
"https://cdn.example.com/source-motion-2.mov"
],
"character_orientation": "image",
"mode": "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: 'kling-3-0-motion-control',
input: {
prompt:
'Персонаж повторяет жест руками из короткого референса, сохраняет исходный ракурс и внешний вид, чистый светлый фон',
input_urls: ['https://cdn.example.com/source-character-2.png'],
video_urls: ['https://cdn.example.com/source-motion-2.mov'],
character_orientation: 'image',
mode: '1080p',
},
}),
})
const data = await response.json()
console.log(data)
import requests
response = requests.post(
"https://bratuha.ru/api/v1/operations",
headers={
"Authorization": "Bearer brth_ваш_ключ",
"Content-Type": "application/json",
},
json={
"tool": "kling-3-0-motion-control",
"input": {
"prompt": "Персонаж повторяет жест руками из короткого референса, сохраняет исходный ракурс и внешний вид, чистый светлый фон",
"input_urls": ["https://cdn.example.com/source-character-2.png"],
"video_urls": ["https://cdn.example.com/source-motion-2.mov"],
"character_orientation": "image",
"mode": "1080p",
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "kling-3-0-motion-control",
"cost": 90,
"balance_after": 495,
"created_at": "2026-03-27T12:00:00Z"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "kling-3-0-motion-control",
"cost": 90,
"created_at": "2026-03-27T12:00:00Z",
"completed_at": "2026-03-27T12:05:37Z",
"result": {
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/kling-3-0-motion-control/result.mp4"
]
},
"error_message": null
}
После создания операции сохраните id и используйте его для отдельной проверки статуса:
GET /api/v1/operations/{id}id возвращается сразу после POST /api/v1/operations.curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
const response = await fetch(
'https://bratuha.ru/api/v1/operations/op_uuid-123',
{
headers: {
Authorization: 'Bearer brth_ваш_ключ',
},
},
)
const data = await response.json()
console.log(data)
После успешного завершения операция возвращает result в таком формате:
{
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/kling-3-0-motion-control/result.mp4"
]
}
Что важно знать:
type всегда "video";urls - массив ссылок на готовые mp4-файлы;Базовая ставка начинается от 18 ₽ за секунду.
Итоговая цена зависит от двух вещей:
mode;video_urls.Для расчёта цены секунды округляются вверх. Минимальная длина референс-видео - 3 секунды, максимальная - 30 секунд.
Текущие ставки:
| Разрешение | Ставка |
|---|---|
720p | 18 ₽/сек |
1080p | 26 ₽/сек |
Примеры расчёта:
720p и видео на 5 секунд - 90 ₽;720p и видео на 7.2 секунды - 144 ₽, потому что длительность округляется вверх до 8;1080p и видео на 10 секунд - 260 ₽.Практически это означает:
1080p дороже 720p;character_orientation = "image" доступен только для референс-видео длиной до 10 секунд.POST /api/v1/operations не идемпотентен: каждый повторный запрос создаёт новую операцию.queued, затем отдельно проверяете статус по id.input_urls и video_urls подходят только внешние http/https URL. localhost, private IP и внутренние адреса не принимаются.video_urls определяется сервером по metadata видео до расчёта цены и до создания операции. Если сервер не может надёжно прочитать длительность референс-видео, запрос отклоняется с ошибкой, а операция не создаётся.input_urls и video_urls передаются массивами, для этой модели в каждом поле нужен только один URL.input_urls используйте только .jpg, .jpeg, .png. Для video_urls используйте только .mp4 и .mov.character_orientation = "image", но держите референс-видео коротким.character_orientation = "video".GET /api/v1/operations/{id} слишком часто. Практически безопасно проверять статус примерно раз в секунду.