
NotebookLM potenciado — diseñado específicamente para investigadores de seguridad.
Todo investigador de seguridad conoce esa sensación — encuentras un repositorio interesante en GitHub, un artículo fresco sobre un CVE, una publicación de blog sobre una nueva técnica de explotación. Te lo reenvías a ti mismo por WhatsApp. Inmediatamente se pierde en el chat. Semanas después realmente necesitas ese artículo — y ha desaparecido.
Deja de enviarte enlaces que nunca volverás a encontrar — envíalos a Samuraizer una vez, y serán resumidos, etiquetados y buscables para siempre.
| Antes 😵 | Después 🗡️ |
|---|---|
![]() Enlaces dispersos ahogándose en el historial del chat | ![]() |
🎯 Modo de privacidad extra (solo local) — ejecutar con ollama, todos los datos permanecen en tu máquina.
samuraizer.db + incrustaciones locales de IA mediante Ollama.ollama pull qwen3:4b, ollama pull qwen3-embedding:8b)..pdf, .docx, .pptx, .txt, .md


/yt-channels y aparece en la interfaz bajo las secciones RSS/YT
![]() Analizando una URL | ![]() Lectura sugerida diaria |
@ para autocompletar o usa el botón de @ para explorar
![]() Chat RAG con puntuaciones de fuente | ![]() Chat con contexto fijado |
[!IMPORTANT] ¡Da forma al futuro de Samuraizer! Actualmente estamos votando nuevas funciones como LLMs locales y exportación a Obsidian. ¡Vota aquí!
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 y se muestran en el frontend.PATCH /entries/<id>)| Capa | Tecnologías / Librerías |
|---|---|
Elige tu método de configuración preferido:
git clone https://github.com/zomry1/Samuraizer.git
cd Samuraizer
Copia .env.example a .env y completa tus valores.
También puedes abrir la interfaz web, ir a la pestaña Configuración y ajustar allí los parámetros (proveedor, claves API, nombres de modelos de Ollama, nombres de modelos de incrustación) antes de guardar.
cp .env.example .env
La forma más fácil de ejecutar el stack completo — un solo comando construye e inicia todo.
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)
Todos los archivos de Docker están en la carpeta docker/. Ejecuta los comandos desde la raíz del proyecto:
Gemini (nube) — predeterminado:
docker compose -f docker/docker-compose.yml up -d
Ollama en CPU:
docker compose -f docker/docker-compose.yml --profile ollama up -d
Ollama en GPU NVIDIA:
docker compose -f docker/docker-compose.yml --profile ollama-nvidia up -d
youtube-transcript-api?La implementación original usaba la biblioteca Python de código abierto youtube-transcript-api. Funciona bien localmente pero tiene una limitación crítica en la práctica: YouTube bloquea agresivamente las direcciones IP que realizan solicitudes automatizadas de transcripciones, especialmente:
Esto significaba que después de analizar solo unos pocos videos, todo el servidor quedaba bloqueado y cada recuperación de transcripción posterior fallaba con un error IPBlocked / RequestBlocked — rompiendo por completo el análisis de videos de YouTube.
transcriptapi.comSamuraizer ahora usa transcriptapi.com — una API de pago de terceros que maneja la obtención de transcripciones de YouTube por su lado, enrutando a través de una infraestructura que no está bloqueada.
Ventajas:
POST /analyze
Body:
{ "url": "https://github.com/owner/repo" }
POST /analyze-pdf
Body: multipart/form-data con un campo file que contenga un archivo .pdf.
Transmite eventos NDJSON con la misma estructura que /analyze (usando el nombre del archivo como clave url).
GET /entries/<id>/pdf — sirve el PDF en línea en el navegador.
GET /entries/<id>/pdf?dl=1 — sirve el PDF como descarga de archivo.
MIT
| Backend |
| Python, Flask, SQLite, feedparser, PyMuPDF |
| LLM | Gemini 2.5 Flash (Gemini API), Ollama (local opcionalmente) |
| Frontend | React 18, Vite, Tailwind CSS |
| Bot | python-telegram-bot v20 |
| Transcripciones | transcriptapi.com |
| Variable | Requerida | Dónde conseguirla |
|---|
LLM_PROVIDER | No | gemini (predeterminado, nube) u ollama (local) |
GEMINI_API_KEY | Cuando se usa gemini | Google AI Studio → Obtener clave API |
OLLAMA_URL | Cuando se usa ollama | URL de la API de Ollama (predeterminado: http://localhost:11434) |
OLLAMA_MODEL | Cuando se usa ollama | Modelo de razonamiento (predeterminado: qwen3:14b) |
OLLAMA_EMBED_MODEL | Cuando se usa ollama | Modelo de incrustación (predeterminado: qwen3-embedding:8b) |
TELEGRAM_BOT_TOKEN | No | Crea un bot con @BotFather en Telegram |
GITHUB_TOKEN | No | GitHub → Configuración → Configuración de desarrollador → Tokens de acceso personal — aumenta el límite de tasa de API de 60 a 5,000 solicitudes/hora |
TRANSCRIPTAPI | No | transcriptapi.com/dashboard/api-keys — requerido para obtener transcripciones de YouTube |
SAMURAIZER_URL | No | URL de tu backend (predeterminado: http://localhost:8000), utilizado por el bot de Telegram |
Ejecuta Samuraizer completamente sin conexión con Ollama:
# 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
Si ya tienes incrustaciones de Gemini, cambiar a Ollama las eliminará automáticamente en el próximo inicio (incompatibilidad de dimensiones). Vuelve a incrustarlas mediante la interfaz o POST /entries/embed-all.
# 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 para Windows incluye automáticamente el runtime de contenedores NVIDIA — no se necesitan pasos adicionales.
Linux:
Instala el 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 en GPU AMD (requiere GPU compatible con ROCm + controlador amdgpu en Linux):
docker compose -f docker/docker-compose.yml --profile ollama-amd up -d
Eso es todo. El frontend está en http://localhost y la API en http://localhost:8000.
Consejo: Al usar cualquier perfil de Ollama, establece
LLM_PROVIDER=ollamaen tu.env. LaOLLAMA_URLse establece automáticamente enhttp://ollama:11434dentro de los contenedores — no necesitas cambiarla.
Después del primer inicio con Ollama, descarga los modelos (usa el nombre del contenedor que coincida con el perfil que iniciaste):
# --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/ del proyecto y las copias de seguridad en db_backups/.ollama_data (persiste entre reinicios).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/transcript)Desventajas:
Configuración: Añade a .env:
TRANSCRIPTAPI=tu_clave_aqui
Obtén una clave en transcriptapi.com/dashboard/api-keys.
| Opción | Cómo funciona | Riesgo de bloqueo IP | Costo |
|---|---|---|---|
| transcriptapi.com (actual) | API REST gestionada | Ninguno (problema de ellos) | Basado en créditos |
| yt-dlp | Descarga subtítulos mediante --write-sub --skip-download | Bajo (imita al navegador) | Gratuito, autoalojado |
youtube-transcript-api + cookies | Pasa un archivo cookies.txt de Netscape desde una sesión de navegador iniciada | Medio (riesgo de cuenta desechable) | Gratuito |
| YouTube Data API v3 | API oficial de Google, sin scraping | Ninguno | Cuota gratuita, luego pago |
| Supadata | API REST gestionada similar | Ninguno | Nivel gratuito (100 solicitudes/día) |
Mejor alternativa gratuita: yt-dlp — tiene mantenimiento activo, imita solicitudes reales de navegador y es poco probable que sea bloqueado tan rápido como una solicitud HTTP simple. Para cambiarlo, reemplaza _fetch_youtube_content para ejecutar yt-dlp --write-auto-sub --sub-format vtt --skip-download y analiza el archivo .vtt resultante.
GET /entries (admite filtros: search, category, tag, source, list_id, read, useful)
GET /yt-channels — lista los canales suscritos (id, channel_id, channel_url, name, last_checked)POST /yt-channels/preview — body { "url": "https://www.youtube.com/@handle" }, devuelve información del canal + últimos videos (url/title/published)POST /yt-channels — body { "url": "...", "name": "opcional", "analyze_urls": ["https://...", ...] }; crear suscripción y opcionalmente analizar videos seleccionadosPOST /yt-channels/<id>/poll — consulta manual inmediata para un canalDELETE /yt-channels/<id> — eliminar suscripciónPATCH /entries/<id> con JSON { "tags": ["tag1","tag2"] }