How greenwoodc/reaper works
Reaper is a web-driven music pipeline: users upload playlist CSVs, scan Navidrome for tracks, download and import missing music, then rescan and create or update a Navidrome playlist. The graph includes the wizard and dashboard, backend job/API control, core matching and playlist stages, and settings. Download/import execution is documented, but its shell scripts are absent from the supplied tree; those details are therefore represented at the backend job layer. Some backend route and job wiring was not excerpted, so uncertain implementation links are omitted.
Main entry points: routes.py Flask API · api.ts Frontend API client · scan.py Initial library scan · rescan.py Library rescan
Components 20
Web interface
- Pipeline wizard
frontend/src/components/Wizard.tsx - Upload and scan UI
frontend/src/components/UploadStep.tsx - Download UI
frontend/src/components/DownloadStep.tsx - Finalize UI
frontend/src/components/FinalizeStep.tsx - Playlist dashboard
frontend/src/components/PlaylistDashboard.tsx - Settings form
frontend/src/components/SettingsForm.tsx
API and jobs
- Frontend API client
frontend/src/lib/api.ts - Flask API
backend/routes.py - Job runtime
backend/jobs.py
Playlist pipeline
- Pipeline configuration
core/config.py - Initial library scan
core/scan.py - Track matching
core/matching.py - Search cleanup
core/cleanup.py - Library rescan
core/rescan.py - Playlist creation
core/create_playlist.py - Settings persistence
core/settings.py
State and integrations
- Playlist working files
- Navidrome server
- Soulseek and beets
Other components
- Playlist user
Connections 33
- Playlist user → Pipeline wizard: operates
- Pipeline wizard → Upload and scan UI: presents
frontend/src/components/Wizard.tsx - Pipeline wizard → Download UI: presents
frontend/src/components/Wizard.tsx - Pipeline wizard → Finalize UI: presents
frontend/src/components/Wizard.tsx - Playlist user → Playlist dashboard: resumes playlists
- Playlist user → Settings form: configures
- Upload and scan UI → Frontend API client: uploads CSV
frontend/src/lib/api.ts - Download UI → Frontend API client: starts jobs
frontend/src/components/DownloadStep.tsx - Finalize UI → Frontend API client: starts finalize
frontend/src/lib/api.ts - Playlist dashboard → Frontend API client: manages playlists
frontend/src/lib/api.ts - Settings form → Frontend API client: updates settings
frontend/src/lib/api.ts - Frontend API client → Flask API: calls HTTP API
frontend/src/lib/api.ts - Flask API → Initial library scan: runs scan
backend/routes.py - Flask API → Search cleanup: previews cleanup
backend/routes.py - Flask API → Library rescan: runs rescan
backend/routes.py - Flask API → Playlist creation: creates playlist
backend/routes.py - Flask API → Settings persistence: reads and writes
backend/routes.py - Flask API → Job runtime: manages jobs
backend/routes.py - Initial library scan → Track matching: matches tracks
core/scan.py - Library rescan → Track matching: matches tracks
core/rescan.py - Initial library scan → Navidrome server: searches library
- Library rescan → Navidrome server: rescans and searches
- Playlist creation → Navidrome server: creates or updates
- Flask API → Soulseek and beets: drives download and import
- Soulseek and beets → Playlist working files: uses playlist staging
- Initial library scan → Playlist working files: writes scan results
- Library rescan → Playlist working files: updates results
- Playlist creation → Playlist working files: reads matched tracks
- Settings persistence → Pipeline configuration: loads configuration
core/settings.py - Initial library scan → Pipeline configuration: uses settings
core/scan.py - Library rescan → Pipeline configuration: uses settings
core/rescan.py - Playlist creation → Pipeline configuration: uses ordering
core/create_playlist.py - Search cleanup → Soulseek and beets: prepares search terms