基于 Go 和纯 JavaScript 的媒体下载应用
支持 Bilibili 等平台的音频下载,具有现代化的 Web 界面和完整的自动化部署流程
📸 项目展示 • 🚀 快速开始 • 📦 安装方式 • 🐳 Docker 部署 • 🛡️ 安全 • 📖 文档 • 🤝 贡献
简洁直观的下载界面,支持链接输入和一键下载
扫码登录 Bilibili,安全便捷的身份验证
实时显示下载进度,支持暂停、恢复和停止操作
完整的下载记录管理,支持筛选和文件操作
丰富的配置选项,支持主题切换和个性化设置
|
|
|
|
- 下载历史 - 完整的下载记录管理 • 进度监控 - 实时显示下载状态和速度 • 文件管理 - 自动组织下载的音频文件 • 配置管理 - 灵活的下载参数配置
# 使用 docker-compose
git clone https://github.com/kis2show/lazybala.git
cd lazybala
docker-compose up -d
# 或直接运行 Docker 镜像
docker run -d \
--name lazybala \
-p 8080:8080 \
-v $(pwd)/audiobooks:/app/audiobooks \
-v $(pwd)/config:/app/config \
ghcr.io/kis2show/lazybala:latest- Go 1.21+
- Node.js 18+
- Git
-
克隆仓库
git clone https://github.com/kis2show/lazybala.git cd lazybala -
构建前端
cd frontend npm install npm run build cd ..
-
安装 Go 依赖
go mod download
-
运行应用
go run . -
访问应用
打开浏览器访问
http://localhost:8080
首次使用需要扫码登录哔哩哔哩账号:
- 点击"生成二维码"按钮
- 使用哔哩哔哩 APP 扫描二维码
- 在手机上确认登录
- 登录成功后 cookies 会自动保存
-
输入链接: 在输入框中粘贴哔哩哔哩视频或合集链接
- 普通视频:
https://www.bilibili.com/video/BV1KmzCYMEaq/ - 合集:
https://space.bilibili.com/2589478/lists/4279030?type=season
- 普通视频:
-
设置保存路径: 可选择保存到 audiobooks 下的子文件夹
-
高级设置: 可自定义文件名格式
%(title)s.%(ext)s- 标题.扩展名%(uploader)s - %(title)s.%(ext)s- 上传者 - 标题.扩展名
-
开始下载: 点击"开始下载"按钮
- 实时显示当前下载文件名和进度
- 显示下载速度和预计完成时间
- 合集下载时显示总体进度(n/总数)
- 支持缩略图预览
在设置页面可以:
- 设置默认保存路径
- 选择音频质量
- 自定义文件名格式
- 设置重试次数
- 检查和更新 yt-dlp 版本
| 变量名 | 默认值 | 说明 |
|---|---|---|
PORT |
8080 |
服务端口 |
TZ |
UTC |
时区设置 |
lazybala/
├── audiobooks/ # 下载的音频文件
├── config/ # 配置文件
│ ├── config.json # 应用配置
│ └── yt.config # yt-dlp 配置
├── cookies/ # 登录 cookies
│ └── cookies.txt # 哔哩哔哩 cookies
├── bin/ # 二进制工具
│ ├── yt-dlp_linux # yt-dlp (amd64)
│ ├── yt-dlp_linux_aarch64 # yt-dlp (arm64)
│ ├── ffmpeg_linux # ffmpeg (amd64)
│ └── ffmpeg_linux_aarch64 # ffmpeg (arm64)
└── frontend/ # 前端文件
-
普通视频
https://www.bilibili.com/video/BV1KmzCYMEaq/ https://www.bilibili.com/video/BV1KmzCYMEaq?p=2 -
合集/播放列表
https://space.bilibili.com/2589478/lists/4279030?type=season -
分享链接
分享地址:https://www.bilibili.com/video/BV1KmzCYMEaq?p=2/type=playlist
- 后端: Go + Gin + WebSocket
- 前端: Vue 3 + Vite + Pinia
- 工具: yt-dlp + ffmpeg
- 容器: Docker + Docker Compose
POST /api/qrcode/generate- 生成登录二维码POST /api/qrcode/scan- 检查登录状态
POST /api/download- 开始下载GET /api/download/progress- 获取下载进度POST /api/download/stop- 停止下载
GET /api/config- 获取配置POST /api/config- 保存配置
GET /api/version/check- 检查版本更新POST /api/version/update- 更新版本
# 构建前端
cd frontend && npm run build
# 构建后端
go build -o lazybala .
# 构建 Docker 镜像
docker build -t lazybala .LazyBala 重视安全性,我们定期进行安全审计和依赖更新。
- 自动依赖更新 - GitHub Actions 定期检查和更新依赖
- 安全扫描 - 使用 govulncheck、gosec 和 staticcheck 进行安全扫描
- 权限最小化 - Docker 容器使用非 root 用户运行
- 输入验证 - 所有用户输入都经过严格验证
项目使用以下工具进行安全审计:
- govulncheck - Go 官方漏洞检查工具
- gosec - Go 安全代码分析器
- staticcheck - 高级静态分析工具
# 运行完整的安全扫描
./scripts/security-scan.sh
# 或手动运行各个工具
go vet ./...
govulncheck ./...
gosec ./...如果发现安全漏洞,请查看我们的 安全政策 了解如何负责任地报告。
欢迎提交 Issue 和 Pull Request!
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
如果你觉得这个项目有用,请给它一个 ⭐️!
如有问题或建议,请提交 Issue。
作者: Kis2Show 项目: LazyBala - 费劲巴拉下载器




