Communitygithub.com

MostaDaoud/video-reel-studio

Orchestrator that turns one sentence into a finished vertical video: writes the brief, picks the mode (talking reel, montage, podcast, motion film, web/app demo, cover only), runs the video-ad-editor pipeline end to end, delegates fresh-context Arabic caption and visual audits, and refuses delivery while an automated gate fails (source, cut, captions, frames, loudness, true peak, safe zone, package). Use when user says \"منتج الفيديو ده\", \"حوّله لريل\", \"اعمله كاب كت\", \"اعمل كوفر\", \"ثمبني

What is video-reel-studio?

video-reel-studio is a Claude Code agent skill that orchestrator that turns one sentence into a finished vertical video: writes the brief, picks the mode (talking reel, montage, podcast, motion film, web/app demo, cover only), runs the video-ad-editor pipeline end to end, delegates fresh-context Arabic caption and visual audits, and refuses delivery while an automated gate fails (source, cut, captions, frames, loudness, true peak, safe zone, package). Use when user says \"منتج الفيديو ده\", \"حوّله لريل\", \"اعمله كاب كت\", \"اعمل كوفر\", \"ثمبني.

Works with✓Claude Code✓Codex CLI✓Cursor✓Gemini CLI✓OpenCode
npx skills add https://github.com/MostaDaoud/video-reel-studio/tree/HEAD/skill/video-reel-studio

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation

Video Reel Studio — مشرف واحد، بوابات صارمة

السكل ده مش بيرسم ومش بيقصّ بنفسه. هو مشرف فوق خمس سكيلات موجودة:

السكليستخدمه المشرف لـ
video-ad-editorكل السكربتات (scripts/)، ريل الكلام، الكابشن، الكوفر
montage-videoمونتاج مقاطع بلا كلام على الإيقاع
podcast-videoكاميرتين ← ريلات أو حلقة 16:9
motion-videoفيلم موشن من نص (محرّك motion/)
thumbnail-videoكفر الريل وثمبنيل يوتيوب

جذر السكربتات: .opencode/skills/video-ad-editor/ — مرّر مسارات كاملة.

المنصّات: ويندوز وماك

السكل مكتوب ليعمل على الاتنين. الفرق كله في إزاي تنادي الأدوات، مش في المنطق:

ويندوزماك
بايثونpythonpython3
سكربتات .sh& "C:\Program Files\Git\bin\bash.exe" … (⛔ مش bash العادي = WSL)bash …
كرومC:\Program Files\Google\Chrome\Application\chrome.exe/Applications/Google Chrome.app/Contents/MacOS/Google Chrome
3DGL=gpu (ANGLE/D3D11)Metal تلقائي
مساراتD:/work/x أو D:\work\x/Users/you/work/x

قبل أي شغل، مرة واحدة في الجلسة:

python scripts/preflight.py        # ماك: python3

يفحص: بايثون، ffmpeg/ffprobe، node، bash، كروم، numpy/scipy، السكلات الشقيقة، الخط، ومجلد الهويات — ويطبع أمر التثبيت الصح لكل نظام (winget على ويندوز، brew على ماك). البوابة G-2.

السكربتات نفسها بتكتشف المنصة بنفسها: _vision.py يختار أدوات أبل على ماك والبدائل المفتوحة على ويندوز، و_chrome_flags.js يختار Metal على ماك وSwiftShader على غيره، و31_device3d.js وmotion/render.js بيدوّروا على كروم في مسارات النظامين.

العقد: جملة واحدة ← ملف جاهز

المستخدم بيديك ملف أو لينك وجملة. إنت اللي ماسك كل الخطوات. متديلوش أوامر، ومتسألوش عن حاجة تقدر تفحصها بنفسك. اسأل سؤال واحد بس لما القرار يبقى ذوق مش تقني (أنهي زاوية، أنهي هوك، نشيل أنهي جملة).

أوامر مصرية — لو قال كده، ده الوضع

لو قالالوضع
«منتج الفيديو ده» · «حوّله لريل» · «اقصّ السكتات» · «هات الكابشن»talking-reel
«اعمل مونتاج من المقاطع دي» · «ركّبهم على الأغنية»montage
«اعمل ريلات من الحلقة» · «عندي كاميرتين» · «الحلقة كاملة»podcast
«اعمل فيديو موشن من النص ده» · «اشرح بالحركة» · «موشن جرافيكس»motion
«اشرح الموقع ده بفيديو» · «ديمو للتطبيق» · «اللينك ده»web-demo
«اعمل كوفر» · «ثمبنيل يوتيوب» · «صورة مصغرة»cover-only
«عايز أعدّل بنفسي» · «اعمله كاب كت» · «افتح الاستوديو»الوضع الأساسي + كاب كت / استوديو

