مرجع صيغة الحلقة
كل مفاتيح episode.yaml، مولّدة من الـ schema الذي يتحقق منها (episodeJsonSchema() في packages/core/src/jsonschema.ts). الكائنات صارمة: أي مفتاح غير معروف يعطي الخطأ V-1 مع اقتراح «did you mean». ويكتب الأمر reelforge schema الـ schema نفسه بصيغة JSON للإكمال التلقائي في المحرر.
النوع time هو تعبير زمن: 12.5s وl7 وl7.end وl7:'word' وl7:'word'#2 وl7.3 و@scene و@scene.end، مع إزاحة اختيارية مثل +0.4. راجع كتابة الحلقات للأمثلة ومرجع المكوّنات لخصائص props.
ملاحظة: هذه الصفحة مولّدة من الكود. العناوين والشرح بالعربية، أما الأوصاف داخل الجداول فتُقرأ من الكود وتبقى بالإنجليزية.
هوية الحلقة: meta
| المفتاح | النوع | الافتراضي | إلزامي | القيود | الوصف |
|---|---|---|---|---|---|
meta | object | نعم | هوية الحلقة ونصوص النشر | ||
meta.id | string | نعم | pattern ^[a-z0-9][a-z0-9_-]*$ | معرّف الحلقة (اسم المجلد) | |
meta.series | string | "" | اسم السلسلة الظاهر في الترويسة | ||
meta.title | string | "" | عنوان الحلقة | ||
meta.episode | integer | 1 | ≥ 1 | رقم الحلقة في الترويسة | |
meta.preset | string | "tiktok" | تخطيط المنصة: tiktok أو reels أو shorts أو preset خاص بك | ||
meta.theme | string | "default" | اسم ثيم في themes/ أو مسار نسبي | ||
meta.lang | string | "ar-EG" | لغة التعليق الصوتي، مثل en-US (من اليسار إلى اليمين) أو ar-EG (من اليمين إلى اليسار) | ||
meta.publish | object | نصوص تُكتب في out/publish.md | |||
meta.publish.cover | string | نص الغلاف القصير | |||
meta.publish.caption | string | نص المنشور | |||
meta.publish.hashtags | string[] | [] | الوسوم | ||
meta.publish.pinned | string | التعليق المثبّت |
الصوت: audio
| المفتاح | النوع | الافتراضي | إلزامي | القيود | الوصف |
|---|---|---|---|---|---|
audio | object | {} | الصوت والمؤثرات والمعالجة | ||
audio.voice | string | "voice.wav" | ملف التسجيل الصوتي نسبةً إلى مجلد الحلقة | ||
audio.sfx | auto | none | manual | "auto" | auto: تشغّل المكوّنات أصواتها الافتراضية؛ manual: الأصوات المذكورة صراحةً فقط | ||
audio.sfx_gain_db | number | -16 | ≥ -60, ≤ 12 | مستوى المؤثرات بالديسيبل | |
audio.duck | boolean | true | خفض المؤثرات تحت الصوت | ||
audio.denoise | boolean | false | إزالة الضجيج من التسجيل (RNNoise) | ||
audio.extra | object[] | [] | أصوات إضافية في أزمنة محددة | ||
audio.extra[].at | time | نعم | |||
audio.extra[].sound | whoosh | hit | ding | err | glitch | tick | tap | typing | نعم | |||
audio.extra[].gain_db | number |
النص: script
| المفتاح | النوع | الافتراضي | إلزامي | القيود | الوصف |
|---|---|---|---|---|---|
script | object[] | نعم | min 1 items | الأسطر المنطوقة؛ المعرّفات الافتراضية l1 وl2… | |
script[].id | string | pattern ^[A-Za-z_][A-Za-z0-9_]*$ | معرّف السطر في تعابير الزمن | ||
script[].text | string | نعم | ما تقوله، جملة واحدة | ||
script[].caption | string | "auto" | auto أو none أو نص مخصص للترجمة النصية | ||
script[].break | string[] | [] | فرض سطر جديد في الترجمة النصية قبل هذه الكلمات |
الفصول: chapters
| المفتاح | النوع | الافتراضي | إلزامي | القيود | الوصف |
|---|---|---|---|---|---|
chapters | object[] | [] | عناوين الفصول في شريط التقدم وpublish.md | ||
chapters[].at | time | نعم | |||
chapters[].label | string | نعم |
المشاهد: scenes
| المفتاح | النوع | الافتراضي | إلزامي | القيود | الوصف |
|---|---|---|---|---|---|
scenes | object[] | نعم | min 1 items | المشاهد بالترتيب؛ يبدأ كل مشهد عند زمن وينتهي حيث يبدأ التالي | |
scenes[].id | string | نعم | pattern ^[A-Za-z_][A-Za-z0-9_]*$ | ||
scenes[].at | time | نعم | زمن البداية (غالباً سطر مثل l3) | ||
scenes[].end | time | زمن النهاية (افتراضياً بداية المشهد التالي) | |||
scenes[].glow | string | object[] | لون التوهج في الخلفية أو قائمة ألوان بأزمنة | |||
scenes[].glow[].at | time | نعم | |||
scenes[].glow[].color | string | نعم | |||
scenes[].transition | crossfade | cut | slide-up | zoom | push | blur | "crossfade" | كيف يحل المشهد محل سابقه | ||
scenes[].camera | still | drift | push-in | pull-out | "still" | حركة كاميرا بطيئة واحدة طوال المشهد | ||
scenes[].layout | stage | full | "stage" | stage (بين الترويسة والترجمة النصية) أو full (الإطار كاملاً) | ||
scenes[].row | object | ترتيب العناصر أفقياً | |||
scenes[].row.gap | integer | ≥ 0 | |||
scenes[].row.align | start | center | end | ||||
scenes[].row.x | integer | ||||
scenes[].row.y | integer | ||||
scenes[].row.w | integer | > 0 | |||
scenes[].row.h | integer | > 0 | |||
scenes[].column | object | ترتيب العناصر عمودياً | |||
scenes[].column.gap | integer | ≥ 0 | |||
scenes[].column.align | start | center | end | ||||
scenes[].column.x | integer | ||||
scenes[].column.y | integer | ||||
scenes[].column.w | integer | > 0 | |||
scenes[].column.h | integer | > 0 | |||
scenes[].columns | integer | ≥ 1, ≤ 6 | تقسيم المسرح إلى أعمدة (يختار العنصر عموده بـ col) | ||
scenes[].gutter | integer | ≥ 0 |
العناصر: scenes[].elements
| المفتاح | النوع | الافتراضي | إلزامي | القيود | الوصف |
|---|---|---|---|---|---|
scenes[].elements | object[] | [] | المكوّنات المعروضة في المشهد | ||
scenes[].elements[].use | string | نعم | اسم المكوّن (راجع مرجع المكوّنات) | ||
scenes[].elements[].id | string | pattern ^[A-Za-z_][A-Za-z0-9_-]*$ | معرّف العنصر (للأسهم والحالات والمحرر) | ||
scenes[].elements[].props | map | {} | خصائص المكوّن؛ صارمة لكل مكوّن | ||
scenes[].elements[].place | object | الصندوق بإحداثيات المسرح (1080 × 1000) | |||
scenes[].elements[].place.x | integer | ||||
scenes[].elements[].place.y | integer | ||||
scenes[].elements[].place.w | integer | > 0 | |||
scenes[].elements[].place.h | integer | > 0 | |||
scenes[].elements[].place.center | boolean | ||||
scenes[].elements[].place.anchor | top | bottom | center | left | right | ||||
scenes[].elements[].place.margin | integer | ||||
scenes[].elements[].size | object | الحجم داخل row أو column | |||
scenes[].elements[].size.w | integer | > 0 | |||
scenes[].elements[].size.h | integer | > 0 | |||
scenes[].elements[].col | integer | ≥ 0 | |||
scenes[].elements[].layer | base | overlay | الطبقة overlay تُرسم فوق كل شيء وتُستثنى من قاعدة التداخل (V-8) | |||
scenes[].elements[].z | integer | ||||
scenes[].elements[].enter | object | متى وكيف يظهر العنصر | |||
scenes[].elements[].enter.at | time | زمن الدخول، والأفضل على كلمة: "l3:'bucket'" | |||
scenes[].elements[].enter.anim | pop | rise | slide-l | slide-r | fade | draw | type | count | flip | glitch | stamp | zoom | blur | wipe | spring | drop | reveal | none | حركة الدخول | |||
scenes[].elements[].enter.dur | number | > 0 | |||
scenes[].elements[].enter.ease | smooth | snappy | gentle | linear | منحنى التسارع | |||
scenes[].elements[].enter.s0 | number | ||||
scenes[].elements[].enter.dy | number | ||||
scenes[].elements[].enter.dist | number | ||||
scenes[].elements[].enter.cps | number | > 0 | |||
scenes[].elements[].enter.caret | boolean | ||||
scenes[].elements[].enter.rot | number | ||||
scenes[].elements[].enter.amp | number | ||||
scenes[].elements[].exit | object | متى وكيف يختفي العنصر | |||
scenes[].elements[].exit.at | time | نعم | |||
scenes[].elements[].exit.anim | fade | pop | rise | sink | slide-l | slide-r | zoom | blur | wipe | none | ||||
scenes[].elements[].exit.dur | number | > 0 | |||
scenes[].elements[].states | object[] | [] | تغييرات الخصائص عبر الزمن | ||
scenes[].elements[].states[].at | time | نعم | |||
scenes[].elements[].states[].set | map | نعم | |||
scenes[].elements[].fx | object[] | [] | مؤثرات: اهتزاز، وميض، تشويش، نبض، ارتداد | ||
scenes[].elements[].fx[].at | time | نعم | |||
scenes[].elements[].fx[].do | shake | flash | glitch | pulse | bump | نعم | |||
scenes[].elements[].fx[].amp | number | ||||
scenes[].elements[].fx[].dur | number | > 0 | |||
scenes[].elements[].fx[].color | string | ||||
scenes[].elements[].fx[].rate | number | > 0 | |||
scenes[].elements[].fx[].target | self | camera | ||||
scenes[].elements[].fx[].sound | whoosh | hit | ding | err | glitch | tick | tap | typing | none | ||||
scenes[].elements[].sfx | auto | none | object[] | "auto" | none أو قائمة أصوات بأزمنة | ||
scenes[].elements[].sfx[].at | time | نعم | |||
scenes[].elements[].sfx[].sound | whoosh | hit | ding | err | glitch | tick | tap | typing | نعم | |||
scenes[].elements[].sfx[].gain_db | number |