v5: standalone Tauri rewrite — Rust backend + TypeScript UI

Complete rewrite from the Python/Tkinter app to a native Tauri 2 desktop
app. Drops the song-detection feature, so it needs no Python and no ML
model — just ffmpeg. Replaces video_concat.py entirely.

- Rust backend (src-tauri): stream-copy concat via ffmpeg with honest
  real-time progress (-progress pipe:1, out_time vs total duration), held
  at 99% through the +faststart finalising pass so the bar never jumps
- ffprobe duration scanning parallelised across threads; cancel kills the
  whole ffmpeg process tree; CREATE_NO_WINDOW hides console flashes
- BiliBili Live filename helper ported to Rust (bililive_rename)
- TypeScript UI, no framework: tiny h() DOM helper, drag-and-drop,
  reorderable/checkable file list with live totals, light/dark theme,
  reusable toast + progress components
- Optional delete-originals-after-merge with a clear warning
- New app icon (three clips merging into one); build.bat assembles a
  portable folder with ffmpeg/ffprobe bundled next to the exe
- Ignore tauri-generated gen/schemas (regenerated on every build)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-26 22:24:59 +08:00
parent 3261a461cb
commit 37ec549544
78 changed files with 8101 additions and 1100 deletions

46
.gitignore vendored
View File

@@ -1,4 +1,42 @@
video_concat_v2.1.py
video_concat_v3.py
video_concat_v4.py
video_concat_v4.1.py
# deps & caches
node_modules/
__pycache__/
*.pyc
.venv/
venv/
.pytest_cache/
.mypy_cache/
.ruff_cache/
# build outputs
target/
dist/
dist-portable/
build/
# tauri auto-generated (regenerated on every build)
/src-tauri/gen/schemas/
# logs & databases
*.log
*.db
*.sqlite
*.sqlite3
# secrets / credentials
.env
*.env
*cookie*
*credential*
credentials.json
token.json
*token.json
.cookies.json
google_cred/
*.pem
*.key
# model weights / large artifacts
*.onnx
*.pt
*.pth
*.ckpt
*.safetensors
# os cruft
.DS_Store
Thumbs.db