API RapidVideoMaker
REST API позволяет обрабатывать видеофайлы из любого HTTP-клиента — Python-скрипты, n8n-воркфлоу, сторонние инструменты. Доступно пять режимов: Объединение видео (несколько MP4), Редактирование аудио (1 MP4 + 1 MP3), Создание видео (1 JPG/PNG + 1 MP3), Наложение видео (2 MP4, картинка в картинке). Обработка асинхронная: отправьте файлы, затем опрашивайте результат.
Полный рабочий процесс
Каждая интеграция следует одной и той же последовательности из 4 шагов:
POST /api/v1/render.phpmultipart/form-data с вашим Bearer-токеном. 1 JPG/PNG + 1 MP3 + mode=image_to_video → генерация видео. 1 MP4 + 1 MP3 → редактирование аудио (mode=mix_audio для наложения). Несколько MP4 → объединение. Сервер возвращает уникальный job_id.GET /api/v1/jobs.php?job_id=…queued → processing → ready (или error). Ответ содержит позицию в очереди и расчётное оставшееся время.ready, ответ содержит готовое поле download_url.GET /api/download.php?job_id=…410 Gone.Аутентификация
Каждый запрос должен содержать ваш API-токен. Принимаются два формата:
Ваш токен доступен в вашем личном кабинете — один токен на аккаунт, создаётся автоматически при регистрации. Отображается в открытом виде только один раз — храните его в безопасности. При утрате можно регенерировать из личного кабинета.
Квота
Каждый аккаунт имеет 20 запросов в день, общих для веб-интерфейса и API. Неудавшиеся задания не расходуют квоту. Счётчик сбрасывается в полночь по UTC.
Ответы POST содержат quota_used и quota_remaining. При превышении лимита сервер отвечает 429.
Очередь
Обрабатывается одно задание за раз. Если несколько заданий отправлены одновременно, они ставятся в очередь по порядку поступления. В ожидании ответ статуса содержит:
queue_position— позиция задания в очереди (1 = следующее)queue_total— общее количество ожидающих заданийeta_minutes— расчётное время до начала обработки
/api/v1/jobs.php принимает не более 12 вызовов в минуту на токен. Сверх этого сервер отвечает 429 с заголовком Retry-After: 5. Рекомендация: 10 секунд между вызовами. Доступные переходы
Передайте transition_type=none (по умолчанию) для прямого объединения или один из типов ниже для перехода между клипами:
Длительность (transition_duration) — от 0,2 до 2,0 секунд. Если клип слишком короткий, переход игнорируется.
Endpoints
Пять режимов, доступных через поле mode (опустите mode при нескольких MP4 для автоопределения fusion):
| Применение | Режим API | Необходимые файлы | Описание |
|---|---|---|---|
| Объединить видео | fusion |
2–20 файлов MP4 | Клипы собираются последовательно в указанном порядке. Опциональные переходы между клипами. |
| Редактировать аудио | add_audio или mix_audio |
1 MP4 + 1 MP3 | Заменяет или дополняет аудиодорожку видео. Видеодорожка никогда не перекодируется (-c:v copy).add_audio — оригинальный звук удаляется и заменяется MP3.mix_audio — оригинальный звук сохраняется и MP3 накладывается (amix). |
| Создать видео | image_to_video |
1 JPG/PNG + 1 MP3 | Создаёт видео из статичного изображения и аудиофайла. Текстовый оверлей, затухание, разрешение и FPS настраиваются через поле options. |
| Наложение видео | overlay_video |
2 MP4 | Накладывает второе видео поверх основного. Позиция, размер, прозрачность и аудио настраиваются через поле options. |
| Текст в MP3 | text_to_mp3 |
(только текст) | Преобразует текст в речь и возвращает MP3-файл. Загружать файлы не нужно — передайте mode=text_to_mp3, text и lang как поля формы. Поддерживает все 20 языков сайта. |
add_audio и mix_audio принимают только 1 MP4 + 1 MP3. image_to_video только 1 JPG/PNG + 1 MP3. MIME-типы проверяются по magic bytes.-c:v copy).Общие параметры (multipart/form-data)
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
| videos[] | File[] | ДА | Файлы для обработки. В зависимости от режима: 2–20 MP4, или 1 MP4 + 1 MP3, или 1 изображение (JPG/PNG) + 1 MP3. Макс. 500 МБ на файл. |
| mode | string | * | image_to_video | add_audio | mix_audio. Обязательно для этих трёх режимов. Игнорируется (автоопределение) если все файлы MP4 (fusion). Если поле mode указано, загруженные файлы должны точно совпадать. |
| order | JSON | Только режим fusion — JSON-массив индексов, определяющих порядок клипов. | |
| transition_type | string | Только режим fusion. По умолчанию: none. См. список доступных переходов. | |
| transition_duration | float | Только режим fusion. Длительность 0,2–2,0 сек. По умолчанию: 0.5. | |
| options | JSON | Только режим image_to_video — JSON-объект параметров рендеринга (см. ниже). | |
| callback_url | string | Публичный URL (http/https), вызываемый при завершении задания. Ответ содержит webhook_secret. |
Параметры options — режим image_to_video
Все необязательны. Неуказанные значения → значения worker по умолчанию.
| Ключ | Тип | По умолчанию | Описание |
|---|---|---|---|
| text | string | "" | Текст, отображаемый как оверлей. Пусто = нет текста. Макс. 500 символов. |
| font_size | int | 60 | Размер шрифта в пикселях. Диапазон: 10–300. Рекомендуется: 36, 48, 60, 72, 96. |
| text_color | string | "white" | Цвет текста (напр. white, yellow, #ffffff). |
| text_position | string | "center" | Позиция текста: center, top, bottom. |
| box | bool | true | Полупрозрачный фон за текстом. |
| box_color | string | "black@0.4" | Цвет + прозрачность в формате FFmpeg: цвет@прозрачность. Прозрачность: 0,0–1,0 (напр. black@0.4 = 40% чёрного). |
| fade_duration | float | 0.5 | Длительность плавного появления/исчезновения в секундах (0–2). 0 = без эффекта. |
| width | int | 1080 | Ширина видео в пикселях (64–3840, чётное число). Стандарт: 1080/1920/720/1280. |
| height | int | 1920 | Высота видео в пикселях (64–3840, чётное число). |
| fps | int | 24 | Частота кадров (1–60). |
| image_fit | string | "contain" | Режим кадрирования: contain = всё изображение видно, пустые области заполняются bg_color; cover = изображение масштабируется, лишние края обрезаются. bg_color игнорируется в режиме cover. |
| bg_color | string | "black" | Цвет фона если изображение не заполняет разрешение — только при image_fit=contain (напр. black, white, #1a1a2e). |
| enable_image_motion | bool | false | Включает анимацию фото. При false изображение остаётся статичным. При true применяется эффект image_motion_effect через FFmpeg zoompan. |
| image_motion_effect | string | "ken_burns" | Эффект анимации. Значения: zoom_in, zoom_out, pan_left_to_right, pan_right_to_left, pan_top_to_bottom, pan_bottom_to_top, zoom_pan_soft, ken_burns. По умолчанию: ken_burns. |
| motion_intensity | float | 1.0 | Интенсивность анимации фото (0,25–2,0). Умножает амплитуду зума и скорость панорамирования. |
| text_effect | string | "none" | Анимация текста. Значения: none, fade_in, slide_up, slide_down, slide_left, bounce. |
| text_effect_intensity | float | 1.0 | Интенсивность анимации текста (0,25–2,0). |
| text_border_width | int | 0 | Толщина чёрного контура в пикселях (0 = отключено, 1–10). Улучшает читаемость. |
| text_mode | string | "static" | Режим отображения текста. static (по умолчанию): полный текст виден с первого кадра. word_by_word: слова появляются по одному в темпе word_reveal_speed. Исключает text_effect: при text_mode=word_by_word text_effect игнорируется. |
| word_reveal_speed | float | 1.5 | Скорость отображения в словах в секунду (0,3–5,0, по умолчанию 1,5). Только при text_mode=word_by_word. Рекомендуется для синхронизации с OpenAI TTS: 2,0. |
| word_anim | string | "none" | Анимация появления каждого слова. none (по умолчанию): мгновенное появление. fade: каждое слово появляется с затуханием 0.2с и перекрёстным переходом. Только при text_mode=word_by_word. |
Параметры options — режим overlay_video
Все необязательны. Порядок загрузки важен: первый файл — основное видео (фон), второй файл — оверлей (передний план). Используйте chroma_key для удаления зелёного фона с оверлея.
| Ключ | Тип | По умолчанию | Описание |
|---|---|---|---|
| position | string | "bottom-right" | Угол расположения оверлея: top-left, top-right, bottom-left, bottom-right или center. |
| scale | float | 0.30 | Размер оверлея как доля ширины основного видео. 0.25 = 25% ширины. Диапазон: 0.05–1.0. |
| opacity | float | 1.0 | Прозрачность оверлея. 1.0 = полностью непрозрачный, 0.0 = невидимый. |
| margin | int | 10 | Отступ в пикселях от края кадра. Игнорируется при position=center. Диапазон: 0–200. |
| audio | string | "main" | Какую аудиодорожку оставить. main: только основное аудио. overlay: только аудио оверлея. mix: обе дорожки смешаны. |
| chroma_key | bool | false | Установите true для удаления зелёного (#00FF00) фона с оверлея — полезно для вебкамеры или анимаций на хромакее. |
| chroma_similarity | float | 0.20 | Допуск хромакея. Низкий = строгое соответствие. Высокий = более широкое удаление. Рекомендуется: 0.10–0.20 для цифрового зелёного, 0.25–0.45 для физического экрана. Диапазон: 0.01–0.60. |
Параметры options — Редактирование аудио (mix_audio)
Доступно только с mode=mix_audio. Игнорируется для add_audio.
| Ключ | Тип | По умолчанию | Описание |
|---|---|---|---|
| mp3_volume | float | 1.0 | Громкость накладываемого MP3 (0,0 = отключено, 1,0 = оригинал, 2,0 = удвоено). Значения выше 1,0 могут вызвать перегрузку. |
Успешный ответ (HTTP 200)
Пример curl — режим image_to_video
Пример curl — Редактирование аудио
Пример curl — режим overlay_video
Пример curl — Объединение видео
Возможные статусы
| Статус | Значение | Дополнительные поля |
|---|---|---|
| queued | В очереди, ещё не обработано | queue_position, queue_total, eta_minutes |
| processing | Обработка FFmpeg в процессе | — |
| ready | Завершено — файл доступен | download_url, created_at, expires_at |
| error | Обработка не удалась | error (message) |
Ответы по статусам
Пример curl
Общие параметры (multipart/form-data)
| apidocs_th_param | Тип | По умолчанию | apidocs_th_desc |
|---|---|---|---|
page | integer | 1 | Page number (starts at 1) |
limit | integer | 20 | Results per page (max 50, default 20) |
Ответы по статусам
Публикует завершённый job (status=ready) на одном или нескольких социальных аккаунтах. Токен должен принадлежать аккаунту участника (не токен администратора).
account_id каждого аккаунта.Общие параметры (multipart/form-data)
| apidocs_th_param | Тип | apidocs_th_required | apidocs_th_desc |
|---|---|---|---|
job_id | string | apidocs_required | ID job (hex 32 символа) завершённого видео |
publications | array | apidocs_required | Массив объектов публикации (макс. 10) |
Объект публикации
| apidocs_th_param | Тип | apidocs_th_required | apidocs_th_desc |
|---|---|---|---|
account_id | integer | apidocs_required | ID подключённого социального аккаунта — отображается на странице Публикаций в личном кабинете |
title | string | — | Название видео (макс. 512 символов) |
description | string | — | Описание видео (макс. 5 000 символов) |
tags | string | — | Теги через запятую (макс. 1 024 символа) |
visibility | string | — | public | private | unlisted — По умолчанию: public |
tiktok_mode | string | — | draft | direct — Только TikTok — по умолчанию: direct |
tiktok_privacy | string | режим direct | Только TikTok — обязательно в режиме direct |
allow_comment | boolean | — | Только TikTok — разрешить комментарии |
allow_duet | boolean | — | Только TikTok — разрешить дуэты |
allow_stitch | boolean | — | Только TikTok — разрешить стич |
your_brand | boolean | — | Только TikTok — органический рекламный контент («Ваш бренд»). |
branded_content | boolean | — | Только TikTok — раскрытие брендированного контента |
tiktok_cover_ms | integer | — | Только TikTok — метка времени кадра обложки в мс (0–60 000, по умолчанию 1 000) |
Ответы по статусам
Коды ошибок для каждой публикации
| apidocs_th_code | Значение |
|---|---|
job_not_ready | Job ещё не завершён |
mode_not_supported | Jobs text_to_mp3 нельзя публиковать |
account_not_found | Аккаунт не найден или отключён |
tiktok_privacy_required | Уровень конфиденциальности обязателен в режиме direct |
publication_failed | Провайдер вернул ошибку во время загрузки |
Пример cURL
Возвращает готовый MP4-файл в виде потока (Content-Type: video/mp4). Токен не требуется. Доступно только когда статус ready.
Файл хранится 2 часа после завершения, затем удаляется. Скачайте его, как только статус станет ready.
Необязательный параметр
| Параметр | Описание |
|---|---|
| filename | Предлагаемое имя для скачиваемого файла (напр. моё-видео.mp4) |
Пример curl
Вебхуки
Вебхуки — альтернатива поллингу: вместо проверки статуса каждые X секунд вы указываете URL и сервер автоматически уведомляет вас о завершении задания.
Как это работает
- Передайте
callback_urlв POST на/api/v1/render.php - Ответ содержит
webhook_secret— сохраните его для проверки подписей - Когда задание достигает
readyилиerror, сервер отправляет подписанный JSON-POSTна ваш URL - Проверьте подпись с помощью
HMAC-SHA256(webhook_secret, raw_body)
callback_url должен быть публично доступным URL. Частные и loopback IP-адреса заблокированы. Тайм-аут: 10 секунд. Полученный payload
Заголовки, отправляемые сервером
| Заголовок | Значение |
|---|---|
| Content-Type | application/json |
| X-RVM-Signature | sha256=<hmac_hex> — HMAC-SHA256 подпись raw body |
| X-RVM-Job-Id | Соответствующий job_id |
Проверка подписи
Коды ошибок
| HTTP | JSON-код | Причина |
|---|---|---|
| 401 | unauthorized | Токен отсутствует, недействителен или отозван |
| 400 | missing_files | Файлы не получены |
| 400 | too_few_files | Отправлено менее 2 файлов |
| 400 | too_many_files | Отправлено более 20 файлов |
| 400 | invalid_mime | Неподдерживаемый файл — принимаются только MP4, MP3 и JPG/PNG (MIME проверяется по magic bytes) |
| 400 | wrong_file_count | Количество файлов не соответствует выбранному режиму |
| 400 | wrong_file_types | Типы файлов не соответствуют выбранному режиму |
| 400 | invalid_file_combination | Комбинация файлов без режима не соответствует ни одному поддерживаемому режиму |
| 400 | invalid_options | Поле options не является корректным JSON или не содержит объект |
| 400 | invalid_option | Значение в options недействительно (цвет, шрифт, позиция…) |
| 400 | file_too_large | Файл превышает 500 МБ |
| 400 | invalid_order | Массив order не является корректной перестановкой |
| 400 | invalid_job_id | Неверный формат job_id (должен быть 32-символьным шестнадцатеричным) |
| 404 | job_not_found | Задание не найдено — job_id неизвестен или никогда не существовал |
| 410 | job_expired | Задание истекло — существовало, но 2-часовое окно прошло |
| 429 | quota_exceeded | Достигнуто 20 успешных заданий/день |
| 429 | rate_limited | Более 12 вызовов/мин на /api/v1/jobs.php — ожидайте Retry-After секунд |
| 500 | server_error | Внутренняя ошибка сервера |
Примеры интеграции
Примеры для каждого режима — установите requests через pip install requests.
Общая конфигурация
Режим image_to_video — изображение + аудио → видео
Редактирование аудио
Режим overlay_video — картинка в картинке
Объединение видео
Поллинг + скачивание (общее для всех режимов)
Два подхода в n8n: поллинг (цикл статусов) или вебхук (сервер вызывает n8n). Вебхук рекомендуется — чище, без лишней нагрузки.
Подход A — Вебхук (рекомендуется)
Только 3 узла, без цикла.
Узел 1 — Триггер Webhook
Добавьте узел Webhook как вход рабочего процесса (метод POST). Запишите сгенерированный URL, напр. https://ваш-n8n.com/webhook/rvm-callback.
Узел 2 — Создать задание (HTTP Request)
| Метод | POST |
| URL | https://rapidvideomaker.com/api/v1/render.php |
| Аутентификация | Header Auth — Authorization: Bearer rvm_… |
| Тип содержимого body | Form-Data Multipart |
| Body params | Binary-поле videos[] для каждого клипа + Text-поле callback_url = URL узла webhook |
Сохраните webhook_secret из ответа в переменной рабочего процесса.
Узел 3 — Обработать результат (в рабочем процессе, активированном вебхуком)
Когда n8n получает POST от сервера, $json.status — это ready или error. При ready, $json.download_url содержит прямой URL скачивания.
{{ $headers['x-rvm-signature'] }} с sha256= + HMAC-SHA256 raw body. Узел Code: crypto.createHmac('sha256', secret).update(body).digest('hex').Подход B — Поллинг (без вебхука)
5 узлов, цикл статусов каждые 10 сек.
Узел 1 — Создать задание — та же конфигурация, без callback_url.
Узел 2 — Ожидание — 10 секунд.
Узел 3 — Опрос статуса (HTTP Request GET)
| URL | https://rapidvideomaker.com/api/v1/jobs.php |
| Параметры запроса | job_id = {{ $('Узел 1').item.json.job_id }} |
| Аутентификация | Аутентификация заголовком — тот же токен |
Узел 4 — If: {{ $json.status }} === 'ready' → true: Узел 5 / false: вернуться к Узлу 2.
Узел 5 — Скачать: HTTP Request GET на {{ $json.download_url }}, формат ответа File.
Шаг 1 — Создать задание (выберите режим)
Шаг 2 — Поллинг
Шаг 3 — Скачивание
Рекомендации
- Частота поллинга: endpoint
/api/v1/jobs.phpограничен 12 вызовами/мин на токен. Минимум 5 секунд между вызовами (10 сек. рекомендуется). - Тайм-аут: реализуйте тайм-аут на стороне клиента (напр. 10 минут). Если задание не
ready, считайте это ошибкой. - Скачивайте быстро: как только статус
ready, скачайте файл. Он удаляется через 2 часа после завершения. - Управление квотой: проверяйте
quota_remainingв ответе POST. При0следующее задание будет отклонено с429. - Сетевые ошибки: при сетевой ошибке во время поллинга подождите и повторите — задание продолжает выполняться на сервере независимо.
ready.