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), Edit audio (1 MP4 + 1 MP3), Create a video (1 JPG/PNG + 1 MP3), Overlay video (2 MP4 picture-in-picture). Processing is asynchronous: submit files, then poll for the result.

مفت اپنا API ٹوکن حاصل کریں
اپنا API ٹوکن حاصل کرنے کے لیے اکاؤنٹ بنائیں — روزانہ 20 درخواستیں شامل۔
مفت اکاؤنٹ بنائیں پہلے سے اکاؤنٹ ہے؟ سائن ان کریں

مکمل ورک فلو

ہر انٹیگریشن یہی 4 مراحل پر مشتمل سلسلے کی پیروی کرتا ہے:

1
جاب بنائیں — POST /api/v1/render.php
اپنے Bearer ٹوکن کے ساتھ multipart/form-data کے طور پر فائلیں بھیجیں۔ 1 JPG/PNG تصویر + 1 MP3 + mode=image_to_video → ویڈیو جنریشن۔ 1 MP4 + 1 MP3 → آڈیو ترمیم۔ متعدد MP4 → ضم کرنا۔ سرور ایک منفرد job_id واپس کرتا ہے۔
2
جاب کا انتظار کریں — GET /api/v1/jobs.php?job_id=…
اس اینڈ پوائنٹ کو باقاعدگی سے پول کریں (ہر 5–10 سیکنڈ)۔ جاب queuedprocessingready (یا error) سے گزرتی ہے۔
3
ڈاؤن لوڈ URL حاصل کریں
جب اسٹیٹس ready ہو، تو رسپانس میں استعمال کے لیے تیار download_url فیلڈ ہوتی ہے۔
4
فائل ڈاؤن لوڈ کریں — GET /api/download.php?job_id=…
آخری MP4 ڈاؤن لوڈ کریں۔ فائل جاب مکمل ہونے کے 2 گھنٹے بعد تک دستیاب ہوتی ہے، پھر خود بخود حذف ہو جاتی ہے۔

تصدیق

ہر درخواست میں آپ کا API ٹوکن ہونا ضروری ہے۔ دو فارمیٹ قابل قبول ہیں:

# تصدیق — ہر درخواست میں آپ کا API ٹوکن ہونا ضروری ہے۔ دو فارمیٹ قابل قبول ہیں: Authorization: Bearer rvm_your_token_here # Alternative X-API-Key: rvm_your_token_here

آپ کا ٹوکن آپ کے ممبر ایریا میں دستیاب ہے — فی اکاؤنٹ ایک ٹوکن، رجسٹریشن پر خود بخود بنایا جاتا ہے۔

کوٹہ

ہر ممبر اکاؤنٹ میں روزانہ 20 درخواستیں ہوتی ہیں، ویب انٹرفیس اور API کے درمیان مشترک۔

POST رسپانس میں quota_used اور quota_remaining شامل ہیں۔ حد سے زیادہ ہونے پر سرور 429 سے جواب دیتا ہے۔

انٹرفیس + API = ایک ہی کاؤنٹر۔ ویب انٹرفیس اور API درخواستیں دونوں ایک ہی یومیہ کوٹہ سے 1 کریڈٹ لیتی ہیں۔

قطار

ایک وقت میں ایک جاب پروسیس ہوتی ہے۔ بیک وقت متعدد جابز جمع کرنے پر وہ قطار میں جاتی ہیں۔ انتظار کے دوران اسٹیٹس رسپانس میں شامل ہیں:

ریٹ لمٹ لاگو: /api/v1/jobs.php اینڈ پوائنٹ فی ٹوکن 12 کالز فی منٹ قبول کرتا ہے۔ اس سے زیادہ پر سرور 429 کے ساتھ جواب دیتا ہے۔

دستیاب ٹرانزیشن

