Tangentry
沿着好奇心继续发现 —— 本地优先的多平台内容聚合、阅读与笔记工具
把 B站、YouTube、小红书、抖音、小宇宙播客、RSS 与网页文章收进同一个阅读器里: 看视频时读字幕、截帧做笔记、一键转录与翻译,所有数据都留在你自己的电脑上。
Note
Tangentry 是个人项目,目前处于 0.x 早期阶段,接口和数据结构仍可能变化(数据库会自动迁移)。欢迎试用并反馈问题。
tangentry-promo-long-github.mp4
📖 目录
💡 为什么做 Tangentry
内容散落在不同平台:B站的课程、YouTube 的讲座、小宇宙的播客、RSS 里的长文、小红书的图文笔记…… 每个平台都有自己的推荐算法、自己的收藏夹,却没有一个地方能让你 专注地读、认真地记、长期地留存。
Tangentry 的思路是:
- 一个入口:订阅、推荐、搜索、收藏统一到同一个界面;
- 阅读优先:视频和播客也可以“读” —— 字幕跟随、全文搜索、双语对照、AI 摘要;
- 笔记即资产:笔记锚定到时间点 / 原文段落 / PDF 位置 / 截帧,可导出为 Markdown(兼容 Obsidian);
- 本地优先:SQLite 存储在本机,不需要注册任何 Tangentry 账号,凭据从不进入源码或浏览器。
Why Tangentry?
Tangentry = Tangent + Entry
- Tangent — 思维的发散、知识的延伸,以及探索过程中意想不到的发现。
- Entry — 进入知识世界的入口,也代表每一份值得记录和探索的内容。
Tangentry 是一个创造词,寓意着:每一份内容都是探索的起点,每一次好奇都可能通向新的知识。
无论是视频、播客、文章还是 PDF,我们希望打破内容形式的边界,让阅读成为一场自由延伸的知识探索。
Every curiosity leads somewhere. 每一份好奇,都通向新的发现。
📸 截图
发现:B站、YouTube、小红书、小宇宙的推荐汇聚在一个首页![]() |
播客文稿:小宇宙单集自动生成可阅读、可跳转的文字稿![]() |
YouTube:内嵌播放、字幕同步,翻译与摘要一键可用![]() |
小红书:图文与视频笔记在同一个阅读器里查看、收藏和下载![]() |
笔记库:跨来源检索、按标签和时间筛选,一键导出 Markdown![]() |
设置:账号、AI、转录、下载与外观集中管理![]() |
截图中的内容来自各平台公开推荐,版权归原作者所有,仅用于展示软件功能。
✨ 功能
| 模块 | 能力 |
|---|---|
| 🔭 发现 | 聚合 B站 / YouTube / 小红书 / 抖音 / 小宇宙的推荐流,可调整来源偏好;“稍后看”推荐队列 |
| 📡 订阅 | B站 UP 主、YouTube 频道、RSS / Atom / JSON Feed、小宇宙播客、linux.do 话题;分组、收件箱、已读状态、定时刷新、OPML 导入/导出 |
| ➕ 添加内容 | 粘贴链接或 ID 解析视频、UP 主、频道、播客单集、网页文章、本地 PDF |
| 📺 阅读与播放 | 内嵌播放器 + 字幕阅读器(跟随高亮、搜索、上下文跳转)、播放进度记忆、网页正文提取(Readability)、PDF 阅读 |
| 📝 笔记 | 时间戳笔记、原文划线笔记、PDF 锚点、截帧附图、字幕引用、嵌套标签、置顶、全文搜索;导出 Markdown ZIP(含 Obsidian frontmatter) |
| 🎙️ 转录 | 本机:whisper.cpp / faster-whisper / Qwen3-ASR;云端:Groq、SiliconFlow、Cloudflare Workers AI 等;平台字幕优先,转录结果缓存 |
| 🤖 AI 助手 | 接入任意 OpenAI 兼容 接口:视频/文章摘要、字幕与正文翻译(双语导出) |
| ⬇️ 下载 | 基于 yt-dlp + FFmpeg 的音视频下载、队列与超时控制 |
| ⭐ 收藏同步 | 同步 B站收藏夹到本地,支持过滤与断点续传 |
| 🕘 历史 | 浏览历史与搜索历史,全部存于本地数据库 |
| 🖥️ 多端运行 | 原生桌面应用(macOS / Windows / Linux)或 Docker 自托管(NAS、家庭服务器),浏览器访问 |
🚀 快速开始
方式一:桌面应用(推荐普通用户)
前往 Releases 下载对应平台的安装包。发布流程只在推送 v* tag(例如 v0.0.1)时运行:它会编译桌面包、运行验证并构建 Docker 镜像。
| 平台 | 说明 |
|---|---|
| macOS(Apple Silicon) | 打开 .dmg 拖入“应用程序”。若提示“无法验证开发者”,右键 → 打开 |
| Windows(x64 / ARM64) | 下载 ZIP 并解压后运行 Tangentry.exe。未签名版本会触发 SmartScreen,点击“更多信息 → 仍要运行” |
| Linux(x64 / ARM64) | 安装 .deb,依赖 ffmpeg 与 libgomp1 会自动安装 |
桌面版自带运行时;yt-dlp、Deno 与 Whisper 模型会在首次使用时自动下载并校验,无需手动安装。
方式二:Docker 自托管
docker run -d --name tangentry -p 7380:7380 -v tangentry-data:/data \ docker.io/<你的 Docker Hub 用户名>/tangentry:latest
或使用仓库内的 docker-compose.yml:
docker compose up -d
GitHub Actions 发布镜像前,请在仓库的 Settings → Secrets and variables → Actions 中配置:
DOCKERHUB_USERNAME:Docker Hub 用户名;DOCKERHUB_TOKEN:Docker Hub Access Token(不要使用登录密码)。
请先在 Docker Hub 该用户名下创建名为 tangentry 的仓库。本地使用 Compose 前,将 .env.example 复制为 .env 并设置 Docker Hub 用户名。推送 v0.0.1 这类版本 tag 后,工作流会自动发布 latest、完整版本号和主次版本号镜像。
首次启动会生成登录密码并写入日志和 /data/admin-password:
docker compose logs tangentry | grep password浏览器打开 http://localhost:7380,输入密码即可使用。也可以通过环境变量 TANGENTRY_PASSWORD 指定自己的密码。
Warning
服务端模式只有一个共享密码。暴露到公网前务必在前面加 HTTPS 反向代理(Caddy / Nginx / Traefik)。
方式三:从源码运行
需要 Go 1.27+、Node.js 24+,以及(可选)yt-dlp、ffmpeg。
git clone https://github.com/mu-zi-lee/Tangentry.git cd Tangentry make server # 构建前端 + 服务端二进制 ./build/tangentry-server -data ./data -addr 127.0.0.1:7380
🧭 使用指南
第一次使用建议按 设置 → 添加内容 → 阅读 → 笔记 的顺序走一遍。
1. 初始设置(左侧导航「设置」)
- 账号:在「设置 → 账号」扫码登录 B站,可获得关注动态、收藏夹同步和更高清晰度。Cookie 只保存在本机数据目录。
- 工具:查看 yt-dlp / FFmpeg 状态。桌面版会自动准备,Docker 镜像已内置。
- 转录:选择本机模型(首次会下载)或填入云端转录服务的 API Key。
- AI:填写 OpenAI 兼容接口的
Base URL、Model和API Key(如 OpenAI、DeepSeek、硅基流动、本地 Ollama 等),点击检测连通性。 - 外观:主题、卡片每页条数、字幕样式等偏好。
2. 获取内容
- 发现:首页聚合各平台推荐,点击卡片进入阅读;点击“稍后看”加入推荐队列。
- 添加内容:粘贴以下任意一种即可:
- B站视频链接 /
BV号,UP 主主页链接 / UID - YouTube 视频或频道链接
- 小红书笔记、抖音分享链接
- 小宇宙单集 / 播客链接
- 任意网页文章 URL 或 RSS 地址
- B站视频链接 /
- 订阅:添加 UP 主、频道、RSS 或播客后,新内容进入「订阅收件箱」。可创建分组、标记已读,或通过 OPML 从其他阅读器迁移。
3. 阅读与播放
- 视频左侧播放、右侧显示 字幕阅读器:当前句高亮跟随,点击任一句跳转;支持字幕内搜索。
- 没有字幕?点击 转录 生成字幕;点击 翻译 生成双语字幕;点击 摘要 让 AI 总结要点。
- 文章与 PDF 同样支持划线、翻译和摘要。
- 播放进度自动记忆,下次打开从上次位置继续。
Tip
B站内嵌播放器无法直接读取播放时间。安装用户脚本 bilibili-sync.user.js(Tampermonkey / Violentmonkey)后,字幕跟随与时间戳笔记可与官方播放器精确同步。
4. 记笔记
- 播放中按下「记笔记」会自动附上当前 时间戳;也可以 截取当前画面 作为配图。
- 在字幕、文章或 PDF 中选中文本即可创建 引用笔记,点击笔记可跳回原位置。
- 使用
#标签/子标签组织笔记,在「笔记」页按标签、来源或全文搜索,重要笔记可置顶。 - 「导出」生成 Markdown ZIP,每条内容一个文件,带 JSON frontmatter,可直接放入 Obsidian 仓库。
5. 下载与收藏
- 在阅读页点击「下载」加入下载队列(视频或仅音频),在「下载」页查看进度。
- 「收藏」页管理本地收藏;登录 B站后可开启收藏夹自动同步。
⚙️ 配置
服务端通过 环境变量 配置(不会自动读取 .env 文件)。参考 .env.example:
cp .env.example .env # 编辑后加载 set -a; source .env; set +a
| 变量 | 默认值 | 说明 |
|---|---|---|
TANGENTRY_ADDR |
:7380 |
服务端监听地址 |
TANGENTRY_DATA |
/data |
数据目录(SQLite、设置、凭据、缓存) |
TANGENTRY_PASSWORD |
自动生成 | 服务端登录密码,未设置时写入 <data>/admin-password |
TANGENTRY_DOWNLOAD_DIR |
<data>/downloads |
下载目录 |
TANGENTRY_DOWNLOAD_TIMEOUT |
2h |
单个下载超时(1s–24h) |
TANGENTRY_YTDLP_PATH |
PATH 中的 yt-dlp |
自定义 yt-dlp 路径 |
TANGENTRY_FFMPEG_PATH |
PATH 中的 ffmpeg |
自定义 FFmpeg 路径 |
TANGENTRY_TOOLS_DIR |
空 | 设置后像桌面版一样在首次使用时下载并校验 yt-dlp / Deno |
TANGENTRY_BILIBILI_COOKIE_FILE |
空 | Netscape 格式的 B站 Cookie 文件(推荐改用应用内扫码登录) |
TANGENTRY_WHISPER_PATH / TANGENTRY_WHISPER_MODEL |
空 | whisper.cpp 可执行文件与模型 |
TANGENTRY_FASTER_WHISPER_PYTHON |
空 | 安装了 faster-whisper 的 Python 解释器 |
TANGENTRY_WHISPER_MODELS_DIR |
空 | 模型目录 |
应用内「设置」中保存的选项优先于环境变量默认值。
本机 faster-whisper 环境(可选)
python3 -m venv ~/.venvs/faster-whisper ~/.venvs/faster-whisper/bin/pip install -r src/tools/transcription/requirements.txt export TANGENTRY_FASTER_WHISPER_PYTHON=~/.venvs/faster-whisper/bin/python
数据目录位置
| 运行方式 | 位置 |
|---|---|
| macOS 桌面 | ~/Library/Application Support/Tangentry |
| Windows 桌面 | %APPDATA%\Tangentry |
| Linux 桌面 | ~/.config/Tangentry |
| Docker | 卷 /data |
备份这个目录即可完整迁移你的库、笔记与设置。
🛠 开发
环境要求
- Go 1.27+(使用纯 Go 的
modernc.org/sqlite,无需 CGO) - Node.js 24+ 与 npm
- 可选:
yt-dlp、ffmpeg(下载与截帧)、Python 3(本机转录)
常用命令
| 命令 | 作用 |
|---|---|
make desktop |
构建前端并以开发模式启动桌面应用(MyGo) |
make server |
构建 build/tangentry-server 无界面服务端 |
make build |
打包当前平台桌面应用;PLATFORMS=windows/amd64,... 交叉打包 |
make desktop-build-all |
打包全部平台(macOS 运行时需在 Apple Silicon 上构建) |
make docker |
构建本地 Docker 镜像 |
make test |
全部测试(make test-unit + make test-e2e) |
make check-race |
go vet + 竞态检测 |
前端单独开发:
cd src/web npm ci npm run dev # Vite 开发服务器(http://127.0.0.1:5173)
测试
测试分层:单元测试覆盖细节,少量 E2E 覆盖最重要的用户流程。
make test-unit # Vitest 前端单元测试 + go test(会先构建 src/web/dist) make test-e2e # Playwright 关键流程(首次运行前:cd src/web && npx playwright install chromium)
端到端测试使用 src/web/tests/server 启动 真实服务 + 隔离的 SQLite + 显式平台夹具,不会访问任何外部平台。
🗂 项目结构
Tangentry/
├── .github/ # 仅 tag 发布时运行的 CI/CD
├── Dockerfile # Docker 多阶段构建
├── docker-compose.yml # Docker Hub 镜像运行配置
├── docs/ # 架构说明、截图与第三方许可证
└── src/ # 应用源码(Go、React、打包工具)
├── cmd/ # 桌面应用与无界面服务端入口
├── internal/ # 领域、适配器、HTTP 与运行时服务
├── web/ # React 19 + Vite 前端
└── tools/ # 桌面打包与本机转录工具
详细的分层规则与依赖方向见 docs/ARCHITECTURE.md。
🔒 隐私与安全
- 本地优先:所有内容、笔记、历史都存储在本机 SQLite 中,Tangentry 没有任何遥测或云端账号。
- 凭据隔离:平台 Cookie 与 API Key 只保存在数据目录,不会下发给浏览器端,也不会自动读取浏览器 Cookie。
- 网络边界:抓取公开网页时拒绝访问内网 / 本机地址(防 SSRF)。
- 外部服务:只有当你主动配置 AI 或云端转录时,相关文本/音频才会发送给你选择的服务商。
发现安全问题?请参阅 SECURITY.md,不要直接公开提交 Issue。
❓ 常见问题
YouTube / B站 视频无法解析或下载?
平台接口经常变化。先在「设置 → 工具」更新 yt-dlp;B站高清晰度和部分内容需要登录。
转录很慢?
本机转录速度取决于 CPU / GPU 与模型大小。可以换更小的模型,或在设置中改用云端转录(Groq 等免费额度通常足够个人使用)。
macOS 提示“已损坏,无法打开”?
未经公证的构建会被 Gatekeeper 拦截,可执行:xattr -dr com.apple.quarantine /Applications/Tangentry.app
如何迁移到另一台电脑?
关闭应用后复制整个 数据目录 到新机器对应位置即可。
🗺 路线图
- 发布签名并公证的 macOS / Windows 安装包
- 英文界面(i18n)
- 更多平台适配
- 笔记双向同步到 Obsidian / Logseq
欢迎在 Issues 提出建议。
🤝 贡献
欢迎 Issue 与 Pull Request!开始之前请阅读 CONTRIBUTING.md。
🙏 致谢
- MyGo —— Go 原生桌面应用框架
- yt-dlp 与 FFmpeg —— 媒体获取与处理
- go-readability —— 网页正文提取(MIT)
- gofeed、modernc.org/sqlite、OpenCC
- whisper.cpp、faster-whisper
- PDF.js、Lucide、Space Grotesk(OFL)
- Linux DO
Star History
⚖️ 免责声明
Tangentry 仅供个人学习与研究使用。通过本工具获取的内容版权归原平台及作者所有,请遵守各平台的服务条款,不要用于批量抓取、再分发或任何商业用途。
📄 许可证
MIT © 2026 木子不是木子狸





