Llumi Cut · Nordic Byte

Документация API

Llumi Cut — это HTTP-сервис. Вы загружаете медиафайлы, отправляете таймлайн в JSON и скачиваете результат. Здесь кратко описаны поля; полная проверенная схема доступна по адресу /openapi.json в каждой установке.

Аутентификация

У каждой установки свой ключ. Передавайте его в каждом запросе к /v1:

Authorization: Bearer <ваш-ключ>

Порядок работы

  1. Загрузите каждый файл через POST /v1/assets?kind=image|video|audio, передав файл в теле запроса в двоичном виде. Ответ: {"id": "…"}.
  2. Поставьте монтаж в очередь через POST /v1/renders, передав таймлайн в JSON. Используйте заголовок Idempotency-Key, чтобы повторный запрос не создал второй рендер.
  3. Опрашивайте GET /v1/renders/{id}, пока status не станет completed, затем скачайте каждый файл из result.files.

Эндпоинты

МетодПутьЧто делает
GET/healthСостояние сервиса
POST/v1/assets?kind=image|video|audioЗагружает двоичный файл и возвращает его ID
POST/v1/rendersПроверяет таймлайн и ставит его в очередь
GET/v1/rendersПоследние 100 рендеров
GET/v1/renders/{id}Статус, прогресс, события и ошибки
POST/v1/renders/{id}/cancelОтменяет рендер в очереди или в работе
POST/v1/renders/{id}/retryПовторяет остановленный рендер
DELETE/v1/renders/{id}Удаляет остановленный рендер и его файлы
GET/v1/renders/{id}/files/{name}Скачивает результат
POST/v1/maintenance/purge?older_than_days=NУдаляет остановленные рендеры старше N дней

Таймлайн

Обязательны только title, duration и clips. Сумма длительностей планов должна равняться duration.

ПолеЗначения
duration3–600 с
width · aspect640, 1280 или 1920 (длинная сторона) · 16:9, 9:16, 1:1
fps24 или 30
backgroundЦвет полей вокруг кадра, #RRGGBB
transition · transition_durationcut, fade, fadeblack, fadewhite, dissolve, slideleft, slideright, wipeleft, wiperight, smoothleft, smoothright, circleopen, circleclose · 0,1–2 с
image_motionnone, zoom_in, zoom_out, pan_left, pan_right, auto
fade_in · fade_outПлавное появление и затухание всего видео и звука, 0–5 с
audio_asset_id · pausesНеобязательная основная песня и до десяти пауз цифровой тишины

Планы (clips[])

ПолеЗначения
asset_id · durationИзображение или видео · до 60 с
trim_start · speedСекунда начала в исходнике · 0,25–4
volumeСобственный звук клипа, 0–2 (0 — без звука)
fitcontain (с полями) или cover (заполняет кадр с обрезкой)
freeze · motionЗамораживает первый кадр · движение Ken Burns
effectsДо шести из grayscale, sepia, vintage, noir, warm, cool, blur, sharpen, vignette, invert, mirror, flip
brightness · contrast · saturation−0,5–0,5 · 0,3–2 · 0–3
transition · transition_durationПереход от предыдущего плана

Звук (audio_tracks[])

asset_id, start, trim_start, duration, volume (0–2), fade_in, fade_out, loop и duck. Дорожка с duck: true становится тише примерно на 10 dB, пока звучит песня, голос или звук клипа.

Титры (texts[])

text (до пяти строк), start, end, position (девять позиций) или x/y в долях кадра, size, color, outline_color, outline, box, box_color, box_opacity, font, bold, italic и animation (none, fade, slide_up, slide_left, pop, typewriter).

Слои (overlays[])

asset_id (изображение или видео), start, end, position или x/y, width, height (если заданы оба, область заполняется целиком: разделённый экран и сетки), margin, opacity, trim_start, volume, fade, border и border_color.

Субтитры (captions[])

start, end и text. Экспортируются в SRT и WebVTT, а с burn_subtitles: true впечатываются в изображение.

Результаты

video.mp4 (H.264 + AAC), audio.wav (итоговая звуковая дорожка), song.wav (только при основной песне), subtitles.srt, subtitles.vtt, qc.json (длительность, разрешение, источники звука, предупреждения) и manifest.json.

Ограничения