Help us improve
Share bugs, ideas, or general feedback.
npx claudepluginhub enduser123/yt-isHow this skill is triggered — by the user, by Claude, or both
Slash command
/yt-is:yt-nlmThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Extract YouTube transcripts using NotebookLM's batch notebook workflow.
Creates p5.js generative art with seeded randomness, noise fields, and interactive parameter exploration. Use for algorithmic art, flow fields, or particle systems.
Share bugs, ideas, or general feedback.
Extract YouTube transcripts using NotebookLM's batch notebook workflow.
Uses batch notebooks (up to 300 YouTube sources per notebook) via _fetch_via_notebooklm_batch() in transcript.py:
nlm source content (raw text) instead of nlm notebook query (LLM)The old ephemeral notebook pattern (1 notebook per video) is deprecated.
# Ingest pending videos (default behavior)
yt-nlm
# Dry run: preview what will be ingested
yt-nlm --dry-run
# Specific channel only
yt-nlm --channel "https://youtube.com/@channel"
# Batch size for combined sources
yt-nlm --batch-size 20
Batch Notebook Workflow (up to 300 sources per notebook):
nlm login --check before commandsnlm login --force runs automatically (no user prompt)nlm notebook create "batch_transcript_{id}"nlm source add <nb-id> --url <url1> --url <url2> ... --wait in sub-batches of 50; heartbeat-poll source list --json between sub-batches to wait for NLM async processingnlm source content <source-id> — returns JSON with {"value": {"content": "..."}}nlm notebook delete <nb-id> --confirmvs. Deprecated Ephemeral Workflow (1 notebook per video):
Batch Combination:
batch_status.sqlite (pending videos marked by /yt-is)transcripts.sqlite cache via csf.cache.set_cached_transcript()P://.data/yt-is/transcripts//yt-is fetch (both write to same cache database, different sources)register_external_transcript_provider() for custom sources/yt-is sync
↓
batch_status.sqlite (pending videos)
↓
/yt-nlm (batch workflow)
↓
Batch notebook → nlm source content → transcripts.sqlite
↓
Combined markdown files → Your knowledge system
transcripts.sqlite (cache database, keyed by video_id)combined_batch_1.md, etc. in P://.data/yt-is/batch_status.sqlite (status updates: pending → complete/failed, last_stage, failure_reason, and canonical channel_id identity for tracked channel state)| Environment Variable | Default | Description |
|---|---|---|
YTIS_NLM_MAX_SOURCES_PER_NOTEBOOK | 300 | Max YouTube sources per NotebookLM notebook |
When transcript fetch fails, last_stage and failure_reason are recorded:
| failure_reason | Meaning |
|---|---|
quota_exceeded | NotebookLM API quota exceeded |
region_block | Video not available in NotebookLM region |
auth_failed | NotebookLM auth expired and recovery failed |
captcha | Captcha challenge during extraction |
timeout | Source content extraction timed out |
no_transcript | Video has no captions/transcript |
unavailable | Video unavailable or deleted |
unknown | Unclassified error |
nlm CLI (NotebookLM command-line interface)/nlm — NotebookLM CLI operations/yt-is — Video discovery and tracking/yt-is fetch — full transcript fallback chain download/yt-dlp — Local transcript download via yt-dlpSee P://__csf/arch_decisions/ADR-20260410-notebooklm-ephemeral-notebooks.md for architecture decision and performance characteristics.
Note: The ADR describes the ephemeral pattern. The batch workflow is the current implementation.