Skip to content
项目

franklioxygen/MyTube has 1,286 GitHub stars and 117 forks. GitHot measured +3 stars in 24 hours and +7 in 7 days. Last checked 2026-11-09 19:15 UTC. Last push 2026-11-05.

这些数字如何统计

Self-hosted downloader and player for YouTube, Bilibili, Twitch, MissAV, and yt-dlp sites. Features channel subscriptions, auto-downloads, and local storage for media. Organize your library into collections with a sleek UI. Includes built-in Cloudflare Tunnel support for secure remote access without port forwarding. Docker-ready deployment.

可以做什么

  • Video Downloading: Download YouTube, Bilibili, Twitch, MissAV and other yt-dlp-supported videos with a simple URL input.
  • Video Upload: Upload local video files directly to your library with automatic thumbnail generation.
  • D Mode (In-Car Playback): Uses Canvas and WebCodecs instead of a standard media element, enabling video playback on compatible in-car entertainment screens that otherwise block ordinary players while the vehicle is moving. Intended for passengers—always follow local laws, and never watch or operate the screen while driving.
  • TMDB Metadata Scraping: Automatically scrape movie and TV show metadata (title, description, poster, director, year, rating) from TMDB based on filename. Supports localized content matching your site language.

实测星标增长

24小时
+3
7天
+7
15天
更新延迟
1个月
更新延迟

各周期内的星标净变化,周期相互重叠,并非每日新增。缺失的测量保持空白。星标代表关注度,不代表软件质量。

README-zh.md

原文

logo

MyTube

支持 YouTube、Bilibili、Twitch、MissAV 及 yt-dlp 站点 的自托管视频下载器与播放器。具备频道订阅、自动下载、本地化存储以及面向外部阅读器的私密 RSS 订阅链接。UI 设计精美,支持收藏集分类管理。内置 Cloudflare Tunnel 支持,无需端口映射即可实现安全远程访问。支持 Docker 一键部署。

🚀 100% 提示工程构建,零人工介入代码。 基于 franklioxygen/agent-workflows 工作流构建。

GitHub License Docker Pulls Discord GitHub Actions Workflow Status GHCR 镜像工作流状态 Lighthouse 性能 Codacy Badge Codacy Badge GitHub Repo stars GitHub Roast score badge 代码行数

English | 更新日志

在线演示

🌐 访问在线演示(只读): https://mytube-demo.vercel.app
app-screenshot

功能特点

  • 视频下载:通过简单的 URL 输入下载 YouTube、Bilibili、Twitch、MissAV 以及其他 yt-dlp 支持的视频。
  • 视频上传:直接上传本地视频文件到您的库,并自动生成缩略图。
  • D Mode(车载播放):使用 Canvas 和 WebCodecs 代替标准媒体元素,让视频可在车辆行驶时仍会屏蔽普通播放器的兼容车载娱乐屏幕上播放。此功能仅供乘客使用;驾驶员请遵守当地法规,切勿在驾驶时观看或操作屏幕。
  • TMDB 元数据抓取:基于文件名自动从 TMDB 抓取电影和电视剧元数据(标题、描述、封面、导演、年份、评分)。支持根据站点语言获取本地化内容。
  • 并行下载:支持队列下载,可同时追踪多个下载任务的进度。
  • 批量下载:一次性添加多个视频链接到下载队列。
  • 云存储集成:下载后自动将视频和缩略图上传到云存储(OpenList/Alist)。
  • 媒体完整性检查(管理员):在 设置 → 媒体库与存储 中找出媒体库里文件缺失、被截断或无法读取的视频。它只报告问题,不做修改;每个问题都链接到对应视频,建议重新下载的还提供 再次下载 按钮。
  • 字幕:自动下载 YouTube / Bilibili 默认语言字幕。
  • 实时音频翻译(管理员,可选):将正在播放的视频音频流式传输到 Google Gemini 实时翻译,并在播放器字幕菜单中播放翻译后的语音和实时字幕。在 设置 → 基础 → 视频播放 中配置(启用、Gemini API 密钥、模型、源/目标语言)。密钥仅保存在服务器端,绝不会发送到浏览器。隐私提示: 启用实时翻译期间,视频音频会被传输到 Google Gemini API;转录文本不会被持久化或记录。启用登录时需要管理员账户,且音频来源需为同源(非跨域)。
  • 订阅功能:管理 YouTube、Bilibili 和 Twitch 频道订阅,并在新内容发布后自动下载。
  • 键盘快捷键:与 YouTube 一致的播放器快捷键——播放/暂停、跳转、音量、倍速、字幕、全屏、影院模式、逐帧以及接下来播放的切换。详见 键盘快捷键。
  • RSS 订阅:为外部 RSS 阅读器创建私密订阅链接,并可按频道、作者、标签、来源、最近时间范围和条目上限分别配置过滤条件。
  • 登录保护与访客访问:支持密码登录、可选通行密钥 (WebAuthn) 和仅管理员可用的 3×3 手势登录,并可创建具名只读访客账户。手势错误次数在所有设备之间共享;一次或两次错误会在最近一次错误的 12 小时后清零,三次错误则会锁定,直到管理员成功使用密码登录一次。
  • 国际化:支持多种语言,包括英语、中文、西班牙语、法语、德语、日语、韩语、阿拉伯语、葡萄牙语和俄语。
  • Cookie 管理:支持上传 cookies.txt 以启用年龄限制或会员内容的下载。
  • yt-dlp 配置: 通过用户界面自定义全局 yt-dlp 参数、网络代理及其他高级设置。
  • TMDB 集成:在设置中配置您的 TMDB API 密钥,即可为本地视频文件启用自动元数据抓取。抓取器会智能解析文件名以提取标题并与 TMDB 数据库匹配。
  • Cloudflare Tunnel 集成: 内置 Cloudflare Tunnel 支持,无需端口转发即可轻松将本地 MyTube 实例暴露到互联网。
  • 任务钩子: 在下载任务的各个阶段(开始、成功、失败、取消)执行自定义 Shell 脚本,以实现集成和自动化。详见 任务钩子指南。
  • Telegram 通知: 当下载任务成功或失败时,通过 Telegram 机器人接收即时通知。
  • 浏览器扩展: 提供 Chrome 扩展,支持直接从浏览器下载视频。支持所有 yt-dlp 支持的站点。

