عن المشروع

Calibre-Web Automated (CWA) هو مشروع مكتبة رقمية ذاتية الاستضافة مبني على Calibre-Web. هدفه المعلن هو الجمع بين واجهة Calibre-Web الحديثة والخفيفة على الويب ومجموعة ميزات Calibre الأوسع، إضافة إلى أتمتة إضافية. يوضح ملف README أن Calibre المعبأ في حاويات يعتمد على واجهة KasmVNC غير الملائمة للاستخدام على الأجهزة المحمولة والمستهلكة للموارد نسبياً، بينما يفتقر Calibre-Web الأصلي إلى بعض الميزات الأساسية، مما يدفع العديد من المستخدمين إلى تشغيل الخدمتين بالتوازي. يحتفظ CWA بجميع ميزات Calibre-Web الأصلية، بما في ذلك واجهة Bootstrap HTML5 المتجاوبة، وصلاحيات لكل مستخدم، وخلاصات OPDS لتطبيقات القراءة الإلكترونية، وتحرير البيانات الوصفية وتنزيلها من مصادر قابلة للتوسيع، وقيود التنزيل، والتسجيل العام، والإرسال بنقرة واحدة إلى القارئ الإلكتروني، ومزامنة أجهزة Kobo، والقراءة داخل المتصفح لصيغ متعددة، وإخفاء المحتوى حسب الفئة والعمود المخصص، وتسجيل الدخول عبر Magic Link، والبحث والتصفية المتقدمة، وواجهة متعددة اللغات. تشمل الإضافات الخاصة بـ CWA المذكورة في README ما يلي: - خدمة الاستيراد التلقائي التي تدعم 27 صيغة كتاب إلكتروني، مع قواعد قابلة للتكوين للتجاهل والتحويل التلقائي. - خدمة التحويل التلقائي، مفعّلة افتراضياً، تستهدف EPUB أو MOBI أو AZW3 أو KEPUB أو PDF، مع 28 نوع ملف إدخال مدعوماً. - فرض تلقائي لتغييرات الأغلفة والبيانات الوصفية التي تتم عبر واجهة الويب، بحيث تُكتب التعديلات في ملفات الكتب بدلاً من الواجهة فقط. - خدمة نسخ احتياطي تلقائية تخزن النسخ الأصلية في /config/processed_books افتراضياً. - كشف ذكي للتكرارات باستخدام مطابقة هجينة بين SQL والمطابقة الضبابية، مع فحوصات بعد الاستيراد، ومسح تزايدي مجدول، ودمج بنقرة واحدة، وعمليات مجمعة، وحل تلقائي اختياري. - Magic Shelves: رفوف ديناميكية قائمة على القواعد مع منطق AND/OR، وقوالب مسبقة الصنع، وعدادات مخزنة مؤقتاً، ودعم مزامنة Kobo. - إرسال تلقائي إلى القارئ الإلكتروني بعد الاستيراد، مع تأخير قابل للتكوين، واختيار الصيغة، ومستلمين متعددين. - جلب تلقائي للبيانات الوصفية عند الاستيراد مع تسلسل هرمي للمزودين وآلية احتياطية. - إحصائيات وتحليلات معمقة مع تصدير CSV، وتصفية حسب المستخدم، ونطاقات زمنية. - نافذة محسّنة للإرسال إلى القارئ الإلكتروني تدعم أجهزة متعددة وعناوين مخصصة. - مصحح EPUB تلقائي مبني على kindle-epub-fix من innocenat، يعالج ترميز UTF-8، ومشاكل روابط NCX، ووسوم اللغة غير الصالحة، ووسوم الصور الشاردة، وXML غير السليم، وCSS/الخطوط المعطوبة؛ مفعّل افتراضياً مع نسخ احتياطية لكل عملية ومعالجة مجمعة للمكتبة. - أداة تحويل متعددة الصيغ مع خيار الاحتفاظ بالنسخ الأصلية. - مزودو بيانات وصفية إضافيون بما في ذلك isbndb.com عبر ibdb.dev، وHardcover، وKobo، وLitRes. - مزامنة KOReader (KOSync) مع مجاميع MD5 جزئية تلقائية، وتقدم موحد عبر KOReader وحالة قراءة CWA وKobo، ومصادقة HTTP Basic، وإضافة قابلة للتنزيل. - مصادقة OAuth 2.0/OIDC محسّنة مع اكتشاف تلقائي، وتجاوز يدوي لنقاط النهاية، ورسم حقول JWT، وأدوار مسؤول قائمة على المجموعات، واختبار الاتصال. - جلب تلقائي لمعرف Hardcover كمهمة خلفية. - اكتشاف تلقائي للمكتبة: ينشئ مكتبة Calibre جديدة إذا لم توجد أي مكتبة، أو يبحث بشكل متكرر عن مكتبة موجودة ويقوم بتركيبها، ويختار الأكبر إذا وُجدت عدة مكتبات. يتم دعم مكتبة واحدة لكل نسخة. - إشعار تحديث داخلي يقارن النسخة المثبتة بأحدث إصدار على GitHub، ويُعرض مرة واحدة يومياً للمسؤولين. - زر تحديث يدوي للمكتبة لاستيراد الكتب المتروكة في مجلد الاستيراد. - ضغط تلقائي للملفات المحفوظة احتياطياً قبل منتصف الليل بقليل كل يوم. - تحرير وحذف مجمعين من صفحة قائمة الكتب. تغطي ملاحظات النشر مشاركات الشبكة: NETWORK_SHARE_MODE=true يعطل SQLite WAL على metadata.db وapp.db، ويتخطى chown المتكرر، ويحوّل المراقبين إلى وضع الاستطلاع. يمكن لـ CWA_WATCH_MODE=poll فرض الاستطلاع. يتم اكتشاف Docker Desktop تلقائياً ويستخدم الاستطلاع. خلف عدة بروكسيات، يمكن ضبط TRUSTED_PROXY_COUNT لأن Werkzeug ProxyFix يفترض افتراضياً الثقة ببروكسي واحد، مما يؤثر على حماية الجلسة. يتم التثبيت عبر Docker Compose، مع أمر curl للتثبيت السريع لقالب compose، وإرشادات للمستخدمين المهاجرين من Calibre-Web الأصلي، ومهام ما بعد التثبيت بما في ذلك تسجيل دخول المسؤول الافتراضي. يسرد README أيضاً خارطة طريق: واجهة أمامية مبنية على Svelte، وقارئ ويب جديد، ومزامنة التقدم عبر الأجهزة، وبحث نصي كامل، ودعم إضافات Calibre، ومكتبات مقسمة، وتكاملات إشعارات. تشمل المشاريع المرتبطة Shelfmark لتنزيل الكتب وتطبيق Calibre-Web Companion المبني على Flutter.