مش لازم يذكر الوضع. لو الجملة فيها فعل + ملف، إنت تستنتج الوضع من الجدول ده وتكمّل.

الخط السريع

#المرحلةالمخرجالبوابة
-2فحص البيئة: preflight.py (ويندوز/ماك)تقرير أدواتG-2
-1الهوية (اختياري): اسأل الأول — محفوظة / جديدة / افتراضيtheme.json + brand.mdG-1
0اقرا الطلب واكتب brief.jsonpromise + mode + lengthG0
1المصدر: نسخ، فحص فريمات، إضاءةsrc.movG1
2قص + تفريغ + تصحيح + كابشنcut.json a.json caps.jsonG2 · G3 · G3b
3تصميم: حركات، مشاهد، معاينةscenes*.js + sheet.jpgG4b
4رسم كاملout/ = المدة×30G4
5ترميز + ماستر + ترجمةad-master.mp4 .srtG5
6كفر + ثمبنيل + معاينة جوالcover.jpg …G6 · G6b
7تقرير التسليمgates.mdG8

التفاصيل والأوامر الدقيقة ← references/pipeline.md. الأدوار ومتى تسلّم لوكيل ← references/roles.md. كل شرط بوابة وحدوده ← references/gates.md. الاتجاه الفني: قبل أول مشهد اختار ستايل من styles/pack.json (10) — python scripts/style_pack.py apply "<work>" <id> — الستايل يحكم الحركة والملمس، والبراند يحكم اللون ← references/styles-adapted.md.

-1أ) الوكيل والموديل — قبل الهوية

ai.json بيتكتب قبل أي حاجة: الوكيل معروف من البيئة (إنت شغّال جواه)، فما تسألش عنه. اسأل سؤال واحد بس لو الموديل مش واضح:

«هتشتغل على أنهي موديل؟ الاسم بس — عشان أظبّط حجم المشاهد والمراجعة عليه.»

الإجابةالأثر الفوري
موديل قوي + vision6–8 مشاهد، لحظات عمق، مراجعة بصرية بوكيل فرعي
قوي بلا vision4–6 مشاهد، مراجعة أرقام فقط + عين المستخدم على sheet.jpg
سريع/رخيص3–5 مشاهد من أنماط مثبتة، معاينة واحدة، كل بوابة مرة
سياق صغيرقسّم التفريغ لنوافذ، ما تقراش النص كله
  • الوكيل: opencode · claude-code · codex · cursor · gemini-cli — وpreflight.py يقارن علامة المشروع بـai.json.
  • لو القدرات مش معروفة، سيبها null → السكل ياخد الحذر (أرقام + عين).
  • التفاصيل والمصفوفة الكاملة ← references/ai-fit.md.

-1ب) الهوية — أونبوردنج اختياري (متفرضهوش)

أول طلب فيديو، قبل أي سكربت، اسأل سؤال واحد بس:

«قبل ما نبدأ: نجهّز هويتك مرة واحدة (5 دقايق: ألوان، خط، نبرة، ممنوعات)، ولا نمشي على هوية محفوظة، ولا نكمّل بالافتراضي ونغيّر بعدين؟»

ردّهتعمل إيه
«فيه هوية محفوظة»python scripts/onboard.py list ← اذكر الاسم ← apply <work> <slug>
«جهّزها»الأسئلة السبعة ← new ← card ← اعرض البطاقة ← apply
«كمّل بالافتراضي»ما تسألش تاني في نفس المشروع؛ الافتراضي #0B0C0C · #F4F2EE · #19C3AE · Cairo · chunk
«مشغول»ابدأ الفيديو، واعرض الهوية بعد أول تسليم
  • الأسئلة السبعة (اسم، هاندل، جمهور، نبرة، نداء، ألوان، ممنوعات) ← references/onboarding.md.
  • عنده صور/لوجو؟ استخرج اللوحة بـscripts/00_theme_refs.py بدل التخمين.
  • G-1: تباين ink/bg ≥ 4.5، acc/bg ≥ 3، onAcc/acc ≥ 4.5. onboard.py new يرفض الحفظ لو فشل.
  • الهوية تُحفظ في ~/.config/opencode/brands/<slug>.json وتُستخدم في كل مشروع بعد كده.

⛔ ممنوع تبدأ الأونبوردنج من غير ما تسأل، أو توقف المشروع عشان الألوان، أو تسأل أكتر من 7 أسئلة.

G0 — البريف (متتخطاهوش)

اكتب <work>/brief.json قبل أي سكربت. القالب: assets/brief.template.json.

  • promise = اللي المشاهد بيفهمه في أول 3 ثواني. جملة واحدة. لو مش قادر تكتبها، يبقى إنت ما فهمتش الطلب.
  • mode من الستة. لو الطلب يحتمل وضعين، اختار الأقرب لنية المستخدم وقول له في جملة إيه اللي فهمته.
  • length_s = نطاق واقعي (ريل 45–90 ث؛ المقاطع الطويلة ← كذا ريل، مش ريل واحد).
  • must_keep = أسماء وأرقام ممنوع تنحذف أو تتحوّل.