براہ راست مرج کے لیے 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 فائلیں کلپس مخصوص ترتیب میں آخر تک جوڑی جاتی ہیں۔ کلپس کے درمیان اختیاری ٹرانزیشن۔
آڈیو ترمیم add_audio یا mix_audio 1 MP4 + 1 MP3 ویڈیو کی آڈیو ٹریک کو تبدیل یا بہتر کرتا ہے۔ ویڈیو ٹریک کبھی ری-انکوڈ نہیں ہوتی (-c:v copy).
ویڈیو بنائیں image_to_video 1 JPG/PNG + 1 MP3 ایک جامد تصویر اور آڈیو فائل سے ویڈیو تیار کرتا ہے۔ ٹیکسٹ اوورلے، فیڈ، ریزولوشن اور FPS options فیلڈ کے ذریعے قابل ترتیب۔
Overlay video overlay_video 2 MP4 Overlays a second video on top of the main one. Position, size, opacity and audio configurable via the options field.
متن سے MP3 text_to_mp3 (صرف متن) متن کو تقریر میں بدلتا ہے اور ایک MP3 فائل واپس کرتا ہے۔ کوئی فائل اپ لوڈ ضروری نہیں — mode=text_to_mp3، text اور lang فارم فیلڈز کے طور پر بھیجیں۔
سخت تصدیق: ہر موڈ کے لیے فائلوں کی درست تعداد اور اقسام ضروری ہیں۔ MIME اقسام میجک بائٹس کے ذریعے تصدیق کی جاتی ہیں۔
مدت کا قاعدہ: آڈیو اور image_to_video موڈز میں نتیجہ کی مدت MP3 کی مدت پر مقفل رہتی ہے۔

عام پیرامیٹرز (multipart/form-data)

فیلڈقسمضروریتفصیل
videos[]File[]ہاںپروسیس کرنے کی فائلیں۔ موڈ کے مطابق: 2–20 MP4، یا 1 MP4 + 1 MP3، یا 1 تصویر (JPG/PNG) + 1 MP3۔ فی فائل زیادہ سے زیادہ 500 MB۔
modestring*image_to_video | add_audio | mix_audio۔ ان تین موڈز کے لیے ضروری ہے۔
orderJSONصرف fusion موڈ — کلپ ترتیب کی وضاحت کرنے والی JSON انڈیکس ارے۔
transition_typestringصرف fusion موڈ۔ ڈیفالٹ: none۔
transition_durationfloatصرف fusion موڈ۔ مدت 0.2–2.0 سیکنڈ۔ ڈیفالٹ: 0.5۔
optionsJSONصرف image_to_video موڈ — رینڈر پیرامیٹرز کا JSON آبجیکٹ (نیچے دیکھیں)۔
callback_urlstringپبلک URL (http/https) جو جاب مکمل ہونے پر کال ہوتی ہے۔ رسپانس میں webhook_secret شامل ہے۔

options پیرامیٹرز — image_to_video موڈ

سب اختیاری۔ فراہم نہ کردہ قدریں → ورکر ڈیفالٹ لاگو کرتا ہے۔

