---
name: video-ad-editor
description: يحوّل فيديو حديث-للكاميرا (سيلفي/تيليبرومبتر) إلى إعلان عمودي 9:16 كامل — يشيل السكتات، يفرّغ الكلام بتوقيت كل كلمة، يركّب كابشن عربي متزامن، ويبني موشن قرافيكس ومشاهد بي-رول مرسومة بالكود، وكرت نهاية بدعوة للتفاعل — كله بألوان صانع المحتوى نفسه. وفيه وضع ثانٍ للمونتاج: مجموعة مقاطع بلا كلام (مقاهي، سفر، منتج، مكان) يختار أحلى لحظة بكل مقطع ويركّبها مونتاجاً واحداً بإيقاع. ALWAYS use this skill when the user says "منتج هذا المقطع"، "سو من هذا الفيديو إعلان"، "شيّل السكتات"، "حوّل الفيديو لريل"، "ركّب كابشن عربي"، "ابي موشن قرافيكس على الفيديو"، "اقص الصمت"، "عندي ٣٠ مقطع سوّ لي منها فيديو"، "ركّب لي مونتاج من هالمقاطع"، "اختار أحلى اللقطات"، أو يرسل فيديو كلام أو مجلد مقاطع ويطلب مونتاجاً أو إعلاناً. مو للكاروسيل (استخدم carousel-creator) ولا لكفر الفيديو (استخدم animated-video-cover).
---

# مونتاج إعلان الفيديو — بلا برنامج مونتاج

## الفكرة
المونتاج كله كود: ffmpeg يقص، وِسبر يفرّغ بتوقيت الكلمة، ومحرّك رسم يركّب الكابشن والموشن قرافيكس فوق الفيديو. المخرَج ملف MP4 واحد جاهز للنشر.

## وضعان — حدّد وين انت بأول سطر

| | **إعلان كلام** (الافتراضي) | **مونتاج مقاطع** |
|---|---|---|
| المدخل | فيديو واحد فيه شخص يتكلم | مجلد فيه مقاطع كثيرة بلا كلام |
| مثاله | سيلفي · تيليبرومبتر · شرح | مقهى · سفرة · منتج · مكان · فعالية |
| الاختيار على | الكلام (تشيل السكتات والجُمل المعادة) | المشهد نفسه (وضوح · حركة · إضاءة) |
| فيه كابشن؟ | نعم، متزامن بالكلمة | ⛔ لا — ولا تفريغ أصلاً |
| الخطوات | 0-11 تحت | قسم «وضع المونتاج» تحت وحده |

**شلون تعرف الوضع بلا ما تسأله؟** أعطاك **مجلداً** أو أكثر من مقطع = مونتاج. أعطاك **ملفاً واحداً فيه كلام** = إعلان كلام.
وإذا جاك مجلد وطلع فيه كلام مسموع وطلب كابشن — امشِ بوضع الكلام على المقطع الأساسي.
⛔ **لا تسأله «أي وضع تبي؟»** — اقرأ المدخل وامشِ، وقل له بجملة وحدة شنو فهمت.

## محرّكان — بس ⛔ لا تسأله أي سؤال عنهم

السكل واحد، والمحرّك اللي يرسم المشاهد اثنان. **القرار قرارك أنت، مو قراره.**

**ابدأ بالخفيف دائماً وبلا كلام.** لا تذكر كلمة «ريموشن» ولا «كانفس» ولا «محرّك» ولا تعرض عليه خيارين — الشخص اللي قدامك يبي إعلاناً، ما يبي يختار تقنية.

**متى تفتح الثاني؟** بس إذا **هو** قال شيئاً من هالنوع، بعد ما يشوف الإعلان:
> «أبي أعدّل بنفسي» · «ما عجبني مكان هالشي، أبي أحرّكه» · «فيه شاشة أشوف فيها التعديل؟» · «أبي أجرّب أشياء بنفسي»

عندها قل له جملة وحدة بلا مصطلحات: «أفتح لك شاشة تعديل مباشرة تشوف فيها الفيديو وتحرّك أي شي وتشوف النتيجة فوراً — تنزيلها ياخذ ٥ دقايق مرة وحدة، أبدأ؟»
وبعد موافقته: `04b_remotion.sh <work> setup` ثم `studio`.
**ما تعيد أي خطوة سابقة** — القص والتفريغ والكابشن والمؤثرات كلها مشتركة، ينتقل الشغل كما هو.

| | **الخفيف** (الافتراضي) | **شاشة التعديل** |
|---|---|---|
| متى | كل مرة، بلا سؤال | بس إذا طلب يعدّل بنفسه |
| التنزيل | صفر إضافي | ~500 ميقا مرة وحدة |
| ما يشوفه | لقطات تعرضها عليه | فيديو حي يسحب فيه ويشوف فوراً |
| الترخيص | حر | شركة بأربعة موظفين فأكثر تدفع (بلّغه إذا كان شركة) |
| الأمر | `04_render_frames.js` | `04b_remotion.sh` |

---

## ⛔ أسلوبك مع المستخدم — اقرأها قبل أي شي

**أنت اللي تجهّز، مو هو.** الشخص اللي قدامك يمكن ما يعرف شنو هو ffmpeg ولا يبي يعرف. ممنوع تعطيه قائمة أوامر ينفّذها.

