Video Reel Studio — مشرف واحد، بوابات صارمة
السكل ده مش بيرسم ومش بيقصّ بنفسه. هو مشرف فوق خمس سكيلات موجودة:
| السكل | يستخدمه المشرف لـ |
|---|---|
video-ad-editor | كل السكربتات (scripts/)، ريل الكلام، الكابشن، الكوفر |
montage-video | مونتاج مقاطع بلا كلام على الإيقاع |
podcast-video | كاميرتين ← ريلات أو حلقة 16:9 |
motion-video | فيلم موشن من نص (محرّك motion/) |
thumbnail-video | كفر الريل وثمبنيل يوتيوب |
جذر السكربتات: .opencode/skills/video-ad-editor/ — مرّر مسارات كاملة.
المنصّات: ويندوز وماك
السكل مكتوب ليعمل على الاتنين. الفرق كله في إزاي تنادي الأدوات، مش في المنطق:
| ويندوز | ماك | |
|---|---|---|
| بايثون | python | python3 |
سكربتات .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 |
| 3D | GL=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.md | G-1 |
| 0 | اقرا الطلب واكتب brief.json | promise + mode + length | G0 |
| 1 | المصدر: نسخ، فحص فريمات، إضاءة | src.mov | G1 |
| 2 | قص + تفريغ + تصحيح + كابشن | cut.json a.json caps.json | G2 · G3 · G3b |
| 3 | تصميم: حركات، مشاهد، معاينة | scenes*.js + sheet.jpg | G4b |
| 4 | رسم كامل | out/ = المدة×30 | G4 |
| 5 | ترميز + ماستر + ترجمة | ad-master.mp4 .srt | G5 |
| 6 | كفر + ثمبنيل + معاينة جوال | cover.jpg … | G6 · G6b |
| 7 | تقرير التسليم | gates.md | G8 |
التفاصيل والأوامر الدقيقة ← 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 بيتكتب قبل أي حاجة: الوكيل معروف من البيئة (إنت شغّال جواه)، فما تسألش عنه.
اسأل سؤال واحد بس لو الموديل مش واضح:
«هتشتغل على أنهي موديل؟ الاسم بس — عشان أظبّط حجم المشاهد والمراجعة عليه.»
| الإجابة | الأثر الفوري |
|---|---|
| موديل قوي + vision | 6–8 مشاهد، لحظات عمق، مراجعة بصرية بوكيل فرعي |
| قوي بلا vision | 4–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 «لأنه صغير». ده تزوير.
القواعد الصارمة
- الكابشن نسخة أمينة من كلامه — لا تخترع، ولا تحذف كلمة بلا سبب، والتصحيح يحافظ على عدد الكلمات.
- المنطقة الآمنة الأول — مفيش نص في y 0–150 ولا y 1620–1920، ولا في عمود الأزرار اليمين.
- الألوان من
theme.jsonفقط؛ صفر تعديل لوني على صورته إلا بموافقته. - كل رقم على الشاشة من
facts.mdأو من كلامه — لا رقم من عندك. - مفيش نشر ولا جدولة. التسليم ملفات.
- الكفر إلزامي — أول فريم، ومقروء بحجم الجوال (
cover_phone.jpg). - الحجم والعلو جزء من الجودة: ≤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/مسار /work | CHROME مضبوط + GL=gpu (مُصلح في 31_device3d) |
| الكابشن متأخر/مقطوع | القص تغيّر بعد الكابشن | أعد 02_captions.py ثم G3 |
| ذروة عالية بعد الضغط | AAC يرفع القمة | alimiter في مسار الكفر أو 06c_loudfix.sh |
| التفريغ يهلوس | عامية/مصطلح إنجليزي | 02a_whisper_check.py --fix ثم صحّح بعدد كلمات ثابت |