今天在 GitHub Trending 上看到一个有意思的项目:Invidious,这是一个完全开源的 YouTube 替代前端,用 Crystal 语言编写,无需登录、不植入广告、不追踪任何用户行为,可以直接在你选择的任意公开实例上使用。
一、项目概述
Invidious 的核心目标很简单:让用户在不登录 Google 账号、不被追踪的情况下,正常地观看 YouTube 视频。它不依赖 YouTube 官方 API,而是直接通过后台爬取和解析 YouTube 页面来获取数据。
核心特性包括:
- 零追踪:不记录用户 IP,不使用任何分析工具
- 无广告:纯内容展示,页面干净
- 无需 JavaScript:基础功能完全可以在禁用 JS 的浏览器中运行
- 订阅独立:订阅列表存在 Invidious 实例本地,与 Google 账号完全解耦
- 多语言支持:通过 Weblate 社区翻译,覆盖几十种语言
- 支持 Reddit 评论:可替代 YouTube 内置评论区
- 开发者 API:提供完整的 Invidious API,文档地址:https://docs.invidious.io/api/
二、技术原理
架构设计
Invidious 采用 Crystal 语言编写,这是一种类 Ruby 语法的编译型语言,编译后生成原生二进制文件,性能优异、资源占用极低。项目通过 Makefile 管理构建:
RELEASE := 1
STATIC := 0
invidious: get-libs
crystal build src/invidious.cr $(FLAGS) --progress --stats --error-trace
支持多种编译选项:
RELEASE=1:生成 release 版本(默认开启)STATIC=1:静态链接所有依赖MT=1:多线程支持(实验性)API_ONLY=1:仅构建 API 服务,不包含 GUI
核心数据流
Invidious 绕过了 YouTube 官方 API,直接解析 YouTube 页面返回的 HTML 和 JSON 数据。这一设计带来了两个关键优势:
- 去 Google 依赖:无需遵守 YouTube API 的速率限制和服务条款
- 数据完全可控:所有数据处理逻辑都在本地,不存在第三方追踪
项目同时提供 Invidious API,支持获取视频信息、播放列表、搜索结果、评论等,格式为 JSON,方便开发者构建自己的前端或自动化工具。
数据导入导出
Invidious 支持与多个主流 YouTube 第三方客户端进行数据互通:
# 支持导入
- YouTube(通过 Google Takeout)
- NewPipe
- FreeTube
# 支持导出
- NewPipe
- FreeTube
- Invidious 自身格式
这意味着用户可以从 NewPipe 或 FreeTube 迁移过来,无需重新订阅所有频道。
三、安装与快速开始
即开即用(推荐)
最简单的方式是直接访问公开实例列表:https://instances.invidious.io/
选择一个响应速度快的实例(例如 yewtu.be、invidious.privacyredirect.com 等),打开后即可正常使用,全程无需注册账号。
自建实例
如果需要自建服务,需要先安装 Crystal 运行时:
# 克隆仓库
git clone https://github.com/iv-org/invidious.git
cd invidious
# 安装依赖并编译
make get-libs
make invidious
# 启动服务
./invidious
编译默认开启 --release 和 --debug 模式。生产环境建议使用 STATIC=1 生成静态二进制,减少运行时依赖。
⚠️ 注意:
MT=1(多线程)目前为实验性功能,生产环境不建议开启,项目文档明确提示 Invidious 在多线程模式下不稳定。
详细安装文档参考:https://docs.invidious.io/installation/
四、使用方法与实战
基础用法
- 打开任意 Invidious 实例
- 在顶部搜索框输入关键词或视频 URL
- 点击视频即可播放,支持切换画质、开启弹幕(如果有)等
进阶用法
RSS 订阅: 每个频道都有 RSS 源,可用以下格式订阅:
https://yewtu.be/feed/channel/<频道ID>
配合 RSS 阅读器(如 FreshRSS、Miniflux)可以实现完全离线的订阅管理。
浏览器自动跳转: 推荐安装 Privacy Redirect 浏览器扩展,安装后访问任何 YouTube 链接会自动重定向到你配置的 Invidious 实例,实现无感切换。
开发者 API 调用示例:
# 获取视频信息
curl "https://yewtu.be/api/v1/videos/<video_id>"
# 搜索
curl "https://yewtu.be/api/v1/search?q=关键词"
五、常见问题与解决方案
Q:公开实例访问很慢怎么办?
A:切换到离你物理距离更近的实例,或选择 yewtu.be、vid.puffyan.us 等社区维护的热门实例。
Q:某些视频无法播放(提示地区限制)? A:这是 YouTube 原生的地理限制,Invidious 同样受到限制,无法绕过。可尝试换一个注册在无限制地区的实例。
Q:自建实例编译失败?
A:确保 Crystal 版本 >= 1.0,且已安装 shards(Crystal 的依赖管理工具)。如果遇到 SSL 证书问题,检查系统 CA 证书是否完整。
Q:多线程模式下服务崩溃?
A:这是已知问题。生产环境请勿使用 MT=1 编译选项,保持默认的单线程模式。
Q:如何为 Invidious 做贡献? A:代码层面可直接 Fork 仓库后提 PR;翻译层面可参与 Weblate 项目。项目不需要 CLA,贡献门槛低。
六、总结
Invidious 是一个在隐私意识日益增强的背景下应运而生的项目。它用 Crystal 这门高性能语言实现了对 YouTube 的完全替代,让用户真正掌控自己的观看数据。如果你厌倦了 YouTube 的个性化推荐和追踪,想找回干净的观看体验,Invidious 无疑是最值得尝试的开源方案——一个公开实例,一行 URL,就能立刻拥有完全不同的体验。