- **لا تعرض عليه متطلبات ولا تسأله «عندك جذيه؟»** — افحص بنفسك، وإذا ناقص شي قل: «ناقصني أداتين أجهّزهم لك الحين، ياخذ دقيقتين — أبدأ؟» وبعد موافقته نزّلها بنفسك.
- **بلا مصطلحات.** لا تقول «puppeteer» ولا «كوديك» — قل «أداة ترسم الشرائح» و«جودة الفيديو».
- **قل له وين احنا كل خطوة**، وقدّر الوقت: «شلت السكتات — نصف الفيديو راح. الحين أفرّغ كلامك، ٣ دقايق.»
- **اطلب شي واحد بكل مرة.** لا تطلب الفيديو والألوان والحساب بجملة وحدة.
- **لا تسلّم بلا ما تريه.** بعد كل مرحلة مهمة، اعرض عليه لقطة أو ملخصاً.

---

## الخطوة 0 — جهّز بصمت

```bash
bash scripts/00_setup.sh
```
- رجّع «كل شي جاهز» → لا تذكر الموضوع أصلاً، انتقل للخطوة التالية.
- رجّع ناقصاً → قل له بجملة وحدة شنو راح تنزّل وليش، خذ موافقته، ثم:
```bash
bash scripts/00_setup.sh --install
```
لو فشل شي (مثلاً كروم مو منصّب) قل له الحل بجملة بشرية، بلا لصق رسالة الخطأ.

جهّز مجلد شغل، وانسخ له `scripts/compose.REFERENCE.html` باسم `compose.html` و`scripts/studio.html`.

---

## الخطوة 1 — هويته البصرية (ما فيه لون افتراضي)

⛔ **ممنوع تفترض الكريمي والطيني.** ذاك ثيم كلود، مو ثيم كل الناس.

1. دوّر `.auto-memory/creator-profile.md` — إن وُجد خذ منه الألوان والخط والحساب، وقل له: «راح أمشي بألوانك: كذا وكذا — تمام؟»
2. ما فيه ملف؟ اسأل **سؤالاً واحداً**: «شنو ألوان حسابك؟ عطني لون الخلفية ولون التمييز وشعارك (أو رابط حسابك وأنا أطلّعها).»
3. اكتب `<work>/theme.json`:
```json
{ "bg":"#101828", "ink":"#F5F7FA", "acc":"#F2B33D", "clay":"#C98B18", "mut":"#98A2B3",
  "font":"Tajawal", "handle":"@his_handle", "logo":"logo.png", "grade": false, "badge": false,
  "faceAnchor": 0.30, "badgeUntil": 0 }
```
**شارة الحساب مطفية افتراضياً** (`badgeUntil: 0`) — ماجد ما يبيها، والاسم يبقى بكرت النهاية فقط. `badgeUntil: 3` تعيدها أول ٣ ثوانٍ، و`badge:false` مدعومة للتوافق. كل الرسم يشتق ألوانه من هذي القيم أوتوماتيكياً — الكروت والظلال ولون النص فوق أزرار التمييز (يُحسب من إضاءة اللون). خلفية غامقة أو فاتحة، الاثنتان تشتغلان.

**التدرّج اللوني (`grade`) مطفي افتراضياً** — الفيديو يطلع بألوانه الأصلية. لا تشغّله إلا إذا طلبه صراحة أو اشتكى إن الصورة باردة/باهتة. وإذا شغّلته قل له إنك سويت ذلك.

انسخ شعاره في مجلد الشغل باسم `logo.png`.

---

## الخطوة 2 — خذ منه الفيديو

اطلبه بجملة بسيطة، واقبل أي طريقة:

| الطريقة | متى | شلون |
|---|---|---|
| **ملف على جهازه** ← الأفضل | دائماً إن أمكن | يعطيك المسار، تنسخه `<work>/src.mov` — بلا انتظار تحميل |
| **رابط قوقل درايف** | يصوّر بالجوال والدرايف يرفع تلقائياً | خلّه يضبط المشاركة «أي شخص لديه الرابط»، ثم:<br>`curl -sL "https://drive.usercontent.google.com/download?id=<ID>&export=download&confirm=t" -o <work>/src.mov`<br>الـID هو الجزء بين `/d/` و`/view` بالرابط. مجرَّب على ملف 441 ميقا |
| **كونكتور قوقل درايف** | الملف خاص وما يبي يغيّر المشاركة | استخدم أدوات الكونكتور المتاحة بالجلسة |

**عن الدقة:** 4K أفضل لأن الزوم يُقص من الأصل فما تخسر وضوح. بس 1080p يشتغل عادي — الفرق إن مجال الزوم يصير أضيق. **لا ترفض فيديو 1080p ولا تطلب منه يعيد التصوير.**

تحقق أنه وصل: `ffprobe -v error -show_entries format=duration -of csv=p=0 <work>/src.mov`

---

## الخطوات 3-11 — الإنتاج

### 3) خطة القص
```bash
python3 scripts/01_cut_plan.py <work>
```
قل له كم انشال: «شلت 52 ثانية سكوت — الفيديو صار 46 بدل 98.»

### 4) التفريغ بتوقيت الكلمة
```bash
ffmpeg -v error -i <work>/src.mov -vn -ac 1 -ar 16000 -y <work>/a.wav
python3 -m whisper <work>/a.wav --language ar --model medium --word_timestamps True \
  --output_format json --output_dir <work> --fp16 False
```
ياخذ دقايق — شغّله بالخلفية وقل له كم يتوقع.

