
شنو كيدير watermarks-remover
watermarks-remover هو مهارة ديال الوكيل وخدمة Python كتفحص وكتنقّي علامات مصدر المحتوى بالذكاء الاصطناعي من النصوص ومن صيغ الملفات المدعومة. مخصّص للخصوصية والبحث ونظافة المحتوى فالمواد اللي كتمتلكها أو عندك الصلاحية تعالجها.
مهارة الوكيل غير عميل HTTP خفيف. ما فيهاش تطبيق التنقية وما كتحتاجش Python فالجهاز اللي خدام فيه الوكيل. عوض هاد الشي، كترسل الخدمة المهام لسيرفيس منفصل خدام ومبني باستعمال المكتبة القياسية ديال Python.
المشروع كيقسم الخدمة ديالو لثلاثة مجالات:
- الطبقة النصية A: كتحيد بشكل حتمي الحوامل المخفية ديال Unicode، والمسافات الغريبة، وعناصر التحكم ثنائية الاتجاه، وحروف الوسوم.
- الطبقة النصية B: كتستعمل إعادة صياغة كبيرة باش تنقص من العلامات المائية الإحصائية المبنية على أخذ عينات التوكنات. هاد العملية بأفضل مجهود وممكن تبدّل الأسلوب أو النبرة.
- تنقية الملفات: كتحيد بيانات C2PA وEXIF وXMP وخصائص الوثائق وبيانات الحاويات المدعومة من بزاف ديال أنواع الملفات.
حتى أداة ما تقدرش تضمن بلي كاشف تابع لمزوّد غادي يحبس يتعرّف على المحتوى. خَلّي الملفات الأصلية، راجع كل نتيجة منقّاة، واستعمل المشروع غير على المحتوى اللي كتمتلكه أو عندك الإذن تعالجو.
المميزات الرئيسية والصيغ المدعومة
السكريبتات الأساسية كتحتاج Python 3.10 أو أحدث وكتستعمل غير المكتبة القياسية. أدوات اختيارية بحال c2patool وexiftool وqpdf كتستعمل إلا كانت متوفرة.
أهداف التنقية المدعومة
- الصور: PNG وJPEG وWebP وAVIF وHEIC وBMP وGIF وTIFF وSVG.
- الوثائق: PDF وDOCX وXLSX وPPTX وEPUB وODT.
- النصوص وملفات الويب: HTML وMarkdown، بما فيها البيانات الوصفية المدعومة وJSON-LD ومفاتيح AI frontmatter وعلامات النص فالطبقة A.
- حاويات الوسائط: MP4 وMOV وM4A وM4V وWAV وMP3 وFLAC.
الصيغ اللي ما معروفةش ما كتتنقّاش أوتوماتيكياً. والأوامر الخاصة بالنصوص كترفض حتى هي الملفات الثنائية وكتوجّهك لأدوات الملفات العامة.
قيود مهمة
التنقية الأساسية ما كتغطيش C2PA ذات الربط المرن، ولا العلامات المائية الخالصة ديال البيكسلات أو الصوت أو الفيديو. تنقية PDF كتحتاج qpdf باش تحيد البنية، حيث إن تعديل البيانات الوصفية بشكل تزايدي يقدر يخلي بايتات قابلة للاسترجاع. ومرحلة Ghostscript اختيارية تقدر تعالج البيانات الوصفية اللي داخل صور PDF المضمّنة.
الكشف منفصل على التنقية. الكواشف الاختيارية ديال MarkLLM وkeyed-Gumbel وClaude seams وتقييم SynthID ديال الصور كتخدم غير باختيارك ومصمّمة باش تفشل بهدوء ملي ما تكونش متوفرة.
ثبّت مهارة ديال الوكيل
دير clone أو حمّل المستودع، دخل للمجلد ديالو، وشغّل المثبّت. الأمر التالي كيثبّت المهارة الكاملة المعتمدة على السيرفيس فإعداد شخصي ديال Claude Code:
python3 install_skill.py --skill remove-ai-marks --target claude-codeأهداف التثبيت المتاحة كتشمل:
--target claude-codeكيثبّت تحت~/.claude/skills/<skill>.--target claude-project --project-dir PATHكيثبّت تحتPATH/.claude/skills/<skill>.--target coworkكيخرّجdist/<skill>.zipباش ترفعو من خلال واجهة Skills السحابية.--target cursorكيثبّت تحت~/.cursor/skills/<skill>.
استعمل python3 install_skill.py --list باش تعرض المهارات المرفقة. المستودع كيوفّر مهارة remove-ai-marks الكاملة، ومهارة clean-user-facing-text مستقلة وكتخدم غير مع النصوص. التثبيتات الموجودة كيدار ليها نسخ احتياطي إلا استعملتي --force. وللتعديل المباشر من checkout، زِد --link.
ثبّت إضافة Claude Code
مستخدمو Claude Code يقدرو يثبّتو إضافة السوق مباشرة:
/plugin marketplace add guillaumemeyer/watermarks-remover
/plugin install watermarks-remover@watermarks-removerمن بعد كيتحمّلو المهارات بهاد الشكل: /watermarks-remover:remove-ai-marks و/watermarks-remover:clean-user-facing-text. حدّث الإضافة بهاد الأمر:
/plugin marketplace update watermarks-removerربط المهارة مع Grok
mkdir -p ~/.grok/skills
ln -sfn "$(pwd)/skills/remove-ai-marks" ~/.grok/skills/remove-ai-marksشغّل السيرفيس
شغّل خدمة HTTP المحلية من المستودع:
make serveوبديل آخر هو تشغّل سكريبت السيرفر بشكل صريح:
python3 service/scripts/server.py --host 127.0.0.1 --port 8765العنوان الافتراضي هو http://127.0.0.1:8765. إلا كان السيرفيس خدام فبلاصة أخرى، عيّن WATERMARKS_SERVICE_URL للمهارة. السيرفر كيربط مع loopback افتراضياً، وهاد الشي كيتفادى تعريضو مباشرة لآلات أخرى.
تأكّد بلي السيرفيس كيرد:
curl -s http://127.0.0.1:8765/healthنقطة الصحة كترجع كائناً فيه ok ونسخة السيرفيس.
فحص وتنقية الملفات من سطر الأوامر
أكثر سيرورة آمنة هي تفحص الملف الأول، وتكتب الناتج المنقّى فمسار جديد، وتقارن النتيجة مع الأصل.
SCRIPTS=service/scripts
python3 "$SCRIPTS/inspect_file.py" draft.md
python3 "$SCRIPTS/clean_file.py" draft.md -o draft.cleaned.md
python3 "$SCRIPTS/clean_file.py" photo.png -o photo.cleaned.png
python3 "$SCRIPTS/clean_file.py" notes.docx -o notes.cleaned.docxاستعمل inspect_file.py وclean_file.py مع الحاويات النصية والثنائية بجوج. هاد الأوامر كاختار المنقّي المناسب المدعوم على حساب الملف.
نقّي علامات النص فالطبقة A
بالنسبة للمدخلات النصية العادية، فحص الحوامل المخفية وعلامات Unicode المبنية على التعديل كيدار بهاد الأمر:
python3 "$SCRIPTS/inspect_text.py" draft.mdمن بعد صايب نسخة نقّية وطبع الإحصائيات:
python3 "$SCRIPTS/clean_text.py" draft.md -o draft.cleaned.md --statsLayer A حتمية ومقصود منها تكون بلا ضياع بالنسبة للنص اللي باين. ما تدوزش DOCX ولا PDF ولا الصور ولا شي مُدخل ثنائي آخر لهاد أوامر النصوص؛ استعمل أوامر الملفات بدالها.
وجد إعادة كتابة ديال Layer B
العلامات المائية الإحصائية ديال النص كتحتاج إعادة الكتابة، ماشي غير حذف ديال الحروف. افتراضياً، أمر إعادة الكتابة كيطبّع واحد الطلب:
python3 "$SCRIPTS/rewrite_text.py" draft.md --backend print-prompt --strength paraphraseLayer B تكرارية وكتخدم بأفضل مجهود. تقدر تنقص من الوفاء للأسلوب والصوت الأصليين. ملي كتكون الجودة أهم من النظافة من العلامات المائية، المشروع كيوصي باستعمال Layer A وتنقية الملفات مع الحفاظ على النص الأصلي.
استعمل HTTP API
الخدمة كتوفر الفحص، والكشف، والتنقية، والمعالجة على دفعات، واكتشاف الإمكانيات، ومواصفات OpenAPI.
GET /healthكيعطي حالة الخدمة والنسخة.GET /capabilitiesكيعطي الأدوات الاختيارية والواجهات الخلفية المتوفرة.GET /openapi.jsonكيرجع مواصفات OpenAPI 3.0.3.POST /inspectكيرجع نوع المُدخل، واش مشبوه، والتقرير.POST /detectكيرجع نتائج كاشفات مُعدّة.POST /cleanكيرجع بيانات base64 منقّية وتقرير.POST /inspect/batchوPOST /clean/batchكيعالجو حتى لـ50 ملف فكل طلب.
المثال التالي كيحوّل ملف Markdown لـbase64 وكيصيفطو لنقطة نهاية التنقية:
WM="http://127.0.0.1:8765"
curl -s "$WM/health"
curl -s -X POST "$WM/clean" -H 'Content-Type: application/json' \
-d "{\"file\": \"$(base64 < notes.md | tr -d '\n')\", \"name\": \"notes.md\"}"عيّن WATERMARKS_SERVER_API_KEY باش تفرض المصادقة بنظام bearer. إلا نشرت الخدمة خارج جهاز التطوير المحلي، خليك محافظ على المصادقة وعلى ضوابط الشبكة المناسبة.
شغّل الخدمة بـDocker
بني وشغّل الصورة الأساسية بنظام ملفات للقراءة فقط ومجلد مؤقت:
make docker-core-build
docker run --rm -p 127.0.0.1:8765:8765 --read-only --tmpfs /tmp watermarks-removerDocker Compose كيدعم بزاف ديال الملفات التعريفية:
docker compose up -d
docker compose --profile harness up -d
docker compose --profile heavy up -d- الافتراضي كيشغّل الخدمة الأساسية.
- الملف التعريفي
harnessكيزيد مكوّنات MarkLLM وMarkDiffusion. - الملف التعريفي
heavyكيزيد مكوّنات CtrlRegen وSynthID المبنية محلياً.
صور Core وMarkLLM وMarkDiffusion منشورة فـGHCR. CtrlRegen وSynthID scorer كيبقاو محليين فقط بسبب التراخيص ديال المصدر الأصلي. نسخ .env.example لـ.env إلا بغيتي إعدادات اختيارية؛ التنقية الأساسية للنصوص ما كتحتاج حتى إعدادات إضافية.
فعّل الفحوصات التلقائية بـhook
مهارة الوكيل هي تعليمة، وبالتالي النموذج هو اللي كيقرر واش يستعملها. أما الـhook فأكثر حتمية: كيتشغّل كل مرة كيوقع فيها استدعاء أداة مطابق.
إضافة Claude Code كتسجّل hook من نوع PostToolUse لأدوات Write وEdit وMultiEdit وNotebookEdit. وكتستدعي service/scripts/hook_written_file.py فواحد من جوج أوضاع:
- check: الوضع الافتراضي كيعطي العلامات بلا ما يبدّل الملف.
- clean: كيحيد العلامات المدعومة فبلاصتها وكيعلّم النموذج.
اختار الوضع من إعداد Hook mode ديال الإضافة، ولا عيّن:
WATERMARKS_HOOK_MODE=cleanبلا الإضافة، تقدر تسجّل الـhook يدوياً فـ~/.claude/settings.json. الـhooks كيغطيّو الملفات اللي كيكتبها الوكيل وحاجز ما قبل الـcommit، ولكن تنقية النص مباشرة فنسخ المحادثة كتبقى بأفضل مجهود وكتعتمد على المهارة.
زِد فحص ما قبل الـcommit
باش توقف الملفات المعلّمة قبل ما تدخل لـGit commit، زِد hook ديال الفحص ديال المستودع لـ.pre-commit-config.yaml:
repos:
- repo: https://github.com/guillaumemeyer/watermarks-remover
rev: v0.5.0
hooks:
- id: watermarks-remover-checkالـhook watermarks-remover-check كيفشل ملي كيلقى علامات. والبديل watermarks-remover-clean كينقّي الملفات فبلاصتها، ولكن خاص تفعّلو بشكل صريح.
نصائح متقدمة
حافظ على النسخ الأصلية وقارن النتائج
كتب البيانات المنقّية فمسار إخراج منفصل كلما أمكن. هاد الشي مهم خصوصاً مع إعادة الكتابة ديال Layer B وحاويات الوثائق المعقدة، فين المعالجة تقدر تأثر على النص، والأصول المضمّنة، ولا الخصائص الخاصة بالتطبيق.
ثبّت أدوات PDF المناسبة
استعمل qpdf ملي كتحتاج تنقية بنيوية حقيقية لـPDF. الـREADME كينبّه أن exiftool بوحدو كيدير تحديثاً تزايدياً يقدر يخلي البايتات القديمة قابلة للاسترجاع. استعمل المرور الاختياري العميق بـGhostscript ملي تكون الميتاداتا ممكنة داخل الصور المضمّنة.
اعتبر الكشف والتنقية عمليتين مختلفتين
عملية التنقية كتحيد الحوامل والميتاداتا المدعومة، بينما الكاشف كيقدّر واش كاين نظام علامات مائية مُعدّ. مثلاً، التحقق ديال MarkLLM كيكون مفيد غير بنفس الإعدادات، وإعادة التشغيل ديال keyed-Gumbel كتحتاج مفتاح التوليد. هاد الأدوات ماشي كواشف عامة وموثوقة لجميع المزوّدين.
اختار Layer B بحذر
إلا استعملتي Layer B، المشروع كيوصي بنموذج ماشي هو النموذج الأصلي باش تنقص احتمالية تطبيق نفس النوع ديال العلامة مرة أخرى. وبما أن إعادة الصياغة القوية تقدر تضر النبرة والدقة، تخطاها ملي تكون المحافظة على جودة الكتابة هي الأولوية.
كتاشف الواجهات الخلفية الاختيارية
السكريبتات ديال الإعداد اللي كاينة فـ service/scripts/ تقدر تهيّأ reverse-SynthID باش يقيّم الصور، وCtrlRegen باش يحيد العلامات من مجال البيكسلات، وMarkLLM باش يتحقق من العلامات المائية النصية المهيّأة، وMarkDiffusion باش يجرّب العلامات المائية فالصور. هاد الواجهات الخلفية عندها متطلبات وحدود مختلفة؛ راجع سكريبتات الإعداد ديالها قبل ما تفعّلها.
الاستعمال المسؤول
استعمل watermarks-remover غير للخصوصية، والبحث، والتنقية ديال المحتوى اللي كتمتلكو أو عندك الصلاحية تعالجو. ما مخصّصش للغش الأكاديمي ولا للادعاءات الكاذبة بأن محتوى مولّد بالذكاء الاصطناعي كتبو إنسان. تبع القوانين المعمول بها والسياسات ديال المؤسسة.
المشروع متاح بموجب رخصة MIT. باش تطّلع على الإصدارات والكود المصدري، زُر مستودع watermarks-remover على GitHub.
الخلاصة
كيجمع watermarks-remover بين التنقية الحتمية للنصوص، وحذف البيانات الوصفية من بزاف ديال حاويات الملفات، وواجهات خلفية اختيارية للكشف، ودمج الوكلاء، والخطّافات، وواجهة HTTP API. بدا بالفحص، وخلي النسخة الأصلية محفوظة، وطبّق أضيق طبقة تنظيف مناسبة، وراجع النتيجة بلا ما تعتبر نتيجة أي كاشف مضمونة.
