الإجابة المختصرة
يعتمد Araluma على معمارية هجينة: تعمل معظم الأدوات بالكامل في متصفحك دون أي رفع، ويُمرّر عدد قليل منها طلبًا شبكيًا واحدًا عبر بنيتنا التحتية حين يعجز المتصفح عن مجاراة الجودة، دائمًا مع بديل غير مرئي على جانب العميل. ونُخبرك بالمسار الذي تسلكه في كل أداة وعلى هذه الصفحة.
الجدول أدناه تمثيلي لا شامل (الكتالوج في نموّ مستمر). وهو يعرض مثالًا واحدًا عن كل نوع من المسارات:
| أداة كمثال | أين يجري العمل |
|---|---|
| Circle Crop (متصفح فقط) | بنسبة مئة في المئة في متصفحك، Canvas API. لا رفع، ويعمل دون اتصال. |
| Compress preview (متصفح فقط) | بنسبة مئة في المئة في متصفحك، canvas.toBlob. لا رفع. يبقى شريط التمرير فوريًا. |
| Compress download (يمسّ الخادم) | رحلة واحدة ذهابًا وإيابًا إلى خدمتنا على api.araluma.com (sharp مع libvips على خادم VPS في ألمانيا)، مع بديل في المتصفح. |
| Remove Background (يمسّ الخادم) | رحلة واحدة ذهابًا وإيابًا إلى Cloudflare Worker يُشغّل BiRefNet على وحدات معالجة الرسومات في الحافة، مع بديل WebAssembly في متصفحك. |
أدوات القصّ وتغيير الحجم وPDF وتحويل الصيغ (عدا مسار إخراج AVIF) تقع على جانب المتصفح فقط. أما تنزيل الضغط وإزالة الخلفية والتكبير بالذكاء الاصطناعي وتحويلات إخراج AVIF فتقع على الجانب الذي يمسّ الخادم، ولكلٍّ منها بديل محلي.
يمكنك التحقق من ادّعاءات «المتصفح فقط» في نحو 30 ثانية: افتح DevTools، وانتقل إلى لوحة Network، وامسح السجل، ثم استخدم أي أداة تعمل في المتصفح فقط. سترى صفر طلبات تحمل بايتات صورتك تغادر الصفحة. أما الأدوات التي تمسّ الخادم فسترى لها طلب رفع واحدًا بالضبط لكل عملية، موجَّهًا إلى النقاط النهائية المُسمّاة أعلاه.
لماذا المعمارية الهجينة
تقع معظم أدوات الصور على الإنترنت في أحد طرفين: رفع كل شيء إلى الخادم (تنتظر رحلات الذهاب والإياب ويحتفظ المشغّل بملفك)، أو إنجاز كل شيء في المتصفح (تدفع ثمنًا في الجودة والسرعة عند مرحلتي الترميز والذكاء الاصطناعي). ولا يتفوّق أيّ طرف في كل مكان.
اخترنا جانب العميل حيث تتميّز المتصفحات بالفعل. يتولّى عنصر <canvas> القصّ والتدوير
وتغيير الحجم وترميز المعاينة المضغوط بصيغة JPG أو WebP، وتفكّ المتصفحات الحديثة
ترميز كل صيغة شائعة أصيلًا. واخترنا جانب الخادم فقط للخطوات القليلة التي لا يزال
المتصفح يخسر فيها بشكل قابل للقياس:
- الضغط، عند التنزيل النهائي. يُنتج
sharpمعlibvipsعلى جانب الخادم ملفات أصغر بنسبة 10 إلى 15% بايتًا لكل بايت مقارنةً بمرمّزات المتصفح عند الجودة البصرية ذاتها، ويتيح ضبط سرعة AVIF وكرومه الذي لا يتيحه المتصفح. ويبقى شريط التمرير والمعاينة في متصفحك كي يظل التكرار فوريًا. ولا يمرّ عبر خدمتنا سوى نقرة “تنزيل”. - إزالة الخلفية بالذكاء الاصطناعي، في المسار الافتراضي. يحتاج نموذج BiRefNet الذي تُشغّله وحدة تقطيع الصور في Cloudflare (البنية ذاتها التي يستخدمها remove.bg) إلى وحدة معالجة رسومات حقيقية لينجز المهمة في ثانية أو ثانيتين. والبديل في المتصفح (ISNet عبر ONNX Runtime مع WebAssembly) يعمل، لكنه يستغرق وقتًا أطول بكثير وينتج قصًا أخشن للشعر والفراء والحواف الدقيقة.
- التكبير بالذكاء الاصطناعي، في المسار الافتراضي. تستعيد الدقّة الفائقة السحابية تفاصيل لا يستطيع إعادة التحجيم في المتصفح استعادتها، مع بديل في المتصفح حين يتعذّر الوصول إلى الخدمة.
التكلفة التي نقبلها مقابل الاعتماد على الخادم في هذه المسارات هي رحلة واحدة ذهابًا وإيابًا لكل عملية. والتكلفة التي نتفاداها بالبقاء على جانب العميل في كل مكان آخر هي الرسم نفسه على أجزاء سير العمل الأكثر تكرارًا.
مسار المعالجة خطوة بخطوة
1. تختار ملفًا
عبر مربع اختيار الملف، أو السحب والإفلات، أو اللصق، يُمرّر المتصفح إلى JavaScript
كائنًا من نوع File. يقرأ JavaScript البايتات باستخدام FileReader أو
Blob.arrayBuffer(). في هذه الخطوة لا يُرسَل الملف عبر الشبكة في أي لحظة، أيًّا
كانت الأداة التي تستخدمها.
2. يفكّ المتصفح ترميز الصورة
تفكّ المتصفحات الحديثة ترميز JPG وPNG وWebP وGIF وAVIF أصيلًا. نستخدم
createImageBitmap() لتحويل البايتات الخام إلى صورة نقطية تستطيع وحدة معالجة
الرسومات التعامل معها، خارج الخيط الرئيسي. وبالنسبة لـ HEIC في المتصفحات التي لا
تفكّ ترميزه أصيلًا، نلجأ إلى مفكك ترميز WebAssembly يعمل محليًا في متصفحك.
3. تؤدّي الأداة مهمتها، وهنا تتشعّب المسارات
- أدوات المتصفح فقط (القصّ، وتغيير الحجم، ومعاينة الضغط وشريط تمريره، وتجميع PDF، ومعظم تحويلات الصيغ). تعمل كلها بوصفها تحويلات بكسل على Canvas وإعادة ترميز عبر
canvas.toBlobمباشرةً على جهازك. ويستخدم إطار القصّ التفاعلي Cropper.js. لا شيء يغادر الصفحة. - تنزيل الضغط. حين تنقر “تنزيل”، تُرسَل الصورة مرة واحدة إلى
api.araluma.com(خدمة Fastify على خادم VPS من Hostinger في ألمانيا، Node معsharpوlibvips، وهي مكتبات C ذاتها التي يستخدمها Squoosh في مساره الخادمي). تُعاد إعادة ترميزها بالمعاملات التي ضبطتها في المعاينة، وتُبثّ البايتات مجددًا. وتحتفظ الخدمة بذاكرة تخزين مؤقت معزولة معنونة بالمحتوى (تجزئة بايتات الإدخال مع المعاملات)، بحيث يُعيد تنزيل الصورة ذاتها بالإعدادات ذاتها تشغيل البايتات المخزَّنة. ولا تُفهرَس تلك الذاكرة بحسب المستخدم أو عنوان IP أو اسم الملف. وإن تعذّر الوصول إلى الخدمة، ترجع الأداة إلى blob المعاينة في المتصفح. - إزالة الخلفية، مسار السحابة الافتراضي. تُرفع الصورة مرة واحدة إلى Cloudflare Worker، وتُودَع في دلو R2 خاص، وتُعالَج بوحدة تقطيع الصور في Cloudflare التي تُشغّل نموذج BiRefNet على وحدات معالجة الرسومات في الحافة، وتُبثّ الصورة المقصوصة مجددًا. ويُحذف الكائن المؤقت خلال ساعة بقاعدة دورة حياة R2، بصرف النظر عن النتيجة. وتنتهي صورة فوتوغرافية نموذجية في ثانية أو ثانيتين. وتحافظ حدود يومية لكل عنوان IP وحدّ لحجم الرفع على استدامة الخطة المجانية.
- إزالة الخلفية، بديل WebAssembly. إن تعذّر الوصول إلى Worker (انقطعت شبكتك، أو منعه جدار حماية صارم، أو امتلأت الحصة اليومية، أو كان الملف أكبر من حدّ السحابة)، تنتقل الأداة بصمت إلى نموذج ISNet الذي يعمل محليًا عبر ONNX Runtime Web وWebAssembly. يُنزَّل النموذج عند أول تشغيل ويستغرق وقتًا أطول، والتشغيلات اللاحقة أسرع. لا رفع في هذا المسار، ويمكن التحقق منه في DevTools.
- التكبير بالذكاء الاصطناعي. يُرسل المسار الافتراضي الصورة مرة واحدة إلى خدمة دقّة فائقة سحابية ويبثّ النتيجة المكبَّرة مجددًا، مع بديل على جانب المتصفح إن تعذّر الوصول إلى الخدمة.
4. تنزّل النتيجة
تُرمَّز الصورة النقطية الناتجة في Blob، وتُلفّ في object URL، وتُعرض على مربع حوار
حفظ الملف المعتاد في متصفحك. ويظهر الملف على قرصك.
كيف تتحقّق بنفسك
اختر ما تفضّل:
الطريقة الأولى. راقب تبويب Network
- افتح Araluma في تبويب جديد، ثم افتح DevTools، ثم لوحة Network.
- استخدم أداة تعمل في المتصفح فقط مثل Circle Crop أو شريط معاينة Compress. سترى طلبات لـ HTML وCSS وJS والخطوط فحسب، إضافةً إلى وحدات WebAssembly ذات الصلة عند أول استخدام. لن يحمل أي طلب بايتات صورتك.
- الآن استخدم أداة تمسّ الخادم مثل Compress Download أو Remove Background. سترى طلب
POSTواحدًا بالضبط يحمل صورتك إلى النقطة النهائية المُسمّاة، واستجابة واحدة تُعيد النتيجة. مرّر مؤشرك فوق أي طلب لقراءة حجمه وتوقيته.
يخبرك عمود “Initiator” أي نص برمجي أطلق كل طلب، ويخبرك عمود “Type” بما أُرسل. ولا نُخفي أيًّا منهما.
الطريقة الثانية. استخدم الأدوات دون اتصال
- حمّل أي صفحة أداة من Araluma. شغّل Remove Background مرة على صورة صغيرة كي يُخزَّن نموذج ISNet داخل المتصفح في الذاكرة المؤقتة.
- افتح DevTools، وانتقل إلى Network، وضع علامة في خانة Offline (أو أوقف Wi-Fi).
- أعد تحميل الصفحة. الأصول الثابتة مخزَّنة، فتظل الصفحة تُحمَّل.
- جرّب الأدوات:
- أدوات المتصفح فقط تستمر في العمل. لم تحتج إلى الشبكة قط.
- Compress Download يرجع إلى blob المعاينة في المتصفح (ترميز أقل كفاءة قليلًا، لكنه يعمل).
- Remove Background يرجع إلى نموذج ISNet عبر WebAssembly ويعمل دون أي طلب صادر.
إن عملت تلك الأدوات دون اتصال (بعضها بأداء متدنٍّ قليلًا، وأدوات المتصفح فقط مطابقة)، فبحكم التعريف لم يرَ أيّ خادم صورتك.
ما نراه، وما لا نراه
على مسارات المتصفح فقط، لا نرى شيئًا عن صورتك. لا طلب لنفحصه، ولا ذاكرة مؤقت لتخزينه، ولا سطر سجل للبحث فيه.
على مسارات ما يمسّ الخادم:
- Compress Download يرى بايتات الصورة طوال مدة الترميز (بضع مئات من المللي ثانية عادةً)، ويحتفظ بإدخال ذاكرة تخزين مؤقت معنون بالمحتوى طوال مدّة بقائه، وهذا كل شيء. لا تُفهرَس الذاكرة بحسب المستخدم أو عنوان IP أو اسم الملف أو أي معرّف يمكّننا من تحديد صورك. ولا نُسجّل محتوى الصور. وتُشارَك خدمة الترميز بين المستأجرَين ذاتهما اللذين خدمتهما v1 قبل التحويل، مع CORS وحدود معدّل وعناوين URL موقَّعة بـ HMAC لكل مستأجر.
- Remove Background يرى الصورة طوال مدّة رفع التدريج ومكالمة التقطيع (ثانية أو ثانيتين عادةً)، ثم تُحذف النسخة المؤقتة بقاعدة دورة حياة R2. ولا نُسلّم بايتاتك أبدًا إلى مزوّد نموذج خارجي. يعمل نموذج BiRefNet داخل بنية Cloudflare التحتية ذاتها، لا على واجهة برمجة خارجية بأسلوب remove.bg أو fal.ai أو Replicate.
- التكبير بالذكاء الاصطناعي يرى الصورة طوال مدّة مكالمة الدقّة الفائقة، ويُعيد النتيجة، ولا يحتفظ بأي شيء مرتبط بك.
على كل مسار، يسجّل مزوّد التحليلات لدينا (Cloudflare Web Analytics) بيانات مشاهدات الصفحة المجمّعة: URL والبلد وعائلة المتصفح وأهم مقاييس الويب. لا كوكيز، ولا معرّفات دائمة، ولا شيء مرتبط بشخص بعينه.
وبالنسبة للأدوات التي تنزّل وحدة WebAssembly عند أول استخدام (مفكك ترميز HEIC، ونموذج ISNet بصيغة ONNX)، يرى مزوّد الاستضافة لدينا أن أحدهم أحضر الوحدة، تمامًا كما يرى إحضار ملف CSS. والوحدة نفسها لا تحمل أي معلومة عن صورتك.
جرد البيانات الكامل في سياسة الخصوصية لدينا.
المجموعة التقنية
لأصحاب الفضول:
- Astro، مولّد المواقع الثابتة. تُسلَّم كل صفحة بصيغة HTML خالص مع “جُزُر” JavaScript محسَّنة تدريجيًا فقط حيث تسكن الأدوات التفاعلية.
- CSS خالص مع خصائص مخصّصة، بلا Tailwind، وبلا CSS-in-JS. نظام التصميم كله ملف
tokens.cssواحد. canvas.toBlobو<canvas>، ترميز JPEG وPNG وWebP وAVIF لأدوات جانب المتصفح والمعاينات.- Cropper.js، طبقة التفاعل مع مستطيل القصّ.
- ONNX Runtime Web، الذي يُشغّل بديل ISNet عبر WebAssembly لأداة Remove Background.
- Cloudflare يستضيف البناء الثابت ويخدمه من الحافة، ويُشغّل Workers وR2 ومسار تقطيع الصور (BiRefNet) خلف مسار Remove Background الافتراضي.
- Fastify مع
sharpوlibvipsعلى Node، خدمة تنزيل Compress علىapi.araluma.com، على خادم VPS من Hostinger في ألمانيا. - Cloudflare Web Analytics، إحصاء مجمّع لمشاهدات الصفحة بلا كوكيز.
دعم المتصفحات
تعمل كل أداة على الإصدار الحالي والسابق من Chrome وFirefox وSafari وEdge، على سطح
المكتب والجوال. ويستخدم الموقع التعزيز التدريجي: حيثما دعم المتصفح واجهة برمجية أحدث
(مثل showSaveFilePicker أو OffscreenCanvas)، استخدمناها، وحيثما لم يدعمها، رجعنا
إلى المكافئ الأقدم. ولا يوجد حاجز “متصفحك غير مدعوم”.
والمتطلبان الصارمان الوحيدان هما JavaScript (لأي أداة) واتصال شبكي (فقط عند استخدام مسار يمسّ الخادم، أما أدوات المتصفح فقط فتعمل دون اتصال بالكامل بعد أول تحميل للصفحة).
أسئلة
هل ثمة شيء لم نغطّه؟ راسلنا على support@araluma.com. الأسئلة التقنية مرحَّب بها.