### 5) التصحيح والكابشن
اقرأ `a.json`، صحّح كل جملة (وِسبر يغلط بالعامية الخليجية)، واكتب `<work>/fixes.json`:
```json
{ "fix": [["كل","شي","تشوفه"], ["الكابشن","الزوم"]], "hot": ["تشوفه","الزوم"] }
```
`hot` = الكلمات اللي تنحبس بقرص التمييز وقت نطقها. **عدد كلمات كل جملة لازم يساوي عدد كلمات وِسبر لنفس الجملة** وإلا تختل التوقيتات (السكربت يوقفك لو اختلفت).
```bash
python3 scripts/02_captions.py <work>
```

### 5.5) اعرض عليه النص — وشيل أي جملة ما عجبته ← ميزة قوية، لا تتخطّاها
```bash
python3 scripts/10_script_edit.py <work> show
```
يطبع كلامه مرقّماً بالتوقيت ويكتب `script.txt`. **اعرض عليه القائمة بالشات وقل له: «شنو تبي أشيل؟»**

**🔁 والأهم — الجملة المعادة:** السكربت ينبّهك تلقائياً لأي جملتين متشابهتين خلال جملتين.
لما يعيد المتحدث صياغة جملة، **الأولى هي الغلط والثانية هي التصحيح** — اعرض الزوج عليه واقترح حذف الأولى:
> «قلت الجملة مرتين — ‹قدرنا نحل السبب› ثم ‹قدرنا نعرف السبب›. أشيل الأولى؟»
```bash
python3 scripts/10_script_edit.py <work> dupes
```
```bash
python3 scripts/10_script_edit.py <work> drop 6 8       # يشيل الجملتين من الفيديو والصوت
python3 scripts/10_script_edit.py <work> keep 1 2 5 9   # يبقي هذي بس (لمقطع مختصر)
python3 scripts/10_script_edit.py <work> undo           # تراجع
```
الجملة تنشال من الفيديو والصوت، وكل اللي بعدها ينزاح، و`cut.json` و`caps.json` و`sfx.json` تتحدّث كلها.

**⚠️ سوّها هني — قبل تصميم المشاهد.** لو شيّلت جملة بعد ما صمّمت المشاهد، أوقاتها كلها تنزاح ولازم تعدّلها.
وبعد أي حذف: أعد `03_cut_zoom.py` واستخراج الفريمات، والرسم بـ`--force`.

### 6) القص والزوم
```bash
python3 scripts/03_cut_zoom.py <work>
mkdir -p <work>/vfr && ffmpeg -v error -i <work>/cutz.mp4 -vf fps=30 -q:v 3 -y <work>/vfr/%05d.jpg
```

### 7) صمّم المشاهد ← أهم خطوة
انسخ `compose.REFERENCE.html` إلى `<work>/compose.html` وأعد كتابة دوال المشاهد.

**البنية جاهزة، لا تلمسها:** تصغير الفيديو داخل كرت (`R_FULL` / `R_DOWN` / `R_LOWER` بانتقال ناعم)، شارة الحساب، شريط التقدّم، كروت الكابشن مع تظليل الكلمة المنطوقة، كرت النهاية، واشتقاق الألوان من الثيم.

**اللي تبتكره:** المشاهد. اعصف ٣-٤ أفكار لكل جملة، والفكرة لازم تكون **استعارة بصرية لما يقوله**، لا زينة:

| يقول | المشهد |
|---|---|
| يعدّد أشياء | بطاقات تدخل وحدة مع كل كلمة ثم تنقلب بعلامة صح |
| رقم أو سعر | عدّاد يلف وينزل على الرقم بضربة |
| «فرّغ كلامي» | لوحة تفريغ، كل كلمة تنزل بسطرها وتوقيتها |
| «انكسر / خطأ» | قليتش يزحزح شرائح الصورة + شقوق |
| مشكلة تقنية | كرت الفيديو يسوَدّ وفوقه علامة تحذير |
| إصلاح | شريط تقدّم + قائمة تتعلّم بصح |
| «ملف واحد» | كرت ملف وبطاقات تطير وتندمج فيه |
| دعوة للتعليق | مربع تعليق والكلمة تنكتب حرف حرف |

كل دالة مشهد تاخذ `t` وترسم حسب توقيت الكلمة من `caps.json` — المشهد يلتصق بالكلمة، لا بتوقيت تقريبي.

**⛔ ما فيه شارة حساب فوق الفيديو** (`badgeUntil: 0` — الافتراضي): اسمه مكتوب بالمنصة نفسها وبكرت النهاية، وأعلى الشاشة مساحة للرسم. لو طلبها أحد: `badgeUntil: 3` تخليها أول ٣ ثوانٍ بس.

**⛔ قاعدة التخطيط (معتمدة من المستخدم — لا تخالفها):**

| اللحظة | المستطيل | الشكل |
|---|---|---|
| كلام بلا رسم | `R_FULL` | وجهه ملء الشاشة، الكابشن تحت عند 1460 |
| أي رسم أو موشن | `R_DOWN` (الافتراضي) | **الرسم فوق (y 280-520) ← الكابشن راكب على حافة الفيديو ← وجهه تحت بعرض الشاشة كامل** |
| بي-رول أو لوحة كبيرة | `R_LOWER` | الكرت الكبير فوق ← الكابشن ← وجهه صغيراً تحت |

