العودة إلى المشاريع

ويب · قارئ عربي بتقليب الصفحات · 2026

Marwah Stories Library

مكتبة قصص مروة تحوّل نصوص الكاتبة، المكتوبة صفحةً صفحة، إلى كتب عربية مصوّرة يقلّبها الطفل. بنيتُ كل ما بين النص والكتاب: أسلوب رسم ثابتًا، ورسومًا بالذكاء الاصطناعي وفقه، وأدوات Python للصفحات، وقارئًا يقلّب من اليمين إلى اليسار. والمتاح الآن كتابان في 64 صفحة.

  • JavaScript
  • StPageFlip
  • Python
  • Pillow
  • RTL
  • PDF export
  • Netlify
دوري
مسار الإنتاج والأدوات والقارئ
التاريخ
2026
الصفحات
64 صفحة مصوّرة
الحالة
متاحة، وفيها كتابان
لقطة شاشة من Marwah Stories Library

نبذة

مكتبة القصص تجمع كتب الأطفال المصوّرة للكاتبة مروة الحلبي، التي تكتبها على هيئة نصوص مجدولة بالصفحات: جدول فيه رقم الصفحة ونصّ القصة ووصف المشهد، ولا شيء غير ذلك. لا رسوم ولا كتاب. بنيت كل ما بين ذلك الملف وكتاب يستطيع طفل تقليب صفحاته: ملف نمط رسوم ثابت، ورسوم مُولَّدة بالذكاء الاصطناعي وفقه، وأدوات بلغة Python تحوّل الألواح المُسلَّمة إلى صفحات مفردة، ومكتبة كتب مُقلَّبة من اليمين إلى اليسار بلا أي اعتماديات. كتابان منشوران (64 صفحة رسوم)، ولكل قصة ملف PDF جاهز للطباعة.

دوري

كل ذلك: توجيه الرسوم ونظام النمط، وصياغة المطالبات، وأدوات الصفحات، وموقع القارئ، والنشر. المؤلِّفة تقدّم النصّ، وبقية الطريق حتى الكتاب النهائي من عندي.

حدودالقصص من تأليف مروة الحلبي. والرسوم مولَّدة بالذكاء الاصطناعي وفق ملف الأسلوب الذي وضعته، مع مراجعة بشرية لكل صفحة.

ما أُطلق

  • ملف نمط: ملف JSON واحد يثبّت شكل السلسلة (نِسَب تشيبي، بلا حدود سوداء، تظليل خلوي ناعم، شخصيات دافئة على خلفيات باردة، وإضاءة خلفية شعاعية) ويحمل قوالب مطالبات لـ Midjourney وFlux وGemini. ويفصل النمط عن الموضوع عمدًا، فترث القصة الجديدة الشكل دون أن ترث شخصيات الكتاب السابق.
  • رسوم مُولَّدة بالذكاء الاصطناعي وفق ذلك الملف، صفحةً صفحة، انطلاقًا من أوصاف المشاهد في النصّ. وقواعد الاتساق في الملف هي ما يمنع انحراف شكل الشخصية بين صفحة وأخرى، بل وبين كتاب وآخر.
  • أداة تقطيع بلغة Python تقصّ اللوح المُسلَّم إلى صور صفحات. الألواح مُولَّدة بالذكاء الاصطناعي، فشبكتها غير منتظمة فعلًا (عرض الأعمدة يختلف من صفّ إلى صفّ)، وتقسيم اللوح بالتساوي يقصّ داخل الرسوم. لذلك تكتشف الأداة الفواصل من الصورة نفسها على ثلاث مراحل، وتعيد حساب الأعمدة داخل كل صفّ على حدة لتلتقط الصفّ الأخير الشاذّ.
  • مكتبة ثابتة بلا اعتماديات: رفّ بطاقات للقصص، وقارئ تقليب صفحات مبني على نسخة مثبّتة من StPageFlip، يُتنقَّل فيه بلوحة المفاتيح والأزرار وسحب طرف الصفحة.
  • مُصيِّر صفحات واحد مشترك بين القارئ ومنصّة طباعة تعمل في متصفح بلا واجهة، حتى تخرج القصة التي تُرسَم تعليقاتها فوق الرسم وقت القراءة إلى PDF ونصّها معها، بدل أن تُصدَّر صفحات بلا كلمات بصمت.
  • علامة مائية مائلة متكرّرة تحمل اسم المؤلِّفة على كل صفحة، في القارئ وفي ملف PDF المُصدَّر على حدّ سواء، لأن الكتب تتداول قبل نشرها.
  • منشور كملفات ثابتة على Netlify: HTML وCSS وJavaScript بأسلوب ES5، بلا خطوة بناء وبلا اعتماديات وقت التشغيل.

