
NotebookLM turbinado — projetado especificamente para pesquisadores de segurança.
Todo pesquisador de segurança conhece a sensação — você encontra um repositório interessante no GitHub, um novo artigo sobre CVE, um post de blog sobre uma técnica de exploração. Você encaminha para si mesmo no WhatsApp. Ele imediatamente se perde no chat. Semanas depois você realmente precisa daquele artigo — e ele se foi.
Pare de enviar para si mesmo links que você nunca mais encontrará — envie-os para o Samuraizer uma vez, e eles serão resumidos, etiquetados e pesquisáveis para sempre.
| Antes 😵 | Depois 🗡️ |
|---|---|
![]() Links dispersos afogados no histórico do chat | ![]() |
🎯 Modo de privacidade extra (apenas local) — execute com ollama, todos os dados permanecem na sua máquina.
samuraizer.db + embeddings de IA locais via Ollama.ollama pull qwen3:4b, ollama pull qwen3-embedding:8b)..pdf, .docx, .pptx, .txt, .md


/yt-channels e aparece na interface nas seções RSS/YT
![]() Analisando uma URL | ![]() Leitura Sugerida Diária |
@ para preenchimento automático ou use o botão de navegação @
![]() Chat RAG com pontuações de fonte | ![]() Chat com contexto fixado |
[!IMPORTANT] Molde o Futuro do Samuraizer! Estamos atualmente votando em novos recursos, como LLMs locais e exportação para Obsidian. Vote aqui!
flowchart LR
Browser[Interface do Navegador] -->|HTTP| Frontend[Frontend React]
Frontend -->|REST/NDJSON| Backend[API Flask]
Backend -->|SQL| SQLite[(samuraizer.db)]
Backend -->|API| Gemini[Gemini 2.5 Flash]
Backend -->|API local| Ollama[Ollama - LLM Local]
Backend -->|API do GitHub| GitHub[GitHub]
Backend -->|RSS| RSS[Feeds RSS]
Telegram[Bot do Telegram] -->|HTTP| Backend
samuraizer.db e exibidos no frontend.PATCH /entries/<id>)| Camada | Tecnologias / Bibliotecas |
|---|---|
Escolha seu método de configuração preferido:
git clone https://github.com/zomry1/Samuraizer.git
cd Samuraizer
Copie .env.example para .env e preencha com seus valores.
Você também pode abrir a interface web, ir para a guia Configurações e ajustar as configurações lá (provedor, chaves de API, nomes de modelos Ollama, nomes de modelos de embedding) antes de salvar.
cp .env.example .env
A maneira mais fácil de executar a pilha completa — um comando constrói e inicia tudo.
git clone https://github.com/zomry1/Samuraizer.git
cd Samuraizer
cp .env.example .env
# Edite .env e preencha GEMINI_API_KEY (e quaisquer outros valores necessários)
Todos os arquivos Docker estão na pasta docker/. Execute os comandos a partir da raiz do projeto:
Gemini (nuvem) — padrão:
docker compose -f docker/docker-compose.yml up -d
Ollama na CPU:
docker compose -f docker/docker-compose.yml --profile ollama up -d
Ollama na GPU NVIDIA:
docker compose -f docker/docker-compose.yml --profile ollama-nvidia up -d
youtube-transcript-api?A implementação original usava a biblioteca Python de código aberto youtube-transcript-api. Ela funciona bem localmente, mas tem uma limitação crítica na prática: o YouTube bloqueia agressivamente endereços IP que fazem solicitações automatizadas de transcrições, especialmente:
Isso significava que, depois de analisar apenas alguns vídeos, o servidor inteiro seria bloqueado e cada busca subsequente de transcrição falharia com um erro IPBlocked / RequestBlocked — quebrando completamente a análise de vídeos do YouTube.
transcriptapi.comSamuraizer agora usa transcriptapi.com — uma API paga de terceiros que lida com a obtenção de transcrições do YouTube por conta própria, roteando através de uma infraestrutura que não é bloqueada.
Prós:
GET /api/v2/youtube/transcript)POST /analyze
Corpo:
{ "url": "https://github.com/owner/repo" }
POST /analyze-pdf
Corpo: multipart/form-data com um campo file contendo um arquivo .pdf.
Transmite eventos NDJSON no mesmo formato que /analyze (usando o nome do arquivo como chave url).
GET /entries/<id>/pdf — serve o PDF inline no navegador.
GET /entries/<id>/pdf?dl=1 — serve o PDF como download de arquivo.
MIT
| Backend |
| Python, Flask, SQLite, feedparser, PyMuPDF |
| LLM | Gemini 2.5 Flash (API Gemini), Ollama (local opcional) |
| Frontend | React 18, Vite, Tailwind CSS |
| Bot | python-telegram-bot v20 |
| Transcrições | transcriptapi.com |
| Variável | Obrigatório | Onde obter |
|---|
LLM_PROVIDER | Não | gemini (padrão, nuvem) ou ollama (local) |
GEMINI_API_KEY | Quando gemini | Google AI Studio → Obter chave de API |
OLLAMA_URL | Quando ollama | URL da API do Ollama (padrão: http://localhost:11434) |
OLLAMA_MODEL | Quando ollama | Modelo de raciocínio (padrão: qwen3:14b) |
OLLAMA_EMBED_MODEL | Quando ollama | Modelo de embedding (padrão: qwen3-embedding:8b) |
TELEGRAM_BOT_TOKEN | Não | Crie um bot com @BotFather no Telegram |
GITHUB_TOKEN | Não | GitHub → Configurações → Configurações do desenvolvedor → Tokens de acesso pessoal — aumenta o limite de taxa da API de 60 para 5.000 requisições/hora |
TRANSCRIPTAPI | Não | transcriptapi.com/dashboard/api-keys — necessário para obter transcrições do YouTube |
SAMURAIZER_URL | Não | URL do seu backend (padrão: http://localhost:8000), usado pelo bot do Telegram |
Execute o Samuraizer completamente offline com Ollama:
# Instalar a CLI do Ollama (depende da plataforma)
# 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
# Iniciar o serviço Ollama
ollama serve
# Instalar modelos
ollama pull qwen3:4b # raciocínio
ollama pull qwen3-embedding:8b # embeddings
# Definir provedor no .env
LLM_PROVIDER=ollama
Se você já tinha embeddings do Gemini, mudar para Ollama automaticamente os apagará na próxima inicialização (incompatibilidade de dimensão). Re-embedd através da interface ou POST /entries/embed-all.
# Criar e ativar um ambiente virtual
python -m venv .venv
source .venv/bin/activate # No 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
O Docker Desktop para Windows já inclui o runtime de contêiner NVIDIA automaticamente — nenhum passo extra é necessário.
Linux:
Instale o 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 na GPU AMD (requer GPU compatível com ROCm + driver amdgpu no Linux):
docker compose -f docker/docker-compose.yml --profile ollama-amd up -d
Pronto. O frontend estará em http://localhost e a API em http://localhost:8000.
Dica: Ao usar qualquer perfil Ollama, defina
LLM_PROVIDER=ollamano seu.env. OOLLAMA_URLé automaticamente definido comohttp://ollama:11434dentro dos contêineres — você não precisa alterá-lo.
Após a primeira inicialização com Ollama, baixe os modelos (use o nome do contêiner correspondente ao perfil que você iniciou):
# --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/ do projeto e backups em db_backups/.ollama_data (persiste entre reinicializações).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
Contras:
Configuração: Adicione ao .env:
TRANSCRIPTAPI=sua_chave_aqui
Obtenha uma chave em transcriptapi.com/dashboard/api-keys.
| Opção | Como funciona | Risco de bloqueio de IP | Custo |
|---|---|---|---|
| transcriptapi.com (atual) | API REST gerenciada | Nenhum (problema deles) | Baseado em créditos |
| yt-dlp | Baixa legendas via --write-sub --skip-download | Baixo (imita navegador) | Gratuito, auto-hospedado |
youtube-transcript-api + cookies | Passa um arquivo cookies.txt em formato Netscape de uma sessão de navegador logada | Médio (risco de conta descartável) | Gratuito |
| YouTube Data API v3 | API oficial do Google, sem scraping | Nenhum | Cota gratuita, depois paga |
| Supadata | API REST gerenciada similar | Nenhum | Nível gratuito (100 req/dia) |
Melhor alternativa gratuita: yt-dlp — é ativamente mantido, imita solicitações reais de navegador e é improvável que seja bloqueado tão rapidamente quanto uma solicitação HTTP simples. Para trocar, substitua _fetch_youtube_content para chamar yt-dlp --write-auto-sub --sub-format vtt --skip-download e analise o arquivo .vtt resultante.
GET /entries (suporta filtros: search, category, tag, source, list_id, read, useful)
GET /yt-channels — lista canais inscritos (id, channel_id, channel_url, name, last_checked)POST /yt-channels/preview — corpo { "url": "https://www.youtube.com/@handle" }, retorna informações do canal + vídeos mais recentes (url/title/published)POST /yt-channels — corpo { "url": "...", "name": "opcional", "analyze_urls": ["https://...", ...] }; cria inscrição e opcionalmente analisa vídeos selecionadosPOST /yt-channels/<id>/poll — verificação manual imediata de um canalDELETE /yt-channels/<id> — remove inscriçãoPATCH /entries/<id> com JSON { "tags": ["tag1","tag2"] }