**ليش:** الوضع القديم (`R_STAGE`/`R_SIDE`: الفيديو بالنص، الرسم فوق راسه، الكابشن تحت) يخلق ثلاث نقاط تركيز متباعدة والمشاهد يتوه.

**ثلاث تفاصيل تفرّق (٢ سبتمبر):**
1. **الفيديو بعرض الشاشة كامل بلا هوامش ولا زوايا مدوّرة** — الوجه يطلع أكبر بمرة ونصف من الكرت الضيق. الثمن: أطراف الكادر فوق وتحت تنقص، وهذا مقبول لأن الوجه هو المهم.
2. **الكابشن يركب على حافة الفيديو** (‎42٪ من ارتفاعه فوق الحافة و‎58٪ تحتها) — يربط نصفَي الشاشة فما تبين قطعتين ملزوقتين.
3. **شبكة خفيفة بالخلفية** كل 60px بشفافية 7.5٪ — تعطي عمقاً بلا ما تسحب النظر (`grid:false` بـtheme.json توقفها).

**⛔ لا تفرط بـ`R_DOWN`.** هو الافتراضي للحظات الرسم، مو لكل الفيديو:
- **الهوك (أول ٣-٤ ثوانٍ) ملء الشاشة دائماً** — وجهه كامل، بلا لوحة تسحب النظر.
- كل جملة فيها **ذروة أو انفعال أو سؤال للمشاهد** → ملء الشاشة، خله يشوف عينه.
- **لا تتجاوز نصف مدة الفيديو** بـ`R_DOWN`، ولا تخلّه متواصلاً أكثر من **٨ ثوانٍ** بلا لقطة ملء شاشة بينهما — وإلا صار الفيديو لوحة ثابتة ووجه صغير تحتها.
- ما فيه رسم بهاللحظة؟ إذاً ملء الشاشة. **اللوحة تجي للفكرة، مو للتعبئة.**

⚠️ **«ملء الشاشة» يُعرف بالمساحة لا بالزوايا** (`isFull()`): R_DOWN صار بلا زوايا مدوّرة مثل R_FULL، فأي فحص قديم يعتمد على `r` ينخدع ويشغّل «الكلام ورا الشخص» بلحظة مو ملء الشاشة.
بـ`R_DOWN` العين تمشي بخط واحد من فوق لتحت. **والكرت مرن:** يصغر نسبة وتناسب حسب أسفل الرسم (`gb` بكل مشهد، مثال `{s,e,m:R_DOWN,gb:480}`) وعدد أسطر الكابشن بتلك اللحظة، فالرسم والكابشن ما يتزاحمان أبداً. اللوحات تُرسم بإحداثيات `130..950 × 278..458` داخل `panelIn()` وهي تتكبّر 1.2 وحدها.
`R_STAGE` و`R_SIDE` باقيتان بالملف للتوافق فقط — **لا تستخدمهما بفيديو جديد.**

**لقطات B-roll (اختياري):** لو عطاك فيديو ثانياً (لقطات جرافيكس من الشركة مثلاً)، استخرج المقاطع المفيدة فريمات إلى `<work>/broll/<اسم>_%04d.jpg`،
عرّف مداها في `BR_NEED`، واعرضها بـ`brCard()` مع `R_LOWER`. `BRCROP` يقصّ الترجمة المحروقة أسفل اللقطة. ٣-٤ لقطات بالفيديو كافية.

**وضع «الشرح فوق والفيديو تحت» (`R_LOWER`)** — للبي-رول واللوحات الكبيرة:
الفيديو ينزل تحت ويملأ أسفل الشاشة (وراس المتحدث ينقص من فوق شوي، وهذا مقصود ومقبول بصرياً)،
واللوحات والكابشن كلها تطلع فوقه. **هذا الوضع يدخل حزام انستقرام عن قصد** — ومسموح، لأن المغطّى صورة لا نص.
استخدمه لما تكون اللوحة كبيرة (قوائم، مقارنات، جداول) وما يكفيها النصف العلوي.
الكابشن ينتقل فوق كرت الفيديو تلقائياً بهذا الوضع.

**⛔ المنطقة الآمنة — انستقرام يغطي أطراف الشاشة بأزراره:**

| المنطقة | لا تحط فيها نصاً |
|---|---|
| أعلى | أول 150 بكسل |
| أسفل | آخر 300 بكسل (وحزام حذر من 1500) |
| يمين | 180 بكسل بعرض y من 1100 إلى 1750 (لايك · تعليق · مشاركة) |

الملف المرجعي مضبوط أصلاً: الشارة عند 190، شريط التقدّم عند 1600، وحافة كرت الكابشن السفلى 1500.
**وأول كابشن لازم يبان بأول نصف ثانية** — الهوك المتأخر يخسر نصف المشاهدين قبل ما يبدأ الكلام.

عاين قبل ما ترسم كل شي:
```bash
node scripts/04_render_frames.js <work> preview 4.6 12.3 27.6 31.0 48.4
bash scripts/07_contact_sheet.sh <work> <work>/sheet.jpg 4.6 12.3 27.6 31.0 48.4
```