کلیدقسمڈیفالٹتفصیل
textstring""اوورلے کے طور پر دکھایا جانے والا متن۔ خالی = کوئی متن نہیں۔ زیادہ سے زیادہ 500 حروف۔
font_sizeint60پکسل میں فانٹ سائز۔ رینج: 10–300۔
text_colorstring"white"متن کا رنگ (جیسے white, yellow, #ffffff
text_positionstring"center"متن کی پوزیشن: center, top, bottom۔
boxbooltrueمتن کے پیچھے نیم شفاف پس منظر۔
box_colorstring"black@0.4"FFmpeg فارمیٹ میں رنگ + غیر شفافیت: color@opacity۔
fade_durationfloat0.5سیکنڈ میں فیڈ ان/آؤٹ مدت (0–2)۔ 0 = کوئی فیڈ نہیں۔
widthint1080پکسل میں ویڈیو چوڑائی (64–3840، جفت عدد)۔
heightint1920پکسل میں ویڈیو اونچائی (64–3840، جفت عدد)۔
fpsint24فریم ریٹ (1–60)۔
image_fitstring"contain"فریمنگ موڈ: contain = مکمل تصویر نظر آتی ہے؛ cover = تصویر پورے فریم کو بھرنے کے لیے زوم ہوتی ہے۔
bg_colorstring"black"پس منظر رنگ اگر تصویر ہدف ریزولوشن نہ بھرے — صرف image_fit=contain کے ساتھ متعلق۔
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_modestring"static"متن ظاہر کرنے کا موڈ۔ static (ڈیفالٹ): پہلے فریم سے پورا متن نظر آتا ہے۔ word_by_word: word_reveal_speed کی رفتار سے الفاظ ایک ایک کر کے ظاہر ہوتے ہیں۔ text_effect کے ساتھ استعمال نہیں ہو سکتا: text_mode=word_by_word ہونے پر text_effect نظرانداز ہو جاتا ہے۔
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 کے ساتھ۔

options parameters — overlay_video mode

All optional. Upload order matters: the first file is the main video (background), the second file is the overlay (foreground). Use chroma_key to remove a green screen from the overlay.

کلیدقسمڈیفالٹتفصیل
positionstring"bottom-right"Corner where the overlay is placed: top-left, top-right, bottom-left, bottom-right, or center.
scalefloat0.30Overlay size as a fraction of the main video width. 0.25 = 25% of the width. Range: 0.05–1.0.
opacityfloat1.0Overlay transparency. 1.0 = fully opaque, 0.0 = invisible.
marginint10Gap in pixels between the overlay and the frame edge. Ignored when position=center. Range: 0–200.
audiostring"main"Which audio to keep. main: main video audio only. overlay: overlay audio only. mix: both tracks blended at equal volume.
chroma_keyboolfalseSet to true to remove the pure green (#00FF00) background of the overlay — useful for webcam or animations filmed on a green screen.
chroma_similarityfloat0.20Green screen tolerance. Low = strict match (preserves subject edges). High = broader removal (handles uneven lighting). Recommended: 0.10–0.20 for a digital green, 0.25–0.45 for a physical screen. Range: 0.01–0.60.

options پیرامیٹرز — آڈیو ترمیم (mix_audio)

صرف mode=mix_audio کے ساتھ دستیاب۔

کلیدقسمڈیفالٹتفصیل
mp3_volumefloat1.0اوورلیڈ MP3 کی والیوم (0.0 = خاموش، 1.0 = اصل والیوم، 2.0 = دوگنا)۔

کامیابی رسپانس (HTTP 200)

{ "success": true, "job_id": "a3f1c8d2e5b09471...", "mode": "fusion", // "fusion" | "add_audio" | "mix_audio" | "image_to_video" | "overlay_video" "file_count": 2, "transition": null, "quota_used": 1, "quota_remaining": 9, "status_url": "https://rapidvideomaker.com/api/v1/jobs.php?job_id=a3f1c8..." }

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" # 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 — black outline around characters (0 = disabled) # 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)

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 example — overlay_video mode

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 مثال — ویڈیوز ضم کریں

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"
GET /api/v1/jobs.php?job_id=<hex32> جاب اسٹیٹس

ممکنہ حالتیں

حالتمعنیاضافی فیلڈز
queued قطار میں، ابھی پروسیس نہیں ہوئی queue_position, queue_total, eta_minutes
processing FFmpeg پروسیسنگ جاری ہے
ready مکمل — فائل دستیاب download_url, created_at, expires_at
error پروسیسنگ ناکام error (message)

حالت کے مطابق رسپانس

{ "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 List all jobs created with this token (paginated, sorted by date desc)

عام پیرامیٹرز (multipart/form-data)

apidocs_th_paramقسمڈیفالٹapidocs_th_desc
pageinteger1Page number (starts at 1)
limitinteger20Results per page (max 50, default 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 }
POST /api/v1/publish.php YouTube یا TikTok پر ویڈیو شائع کریں

ایک یا زیادہ سوشل اکاؤنٹس پر مکمل شدہ job (status=ready) شائع کرتا ہے۔ ٹوکن ایک ممبر اکاؤنٹ کا ہونا چاہیے (ایڈمن ٹوکن نہیں)۔

پیشگی ضرورت: اس endpoint کو استعمال کرنے سے پہلے سوشل اکاؤنٹس (YouTube، TikTok) کو ممبر ایریا کے پبلیکیشنز پیج میں OAuth کے ذریعے جوڑنا ضروری ہے۔ ہر اکاؤنٹ کا account_id وہاں دکھایا جاتا ہے۔

عام پیرامیٹرز (multipart/form-data)

apidocs_th_paramقسمapidocs_th_requiredapidocs_th_desc
job_idstringapidocs_requiredمکمل ویڈیو کا job ID (hex 32 حروف)
publicationsarrayapidocs_requiredاشاعت اشیاء کی صف (زیادہ سے زیادہ 10)

اشاعت آبجیکٹ

apidocs_th_paramقسمapidocs_th_requiredapidocs_th_desc
account_idintegerapidocs_requiredجڑے سوشل اکاؤنٹ کی ID — ممبر ایریا کے پبلیکیشنز پیج پر دکھائی دیتی ہے
titlestringویڈیو عنوان (زیادہ سے زیادہ 512 حروف)
descriptionstringویڈیو تفصیل (زیادہ سے زیادہ 5 000 حروف)
tagsstringکاما سے الگ ٹیگز (زیادہ سے زیادہ 1 024 حروف)
visibilitystringpublic | private | unlisted — ڈیفالٹ: public
tiktok_modestringdraft | direct — صرف TikTok — ڈیفالٹ: direct
tiktok_privacystringdirect موڈصرف TikTok — direct موڈ میں ضروری
allow_commentbooleanصرف TikTok — تبصروں کی اجازت دیں
allow_duetbooleanصرف TikTok — ڈیوئٹ کی اجازت دیں
allow_stitchbooleanصرف TikTok — سٹچ کی اجازت دیں
your_brandbooleanصرف TikTok — نامیاتی تشہیری مواد ("آپ کا برانڈ")۔
branded_contentbooleanصرف TikTok — برانڈڈ مواد کا انکشاف
tiktok_cover_msintegerصرف TikTok — کور فریم ٹائم اسٹیمپ ms میں (0–60 000، ڈیفالٹ 1 000)

حالت کے مطابق رسپانس

{ "success": true, "results": [ { "account_id": 12, "pub_id": 47, "status": "published", "provider": "youtube", "url": "https://youtu.be/abc123" } ] }

فی اشاعت خطا کوڈ

apidocs_th_codeمعنی
job_not_readyjob ابھی مکمل نہیں ہوا
mode_not_supportedtext_to_mp3 jobs شائع نہیں کیے جا سکتے
account_not_foundاکاؤنٹ نہیں ملا یا منقطع ہے
tiktok_privacy_requireddirect موڈ میں رازداری کی سطح ضروری ہے
publication_failedاپلوڈ کے دوران فراہم کنندہ نے خطا واپس کی

cURL مثال

curl -X POST https://rapidvideomaker.com/api/v1/publish.php \ -H "Authorization: Bearer rvm_your_token" \ -H "Content-Type: application/json" \ -d '{ "job_id": "a3f1c8...", "publications": [ { "account_id": 12, "title": "My video", "description": "Created with RapidVideoMaker", "visibility": "public" } ] }'
GET /api/download.php?job_id=<hex32> آخری فائل ڈاؤن لوڈ کریں

آخری MP4 فائل بطور سٹریم واپس کرتا ہے (Content-Type: video/mp4)۔ ٹوکن کی ضرورت نہیں۔ صرف اس وقت دستیاب جب اسٹیٹس ready ہو۔

فائل جاب مکمل ہونے کے 2 گھنٹے بعد حذف ہو جاتی ہے۔

اختیاری پیرامیٹر

پیرامیٹرتفصیل
filenameڈاؤن لوڈ کی گئی فائل کا تجویز کردہ نام (جیسے meri-video.mp4)

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 تصاویر قبول ہیں
400wrong_file_countفائلوں کی تعداد منتخب موڈ سے مطابقت نہیں رکھتی
400wrong_file_typesفائل اقسام منتخب موڈ سے مطابقت نہیں رکھتیں
400invalid_file_combinationموڈ کے بغیر فائل مجموعہ کسی معاون موڈ سے مطابقت نہیں رکھتا
400invalid_optionsoptions فیلڈ درست JSON نہیں ہے
400invalid_optionoptions میں ایک قدر غلط ہے
400file_too_largeایک فائل 500 MB سے زیادہ ہے
400invalid_orderorder ارے ایک درست پرمیوٹیشن نہیں ہے
400invalid_job_idغلط job_id فارمیٹ (32 حرفی hex ہونا چاہیے)
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" "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 mode — picture-in-picture

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 }), }, )

ویڈیوز ضم کریں

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"}, )

پولنگ + ڈاؤن لوڈ (تمام موڈز کے لیے مشترک)

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

نوڈ 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 ہوتا ہے۔

دستخط تصدیق کے لیے: اپنے webhook_secret سے raw body کے HMAC-SHA256 کے ساتھ {{ $headers['x-rvm-signature'] }} کا موازنہ کریں۔

طریقہ B — پولنگ (ویب ہک کے بغیر)

5 نوڈز، ہر 10 سیکنڈ میں اسٹیٹس لوپ۔

نوڈ 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 پر واپس۔

لامتناہی لوپ سے بچنے کے لیے 60 کوششوں کے بعد لوپ توڑنے کے لیے Set نوڈ میں کاؤنٹر شامل کریں۔

نوڈ 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 گھنٹے بعد خود بخود حذف ہو جاتی ہیں۔