v7: standalone Sing Detect app — full Tauri project tree

Promotes the v6 detection slice into a complete, buildable Tauri 2 app and
renames Stream Studio → Sing Detect (detection-only; video-concat split to its
own project). Proper src/ + src-tauri/ layout, Python sidecar under sidecar/,
app icons, package/Cargo manifests, and dev/build/pack scripts.

Pipeline unchanged in spirit: Rust drives ffmpeg to a 16 kHz mono WAV, the
Python sidecar (inaSpeechSegmenter) emits line-JSON segments, and Rust writes
EDL / markers CSV / CSV / JSON exports. Long ops run on spawn_blocking; cancel
kills the whole py -3.10 process tree.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-26 23:12:25 +08:00
parent 765816e701
commit 4887981a2d
51 changed files with 8250 additions and 52 deletions

52
CLAUDE.md Normal file
View File

@@ -0,0 +1,52 @@
# Sing Detect — project context for Claude
This file is auto-loaded each session and travels with the folder, so it stays
valid even after the folder is renamed (`stream-studio``sing_detect_v2`).
## What this project is
A Windows desktop app (**Tauri 2**: Rust backend + TypeScript/WebView2 UI) that
**detects singing segments** in stream recordings and exports editor markers
(EDL / markers CSV / CSV / JSON). It is the **detection-only** spin-off of the
former "Stream Studio"; the video-concat feature was split into a **separate
project** (`video_concat_v5`, since moved out of this folder).
- Crate: `sing-detect` / lib `sing_detect_lib`. Product: **Sing Detect**.
- Detection runs a **Python 3.10 sidecar** (`sidecar/detect.py`,
inaSpeechSegmenter + TensorFlow). ffmpeg extracts a 16 kHz WAV first.
## Build / run (Windows)
- `dev.bat` — hot-reload dev.
- `build.bat` — MSI installer → `src-tauri\target\release\bundle\msi\`.
- `pack.bat`**standalone portable** folder → `dist-portable\SingDetect\`
(bundles `Sing Detect.exe` + ffmpeg/ffprobe + the Python `sidecar/`).
- Requirements on the build machine: Node, Rust (`winget install Rustlang.Rustup`),
VS 2022 C++ tools, ffmpeg at `C:\ffmpeg\bin` (or on PATH).
## ⚠️ State left by the rename (READ FIRST if a build fails)
- `src-tauri\target\` and `src-tauri\gen\` were **intentionally deleted** before
the folder rename, because cargo bakes absolute paths into `target\` and a
build under the old path name fails with `os error 3 (系统找不到指定的路径)`
referencing the old folder. **The first build after rename is a full ~58 min
recompile** — this is expected, not an error.
- `node_modules\` and `dist-portable\SingDetect\` were kept (relocatable /
self-contained). The existing `Sing Detect.exe` in `dist-portable\` works
regardless of the folder name.
- Do **not** keep `target\` in a Nextcloud-synced location — it re-introduces the
stale-absolute-path build failure across machines.
## Detection environment (per-machine)
- Needs **Python 3.10** (TensorFlow has no 3.12+ support). The app's in-UI
**"Test detection engine"** button checks the env and auto-installs the ML
packages + downloads the model on first run (or run `sidecar\setup_sidecar.bat`).
- Setup uses **default international PyPI** and does no proxy manipulation — pip
and the model download just inherit the system network settings, so a VPN/proxy
(e.g. Clash) routes them normally. Keep pip reasonably current: the very old pip
21.2.3 bundled with Python **3.10.0** crashes through an HTTP proxy
(`check_hostname requires server_hostname`); installing **Python 3.10.11**
(ships a modern pip) or running `py -3.10 -m pip install -U pip` once avoids it.
## Notable backend behavior
- Long ops (`detect_songs`, `setup_detection`, `export_segments`) run via
`spawn_blocking` so the window stays responsive (not "未响应").
- `cancel` kills the whole **process tree** (`taskkill /F /T`), because
`py -3.10` spawns `python.exe` as a child — killing only `py` left it running.