
NotebookLM mit Steroiden — speziell für Sicherheitsforscher entwickelt.
Jeder Sicherheitsforscher kennt das Gefühl – man findet ein interessantes GitHub-Repository, einen aktuellen CVE-Artikel, einen Blogbeitrag über eine neue Exploitation-Technik. Man schickt ihn sich selbst auf WhatsApp. Er geht sofort im Chat unter. Wochen später braucht man genau diesen Artikel – und er ist weg.
Hör auf, dir selbst Links zu schicken, die du nie wiederfindest – schicke sie einmal an Samuraizer, und sie werden für immer zusammengefasst, getaggt und durchsuchbar.
| Vorher 😵 | Nachher 🗡️ |
|---|---|
![]() Verstreute Links, die in der Chat-Historie untergehen | ![]() |
🎯 Erweiterter Datenschutzmodus (nur lokal) – mit ollama ausführen, alle Daten bleiben auf deinem Rechner.
samuraizer.db + lokale KI-Embeddings über Ollama.ollama pull qwen3:4b, ollama pull qwen3-embedding:8b)..pdf, .docx, .pptx, .txt, .md


/yt-channels-API und erscheint in der Benutzeroberfläche unter den Abschnitten RSS/YT
![]() Analysiert eine URL | ![]() Täglicher Lesevorschlag |
@ für Autovervollständigung oder nutze die @-Schaltfläche zum Durchsuchen
![]() RAG-Chat mit Quellen-Scores | ![]() Chat mit angeheftetem Kontext |
[!IMPORTANT] Gestalte die Zukunft von Samuraizer! Wir stimmen derzeit über neue Funktionen wie lokale LLMs und Obsidian-Export ab. Stimme hier ab!
flowchart LR
Browser[Browser UI] -->|HTTP| Frontend[React Frontend]
Frontend -->|REST/NDJSON| Backend[Flask API]
Backend -->|SQL| SQLite[(samuraizer.db)]
Backend -->|API| Gemini[Gemini 2.5 Flash]
Backend -->|local API| Ollama[Ollama - Local LLM]
Backend -->|GitHub API| GitHub[GitHub]
Backend -->|RSS| RSS[RSS feeds]
Telegram[Telegram Bot] -->|HTTP| Backend
samuraizer.db gespeichert und im Frontend angezeigt.PATCH /entries/<id> gespeichert)| Ebene | Technik / Bibliotheken |
|---|---|
| Backend |
Wähle deine bevorzugte Einrichtungsmethode:
git clone https://github.com/zomry1/Samuraizer.git
cd Samuraizer
Kopiere .env.example in .env und fülle deine Werte aus.
Du kannst auch die Weboberfläche öffnen, zum Tab Einstellungen wechseln und die Einstellungen dort vor dem Speichern anpassen (Anbieter, API-Schlüssel, Ollama-Modellnamen, Embedding-Modellnamen).
cp .env.example .env
Der einfachste Weg, den gesamten Stack zu betreiben – ein Befehl baut und startet alles.
git clone https://github.com/zomry1/Samuraizer.git
cd Samuraizer
cp .env.example .env
# Edit .env and fill in GEMINI_API_KEY (and any other values you need)
Alle Docker-Dateien befinden sich im Ordner docker/. Führe die Befehle aus dem Projektstammverzeichnis aus:
Gemini (Cloud) – Standard:
docker compose -f docker/docker-compose.yml up -d
Ollama auf CPU:
docker compose -f docker/docker-compose.yml --profile ollama up -d
Ollama auf NVIDIA-GPU:
docker compose -f docker/docker-compose.yml --profile ollama-nvidia up -d
youtube-transcript-api?Die ursprüngliche Implementierung nutzte die Open-Source-Python-Bibliothek youtube-transcript-api. Sie funktioniert lokal gut, hat aber in der Praxis eine kritische Einschränkung: YouTube blockiert aggressiv IP-Adressen, die automatisierte Transkriptanfragen stellen, insbesondere:
Das bedeutete, dass nach der Analyse nur weniger Videos der gesamte Server blockiert wurde und jeder weitere Transkriptabruf mit einem IPBlocked- / RequestBlocked-Fehler fehlschlug – was die YouTube-Videoanalyse vollständig zum Erliegen brachte.
transcriptapi.comSamuraizer verwendet jetzt transcriptapi.com – eine kostenpflichtige Drittanbieter-API, die den Abruf von YouTube-Transkripten auf ihrer Seite übernimmt und über eine Infrastruktur leitet, die nicht blockiert wird.
Vorteile:
POST /analyze
Body:
{ "url": "https://github.com/owner/repo" }
POST /analyze-pdf
Body: multipart/form-data mit einem file-Feld, das eine .pdf-Datei enthält.
Streamt NDJSON-Ereignisse im gleichen Format wie /analyze (unter Verwendung des Dateinamens als url-Schlüssel).
GET /entries/<id>/pdf – stellt die PDF inline im Browser bereit.
– stellt die PDF als Dateidownload bereit.
MIT
| Python, Flask, SQLite, feedparser, PyMuPDF |
| LLM | Gemini 2.5 Flash (Gemini API), Ollama (optional lokal) |
| Frontend | React 18, Vite, Tailwind CSS |
| Bot | python-telegram-bot v20 |
| Transkripte | transcriptapi.com |
| Variable | Erforderlich | Wo du sie bekommst |
|---|
LLM_PROVIDER | Nein | gemini (Standard, Cloud) oder ollama (lokal) |
GEMINI_API_KEY | Bei gemini | Google AI Studio → API-Schlüssel abrufen |
OLLAMA_URL | Bei ollama | Ollama-API-URL (Standard: http://localhost:11434) |
OLLAMA_MODEL | Bei ollama | Reasoning-Modell (Standard: qwen3:14b) |
OLLAMA_EMBED_MODEL | Bei ollama | Embedding-Modell (Standard: qwen3-embedding:8b) |
TELEGRAM_BOT_TOKEN | Nein | Erstelle einen Bot mit @BotFather auf Telegram |
GITHUB_TOKEN | Nein | GitHub → Einstellungen → Entwicklereinstellungen → Persönliche Zugriffstoken – erhöht das API-Ratenlimit von 60 auf 5.000 Anfragen/Std. |
TRANSCRIPTAPI | Nein | transcriptapi.com/dashboard/api-keys – erforderlich für den Abruf von YouTube-Transkripten |
SAMURAIZER_URL | Nein | URL deines Backends (Standard: http://localhost:8000), wird vom Telegram-Bot verwendet |
Betreibe Samuraizer mit Ollama vollständig offline:
# Install Ollama CLI (platform-dependent)
# 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
# Start Ollama service
ollama serve
# Install models
ollama pull qwen3:4b # reasoning
ollama pull qwen3-embedding:8b # embeddings
# Set provider in .env
LLM_PROVIDER=ollama
Wenn du bereits Gemini-Embeddings hast, werden diese beim nächsten Start durch die Umstellung auf Ollama automatisch gelöscht (Dimensionskonflikt). Führe die Einbettung erneut über die Benutzeroberfläche oder POST /entries/embed-all durch.
# Create and activate a virtual environment
python -m venv .venv
source .venv/bin/activate # On 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 für Windows enthält die NVIDIA-Container-Runtime automatisch – keine weiteren Schritte erforderlich.
Linux:
Installiere das 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 auf AMD-GPU (erfordert ROCm-fähige GPU + amdgpu-Treiber unter Linux):
docker compose -f docker/docker-compose.yml --profile ollama-amd up -d
Das war's. Das Frontend läuft unter http://localhost und die API unter http://localhost:8000.
Tipp: Wenn du ein Ollama-Profil verwendest, setze
LLM_PROVIDER=ollamain deiner.env. DieOLLAMA_URLwird in den Containern automatisch aufhttp://ollama:11434gesetzt – du musst sie nicht ändern.
Ziehe nach dem ersten Start mit Ollama die Modelle (verwende den Containernamen, der zum gestarteten Profil passt):
# --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/-Verzeichnis des Projekts und Backups unter db_backups/.ollama_data gespeichert (bleibt über Neustarts hinweg erhalten).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
GET /api/v2/youtube/transcriptNachteile:
Einrichtung: Füge Folgendes in .env ein:
TRANSCRIPTAPI=your_key_here
Hole einen Schlüssel unter transcriptapi.com/dashboard/api-keys.
| Option | Funktionsweise | IP-Sperrrisiko | Kosten |
|---|---|---|---|
| transcriptapi.com (aktuell) | Verwaltete REST-API | Keines (ihr Problem) | Auf Credit-Basis |
| yt-dlp | Lädt Untertitel über --write-sub --skip-download herunter | Gering (ahmt Browser nach) | Kostenlos, selbst gehostet |
youtube-transcript-api + Cookies | Übergib eine Netscape-cookies.txt aus einer angemeldeten Browser-Sitzung | Mittel (Risiko von Wegwerf-Konten) | Kostenlos |
| YouTube Data API v3 | Offizielle Google-API, kein Scraping | Keines | Kostenloses Kontingent, dann kostenpflichtig |
| Supadata | Ähnliche verwaltete REST-API | Keines | Kostenlose Stufe (100 Anfragen/Tag) |
Beste kostenlose Alternative: yt-dlp – es wird aktiv gepflegt, ahmt echte Browseranfragen nach und wird wahrscheinlich nicht so schnell blockiert wie eine einfache HTTP-Anfrage. Zum Wechsel ersetze _fetch_youtube_content so, dass es yt-dlp --write-auto-sub --sub-format vtt --skip-download aufruft und die resultierende .vtt-Datei parst.
GET /entries/<id>/pdf?dl=1GET /entries (unterstützt Filter: search, category, tag, source, list_id, read, useful)
GET /yt-channels – listet abonnierte Kanäle auf (id, channel_id, channel_url, name, last_checked)POST /yt-channels/preview – Body { "url": "https://www.youtube.com/@handle" }, gibt Kanalinfo + neueste Videos zurück (url/title/published)POST /yt-channels – Body { "url": "...", "name": "optional", "analyze_urls": ["https://...", ...] }; Abonnement erstellen und optional ausgewählte Videos analysierenPOST /yt-channels/<id>/poll – sofortiger manueller Abruf für einen KanalDELETE /yt-channels/<id> – Abonnement entfernenPATCH /entries/<id> mit JSON { "tags": ["tag1","tag2"] }