
NotebookLM معزّز بشكل كبير — مصمّم خصيصًا لباحثي الأمن.
كل باحث أمن يعرف ذلك الشعور — تجد مستودع GitHub مثيرًا للاهتمام، أو كتابة جديدة عن CVE، أو منشورًا في مدونة عن تقنية استغلال جديدة. ترسله لنفسك على واتساب. في الحال يغرق في المحادثة. بعد أسابيع تحتاج تلك المقالة حقًا — وقد اختفت.
توقف عن إرسال روابط لنفسك لن تجدها مرة أخرى — أرسلها إلى Samuraizer مرة واحدة، وسيتم تلخيصها ووسمها وتصبح قابلة للبحث إلى الأبد.
| قبل 😵 | بعد 🗡️ |
|---|---|
![]() روابط متناثرة تغرق في سجل المحادثة | ![]() تحليلها وتوسيمها وجاهزة للعثور عليها |
🎯 وضع الخصوصية الإضافي (محلي فقط) — التشغيل مع ollama، جميع البيانات تبقى على جهازك.
samuraizer.db + تضمينات AI محلية عبر Ollama.ollama pull qwen3:4b, ollama pull qwen3-embedding:8b)..pdf, .docx, .pptx, .txt, .md


/yt-channels ويظهر في واجهة المستخدم تحت أقسام RSS/YT
![]() تحليل رابط | ![]() اقتراح القراءة اليومي |
@ للإكمال التلقائي أو استخدم زر التصفح @
![]() دردشة RAG مع درجات المصادر | ![]() دردشة بسياق مثبت |
[!IMPORTANT] شكّل مستقبل Samuraizer! نحن حاليًا نصوت على ميزات جديدة مثل نماذج LLM المحلية وتصدير Obsidian. صوّت هنا!
flowchart LR
Browser[واجهة المتصفح] -->|HTTP| Frontend[واجهة React الأمامية]
Frontend -->|REST/NDJSON| Backend[Flask API]
Backend -->|SQL| SQLite[(samuraizer.db)]
Backend -->|API| Gemini[Gemini 2.5 Flash]
Backend -->|API محلية| Ollama[Ollama - نموذج LLM محلي]
Backend -->|GitHub API| GitHub[GitHub]
Backend -->|RSS| RSS[تغذيات RSS]
Telegram[بوت Telegram] -->|HTTP| Backend
samuraizer.db وتُظهر في الواجهة الأمامية.PATCH /entries/<id>)| الطبقة | التقنيات / المكتبات |
|---|---|
اختر طريقة الإعداد المفضلة لديك:
git clone https://github.com/zomry1/Samuraizer.git
cd Samuraizer
انسخ .env.example إلى .env واملأ القيم الخاصة بك.
يمكنك أيضًا فتح واجهة الويب، والذهاب إلى تبويب الإعدادات (Settings)، وضبط الإعدادات هناك (الموفر، مفاتيح API، أسماء نماذج Ollama، أسماء نماذج التضمين) قبل الحفظ.
cp .env.example .env
أسهل طريقة لتشغيل المجموعة الكاملة — أمر واحد يبني ويبدأ كل شيء.
git clone https://github.com/zomry1/Samuraizer.git
cd Samuraizer
cp .env.example .env
# عدّل .env واملأ GEMINI_API_KEY (وأي قيم أخرى تحتاجها)
جميع ملفات Docker موجودة في مجلد docker/. قم بتشغيل الأوامر من جذر المشروع:
Gemini (سحابي) — افتراضي:
docker compose -f docker/docker-compose.yml up -d
Ollama على CPU:
docker compose -f docker/docker-compose.yml --profile ollama up -d
Ollama على NVIDIA GPU:
docker compose -f docker/docker-compose.yml --profile ollama-nvidia up -d
youtube-transcript-api؟استخدمت النسخة الأصلية مكتبة Python مفتوحة المصدر youtube-transcript-api. تعمل بشكل جيد محليًا ولكن لها قيود حرجة من الناحية العملية: يقوم YouTube بحظر عناوين IP بشكل عدواني التي تقوم بطلبات نصية آلية، خاصة:
وهذا يعني أنه بعد تحليل بضع فيديوهات فقط، قد يتم حظر الخادم بأكمله ويفشل كل جلب نص لاحق مع خطأ IPBlocked / RequestBlocked — مما يكسر تحليل فيديوهات YouTube تمامًا.
transcriptapi.comيستخدم Samuraizer الآن transcriptapi.com — واجهة API مدفوعة من طرف ثالث تتولى جلب النصوص النصية من YouTube من جانبها، عبر بنية تحتية غير محظورة.
الإيجابيات:
GET /api/v2/youtube/transcript)POST /analyze
الجسم:
{ "url": "https://github.com/owner/repo" }
POST /analyze-pdf
الجسم: multipart/form-data مع حقل file يحتوي على ملف .pdf.
يتم تدفق أحداث NDJSON بنفس شكل /analyze (باستخدام اسم الملف كمفتاح url).
GET /entries/<id>/pdf — يقدم PDF مضمنًا في المتصفح.
GET /entries/<id>/pdf?dl=1 — يقدم PDF كتنزيل ملف.
MIT
| الخادم الخلفي |
| Python, Flask, SQLite, feedparser, PyMuPDF |
| نموذج LLM | Gemini 2.5 Flash (Gemini API), Ollama (محلي اختياريًا) |
| الواجهة الأمامية | React 18, Vite, Tailwind CSS |
| البوت | python-telegram-bot v20 |
| النصوص النصية | transcriptapi.com |
| المتغير | مطلوب | أين تحصل عليه |
|---|
LLM_PROVIDER | لا | gemini (افتراضي، سحابي) أو ollama (محلي) |
GEMINI_API_KEY | عند gemini | Google AI Studio → احصل على مفتاح API |
OLLAMA_URL | عند ollama | عنوان URL لواجهة Ollama API (افتراضي: http://localhost:11434) |
OLLAMA_MODEL | عند ollama | نموذج الاستدلال (افتراضي: qwen3:14b) |
OLLAMA_EMBED_MODEL | عند ollama | نموذج التضمين (افتراضي: qwen3-embedding:8b) |
TELEGRAM_BOT_TOKEN | لا | أنشئ بوتًا مع @BotFather على Telegram |
GITHUB_TOKEN | لا | GitHub → الإعدادات → إعدادات المطور → رموز الوصول الشخصية — يرفع حد API من 60 إلى 5000 طلب/ساعة |
TRANSCRIPTAPI | لا | transcriptapi.com/dashboard/api-keys — مطلوب لجلب النصوص النصية من YouTube |
SAMURAIZER_URL | لا | عنوان URL لخادمك الخلفي (افتراضي: http://localhost:8000)، يستخدمه بوت Telegram |
شغل Samuraizer بالكامل دون اتصال بالإنترنت باستخدام Ollama:
# تثبيت واجهة سطر أوامر Ollama (حسب النظام الأساسي)
# macOS
curl -fsSL https://ollama.com/install.sh | sh
# Windows
irm https://ollama.com/install.ps1 | iex
# Linux (Ubuntu/Debian)
curl -fsSL https://ollama.com/install.sh | sh
# ابدأ خدمة Ollama
ollama serve
# تثبيت النماذج
ollama pull qwen3:4b # استدلال
ollama pull qwen3-embedding:8b # تضمين
# تعيين الموفر في .env
LLM_PROVIDER=ollama
إذا كان لديك بالفعل تضمينات Gemini، فإن التبديل إلى Ollama سيقوم تلقائيًا بمسحها عند بدء التشغيل التالي (عدم تطابق الأبعاد). أعد التضمين عبر واجهة المستخدم أو POST /entries/embed-all.
# إنشاء وتفعيل بيئة افتراضية
python -m venv .venv
source .venv/bin/activate # على Windows: .venv\Scripts\activate
pip install -r requirements.txt
cd frontend
npm install
cd ..
python server.py
cd frontend
npm run dev
python telegram_bot.py
Windows (WSL 2):
wsl --install
wsl --update
يقوم Docker Desktop for Windows بتجميع وقت تشغيل حاوية NVIDIA تلقائيًا — لا خطوات إضافية مطلوبة.
Linux:
قم بتثبيت NVIDIA Container Toolkit:
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
Ollama على AMD GPU (يتطلب GPU متوافق مع ROCm + برنامج تشغيل amdgpu على Linux):
docker compose -f docker/docker-compose.yml --profile ollama-amd up -d
هذا كل شيء. الواجهة الأمامية على http://localhost وواجهة API على http://localhost:8000.
تلميح: عند استخدام أي ملف تعريف Ollama، قم بتعيين
LLM_PROVIDER=ollamaفي ملف.envالخاص بك. يتم تعيينOLLAMA_URLتلقائيًا إلىhttp://ollama:11434داخل الحاويات — لا تحتاج إلى تغييره.
بعد أول بدء تشغيل مع Ollama، اسحب النماذج (استخدم اسم الحاوية المطابق لملف التعريف الذي بدأته):
# --profile ollama
docker exec -it samuraizer-ollama-1 ollama pull qwen3:4b
docker exec -it samuraizer-ollama-1 ollama pull qwen3-embedding:8b
# --profile ollama-nvidia
docker exec -it samuraizer-ollama-nvidia-1 ollama pull qwen3:4b
docker exec -it samuraizer-ollama-nvidia-1 ollama pull qwen3-embedding:8b
# --profile ollama-amd
docker exec -it samuraizer-ollama-amd-1 ollama pull qwen3:4b
docker exec -it samuraizer-ollama-amd-1 ollama pull qwen3-embedding:8b
data/ والنسخ الاحتياطية تحت db_backups/.ollama_data (تستمر عبر عمليات إعادة التشغيل).docker compose -f docker/docker-compose.yml --profile ollama-nvidia --profile bot up -d
git pull
docker compose -f docker/docker-compose.yml up -d --build
docker compose -f docker/docker-compose.yml down
السلبيات:
الإعداد: أضف إلى .env:
TRANSCRIPTAPI=your_key_here
احصل على مفتاح في transcriptapi.com/dashboard/api-keys.
| الخيار | كيف يعمل | خطر حظر IP | التكلفة |
|---|---|---|---|
| transcriptapi.com (الحالي) | واجهة REST مُدارة | لا شيء (مشكلتهم) | قائمة على الرصيد |
| yt-dlp | يقوم بتنزيل الترجمة عبر --write-sub --skip-download | منخفض (يحاكي المتصفح) | مجاني، مستضاف ذاتيًا |
youtube-transcript-api + ملفات تعريف الارتباط | مرر ملف cookies.txt Netscape من جلسة متصفح مسجل الدخول | متوسط (خطر حساب مؤقت) | مجاني |
| YouTube Data API v3 | واجهة API رسمية من Google، لا تجريف | لا شيء | حصة مجانية، ثم مدفوعة |
| Supadata | واجهة REST مُدارة مماثلة | لا شيء | طبقة مجانية (100 طلب/يوم) |
أفضل بديل مجاني: yt-dlp — يتم صيانته بنشاط، ويحاكي طلبات المتصفح الحقيقية، ومن غير المرجح أن يتم حظره بسرعة مثل طلب HTTP عادي. للتبديل، استبدل _fetch_youtube_content باستدعاء خارجي لـ yt-dlp --write-auto-sub --sub-format vtt --skip-download وقم بتحليل ملف .vtt الناتج.
GET /entries (يدعم عوامل التصفية: search, category, tag, source, list_id, read, useful)
GET /yt-channels — قائمة القنوات المشترك فيها (id, channel_id, channel_url, name, last_checked)POST /yt-channels/preview — الجسم { "url": "https://www.youtube.com/@handle" }, يُرجع معلومات القناة + أحدث الفيديوهات (url/title/published)POST /yt-channels — الجسم { "url": "...", "name": "اختياري", "analyze_urls": ["https://...", ...] }; إنشاء اشتراك وتحليل فيديوهات محددة اختياريًاPOST /yt-channels/<id>/poll — استقصاء يدوي فوري لقناةDELETE /yt-channels/<id> — إزالة اشتراكPATCH /entries/<id> مع JSON { "tags": ["tag1","tag2"] }