API RapidVideoMaker
The REST API lets you process video files from any HTTP client — Python scripts, n8n workflows, third-party tools. Five modes available: Merge videos (multiple MP4/MOV), Edit audio (1 MP4/MOV + 1 MP3), Create a video (1 JPG/PNG + 1 MP3), Overlay video (2 MP4/MOV picture-in-picture). Processing is asynchronous: submit files, then poll for the result.
Pełny przepływ pracy
Każda integracja przebiega według tej samej sekwencji 4 kroków:
POST /api/v1/render.phpmultipart/form-data z tokenem Bearer. 1 JPG/PNG + 1 MP3 + mode=image_to_video → generowanie wideo. 1 MP4/MOV + 1 MP3 → edycja audio (mode=mix_audio do nakładania). Wiele MP4/MOV → scalenie. Serwer zwraca unikalny job_id. Albo 1 obraz + options.text + options.voice: głos jest generowany z tekstu, bez MP3.GET /api/v1/jobs.php?job_id=…queued → processing → ready (lub error). Odpowiedź zawiera pozycję w kolejce i szacowany czas.ready, odpowiedź zawiera gotowe pole download_url.GET /api/download.php?job_id=…410 Gone.Uwierzytelnianie
Każde żądanie musi zawierać token API. Akceptowane są dwa formaty:
Twój token jest dostępny w przestrzeni członkowskiej — jeden token na konto, tworzony automatycznie przy rejestracji. Jest wyświetlany w postaci jawnej tylko raz — przechowuj go bezpiecznie. W razie utraty możesz go zregenerować ze swojej przestrzeni członkowskiej.
Limit
Każde konto członkowskie ma 20 żądań dziennie, wspólnych dla interfejsu webowego i API. Nieudane zadania nie zużywają limitu. Licznik resetuje się o północy UTC.
Odpowiedzi POST zawierają quota_used i quota_remaining. Po przekroczeniu limitu serwer odpowiada 429.
Kolejka
Jedno zadanie jest przetwarzane na raz. Jeśli kilka zadań zostanie przesłanych jednocześnie, są kolejkowane w kolejności przyjęcia. Podczas oczekiwania odpowiedź statusu zawiera:
queue_position— pozycja zadania w kolejce (1 = następne)queue_total— całkowita liczba oczekujących zadańeta_minutes— szacowany czas do rozpoczęcia przetwarzania
/api/v1/jobs.php akceptuje maksymalnie 12 wywołań na minutę na token. Powyżej serwer odpowiada 429 z nagłówkiem Retry-After: 5. Zalecenie: 10 sekund między wywołaniami. Dostępne przejścia
Przekaż transition_type=none (domyślnie) dla bezpośredniego scalenia lub jeden z poniższych typów dla przejścia między klipami:
Czas trwania (transition_duration) wynosi między 0,2 a 2,0 sekundy. Jeśli klip jest za krótki, przejście jest ignorowane.
Endpointy
Five modes, accessible via the mode field (omit mode with multiple MP4s to auto-detect fusion):
| Użycie | Tryb API | Wymagane pliki | Opis |
|---|---|---|---|
| Scal wideo | fusion |
2–20 plików MP4/MOV | Klipy są składane sekwencyjnie w podanej kolejności. Opcjonalne przejścia między klipami. |
| Edytuj audio | add_audio lub mix_audio |
1 MP4/MOV + 1 MP3 | Zastępuje lub wzbogaca ścieżkę audio wideo. Ścieżka wideo nigdy nie jest ponownie kodowana (-c:v copy).add_audio — oryginalne audio jest usuwane i zastępowane MP3.mix_audio — oryginalne audio jest zachowywane i MP3 jest nakładane (amix). |
| Utwórz wideo | image_to_video |
1 JPG/PNG + 1 MP3 — lub 1 JPG/PNG + tekst (options.text + options.voice): głos jest generowany |
Tworzy wideo z nieruchomego obrazu i Twojego MP3 — albo z samego tekstu (options.text), dla którego generowany jest głos (options.voice). Nakładka tekstowa (stała, słowo po słowie lub karaoke), przejścia, rozdzielczość i fps konfigurowane przez pole options. |
| Overlay video | overlay_video |
2 MP4/MOV | Nakłada drugi film na film główny. Pozycja, rozmiar, przezroczystość i dźwięk konfigurowalne przez pole options. |
| Dodaj tekst | add_text |
1 MP4/MOV | Nakłada tekst na istniejące wideo (rozdzielczość, liczba klatek i dźwięk zostają zachowane). Te same ustawienia tekstu co w image_to_video oraz moment pojawienia się tekstu. Pole options.text jest wymagane. |
| Tekst na MP3 | text_to_mp3 |
(tylko tekst) | Konwertuje tekst na mowę i zwraca plik MP3. Nie trzeba przesyłać pliku — wyślij mode=text_to_mp3, text i lang jako pola formularza. Obsługuje wszystkie 20 języków witryny. |
add_audio i mix_audio akceptują tylko 1 MP4/MOV + 1 MP3. image_to_video tylko 1 JPG/PNG + 1 MP3. Typy MIME są weryfikowane przez magic bytes. Wyjątek: z options.text + options.voice tryb image_to_video przyjmuje 1 obraz bez MP3 — głos jest generowany z tekstu.-c:v copy). Z options.voice długość image_to_video równa się długości głosu wygenerowanego z tekstu (+0,6 s).Wspólne parametry (multipart/form-data)
| Pole | Typ | Wym. | Opis |
|---|---|---|---|
| videos[] | File[] | TAK | Pliki do przetworzenia. W zależności od trybu: 2–20 MP4/MOV, lub 1 MP4/MOV + 1 MP3, lub 1 obraz (JPG/PNG) + 1 MP3. Max. 500 MB na plik. |
| mode | string | * | image_to_video | add_audio | mix_audio | overlay_video | text_to_mp3. Wymagane dla tych trybów innych niż fusion. Pominięcie mode przy samych plikach MP4/MOV zawsze uruchamia fusion (łączenie przez kopiowanie strumienia) — nigdy overlay_video, nawet przy przesłaniu dokładnie 2 plików MP4/MOV. Do edycji audio: add_audio usuwa oryginał, mix_audio zachowuje go i nakłada. Jeśli podano pole mode, przesłane pliki muszą dokładnie pasować — w przeciwnym razie żądanie zostanie odrzucone. add_text jest również akceptowany: to jedyny tryb przyjmujący pojedynczy plik MP4/MOV i wymagający options.text. |
| order | JSON | Tylko tryb fusion — tablica JSON indeksów definiujących kolejność klipów. | |
| transition_type | string | Tylko tryb fusion. Domyślnie: none. Zobacz listę dostępnych przejść. | |
| transition_duration | float | Tylko tryb fusion. Czas trwania 0,2–2,0 sek. Domyślnie: 0.5. | |
| options | JSON | Obiekt JSON z parametrami renderowania dla image_to_video, add_text, mix_audio i overlay_video (zobacz tabele poniżej). | |
| timings | File / string | image_to_video / add_text: plik z czasami karaoke (SRT lub LRC, maks. 200 KB) — pole pliku lub zwykły tekst. Wyświetlany tekst pochodzi z pliku; wymusza text_mode=karaoke; nie działa razem z voice. | |
| callback_url | string | Publiczny URL (http/https) wywoływany po zakończeniu zadania. Odpowiedź zawiera webhook_secret. |
Parametry options — tryb image_to_video
Wszystkie opcjonalne. Niepodane wartości → domyślne workera.
| Klucz | Typ | Domyślnie | Opis |
|---|---|---|---|
| text | string | "" | Tekst wyświetlany jako nakładka. Puste = brak tekstu. Max. 500 znaków. |
| font | string | "default" | Czcionka tekstu, według identyfikatora. Akceptowane wartości: default, dejavu-sans-bold, dejavu-serif, liberation-serif, dejavu-mono, amiri, noto-sans-sc (简体中文), noto-sans-tc (繁體中文), noto-sans-jp (日本語), noto-sans-kr (한국어), noto-sans-hebrew (עברית), noto-sans-thai (ไทย). default = czcionka standardowa (z obsługą emoji); amiri = czcionka Naskh, idealna dla tekstu arabskiego. Każda inna wartość zwraca błąd invalid_option. Emoji są wyświetlane tylko z default. |
| font_size | int | 60 | Rozmiar czcionki w pikselach. Zakres: 10–300. Zalecane: 36, 48, 60, 72, 96. |
| text_color | string | "white" | Kolor tekstu (np. white, yellow, #ffffff). |
| text_position | string | "center" | Pozycja tekstu: center, top, bottom. |
| box | bool | true | Półprzezroczyste tło za tekstem. |
| box_color | string | "black@0.4" | Kolor + krycie w formacie FFmpeg: kolor@krycie. Krycie: 0,0–1,0 (np. black@0.4 = 40% czerni). |
| fade_duration | float | 0.5 | Czas trwania wejścia/wyjścia w sekundach (0–2). 0 = brak zanikania. |
| width | int | 1080 | Szerokość wideo w pikselach (64–3840, parzysta). Standard: 1080/1920/720/1280. |
| height | int | 1920 | Wysokość wideo w pikselach (64–3840, parzysta). |
| fps | int | 24 | Liczba klatek na sekundę (1–60). |
| image_fit | string | "contain" | contain: Pokaż cały obraz lub film i wypełnij wolne obszary wybranym tłem. solid (domyślnie) lub blur. Rozmycie wymaga image_fit=contain. Tekst pozostaje ostry. cover: Obraz jest powiększany, aby wypełnić ramkę, wyśrodkowany — krawędzie są przycinane. |
| bg_color | string | "black" | background_mode=solid: Kolor tła gdy obraz nie wypełnia rozdzielczości — tylko przy image_fit=contain (np. black, white, #1a1a2e). |
| background_mode | string | "solid" | solid (domyślnie) lub blur. Rozmycie wymaga image_fit=contain. Tekst pozostaje ostry. |
| blur_strength | number | 20 | Liczba od 1 do 50; domyślnie 20. Rozmycie Gaussa tylko dla tła. |
| enable_image_motion | bool | false | Włącza animację zdjęcia. Przy false obraz pozostaje statyczny. Przy true efekt image_motion_effect jest stosowany przez FFmpeg zoompan. |
| image_motion_effect | string | "ken_burns" | Efekt animacji. Wartości: 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. Domyślnie: ken_burns. |
| motion_intensity | float | 1.0 | Intensywność animacji zdjęcia (0,25–2,0). Mnoży amplitudę zoomu i prędkość panoramy. |
| text_effect | string | "none" | Animacja tekstu. Wartości: none, fade_in, slide_up, slide_down, slide_left, bounce. |
| text_effect_intensity | float | 1.0 | Intensywność animacji tekstu (0,25–2,0). |
| text_border_width | int | 0 | Grubość czarnego obrysu w pikselach (0 = wyłączone, 1–10). Poprawia czytelność. |
| text_border_color | string | "black" | Kolor obrysu znaków (ten sam format co text_color, domyślnie "black"). Używany, gdy text_border_width > 0. |
| text_mode | string | "static" | Tryb wyświetlania tekstu. static (domyślny): pełny tekst widoczny od pierwszej klatki. word_by_word: słowa pojawiają się jedno po drugim w tempie word_reveal_speed. Wyklucza text_effect: gdy text_mode=word_by_word, text_effect jest ignorowany. "karaoke": tekst zmienia kolor w rytm dźwięku, strona po stronie (do 1000 znaków). Z voice synchronizowany słowo po słowie, w przeciwnym razie rozkładany na dźwięk według długości słów. |
| word_reveal_speed | float | 1.5 | Prędkość odkrywania słów na sekundę (0,3–5,0, domyślnie 1,5). Tylko z text_mode=word_by_word. Zalecana wartość do synchronizacji z OpenAI TTS: 2,0. |
| word_anim | string | "none" | Animacja pojawiania się każdego słowa. none (domyślnie): natychmiastowe wyświetlenie. fade: każde nowe słowo pojawia się z zanikaniem 0.2s i crossfade. Tylko przy text_mode=word_by_word. |
| karaoke_style | string | "fill" | Styl karaoke: fill (wypowiedziane słowa przyjmują kolor wyróżnienia), sweep (każde słowo wypełnia się stopniowo; całe słowa w pismach od prawej do lewej) lub highlight (kolorowane jest tylko bieżące słowo). |
| highlight_color | string | "#FFD200" | Kolor wypowiedzianych słów / bieżącego słowa w trybie karaoke (ten sam format co text_color). |
| karaoke_lines | int | 2 | Liczba wierszy na stronę w trybie karaoke (1–4). |
| voice | string | "" | ID głosu (ta sama lista co w text_to_mp3, np. pl-PL-ZofiaNeural): głos jest generowany z text w tym samym zadaniu. image_to_video potrzebuje wtedy tylko obrazu (dodatkowo wysłany MP3 zostanie odrzucony). W trybie karaoke każde słowo jest zsynchronizowane z głosem. |
| voice_rate | int | 0 | Szybkość wygenerowanego głosu w % (od −50 do +50). |
Karaoke z własnymi czasami (SRT / LRC)
Wyślij plik SRT lub LRC w polu timings: każda linia pojawia się w swoim czasie i tworzy stronę karaoke (do 500 linii, 5000 znaków). SRT: linia znika w czasie zakończenia. LRC: linia pozostaje do następnej (pusta linia ją kończy); obsługiwane są [offset:] i czasy słów rozszerzonego LRC <mm:ss.xx> — w przeciwnym razie każda linia jest rozkładana na swój czas trwania. W add_text czasy liczone są od początku filmu, przesunięte o text_start.
Parametry options — tryb overlay_video
Wszystkie opcjonalne. Kolejność przesyłania ma znaczenie: pierwszy plik to główny film (tło), drugi plik to nakładka (pierwszy plan). Użyj chroma_key, aby usunąć zielone tło z nakładki.
| Klucz | Typ | Domyślnie | Opis |
|---|---|---|---|
| position | string | "bottom-right" | Narożnik, w którym umieszczana jest nakładka: top-left, top-right, bottom-left, bottom-right lub center. |
| scale | float | 0.30 | Rozmiar nakładki jako ułamek szerokości głównego filmu. 0.25 = 25% szerokości. Zakres: 0.05–1.0. |
| opacity | float | 1.0 | Przezroczystość nakładki. 1.0 = całkowicie nieprzezroczysta, 0.0 = niewidoczna. |
| margin | int | 10 | Odstęp w pikselach między nakładką a krawędzią kadru. Ignorowany przy position=center. Zakres: 0–200. |
| audio | string | "main" | Która ścieżka audio ma pozostać. main: tylko audio głównego filmu. overlay: tylko audio nakładki. mix: obie ścieżki zmiksowane. |
| chroma_key | bool | false | Ustaw true, aby usunąć czyste zielone tło (#00FF00) z nakładki — przydatne dla kamerki lub animacji nagranych na zielonym ekranie. |
| chroma_similarity | float | 0.20 | Tolerancja chromakey. Niska = ścisłe dopasowanie. Wysoka = szersze usuwanie. Zalecane: 0.10–0.20 dla zieleni cyfrowej, 0.25–0.45 dla ekranu fizycznego. Zakres: 0.01–0.60. |
Parametry options — tryb add_text
Tekst jest wymagany. Domyślnie zachowane są format, liczba klatek i dźwięk. output_format umożliwia zmianę kadru z image_fit, bg_color i background_mode. width, height, fps i ruch zdjęcia są nadal ignorowane. Maksymalna długość: 15 minut.
{"text":"Hello","output_format":"portrait","image_fit":"contain","background_mode":"blur","blur_strength":20}
| Klucz | Typ | Domyślnie | Opis |
|---|---|---|---|
| text | string | TAK | Tekst do nałożenia. Wymagany, 1–200 znaków. |
| text_start | float | 0 | Sekunda, w której pojawia się tekst (≥ 0). Musi przypadać przed końcem wideo. |
| text_duration | float | 0 | Jak długo tekst pozostaje widoczny, w sekundach (0,1–3600). 0 = do końca wideo. |
| font | string | "default" | Czcionka tekstu, według identyfikatora. Akceptowane wartości: default, dejavu-sans-bold, dejavu-serif, liberation-serif, dejavu-mono, amiri, noto-sans-sc (简体中文), noto-sans-tc (繁體中文), noto-sans-jp (日本語), noto-sans-kr (한국어), noto-sans-hebrew (עברית), noto-sans-thai (ไทย). default = czcionka standardowa (z obsługą emoji); amiri = czcionka Naskh, idealna dla tekstu arabskiego. Każda inna wartość zwraca błąd invalid_option. Emoji są wyświetlane tylko z default. |
| font_size | int | 60 | Rozmiar czcionki podany dla wideo, którego krótszy bok ma 1080 px, i automatycznie skalowany do rzeczywistej rozdzielczości — ta sama wartość wygląda tak samo w 720p i 4K. Zakres: 10–300. |
| fade_duration | float | 0.5 | Czas zanikania tekstu (nie wideo) przy pojawianiu się i znikaniu, w sekundach. Zakres: 0–2. |
| text_color, box, box_color, text_position, text_border_width, text_border_color, text_effect, text_effect_intensity, text_mode, word_reveal_speed, word_anim, karaoke_style, highlight_color, karaoke_lines, voice, voice_rate | — | — | Identyczne jak w image_to_video (zobacz tabelę powyżej). |
| original_volume | float | 0.3 | Z voice: głośność oryginalnego dźwięku filmu pod głosem (0–2, domyślnie 0.3; 0 = zastąpiony). Głos zaczyna się w text_start; tekst pozostaje widoczny do jego końca, a jeśli głos wykracza poza koniec filmu, ostatnia klatka zostaje zatrzymana. |
| background_mode | string | "solid" | solid (domyślnie) lub blur. Rozmycie wymaga image_fit=contain. Tekst pozostaje ostry. |
| blur_strength | number | 20 | Liczba od 1 do 50; domyślnie 20. Rozmycie Gaussa tylko dla tła. |
| output_format | string | "original" | Tylko add_text: original (domyślnie), portrait (1080×1920), square (1080×1080), landscape (1920×1080). Rozmycie wymaga formatu innego niż original. |
| image_fit | string | "contain" | contain: Pokaż cały obraz lub film i wypełnij wolne obszary wybranym tłem. solid (domyślnie) lub blur. Rozmycie wymaga image_fit=contain. Tekst pozostaje ostry. cover: Obraz jest powiększany, aby wypełnić ramkę, wyśrodkowany — krawędzie są przycinane. |
| bg_color | string | "black" | background_mode=solid: Kolor tła gdy obraz nie wypełnia rozdzielczości — tylko przy image_fit=contain (np. black, white, #1a1a2e). |
Parametry options — Edycja audio (mix_audio)
Dostępne tylko z mode=mix_audio. Ignorowane dla add_audio.
| Klucz | Typ | Domyślnie | Opis |
|---|---|---|---|
| mp3_volume | float | 1.0 | Głośność nakładanego MP3 (0,0 = wyciszony, 1,0 = oryginał, 2,0 = podwójny). Wartości powyżej 1,0 mogą powodować przesterowanie. |
Tryb text_to_mp3 — bezpośrednie parametry (bez JSON options)
W przeciwieństwie do innych trybów, te pola są wysyłane bezpośrednio jako pola formularza, a nie wewnątrz obiektu JSON options. Wymagane jest tylko pole text.
| Klucz | Typ | Domyślnie | Opis |
|---|---|---|---|
| text | string | — | Tekst do zamiany na mowę. Wymagane. Maksymalnie 5000 znaków. |
| lang | string | "en" | Kod języka używany do wyboru domyślnego głosu, gdy voice jest pominięte lub nieprawidłowe. Jeden z 20 języków witryny (zobacz tabelę poniżej). W przypadku nieznanego kodu używane jest en. |
| voice | string | automatycznie | ID głosu edge-tts (zobacz tabelę poniżej). Jeśli pominięte lub nieprawidłowe, automatycznie używany jest pierwszy głos dla lang. |
| slow | bool | false | Ustaw na true (lub 1), aby zwolnić tempo mowy o 25%. Każda inna wartość jest traktowana jako false. |
text_to_mp3 nie wymaga videos[]. Wyślij mode=text_to_mp3 razem z text / lang / voice / slow jako zwykłe pola formularza.Dostępne głosy (edge-tts, Microsoft Neural), pogrupowane według kodu języka:
| Język | Dostępne głosy |
|---|---|
en |
en-US-AvaNeural, en-US-AndrewNeural, en-GB-LibbyNeural, en-AU-NatashaNeural, en-AU-WilliamMultilingualNeural |
fr |
fr-FR-DeniseNeural, fr-FR-HenriNeural, fr-FR-EloiseNeural, fr-CA-SylvieNeural, fr-CA-ThierryNeural |
es |
es-ES-ElviraNeural, es-ES-AlvaroNeural, es-MX-DaliaNeural, es-AR-ElenaNeural, es-AR-TomasNeural |
ar |
ar-SA-ZariyahNeural, ar-SA-HamedNeural, ar-EG-SalmaNeural, ar-MA-MounaNeural, ar-MA-JamalNeural |
pt |
pt-BR-FranciscaNeural, pt-BR-AntonioNeural, pt-PT-RaquelNeural |
de |
de-DE-KatjaNeural, de-DE-ConradNeural, de-DE-AmalaNeural, de-AT-IngridNeural, de-AT-JonasNeural |
it |
it-IT-ElsaNeural, it-IT-DiegoNeural, it-IT-IsabellaNeural |
nl |
nl-NL-ColetteNeural, nl-NL-MaartenNeural, nl-BE-DenaNeural, nl-BE-ArnaudNeural |
ru |
ru-RU-SvetlanaNeural, ru-RU-DmitryNeural |
tr |
tr-TR-EmelNeural, tr-TR-AhmetNeural |
hi |
hi-IN-SwaraNeural, hi-IN-MadhurNeural |
bn |
bn-IN-TanishaaNeural, bn-IN-BashkarNeural, bn-BD-NabanitaNeural, bn-BD-PradeepNeural |
ur |
ur-PK-UzmaNeural, ur-PK-AsadNeural, ur-IN-GulNeural, ur-IN-SalmanNeural |
id |
id-ID-GadisNeural, id-ID-ArdiNeural |
ja |
ja-JP-NanamiNeural, ja-JP-KeitaNeural |
ko |
ko-KR-SunHiNeural, ko-KR-InJoonNeural |
zh-CN |
zh-CN-XiaoxiaoNeural, zh-CN-YunxiNeural, zh-CN-XiaoyiNeural |
zh-TW |
zh-TW-HsiaoChenNeural, zh-TW-YunJheNeural |
vi |
vi-VN-HoaiMyNeural, vi-VN-NamMinhNeural |
pl |
pl-PL-ZofiaNeural, pl-PL-MarekNeural |
Odpowiedź sukcesu (HTTP 200)
text_to_mp3 odpowiedź nie zawiera pól file_count ani transition (żaden plik nie został przesłany) — reszta jest identyczna: job_id, quota_used, quota_remaining, status_url, webhook_secret.Przykład curl — tryb image_to_video
Tekst karaoke z wygenerowanym głosem (image_to_video, bez MP3)
Karaoke z plikiem SRT (image_to_video + Twój MP3)
Przykład curl — Edycja audio
Przykład curl — tryb overlay_video
Przykład curl — tryb add_text
Przykład curl — Scalanie wideo
Przykład curl — tryb text_to_mp3
Status zawiera rzeczywisty etap i czas, który upłynął. Szacunki są orientacyjne; przekroczenie czasu klienta nie oznacza błędu. Wznów sprawdzanie tego samego ID zadania. Pliki wygasają dwie godziny po zakończeniu.
Możliwe statusy
| Status | Znaczenie | Dodatkowe pola |
|---|---|---|
| queued | W kolejce, jeszcze nie przetworzone | queue_position, queue_total, eta_minutes |
| processing | Przetwarzanie FFmpeg w toku | processing_stage, processing_elapsed_seconds, stage_elapsed_seconds, last_activity_at, processed_media_seconds, eta_overrun |
| ready | Ukończone — plik dostępny | download_url, media_available, created_at, expires_at |
| error | Przetwarzanie nie powiodło się | error (message), quota_refund_status: pending | confirmed | not_required |
| cancelled | Anulowano | quota_refund_status: pending | confirmed | not_required |
Odpowiedzi według statusu
Przykład curl
Wspólne parametry (multipart/form-data)
| Parametr | Typ | Domyślnie | Opis |
|---|---|---|---|
page | integer | 1 | Numer strony (od 1) |
limit | integer | 20 | Wyników na stronę (maks. 50, domyślnie 20) |
Odpowiedzi według statusu
Przesyła strumieniowo gotowy plik. Content-Type to video/mp4 dla trybów wideo lub audio/mpeg dla text_to_mp3. Nie wymaga tokenu. Dostępny tylko gdy status to ready.
Plik jest przechowywany przez 2 godziny po zakończeniu, potem usuwany. Pobierz go, gdy tylko status stanie się ready.
Opcjonalne parametry
| Parametr | Opis |
|---|---|
| filename | Sugerowana nazwa pobieranego pliku (np. moje-wideo.mp4) |
| preview | Ustaw na 1, aby odtwarzać w linii (pomija Content-Disposition: attachment) zamiast wywoływać pobieranie — używane do podglądu w przeglądarce. |
Przykład curl
Webhooki
Webhooki są alternatywą dla pollingu: zamiast sprawdzać status co X sekund, podajesz URL i serwer automatycznie Cię powiadamia, gdy zadanie jest gotowe.
Jak to działa
- Przekaż
callback_urlw POST do/api/v1/render.php - Odpowiedź zawiera
webhook_secret— zachowaj go do weryfikacji podpisów - Gdy zadanie osiągnie
readyluberror, serwer wysyła podpisany JSON-POSTna Twój URL - Zweryfikuj podpis za pomocą
HMAC-SHA256(webhook_secret, raw_body)
callback_url musi być publicznie dostępnym URL. Prywatne i loopback IP są zablokowane. Timeout: 10 sekund. Otrzymany payload
Nagłówki wysyłane przez serwer
| Nagłówek | Wartość |
|---|---|
| Content-Type | application/json |
| X-RVM-Signature | sha256=<hmac_hex> — podpis HMAC-SHA256 surowego body |
| X-RVM-Job-Id | Odpowiedni job_id |
Weryfikacja podpisu
Kody błędów
| HTTP | Kod JSON | Przyczyna |
|---|---|---|
| 401 | unauthorized | Brak tokenu, nieprawidłowy lub odwołany |
| 400 | missing_files | Nie otrzymano plików |
| 400 | too_few_files | Wysłano mniej niż 2 pliki |
| 400 | too_many_files | Wysłano więcej niż 20 plików |
| 400 | invalid_mime | Nieobsługiwany plik — akceptowane tylko MP4, MP3 i JPG/PNG (MIME weryfikowany przez magic bytes) |
| 400 | wrong_file_count | Liczba plików nie odpowiada wybranemu trybowi |
| 400 | wrong_file_types | Typy plików nie odpowiadają wybranemu trybowi |
| 400 | invalid_file_combination | Kombinacja plików bez trybu nie odpowiada żadnemu obsługiwanemu trybowi |
| 400 | invalid_options | Pole options nie jest prawidłowym JSON lub nie zawiera obiektu |
| 400 | invalid_option | Wartość w options jest nieprawidłowa (kolor, czcionka, pozycja…) |
| 400 | file_too_large | Plik przekracza 500 MB |
| 400 | text_required | Pole options.text jest nieobecne lub puste (tryb add_text) |
| 400 | video_too_long | Wideo dłuższe niż 15 minut (tryb add_text) |
| 400 | text_start_out_of_range | text_start wykracza poza koniec wideo |
| 400 | invalid_voice | Nieznany identyfikator voice. |
| 400 | invalid_timings | Nieczytelny plik z czasami (nierozpoznany format, brak linii z czasem, koniec przed początkiem, za długi…). |
| 400 | invalid_order | Tablica order nie jest prawidłową permutacją |
| 400 | invalid_job_id | Nieprawidłowy format job_id (musi być 32-znakowym szesnastkowym) |
| 404 | job_not_found | Zadanie nie znalezione — job_id nieznany lub nigdy nie istniał |
| 410 | job_expired | Zadanie wygasło — istniało, ale 2-godzinne okno minęło |
| 429 | quota_exceeded | Osiągnięto 20 udanych zadań/dzień |
| 429 | rate_limited | Ponad 12 wywołań/min na /api/v1/jobs.php — poczekaj Retry-After sekund |
| 500 | server_error | Wewnętrzny błąd serwera |
Przykłady integracji
Przykłady dla każdego trybu — zainstaluj requests przez pip install requests.
Wspólna konfiguracja
Tryb image_to_video — obraz + audio → wideo
Edycja audio
Tryb overlay_video — obraz w obrazie
Tryb add_text — tekst na wideo
Scalanie wideo
Tryb text_to_mp3 — tekst na mowę
Polling + pobieranie (wspólne dla wszystkich trybów)
Dwa podejścia w n8n: polling (pętla statusu) lub webhook (serwer wywołuje n8n). Webhook jest zalecany — czystszy, zero zbędnego obciążenia.
Podejście A — Webhook (zalecane)
Tylko 3 węzły, bez pętli.
Węzeł 1 — Wyzwalacz Webhook
Dodaj węzeł Webhook jako wejście workflow (metoda POST). Zanotuj wygenerowany URL, np. https://twoj-n8n.com/webhook/rvm-callback.
Węzeł 2 — Utwórz zadanie (HTTP Request)
| Metoda | POST |
| URL | https://rapidvideomaker.com/api/v1/render.php |
| Uwierzytelnianie | Header Auth — Authorization: Bearer rvm_… |
| Typ zawartości body | Form-Data Multipart |
| Body params | Pole Binary videos[] dla każdego klipu + Pole Text callback_url = URL węzła webhook |
Zachowaj webhook_secret z odpowiedzi w zmiennej workflow.
Węzeł 3 — Przetwórz wynik (w workflow aktywowanym przez webhook)
Gdy n8n otrzyma POST serwera, $json.status to ready lub error. Przy ready, $json.download_url zawiera bezpośredni URL pobierania.
{{ $headers['x-rvm-signature'] }} z sha256= + HMAC-SHA256 surowego body. Węzeł Code: crypto.createHmac('sha256', secret).update(body).digest('hex').Podejście B — Polling (bez webhooków)
5 węzłów, pętla statusu co 10 sek.
Węzeł 1 — Utwórz zadanie — ta sama konfiguracja, bez callback_url.
Węzeł 2 — Czekaj — 10 sekund.
Węzeł 3 — Pobierz status (HTTP Request GET)
| URL | https://rapidvideomaker.com/api/v1/jobs.php |
| Parametry zapytania | job_id = {{ $('Węzeł 1').item.json.job_id }} |
| Uwierzytelnianie | Uwierzytelnianie nagłówkiem — ten sam token |
Węzeł 4 — If: {{ $json.status }} === 'ready' → true: Węzeł 5 / false: wróć do Węzła 2.
Węzeł 5 — Pobierz: HTTP Request GET na {{ $json.download_url }}, format odpowiedzi File.
Krok 1 — Utwórz zadanie (wybierz tryb)
Krok 2 — Polling
Krok 3 — Pobieranie
Najlepsze praktyki
- Sprawdzaj to samo zadanie co 5–10 sekund. Czas zależy od trybu i rozmiaru danych.
- Status zawiera rzeczywisty etap i czas, który upłynął. Szacunki są orientacyjne; przekroczenie czasu klienta nie oznacza błędu. Wznów sprawdzanie tego samego ID zadania. Pliki wygasają dwie godziny po zakończeniu.
- Szybkie pobieranie: gdy tylko status to
ready, pobierz plik. Zostaje usunięty 2 godziny po zakończeniu. - Zarządzanie limitem: sprawdź
quota_remainingw odpowiedzi POST. Przy0następne zadanie zostanie odrzucone z429. - Błędy sieciowe: przy błędzie sieci poczekaj i spróbuj ponownie — zadanie kontynuuje wykonywanie po stronie serwera.
ready.