yt-expert
Created: January 21, 2026
YouTube video ingestionLLM (large language model) workflowsRAG (retrieval-augmented generation)embeddingstranscription / speech-to-textsearch & QAoffline/local-first data packstimestamped citationsRAG = retrieval-augmented generationLLM = Large Language Modelyt-dlp = youtube-dl (fork)pnpm = pnpm (Node package manager)bedrock = AWS BedrockAnthropic Claude = Claude / anthropicwhisper = OpenAI Whisperembeddings_local = local embeddingsAWS Secrets Manager = Secrets Manager / ARNYTEXPERT_* = YTEXPERT env vars / configyt-expert CLI = yt-expert command-line toolyt-expert CLI (yt-expert ingest, yt-expert serve)python venv (python -m venv)pip (pip install, pip install -e)pnpm (pnpm demo:api, pnpm demo:ui)yt-dlp (YouTube downloader)Whisper (speech-to-text)embeddings_local (local embeddings extras)AWS Bedrock (LLM provider)Anthropic Claude (model id: anthropic.claude-3-*)AWS Secrets Manager (secret ARN support)Environment variables / config (YTEXPERT_*, PUBLIC_API_BASE, AWS_REGION)cookies file support (cookies.txt)legacy env var compatibility (DEMO_API_YTDLP_COOKIES*)
README.md
yt-expert — Monorepo (core + demo UI/API)
This repo hosts the yt-expert Python package plus a small demo API/UI that consumes it.
- Core package:
src/yt_expert/ - Docs:
src/docs/ - Demo API:
services/demo-api - Demo UI:
apps/demo-ui
Core quickstart (local)
python -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -e ".[dev,whisper,embeddings_local]"
# Ingest
yt-expert ingest channel --channel-id UCxxxxxxxxxxxxxxxxxxxxxx --recent 5 --pack-name "my-pack"
# Serve API
yt-expert serve --host 0.0.0.0 --port 8000
See src/README.md for the full core README.
Demo app (API + UI)
pnpm demo:api:setup
pnpm demo:api
pnpm demo:ui:install
pnpm demo:ui
The UI talks to the demo API at http://localhost:8000 by default. Set PUBLIC_API_BASE if your API runs elsewhere.
LLM settings
The demo API now uses yt-expert settings. Configure via YTEXPERT_* env vars, e.g.:
export YTEXPERT_LLM_PROVIDER=bedrock
export YTEXPERT_BEDROCK_LLM_MODEL_ID=anthropic.claude-3-sonnet-20240229-v1:0
export AWS_REGION=us-east-1
If YTEXPERT_LLM_PROVIDER is none (default), the API uses a no-op model that returns the most relevant context.
YouTube cookies
If YouTube blocks yt-dlp, provide cookies:
YTEXPERT_COOKIES_FILE=/path/to/cookies.txt, orYTEXPERT_COOKIES_SECRET_ARN=...
Legacy demo env vars (DEMO_API_YTDLP_COOKIES*) are still honored.
