Files
MyTube/README-zh.md
2025-12-30 00:05:30 -05:00

7.9 KiB
Raw Permalink Blame History

MyTube

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

GitHub License Docker Pulls Discord GitHub Actions Workflow Status GitHub Repo stars

English | 更新日志

在线演示

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

Watch the video

功能特点

  • 视频下载:通过简单的 URL 输入下载 YouTube、Bilibili 和 MissAV 视频。
  • 视频上传:直接上传本地视频文件到您的库,并自动生成缩略图。
  • Bilibili 支持:支持下载单个视频、多 P 视频以及整个合集/系列。
  • 并行下载:支持队列下载,可同时追踪多个下载任务的进度。
  • 批量下载:一次性添加多个视频链接到下载队列。
  • 并发下载限制:设置同时下载的数量限制以管理带宽。
  • 本地库:自动保存视频缩略图和元数据,提供丰富的浏览体验。
  • 视频播放器:自定义播放器,支持播放/暂停、循环、快进/快退、全屏和调光控制。
  • 字幕:自动下载 YouTube / Bilibili 默认语言字幕。
  • 搜索功能:支持在本地库中搜索视频,或在线搜索 YouTube 视频。
  • 收藏夹:创建自定义收藏夹以整理您的视频。
  • 订阅功能:订阅您喜爱的频道,并在新视频发布时自动下载。
  • 登录保护:通过密码登录页面保护您的应用。
  • 国际化:支持多种语言,包括英语、中文、西班牙语、法语、德语、日语、韩语、阿拉伯语、葡萄牙语和俄语。
  • 分页功能:支持分页浏览,高效管理大量视频。
  • 视频评分:使用 5 星评级系统为您的视频评分。
  • 移动端优化:移动端友好的标签菜单和针对小屏幕优化的布局。
  • 临时文件清理:直接从设置中清理临时下载文件以管理存储空间。
  • 视图模式:在主页上切换收藏夹视图和视频视图。
  • Cookie 管理:支持上传 cookies.txt 以启用年龄限制或会员内容的下载。
  • yt-dlp 配置: 通过用户界面自定义全局 yt-dlp 参数、网络代理及其他高级设置。
  • 访客模式:启用只读模式,允许查看视频但无法进行修改。非常适合与他人分享您的视频库。
  • 云存储集成下载后自动将视频和缩略图上传到云存储OpenList/Alist
  • Cloudflare Tunnel 集成: 内置 Cloudflare Tunnel 支持,无需端口转发即可轻松将本地 MyTube 实例暴露到互联网。

目录结构

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

开始使用

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

API 端点

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

技术栈

后端

  • 运行时: Node.js with 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=http://localhost:5551/api
VITE_BACKEND_URL=http://localhost:5551

后端 (backend/.env)

PORT=5551
UPLOAD_DIR=uploads
VIDEO_DIR=uploads/videos
IMAGE_DIR=uploads/images
SUBTITLES_DIR=uploads/subtitles
DATA_DIR=data
MAX_FILE_SIZE=500000000

复制前端和后端目录中的 .env.example 文件以创建您自己的 .env 文件。

数据库

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

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

关键数据库表:

  • videos: 视频元数据和文件路径
  • collections: 视频收藏夹/播放列表
  • subscriptions: 频道/创作者订阅
  • downloads: 活动下载队列
  • download_history: 完成的下载历史
  • video_downloads: 跟踪已下载的视频以防止重复
  • settings: 应用程序配置

贡献

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

部署

有关如何使用 Docker 部署 MyTube 的详细说明,请参阅 Docker 部署指南.

星标历史

Star History Chart

免责声明

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

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

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

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

许可证

MIT