RapidVideoMaker
खाता बनाएं

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.

अपना API टोकन मुफ़्त में पाएं
अपना API टोकन पाने के लिए खाता बनाएं — प्रति दिन 20 अनुरोध शामिल, इंटरफेस या API से उपयोग करने योग्य।
मुफ़्त खाता बनाएं पहले से खाता है? साइन इन करें

पूर्ण वर्कफ़्लो

हर इंटीग्रेशन इसी 4-चरण अनुक्रम का पालन करता है:

1
जॉब बनाएं — POST /api/v1/render.php
अपनी फ़ाइलें अपने Bearer टोकन के साथ multipart/form-data के रूप में भेजें। 1 JPG/PNG इमेज + 1 MP3 + mode=image_to_video → वीडियो जनरेशन। 1 MP4/MOV + 1 MP3 → ऑडियो संपादन (mode=mix_audio जोड़ें ट्रैक ओवरले के लिए)। कई MP4/MOV → मर्ज। सर्वर एक अनूठा job_id लौटाता है। या 1 इमेज + options.text + options.voice: आवाज़ टेक्स्ट से बनाई जाती है, MP3 की ज़रूरत नहीं।
2
जॉब का इंतज़ार करें — GET /api/v1/jobs.php?job_id=…
इस एंडपॉइंट को नियमित रूप से पोल करें (हर 5–10 सेकंड)। जॉब queued → processing → ready (या error) से गुज़रती है। रिस्पॉन्स में कतार की स्थिति और अनुमानित शेष समय शामिल है।
3
डाउनलोड URL प्राप्त करें
जब स्थिति ready हो, तो रिस्पॉन्स में उपयोग के लिए तैयार download_url फ़ील्ड होती है।
4
फ़ाइल डाउनलोड करें — GET /api/download.php?job_id=…
अंतिम MP4/MOV डाउनलोड करें। जॉब पूरी होने के 2 घंटे बाद तक फ़ाइल उपलब्ध रहती है, फिर स्वचालित रूप से हटा दी जाती है। समाप्ति के बाद, API 410 Gone से जवाब देती है।

प्रमाणीकरण

हर अनुरोध में आपका API टोकन होना चाहिए। दो फॉर्मेट स्वीकार किए जाते हैं:

# प्रमाणीकरण — हर अनुरोध में आपका API टोकन होना चाहिए। दो फॉर्मेट स्वीकार किए जाते हैं: Authorization: Bearer rvm_your_token_here # Alternative X-API-Key: rvm_your_token_here

आपका टोकन आपके सदस्य क्षेत्र में उपलब्ध है — प्रति खाता एक टोकन, पंजीकरण पर स्वचालित रूप से बनाया जाता है। इसे केवल एक बार स्पष्ट रूप से दिखाया जाता है — इसे सुरक्षित रखें।

कोटा

प्रत्येक सदस्य खाते में प्रतिदिन 20 अनुरोध होते हैं, वेब इंटरफ़ेस और API के बीच साझा। विफल जॉब कोटा नहीं लेती। काउंटर UTC मध्यरात्रि को रीसेट होता है।

POST रिस्पॉन्स में quota_used और quota_remaining शामिल हैं। सीमा पार होने पर सर्वर 429 से जवाब देता है।

इंटरफ़ेस + API = एक ही काउंटर। वेब इंटरफ़ेस और API अनुरोध दोनों एक ही दैनिक कोटा से 1-1 क्रेडिट लेते हैं।

कतार

एक समय में एक जॉब प्रोसेस होती है। कई जॉब एक साथ सबमिट करने पर वे कतार में जाती हैं और आगमन क्रम में प्रोसेस होती हैं। प्रतीक्षा के दौरान, स्टेटस रिस्पॉन्स में शामिल हैं:

रेट लिमिट लागू: /api/v1/jobs.php एंडपॉइंट प्रति टोकन 12 कॉल प्रति मिनट स्वीकार करता है। इससे अधिक पर सर्वर 429 के साथ Retry-After: 5 हेडर लौटाता है। सिफारिश: प्रत्येक कॉल के बीच 10 सेकंड।

उपलब्ध ट्रांज़िशन

सीधे मर्ज के लिए transition_type=none (डिफ़ॉल्ट) पास करें, या क्लिप के बीच फ़ेड के लिए नीचे दिए गए टाइप में से एक:

none fade fadeblack dissolve wipeleft wiperight slideleft slideright zoomin circleclose

अवधि (transition_duration) 0.2 से 2.0 सेकंड के बीच है। यदि क्लिप बहुत छोटी है तो ट्रांज़िशन अनदेखा कर दिया जाता है।

एंडपॉइंट

POST /api/v1/render.php एक वीडियो प्रोसेसिंग जॉब बनाता है

Five modes, accessible via the mode field (omit mode with multiple MP4s to auto-detect fusion):

उपयोगAPI मोडआवश्यक फ़ाइलेंविवरण
वीडियो मर्ज करें fusion 2–20 MP4/MOV फ़ाइलें क्लिप दिए गए क्रम में एंड-टू-एंड जोड़ी जाती हैं। क्लिप के बीच वैकल्पिक ट्रांज़िशन।
ऑडियो संपादित करें add_audio या mix_audio 1 MP4/MOV + 1 MP3 वीडियो की ऑडियो ट्रैक को बदलता या समृद्ध करता है। वीडियो ट्रैक कभी री-एन्कोड नहीं होती (-c:v copy).