浏览器扩展

有关安装和使用说明,请参阅 浏览器扩展。

MikMok

MikMok 是 MyTube 的短视频 Web 客户端,可通过 API 连接 MyTube,提供更适合短视频浏览的流式观看体验。

Android 客户端

mytube-android 是 MyTube 的原生 Android 客户端,通过 API 连接到您的 MyTube 服务器,可在移动设备上浏览和播放视频。

MCP 服务器

mytube-mcp 是 MyTube 的 Model Context Protocol (MCP) 服务器,通过 API 将您的 MyTube 实例暴露给 AI 助手和智能体,使其能够代您搜索、管理和播放您的视频库。

目录结构

有关项目结构的详细说明,请参阅 目录结构。

运行时存储目录

默认情况下,媒体文件和缓存位于 backend/uploads/:

目录 用途
videos/ 下载的视频文件;启用相关设置时,完整尺寸封面、字幕和电视媒体库伴随文件也会与视频放在一起。
images/ 当封面位置设置为独立图片文件夹时,用于保存完整尺寸封面。
images-small/ UI 使用的内部小图预览缓存。它会镜像完整尺寸封面的目录结构,可忽略或从媒体服务器媒体库中排除。
subtitles/ 当字幕位置设置为独立字幕文件夹时,用于保存字幕文件。
avatars/ 应用和媒体服务器导出使用的频道/作者头像。
cloud-thumbnail-cache/ 云端媒体缩略图的内部缓存。

有关存储位置与文件名如何决定——稳定媒体身份、legacy 与模板命名、作者文件夹组织、防碰撞的路径分配,以及不覆盖的发布模型——请参阅 媒体存储与文件命名。

开始使用

环境要求: Node.js 22.22+、23.x、24.x、25.x 或 26.x,以及 npm v9+。后端依赖 better-sqlite3;不受支持的 Node 版本会在 npm install 时失败(在 Windows 上可能显示误导性的 node-gyp / Visual Studio 错误)。Docker 镜像内置 Node 22。

有关安装和设置说明,请参阅 开始使用。

访客账户

启用登录保护后,管理员可以在 设置 -> 安全 中创建具名访客账户。访客账户为只读权限,创建、禁用、删除和重置密码等账户变更会立即生效,无需保存整个设置表单。

已有共享访客密码的安装会自动迁移为 visitor 账户。原来使用共享密码的用户可使用用户名 visitor 和原密码登录。旧的共享访客密码登录端点仍保留兼容性,但已废弃。

部署安全模型

