Files
sing_detect/CLAUDE.md
youfu 4887981a2d 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>
2026-06-26 23:12:25 +08:00

53 lines
3.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.