feat(app): unify into Bird Audio Analyzer — single Tauri app with Batch + Review modes - #2
Merged
Merged
Conversation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Rebuild the Tauri frontend around a "bioacoustic field instrument" aesthetic: the spectrogram color ramp (indigo→violet→magenta→coral→amber→gold) becomes the brand, on a warm darkroom-at-dusk base. Replaces the generic dark+Inter+blue look with a Fraunces / Hanken Grotesk / IBM Plex Mono type system. - index.css: full design system (CSS vars, spectrogram ramp, grain + aurora atmosphere, animated equalizer mark, spectrogram-playhead progress bar, staggered reveals, reduced-motion guard) - App.tsx: masthead shell + product name "Bird Audio Analyzer" - SetupView/RunView/FileTable/ManageCache: restyled to the new language; count-up completion stats. All props, state, and API wiring unchanged. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- docs/architecture.md: source-grounded system design with three
(render-verified) Mermaid diagrams — layered architecture, end-to-end
sequence, and the ML pipeline — plus the worker protocol, SQLite schema,
concurrency model, and a precise account of the theta_A (Detection
Sensitivity) and theta_B (Quality Filter) thresholds.
- README.md: classifier.pt is a completeness curator (p("full")), not a
species classifier; split Stage A / Stage B and link the new doc.
Force-added under docs/ (globally gitignored), matching existing tracked specs.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Splits the two apps that shared this repo. The root "Acoustic Field Station" Tauri/PWA frontend (src/, src-tauri/, root package.json/vite/ tsconfig, public/, *.ts scripts) is removed from this branch and now lives on leyang/pwa-prototype. Kept here: batch-app/ (Bird Batch Runner) and the shared Python ML pipeline both apps used (birdpipe/, scripts/*.py, models/, tests/, pyproject.toml, uv.lock, docs/). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
"README (from backup).md" was the default create-vite boilerplate tied to the removed root PWA; not the project README. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Add docs/batch-app.md: developer reference for the desktop app — repo layout, build/run, batch-core engine, NDJSON worker protocol, Tauri IPC surface, React frontend, CLI, config, testing, and packaging gotchas. - Rewrite README.md to cover the Bird Audio Analyzer desktop app (GUI + CLI) alongside the Python pipeline; fix uv install URL and stale output section; link the docs. - Add architecture.md $10 parameter reference (paper constants): audio/ windowing, Stage A YOLO, consolidation Table A.6 gates, Stage B Table A.8.
Make architecture.md the conceptual front-door (diagrams, ML pipeline, theta semantics, parameter reference) and defer protocol/schema/concurrency/export detail to batch-app.md, the reference. Trim the four duplicated sections to conceptual summaries that link into the reference; add a reciprocal link from the reference's data-flow section back to the architecture diagram. Single source of truth per topic; section numbers preserved.
…wrapper
Mirror the pwa-prototype layout for the existing batch app so the project has a
single root Cargo workspace and frontend, with no batch-app/ nesting.
- Move batch-app/{batch-core,src,src-tauri,Cargo.*,package*,index.html,
vite.config.ts,tsconfig*} up to the repo root. Content-identical renames —
every internal reference (batch-core path dep, frontendDist, npm scripts) was
already relative, so the uniform shift preserves them.
- Remove the stray orphan src-tauri/Cargo.lock and the now-empty batch-app/.
- Merge batch-app/.gitignore into the root .gitignore; ignore the workspace
/target, *.db sidecars, *.tsbuildinfo, and output/ export artifacts.
- Drop accidentally-committed artifacts: *.tsbuildinfo and the sample
output/events.csv export.
- Fix stale batch-app/ path references in README and docs.
No behavior change; Review-mode features are not included. Verified: tsc -b,
cargo check --workspace, cargo test -p batch-core (6/6).
Rebased onto the restructured leyang/prototype (batch app promoted to the repo root). The prior pwa-prototype history independently performed that same move, so this collapses it into a single feature delta over the shared root layout — this PR now shows only the Review-mode work, not the file moves (those are owned by the prototype restructure). - Review mode: curate ML events on the spectrogram (ReviewView, EventTable, AudioVisualizer event regions) — confirm / reject / reset, edit time-frequency bounds, add manual events, delete false positives. - batch-core: curation columns + event review/edit Store methods. - review/curation Tauri commands + asset-protocol audio access. - confirmed-only export filter (+ UI toggle). - Field Station design tokens; unified warm design language; motion/selection polish. - docs/USAGE.md step-by-step usage tutorial. Verified: tsc -b, cargo check --workspace.
leyangloh
force-pushed
the
leyang/pwa-prototype
branch
from
June 20, 2026 14:19
67ebaaa to
d0220ab
Compare
The on-mount checkHealth().then() had no .catch, so a rejected invoke (e.g. the frontend loaded outside the Tauri runtime) surfaced as an unhandled promise rejection. Mirror the adjacent checkCache().catch() pattern and fall back to a null health state.
…issues, and update documentation
…ird with waveform, and add loading spinners on waiting states
… Tauri desktop app and resolving conflicts
leyangloh
requested review from
Copilot and
heisenshtadt3
and removed request for
Copilot and
heisenshtadt3
June 23, 2026 03:28
heisenshtadt3
approved these changes
Jun 23, 2026
| @@ -0,0 +1 @@ | |||
| """Paper-faithful HLW buzz pipeline core (pure logic, no Torch).""" | |||
Collaborator
There was a problem hiding this comment.
I see the engine from Erik's original code - is the evaluation, preprocessor, etc in here all brand new? I'm guessing some of this has already been set up in Erik's code, I'll double check that it's fine for us to use a new version for now
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull Request: Unified Tauri Desktop App & Curation Pipeline (
leyang/pwa-prototype)🛠️ Overview
This Pull Request introduces the unified Tauri desktop application for the Bird Audio Analyzer. It consolidates the high-performance Python machine learning backend with an interactive desktop interface featuring two distinct workflow modes:
Here is the recorded walkthrough demonstrating the full end-to-end smoke test (starting the batch processing session, monitoring progress, viewing results, and curating detections in Review Mode):
Tip
You can also play or view the media files directly:
🚀 Setup & Execution Guide
Prerequisites
Ensure the following tools are installed on your environment:
Installation
Execute these commands from the repository root (
/Users/leyangloh/.warp/worktrees/bird-audio-pwa/cuesta-lechuguilla):Running the Desktop App (Development)
Launch the unified Tauri application in local developer mode:
Note
The initial launch will compile Rust crate dependencies (this may take a few minutes). Subsequent launches are cached and start incrementally.
🧪 Feature Testing & Verification Guide
Follow these steps to manually verify the application features end-to-end:
Step 1: Verify System Health Panel & Initialization
npm run tauri dev).models/buzz_localizer.ptandmodels/classifier.pt).Step 2: Test Batch Analysis Mode
/tmp/smoke_data).0(or your preferred test threshold).0.53(recommended default).▸ /tmp/smoke_data/file.wav).Step 3: Verify the Post-Run Dashboard & Charts
Step 4: Test Interactive Spectrogram Curation (Review Mode)
Step 5: Test Data Export
events.csv).💻 Running Automated Test Suites
For developer unit and integration verification, run the automated suites:
cargo test --workspaceto verify SQLite store functions and Tauri API route parsing (e.g. batch-core/src/store.rs and src-tauri/src/commands.rs).uv run pytestto verify YOLO windowing and consolidation algorithms (e.g. tests/test_stageb.py).📖 Related Documentation
For full architectural details, consult: