# joeseesun/qiaomu-anything-to-notebooklm architecture

> Architecture diagram of the GitHub repository joeseesun/qiaomu-anything-to-notebooklm, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-10-01). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/joeseesun/qiaomu-anything-to-notebooklm
- Repository: https://github.com/joeseesun/qiaomu-anything-to-notebooklm

## Overview

Anything → NotebookLM is a Claude Code skill that accepts varied content, retrieves or converts it, uploads it to NotebookLM, and produces requested study or media outputs. The CLI also supports progressive deep analysis and Feishu document creation; a separate Feishu MCP reads documents and converts them to Markdown with images. The README documents the broad input/output capabilities, while sampled code confirms key CLI, transcription, and Feishu internals; unsampled branches are shown only where documented.

Main entry points: [`main.py`](https://github.com/joeseesun/qiaomu-anything-to-notebooklm/blob/main/main.py) (Input processor), [`feishu-read-mcp/src/scraper.py`](https://github.com/joeseesun/qiaomu-anything-to-notebooklm/blob/main/feishu-read-mcp/src/scraper.py) (Document scraper), [`feishu-read-mcp/src/server.py`](https://github.com/joeseesun/qiaomu-anything-to-notebooklm/blob/main/feishu-read-mcp/src/server.py) (Feishu MCP tools), [`SKILL.md`](https://github.com/joeseesun/qiaomu-anything-to-notebooklm/blob/main/SKILL.md) (Claude skill)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workflow["Content workflow"]
  node_skill["Claude skill<br/>[SKILL.md]"]
  node_cli["Input processor<br/>[main.py]"]
  node_detect["Input detection<br/>[main.py]"]
end

subgraph group_sources["Source acquisition"]
  node_fileconvert["File conversion<br/>[main.py]"]
  node_urlfetch["URL retrieval<br/>[fetch_url.sh]"]
  node_paywall["Paywall fallback<br/>[fetch_url.sh]"]
  node_transcript["Audio transcription"]
end

subgraph group_feishu["Feishu integration"]
  node_feishuserver["Feishu MCP tools<br/>[server.py]"]
  node_scraper["Document scraper<br/>[scraper.py]"]
  node_parser["Markdown parser<br/>[parser.py]"]
  node_images["Image handler<br/>[image_handler.py]"]
  node_feishudoc["Feishu document"]
end

subgraph group_outputs["NotebookLM outputs"]
  node_notebook["NotebookLM"]
  node_analysis["Progressive analysis<br/>[main.py]"]
  node_artifacts["Generated artifacts"]
end

node_user(("User"))
node_feishuuser(("MCP client"))

node_user -->|"requests processing"| node_skill
node_skill -.->|"invokes CLI"| node_cli
node_cli -->|"classifies input"| node_detect
node_cli -->|"converts files"| node_fileconvert
node_cli -->|"runs retrieval"| node_urlfetch
node_urlfetch -->|"tries fallbacks"| node_paywall
node_cli -->|"runs transcription"| node_transcript
node_cli -->|"uploads sources"| node_notebook
node_cli -->|"runs analysis"| node_analysis
node_analysis -->|"asks questions"| node_notebook
node_notebook -->|"generates formats"| node_artifacts
node_user -.->|"requests document"| node_feishuserver
node_feishuuser -->|"calls tools"| node_feishuserver
node_feishuserver -->|"fetches document"| node_scraper
node_scraper -->|"parses HTML"| node_parser
node_scraper -->|"downloads images"| node_images
node_scraper -->|"reads document"| node_feishudoc
node_parser -.->|"returns Markdown"| node_feishuserver
node_cli -->|"creates document"| node_feishudoc

click node_skill "https://github.com/joeseesun/qiaomu-anything-to-notebooklm/blob/main/SKILL.md"
click node_cli "https://github.com/joeseesun/qiaomu-anything-to-notebooklm/blob/main/main.py"
click node_detect "https://github.com/joeseesun/qiaomu-anything-to-notebooklm/blob/main/main.py"
click node_fileconvert "https://github.com/joeseesun/qiaomu-anything-to-notebooklm/blob/main/main.py"
click node_urlfetch "https://github.com/joeseesun/qiaomu-anything-to-notebooklm/blob/main/scripts/fetch_url.sh"
click node_paywall "https://github.com/joeseesun/qiaomu-anything-to-notebooklm/blob/main/scripts/fetch_url.sh"
click node_transcript "https://github.com/joeseesun/qiaomu-anything-to-notebooklm/blob/main/scripts/get_podcast_transcript.py"
click node_analysis "https://github.com/joeseesun/qiaomu-anything-to-notebooklm/blob/main/main.py"
click node_feishuserver "https://github.com/joeseesun/qiaomu-anything-to-notebooklm/blob/main/feishu-read-mcp/src/server.py"
click node_scraper "https://github.com/joeseesun/qiaomu-anything-to-notebooklm/blob/main/feishu-read-mcp/src/scraper.py"
click node_parser "https://github.com/joeseesun/qiaomu-anything-to-notebooklm/blob/main/feishu-read-mcp/src/parser.py"
click node_images "https://github.com/joeseesun/qiaomu-anything-to-notebooklm/blob/main/feishu-read-mcp/src/image_handler.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_skill,node_cli,node_detect,node_user,node_feishuuser toneBlue
class node_fileconvert,node_urlfetch,node_paywall,node_transcript toneAmber
class node_feishuserver,node_scraper,node_parser,node_images,node_feishudoc toneMint
class node_notebook,node_analysis,node_artifacts toneRose
```

## Components

### Content workflow

- [Claude skill](https://github.com/joeseesun/qiaomu-anything-to-notebooklm/blob/main/SKILL.md): `SKILL.md`
- [Input processor](https://github.com/joeseesun/qiaomu-anything-to-notebooklm/blob/main/main.py): `main.py`
- [Input detection](https://github.com/joeseesun/qiaomu-anything-to-notebooklm/blob/main/main.py): `main.py`

### Source acquisition

- [File conversion](https://github.com/joeseesun/qiaomu-anything-to-notebooklm/blob/main/main.py): `main.py`
- [URL retrieval](https://github.com/joeseesun/qiaomu-anything-to-notebooklm/blob/main/scripts/fetch_url.sh): `scripts/fetch_url.sh`
- [Paywall fallback](https://github.com/joeseesun/qiaomu-anything-to-notebooklm/blob/main/scripts/fetch_url.sh): `scripts/fetch_url.sh`
- [Audio transcription](https://github.com/joeseesun/qiaomu-anything-to-notebooklm/blob/main/scripts/get_podcast_transcript.py): `scripts/get_podcast_transcript.py`

### Feishu integration

- [Feishu MCP tools](https://github.com/joeseesun/qiaomu-anything-to-notebooklm/blob/main/feishu-read-mcp/src/server.py): `feishu-read-mcp/src/server.py`
- [Document scraper](https://github.com/joeseesun/qiaomu-anything-to-notebooklm/blob/main/feishu-read-mcp/src/scraper.py): `feishu-read-mcp/src/scraper.py`
- [Markdown parser](https://github.com/joeseesun/qiaomu-anything-to-notebooklm/blob/main/feishu-read-mcp/src/parser.py): `feishu-read-mcp/src/parser.py`
- [Image handler](https://github.com/joeseesun/qiaomu-anything-to-notebooklm/blob/main/feishu-read-mcp/src/image_handler.py): `feishu-read-mcp/src/image_handler.py`
- **Feishu document**

### NotebookLM outputs

- **NotebookLM**
- [Progressive analysis](https://github.com/joeseesun/qiaomu-anything-to-notebooklm/blob/main/main.py): `main.py`
- **Generated artifacts**

### Other components

- **User**
- **MCP client**

## Connections

- User → Claude skill: requests processing (evidence: `README.md`)
- Claude skill → Input processor: invokes CLI
- Input processor → Input detection: classifies input (evidence: `main.py`)
- Input processor → File conversion: converts files (evidence: `README.md`)
- Input processor → URL retrieval: runs retrieval (evidence: `main.py`)
- URL retrieval → Paywall fallback: tries fallbacks (evidence: `README.md`)
- Input processor → Audio transcription: runs transcription (evidence: `main.py`)
- Input processor → NotebookLM: uploads sources (evidence: `main.py`)
- Input processor → Progressive analysis: runs analysis (evidence: `main.py`)
- Progressive analysis → NotebookLM: asks questions (evidence: `main.py`)
- NotebookLM → Generated artifacts: generates formats (evidence: `README.md`)
- User → Feishu MCP tools: requests document (evidence: `README.md`)
- MCP client → Feishu MCP tools: calls tools (evidence: `feishu-read-mcp/src/server.py`)
- Feishu MCP tools → Document scraper: fetches document (evidence: `feishu-read-mcp/src/server.py`)
- Document scraper → Markdown parser: parses HTML (evidence: `feishu-read-mcp/src/scraper.py`)
- Document scraper → Image handler: downloads images (evidence: `feishu-read-mcp/src/scraper.py`)
- Document scraper → Feishu document: reads document (evidence: `feishu-read-mcp/src/scraper.py`)
- Markdown parser → Feishu MCP tools: returns Markdown
- Input processor → Feishu document: creates document (evidence: `main.py`)