حتى يُقرأ ككتاب عربي

  • مكتبة StPageFlip لا تقلّب الصفحات إلا بالطريقة الغربية: ترفع الصفحة اليمنى وتُديرها إلى اليسار، والكعب على اليسار. والكتاب العربي يفعل العكس.
  • وعكسها بـ CSS هو الحلّ البديهي والخاطئ: فهو يقلب التعليقات العربية المطبوعة داخل الرسوم، ويفكّ التزامن بين حسابات المؤشّر في المكتبة وما يراه القارئ فعلًا.
  • لذلك تُسلَّم قائمة الصفحات إلى المكتبة معكوسة. فقراءة كتاب معكوس من آخره إلى أوّله هي فيزيائيًا الحركة نفسها لقراءة كتاب عربي من أوّله إلى آخره: يستقرّ الكعب على اليمين، وينفتح الغلاف نحو اليسار، وتقع الصفحة الأسبق من الفرشة على اليمين حيث ينظر القارئ العربي أوّلًا، ويبقى سحب الزاوية يعمل بطبيعته لأن هندسة المكتبة لم تُمسّ.
  • والثمن أن رقمَي صفحة يعملان معًا، فلا يُخلط بينهما أبدًا: التقدّم في القصة يستدعي أمر «السابق» في المكتبة، والرقم المعروض للقارئ محمول على كائن الصفحة لا مستنتَج من فهرس المكتبة.
  • وتُدرَج ورقة بيضاء قبل الصفحة الختامية لا خلف الغلاف، لتبقى القصة مزدوجة (1، 2) ثم (3، 4)، والصفحة الفردية على اليمين، وتنتهي الورقة الزائدة في الخلف، مثل ورقة النهاية في الكتاب المطبوع.

قرارمكتبة التقليب البرمجية لا تقلّب الصفحات إلا على الطريقة الغربية، وعكسها بـ CSS يقلب النص العربي داخل الرسوم، لذلك تُمرَّر إليها قائمة الصفحات معكوسة.

قرارات تجربة المستخدم

  • الرفّ هو صفحة الوصول: غلاف وعنوان ومؤلِّفة وسطر ملخّص، ورقاقات للتصنيف والفئة العمرية وعدد الصفحات: ما يكفي لاختيار كتاب دون فتحه.
  • التعليقات موجودة بصيغتين وكلتاهما مدعومة: مطبوعة داخل الرسم، أو مرسومة فوق الصفحة وقت القراءة. والثانية تُبقي الكلمات قابلة للتحديد، وتتيح تصحيح خطأ مطبعي دون إعادة توليد الصورة.
  • والقصة التي لم تُرسَم بعد تبقى على الرفّ بعلامة «قريبًا» بدل أن تختفي، فتُقرأ المكتبة كسلسلة تنمو.
  • عربية أولًا في كل شيء: الواجهة والخطوط والاتجاه. لا يوجد وضع إنجليزي، لأن القرّاء أطفال يقرؤون العربية.
  • بلا إطار عمل وبلا أدوات حزم؛ وفهرس القصص ملف سكربت عادي لا ملف JSON يُجلب وقت التشغيل، فيعمل الموقع حتى لو فُتح من القرص مباشرة.

ما يستحق نظرة أقرب

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

حدوديفترض اكتشاف الشبكة في أداة التقطيع أن اللوحات موضوعة على ورقة بيضاء.

لقطات الشاشة