10 KiB
MyTube
一个 YouTube/Bilibili/MissAV 视频下载和播放应用,支持频道订阅与自动下载,允许您将视频及其缩略图本地保存。将您的视频整理到收藏夹中,以便轻松访问和管理。现已支持yt-dlp所有网址,包括微博,小红书,x.com等。
在线演示
🌐 访问在线演示(只读): https://mytube-demo.vercel.app
功能特点
- 视频下载:通过简单的 URL 输入下载 YouTube、Bilibili 和 MissAV 视频。
- 视频上传:直接上传本地视频文件到您的库,并自动生成缩略图。
- Bilibili 支持:支持下载单个视频、多P视频以及整个合集/系列。
- 并行下载:支持队列下载,可同时追踪多个下载任务的进度。
- 批量下载:一次性添加多个视频链接到下载队列。
- 并发下载限制:设置同时下载的数量限制以管理带宽。
- 本地库:自动保存视频缩略图和元数据,提供丰富的浏览体验。
- 视频播放器:自定义播放器,支持播放/暂停、循环、快进/快退、全屏和调光控制。
- 搜索功能:支持在本地库中搜索视频,或在线搜索 YouTube 视频。
- 收藏夹:创建自定义收藏夹以整理您的视频。
- 订阅功能:订阅您喜爱的频道,并在新视频发布时收到通知。
- 现代化 UI:响应式深色主题界面,包含“返回主页”功能和玻璃拟态效果。
- 主题支持:支持在明亮和深色模式之间切换,支持平滑过渡。
- 登录保护:通过密码登录页面保护您的应用。
- 国际化:支持多种语言,包括英语、中文、西班牙语、法语、德语、日语、韩语、阿拉伯语和葡萄牙语。
- 分页功能:支持分页浏览,高效管理大量视频。
- 视频评分:使用 5 星评级系统为您的视频评分。
- 移动端优化:移动端友好的标签菜单和针对小屏幕优化的布局。
- 临时文件清理:直接从设置中清理临时下载文件以管理存储空间。
- 视图模式:在主页上切换收藏夹视图和视频视图。
目录结构
mytube/
├── backend/ # Express.js 后端 (TypeScript)
│ ├── src/ # 源代码
│ │ ├── config/ # 配置文件
│ │ ├── controllers/ # 路由控制器
│ │ ├── db/ # 数据库迁移和设置
│ │ ├── routes/ # API 路由
│ │ ├── services/ # 业务逻辑服务
│ │ ├── utils/ # 工具函数
│ │ └── server.ts # 主服务器文件
│ ├── uploads/ # 上传文件目录
│ │ ├── videos/ # 下载的视频
│ │ └── images/ # 下载的缩略图
│ └── package.json # 后端依赖
├── frontend/ # React.js 前端 (Vite + TypeScript)
│ ├── src/ # 源代码
│ │ ├── assets/ # 图片和样式
│ │ ├── components/ # React 组件
│ │ ├── contexts/ # React 上下文
│ │ ├── pages/ # 页面组件
│ │ ├── utils/ # 工具和多语言文件
│ │ └── theme.ts # 主题配置
│ └── package.json # 前端依赖
├── build-and-push.sh # Docker 构建脚本
├── docker-compose.yml # Docker Compose 配置
├── DEPLOYMENT.md # 部署指南
├── CONTRIBUTING.md # 贡献指南
└── package.json # 运行两个应用的根 package.json
开始使用
前提条件
- Node.js (v14 或更高版本)
- npm (v6 或更高版本)
- Docker (可选,用于容器化部署)
安装
-
克隆仓库:
git clone <repository-url> cd mytube -
安装依赖:
您可以使用一条命令安装根目录、前端和后端的所有依赖:
npm run install:all或者手动安装:
npm install cd frontend && npm install cd ../backend && npm install
使用 npm 脚本
您可以在根目录下使用 npm 脚本:
npm run dev # 以开发模式启动前端和后端
其他可用脚本:
npm run start # 以生产模式启动前端和后端
npm run build # 为生产环境构建前端
npm run lint # 运行前端代码检查
npm run lint:fix # 修复前端代码检查错误
访问应用
- 前端:http://localhost:5556
- 后端 API:http://localhost:5551
API 端点
视频
POST /api/download- 下载视频 (YouTube 或 Bilibili)POST /api/upload- 上传本地视频文件GET /api/videos- 获取所有已下载的视频GET /api/videos/:id- 获取特定视频PUT /api/videos/:id- 更新视频详情DELETE /api/videos/:id- 删除视频GET /api/videos/:id/comments- 获取视频评论POST /api/videos/:id/rate- 评价视频POST /api/videos/:id/refresh-thumbnail- 刷新视频缩略图POST /api/videos/:id/view- 增加观看次数PUT /api/videos/:id/progress- 更新播放进度GET /api/search- 在线搜索视频GET /api/download-status- 获取当前下载状态GET /api/check-bilibili-parts- 检查 Bilibili 视频是否包含多个分PGET /api/check-bilibili-collection- 检查 Bilibili URL 是否为合集/系列
下载管理
POST /api/downloads/cancel/:id- 取消下载DELETE /api/downloads/queue/:id- 从队列中移除DELETE /api/downloads/queue- 清空队列GET /api/downloads/history- 获取下载历史DELETE /api/downloads/history/:id- 从历史中移除DELETE /api/downloads/history- 清空历史
收藏夹
GET /api/collections- 获取所有收藏夹POST /api/collections- 创建新收藏夹PUT /api/collections/:id- 更新收藏夹 (添加/移除视频)DELETE /api/collections/:id- 删除收藏夹
订阅
GET /api/subscriptions- 获取所有订阅POST /api/subscriptions- 创建新订阅DELETE /api/subscriptions/:id- 删除订阅
设置与系统
GET /api/settings- 获取应用设置POST /api/settings- 更新应用设置POST /api/settings/verify-password- 验证登录密码POST /api/settings/migrate- 从 JSON 迁移数据到 SQLitePOST /api/settings/delete-legacy- 删除旧的 JSON 数据POST /api/scan-files- 扫描现有文件POST /api/cleanup-temp-files- 清理临时下载文件
收藏夹功能
MyTube 允许您将视频整理到收藏夹中:
- 创建收藏夹:创建自定义收藏夹以对视频进行分类。
- 添加到收藏夹:直接从视频播放器或管理页面将视频添加到一个或多个收藏夹。
- 从收藏夹中移除:轻松从收藏夹中移除视频。
- 浏览收藏夹:在侧边栏查看所有收藏夹,并按收藏夹浏览视频。
- 删除选项:选择仅删除收藏夹分组,或连同所有视频文件一起从磁盘删除。
数据迁移
MyTube 现在使用 SQLite 数据库以获得更好的性能和可靠性。如果您是从使用 JSON 文件的旧版本升级:
- 进入 设置。
- 向下滚动到 数据库 部分。
- 点击 从 JSON 迁移数据。
- 该工具将把您现有的视频、收藏夹和下载历史导入到新数据库中。
用户界面
该应用具有现代化、高级感的 UI,包括:
- 深色/明亮模式:根据您的喜好切换主题。
- 响应式设计:在桌面和移动设备上无缝运行,并针对移动端进行了优化。
- 视频网格:便于浏览的视频库网格布局。
- 确认模态框:带有自定义确认对话框的安全删除功能。
- 搜索:集成的搜索栏,用于查找本地和在线内容。
- Snackbar 通知:为添加/移除视频等操作提供视觉反馈。
环境变量
该应用使用环境变量进行配置。
前端 (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
MAX_FILE_SIZE=500000000
复制前端和后端目录中的 .env.example 文件以创建您自己的 .env 文件。
贡献
我们欢迎贡献!请参阅 CONTRIBUTING.md 了解如何开始、我们的开发工作流程以及代码质量指南。
部署
有关如何使用 Docker 或在 QNAP Container Station 上部署 MyTube 的详细说明,请参阅 DEPLOYMENT.md。
Star History
免责声明
-
使用目的与限制 本软件(及相关代码、文档)仅供个人学习、研究及技术交流使用。严禁将本软件用于任何形式的商业用途,或利用本软件进行违反国家法律法规的犯罪活动。
-
责任界定 开发者对用户使用本软件的具体行为概不知情,亦无法控制。因用户非法或不当使用本软件(包括但不限于侵犯第三方版权、下载违规内容等)而产生的任何法律责任、纠纷或损失,均由用户自行承担,开发者不承担任何直接、间接或连带责任。
-
二次开发与分发 本项目代码开源,任何个人或组织基于本项目代码进行修改、二次开发时,应遵守开源协议。 特别声明: 若第三方人为修改代码以规避、去除本软件原有的用户认证机制/安全限制,并进行公开分发或传播,由此引发的一切责任事件及法律后果,需由该代码修改发布者承担全部责任。我们强烈不建议用户规避或篡改任何安全验证机制。
-
非盈利声明 本项目为完全免费的开源项目。开发者从未在任何平台发布捐赠信息,本软件本身不收取任何费用,亦不提供任何形式的付费增值服务。任何声称代表本项目收取费用、销售软件或寻求捐赠的信息均为虚假信息,请用户仔细甄别,谨防上当受骗。
许可证
MIT