add_audio — मूल ऑडियो हटा दिया जाता है और MP3 से पूरी तरह बदल दिया जाता है।
mix_audio — मूल ऑडियो रखा जाता है और MP3 ओवरले होती है।
वीडियो बनाएं image_to_video 1 JPG/PNG + 1 MP3 — या 1 JPG/PNG + एक टेक्स्ट (options.text + options.voice): आवाज़ बनाई जाती है एक स्थिर इमेज और आपकी MP3 से — या सिर्फ़ एक टेक्स्ट (options.text) से, जिसकी आवाज़ बनाई जाती है (options.voice) — वीडियो बनाता है। टेक्स्ट ओवरले (स्थिर, शब्द-दर-शब्द या कराओके), फ़ेड, रिज़ॉल्यूशन और fps options फ़ील्ड से सेट किए जा सकते हैं।
वीडियो ओवरले overlay_video 2 MP4/MOV मुख्य वीडियो के ऊपर दूसरा वीडियो रखता है। options फ़ील्ड से स्थिति, आकार, अपारदर्शिता और ऑडियो सेट करें।
टेक्स्ट जोड़ें add_text 1 MP4/MOV मौजूदा वीडियो पर टेक्स्ट जोड़ता है (रिज़ॉल्यूशन, फ़्रेम दर और ऑडियो सुरक्षित रहते हैं)। image_to_video जैसी ही टेक्स्ट सेटिंग्स, साथ में टेक्स्ट के प्रकट होने का समय। options.text आवश्यक है।
टेक्स्ट से MP3 text_to_mp3 (केवल टेक्स्ट) टेक्स्ट को वाणी में बदलता है और एक MP3 फ़ाइल देता है। कोई फ़ाइल अपलोड आवश्यक नहीं — mode=text_to_mp3, text और lang फ़ॉर्म फ़ील्ड के रूप में भेजें। साइट की सभी 20 भाषाओं को सपोर्ट करता है।
सख्त वैलिडेशन: प्रत्येक मोड के लिए फ़ाइलों की सटीक संख्या और प्रकार आवश्यक है। MIME टाइप मैजिक बाइट्स से वेरिफाई होते हैं, केवल एक्सटेंशन से नहीं। अपवाद: options.text + options.voice के साथ image_to_video केवल 1 इमेज स्वीकार करता है — आवाज़ टेक्स्ट से बनाई जाती है (MP3 के बिना)।
अवधि नियम: ऑडियो और image_to_video मोड में, परिणाम की अवधि MP3 की अवधि पर लॉक रहती है। options.voice के साथ image_to_video की अवधि टेक्स्ट से बनी आवाज़ जितनी होती है (+0.6 से.)।

सामान्य पैरामीटर (multipart/form-data)

फ़ील्डप्रकारआवश्यकविवरण
videos[]File[]हाँप्रोसेस करने की फ़ाइलें। मोड के अनुसार: 2–20 MP4/MOV, या 1 MP4/MOV + 1 MP3, या 1 इमेज (JPG/PNG) + 1 MP3। प्रति फ़ाइल अधिकतम 500 MB।
modestring*image_to_video | add_audio | mix_audio | overlay_video | text_to_mp3। इन non-fusion मोड के लिए आवश्यक। केवल MP4/MOV फ़ाइलों के साथ mode छोड़ना हमेशा fusion को ट्रिगर करता है (स्ट्रीम-कॉपी संयोजन) — कभी overlay_video नहीं, भले ही ठीक 2 MP4/MOV अपलोड किए गए हों। ऑडियो संपादन के लिए: add_audio मूल को हटाता है, mix_audio इसे रखता है और ओवरले करता है। यदि mode फ़ील्ड दी गई है, तो अपलोड की गई फ़ाइलें बिल्कुल मेल खानी चाहिए — अन्यथा अनुरोध अस्वीकार कर दिया जाता है। add_text भी स्वीकार्य है: यह एकमात्र मोड है जो एक ही MP4/MOV फ़ाइल लेता है, और इसके लिए options.text आवश्यक है।
orderJSONकेवल fusion मोड — क्लिप क्रम परिभाषित करने वाला JSON इंडेक्स एरे।
transition_typestringकेवल fusion मोड। डिफ़ॉल्ट: none। उपलब्ध ट्रांज़िशन की सूची देखें।
transition_durationfloatकेवल fusion मोड। अवधि 0.2–2.0 s। डिफ़ॉल्ट: 0.5।
optionsJSONimage_to_video, add_text, mix_audio और overlay_video के लिए रेंडर पैरामीटर का JSON ऑब्जेक्ट (नीचे की तालिकाएँ देखें)।
timingsFile / stringimage_to_video / add_text: कराओके टाइमिंग फ़ाइल (SRT या LRC, अधिकतम 200 KB) — फ़ाइल फ़ील्ड या सादा टेक्स्ट। दिखाया गया टेक्स्ट फ़ाइल से आता है; text_mode=karaoke लागू होता है; voice के साथ संगत नहीं।
callback_urlstringपब्लिक URL (http/https) जो जॉब पूरी होने पर कॉल होती है। रिस्पॉन्स में webhook_secret शामिल है।

options पैरामीटर — image_to_video मोड

सभी वैकल्पिक। न दिए गए मान → वर्कर द्वारा डिफ़ॉल्ट लागू होते हैं।

