توليد الفيديو والصوت
يوسّع Libre WebUI 0.18.0 التوليد إلى ما بعد الصور: تستطيع إضافات الموفّرين الإعلان عن إمكانات الفيديو والصوت، ويصل كل ما يُولّد — الصور والفيديو والكلام والصوت — إلى معرض وسائط واحد خاص بكل مستخدم.
يتاح توليد الوسائط لكل مستخدم موثّق. المعرض معزول بدقة لكل مستخدم: تُقيد كل قراءة وجلب محتوى وحذف بالحساب المسجل دخوله.
كتل إمكانات الإضافات
يعلن تعريف الإضافة كل إمكانية وسائط في كتلة مستقلة:
"capabilities": {
"image": { "endpoint": "...", "model_map": ["..."], "config": { ... } },
"tts": { "endpoint": "...", "model_map": ["..."], "config": { ... } },
"audio": { "endpoint": "...", "model_map": ["..."], "config": { ... } },
"video": { "endpoint": "...", "model_map": ["..."], "config": { ... } }
}
لكل كتلة endpoint وقائمة احتياطية model_map وmodels_endpoint اختياري لاكتشاف
النماذج مباشرة، وكائن config بخيارات خاصة بالإمكانية — الأحجام ونِسَب العرض إلى
الارتفاع للصور، والأصوات والصيغ للكلام، والدقة والنِسَب والمدد للفيديو. ويمكن لموفّر
الفيديو أيضًا إعلان cancel_endpoint بحسب معرّف المطالبة وcancel_method؛ ولا
يفترض Libre دعم الإلغاء من نقطة توليد عادية.
توجد إمكانيتان صوتيتان، وتصل كلتاهما إلى المعرض كصوت:
ttsللكلام: يُقرأ النص بصوت محدد.audioللصوت: يولّد النموذج محتوى صوتيًا من مطالبة.
OpenRouter (plugins/openrouter.json) هو حاليًا الإضافة المضمّنة الوحيدة التي تعلن
كتلتي video وaudio. عند وجود models_endpoint، تُحدّث قائمة النماذج وفق دورة
الاكتشاف المعتادة (راجع متغيرات البيئة لإعدادات مدة
الاكتشاف)؛ وتبقى model_map البديل الاحتياطي.
توليد الوسائط
افتح تخيّل (/gallery). يقدّم الرأس توليد للصور (عندما يكون توليد الصور
مفعّلًا في الإعدادات)، إلى جانب لوحتي فيديو وصوت.
توليد الكلام والصوت متزامن: يعمل الطلب، وتُحفظ النتيجة في المعرض، وتعيد الاستجابة العنصر المكتمل. يؤدي إلغاء إلى إجهاض طلب المتصفح وطلب Libre الصادر إلى الموفّر؛ ولا تُحفظ نتيجة ملغاة. ويتبع توليد الصور عقد الإلغاء نفسه عند انقطاع الاتصال.
بالنسبة إلى سير ComfyUI مقبول، يرسل Libre عملية إلغاء المهمة بمعرّف المطالبة وحذف
عنصر الطابور بمعرّف المطالبة، ثم ينتظر حتى ثلاث ثوانٍ لإتمام التنظيف قبل تحرير
الطلب. ولا يستدعي أبدًا عملية المقاطعة غير المقيدة في ComfyUI، لأنها قد توقف سير
مستخدم آخر. تعرض إصدارات ComfyUI الحالية /api/jobs/:promptId/cancel لسير عامل.
وفي إصدار قديم لا يدعمها، يستطيع Libre إزالة عنصر الطابور المعلّق الدقيق، لكنه لا
يستطيع إيقاف سير بدأ بالفعل بأمان؛ رقِّ ComfyUI للحصول على عقد الإلغاء الكامل.
يمكن لإضافات TTS أيضًا إعلان استنساخ الصوت. تعرض لوحة الصوت لهذه النماذج رفع ملف مرجعي، وحقل نص مطابق عندما يطلبه الموفّر. يتحقق Libre WebUI من نوع الملف وحدود الحجم في البيان، ويحتفظ بالرفع في الذاكرة، ولا يمرره إلا إلى الموفّر المحدد. لا يوضع في المعرض إلا الكلام المولّد.
يمكن اختياريًا حفظ النسخة كصوت مسمى قابل لإعادة الاستخدام للإضافة والنموذج نفسيهما. يتطلب الحفظ تأكيدًا مستقلًا للموافقة على التخزين. يشفّر Libre WebUI المرجع الأصلي ونصه في ملف صوتي يملكه المستخدم؛ ولا يستخدم الكلام المولّد كمرجع. يمكن اختيار الملفات المحفوظة أو حذفها نهائيًا من الإعدادات ← تحويل النص إلى كلام. يتلقى الموفّر المعدّ المرجع المخزّن مجددًا كلما ولّد دفعة كلام. يرتبط الملف بالتوجيه المعتمد لذلك الموفّر؛ فإذا تغير تعريف الإضافة أو نقطة النهاية، فأعد إنشاء الملف للموافقة على الوجهة الجديدة. لا تستخدم إلا تسجيلات لمتحدثين وافقوا على طلب الاستنساخ وعلى أي تخزين مطلوب.
تُستبعد الملفات الصوتية عمدًا من تصدير البيانات العام في Libre WebUI لأنها تحتوي
على مواد بيومترية أصلية. انسخ قاعدة بيانات التطبيق المشفّرة وENCRYPTION_KEY معًا
إذا احتجت إلى التعافي من الكوارث؛ وإلا فأعد إنشاء الملفات من التسجيلات الأصلية
الموافق عليها.
دورة حياة مهمة الفيديو
توليد الفيديو غير متزامن. يعيد إرسال المهمة (POST /api/media/video/generate)
الحالة 202 مع سجل للمهمة، وتنتقل المهمة عبر pending ثم in_progress وأخيرًا
completed أو failed.
- ينفصل الإرسال عن استجابة المتصفح بعد التحقق. يحفظ Libre معرّف مهمة الموفّر فور قبولها، حتى إذا أُغلقت اللوحة أو انقطع الاتصال بينما يرد الموفّر.
- لا يعرض
GET /api/media/video/jobsإلا المراجع المحفوظة للمستخدم الموثّق؛ وتطلب اللوحة حتى 100 مرجع نشط عند كل فتح. لذلك يمكن إعادة فتح مهمة معلّقة بعد التنقل أو التحديث أو انقطاع الاتصال. - تستعلم مهمة دائمة
media.video.resume.v1الموفّر وتنزّل النتيجة المكتملة حتى عند إغلاق اللوحة. يشغّل الوضع الفردي المعالج في العامل المضمّن، ويشغله وضع الفريق في العامل الخارجي. تتيح الإيجارات وإعادة المحاولة المحدودة وإعادة التحقق من الفاعل والإكمال المشروط لعامل آخر استعادة المهمة بعد موت عملية من دون إنشاء صف معرض أو مرجع blob مكرر. تبقى نقاط الاستئناف وGETالحالية حدودًا للتوافق والحالة؛ وقد تواصل الواجهة استطلاعها للعرض. - لا يؤدي إغلاق اللوحة أو اختيار إيقاف الانتظار إلا إلى إجهاض نقل الحالة أو التنزيل الحالي. لا يظهر إجراء إلغاء المهمة لدى الموفّر إلا إذا أعلنت الإضافة صراحة نقطة إلغاء بمعرّف المهمة. وعند تأكيد إلغاء الموفّر، يزيل Libre المرجع المحلي المحفوظ.
- عند الاكتمال، تنزّل الواجهة الخلفية الفيديو (بحد 200 MB ومن دون اتباع توجيهات HTTP) وتحفظه في المعرض.
- يخزّن سجل المهمة الإضافة والنموذج والخيارات والحالة والمطالبة (مشفّرة عند التخزين). تُحذف سجلات المهام المكتملة والفاشلة الأقدم من 30 يومًا بصورة انتهازية؛ ولا تنتهي المراجع المعلقة بذلك التنظيف.
- ترسل الحالات النهائية تنبيهًا: ينشر الفيديو المكتمل تنبيه media-ready، وينشر فشل الموفّر media-failed، ويرتبط كلاهما بالمعرض ويزال تكراره لكل مهمة ويُسلّم عبر صندوق الوارد داخل التطبيق وأي webhooks مشتركة.
تحرير الصور وملء أجزائها
تحصل صور المعرض على إجراء تحرير الصورة عند إعداد نموذج قادر على التحرير. يرسم
المحرر قناعًا على الصورة مباشرة — يعيد النموذج رسم المناطق المطلية، ويحرر لوحة غير
ملموسة الصورة كلها — ويمكن إرفاق صور مرجعية إضافية للتركيب عندما يقبل النموذج أكثر
من مدخل. يستخدم التحرير عقد multipart المتوافق مع OpenAI: تشارك الإضافة بإعلان
edit_endpoint في إعداد إمكانية الصورة، مع حدود اختيارية هي supports_mask
وmax_reference_images وedit_mime_types وmax_edit_image_bytes (يعلن بيان OpenAI
المضمّن جميعها).
يُتحقق من كل مدخل قبل أن يغادر أي بايت العملية: MIME المعلن، والبايتات السحرية المكتشفة (PNG أو JPEG أو WebP)، وحد 10 MiB لكل صورة. يجب أن تكون الأقنعة PNG، إذ يحمل PNG وحده قناة alpha التي تحدد المناطق المراد إعادة رسمها. تُحفظ النتائج في المعرض مع بيانات مصدر تسجل عنصر المعرض الأصلي وعدد الصور المرجعية المرفوعة وما إذا استُخدم قناع. ويُقاس استخدام التحرير تمامًا مثل التوليد.
المعرض الموحّد
يعرض المعرض كل أنواع الوسائط متداخلة حسب وقت الإنشاء، مع شرائح تصفية الكل
والصور والفيديو والصوت. يعمل الفيديو والصوت داخل الصفحة، وتفتح الصور في
عارض، ويمكن تنزيل كل عنصر أو حذفه. يستطيع المسؤولون الاشتراك في الاحتفاظ التلقائي
عبر GALLERY_RETENTION_DAYS: تحذف عملية المجدول الوسائط الأقدم من النافذة وفق دورة
الحذف الدائمة نفسها المستخدمة في الحذف اليدوي. يؤدي ترك المتغير غير معيّن
(الافتراضي) إلى إبقاء الوسائط حتى يحذفها مالكها.
التخزين والتقديم متحفظان عمدًا:
- تُخزّن الوسائط مشفّرة داخل قاعدة بيانات التطبيق (تحت
DATA_DIR)، لا كملفات منفصلة على القرص. انسخ قاعدة البيانات وENCRYPTION_KEYمعًا، كما تفعل مع كل البيانات المشفّرة. - لا تضمّن استجابات API حمولات الوسائط أبدًا؛ بل تشير العناصر إلى عنوان محتوى خاص بكل عنصر.
- يجب أن يطابق المحتوى المقدم قائمة MIME مسموحة لكل نوع والنوع المخزّن، ويُحد عند
200 MB، ويُسلّم مع
X-Content-Type-Options: nosniffوContent-Security-Policyتعزل الاستجابة.
تظل نقاط النهاية السابقة الخاصة بالصور ولوحة توليد الصور تعمل بلا تغيير؛ وتكتب في المعرض نفسه.
حدود المعدل
تُقيّد واجهة الوسائط بالمعدل لكل عميل:
| العملية | الحد |
|---|---|
| التوليد (الفيديو والكلام والصوت) | 10 طلبات في الدقيقة |
| استطلاع مهام الفيديو | 60 طلبًا في الدقيقة |
| عرض المعرض والمحتوى والحذف | 120 طلبًا في الدقيقة |
يبقى استطلاع الواجهة كل 30 ثانية داخل ميزانية الاستطلاع بفارق كبير.
القياس والخصوصية
تُقاس استدعاءات توليد الوسائط في تحليلات الاستخدام لدى المسؤول، مثل كل استدعاء صادر آخر إلى موفّر: الإضافة والنموذج والحالة والمدة وعدد الوحدات. لا تُكتب المطالبات أو المحتوى المولّد في سجلات الاستخدام أبدًا. ولا توجد الوسائط المولّدة ومطالبة مهمة الفيديو إلا في صفوف المستخدم المشفّرة.
كما في المحادثة، يتلقى الموفّر المعدّ المطالبة ويعيد المحتوى؛ وتنطبق سياسات الموفّر للتسعير والاحتفاظ والمحتوى.