feat: add session-level publish and comment flow

This commit is contained in:
theshy
2026-04-14 16:00:17 +08:00
parent 862db502b0
commit d5d9693581
42 changed files with 2478 additions and 181 deletions

View File

@ -20,6 +20,11 @@
- 基础 CLI
- 隔离 workspace 运行
- `stage -> ingest -> transcribe -> song_detect -> split -> publish -> comment -> collection` 主链路
- session 级归并与交付
- 同主播、文件名时间相差 `3` 小时内的片段归入同一 session
- session 的 `session_key` 使用最早片段标题
- 同一 session 的纯享版只发布一个 BV
- 同一 session 的纯享版评论与完整版评论都按 `P1/P2/P3` 聚合
## Run
@ -81,8 +86,10 @@ http://127.0.0.1:8787/classic
- 默认第 1 次重试等待 15 分钟
- 第 2-5 次各等待 5 分钟
- 评论链路支持拆分:
- 纯享版 `bvid.txt` 下默认发布“无时间轴编号歌单”
- 完整版主视频默认尝试发布“带时间轴评论”
- 纯享版 `bvid.txt` 下默认发布 session 级聚合歌单评论
- 同一 session 只由 anchor task 发一次,内容按 `P1/P2/P3` 分组
- 完整版主视频默认尝试发布 session 级“带时间轴评论”
- 同一 session 只由 anchor task 发一次,内容按 `P1/P2/P3` 分组
- 若找不到 `full_video_bvid.txt` 或匹配不到完整版视频,则主视频评论跳过
- 任务完成后支持可选清理:
- 删除 session 中的原始完整视频
@ -176,10 +183,13 @@ cd /home/theshy/biliup/biliup-next
评论默认分成两条:
- `comment.post_split_comment = true`
- 纯享版分P视频下发布编号歌单评论
- 不带时间轴
- 纯享版视频下发布 session 级聚合编号歌单评论
- 同一 session 只发一次
- 内容按 `P1/P2/P3` 分组
- `comment.post_full_video_timeline_comment = true`
- 尝试在完整版主视频下发布带时间轴置顶评论
- 尝试在完整版主视频下发布 session 级带时间轴置顶评论
- 同一 session 只发一次
- 内容按 `P1/P2/P3` 分组
- 依赖 `full_video_bvid.txt` 或通过标题匹配解析到完整版 BV
清理默认关闭:
@ -211,6 +221,37 @@ cd /home/theshy/biliup/biliup-next
如果 webhook 先于片段 ingest 到达,`biliup-next` 会先把它持久化;后续同 `session_key``source_title` 的任务进入时会自动继承该 `BV`
## Session Rules
当前默认 session 归并规则是最小启发式实现:
- 从文件名解析 `streamer + 日期时间`
- 同一 `streamer`
- 时间相差在 `3` 小时内
- 归到同一个 session
- `session_key` 直接使用最早片段标题
例如:
- `Self-test 04月04日 09时23分`
- `Self-test 04月04日 09时25分`
- `Self-test 04月04日 09时27分`
会归到同一个:
```text
session_key = Self-test 04月04日 09时23分
```
在同一个 session 内:
- 只有最早片段对应的 anchor task 会真正执行纯享版上传
- 上传时会聚合整个 session 下所有 `split_video`
- 成功后整组 task 共用同一个 `bvid.txt`
- 纯享版评论与完整版评论也都只由 anchor task 发送一次
推荐 webhook 也使用同一个最早标题作为 `session_key` / `source_title`,这样完整版 `BV` 能稳定命中整组任务。
## Security
控制台支持可选 token 保护:
@ -250,3 +291,32 @@ bash install-systemd.sh
- 安装到 `/etc/systemd/system/`
- `daemon-reload`
- `enable --now` 启动 `worker``api`
## Bilibili URL Ingest
现在也支持直接给 B 站视频链接创建任务。
CLI
```bash
cd /home/theshy/biliup/biliup-next
PYTHONPATH=src python -m biliup_next.app.cli create-task \
--source-type bilibili_url \
"https://www.bilibili.com/video/BVxxxxxxxxxx"
```
API
```bash
curl -X POST http://127.0.0.1:8787/tasks \
-H 'Content-Type: application/json' \
-d '{
"source_type": "bilibili_url",
"source_url": "https://www.bilibili.com/video/BVxxxxxxxxxx"
}'
```
相关配置:
- `ingest.provider = bilibili_url`
- `ingest.yt_dlp_cmd = yt-dlp`