**فتحت له شاشة التعديل (بطلبه)؟** المشاهد تنكتب بـ`<work>/remotion/src/Scenes.tsx` (نفس المنطق: كل مشهد ياخذ `t`):
```bash
bash scripts/04b_remotion.sh <work> setup            # مرة وحدة — بعد إذنه (~500 ميقا)
bash scripts/04b_remotion.sh <work> studio           # تايم-لاين حي على المتصفح
```
مستطيلات عرض الفيديو تنكتب بـ`<work>/stage.json` ونصوص الختام بـ`<work>/outro.json` — وتنعكس بالمحرّكين.
**اقرأ `sheet.jpg` وحدها — لا تقرأ الصور وحدة وحدة.** ورقة واحدة = قراءة واحدة بدل خمس. **لا ترسم الفيديو كامل قبل ما تعاين ٦ لقطات على الأقل**، واعرض الورقة على المستخدم.

استوديو تفاعلي (سحب على التايم-لاين ورسم مباشر):
```bash
python3 -m http.server 8791 --directory <work>   # ثم /studio.html
```

### 7.5) الكلام يمرّ ورا الشخص (اختياري — بس قوي)

الكلمة تنكتب كبيرة، وتُمدّ بالكشيدة العربية بمقدار عرض جسم المتحدث، فالكشيدة وحدها تمرّ ورا راسه
والحروف تبقى بارزة على الجانبين. يشتغل بمكتبة ماك المدمجة (Vision) — صفر تنزيل وصفر كلفة.

```bash
node scripts/11_behind_text.js <work> plan        # يرشّح الجُمل المناسبة
node scripts/11_behind_text.js <work> build 8     # يقصّ الشخص بفريمات هالجملة
node scripts/04_render_frames.js <work> all --force
node scripts/11_behind_text.js <work> off         # إلغاء
```

**⛔ متى تستخدمه — القاعدة:**
1. **مرة أو مرتين بالفيديو كله.** لو تكرر بكل جملة انقلب من «واو» إلى ضجيج.
2. **الأفضل بالهوك** (أول جملة) أو بذروة الفكرة — الجملة اللي تبيه يحفظها.
3. الشروط اللي يفحصها السكربت: الجملة **من كلمة لأربع** · مدّتها ≥ 0.85 ثانية.
4. ويشتغل **بلحظات ملء الشاشة فقط** — لو الفيديو داخل كرت صغير بتلك اللحظة، يتخطّاها وحده.
5. كرت الكابشن العادي **يختفي تلقائياً** بهاللحظة حتى ما يتكرر النص مرتين.
6. لو الجملة طويلة أو الشخص واقف بحافة الكادر، الخط يصغّر نفسه — وإذا ما بقي مكان للحروف، لا تصرّ عليها.

**التكلفة:** ~٠.١٥ ثانية لكل فريم للقصّ (جملة ثانيتين ≈ ١٠ ثوانٍ شغل). يحتاج ماك + أدوات Xcode (`xcode-select --install`)؛
وإذا ما توفّرت، السكربت يقول لك بجملة وحدة وباقي الخط يشتغل عادي.

### 7.6) أنماط القصّ الثلاثة (اختيارية — تحتاج ماك)

نفس تقنية قصّ الشخص، بثلاثة استعمالات. كلها بأمر واحد ثم إعادة رسم نافذتها فقط:

| النمط | شكله | الأمر |
|---|---|---|
| **الكلام ورا الشخص** | الكلمة تنمدّ بالكشيدة وتمرّ ورا راسه | `build 2:6-8` |
| **واقف قدام اللوحة** | بلا كرت — هو مقصوص وواقف قدام التصميم | `cutout 23.8-26.6` |
| **راسك برّا المستطيل** | الفيديو بكرت صغير تحت، وراسه يطلع فوق حافته | `headout 23.8-26.6` |

```bash
node scripts/11_behind_text.js <work> headout 23.8-26.6
node scripts/04_render_frames.js <work> range 23.6 26.8
```

**متى تستخدم «راسك برّا المستطيل» أو «واقف قدام اللوحة»؟**
لما يكون عندك **شرح أو رسم أو إنفوقرافيك يبي مساحة** — الكرت ينزل تحت صغيراً (`R_LOWER`) ويخلي **ثلثي الشاشة** للتصميم.
وبهالوضع **مسموح تكسر حزام انستقرام** — المغطّى صورة لا نص.

**يضبطه المحرّك تلقائياً:** الكابشن يطلع فوق راسه · شريط التقدّم يختفي · الحجم والموضع يُحسبان من حدود جسمه بكل فريم فما يرقص.

### 7.7) مشهد «شرح كامل» وإيقاع «هادي» (v2.5)

**مشهد «شرح كامل» (`R_OFF`)** — الوضع الرابع بعد ملء الشاشة والكرت المرن والكرت الصغير:
المتحدث **يختفي** (كرته ينزلق تحت الشاشة)، والشاشة كلها إنفوقرافيك، **صوته يكمّل والكابشن يبقى تحت** بمكانه المعتاد.
بالمشاهد: `{s:12.4,e:18.9,m:R_OFF}` — البنية تتكفّل بالانزلاق والكابشن والشريط.

| اللحظة | المستطيل | الشكل |
|---|---|---|
| كلام بلا رسم | `R_FULL` | وجهه ملء الشاشة |
| رسم أو موشن | `R_DOWN` | الرسم فوق ← الكابشن ← وجهه تحت بعرض الشاشة |
| بي-رول أو لوحة كبيرة | `R_LOWER` | اللوحة فوق ← الكابشن ← وجهه صغيراً تحت |
| **شرح كامل** | **`R_OFF`** | **بلا وجه — الشاشة كلها للشرح، صوته يكمّل** |

