内容
# YTGlean
从 YouTube 频道抓取视频文字记录,存储在 SQLite 中,通过 LLM 进行总结,并通过 MCP 服务器提供数据访问。
## 功能
- 跟踪 YouTube 频道并自动获取新的视频文字记录
- 双重文字记录提供商:InnerTube API(快速,纯 Go)并支持 yt-dlp 作为备用
- 自动从用户名/URL 解析频道 ID 和名称
- 语言备用:尝试所有配置的文字记录语言,如果失败则尝试下一个
- 遇到暂时性失败时,支持指数级退避重试
- 支持速率限制保护,配置获取延迟
- 通过任何 OpenAI 兼容的 API(OpenAI、Ollama、LM Studio 等)总结文字记录
- 跨存储的文字记录进行全文搜索
- 为 AI 代理集成提供 MCP 服务器(Claude Desktop、Cursor 等)
- 可配置的数据保留和修剪
## 先决条件
- **yt-dlp**(可选,用于文字记录备用):`pip install yt-dlp`
- **LLM API**(用于总结):OpenAI API 密钥,或本地 Ollama/LM Studio 实例
## 安装
### Arch Linux(AUR)
```bash
# 使用 yay
yay -S ytglean-bin
# 使用 paru
paru -S ytglean-bin
```
### Go
```bash
go install github.com/CrymfoxLabs/YTGlean@latest
```
### 从源代码构建
```bash
git clone https://github.com/CrymfoxLabs/YTGlean.git
cd YTGlean
go build -o ytglean .
```
## 快速开始
首次运行时,YTGlean 会在 `~/.config/ytglean/config.yaml` 处自动生成配置文件。
编辑它以设置您的 API 密钥和首选设置。
```bash
# 1. 添加一个频道(名称会自动从 YouTube 提取)
./ytglean channel add @Fireship
# 2. 获取文字记录
./ytglean fetch
# 3. 总结
./ytglean summarize
# 4. 通过 MCP 服务器搜索文字记录
./ytglean serve
```
## 配置
首次运行时,YTGlean 会在 `~/.config/ytglean/config.yaml` 处创建配置文件,并使用合理的默认值。
编辑此文件以自定义设置。
配置文件加载顺序(优先级)如下:
1. `--config` 标志
2. `~/.config/ytglean/config.yaml`
3. `./config.yaml`
### 配置文件示例
```yaml
database:
path: ~/.local/share/ytglean/ytglean.db
retention_days: 30
transcript:
provider: auto # auto | innertube | ytdlp
languages: [zh] # 按顺序尝试,优先选择第一个可用的
max_concurrent: 3
fetch_delay: 2s # 请求之间延迟,避免速率限制
summarizer:
endpoint: https://api.openai.com/v1
api_key: your-api-key-here
model: gpt-4o-mini
max_tokens: 2048
mcp:
transport: stdio # stdio | http
port: 8080
```
## 用法
### 频道管理
```bash
ytglean channel add <url-or-id> # 名称自动从 YouTube 提取
ytglean channel add @Fireship --name "Fire" # 覆盖显示名称
ytglean channel remove <url-or-id-or-name> # 通过 URL、ID 或名称删除
ytglean channel list [--json]
```
频道输入支持:
- 用户名:`@Fireship`
- 完整 URL:`https://www.youtube.com/@Fireship`
- 频道 ID:`UCsBjURrPoezykLs9EqgamOA`
- 名称(用于删除):`Fireship`
### 获取文字记录
```bash
ytglean fetch # 所有频道,过去 24 小时
ytglean fetch --channel <id> # 指定频道
ytglean fetch --since 7d # 过去 7 天
ytglean fetch --all # 频道中的所有视频
ytglean fetch --dry-run # 预览而不获取
```
### 总结
```bash
ytglean summarize # 总结过去 24 小时的文字记录
ytglean summarize --since 7d # 过去 7 天
ytglean summarize --channel <id> # 筛选到特定频道
ytglean summarize --video <id> # 总结特定视频
ytglean summarize --re-summarize # 强制重新总结,即使视频未更改
ytglean summarize --prompt "自定义..." # 自定义系统提示
```
如果已经总结了相同的视频集,则会自动跳过(比较 `--re-summarize` 以强制执行)。
### 摘要
```bash
ytglean digests list # 列出所有存储的摘要
ytglean digests list --json # 输出为 JSON
ytglean digests export <id> # 导出摘要到 markdown(digest-<id>.md)
ytglean digests export <id> -o summary.md # 导出到自定义文件
```
### 清理旧数据
```bash
ytglean prune # 使用配置保留(默认 30 天)
ytglean prune --older-than 60d # 覆盖保留期
ytglean prune --dry-run # 预览将删除的内容
ytglean prune --vacuum # 清理后压缩数据库
```
### MCP 服务器
```bash
ytglean serve # stdio(默认,用于 Claude Desktop / Cursor)
ytglean serve --transport http # HTTP 传输
ytglean serve --port 8080 # 自定义端口
```
可用的 MCP 工具:
| 工具 | 描述 |
|---|---|
| `list_channels` | 列出所有跟踪的频道 |
| `search_transcripts` | 全文搜索视频标题、频道名称、单词边界的摘录 |
| `get_transcript` | 获取完整文字记录(支持语言、最大字符数、时间戳格式) |
| `get_video_info` | 视频元数据(不含完整文字记录)(标题、频道、字数) |
| `get_recent_videos` | 列出跟踪频道的近期视频 |
| `list_videos` | 浏览所有存储的视频及其文字记录状态 |
| `list_digests` | 列出存储的摘要及其元数据 |
| `get_digest` | 读取特定摘要的全文 |
| `fetch_new` | 从 YouTube 获取新的文字记录 |
| `summarize` | 通过 LLM(需要 API 密钥)或指导代理自我总结 |
### 全局标志
| 标志 | 描述 |
|---|---|
| `--db <path>` | 覆盖数据库路径 |
| `--log-level <level>` | 调试级别:debug, info, warn, error |
| `--quiet` | 禁止非错误输出 |
## 许可证
MIT