Reelora API
REST API для програмної інтеграції субтитрів, озвучки, транскрипції, дублювання і видалення пауз. Ті самі можливості що й у Telegram-боті — через HTTP. Доступний на всіх тарифах, включно з Free.
Ендпоінти
| Метод | Шлях | Опис |
|---|---|---|
| GET | /health | Перевірка сервісу |
| GET | /v1/me | Профіль, ліміти, використання |
| POST | /v1/uploads | Завантажити файл |
| POST | /v1/tasks | Створити задачу |
| GET | /v1/tasks | Список задач |
| GET | /v1/tasks/{id} | Статус задачі + результат |
Швидкий старт
Отримай API ключ
У боті @reelora_ai_bot надішли /apikey або відкрий Налаштування → 🔑 API доступ. Ключ показується лише один раз.
Завантаж файл
POST /v1/uploads → отримай upload_id
Створи задачу
POST /v1/tasks з типом і параметрами
Отримай результат
Опитуй GET /v1/tasks/{id} або вкажи webhook_url
Автентифікація
Всі запити (крім /health) потребують заголовка:
X-API-Key: reel_xxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Base URL
https://api.reelora.cc
Інтерактивна Swagger документація: https://api.reelora.cc/docs
Перевірка статусу
curl https://api.reelora.cc/health
# {"status":"ok","service":"reelora-api"}
Профіль і ліміти
curl https://api.reelora.cc/v1/me -H "X-API-Key: reel_..."
{
"user_id": 618899534, "tariff": "pro_plus",
"tariff_expires_at": "2026-07-17T07:20:20",
"limits": {
"seconds_per_month": 36000, "tts_chars_limit": 1000000,
"elevenlabs_chars_limit": 25000, "transcription_seconds": 72000,
"max_photos": 30, "max_video_duration": 600, "max_file_size_mb": 500,
"can_translate": true, "can_dub": true, "premium_voices": true
},
"usage": {
"used_seconds_this_month": 705, "used_chars_this_month": 12674,
"used_eleven_chars_this_month": 0, "used_transcription_seconds": 0,
"limit_reset_date": "2026-07-17T07:18:07"
},
"api_key_prefix": "xxxxxxxx", "api_key_created_at": "2026-06-19T22:43:23"
}
Завантаження файлу
Завантажує файл і повертає upload_id. Файли живуть 2 години. Ліміт: 20 завантажень/хв.
curl -X POST https://api.reelora.cc/v1/uploads \
-H "X-API-Key: reel_..." -F "[email protected]"
# {"upload_id":"550e8400-...","filename":"photo.jpg","size_bytes":245891}
| Тип | Формати | Макс. |
|---|---|---|
| Зображення | JPEG, PNG, WebP | 500 MB |
| Відео | MP4, MOV, AVI | 500 MB |
| Аудіо | MP3, WAV, M4A | 500 MB |
| Субтитри | SRT | — |
Використовуй upload_id у полях photos, file, srt_file, bgm_file. Або передавай прямі https:// URL замість завантаження.
Створення задачі
Тип задачі — поле "type". Виконується асинхронно. Всі типи підтримують webhook_url і send_to_telegram.
{ "task_id": 744, "status": "pending" }
Тип: video — створення відео
Фото або відео-кліпи + войсовер + karaoke-субтитри + музика → MP4.
{
"type": "video",
"photos": ["upload_id_1", "upload_id_2", "https://example.com/img.jpg"],
"text": "Перша сцена {scene:slide} Друга сцена {scene:zoom:0.8} Третя сцена",
"scene_durations": null, "scene_transitions": null, "target_duration": 30,
"format": "9_16", "animation": "ken_burns", "transition": "random", "transition_duration": 0.5,
"tts_provider": "google", "tts_voice": "Chirp3-HD-Aoede", "language": "uk",
"tts_scene": "Speak like a news anchor.",
"subtitles": true, "sub_style": "yellow_basic", "sub_position": "bottom",
"bgm_track": "chill_background-lofi-vibes-113884.mp3", "bgm_volume": 0.2
}
| Поле | За замовч. | Опис | |
|---|---|---|---|
| photos | обов'язк. | — | upload_id або https:// (зображення або відео-кліпи, макс. 30) |
| text | опц. | null | Текст озвучки. Без тексту — відео без звуку. Встав маркери сцен між абзацами, щоб змінювати кадр (і за бажанням обрати перехід): {scene} · {scene:slide} · {scene:zoom:0.8} · {scene:0.8} |
| scene_durations | опц. | null | Явні тривалості кадрів у секундах, напр. [10, 15, 5]. Довжина = кількості media. Перекриває авто-таймінг {scene}, працює навіть без озвучки |
| scene_transitions | опц. | null | Явний перехід на кожному стику (довжина = photos − 1), напр. ["slide","zoom"]. Альтернатива маркерам {scene:type} |
| target_duration | опц. | null | Цільова довжина ролика в секундах. Якщо готове відео довше — його пришвидшують (відео+звук+субтитри синхронно), щоб вкластися. Коротше — не чіпають. Пришвидшення обмежене ×2. Має бути ≤ ліміту тарифу |
| format | опц. | "9_16" | "9_16" · "16_9" · "1_1" · "original" |
| animation | опц. | "none" | "none" · "ken_burns" |
| transition | опц. | "crossfade" | Глобальний перехід для немаркованих стиків: none · random · fade · dissolve · slide · cover · reveal · zoom · squeeze · wind · pixel · circle (crossfade = аліас dissolve). Діє лише коли animation ≠ none |
| transition_duration | опц. | 0.5 | Тривалість переходу в секундах. Окрему тривалість на стик можна задати через {scene:type:сек} |
| tts_provider | опц. | "google" | TTS провайдер (дивись розділ Провайдери) |
| tts_voice | опц. | з профілю | Назва голосу (дивись розділ Голоси) |
| tts_speed | опц. | 1.0 | 0.8 · 1.0 · 1.2 · 1.5 |
| language | опц. | з акаунту | Мова озвучки — будь-який код з розділу Мови ("ar", "fa"…) або повна локаль "ru-RU". Для рідкісних мов — tts_provider:"edge" |
| tts_scene | опц. | null | Інструкція стилю мовлення (для Gemini TTS) |
| tts_style | опц. | null | Пресет стилю: standard · calm · expressive · energetic · dramatic · cheerful (Gemini та ElevenLabs) |
| subtitles | опц. | true | Karaoke субтитри |
| sub_style | опц. | "yellow_basic" | Стиль субтитрів |
| sub_position | опц. | "bottom" | "top" · "center" · "bottom" |
| sub_size | опц. | "medium" | "small" · "medium" · "large" |
| sub_color | опц. | null | ASS колір: "&H0000E6FF" (жовтий) |
| text_overlays | опц. | null | Статичні написи-титри поверх кадру, незалежні від озвучки (див. «Текст на відео» нижче) |
| text_overlays_raw | опц. | null | Те саме компактним рядком-кодами, парситься на сервері (див. нижче). Використовується лише якщо немає text_overlays |
| auto_text | опц. | false | ⚡ Авто-текст. LLM обирає найсильніші слова озвучки й додає їх як анімовані написи, синхронно з таймкодами слів TTS (див. «Авто-текст» нижче). Потребує text. Рахується з місячної квоти авто-тексту |
| bgm_track | опц. | null | Назва файлу з бібліотеки музики (дивись розділ BGM) |
| bgm_file | опц. | null | upload_id свого MP3 файлу (взаємовиключне з bgm_track) |
| bgm_volume | опц. | 0.2 | Гучність музики 0.0–1.0 |
| audio_mix_type | опц. | "replace" | Мікшування для відео-кліпів: "replace" · "add" · "overlay" |
audio_mix_type — для кліпів з оригінальним звуком
| Значення | Поведінка |
|---|---|
| replace | Тільки TTS/BGM — звук кліпу видаляється |
| add | TTS поверх оригіналу (обидва на повній гучності) |
| overlay | TTS на повній гучності + оригінал приглушено |
🎬 Динамічні сцени — коли змінювати кадр
- З озвучкою: встав маркери {scene} у text між абзацами. Кожен сегмент таймиться за озвучкою і мапиться на media по порядку. Маркери прибираються перед TTS — голос їх не читає.
- Без озвучки / явно: передай scene_durations (напр. [10, 15, 5]) — по одному значенню на media. Відео-кліпи обрізаються/зациклюються під сцену, фото показуються задану тривалість.
- Мапінг сцен ↔ media: порівну → 1:1; менше сцен → остання ділиться на решту media; більше → останнє media тримає залишок.
✨ Переходи між кадрами — як змінювати кадр
- У тексті: розшир маркер типом і/або тривалістю: {scene:slide}, {scene:zoom:0.8}, {scene:0.8} (лише тривалість). Перехід застосовується до стику в цю сцену.
- Явний масив: scene_transitions (довжина = photos − 1), напр. ["slide","zoom","fade"] — по одному переходу на стик. Зручно для відео без тексту з явними тривалостями.
- Типи: fade · dissolve · slide · cover · reveal · zoom · squeeze · wind · pixel · circle · random. Напрямлені (slide/cover/reveal/wind) обирають випадковий напрямок на кожному стику.
🅰️ Текст на відео — статичні написи
Додай довільні написи/титри поверх відео, незалежно від субтитрів. Працює з озвучкою або без. Кожен напис має свій стиль, позицію, тайминг і плавну появу/зникнення. Два способи передати:
Структуровано — text_overlays (масив, макс. 10):
"text_overlays": [
{ "text": "BIG TITLE", "style": "bold_yellow", "size": "large",
"position": "top_center", "start": 0.0, "end": 3.0, "fade": true, "anim": "pop" },
{ "text": "the end", "style": "soft_pink", "position": "bottom_center", "start": 3.0 }
]
| Поле | ||
|---|---|---|
| text | обов'язк. | обов'язкове, макс. 200 символів |
| start | опц. | сек. null → з 0 |
| end | опц. | сек. null → до кінця відео |
| style | опц. | стиль титру (нижче) |
| size | опц. | small · medium · large |
| position | опц. | 9-сітка: top_left · top_center · top_right · middle_left · center · middle_right · bottom_left · bottom_center · bottom_right |
| bold / italic | опц. | перекриває вагу/нахил стилю |
| color | опц. | ASS hex &HAABBGGRR, напр. "&H00B469FF" (рожевий) |
| fade | опц. | плавна поява/зникнення (300 мс) |
| anim | опц. | Анімація появи: pop · slide_left · slide_right · type (друкарська машинка). Має пріоритет над fade |
Стилі титрів (style): clean_white · bold_yellow · outline_black · soft_pink · elegant_script · news_bar · impact_red.
Коди — text_overlays_raw (рядок). Універсальний англомовний синтаксис (однаковий у будь-якій мові інтерфейсу), парситься на сервері. Один напис на рядок (або через /); поля всередині напису — через |:
TEXT | attributes | start-end
"text_overlays_raw": "Hello | large italic center | 0-3 / Subscribe | bottom pink pop | 3-end"
- розмір — small · medium · large
- вага/нахил — bold · thin · italic
- вертикаль — top · middle · bottom; горизонталь — left · center · right
- колір — white · yellow · red · green · blue · pink · orange · purple · black · cyan
- час — 0-3, 2.5-8, 5-end (сек, крапка/кома). Без часу → напис видно весь ролик
- анімація — pop · slide · type (друкарська машинка) · fade · none
⚡ Авто-текст — автоматичні написи ключових слів
auto_text: true вмикає ⚡ Авто-текст. Замість того щоб розставляти написи вручну, LLM читає розпізнані слова озвучки, сам обирає найсильніші (імена, числа, гучні твердження) і рендерить їх як анімовані написи, точно по таймкодах слів TTS. Обирає сучасний стиль, колір і анімацію появи (pop / slide / typewriter) для кожного слова, складає слова, що звучать разом, у стек і не лізе в зону субтитрів.
- Потрібна озвучка (text не порожній). Без озвучки таймкодів слів немає — auto_text ігнорується.
- Додаткове: згенеровані написи додаються до твоїх text_overlays / text_overlays_raw, а не заміняють їх.
- Повністю автоматично: параметрів на слово немає. Якщо LLM нічого не підібрав — рендер просто йде без додаткових написів (запит не падає).
- Квота: кожен успішний рендер з авто-текстом списує одиницю місячної квоти (auto_text_limit; на Free — обмежено, на платних — безліміт). Перевищення → 429.
- Авто-текст працює в усіх таск-типах API: video, dubbing і subtitles. Переклад по API робиться через subtitles з translate_to (окремого типу translation немає), тож auto_text охоплює й перекладені субтитри.
Тип: transcription — транскрипція
Аудіо або відео → текст + .SRT з таймкодами.
{
"type": "transcription", "file": "upload_id_або_https_url",
"language": "uk", "ai_prompt": "Медичний подкаст. Виправляй термінологію.",
"output_format": "both"
}
| Поле | Опис | |
|---|---|---|
| file | обов'язк. | upload_id або https:// URL |
| language | опц. | "uk" · "en" · "de" · "fr" і т.д. null = авто |
| ai_prompt | опц. | Контекст для Whisper (підвищує точність) |
| output_format | опц. | "txt" · "srt" · "both" (за замовч.) |
// result_urls для транскрипції
{ "txt_url": "https://cdn.reelora.cc/.../transcript.txt",
"srt_url": "https://cdn.reelora.cc/.../transcript.srt" }
Тип: audio — озвучка (TTS)
Текст → MP3 файл без відео.
{
"type": "audio", "text": "Привіт! Це тест Reelora API.",
"tts_provider": "gemini", "tts_voice": "Puck",
"tts_speed": 1.0, "tts_scene": "Warm and friendly tone",
"tts_style": "expressive"
}
| Поле | За замовч. | Опис | |
|---|---|---|---|
| text | обов'язк. | — | Текст для озвучки |
| tts_provider | опц. | "google" | TTS провайдер (дивись розділ Провайдери) |
| tts_voice | опц. | з профілю | Назва голосу (дивись розділ Голоси) |
| tts_speed | опц. | 1.0 | 0.8 · 1.0 · 1.2 · 1.5 |
| tts_scene | опц. | null | Інструкція стилю мовлення (для Gemini TTS) |
| tts_style | опц. | null | Пресет стилю: standard · calm · expressive · energetic · dramatic · cheerful (Gemini та ElevenLabs) |
Тип: subtitles — субтитри на відео
Накладає karaoke-субтитри на готове відео через Whisper + FFmpeg. Тариф Standard+.
{
"type": "subtitles", "file": "upload_id_або_https_url",
"language": "uk", "sub_style": "yellow_basic",
"sub_position": "bottom", "sub_size": "medium"
}
Результат: MP4 з субтитрами у result_url. Секунди рахуються з місячного ліміту.
| Поле | ||
|---|---|---|
| translate_to | опц. | ISO-код цільової мови. Задано → субтитри перекладаються на неї (тайминг зберігається, звук лишається оригінальний). Пропущено → мовою оригіналу |
| auto_text | опц. | ⚡ Авто-текст — написи ключових слів із таймінгів (перекладених) субтитрів. Рахується з квоти авто-тексту |
Тип: pause_removal — видалення пауз
Автоматично вирізає тишу і паузи з відео. Тариф Standard+. Поріг тиші визначається автоматично.
{ "type": "pause_removal", "file": "upload_id_або_https_url" }
Результат: оброблений MP4 у result_url.
Тип: dubbing — AI дублювання
Транскрибує відео, перекладає, синтезує новий голос, мікшує аудіо. Три режими. Доступний на всіх тарифах у межах місячного ліміту.
Режим A: auto — повністю автоматично
{
"type": "dubbing", "mode": "auto",
"file": "upload_id_або_https_url",
"source_lang": "auto", "target_lang": "en",
"tts_provider": "edge", "tts_voice": "en-US-GuyNeural",
"mix_mode": "overlay", "overlay_volume": 20,
"sub_lang": "dubbed", "sub_style": "yellow_basic"
}
| Поле | За замовч. | Опис | |
|---|---|---|---|
| file | обов'язк. | — | upload_id або URL відео для дублювання |
| source_lang | опц. | "auto" | "auto" або будь-який код з розділу Мови ("ar", "fa", "tr"…). Whisper авто-визначає при "auto" |
| target_lang | обов'язк. | — | Мова дублювання — будь-який код з розділу Мови. Якщо провайдер її не озвучує — авто-фолбек на Edge |
| tts_provider | опц. | "edge" | TTS провайдер для нового голосу |
| tts_voice | опц. | авто | Голос для цільової мови |
| mix_mode | опц. | "overlay" | "overlay" (оригінал приглушено) · "replace" (повна заміна) |
| overlay_volume | опц. | 20 | Гучність оригіналу % при mix_mode=overlay (0–100) |
| sub_lang | опц. | "dubbed" | "dubbed" · "original" · "none" · або ISO код мови |
| sub_style | опц. | "yellow_basic" | Стиль субтитрів |
| sub_position | опц. | "bottom" | "top" · "center" · "bottom" |
| tts_style | опц. | null | Пресет стилю: standard · calm · expressive · energetic · dramatic · cheerful (Gemini та ElevenLabs) |
| auto_text | опц. | false | ⚡ Авто-текст поверх дубльованої мови — анімовані написи ключових слів, обрані LLM. Рахується з квоти авто-тексту |
Режим B: semi_auto — з перевіркою (2 кроки)
// Крок 1: транскрипція
{ "type": "dubbing", "mode": "semi_auto", "step": "transcribe",
"file": "upload_id_відео", "source_lang": "uk", "target_lang": "en" }
// → srt_url: скачай, відредагуй, завантаж через /v1/uploads
// Крок 2: рендер з відредагованим SRT
{ "type": "dubbing", "mode": "semi_auto", "step": "render",
"file": "upload_id_відео", "srt_file": "upload_id_твого_srt",
"target_lang": "en", "tts_provider": "edge",
"tts_voice": "en-US-GuyNeural", "mix_mode": "overlay", "overlay_volume": 20 }
Режим C: manual — свій SRT файл
Пропускає транскрипцію. Надаєш власний SRT файл з текстом цільової мови.
{ "type": "dubbing", "mode": "manual",
"file": "upload_id_відео", "srt_file": "upload_id_srt_файлу",
"target_lang": "uk", "tts_voice": "uk-UA-Wavenet-A", "mix_mode": "replace" }
1\n00:00:00,000 --> 00:00:03,500\nТекст рядка\n\n2\n... Таймкоди не повинні перевищувати тривалість відео.Список задач
curl "https://api.reelora.cc/v1/tasks?limit=10&offset=0" -H "X-API-Key: reel_..."
Параметри: limit (за замовч. 20, макс. 100), offset (за замовч. 0).
Статус задачі
{
"task_id": 744, "type": "voiceover", "status": "completed", "progress": 100,
"result_url": "https://cdn.reelora.cc/audio/.../744_a3f.mp3",
"result_url_expires_at": "2026-06-21T23:03:19",
"result_urls": null, "error_message": null,
"created_at": "2026-06-19T23:03:17", "updated_at": "2026-06-19T23:03:19"
}
Async Flow
Статуси задач
Webhooks
Вкажи webhook_url — отримаєш POST коли задача завершиться.
// POST на твій webhook_url
{ "task_id": 744, "status": "completed", "result_url": "https://cdn.reelora.cc/..." }
Мови
Поля language (озвучка/TTS), source_lang і target_lang (дублювання) приймають короткий ISO-код ("fa") або повну локаль ("fa-IR"). Для транскрипції/перекладу Whisper + LLM розуміють ~99 мов — нижче ті, що мають готовий TTS-голос.
31 мова з TTS-голосами:
| код | мова | локаль | TTS-движки |
|---|---|---|---|
| uk | Українська | uk-UA | Edge, Gemini, 11Labs, Google |
| en | English | en-US | Edge, Gemini, 11Labs, Google |
| ru | Русский | ru-RU | Edge, Gemini, 11Labs, Google |
| es | Español | es-ES | Edge, Gemini, 11Labs, Google |
| de | Deutsch | de-DE | Edge, Gemini, 11Labs, Google |
| fr | Français | fr-FR | Edge, Gemini, 11Labs, Google |
| pl | Polski | pl-PL | Edge, Gemini, 11Labs, Google |
| it | Italiano | it-IT | Edge, Gemini, 11Labs, Google |
| pt | Português | pt-BR | Edge, Gemini, 11Labs, Google |
| zh | 中文 | zh-CN | Edge, Gemini, 11Labs, Google |
| ja | 日本語 | ja-JP | Edge, Gemini, 11Labs, Google |
| ar | Арабська (RTL) | ar-SA | Edge, Gemini, 11Labs, Google |
| fa | Перська (RTL) | fa-IR | тільки Edge |
| he | Іврит (RTL) | he-IL | Edge, Google |
| ur | Урду (RTL) | ur-PK | тільки Edge |
| tr | Türkçe | tr-TR | Edge, Gemini, 11Labs, Google |
| hi | Hindi | hi-IN | Edge, Gemini, 11Labs, Google |
| bn | Bengali | bn-BD | Edge, Gemini, Google |
| id | Indonesian | id-ID | Edge, Gemini, 11Labs, Google |
| ms | Malay | ms-MY | Edge, 11Labs, Google |
| vi | Vietnamese | vi-VN | Edge, Gemini, Google |
| th | Thai | th-TH | Edge, Gemini, Google |
| ko | 한국어 | ko-KR | Edge, Gemini, 11Labs, Google |
| nl | Nederlands | nl-NL | Edge, Gemini, 11Labs, Google |
| ro | Română | ro-RO | Edge, Gemini, 11Labs, Google |
| el | Ελληνικά | el-GR | Edge, 11Labs, Google |
| cs | Čeština | cs-CZ | Edge, 11Labs, Google |
| sv | Svenska | sv-SE | Edge, 11Labs, Google |
| az | Azərbaycan | az-AZ | тільки Edge |
| kk | Қазақ | kk-KZ | тільки Edge |
| uz | Oʻzbek | uz-UZ | тільки Edge |
TTS Провайдери
| Провайдер | Значення | Якість | Ліміт |
|---|---|---|---|
| Google (Standard/Wavenet/Chirp) | "google" | Добра | 1M символів/міс |
| Gemini 2.5 TTS | "gemini" | Відмінна | ліміт тарифу |
| Azure Neural | "azure" | Добра | ліміт тарифу |
| Edge TTS (Microsoft) | "edge" | Добра | необмежено |
| HuggingFace | "hf" | Базова | ліміт тарифу |
| ElevenLabs | "elevenlabs" | Преміум | Pro та Pro+ |
Голоси
Google ("google")
Локаль береться з налаштувань акаунту. Змінити: Налаштування → 🌍 Мова.
| tts_voice | Опис |
|---|---|
| Standard-A | Жіночий, базова якість |
| Standard-B | Чоловічий, базова якість |
| Wavenet-A | Жіночий, нейронна якість |
| Wavenet-B | Чоловічий, нейронна якість |
| Journey-F | Жіночий, тільки EN, природній |
| Chirp3-HD-Aoede | Жіночий, мультимовний, HD |
| Chirp3-HD-Puck | Чоловічий, мультимовний, HD |
Gemini 2.5 / 3.1 TTS ("gemini")
Підтримує tts_scene (вільний текст-директива) та tts_style (пресет: standard/calm/expressive/energetic/dramatic/cheerful). Додай -3.1 для варіанту 3.1 (напр. Puck-3.1).
| tts_voice | Характер |
|---|---|
| Zephyr | Bright 🌤 |
| Puck | Upbeat 🎉 |
| Charon | Informative 📚 |
| Kore | Firm 💪 |
| Fenrir | Excitable ⚡ |
| Leda | Youthful 🌱 |
| Aoede | Breezy 🍃 |
| Callirrhoe | Easy-going 😌 |
| Sadachbia | Lively 🎵 |
| Sulafat | Warm 🔥 |
| Achird | Friendly 🤝 |
| Enceladus | Breathy 🌬 |
| Gacrux | Mature 🍷 |
Edge TTS ("edge") — необмежено
| tts_voice | Мова |
|---|---|
| uk-UA-OstapNeural | Українська, чоловічий |
| uk-UA-PolinaNeural | Українська, жіночий |
| en-US-GuyNeural | English US, чоловічий |
| en-US-JennyNeural | English US, жіночий |
| en-GB-RyanNeural | English GB, чоловічий |
| de-DE-ConradNeural | Німецька, чоловічий |
| fr-FR-HenriNeural | Французька, чоловічий |
| es-ES-AlvaroNeural | Іспанська, чоловічий |
| pl-PL-MarekNeural | Польська, чоловічий |
| it-IT-DiegoNeural | Італійська, чоловічий |
| tr-TR-AhmetNeural | Турецька, чоловічий |
| cs-CZ-AntoninNeural | Чеська, чоловічий |
| ru-RU-DmitryNeural | Російська, чоловічий |
ElevenLabs ("elevenlabs") — Pro та Pro+
| tts_voice (ID) | Назва |
|---|---|
| pNInz6obpgDQGcFmaJgB | Adam (чоловічий, мультимовний) |
| 21m00Tcm4TlvDq8ikWAM | Rachel (жіночий, мультимовний) |
| AZnzlk1XvdvUeBnXmlld | Domi (жіночий, мультимовний) |
Фонова музика
Передай точну назву файлу у полі bgm_track. Або завантаж свій MP3 через /v1/uploads і передай bgm_file.
| bgm_track (назва файлу) | Стиль |
|---|---|
| chill_background-lofi-vibes-113884.mp3 | Lofi chill |
| chill_background-the-weekend-117427.mp3 | Lofi weekend |
| bodleasons-lofi-chill-smooth-chill-lofi-for-vlogs-and-background-music-159456.mp3 | Lofi smooth |
| alexgrohl-phonk-505963.mp3 | Phonk |
| white_records-neon-drift-phonk-house-background-music-for-video-27-second-496492.mp3 | Phonk house (27с) |
| white_records-toxic-drift-slap-house-background-music-for-video-stories-37-second-503887.mp3 | Slap house (37с) |
| diamond_tunes-majestic-tides-60sec-286729.mp3 | Cinematic majestic (60с) |
| raspberrymusic-relic-of-honor-cinematic-video-game-epic-478243.mp3 | Cinematic epic |
| raspberrymusic-be-the-change-epic-documentary-corporate-394293.mp3 | Documentary |
| raspberrymusic-triumph-adventure-news-cinematic-394333.mp3 | News cinematic |
| Under_the_Clock.mp3 | Dramatic |
| The_Approaching_Hour.mp3 | Dramatic ambient |
bgm_volume: 0.1 (тихий фон) → 1.0 (повна гучність). За замовчуванням 0.2.
Стилі субтитрів
| sub_style | Опис |
|---|---|
| yellow_basic | Стиль MrBeast — жовті жирні слова |
| purple_green | Neon — фіолетовий + зелений хайлайт |
| minimal_white | Мінімальний білий, чистий |
| news_style | Новинна рядкова стрічка |
| fire_orange | Вогняний помаранчевий хайлайт |
| pop_green | Яскраво-зелений |
| word_box_orange | Помаранчева рамка на слові |
| karaoke_cyan | Karaoke бірюзовий |
| cursor_selection | Виділення курсором |
| single_green_box | Зелена рамка на одному слові |
| business_news | Діловий новинний стиль |
| dynamic_colors | Динамічні кольори |
Формати відео
| format | Співвідношення | Платформи |
|---|---|---|
| 9_16 | 9:16 (вертикальне) | TikTok, Instagram Reels, YouTube Shorts |
| 16_9 | 16:9 (горизонтальне) | YouTube, Desktop |
| 1_1 | 1:1 (квадрат) | Instagram Feed, Facebook |
| original | оригінал | Зберегти розміри джерела |
Вимоги тарифів
| Функція | Free | Standard | Pro | Pro+ |
|---|---|---|---|---|
| video | ✅ | ✅ | ✅ | ✅ |
| transcription | ✅ | ✅ | ✅ | ✅ |
| audio (TTS) | ✅ | ✅ | ✅ | ✅ |
| subtitles | ✅ | ✅ | ✅ | ✅ |
| pause_removal | ✅ | ✅ | ✅ | ✅ |
| dubbing | ✅ | ✅ | ✅ | ✅ |
| ElevenLabs голоси | ❌ | ❌ | ✅ | ✅ |
| API доступ | ✅ | ✅ | ✅ | ✅ |
Коди помилок
| HTTP | Причина |
|---|---|
| 401 | Відсутній або невірний X-API-Key |
| 403 | Функція недоступна на поточному тарифі |
| 404 | Задача або файл не знайдені (upload_id міг протухнути після 2 год) |
| 413 | Файл перевищує 500 MB |
| 415 | Непідтримуваний тип файлу |
| 429 | Перевищено місячний ліміт або 30 запитів/хв |
| 500 | Внутрішня помилка сервера |
{ "detail": "Monthly video render limit exceeded" }
Приклад: Python — повний пайплайн відео
import httpx, time
API_KEY = "reel_xxxxxxxx_..."
BASE = "https://api.reelora.cc"
H = {"X-API-Key": API_KEY}
def poll(task_id):
while True:
r = httpx.get(f"{BASE}/v1/tasks/{task_id}", headers=H).json()
print(f" status={r['status']} progress={r.get('progress')}%")
if r["status"] == "completed": return r["result_url"]
if r["status"] == "failed": raise RuntimeError(r["error_message"])
time.sleep(3)
with open("photo.jpg", "rb") as f:
upload = httpx.post(f"{BASE}/v1/uploads", headers=H, files={"file": f}).json()
task = httpx.post(f"{BASE}/v1/tasks", headers=H, json={
"type": "video",
"photos": [upload["upload_id"]],
"text": "Breaking news from our channel.",
"format": "9_16",
"tts_provider": "google",
"tts_voice": "Chirp3-HD-Aoede",
"subtitles": True,
"sub_style": "news_style",
"bgm_track": "raspberrymusic-triumph-adventure-news-cinematic-394333.mp3",
"bgm_volume": 0.15,
}).json()
print("Завантажити:", poll(task["task_id"]))
Приклад: Python — дублювання semi_auto
# Крок 1: транскрипція
with open("video.mp4", "rb") as f:
vid = httpx.post(f"{BASE}/v1/uploads", headers=H, files={"file": f}).json()
t1 = httpx.post(f"{BASE}/v1/tasks", headers=H, json={
"type": "dubbing", "mode": "semi_auto", "step": "transcribe",
"file": vid["upload_id"], "source_lang": "uk", "target_lang": "en",
}).json()
srt_url = poll(t1["task_id"])
# скачай srt_url → відредагуй → збережи як edited.srt
# Крок 2: рендер з відредагованим SRT
with open("edited.srt", "rb") as f:
srt = httpx.post(f"{BASE}/v1/uploads", headers=H, files={"file": f}).json()
t2 = httpx.post(f"{BASE}/v1/tasks", headers=H, json={
"type": "dubbing", "mode": "semi_auto", "step": "render",
"file": vid["upload_id"], "srt_file": srt["upload_id"],
"target_lang": "en", "tts_provider": "edge",
"tts_voice": "en-US-GuyNeural",
"mix_mode": "overlay", "overlay_volume": 20,
}).json()
print("Дубльоване відео:", poll(t2["task_id"]))
Приклад: JavaScript / Node.js
const API_KEY = "reel_xxxxxxxx_...";
const BASE = "https://api.reelora.cc";
const H = { "X-API-Key": API_KEY, "Content-Type": "application/json" };
async function poll(taskId) {
while (true) {
await new Promise(r => setTimeout(r, 3000));
const d = await fetch(`${BASE}/v1/tasks/${taskId}`, { headers: H }).then(r => r.json());
if (d.status === "completed") return d.result_url;
if (d.status === "failed") throw new Error(d.error_message);
}
}
const { task_id } = await fetch(`${BASE}/v1/tasks`, {
method: "POST", headers: H,
body: JSON.stringify({ type: "audio", text: "Привіт з JS!", tts_provider: "google", tts_voice: "Chirp3-HD-Puck" }),
}).then(r => r.json());
console.log("MP3:", await poll(task_id));
Приклад: curl — транскрипція
# Завантажуємо файл
UPLOAD=$(curl -s -X POST https://api.reelora.cc/v1/uploads \
-H "X-API-Key: reel_..." -F "[email protected]" \
| python3 -c "import sys,json; print(json.load(sys.stdin)['upload_id'])")
# Задача транскрипції
TASK=$(curl -s -X POST https://api.reelora.cc/v1/tasks \
-H "X-API-Key: reel_..." -H "Content-Type: application/json" \
-d "{\"type\":\"transcription\",\"file\":\"$UPLOAD\",\"language\":\"uk\",\"output_format\":\"both\"}" \
| python3 -c "import sys,json; print(json.load(sys.stdin)['task_id'])")
# Polling
while true; do
RESP=$(curl -s https://api.reelora.cc/v1/tasks/$TASK -H "X-API-Key: reel_...")
STATUS=$(echo $RESP | python3 -c "import sys,json; print(json.load(sys.stdin)['status'])")
echo "Status: $STATUS"
[ "$STATUS" = "completed" ] && echo $RESP | python3 -m json.tool && break
[ "$STATUS" = "failed" ] && echo "Failed!" && break
sleep 3
done