कीप्रकारडिफ़ॉल्टविवरण
textstring""ओवरले के रूप में दिखाया जाने वाला टेक्स्ट। खाली = कोई टेक्स्ट नहीं। अधिकतम 500 वर्ण।
fontstring"default"टेक्स्ट का फ़ॉन्ट, आईडी के अनुसार। स्वीकृत मान: 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 = मानक फ़ॉन्ट (इमोजी समर्थित); amiri = नस्ख़ फ़ॉन्ट, अरबी टेक्स्ट के लिए आदर्श। कोई भी अन्य मान invalid_option त्रुटि लौटाता है। इमोजी केवल default के साथ दिखते हैं।
font_sizeint60पिक्सल में फ़ॉन्ट आकार। रेंज: 10–300। अनुशंसित: 36, 48, 60, 72, 96।
text_colorstring"white"टेक्स्ट रंग (जैसे white, yellow, #ffffff)।
text_positionstring"center"टेक्स्ट स्थिति: center, top, bottom।
boxbooltrueटेक्स्ट के पीछे अर्ध-पारदर्शी पृष्ठभूमि।
box_colorstring"black@0.4"FFmpeg फॉर्मेट में रंग + अपारदर्शिता: color@opacity। अपारदर्शिता: 0.0–1.0।
fade_durationfloat0.5सेकंड में फ़ेड इन/आउट अवधि (0–2)। 0 = कोई फ़ेड नहीं।
widthint1080पिक्सल में वीडियो चौड़ाई (64–3840, सम संख्या)। मानक: 1080/1920/720/1280।
heightint1920पिक्सल में वीडियो ऊँचाई (64–3840, सम संख्या)।
fpsint24फ्रेम दर (1–60)।
image_fitstring"contain"contain: पूरी छवि या वीडियो दिखाएँ और खाली जगह चुनी गई पृष्ठभूमि से भरें। solid (डिफ़ॉल्ट) या blur। धुंधलेपन के लिए image_fit=contain आवश्यक है। टेक्स्ट साफ़ रहता है। cover: इमेज को फ्रेम भरने के लिए ज़ूम किया जाता है, केंद्रित — किनारे काटे जाते हैं।
bg_colorstring"black"background_mode=solid: पृष्ठभूमि रंग यदि इमेज लक्ष्य रिज़ॉल्यूशन नहीं भरती — केवल image_fit=contain के साथ प्रासंगिक।
background_modestring"solid"solid (डिफ़ॉल्ट) या blur। धुंधलेपन के लिए image_fit=contain आवश्यक है। टेक्स्ट साफ़ रहता है।
blur_strengthnumber201 से 50 तक संख्या; डिफ़ॉल्ट 20। गॉसियन धुंधलापन केवल पृष्ठभूमि पर लागू होता है।
enable_image_motionboolfalseफोटो एनिमेशन सक्षम करता है। false पर इमेज स्थिर रहती है।
image_motion_effectstring"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।
motion_intensityfloat1.0फोटो एनिमेशन तीव्रता (0.25–2.0)। ज़ूम आयाम और पैन गति को गुणा करता है।
text_effectstring"none"टेक्स्ट ओवरले एनिमेशन। स्वीकृत मान: none, fade_in, slide_up, slide_down, slide_left, bounce।
text_effect_intensityfloat1.0टेक्स्ट एनिमेशन तीव्रता (0.25–2.0)।
text_border_widthint0अक्षरों के चारों ओर काली आउटलाइन की मोटाई पिक्सल में (0 = अक्षम, 1–10)।
text_border_colorstring"black"अक्षरों की आउटलाइन का रंग (text_color जैसा ही फ़ॉर्मेट, डिफ़ॉल्ट "black")। text_border_width > 0 होने पर इस्तेमाल होता है।
text_modestring"static"टेक्स्ट प्रकट करने का मोड। static (डिफ़ॉल्ट): पहले फ्रेम से पूरा टेक्स्ट दिखता है। word_by_word: word_reveal_speed की दर से शब्द एक-एक करके दिखाई देते हैं। text_effect के साथ अनन्य: text_mode=word_by_word होने पर text_effect अनदेखा किया जाता है। "karaoke": ऑडियो की लय के साथ टेक्स्ट का रंग बदलता है, पेज-दर-पेज (1,000 अक्षरों तक)। voice के साथ शब्द-दर-शब्द सिंक, अन्यथा शब्दों की लंबाई के अनुसार ऑडियो पर बाँटा जाता है।
word_reveal_speedfloat1.5प्रति सेकंड शब्दों में प्रकट करने की गति (0.3–5.0, डिफ़ॉल्ट 1.5)। केवल text_mode=word_by_word के साथ। OpenAI TTS सिंक के लिए अनुशंसित मान: 2.0।
word_animstring"none"प्रत्येक शब्द के प्रकट होने की एनिमेशन। none (डिफ़ॉल्ट): तत्काल प्रकटीकरण। fade: प्रत्येक नया शब्द 0.2s फेड के साथ प्रकट होता है। केवल text_mode=word_by_word के साथ।
karaoke_stylestring"fill"कराओके शैली: fill (बोले गए शब्द हाइलाइट रंग लेते हैं), sweep (हर शब्द धीरे-धीरे भरता है; दाएँ-से-बाएँ लिपियों में पूरे शब्द) या highlight (केवल वर्तमान शब्द रंगीन)।
highlight_colorstring"#FFD200"कराओके मोड में बोले गए शब्दों / वर्तमान शब्द का रंग (text_color जैसा ही फ़ॉर्मेट)।
karaoke_linesint2कराओके मोड में प्रति पेज दिखाई जाने वाली पंक्तियाँ (1–4)।
voicestring""आवाज़ ID (text_to_mp3 वाली ही सूची, जैसे hi-IN-SwaraNeural): उसी जॉब में text से आवाज़ बनाई जाती है। तब image_to_video को केवल इमेज चाहिए (साथ में भेजी गई MP3 अस्वीकार की जाती है)। कराओके मोड में हर शब्द आवाज़ के साथ सिंक होता है।
voice_rateint0बनाई गई आवाज़ की गति, % में (−50 से +50)।

अपनी टाइमिंग के साथ कराओके (SRT / LRC)

timings फ़ील्ड में SRT या LRC फ़ाइल भेजें: हर पंक्ति अपने समय पर दिखती है और कराओके का एक पेज बनती है (500 पंक्तियों, 5,000 अक्षरों तक)। SRT: पंक्ति अपने अंत समय पर गायब होती है। LRC: पंक्ति अगली तक रहती है (खाली पंक्ति उसे रोकती है); [offset:] और enhanced LRC की शब्द टाइमिंग <mm:ss.xx> समर्थित हैं — वरना हर पंक्ति अपनी अवधि में बाँटी जाती है। add_text में समय वीडियो की शुरुआत से गिना जाता है, text_start जितना खिसकाकर।

# lyrics.srt 1 00:00:01,000 --> 00:00:03,500 First line of the song 2 00:00:04,000 --> 00:00:07,200 Second line, on its own page # lyrics.lrc — enhanced LRC: optional per-word times <mm:ss.xx> [00:01.00]<00:01.00>First <00:01.60>line <00:02.10>here [00:04.00]Second line [00:07.50]

options पैरामीटर — overlay_video मोड

सभी वैकल्पिक हैं। अपलोड का क्रम ज़रूरी है: पहली फ़ाइल मुख्य वीडियो (बैकग्राउंड) और दूसरी फ़ाइल ऊपर रखा गया वीडियो है। ग्रीन स्क्रीन हटाने के लिए chroma_key इस्तेमाल करें।

कीप्रकारडिफ़ॉल्टविवरण
positionstring"bottom-right"वीडियो रखने का कोना: top-left, top-right, bottom-left, bottom-right या center।
scalefloat0.30मुख्य वीडियो की चौड़ाई के अनुपात में ओवरले का आकार। 0.25 = चौड़ाई का 25%। सीमा: 0.05–1.0।
opacityfloat1.0ओवरले की अपारदर्शिता। 1.0 = पूरी तरह अपारदर्शी, 0.0 = अदृश्य।
marginint10ओवरले और फ़्रेम के किनारे के बीच पिक्सेल में दूरी। position=center होने पर अनदेखा किया जाता है। सीमा: 0–200।
audiostring"main"कौन सा ऑडियो रखना है: main सिर्फ मुख्य वीडियो, overlay सिर्फ ऊपर वाला वीडियो, mix दोनों का ऑडियो समान वॉल्यूम पर मिलाता है।
chroma_keyboolfalseओवरले का शुद्ध हरा (#00FF00) बैकग्राउंड हटाने के लिए true दें — ग्रीन स्क्रीन पर रिकॉर्ड किए गए वेबकैम या एनिमेशन के लिए उपयोगी।
chroma_similarityfloat0.20ग्रीन स्क्रीन सहनशीलता। कम मान विषय के किनारों को बचाता है; ज़्यादा मान असमान रोशनी को संभालता है। डिजिटल हरे के लिए 0.10–0.20, असली स्क्रीन के लिए 0.25–0.45 सुझाया जाता है। सीमा: 0.01–0.60।

options पैरामीटर — add_text मोड

टेक्स्ट आवश्यक है। डिफ़ॉल्ट रूप से वीडियो का प्रारूप, फ़्रेम दर और ऑडियो बने रहते हैं। output_format से image_fit, bg_color और background_mode के साथ नया फ़्रेम चुना जाता है। width, height, fps और फ़ोटो गति के विकल्प अनदेखे रहते हैं। अधिकतम अवधि: 15 मिनट।

{"text":"Hello","output_format":"portrait","image_fit":"contain","background_mode":"blur","blur_strength":20}
कीप्रकारडिफ़ॉल्टविवरण
textstringहाँजोड़ा जाने वाला टेक्स्ट। आवश्यक, 1–200 अक्षर।
text_startfloat0वह सेकंड जब टेक्स्ट दिखाई देता है (≥ 0)। यह वीडियो के अंत से पहले होना चाहिए।
text_durationfloat0टेक्स्ट कितनी देर दिखेगा, सेकंड में (0.1–3600)। 0 = वीडियो के अंत तक।
fontstring"default"टेक्स्ट का फ़ॉन्ट, आईडी के अनुसार। स्वीकृत मान: 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 = मानक फ़ॉन्ट (इमोजी समर्थित); amiri = नस्ख़ फ़ॉन्ट, अरबी टेक्स्ट के लिए आदर्श। कोई भी अन्य मान invalid_option त्रुटि लौटाता है। इमोजी केवल default के साथ दिखते हैं।
font_sizeint60फ़ॉन्ट आकार, उस वीडियो के लिए दिया गया जिसकी छोटी भुजा 1080 px है, और वास्तविक रिज़ॉल्यूशन के अनुसार अपने आप स्केल होता है — एक ही मान 720p और 4K पर समान दिखता है। सीमा: 10–300।
fade_durationfloat0.5टेक्स्ट (वीडियो का नहीं) के फ़ेड इन/आउट की अवधि, सेकंड में। सीमा: 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——image_to_video के समान (ऊपर की तालिका देखें)।
original_volumefloat0.3voice के साथ: आवाज़ के नीचे वीडियो की मूल ध्वनि का वॉल्यूम (0–2, डिफ़ॉल्ट 0.3; 0 = बदल दी गई)। आवाज़ text_start पर शुरू होती है; उसके ख़त्म होने तक टेक्स्ट दिखता है, और अगर वह वीडियो के अंत से आगे जाती है तो आख़िरी फ़्रेम रोक दिया जाता है।
background_modestring"solid"solid (डिफ़ॉल्ट) या blur। धुंधलेपन के लिए image_fit=contain आवश्यक है। टेक्स्ट साफ़ रहता है।
blur_strengthnumber201 से 50 तक संख्या; डिफ़ॉल्ट 20। गॉसियन धुंधलापन केवल पृष्ठभूमि पर लागू होता है।
output_formatstring"original"केवल add_text: original (डिफ़ॉल्ट), portrait (1080×1920), square (1080×1080), landscape (1920×1080)। धुंधलेपन के लिए original के अलावा प्रारूप आवश्यक है।
image_fitstring"contain"contain: पूरी छवि या वीडियो दिखाएँ और खाली जगह चुनी गई पृष्ठभूमि से भरें। solid (डिफ़ॉल्ट) या blur। धुंधलेपन के लिए image_fit=contain आवश्यक है। टेक्स्ट साफ़ रहता है। cover: इमेज को फ्रेम भरने के लिए ज़ूम किया जाता है, केंद्रित — किनारे काटे जाते हैं।
bg_colorstring"black"background_mode=solid: पृष्ठभूमि रंग यदि इमेज लक्ष्य रिज़ॉल्यूशन नहीं भरती — केवल image_fit=contain के साथ प्रासंगिक।

options पैरामीटर — ऑडियो संपादन (mix_audio)

केवल mode=mix_audio के साथ उपलब्ध। add_audio के लिए अनदेखा।

कीप्रकारडिफ़ॉल्टविवरण
mp3_volumefloat1.0ओवरलेड MP3 की वॉल्यूम (0.0 = म्यूट, 1.0 = मूल वॉल्यूम, 2.0 = डबल)।

text_to_mp3 मोड — सीधे पैरामीटर (options JSON नहीं)

अन्य मोड के विपरीत, ये फ़ील्ड सीधे फ़ॉर्म फ़ील्ड के रूप में भेजे जाते हैं, options JSON ऑब्जेक्ट के अंदर नहीं। केवल text आवश्यक है।

कीप्रकारडिफ़ॉल्टविवरण
textstring—आवाज़ में बदलने के लिए टेक्स्ट। आवश्यक। अधिकतम 5,000 अक्षर।
langstring"en"जब voice छोड़ा गया हो या अमान्य हो तो डिफ़ॉल्ट आवाज़ चुनने के लिए उपयोग किया जाने वाला भाषा कोड। साइट की 20 भाषाओं में से एक (नीचे तालिका देखें)। अज्ञात होने पर en पर वापस आता है।
voicestringस्वतःedge-tts आवाज़ ID (नीचे तालिका देखें)। यदि छोड़ा गया या अमान्य है, तो lang की पहली आवाज़ स्वतः उपयोग की जाती है।
slowboolfalseबोलने की गति 25% धीमी करने के लिए true (या 1) सेट करें। कोई भी अन्य मान false माना जाता है।
फ़ाइल अपलोड की आवश्यकता नहीं: अन्य मोड के विपरीत, text_to_mp3 को videos[] की आवश्यकता नहीं है। mode=text_to_mp3 के साथ text / lang / voice / slow को सामान्य फ़ॉर्म फ़ील्ड के रूप में भेजें।

उपलब्ध आवाज़ें (edge-tts, Microsoft Neural), भाषा कोड के अनुसार समूहीकृत:

भाषाउपलब्ध आवाज़ें
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

सफलता रिस्पॉन्स (HTTP 200)

{ "success": true, "job_id": "a3f1c8d2e5b09471...", "mode": "fusion", // "fusion" | "add_audio" | "mix_audio" | "image_to_video" | "overlay_video" | "add_text" | "text_to_mp3" "file_count": 2, "transition": null, "quota_used": 1, "quota_remaining": 9, "status_url": "https://rapidvideomaker.com/api/v1/jobs.php?job_id=a3f1c8..." }
text_to_mp3 के लिए, रिस्पॉन्स में file_count या transition फ़ील्ड नहीं होते (कोई फ़ाइल अपलोड नहीं हुई) — बाकी समान है: job_id, quota_used, quota_remaining, status_url, webhook_secret।

curl उदाहरण — image_to_video मोड

curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@scene.jpg" \ -F "videos[]=@narration.mp3" \ -F "mode=image_to_video" \ -F 'options={"text":"Chapter 1","font_size":72,"text_color":"white","text_position":"bottom","box":true,"box_color":"black@0.4","fade_duration":0.5,"width":1080,"height":1920,"image_fit":"contain","bg_color":"black","enable_image_motion":true,"image_motion_effect":"ken_burns","motion_intensity":1.0,"text_effect":"slide_up","text_effect_intensity":1.0}' # image_fit : "contain" | "cover" # background_mode : "solid" | "blur" (blur requires contain) # blur_strength : 1–50, default 20 # bg_color : ignored if image_fit="cover" # enable_image_motion : true = animation on, false (default) = static image # image_motion_effect : 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 # motion_intensity : 0.25–2.0 — photo animation amplitude (default 1.0) # text_effect : none | fade_in | slide_up | slide_down | slide_left | bounce (ignored if text_mode=word_by_word) # text_effect_intensity : 0.25–2.0 — text animation intensity (default 1.0) # text_border_width : 0–10 px — outline around characters (0 = disabled) # text_border_color : outline color, default "black" (e.g. "#FF3366", "white@0.8") # text_mode : "static" (default) | "word_by_word" — reveal words one by one # word_reveal_speed : 0.3–5.0 w/s — speed for word_by_word mode (default 1.5, ~2.0 for OpenAI TTS) # word_anim : "none" (default) | "fade" — fade-in crossfade on each word (word_by_word only)

बनाई गई आवाज़ के साथ कराओके टेक्स्ट (image_to_video, बिना MP3)

curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@scene.jpg" \ -F "mode=image_to_video" \ -F 'options={"text":"Every word lights up as the voice reads it.","voice":"en-US-AvaNeural","text_mode":"karaoke","karaoke_style":"sweep","highlight_color":"#FFD200","karaoke_lines":2,"text_position":"bottom","font_size":72}' # no MP3: the voice is generated from "text" and gives the timing of every word # text_mode="karaoke" : text up to 1000 characters, shown page by page (karaoke_lines: 1–4) # karaoke_style : "fill" (default) | "sweep" | "highlight" # voice_rate : -50…+50 (%), default 0 # with your own MP3 (no "voice"): karaoke timing is spread over the audio by word length # add_text: same options + "original_volume" (0–2, default 0.3) = original sound under the voice

SRT फ़ाइल के साथ कराओके (image_to_video + आपकी MP3)

curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@cover.jpg" \ -F "videos[]=@song.mp3" \ -F "timings=@lyrics.srt" \ -F "mode=image_to_video" \ -F 'options={"karaoke_style":"sweep","karaoke_lines":2,"text_position":"bottom","font_size":72}' # timings : SRT or LRC file (200 KB max), or its content as a plain text field: -F "timings=<lyrics.lrc" # the displayed text comes from the file ("text" is ignored), text_mode is forced to "karaoke" # not compatible with "voice" (the timings follow your own audio) # add_text: times are relative to the video start, shifted by "text_start"

curl उदाहरण — ऑडियो संपादन

# Replace audio (deletes original) curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@my_video.mp4" \ -F "videos[]=@my_music.mp3" \ -F "mode=add_audio" # Keep original audio + overlay MP3 curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@my_video.mp4" \ -F "videos[]=@my_music.mp3" \ -F "mode=mix_audio" \ -F 'options={"mp3_volume":0.7}' # mp3_volume : 0.0 (muted) → 1.0 (original volume, default) → 2.0 (amplified)

curl उदाहरण — overlay_video मोड

curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@main_video.mp4" \ -F "videos[]=@overlay_video.mp4" \ -F "mode=overlay_video" \ -F 'options={"position":"bottom-right","scale":0.25,"opacity":1.0,"margin":20,"audio":"main"}' # Green screen overlay curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@main_video.mp4" \ -F "videos[]=@webcam_greenscreen.mp4" \ -F "mode=overlay_video" \ -F 'options={"position":"bottom-left","scale":0.35,"chroma_key":true,"chroma_similarity":0.15,"audio":"mix"}' # position : top-left | top-right | bottom-left | bottom-right | center (default: bottom-right) # scale : 0.05–1.0 — overlay width as fraction of main video (default 0.30) # opacity : 0.0–1.0 — overlay transparency (default 1.0) # margin : 0–200 px — gap from frame edge, ignored if center (default 10) # audio : main | overlay | mix — audio to keep (default: main) # chroma_key : true | false — remove green (#00FF00) background from overlay (default false) # chroma_similarity : 0.01–0.60 — green screen tolerance (default 0.20)

curl उदाहरण — add_text मोड

curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@my_video.mp4" \ -F "mode=add_text" \ -F 'options={"text":"Hello world","text_position":"bottom","font_size":72,"text_color":"#ffd700","text_start":2,"text_duration":5,"text_effect":"slide_up"}' # text : required, 1–200 characters # text_start : second at which the text appears (default 0) # text_duration : seconds the text stays visible, 0 = until the end (default 0) # the video keeps its resolution, frame rate and audio track

curl उदाहरण — वीडियो मर्ज

curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@clip1.mp4" \ -F "videos[]=@clip2.mp4" \ -F "transition_type=fade" \ -F "transition_duration=0.5"

curl उदाहरण — text_to_mp3 मोड

# No file upload — text + lang + voice as plain form fields curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "mode=text_to_mp3" \ -F "text=Welcome to Rapid Video Maker." \ -F "lang=en" \ -F "voice=en-US-AvaNeural" \ -F "slow=false" # voice omitted or invalid -> falls back to the first voice of "lang" curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "mode=text_to_mp3" \ -F "text=Bienvenue sur Rapid Video Maker." \ -F "lang=fr"
GET /api/v1/jobs.php?job_id=<hex32> जॉब स्टेटस

स्थिति में वास्तविक चरण और बीता समय शामिल है। अनुमान लगभग हैं; क्लाइंट का समय समाप्त होना कार्य की विफलता नहीं है। उसी कार्य ID की स्थिति फिर जाँचें। फ़ाइलें पूर्ण होने के दो घंटे बाद समाप्त होती हैं।

संभावित स्थितियाँ

स्थितिअर्थअतिरिक्त फ़ील्ड
queued कतार में, अभी प्रोसेस नहीं हुई queue_position, queue_total, eta_minutes
processing FFmpeg प्रोसेसिंग जारी है processing_stage, processing_elapsed_seconds, stage_elapsed_seconds, last_activity_at, processed_media_seconds, eta_overrun
ready पूर्ण — फ़ाइल उपलब्ध download_url, media_available, created_at, expires_at
error प्रोसेसिंग विफल error (message), quota_refund_status: pending | confirmed | not_required
cancelled रद्द किया गया quota_refund_status: pending | confirmed | not_required

स्थिति के अनुसार रिस्पॉन्स

{ "job_id": "a3f1c8...", "status": "queued", "queue_position": 2, "queue_total": 3, "eta_minutes": 7 }
{ "job_id": "a3f1c8...", "status": "ready", "download_url": "https://rapidvideomaker.com/api/download.php?job_id=a3f1c8...", "created_at": "2026-06-02T10:00:00+00:00", "expires_at": "2026-06-02T12:00:00+00:00" }

curl उदाहरण

curl -H "Authorization: Bearer rvm_your_token" \ "https://rapidvideomaker.com/api/v1/jobs.php?job_id=a3f1c8..."
GET /api/v1/jobs.php इस टोकन से बनाए गए सभी जॉब की सूची (पेज के अनुसार, तारीख के घटते क्रम में)

सामान्य पैरामीटर (multipart/form-data)

पैरामीटरप्रकारडिफ़ॉल्टविवरण
pageinteger1पेज संख्या (1 से शुरू)
limitinteger20प्रति पेज परिणाम (अधिकतम 50, डिफ़ॉल्ट 20)

स्थिति के अनुसार रिस्पॉन्स

{ "success": true, "jobs": [ { "job_id": "a3f1c8...", "status": "ready", "mode": "fusion", "created_at": "2026-06-02T10:00:00+00:00", "expires_at": "2026-06-02T12:00:00+00:00", "download_url": "https://..." }, ... ], "total": 12, "page": 1, "limit": 20 }
GET /api/download.php?job_id=<hex32> अंतिम फ़ाइल डाउनलोड करें

अंतिम फ़ाइल को स्ट्रीम करता है। Content-Type वीडियो मोड के लिए video/mp4, या text_to_mp3 के लिए audio/mpeg होता है। टोकन आवश्यक नहीं। केवल तब उपलब्ध जब स्थिति ready हो।

जॉब पूरी होने के 2 घंटे बाद फ़ाइल रखी जाती है, फिर हटा दी जाती है।

वैकल्पिक पैरामीटर

पैरामीटरविवरण
filenameडाउनलोड की गई फ़ाइल के लिए सुझाया गया नाम (जैसे mera-video.mp4)
previewडाउनलोड शुरू करने के बजाय इनलाइन प्लेबैक के लिए (Content-Disposition: attachment को छोड़ता है) 1 सेट करें — ब्राउज़र में पूर्वावलोकन के लिए उपयोग किया जाता है।

curl उदाहरण

curl -o "output.mp4" \ "https://rapidvideomaker.com/api/download.php?job_id=a3f1c8...&filename=output.mp4"

वेबहुक

वेबहुक पोलिंग का विकल्प है: हर X सेकंड में स्टेटस जाँचने की बजाय, आप एक URL देते हैं और सर्वर जॉब पूरी होने पर आपको स्वचालित रूप से कॉल करता है।

यह कैसे काम करता है

  1. /api/v1/render.php को POST में callback_url पास करें
  2. रिस्पॉन्स में webhook_secret होता है — सिग्नेचर वेरिफाई करने के लिए इसे रखें
  3. जब जॉब ready या error पहुँचती है, सर्वर आपके URL पर साइन किया हुआ JSON POST भेजता है
  4. HMAC-SHA256(webhook_secret, raw_body) से सिग्नेचर वेरिफाई करें
सीमाएं: callback_url सार्वजनिक रूप से सुलभ URL होना चाहिए। निजी और लूपबैक IP पते ब्लॉक हैं। टाइमआउट: 10 सेकंड।

प्राप्त पेलोड

{ "job_id": "a3f1c8...", "status": "ready", "download_url": "https://rapidvideomaker.com /api/download.php?job_id=a3f1c8...", "timestamp": "2026-04-04T12:00:00+00:00" }
{ "job_id": "a3f1c8...", "status": "error", "error": "FFmpeg xfade failed:...", "timestamp": "2026-04-04T12:00:00+00:00" }

सर्वर द्वारा भेजे गए हेडर

हेडरमान
Content-Typeapplication/json
X-RVM-Signaturesha256=<hmac_hex> — raw body का HMAC-SHA256 सिग्नेचर
X-RVM-Job-Idसंबंधित job_id

सिग्नेचर वेरिफिकेशन

# Python import hmac, hashlib def verify_webhook(secret: str, body: bytes, signature_header: str) -> bool: expected = "sha256=" + hmac.new( secret.encode(), body, hashlib.sha256 ).hexdigest() return hmac.compare_digest(expected, signature_header) # Flask/FastAPI endpoint: sig = request.headers.get("X-RVM-Signature", "") if not verify_webhook(WEBHOOK_SECRET, request.data, sig): return "Invalid signature", 403 data = request.get_json()

त्रुटि कोड

HTTPJSON कोडकारण
401unauthorizedटोकन गायब, अमान्य या रद्द
400missing_filesकोई फ़ाइल प्राप्त नहीं हुई
400too_few_files2 से कम फ़ाइलें भेजी गईं
400too_many_files20 से अधिक फ़ाइलें भेजी गईं
400invalid_mimeअसमर्थित फ़ाइल — केवल MP4, MP3 और JPG/PNG इमेज स्वीकार हैं (MIME मैजिक बाइट्स से वेरिफाइड)
400wrong_file_countफ़ाइलों की संख्या चुने हुए मोड से मेल नहीं खाती
400wrong_file_typesफ़ाइल प्रकार चुने हुए मोड से मेल नहीं खाते
400invalid_file_combinationबिना मोड के फ़ाइल संयोजन किसी समर्थित मोड से मेल नहीं खाता
400invalid_optionsoptions फ़ील्ड मान्य JSON नहीं है
400invalid_optionoptions में एक मान अमान्य है (रंग, फ़ॉन्ट नाम, स्थिति…)
400file_too_largeएक फ़ाइल 500 MB से अधिक है
400text_requiredoptions.text फ़ील्ड गायब या खाली है (add_text मोड)
400video_too_longवीडियो 15 मिनट से लंबा है (add_text मोड)
400text_start_out_of_rangetext_start वीडियो के अंत से आगे है
400invalid_voiceअज्ञात voice ID।
400invalid_timingsअपठनीय टाइमिंग फ़ाइल (फ़ॉर्मेट पहचाना नहीं गया, कोई समय वाली पंक्ति नहीं, अंत शुरुआत से पहले, बहुत लंबी…)।
400invalid_orderorder एरे एक मान्य क्रमपरिवर्तन नहीं है
400invalid_job_idगलत job_id फॉर्मेट (32-कैरेक्टर हेक्स होना चाहिए)
404job_not_foundजॉब नहीं मिली — job_id अज्ञात या कभी अस्तित्व में नहीं थी
410job_expiredजॉब समाप्त — मौजूद थी लेकिन 2 घंटे की रिकवरी विंडो बीत गई
429quota_exceededप्रति दिन 20 सफल जॉब पहुँची (सभी मोड मिलाकर)
429rate_limited/api/v1/jobs.php पर 12 से अधिक कॉल/मिनट — Retry-After सेकंड प्रतीक्षा करें
500server_errorआंतरिक सर्वर त्रुटि

इंटीग्रेशन उदाहरण

प्रत्येक मोड के लिए उदाहरण — pip install requests से requests इंस्टॉल करें।

सामान्य कॉन्फ़िगरेशन

import requests, time, sys, json API_BASE = "https://rapidvideomaker.com" API_TOKEN = "rvm_your_token_here" HEADERS = {"Authorization": f"Bearer {API_TOKEN}"}

image_to_video मोड — इमेज + ऑडियो → वीडियो

with open("scene.jpg", "rb") as fi, open("narration.mp3", "rb") as fa: resp = requests.post( f"{API_BASE}/api/v1/render.php", headers=HEADERS, files=[ ("videos[]", ("scene.jpg", fi, "image/jpeg")), ("videos[]", ("narration.mp3", fa, "audio/mpeg")), ], data={ "mode": "image_to_video", "options": json.dumps({ "text": "Chapter 1", "font_size": 72, "text_color": "white", "text_position": "bottom", "box": True, "box_color": "black@0.4", "fade_duration": 0.5, "width": 1080, "height": 1920, "image_fit": "contain", # "contain" | "cover" "background_mode": "solid", # or "blur" with contain "blur_strength": 20, "bg_color": "black", # ignored if image_fit="cover" "enable_image_motion": True, "image_motion_effect": "ken_burns", "motion_intensity": 1.0, # 0.25–2.0 — photo animation amplitude "text_effect": "slide_up", # none | fade_in | slide_up | slide_down | slide_left | bounce (ignored if text_mode=word_by_word) "text_effect_intensity": 1.0, # 0.25–2.0 — text animation intensity # word-by-word reveal (mutually exclusive with text_effect): # "text_mode": "word_by_word", "word_reveal_speed": 2.0, "word_anim": "fade" }), }, )

ऑडियो संपादन

# Replace audio (deletes original) — mode=add_audio with open("video.mp4", "rb") as fv, open("music.mp3", "rb") as fa: resp = requests.post( f"{API_BASE}/api/v1/render.php", headers=HEADERS, files=[ ("videos[]", ("video.mp4", fv, "video/mp4")), ("videos[]", ("music.mp3", fa, "audio/mpeg")), ], data={"mode": "add_audio"}, ) # Keep original audio + overlay MP3 — mode=mix_audio with open("video.mp4", "rb") as fv, open("music.mp3", "rb") as fa: resp = requests.post( f"{API_BASE}/api/v1/render.php", headers=HEADERS, files=[ ("videos[]", ("video.mp4", fv, "video/mp4")), ("videos[]", ("music.mp3", fa, "audio/mpeg")), ], data={"mode": "mix_audio", "options": json.dumps({"mp3_volume": 0.7})}, # mp3_volume : 0.0 = muted, 1.0 = original volume (default), 2.0 = amplified )

overlay_video मोड — पिक्चर-इन-पिक्चर

with open("main.mp4", "rb") as fm, open("overlay.mp4", "rb") as fo: resp = requests.post( f"{API_BASE}/api/v1/render.php", headers=HEADERS, files=[ ("videos[]", ("main.mp4", fm, "video/mp4")), ("videos[]", ("overlay.mp4", fo, "video/mp4")), ], data={ "mode": "overlay_video", "options": json.dumps({ "position": "bottom-right", # top-left | top-right | bottom-left | bottom-right | center "scale": 0.25, # 0.05–1.0 — overlay width fraction "opacity": 1.0, # 0.0–1.0 — transparency "margin": 20, # 0–200 px — gap from frame edge "audio": "main", # main | overlay | mix # green screen: "chroma_key": True, "chroma_similarity": 0.15 }), }, )

add_text मोड — वीडियो पर टेक्स्ट

with open("video.mp4", "rb") as fv: resp = requests.post( f"{API_BASE}/api/v1/render.php", headers=HEADERS, files=[("videos[]", ("video.mp4", fv, "video/mp4"))], data={ "mode": "add_text", "options": json.dumps({ "text": "Hello world", # required "text_position": "bottom", # center | top | bottom "font": "amiri", # font id (see the table above) "font_size": 72, "text_start": 2, # appears at 2 s "text_duration": 5, # stays 5 s (0 = until the end) }), }, )

वीडियो मर्ज

with open("clip1.mp4", "rb") as f1, open("clip2.mp4", "rb") as f2: resp = requests.post( f"{API_BASE}/api/v1/render.php", headers=HEADERS, files=[ ("videos[]", ("clip1.mp4", f1, "video/mp4")), ("videos[]", ("clip2.mp4", f2, "video/mp4")), ], data={"transition_type": "fade", "transition_duration": "0.5"}, )

text_to_mp3 मोड — टेक्स्ट से आवाज़

# No files — text + lang (+ optional voice / slow) as form fields resp = requests.post( f"{API_BASE}/api/v1/render.php", headers=HEADERS, data={ "mode": "text_to_mp3", "text": "Welcome to Rapid Video Maker.", "lang": "en", # one of the 20 site language codes "voice": "en-US-AvaNeural", # optional — falls back to the first voice of "lang" "slow": "false", # "true" = -25% speech rate }, )

पोलिंग + डाउनलोड (सभी मोड के लिए सामान्य)

resp.raise_for_status() job_id = resp.json()["job_id"] print(f"Job created: {job_id}") for _ in range(120): # timeout 10 min (120 × 5s) r = requests.get( f"{API_BASE}/api/v1/jobs.php", headers=HEADERS, params={"job_id": job_id}, ) data = r.json() status = data["status"] if status == "queued": pos = data.get("queue_position", "?") eta = data.get("eta_minutes", "?") print(f"Queued — position {pos}, ETA ~{eta} min") elif status == "processing": print("Processing…") elif status == "ready": download_url = data["download_url"] break elif status == "error": sys.exit(f"Error: {data.get('error')}") time.sleep(5) else: sys.exit("Timeout: job not completed after 10 min") r = requests.get(download_url, stream=True) with open("output.mp4", "wb") as f: for chunk in r.iter_content(65536): f.write(chunk) print("Downloaded: output.mp4")

n8n में दो तरीके: पोलिंग (स्टेटस लूप) या वेबहुक (सर्वर n8n को कॉल करता है)। वेबहुक अनुशंसित है।

तरीका A — वेबहुक (अनुशंसित)

केवल 3 नोड, कोई लूप नहीं।

नोड 1 — वेबहुक ट्रिगर
वर्कफ़्लो इनपुट के रूप में Webhook नोड जोड़ें (मेथड POST)। जनरेट किया गया URL नोट करें।

नोड 2 — जॉब बनाएं (HTTP Request)

मेथडPOST
URLhttps://rapidvideomaker.com/api/v1/render.php
प्रमाणीकरणHeader Auth — Authorization: Bearer rvm_…
Body Content TypeForm-Data Multipart
Body paramsप्रत्येक क्लिप के लिए बाइनरी फ़ील्ड videos[] + टेक्स्ट फ़ील्ड callback_url = ऊपर वेबहुक नोड URL

सिग्नेचर वेरिफाई करने के लिए रिस्पॉन्स से webhook_secret वर्कफ़्लो वेरिएबल में सेव करें।

नोड 3 — परिणाम प्रोसेस करें (वेबहुक-ट्रिगर्ड वर्कफ़्लो में)
जब n8n सर्वर का POST प्राप्त करती है, $json.status ready या error होता है। ready पर $json.download_url में डाउनलोड URL होता है।

सिग्नेचर वेरिफाई करने के लिए: {{ $headers['x-rvm-signature'] }} को अपने webhook_secret से HMAC-SHA256 से तुलना करें।

तरीका B — पोलिंग (वेबहुक के बिना)

5 नोड, हर 10 s पर स्टेटस लूप।

नोड 1 — जॉब बनाएं — ऊपर जैसा कॉन्फ़िग, callback_url के बिना।

नोड 2 — प्रतीक्षा करें — 10 सेकंड।

नोड 3 — स्टेटस पोल करें (HTTP Request GET)

URLhttps://rapidvideomaker.com/api/v1/jobs.php
Query पैरामीटरjob_id = {{ $('नोड 1').item.json.job_id }}
प्रमाणीकरणHeader Auth — वही टोकन

नोड 4 — If: {{ $json.status }} === 'ready' → true: नोड 5 / false: नोड 2 पर वापस।

अनंत लूप से बचने के लिए Set नोड में 60 प्रयासों के बाद लूप तोड़ने वाला काउंटर जोड़ें।

नोड 5 — डाउनलोड: {{ $json.download_url }} पर HTTP Request GET, Response Format File।

चरण 1 — जॉब बनाएं (मोड चुनें)

# fusion JOB=$(curl -s -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@clip1.mp4" -F "videos[]=@clip2.mp4") # add_audio (replace audio) JOB=$(curl -s -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@video.mp4" -F "videos[]=@music.mp3" \ -F "mode=add_audio") # mix_audio (overlay music at 70% volume) JOB=$(curl -s -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@video.mp4" -F "videos[]=@music.mp3" \ -F "mode=mix_audio" -F 'options={"mp3_volume":0.7}') # image_to_video JOB=$(curl -s -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@scene.jpg" -F "videos[]=@narration.mp3" \ -F "mode=image_to_video" \ -F 'options={"text":"Chapter 1","font_size":72,"text_position":"bottom","fade_duration":0.5,"width":1080,"height":1920}') JOB_ID=$(echo $JOB | grep -o '"job_id":"[^"]*"' | cut -d'"' -f4) echo "Job ID: $JOB_ID"

चरण 2 — पोलिंग

while true; do STATUS=$(curl -s \ -H "Authorization: Bearer rvm_your_token" \ "https://rapidvideomaker.com/api/v1/jobs.php?job_id=$JOB_ID") STATE=$(echo $STATUS | grep -o '"status":"[^"]*"' | cut -d'"' -f4) echo "Status: $STATE" [ "$STATE" = "ready" ] && break [ "$STATE" = "error" ] && { echo "Error"; exit 1; } sleep 10 done

चरण 3 — डाउनलोड

DOWNLOAD_URL=$(echo $STATUS | grep -o '"download_url":"[^"]*"' | cut -d'"' -f4) curl -o output.mp4 "$DOWNLOAD_URL"

सर्वोत्तम अभ्यास

परिणाम फ़ाइलें जॉब पूरी होने के 2 घंटे बाद स्वचालित रूप से हटा दी जाती हैं। स्थिति ready होते ही वीडियो डाउनलोड करें।