
NotebookLM на стероидах — создан специально для исследователей безопасности.
Каждый исследователь безопасности знает это чувство — вы находите интересный GitHub-репозиторий, свежий разбор CVE, пост в блоге о новой технике эксплуатации. Вы пересылаете его себе в WhatsApp. Он сразу же теряется в чате. Через несколько недель вам действительно нужна эта статья — и её нет.
Перестаньте отправлять себе ссылки, которые вы никогда больше не найдёте — отправьте их в Samuraizer один раз, и они будут резюмированы, помечены тегами и останутся доступными для поиска навсегда.
| До 😵 | После 🗡️ |
|---|---|
![]() Разрозненные ссылки, тонущие в истории чата | ![]() |
🎯 Режим повышенной приватности (только локально) — запуск с ollama, все данные остаются на вашем устройстве.
samuraizer.db + локальные AI-эмбеддинги через Ollama.ollama pull qwen3:4b, ollama pull qwen3-embedding:8b)..pdf, .docx, .pptx, .txt, .md


/yt-channels и отображается в интерфейсе в разделах RSS/YT
![]() Анализ URL | ![]() Ежедневная рекомендация |
@ для автодополнения или используйте кнопку обзора @
![]() RAG-чат с оценками источников | ![]() Чат с закреплённым контекстом |
[!IMPORTANT] Формируйте будущее Samuraizer! Сейчас мы голосуем за новые функции, такие как локальные LLM и экспорт в Obsidian. Проголосовать здесь!
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| Backendsamuraizer.db и отображаются во фронтенде.PATCH /entries/<id>)| Слой | Технологии / Библиотеки |
|---|---|
| Бэкенд |
Выберите предпочитаемый способ настройки:
git clone https://github.com/zomry1/Samuraizer.git
cd Samuraizer
Скопируйте .env.example в .env и заполните свои значения.
Вы также можете открыть веб-интерфейс, перейти на вкладку Настройки и изменить настройки (провайдер, ключи 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?В первоначальной реализации использовалась open-source библиотека Python youtube-transcript-api. Она хорошо работает локально, но на практике имеет критическое ограничение: YouTube агрессивно блокирует IP-адреса, которые совершают автоматические запросы транскриптов, особенно:
Это означает, что после анализа всего нескольких видео весь сервер может быть заблокирован, и каждый последующий запрос транскрипта будет завершаться ошибкой IPBlocked / RequestBlocked — полностью нарушая анализ видео YouTube.
transcriptapi.comSamuraizer теперь использует 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 API Ollama (по умолчанию: 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 до 5 000 запросов/час |
TRANSCRIPTAPI | Нет | transcriptapi.com/dashboard/api-keys — требуется для получения транскриптов YouTube |
SAMURAIZER_URL | Нет | URL вашего бэкенда (по умолчанию: http://localhost:8000), используется Telegram-ботом |
Запустите Samuraizer полностью офлайн с Ollama:
# Установка CLI 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 для 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 API | Нет (их проблема) | На основе кредитов |
| yt-dlp | Скачивает субтитры через --write-sub --skip-download | Низкий (имитирует браузер) | Бесплатно, самостоятельно |
youtube-transcript-api + cookies | Передача Netscape cookies.txt из сессии браузера с авторизацией | Средний (риск для аккаунта-однодневки) | Бесплатно |
| YouTube Data API v3 | Официальный API Google, без скрапинга | Нет | Бесплатная квота, затем платно |
| Supadata | Аналогичный управляемый REST API | Нет | Бесплатный тариф (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": "optional", "analyze_urls": ["https://...", ...] }; создание подписки и опциональный анализ выбранных видеоPOST /yt-channels/<id>/poll — немедленный ручной опрос каналаDELETE /yt-channels/<id> — удаление подпискиPATCH /entries/<id> с JSON { "tags": ["tag1","tag2"] }