**⛔ قواعده:**
1. **مرة أو مرتين بالفيديو** — أكثر يحس المشاهد إنك اختفيت.
2. **4 إلى 8 ثوانٍ** لكل مشهد، وبعده ملء شاشة مباشرة (يرجع الوجه).
3. **عند الجمل اللي فيها أرقام أو قائمة أو مقارنة** — الشي اللي يحتاج مساحة فعلاً. **لا بالهوك ولا بالدعوة الأخيرة.**
4. المشهد لازم يكون **استعارة بصرية لكلامه** (عدّاد، بطاقات، جدول) — مو زينة تملأ الفراغ.
5. المحرّك الكانفسي فقط حالياً (Remotion ما يعرفه بعد).

**إيقاع «هادي» (`theme.json` ← `"pace":"calm"`)** — لما يقول المستخدم «بإيقاع هادي» أو يشتكي من كثرة القطعات:
- الزوم أخف (1.00-1.06 بدل 1.00-1.14) وأقل تنوّعاً.
- **ما يتغيّر الزوم قبل ما تمر 4 ثوانٍ** على نفس اللقطة (`03_cut_zoom.py` يجمّع المقاطع القصيرة على زوم واحد).
- وبالمشاهد: **لا تبدّل المستطيل قبل 4 ثوانٍ**، ولا تتجاوز **6 تغييرات بكل 30 ثانية**، والشرح يثبت لين تخلص الفكرة.
- الهوك يبقى ملء الشاشة زي ما هو.
بدون ما يطلبه، الإيقاع يبقى الحالي — ما يتغيّر شي على أحد.

### 8) المؤثرات الصوتية
```json
{ "outro": 5.2, "whoosh_up": [3.1,11.25], "whoosh_down": [7.85],
  "thud": [27.27,29.47], "tap": [23.08,24.06] }
```
```bash
python3 scripts/05_sfx.py <work>
```

### 9) الرسم النهائي والتجميع

**الخفيف:**
```bash
node scripts/04_render_frames.js <work> all          # يكمّل من وين وقف — ما يعيد فريماً جاهزاً
bash scripts/06_encode.sh <work> <work>/ad-final.mp4
```
عدّلت مشهداً واحداً بعد الرسم؟ لا تعيد الكل — أعد نافذته بس ثم جمّع:
```bash
node scripts/04_render_frames.js <work> range 26.4 31.2
```
(`--force` مع `all` يعيد الرسم من الصفر. السكربت ينبّهك لو بقي فريم ناقص قبل التجميع.)

**ريموشن:** يطلّع MP4 مباشرة بلا فريمات:
```bash
bash scripts/04b_remotion.sh <work> render <work>/ad-final.mp4
```

### 10) معايرة الصوت (+ خلفية صوتية اختيارية)
```bash
bash scripts/06b_master.sh <work> <work>/ad-final.mp4 <work>/ad-master.mp4
```
يرفع الصوت لـ‎-14 LUFS — نفس علو باقي الفيديوهات بالفيد؛ بدونه صوته يطلع أخفض من اللي قبله وبعده.
ولو حطّيت `<work>/bg-audio.mp3` ينضاف **ملف صوتي بالخلفية ينخفض تلقائياً كل ما يتكلم** ويرجع بالسكتات. الصورة تُنسخ كما هي بلا إعادة ترميز.

**التسمية:** قل «ملف صوتي بالخلفية» لا «موسيقى» — المحتوى يحدّده هو، وانت تتعامل مع الملف كما هو.

### 11) ملف الترجمة
```bash
python3 scripts/09_srt.py <work> ad-master
```
يطلّع `.srt` (يوتيوب ولينكدإن يقراه) و`.txt` = نص كلامه كامل جاهز لكابشن البوست.

---

# وضع المونتاج — مقاطع بلا كلام

مجلد فيه مقاطع كثيرة (مقهى · سفرة · منتج · مكان · فعالية) والمطلوب فيديو واحد بإيقاع.
⛔ **بلا تفريغ ولا كابشن ولا مشاهد مرسومة.** الاختيار كله على المشهد نفسه.
تحتاج منه شيئاً واحداً: **مجلد المقاطع**. لا تسأله عن ألوان ولا شعار ولا حساب — ما فيه نص أصلاً.

**شلون يختار المحرّك:** كل لحظة بكل مقطع تُقاس بأربعة — وضوح الصورة · حركة بمقدار · إضاءة · لون.
الوضوح **نسبي** (يقارن مقاطعك ببعضها)، والحركة والإضاءة **مطلقتان**.
والمجمّد والمعتم والمهزوز درجاتهم **تُضرب** لا تُطرح: يعني ما ينفعهم إن باقي صفاتهم حلوة.
وأول ثلث ثانية وآخر ثلث ثانية من كل مقطع يُقصّان — لحظة اليد على الجهاز.

### 1) الفحص
```bash
python3 scripts/12_montage.py <work> scan <مجلد_المقاطع> --shot 1.5
```
يفحص أربعة مقاطع بنفس الوقت. القياس عندنا: **٣٠ ثانية فيديو ≈ ١٥ ثانية فحص** — يعني ٣٠ مقطعاً
طول كل واحد ١٠ ثوانٍ ≈ دقيقتين ونصف. شغّله بالخلفية وقل له كم يتوقع.
يطبع كل مقطع بدرجته وأحلى لحظة فيه، ويكتب `montage.json`.

