Skip to main content
Glama
README.md
<div align="center">

# 🧠 Creator Brain

**Turn any YouTube creator into a living knowledge base your AI can actually use.**

Transcripts β†’ verified claims with timestamps β†’ linked topics β†’ an Obsidian vault + an MCP server
that Claude Code, Codex, Cursor and Gemini CLI can build, search and keep up to date.

![Creator Brain demo](docs/media/creator-brain-demo.gif)
<sub>Two brains growing in one vault: Jeremy Ethier (pink) and Jeff Nippard (blue), joined by shared topics (green). [MP4 version](docs/media/creator-brain-demo.mp4)</sub>

</div>

---

## Why

You learn from a few creators you trust. Their best advice is spread over hundreds of videos.
Creator Brain pulls it all into one place **with receipts**: every piece of advice links to the exact second
in the video, and code (not the AI) checks that the quote really is in the transcript.

## What you get

| | |
|---|---|
| ⚑ **Fast, never stuck** | Parallel fetch lanes (your IP, paced, + verified proxies). Captions β†’ Groq Whisper β†’ local Whisper. A durable queue resumes after any crash. |
| βœ… **Accurate** | Claims are extracted by an LLM, then **verified by code** against the transcript (numbers and "not" must match). Whisper is always told the language. |
| πŸ”— **Linked** | Video ↔ topics ↔ creators. Topics are shared across creators, so you see where experts agree or disagree. |
| πŸ”„ **Self-updating** | A cheap new-video check once a day; update notes list new advice and ⚠️ changed advice. |
| πŸ“š **Whole channel on tap** | Default brain = newest 30 % + top 10 winners. Every other upload sits in an *All Videos* table, one call away. |
| πŸ–₯️ **See it** | Obsidian graph view, and a live animated graph in your browser. |
| πŸ€– **Any agent** | MCP server + CLI + `AGENTS.md` in the vault + a ready-made agent skill (`skills/creator-brain/SKILL.md`). |

<div align="center">

![A video note in Obsidian](docs/images/obsidian-video-note.png)
<sub>A video note: properties link the creator and topics; below come Key points (claim Β· timestamp Β· topic) and the transcript.</sub>

</div>

<div align="center">

![Live brain graph](docs/images/live-graph.png)
<sub>`brain graph`: the live view in your browser. New notes pop in as they arrive; Replay animates how the brain grew.</sub>

</div>

## Quick start

```bash
git clone https://github.com/LikithMeruvu/creator-brain && cd creator-brain
uv venv && uv pip install -e .          # Python 3.11+
brain setup                              # optional: Groq key, proxy list, free proxies, local Whisper
brain add @JeremyEthier                  # newest 30% + top 10 winners  (add --full for every video)
brain status                             # progress per creator
brain search "how many sets per week for muscle growth"
brain graph                              # live animated graph in your browser
```

Open the vault folder (`~/CreatorBrain`, or set `CBRAIN_VAULT`) in Obsidian to browse it.

## Connect your AI (MCP)

| Harness | Setup |
|---|---|
| **Claude Code** | `claude mcp add creator-brain --scope user -- brain-mcp` |
| **Codex CLI** | `~/.codex/config.toml` β†’ `[mcp_servers.creator-brain]` `command = "brain-mcp"` |
| **Cursor / Windsurf** | MCP settings β†’ new server `creator-brain`, command `brain-mcp` |
| **Gemini CLI** | `settings.json` β†’ `"mcpServers": {"creator-brain": {"command": "brain-mcp"}}` |

Give the agent the playbook too: copy `skills/creator-brain/` into your skills folder
(Claude Code: `~/.claude/skills/creator-brain/`). It tells the agent how to plan, search, cite and maintain.

### MCP tools

| Tool | What it does |
|---|---|
| `add_creator(handle, full=False)` | Build a brain; returns in seconds, work continues in the background |
| `search_brain(query, creators, limit)` | Verified claims + transcript passages, each with a timestamp URL |
| `get_topic(name)` Β· `compare_creators(topic, creators)` | Everything on one subject; agreement / disagreement |
| `add_videos(creator, match, video_ids, top, dry_run)` | Pull more videos from the *All Videos* catalog |
| `update_creators(creator)` | Check for new uploads (also runs daily by itself) |
| `my_profile(updates)` | The user's goals, level, injuries, equipment β€” for personal answers |
| `save_output(title, markdown, sources)` | Save plans/answers into the vault (they join the graph) |
| `suggest_creators(topic)` | Find strong channels for a topic |
| `brain_status` Β· `brain_doctor(fix)` Β· `brain_graph` | Progress, health checks/repairs, live graph URL |
| `next_video_to_analyse` Β· `submit_claims(video_id, claims)` | **Your agent reads the transcript and writes the claims**; code verifies every quote (no API key needed) |
| `list_topics` Β· `merge_topics(groups)` Β· `rebuild_brain` Β· `pause_brain` / `resume_brain` | Your agent names, merges and restructures topics and notes |

