feat: professionalize control plane and standalone delivery

This commit is contained in:
theshy
2026-04-07 10:46:30 +08:00
parent d0cf1fd0df
commit 862db502b0
100 changed files with 8313 additions and 1483 deletions

View File

@ -1,15 +1,15 @@
{
"runtime": {
"database_path": "/home/theshy/biliup/biliup-next/data/workspace/biliup_next.db",
"database_path": "data/workspace/biliup_next.db",
"control_token": "",
"log_level": "INFO"
},
"paths": {
"stage_dir": "/home/theshy/biliup/biliup-next/data/workspace/stage",
"backup_dir": "/home/theshy/biliup/biliup-next/data/workspace/backup",
"session_dir": "/home/theshy/biliup/biliup-next/data/workspace/session",
"cookies_file": "/home/theshy/biliup/biliup-next/runtime/cookies.json",
"upload_config_file": "/home/theshy/biliup/biliup-next/runtime/upload_config.json"
"stage_dir": "data/workspace/stage",
"backup_dir": "data/workspace/backup",
"session_dir": "data/workspace/session",
"cookies_file": "runtime/cookies.json",
"upload_config_file": "runtime/upload_config.json"
},
"scheduler": {
"candidate_scan_limit": 500,
@ -37,18 +37,21 @@
".mkv",
".mov"
],
"stage_min_free_space_mb": 2048,
"stability_wait_seconds": 30
"stage_min_free_space_mb": 1024,
"stability_wait_seconds": 30,
"session_gap_minutes": 60,
"meta_sidecar_enabled": true,
"meta_sidecar_suffix": ".meta.json"
},
"transcribe": {
"provider": "groq",
"groq_api_key": "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",
"groq_api_key": "",
"ffmpeg_bin": "ffmpeg",
"max_file_size_mb": 23
},
"song_detect": {
"provider": "codex",
"codex_cmd": "/home/theshy/.nvm/versions/node/v22.13.0/bin/codex",
"codex_cmd": "codex",
"poll_interval_seconds": 2
},
"split": {
@ -59,8 +62,8 @@
},
"publish": {
"provider": "biliup_cli",
"biliup_path": "/home/theshy/biliup/biliup-next/runtime/biliup",
"cookie_file": "/home/theshy/biliup/biliup-next/runtime/cookies.json",
"biliup_path": "runtime/biliup",
"cookie_file": "runtime/cookies.json",
"retry_count": 5,
"retry_schedule_minutes": [
15,
@ -83,14 +86,14 @@
"collection": {
"provider": "bilibili_collection",
"enabled": true,
"season_id_a": 7196643,
"season_id_b": 7196624,
"season_id_a": 0,
"season_id_b": 0,
"allow_fuzzy_full_video_match": false,
"append_collection_a_new_to_end": true,
"append_collection_b_new_to_end": true
},
"cleanup": {
"delete_source_video_after_collection_synced": true,
"delete_split_videos_after_collection_synced": true
"delete_source_video_after_collection_synced": false,
"delete_split_videos_after_collection_synced": false
}
}

View File

@ -46,35 +46,35 @@
"paths": {
"stage_dir": {
"type": "string",
"default": "../stage",
"default": "data/workspace/stage",
"title": "Stage Directory",
"ui_order": 10,
"ui_widget": "path"
},
"backup_dir": {
"type": "string",
"default": "../backup",
"default": "data/workspace/backup",
"title": "Backup Directory",
"ui_order": 20,
"ui_widget": "path"
},
"session_dir": {
"type": "string",
"default": "../session",
"default": "data/workspace/session",
"title": "Session Directory",
"ui_order": 30,
"ui_widget": "path"
},
"cookies_file": {
"type": "string",
"default": "../cookies.json",
"default": "runtime/cookies.json",
"title": "Cookies File",
"ui_order": 40,
"ui_widget": "path"
},
"upload_config_file": {
"type": "string",
"default": "../upload_config.json",
"default": "runtime/upload_config.json",
"title": "Upload Config File",
"ui_order": 50,
"ui_widget": "path"
@ -170,6 +170,30 @@
"ui_widget": "duration_seconds",
"description": "扫描 stage 时,文件最后修改后至少静默这么久才会开始处理。用于避免手动 copy 半截文件被提前接走。",
"minimum": 0
},
"session_gap_minutes": {
"type": "integer",
"default": 60,
"title": "Session Gap Minutes",
"ui_order": 70,
"ui_featured": true,
"ui_widget": "duration_minutes",
"description": "当没有显式 session_key 时,同一主播前后片段的最大归并间隔。系统会用上一段结束时间和下一段开始时间做连续性判断。",
"minimum": 0
},
"meta_sidecar_enabled": {
"type": "boolean",
"default": true,
"title": "Meta Sidecar Enabled",
"ui_order": 80,
"description": "是否读取 stage 中与视频同名的 sidecar 元数据文件,例如 .meta.json。"
},
"meta_sidecar_suffix": {
"type": "string",
"default": ".meta.json",
"title": "Meta Sidecar Suffix",
"ui_order": 90,
"description": "stage sidecar 元数据文件后缀。默认会读取 video.mp4 对应的 video.meta.json。"
}
},
"transcribe": {
@ -270,14 +294,14 @@
},
"biliup_path": {
"type": "string",
"default": "../biliup",
"default": "runtime/biliup",
"title": "Biliup Path",
"ui_order": 20,
"ui_widget": "path"
},
"cookie_file": {
"type": "string",
"default": "../cookies.json",
"default": "runtime/cookies.json",
"title": "Cookie File",
"ui_order": 40,
"ui_widget": "path"

View File

@ -15,7 +15,12 @@
"provider": "local_file",
"min_duration_seconds": 900,
"ffprobe_bin": "ffprobe",
"allowed_extensions": [".mp4", ".flv", ".mkv", ".mov"]
"allowed_extensions": [".mp4", ".flv", ".mkv", ".mov"],
"stage_min_free_space_mb": 2048,
"stability_wait_seconds": 30,
"session_gap_minutes": 60,
"meta_sidecar_enabled": true,
"meta_sidecar_suffix": ".meta.json"
},
"transcribe": {
"provider": "groq",