### 2) وريه اللقطات — ورقة وحدة مرقّمة
```bash
python3 scripts/12_montage.py <work> sheet --cols 6
```
كل لقطة عليها رقم مقطعها. **اقرأ الورقة وحدة — لا تقرأ الصور فرادى.**
واعرضها عليه: «هذي أحلى لحظة بكل مقطع — شنو تبي أشيل؟»

### 3) شيل اللي ما عجبه
```bash
python3 scripts/12_montage.py <work> drop 4 11      # يشيل
python3 scripts/12_montage.py <work> keep 1 2 5 9   # يبقي هذي بس
python3 scripts/12_montage.py <work> undo           # تراجع
```

### 4) الترتيب والإيقاع
```bash
python3 scripts/12_montage.py <work> plan --dur 30 --shot 1.5
```
| | |
|---|---|
| `--order energy` (الافتراضي) | يناوب متحرك/هادئ وأقوى لقطة بالبداية |
| `--order best` \| `folder` | بالدرجة · بترتيب المجلد |
| `--bpm 96` | أطوال اللقطات على النبضة — القطع يوقع مع الصوت |
| `--dur 0` | كل المقاطع بلا سقف |

أطوال اللقطات تتغيّر بنمط متكرر (١.٠ · ٠.٨٢ · ١.٢٤ · ٠.٩٤ من `--shot`) عشان ما يصير رتيباً.

### 5) التركيب
```bash
python3 scripts/12_montage.py <work> build <work>/montage.mp4
```
| | |
|---|---|
| `--ar 9:16` | المقاس: `9:16` · `4:5` · `1:1` · `16:9` (القص من الوسط) |
| `--xfade 0.25` | تلاشٍ بين اللقطات بدل القطع الحاد |
| `--zoom 0` | يوقف الزوم الداخلي الخفيف |
| `--amb 0.3` | يبقي أجواء المقاطع بصوت خافت (يشترط إن كل المقاطع فيها صوت وبلا تلاشٍ) |

**الزوم يشتغل بس إذا كان المصدر أكبر من المخرَج بمرة ونصف على الأقل** (4K مثلاً)، وإلا يوقّفه
المحرّك وحده ويقول لك — لأن القصّ على مصدر بحجم المخرَج يطلع الزوم متقطّعاً.

### 6) الصوت والتسليم — نفس خط الكلام
```bash
bash scripts/06b_master.sh <work> <work>/montage.mp4 <work>/montage-master.mp4
```
حط ملفه الصوتي `<work>/bg-audio.mp3` بمجلد الشغل قبلها. المونتاج يطلع بمسار صامت لو ما طلبت
الأجواء، فالخلفية الصوتية هني مو زينة — بدونها الفيديو ساكت.

### ⛔ قواعد الوضع
1. **لا تفرّغ ولا تسوي كابشن.** لو طلع بالمقاطع كلام مهم فهذا وضع الكلام مو المونتاج.
2. **أرِه الورقة قبل التركيب** — هو يشيل اللي ما يعجبه، مو انت.
3. **ما فيه ثيم ولا ألوان ولا تدرّج** — الصورة تطلع بألوانها الأصلية (نفس القاعدة ٤).
4. المدة المعقولة **٢٠-٤٠ ثانية**؛ فوقها يمل المشاهد.
5. **لا نشر ولا جدولة** — التسليم ملف بس.

---

## ⛔ القواعد الثابتة

1. **المؤثر الصوتي يُربط بلحظة لها معنى** — رقم ينزل، شي ينكسر، مشهد ينتقل. المشكلة مو نوع الصوت، المشكلة رشّه على كل كلمة (جرّبناها وطلعت إزعاجاً). لا تتجاوز 15 حدثاً بالدقيقة، والذروة تحت ‎-18 dBFS، واعرض على المستخدم وين حطّيتها قبل التصدير.
2. **أرقام غربية دائماً** (0-9).
3. **الألوان من `theme.json` لا غير** — لا لون ثابت بالكود.
4. **ممنوع أي لون أو فلتر فوق صورته** — لا تدرّج ولا صبغة ولا LUT ولا طبقة ملوّنة على الفيديو. الصورة تطلع بألوانها الأصلية دائماً، إلا إذا طلب هو صراحة. (الألوان للكروت والنصوص فقط.)
5. **صحّح تفريغ وِسبر** قبل الكابشن.
6. **لا تخترع محتوى ما قاله المتحدث.** كل نص من كلامه؛ ولو احتجت وصف شي ما تعرفه، عمّم بدل ما تخمّن.
7. **لا نشر ولا جدولة** — التسليم ملف بس.
8. **«ورا الشخص» مرة أو مرتين بالفيديو** — لا أكثر، وإلا فقد أثره.
9. **سمّها «ملف صوتي بالخلفية»** — مو «موسيقى». المستخدم يحدّد محتواه (صوت بشري، أجواء، أو أي شي)، وانت تسمّيه بصيغته المحايدة وتحطه بـ`bg-audio.mp3`.
10. **اخترع مشاهد جديدة كل مرة.** الملف المرجعي مكتبة أنماط، مو قالباً يُنسخ.

---

## ✅ التحقق قبل التسليم (إلزامي)

