
NotebookLMの強化版 — セキュリティ研究者向けに特化して構築された。
セキュリティ研究者なら誰でも経験があります — 興味深い GitHub リポジトリ、新しい CVE の writeup、新しいエクスプロイト手法に関するブログ記事を見つける。それを WhatsApp で自分に転送する。すぐにチャットの海に埋もれる。数週間後、実際にその記事が必要になる — しかし見つからない。
もう二度と見つけられないリンクを送るのはやめましょう — Samuraizer に一度送れば、要約され、タグ付けされ、永続的に検索可能になります。
| Before 😵 | After 🗡️ |
|---|---|
![]() チャット履歴に埋もれる散らばったリンク | ![]() 分析・タグ付け・発見可能に |
🎯 追加のプライバシーモード(ローカル専用) — ollama で実行すれば、すべてのデータは自分のマシンに留まります。
samuraizer.db)+ Ollama によるローカル AI 埋め込みollama pull qwen3:4b、ollama pull qwen3-embedding:8b).pdf、.docx、.pptx、.txt、.md


/yt-channels API 経由で動作し、UI の 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| Backend
samuraizer.db に保存し、フロントエンドに表示PATCH /entries/<id> で永続化)| 層 | 技術 / ライブラリ |
|---|---|
| バックエンド | Python, Flask, SQLite, feedparser, PyMuPDF |
お好みのセットアップ方法を選択してください:
git clone https://github.com/zomry1/Samuraizer.git
cd Samuraizer
.env.example を .env にコピーし、値を入力してください。
また、Web UI の Settings タブを開いて、プロバイダー、API キー、Ollama モデル名、埋め込みモデル名などを保存前に調整することもできます。
cp .env.example .env
フルスタックを実行する最も簡単な方法 — 1つのコマンドですべてをビルドして起動します。
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 on CPU:
docker compose -f docker/docker-compose.yml --profile ollama up -d
Ollama on 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.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 ファイルを含む。
/analyze と同じ形式で NDJSON イベントをストリーミング(url キーにはファイル名を使用)。
GET /entries/<id>/pdf — ブラウザに PDF をインライン表示。
GET /entries/<id>/pdf?dl=1 — PDF をファイルとしてダウンロード。
MIT
| 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 の場合 | Ollama API URL(デフォルト: http://localhost:11434) |
OLLAMA_MODEL | ollama の場合 | 推論モデル(デフォルト: qwen3:14b) |
OLLAMA_EMBED_MODEL | ollama の場合 | 埋め込みモデル(デフォルト: qwen3-embedding:8b) |
TELEGRAM_BOT_TOKEN | いいえ | Telegram で @BotFather を使ってボットを作成 |
GITHUB_TOKEN | いいえ | GitHub → 設定 → 開発者設定 → パーソナルアクセストークン — API レート制限を 60 から 5000 req/hr に引き上げ |
TRANSCRIPTAPI | いいえ | transcriptapi.com/dashboard/api-keys — YouTube トランスクリプト取得に必要 |
SAMURAIZER_URL | いいえ | バックエンドの URL(デフォルト: http://localhost:8000)、Telegram ボットが使用 |
Ollama を使用して Samuraizer を完全オフラインで実行:
# Ollama CLI のインストール(プラットフォーム依存)
# 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 に切り替えると、次回起動時に自動的に削除されます(次元の不一致)。UI または 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 on AMD GPU (ROCm 対応 GPU + Linux 上の amdgpu ドライバーが必要):
docker compose -f docker/docker-compose.yml --profile ollama-amd up -d
以上です。フロントエンドは **http://localhost**、API は http://localhost:8000 でアクセスできます。
ヒント: Ollama プロファイルを使用する場合は、
.envでLLM_PROVIDER=ollamaを設定してください。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 ボリュームに保存されます(再起動後も保持)。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 | 公式 Google API、スクレイピングなし | なし | 無料枠あり、その後有料 |
| Supadata | 同様のマネージド REST API | なし | 無料枠(100 req/day) |
最良の無料代替案: 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"] } を使用