内容
<p align="center">
<img src="app/src/app/icon.svg" width="76" height="76" alt="社交知识库" />
</p>
<h1 align="center">社交知识库</h1>
<p align="center"><em>将创作者的短视频转化为可搜索的知识库 — 可观看、聆听和查询。</em></p>
将创作者的视频(目前支持Instagram,预计支持TikTok/YouTube)转化为Markdown知识库:一个大型语言模型(LLM)**观看**(帧+OCR)和**聆听**(转录)每个视频,并记录下它所学到的内容 — 对于多个视频,以**可续传**的方式。用户界面支持双语(葡萄牙语/英语)。
> **两项引擎使其运作。** **[gallery-dl](https://github.com/mikf/gallery-dl)** (搭配`yt-dlp` + `ffmpeg`)负责**下载** — 它是一个能够从公共个人资料中拉取每个Reel、故事和精选的库,通过浏览器cookie进行身份验证。然后 **[`mcp-video-analyzer`](https://github.com/guimatheus92/mcp-video-analyzer)** MCP负责**阅读** — 转录 + 帧 + OCR + 时间线。 **两者均为必需** (构建一次 - 请参阅[设置](#设置))。cookie是一种凭证 - 请参阅[安全性和cookie](#安全性和cookie)。
> 市场检查:没有开源工具能够完成整个流程(下载整个账户,包括精选→观看+聆听→知识库)。现有的工具只能一次转录一个Reel的音频。
## 🚀 快速开始(运行应用程序)
**Docker(推荐 - 任何地方运行,无需安装):**
```bash
mkdir -p data && cp /path/to/cookies.txt data/cookies.txt # 来自临时账户的cookie
docker compose up --build # → http://localhost:3000
```
镜像中捆绑了 **Node 24 + Python + gallery-dl + yt-dlp + ffmpeg**;应用程序内部调用这些CLI。 **`./data`** 卷在主机上持久保存`downloads/`和SQLite清单;`cookies.txt`由UI自动检测。 **GPU(可选):** 在`docker-compose.yml`中取消注释`gpus: all`(需要NVIDIA容器工具包)。
**本地(需要Node 24):**
```bash
cd app && npm install && npm run dev # → http://localhost:3000
```
在应用程序中:指向您的`cookies.txt`,**添加个人资料**(或粘贴**视频链接** → 只下载该视频)并点击**播放**(实时进度)。在顶部切换PT/EN。转录/笔记(知识层)在UI之外运行 - 请参见下文。
## 它是如何工作的
1. **下载** — `scripts/download_instagram.py`(gallery-dl,通过浏览器`cookies.txt`身份验证)将视频下载到`downloads/<profile>/<tab>/`。(或通过`app/`中的应用程序。)
2. **转录(GPU)** — `scripts/transcribe_gpu.py`使用CUDA上的更快-whisper `medium`(约16-24倍实时)批量转录,并写入视频的`.vtt`/`.txt`/`.json`侧车。它会自动检测GPU,并在没有GPU时**回退到CPU**。可续传。
3. **笔记** — Claude Code(任何有能力的LLM;推荐Claude Opus)通过`prompts/build-notes.md`处理**一次一个视频**(重用通过`.vtt` + 帧/OCR的转录),并写入`notes/<profile>/videos/<video>.md`。笔记语言是可配置的(默认为**英语**) - 请参见[笔记语言](#笔记语言)。
4. **概览 + RAG** — `prompts/synthesize-overview.md`按主题生成`notes/<profile>/OVERVIEW.md`; `scripts/index_transcripts.py` + `scripts/index_notes.py` + `scripts/query.py`提供搜索(仅使用转录的库是可搜索的)。
## 设置
```bash
# 1. Python依赖项(下载 + GPU转录 + RAG)
pip install -r requirements.txt
# GPU(CUDA 12.8+,例如RTX 5060):pip install nvidia-cublas-cu12 nvidia-cudnn-cu12 nvidia-cuda-nvrtc-cu12 nvidia-cuda-runtime-cu12
# 2. ffmpeg — 下载所需(yt-dlp合并视频+音频;没有它,视频会静音)
winget install Gyan.FFmpeg
# 3. 构建视频阅读MCP(笔记阶段必需)
cd ../mcp-video-analyzer && npm run build && cd -
# 4. 从登录的IG会话导出cookies.txt(使用临时账户)
# 浏览器 -> “获取cookie.txt本地”扩展 -> 导出(Netscape格式)。在存储库外部保存。
```
> instaloader已被废弃:其Web GraphQL端点自约2025年1月起返回`401 “请稍候几分钟”`,适用于任何账户/IP。gallery-dl使用浏览器cookie(移动API路由,Instagram仍接受)。
`.mcp.json`将Claude Code指向本地MCP构建(**v0.5.0**),包含`WHISPER_MODEL`/`WHISPER_PROMPT`(词汇表),`WHISPER_BIN`和`MCP_WRITE_SIDECARS=1`。转录语言**自动检测每个视频**(仅设置固定`WHISPER_LANGUAGE`强制执行)。但是,批量转录通过`transcribe_gpu.py`在**GPU**上运行;MCP重用那些`.vtt`文件并专注于帧/OCR。
> **Windows:** `pip`将`whisper.exe`安装到Python的`Scripts/`文件夹中,通常**不**在Claude Code继承的PATH中 - 因此`.mcp.json`设置`WHISPER_BIN`为完整路径。使用`python -c "import os,sys;print(os.path.join(os.path.dirname(sys.executable),'Scripts','whisper.exe'))"`确认您的路径。 **MCP**不需要系统ffmpeg(它使用嵌入的`ffmpeg-static`); **下载**(gallery-dl/yt-dlp)需要(设置步骤2),否则视频将**没有音频**。
## 使用(CLI)
```bash
# 1)下载个人资料的所有视频(包括精选)
python scripts/download_instagram.py <profile> --cookies C:\path\ig_cookies.txt
# 2)批量转录(可续传)+索引搜索
python scripts/transcribe_gpu.py <profile>
python scripts/index_transcripts.py <profile>
# 3)生成笔记:打开Claude Code在此目录并运行prompts/build-notes.md
# (一次一个视频;使用/loop进行批处理)
# 4)主题概述(在Claude Code中):prompts/synthesize-overview.md -> notes/<profile>/OVERVIEW.md
# 5)搜索/ RAG
python scripts/index_notes.py
python scripts/query.py "我学到了关于<主题>什么?"
```
## 应用程序(UI)— `app/`
一个 **Web应用程序** (Next.js 16 + TypeScript + Tailwind 4 + shadcn/ui)在 [`app/`](app/) 中为下载提供了一个UI — CLI的视觉替代方案:
```bash
cd app && npm install && npm run dev # → http://localhost:3000
npm run test # Vitest(引擎/解析器)
```
- **单个应用程序** (无Python后端):Node调用`gallery-dl`/`yt-dlp`/`ffmpeg`通过`child_process`。作为 **Node服务器** 运行(`next dev`/`next start`,Node运行时)。
- **有效功能:** 添加多个个人资料; **通过链接下载单个视频** (自动创建所有者个人资料);选择媒体(图像/视频); **播放→实时进度(SSE)** 带有大小/时间;原生Windows文件夹选择器;自动检测cookie; **库** (缩略图网格+搜索/筛选/排序,在系统播放器中打开)带有 **全选,批量删除和“释放空间”** — 删除视频但保留笔记作为可读的 **仅笔记** 项目, **按需可重新下载** ; **每个个人资料的类别+类别筛选器** ; **通过Claude Code生成笔记** (每个视频+每个个人资料,语言选择器,实时进度); **LLM阅读配置** (Whisper模型/语言/细节/OCR→写入`.mcp.json`);磁盘管理;提示和确认敏感操作。
- **双语UI(PT/EN)** — 顶部的语言切换(轻量级i18n,无额外依赖)。
- **多网络:** 个人资料分组在其网络下; `SourceProvider`抽象(Instagram + TikTok; YouTube通过yt-dlp开发中)使知识管道与网络无关。
- **主题:** “Media Cinematic”(黑暗,玻璃,珊瑚→洋红色→紫色强调) - 请参见[DESIGN.md](DESIGN.md)。
- **清单:** 每个账户的 **SQLite** 在`manifests/<account>.db`(通过`node:sqlite`)+无版本JSON导出`manifests/<account>.json`。迁移:`cd app && npx tsx src/server/migrate/importManifest.ts`(与磁盘协调)。
## 笔记语言
LLM编写的笔记有可配置的语言。 **默认为英语**;转录本身由Whisper **自动检测每个视频** (例如,葡萄牙语音频的`pt`),因此笔记可以总结葡萄牙语演讲的英语。 在三个级别覆盖默认设置(最具体者优先):
1. **全局默认** — 分析设置面板(齿轮图标)。
2. **每个个人资料** — 个人资料卡上“生成缺少的笔记”旁边的选择器(为该个人资料的批次记住)。
3. **每个视频** — 视频对话框中(重新)生成旁边的选择器(一次性用于该笔记)。
## 成功标准
1. 账户中的每个视频(包括精选)都有一个`.md`笔记。
2. 每个笔记都捕捉了所**说的内容** (转录) **和所显示的内容** (OCR/视觉)。
3. 通过SQLite清单(记录下载/读取的内容和*何时*) **可续传** 。
4. 音频语言的可读转录(GPU上的更快-whisper `medium` +领域词汇表);按配置的语言编写笔记。
5. 每个个人资料的索引 **和** `notes/<profile>/OVERVIEW.md`(主题摘要)带有链接。
6. 通过RAG(`query.py`)后续查询带有笔记引用。
## 笔记模板
规范的笔记模板+质量规则位于 **[`prompts/build-notes.md`](prompts/build-notes.md)** (前置键+章节)。笔记阶段直接读取它。
## 安全性和cookie
`cookies.txt`是一个 **实时凭证** — 来自 **临时** 账户的登录会话(精选/故事需要登录)。请私密保存(通过`*cookies*.txt` gitignore),永远不要提交它,并在它过期时重新导出(下载开始重定向到登录页面)。应用程序 **服务器端** 读取它, **从不将cookie值发送到浏览器** 。gallery-dl已经间隔请求(~10s)以避免速率限制/封禁。
有关完整的威胁模型、强化和 **负责任的使用** — 您使用自己的会话下载公开可见的内容,因此请尊重每个平台的服务条款和版权 — 请参见 **[SECURITY.md](SECURITY.md)** 。
## 贡献和许可证
- **贡献:** 请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) (设置、检查、约定)和 [Code of Conduct](CODE_OF_CONDUCT.md) 。
- **安全:** 私下报告 — 请参阅 [SECURITY.md](SECURITY.md) 。
- **许可证:** [MIT](LICENSE) — 仅涵盖此存储库的代码。 它驱动的工具(gallery-dl,yt-dlp,ffmpeg,MCP,faster-whisper,…)保留其自身的许可证;下载的媒体属于其创作者 — 在下载或重新分发之前,请参阅 [SECURITY.md](SECURITY.md) (“负责任的使用”)。