0. **المنطقة الآمنة والهوك** — فحص آلي، ما يحتاج عينك:
```bash
node scripts/08_safe_check.js <work> --shot
```
يرسم كل لحظة مرتين بلونين مكان الفيديو، واللي ما يتغيّر = رسمك أنت — فيعدّ نصوصك داخل مناطق أزرار انستقرام بدقة، ويتأكد إن أول كابشن قبل نصف ثانية. يخرج بالرمز 3 لو فيه خرق، ويطلّع `safe.jpg` واللقطة الحمراء توريك وين المشكلة.
الحدود تُعدّل بملف `<work>/safe.json` لو احتجت (مثلاً فيديو للتيك توك بحدود ثانية).

1. **المزامنة** — فرّغ صوت الناتج مرة ثانية وقارن بدايات الجُمل بـ`caps.json`؛ الفرق أقل من 0.1 ثانية:
```bash
ffmpeg -v error -i <work>/ad-final.mp4 -vn -ac 1 -ar 16000 -y <work>/fa.wav
python3 -m whisper <work>/fa.wav --language ar --model small --output_format json --output_dir <work> --fp16 False
```
2. **الصوت** — بعد `06b_master.sh` يطبع العلو النهائي: لازم ≈ ‎-14 LUFS والذروة ‎-1.5 dBTP أو أقل.
3. **العين** — ورقة تواصل بـ٦ لقطات، تُشاف فعلاً.
4. **الحجم** — تحت 30 ميقا.

## 💰 توفير التوكنز — الصور هي العدو

**بالقياس الفعلي: الصور تاكل ٨٠-٨٥٪ من سياق المحادثة.** الصورة بعرض ١٠٨٠ ≈ ١٥٠ ألف حرف؛ ونفسها بعرض ٣٠٠ ≈ ٢٠ ألف.

1. **كل لقطة تُصغَّر قبل ما تُعرض:** `-vf scale=300:-1` — تكفي للحكم البصري تماماً.
2. **ورقة تواصل وحدة** بدل صور منفصلة (`07_contact_sheet.sh`) — خمس لقطات بصورة وحدة.
3. **لقطة وحدة لكل مرحلة**، مو لكل محاولة. عدّلت شيئاً؟ افحصه بالأرقام أول، والصورة آخر شي.
4. **الفحص الآلي بدل العين:** `08_safe_check.js` يعطيك حكماً بسطر — استخدمه قبل ما تصوّر.
5. **مخرجات ffmpeg** تُقصّ دائماً: `2>&1 | tail -2`.
6. **لا تقرأ `compose.html` كاملاً** — `grep -n` للدالة اللي تبيها.

⛔ **لا تعرض صورة إلا لسؤال بصري ما ينجاوب بغيرها.**

## 💰 توفير التوكنز (عام)

أغلى شي مو الرسم، بل **عدد الجولات** — كل جولة تعيد إرسال المحادثة كاملة.

1. **جلسة نظيفة لكل فيديو.**
2. **ورقة تواصل بدل صور منفصلة.**
3. **اجمع الأوامر المستقلة بجولة وحدة.**
4. **شغّل الطويل بالخلفية** وانتظر إشعار الانتهاء مرة وحدة.
5. **لا تغيّر المعمارية بالنص** — ابنِ على الملف المرجعي.
6. **احفظ `caps.json` و`cut.json`** — أي تعديل لاحق ما يحتاج إعادة تفريغ.

## التسليم
اعرض الملف مع: المدة، كم انشال من السكتات، عدد المشاهد، والعلو النهائي. وسلّم معه `.srt` و`.txt` (نص كلامه لكابشن البوست). واذكر أنك ما نشرت شيئاً.

---

## خريطة السكربتات

| | يسوي شنو | المحرّك |
|---|---|---|
| `00_setup.sh` | يفحص الأدوات وينزّل الناقص | مشترك |
| `01_cut_plan.py` | يقيس السكتات ويطلع مقاطع الكلام | مشترك |
| `02_captions.py` | توقيت كل كلمة على التايم-لاين الجديد | مشترك |
| `03_cut_zoom.py` | القص + زوم لكل مقطع + وسم bt709 | مشترك |
| `04_render_frames.js` | يرسم الفريمات (استئناف + نافذة) | الخفيف |
| `04b_remotion.sh` | يجهّز/يفتح/يرندر مشروع ريموشن | ريموشن |
| `05_sfx.py` | المؤثرات الصوتية من `sfx.json` | مشترك |
| `06_encode.sh` | يجمّع الفريمات + الصوت | الخفيف |
| `06b_master.sh` | ‎-14 LUFS + خلفية صوتية بخفض تلقائي | مشترك |
| `07_contact_sheet.sh` | ورقة لقطات وحدة (توفير توكنز) | مشترك |
| `08_safe_check.js` | المنطقة الآمنة + الهوك | الخفيف (وبريموشن: `"guides":true` تعطيك المناطق حيّة بالاستوديو) |
| `09_srt.py` | ملف ترجمة + نص الكابشن | مشترك |
| `10_script_edit.py` | شيل جملة من النص → تنشال من الفيديو | مشترك |
| `11_behind_text.js` + `personmask.swift` | أنماط القصّ الثلاثة (ورا الشخص · قدام اللوحة · راس برّا الكرت) | الخفيف |
| `12_montage.py` | **وضع المونتاج**: يفحص مجلد مقاطع، يختار أحلى لحظة بكل واحد، ويركّبها | مستقل |