## Example: a cited answer

> **You:** I'm a beginner, 4 days a week, want to lose fat and keep muscle. What should I do?
>
> **Your agent (searching the Jeremy Ethier + Jeff Nippard brains):**
> - Keep total volume moderate β€” even a high-volume 6-day plan in Jeremy's test was only
>   *"around 20 sets per muscle per week"*
>   ([Why Almost Everyone Is Wasting Their Time In The Gym β€” 1:12](https://www.youtube.com/watch?v=wI2WVevL_lk&t=72s)).
> - Eat in a small deficit with high protein: *"eating in a slight deficit of 2,300 calories per day"* with at least
>   120 g protein in his 100-day case study
>   ([Giving A Stranger Fake Steroids For 100 Days β€” 7:15](https://www.youtube.com/watch?v=L3pDtUk7ZmY&t=435s)).
> - Add a chewy, solid food to meals β€” it *"slows down your eating and that helps you just like get more full"*
>   ([I Proved My 6-Pack Abs Diet Works For ANYONE β€” 4:02](https://www.youtube.com/watch?v=HkrWExj1QNk&t=242s)).
>
> *Saved to `outputs/My Fitness Plan.md` Β· based on 278 Jeremy + 147 Jeff videos.*

Every quote above was checked by code against the transcript before it entered the brain.

## Use cases

- **Personal coach** β€” *"Make me a 4-day hypertrophy plan from Jeremy Ethier. I have a bad shoulder."*
  The agent reads your profile, searches volume, frequency, exercise picks and shoulder-safe swaps, cites every
  choice, and saves the plan to `outputs/`.
- **Expert panel** β€” add Jeff Nippard and a nutrition channel; *"Where do they disagree on protein?"*
  Shared topic notes put each creator's view side by side.
- **Study a field** β€” `brain add @SomeLecturer --full`, then ask questions with second-level citations.
- **Content research** β€” the *All Videos* table shows every upload with views; add the winners and ask what
  hooks, formats and claims they share.

## How it works

```mermaid
flowchart LR
  A[brain add @creator] --> B[List uploads<br/>yt-dlp, ~10 s / 300 videos]
  B --> C[Pick: newest 30% + top 10<br/>others β†’ All Videos table]
  C --> D[Fetch lanes in parallel<br/>captions β†’ Groq Whisper β†’ local Whisper]
  D --> E[Video notes + search index]
  E --> F[Claims extracted by LLM<br/>quotes verified by code]
  F --> G[Topic notes, related topics,<br/>changed-advice alerts]
  G --> H[Obsidian vault Β· MCP Β· CLI]
```

| Part | Detail |
|---|---|
| Transcripts | Lane 0 = your IP, paced (~240 videos/h, under YouTube's ~300/h guest limit). More lanes through proxies (your own list, or verified free ones). Sponsor segments cut via SponsorBlock. |
| Queue | One SQLite job per video; leases, retries with back-off, parked with a reason after 3 failures. |
| Extraction | **Your own agent** (via `next_video_to_analyse` β†’ `submit_claims`), plus optional Groq in the background: models rotated, each with its own free quota; follows Groq's rate-limit headers; daily caps defer jobs instead of failing them. No Groq key? Your own agent extracts from `.brain/pending_extraction/`. |
| Accuracy | Exact-quote check with one tolerance (a single mis-heard word) β€” never for numbers or negations. Wrong-language transcripts are redone. |
| Many agents | One writer lock per vault; any number of readers. |

## The vault

```
CreatorBrain/
β”œβ”€β”€ AGENTS.md          rules every agent reads
β”œβ”€β”€ Home.md            dashboard: creators, % built, top topics
β”œβ”€β”€ Me.md              your profile (goal, level, injuries, equipment…)
β”œβ”€β”€ creators/
β”‚   └── Jeremy Ethier/
β”‚       β”œβ”€β”€ Jeremy Ethier.md                 brain label, stats, top topics & videos
β”‚       β”œβ”€β”€ Jeremy Ethier - All Videos.md    every upload: βœ… in brain Β· ⏳ queued Β· βž• not added
β”‚       β”œβ”€β”€ videos/<Title>.md                properties Β· Key points Β· Transcript
β”‚       └── updates/Jeremy Ethier - Update 2026-10-29.md
β”œβ”€β”€ topics/<Topic>.md  per-creator claims (newest first), agree/disagree, related topics
β”œβ”€β”€ outputs/           plans and answers you saved
└── .brain/            engine room: queue, search index, claims.jsonl, transcripts
```

Brain names look like `jeremy-ethier Β· recent Β· updated 2026-10-29 Β· 278 videos`.

## Commands

| Command | |
|---|---|
| `brain add <handle> [--full] [--shorts]` | create a brain |
| `brain more <creator> --match "words" \| --top N \| --ids a,b [--dry-run]` | add catalog videos |
| `brain update [creator]` | check for new uploads |
| `brain status` Β· `brain search <q>` Β· `brain topic <name>` Β· `brain compare <topic> --creator A --creator B` | read |
| `brain graph` | live animated graph (`?still` in the URL for screenshots) |
| `brain doctor [--fix]` Β· `brain retry` Β· `brain pause` / `resume` | health |
| `brain rebuild` Β· `brain merge-topics [--dry-run]` Β· `brain dates` | maintenance (pause first) |
| `brain setup` Β· `brain mcp` Β· `brain worker` | setup / run |

## Settings

`brain setup` writes `.brain/config.json`; every key can be overridden with `CBRAIN_<KEY>`.
API keys live in `~/.cbrain/secrets.json` or `GROQ_API_KEY`, never in the vault.

| Key | Default | Meaning |
|---|---|---|
| `recent_fraction` / `top_winners` | 0.30 / 10 | default brain scope |
| `lanes` | 12 | parallel fetch lanes (lane 0 = your IP) |
| `own_ip_interval_seconds` | 15 | pacing for your own IP |
| `use_free_proxies` / `proxy_file` | true / "" | proxy sources (yours are always tried first) |
| `extract_model` / `extract_fallback_models` | gpt-oss-120b / gpt-oss-20b, qwen3.8-27b | Groq models rotated for extraction |
| `asr_model` / `default_language` | whisper-large-v3-turbo / en | audio fallback; language told to Whisper |
| `whisper_upgrade_top` | 10 | top videos re-transcribed with Whisper for accuracy |
| `local_whisper` | false | use faster-whisper when Groq is missing |
| `sponsorblock` | true | cut sponsor segments |
| `daily_check_hours` | 24 | automatic new-video check |
| `cost_confirm_usd` | 1.0 | ask before a big paid extraction |

## Honest limits

- Free proxies are unreliable (~1 % of public lists fetch captions); a paid proxy list makes big channels fast.
- Groq's free tier caps tokens per minute and requests per day; big channels finish over hours, in the background.
- The quote check proves the words exist in the transcript β€” not that the advice is right.
- Transcripts stay on your machine. Don't redistribute creators' content.

## Responsible use

- Creator Brain fetches **public captions** for your **personal** knowledge base. Transcripts, notes and claims stay
  on your machine β€” do not republish creators' content or share vaults built from it.
- Respect YouTube's Terms of Service and your local law. Keep the default pacing; proxies are optional and your
  responsibility.
- Always credit and link the creator (every claim links back to the exact second of their video).
- Advice in a brain is what a creator said, not medical, financial or legal advice.

## Develop

```bash
uv pip install -e ".[dev]" && .venv/Scripts/python -m pytest -q     # 357 tests, no network
```

Architecture and module contracts: [SPEC.md](SPEC.md). MIT licence.

TDQS

A3.9/5.0

Scored across 19 tools

Disambiguation4/5

Most tools occupy clearly distinct pipeline stages (add, analyse, submit, search, maintain), and descriptions disambiguate well. The weakest boundaries are add_videos vs. update_creators (both queue downloads) and search_brain vs. get_topic vs. compare_creators, which an agent could occasionally pick wrong.

Naming Consistency4/5

Everything is snake_case and mostly verb_noun (add_creator, search_brain, merge_topics, save_output). A handful of noun-prefixed forms (brain_status, brain_doctor, brain_graph, my_profile) and the awkward next_video_to_analyse deviate from the dominant pattern but remain readable.

Tool Count4/5

19 tools is on the heavy side, but each maps to a real stage: ingestion, analysis, topic curation, maintenance, discovery, and output. A few (pause_brain/resume_brain, rebuild_brain) could be folded together, keeping it just short of ideal.

Completeness5/5

Covers the full lifecycle: add creators/videos, background ingest, claim submission, topic listing/merging, rebuild, status, search, topic lookup, cross-creator comparison, profile, output saving, discovery, and repair. No obvious dead ends beyond optional destructive operations like removing a creator or correcting a bad claim.

Maintenance

ActivityMaintained
ResponsivenessNo issues