175be7625e15d931f75dee5975c3a6a788cc2e99
* feat: 添加断点续传功能 - 实现自动保存上传进度到临时文件 - 支持上传中断后自动恢复并跳过已上传文件 - 为 Video 结构体添加 Clone trait - 添加 .envrc 用于 direnv 自动加载 Nix 环境 - 更新 flake.lock 依赖 * fix: Auto-truncate video titles exceeding 80 characters B站API限制分P视频标题不能超过80个字符。当文件名过长时,上传会在提交阶段失败并报错"第(N)个视频的标题过长,已经超过80个字符"。 此次修改在所有上传线路(Upos/Kodo/Cos)中添加自动截断逻辑: - 添加 Video::truncate_title() 辅助函数,按字符(非字节)截断 - 文件名超过80字符时,自动设置title字段为截断版本(77字符+"...") - 文件名不超过80字符时,title保持None,使用完整文件名 影响范围: - crates/biliup/src/uploader/bilibili.rs - 新增truncate_title方法 - crates/biliup/src/uploader/line/upos.rs - Upos线路应用截断 - crates/biliup/src/uploader/line/kodo.rs - Kodo线路应用截断 - crates/biliup/src/uploader/line/cos.rs - Cos线路应用截断 * feat: Auto-retry on upload rate limit (code 601) 当遇到B站限流错误(code: 601, "您上传视频过快")时,自动等待后重试,最多重试5次,等待时间递增。 - 在 pre_upload 中添加重试循环 - 解析错误响应JSON,检测 code: 601 - 递增等待时间:第1次等待1分钟,第2次2分钟,第3次3分钟,第4次4分钟 - 最多重试5次(从原来的3次增加) - 记录警告日志,显示重试进度和等待时间 - 配合断点续传功能,提高批量上传成功率 * refactor: 将重试逻辑从库层移至 CLI 层 主要变更: - 新增 RateLimit 错误类型以区分限流错误(code: 601) - 移除 line.rs 中 pre_upload() 的重试循环,遇到 601 错误直接返回 - 在 CLI 层 (uploader.rs) 实现重试逻辑 * fix: 使用跨平台路径获取断点续传文件位置 - 添加 dirs 依赖 - 使用 dirs::data_local_dir() 获取平台相关的数据目录 - Windows 下使用 %LOCALAPPDATA%,避免 /tmp 路径不存在导致的 panic - 如果无法获取数据目录,回退到 std::env::temp_dir() * refactor: 使用通用 retry 工具函数重构重试逻辑 主要变更: - 改造 lib.rs 中的 retry 函数,新增 retry_with_config 支持: - 自定义最大重试次数 - 条件重试(可指定只在特定错误时重试) - 保留原有的指数退避和抖动策略 - 在 CLI 层使用 retry_with_config 替换手写的重试循环 - 代码从 30+ 行简化为 15 行 - 更新 dirs 依赖从 5.0 到 6.0 * feat: 添加账号级上传互斥锁机制 为防止多个进程同时使用同一账号上传触发限流,实现账号级互斥锁: - 新增 upload_lock.rs 模块: - 基于文件锁实现跨进程互斥 - 使用账号 mid 作为锁标识符 - 自动清理超过30分钟的僵尸锁 - Drop 时自动释放锁 - 集成到上传流程(uploader.rs): - 在上传前检查是否有其他进程正在等待限流恢复 - 检测到限流错误时尝试获取锁 - 如果无法获取锁(其他进程已持有),本进程立即退出 - 使用 Arc<Mutex<>> 在闭包间共享锁状态 工作流程: 1. 进程1 上传时遇到限流 (Rate Limit) 2. 进程1 获取锁并进入重试等待 3. 进程2 启动并检测到锁已被占用 4. 进程2 立即退出,避免继续触发限流 5. 进程1 重试成功后释放锁
🛠️ 功能
- 开箱即用,多种安装方式,提供可视化WebUi界面
- 多主播录制/上传,24X7无人值守运行,高自定义元信息
- 边录边传不落盘急速上传,节省本地硬盘空间
论坛:BBS
📜 更新日志
Important
Disclaimer / 免责声明
- 本项目仅供个人学习研究,不保证稳定性,不提供技术支持
- 使用本项目产生的一切后果由用户自行承担
- 禁止商业用途,请遵守版权及平台规定
- This project is for personal learning and research purposes only
- No stability guarantee or technical support provided
- Users are solely responsible for any consequences of using this project
- Commercial use is strictly prohibited
- Please respect copyright and platform ToS
📜 使用文档
B 站命令行投稿工具,支持短信登录、账号密码登录、扫码登录、浏览器登录以及网页Cookie登录,并将登录后返回的 cookie 和 token 保存在 cookie.json 中,可用于其他项目。
获取命令帮助 biliup --help
文档地址:https://biliup.github.io/biliup-rs
Upload video to bilibili.
Usage: biliup [OPTIONS] <COMMAND>
Commands:
login 登录B站并保存登录信息
renew 手动验证并刷新登录信息
upload 上传视频
append 是否要对某稿件追加视频
show 打印视频详情
dump-flv 输出flv元数据
download 下载视频
server 启动web服务,默认端口19159
list 列出所有已上传的视频
help Print this message or the help of the given subcommand(s)
Options:
-p, --proxy <PROXY> 配置代理
-u, --user-cookie <USER_COOKIE> 登录信息文件 [default: cookies.json]
--rust-log <RUST_LOG> [default: tower_http=debug,info]
-h, --help Print help
-V, --version Print version
启动录制服务
启动web服务,默认端口19159
Usage: biliup server [OPTIONS]
Options:
-b, --bind <BIND> Specify bind address [default: 0.0.0.0]
-p, --port <PORT> Port to use [default: 19159]
--auth 开启登录密码认证
-h, --help Print help
🚀 快速开始
Windows
- 下载 Release: bbup-app_0.1.0_x64
Linux 或 macOS
- 安装 uv
- 安装:
uv tool install biliup - 启动:
biliup server --auth - 访问 WebUI:
http://your-ip:19159
- 后台运行
nohup biliup server --auth &- 请查看参考
Termux
- 详见Wiki
🧑💻开发
架构概览
Rust后端 + Python引擎 + Next.js前端的混合架构。
graph TB
subgraph "🌐 前端层"
UI[Next.js Web界面<br/>React + TypeScript<br/>Semi UI组件库]
end
subgraph "⚡ Rust后端服务"
CLI[Web API服务器<br/>biliup-cli<br/>用户认证 & REST API]
CORE[核心上传库<br/>biliup<br/>Bilibili API客户端]
GEARS[Python绑定<br/>stream-gears<br/>性能优化桥接]
end
subgraph "🐍 Python引擎"
ENGINE[下载引擎<br/>biliup<br/>任务调度 & 流处理]
PLUGINS[插件系统<br/>20+平台支持<br/>斗鱼/虎牙/Twitch等]
DANMAKU[弹幕系统<br/>实时弹幕获取<br/>多平台协议支持]
end
subgraph "🗄️ 数据层"
DB[(SQLite数据库<br/>配置存储<br/>任务状态 & 日志)]
FILES[文件系统<br/>临时视频存储<br/>缓存管理]
end
subgraph "🌍 外部服务"
BILI[Bilibili API<br/>视频上传服务]
STREAMS[直播平台<br/>斗鱼/虎牙/B站等<br/>实时流媒体]
end
UI --> CLI
CLI --> CORE
CLI --> ENGINE
CLI --> DB
GEARS --> ENGINE
ENGINE --> PLUGINS
ENGINE --> DANMAKU
ENGINE --> FILES
CORE --> BILI
PLUGINS --> STREAMS
DANMAKU --> STREAMS
style UI fill:#e1f5fe
style CLI fill:#f3e5f5
style CORE fill:#f3e5f5
style GEARS fill:#f3e5f5
style ENGINE fill:#e8f5e8
style PLUGINS fill:#e8f5e8
style DANMAKU fill:#e8f5e8
style DB fill:#fff3e0
style FILES fill:#fff3e0
style BILI fill:#ffebee
style STREAMS fill:#ffebee
frontend
- 确保 Node.js 版本 ≥ 18
- 安装依赖:
npm i - 启动开发服务器:
npm run dev - 访问:
http://localhost:3000
Python
- 安装依赖
maturin dev npm run build- 启动 Biliup:
python3 -m biliup
Rust-cli
npm run build- 构建
cargo build --release --bin biliup - 开发启动 BiliupR:
cargo run
🤝Credits
- Thanks
ykdl, youtube-dl, streamlinkprovides downloader. - Thanks
THMonster/danmaku.
💴捐赠
⭐Stars
Description
自动直播录制、投稿、twitch、ytb频道搬运工具。命令行投稿(B站)和视频下载工具,提供多种登录方式,支持多p。边录边传0落盘
https://biliup.github.io/biliup/
6.7 MiB
0 Stars
1 Watchers
0 Forks
Languages
Rust
75.6%
TypeScript
16.6%
Python
4.8%
SCSS
2%
JavaScript
0.4%
Other
0.5%