بوابة G0: التلاتة موجودين؟ لو لأ، سؤال واحد وبعدين كمّل.

القيادة: من يقرر

إنت اللي بتقود. متستناش إذن على كل خطوة، ومتسلّمش الشغل لوكيل يديرك.

  • افحص بنفسك كل حاجة تقنية: المدة، الفريمات، الصوت، الحجم، المنطقة الآمنة.
  • سلّم الحكم بس لما يكون الحكم أحسن بذاكرة نظيفة: مراجعة العربي، ومراجعة الصور.
  • الوكيل بيقرأ ويحكم بس — مش بيكتب ومش بيرسم. قالب البرومبت في references/roles.md.

البوابات: fail-closed

python scripts/gate_runner.py "<work>" --safe
  • يطبع جدولًا، ويكتب gates.json + gates.md، ويخرج بـ1 لو فيه blocker.
  • مفيش تسليم وأي blocker مفتوح. ومفيش "نجرّب ونشوف".
  • ميزانية محاولتين لكل بوابة. الثالثة = السبب مش مفهوم ← اقف واسأل المستخدم بدليل (لقطة + نص البوابة).
  • ممنوع تعطّل بوابة أو ترفع --maxmb أو تتجاهل warn «لأنه صغير». ده تزوير.

القواعد الصارمة

  1. الكابشن نسخة أمينة من كلامه — لا تخترع، ولا تحذف كلمة بلا سبب، والتصحيح يحافظ على عدد الكلمات.
  2. المنطقة الآمنة الأول — مفيش نص في y 0–150 ولا y 1620–1920، ولا في عمود الأزرار اليمين.
  3. الألوان من theme.json فقط؛ صفر تعديل لوني على صورته إلا بموافقته.
  4. كل رقم على الشاشة من facts.md أو من كلامه — لا رقم من عندك.
  5. مفيش نشر ولا جدولة. التسليم ملفات.
  6. الكفر إلزامي — أول فريم، ومقروء بحجم الجوال (cover_phone.jpg).
  7. الحجم والعلو جزء من الجودة: ≤29 ميقا، −14 LUFS، ذروة ≤ −1.0 dBTP.

أنماط التشغيل

  • ريل كلام (الافتراضي): talking-reel — الفيديو الكامل يبقى ملء الشاشة، والرسوم في الحزام العلوي أو خلفه.
  • مقاطع بلا كلام: montage — يحتاج 10–20 مقطعًا + مسار صوتي. لا يعيد استخدام اللقطة.
  • بودكاست: podcast — كاميرتان. الهوك المكتوب إلزامي.
  • فيلم موشن: motion — بلا تعليق افتراضيًا (audio.py --no-bed --lufs -20). 3D يحتاج GL=gpu.
  • موقع/تطبيق: web-demo — 27_web_capture.js ثم 30_demo.js (أو 31_device3d.js).
  • كفر فقط: cover-only.

تقرير التسليم

سطرين، وبعدين جدول قصير:

المدة · القطع · الحجم · العلو · الذروة
البوابات 7/7 ✅ (أو warn مقبول + سببه)
الملفات: mp4 · srt · txt · cover.jpg
ما اتنشرش حاجة.

اقتصاد التوكنز

  • أمر واحد لكل مرحلة، مش 41 أمر متفرق.
  • ورقة لقطات واحدة (sheet.jpg) بدل 6 صور.
  • متقرأش ملف كامل: grep -n للدالة، tail -5 للسجل.
  • المراجع عند الحاجة فقط — هذا الملف + مرجع واحد مناسب للمرحلة.
  • متعرضش صورة إلا لسؤال بصري مفيش طريقة تانية تجاوبه.

الفشل المتوقع (لا تفاجأ)

الأعراضالسببالحل
UnicodeEncodeErrorكتابة بلا utf-8 على ويندوزشغّل PYTHONUTF8=1 (السكربتات مُصلحة، لكن لا تعتمد)
3D يعلّقمسار Chrome/مسار /workCHROME مضبوط + GL=gpu (مُصلح في 31_device3d)
الكابشن متأخر/مقطوعالقص تغيّر بعد الكابشنأعد 02_captions.py ثم G3
ذروة عالية بعد الضغطAAC يرفع القمةalimiter في مسار الكفر أو 06c_loudfix.sh
التفريغ يهلوسعامية/مصطلح إنجليزي02a_whisper_check.py --fix ثم صحّح بعدد كلمات ثابت

Related Skills