有关管理员三档信任边界与部署安全模型的说明,请参阅 部署安全模型。

API 端点

有关可用 API 端点的列表,请参阅 API 端点。

技术栈

后端

  • 运行时: Node.js 22.22+ 或 23.x–26.x,TypeScript
  • 框架: Express.js
  • 数据库: SQLite with Drizzle ORM
  • 测试: Vitest
  • 架构: 分层架构 (路由 → 控制器 → 服务 → 数据库)

前端

  • 框架: React 19 with TypeScript
  • 构建工具: Vite
  • UI 库: Material-UI (MUI)
  • 状态管理: React Context API
  • 路由: React Router v7
  • HTTP 客户端: Axios with React Query

关键架构特性

  • 模块化存储服务: 拆分为专注的模块以提高可维护性
  • 下载器模式: 用于平台特定实现的抽象基类
  • 数据库迁移: 使用 Drizzle Kit 自动更新模式
  • 下载队列管理: 支持队列的并发下载
  • 视频下载跟踪: 防止跨会话重复下载

环境变量

该应用使用环境变量进行配置。

前端 (frontend/.env)

VITE_API_URL=/api
VITE_BACKEND_URL=

后端 (backend/.env)

PORT=5551
# 可选:手势登录的稳定密钥(至少 32 字节)。
# 未设置时,MyTube 会在首次设置手势时创建 backend/data/gesture-login.pepper。
# GESTURE_LOGIN_PEPPER=请替换为至少32字节的随机值
# 可选:声明当前部署中管理员的信任边界。
# 可选值:application | container | host
# 默认值:container
# MYTUBE_ADMIN_TRUST_LEVEL=container

默认数据与上传路径位于 backend/data 和 backend/uploads(相对于后端工作目录)。

将 backend/.env.example 复制为 backend/.env 并按需调整。前端已提供 frontend/.env,可使用 frontend/.env.local 覆盖默认值。

数据库

MyTube 使用 SQLite 和 Drizzle ORM 进行数据持久化。数据库在首次启动时自动创建和迁移:

  • 位置: backend/data/mytube.db
  • 迁移: 在服务器启动时自动运行
  • 模式: 通过 Drizzle Kit 迁移管理
  • 旧版支持: 提供迁移工具以从基于 JSON 的存储转换

关键数据库表:

  • videos: 视频元数据和文件路径
  • collections: 视频收藏夹/播放列表
  • subscriptions: 频道/创作者订阅
  • rss_tokens: 私密 RSS 订阅链接、过滤条件、启停状态和访问统计
  • downloads: 活动下载队列
  • download_history: 完成的下载历史
  • video_downloads: 跟踪已下载的视频以防止重复
  • settings: 应用程序配置

贡献

我们欢迎贡献!请参阅 CONTRIBUTING.md 了解如何开始、我们的开发工作流程以及代码质量指南。

部署

有关 Docker 部署的详细说明(包括 GitHub 官方容器镜像 ghcr.io/franklioxygen/mytube:latest 与单容器 stacks/docker-compose.single-container.yml),请参阅 Docker 部署指南. 有关 application / container / host 三档管理员信任边界,请参阅 部署安全模型。

星标历史

免责声明

  • 使用目的与限制 本软件(及相关代码、文档)仅供个人学习、研究及技术交流使用。严禁将本软件用于任何形式的商业用途,或利用本软件进行违反国家法律法规的犯罪活动。

  • 责任界定 开发者对用户使用本软件的具体行为概不知情,亦无法控制。因用户非法或不当使用本软件(包括但不限于侵犯第三方版权、下载违规内容等)而产生的任何法律责任、纠纷或损失,均由用户自行承担,开发者不承担任何直接、间接或连带责任。

  • 二次开发与分发 本项目代码开源,任何个人或组织基于本项目代码进行修改、二次开发时,应遵守开源协议。 特别声明: 若第三方人为修改代码以规避、去除本软件原有的用户认证机制/安全限制,并进行公开分发或传播,由此引发的一切责任事件及法律后果,需由该代码修改发布者承担全部责任。我们强烈不建议用户规避或篡改任何安全验证机制。

  • 非盈利声明 本项目为完全免费的开源项目。开发者从未在任何平台发布捐赠信息,本软件本身不收取任何费用,亦不提供任何形式的付费增值服务。任何声称代表本项目收取费用、销售软件或寻求捐赠的信息均为虚假信息,请用户仔细甄别,谨防上当受骗。

许可证

MIT

探索相关项目