今天在 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 数据。这一设计带来了两个关键优势:

  1. 去 Google 依赖:无需遵守 YouTube API 的速率限制和服务条款
  2. 数据完全可控:所有数据处理逻辑都在本地,不存在第三方追踪

项目同时提供 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/

四、使用方法与实战

基础用法

  1. 打开任意 Invidious 实例
  2. 在顶部搜索框输入关键词或视频 URL
  3. 点击视频即可播放,支持切换画质、开启弹幕(如果有)等

进阶用法

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,就能立刻拥有完全不同的体验。