Spaces:
Sleeping
Sleeping
File size: 14,476 Bytes
b8fa9bf 0b5f0f0 b8fa9bf e33cc90 8c10624 0b5f0f0 8c10624 3703c4e ce84147 3703c4e b8fa9bf 3e9170f b8fa9bf ce84147 3703c4e b8fa9bf 0b5f0f0 3703c4e 0b5f0f0 e07820e b8fa9bf 3703c4e b8fa9bf 3703c4e b8fa9bf 3703c4e b8fa9bf 03d531b e07820e 03d531b e07820e f08496f 3e9170f 8c10624 7f1f066 ab6f318 f026127 fa35534 5a90820 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 | # Feature inventory
Last updated: 2026-05-12
## Product goal
Turn an input audio file into a practical drum sample pack: detected hits, grouped sample classes, representative WAVs, optional synthesized alternates, MIDI reconstruction, target-stem reconstruction, full-context reproduced audio, and an inspectable manifest.
## Implemented features
| Area | Feature | Status | Notes |
|---|---|---:|---|
| UI | Custom browser frontend | Implemented | `web/index.html`, `web/styles.css`, `web/app.js`; no Gradio dependency in active app. |
| UI | Explicit upload button | Implemented | Top bar contains a visible `Upload audio` control. |
| UI | Whole-app drag/drop audio upload | Implemented | Dropping files anywhere on the app selects the file and shows a drop overlay during drag. |
| UI | Clean fixed non-scrolling workstation layout | Implemented | Body is viewport-locked; primary workflow stays visible; secondary tools live in collapsed left/right sidebars and a compact bottom dock; long content scrolls inside panels only. |
| UI | Minimal custom transport | Implemented | One play/time/progress row can audition Source, Stem, or Reproduced previews; completed runs default to Reproduced. |
| UI | Common vs advanced parameters | Implemented | Default view shows stem, sensitivity, group count, and two presets; helper copy and advanced model/DSP/export controls stay hidden until the user opens the relevant panel. |
| UI | Streaming progress | Implemented | Uses `EventSource` over `GET /api/jobs/{id}/events`, with polling fallback. |
| UI | Visible request/runtime errors | Implemented | Failed API requests and pipeline errors appear in a global error banner and are also written to summary/log panels. |
| UI | Waveform/onset overview | Implemented | Canvas envelope plus clickable onset markers from `manifest.json`. |
| UI | Result downloads | Implemented | ZIP, MIDI, stem WAV, reconstruction WAV, individual sample WAVs, and per-hit review WAVs. |
| UI | Run history browser | Implemented | Lists completed `.runs/*/output/manifest.json` entries and reloads results. |
| UI | Hit and sample audition | Implemented | Click-to-audition via hidden audio elements keeps the default screen clean. |
| API | Health/config | Implemented | `GET /api/health`, `GET /api/config`. |
| API | Job creation/status | Implemented | `POST /api/jobs`, `GET /api/jobs/{id}`. Browser-style string params are coerced before validation. |
| API | SSE job events | Implemented | `GET /api/jobs/{id}/events` streams job snapshots until complete/error. |
| API | Run listing | Implemented | `GET /api/jobs` returns active and completed runs. |
| API | Safe artifact serving | Implemented | Path traversal is blocked by resolved output-root checks. |
| API | Cache clear | Implemented | Clears in-memory DSP cache and disk stem/source cache. |
| Pipeline | Demucs stem extraction | Implemented | Offline/batch stage; not advertised as realtime. |
| Pipeline | Stem/full-mix disk cache | Implemented | Keyed by source SHA-256 plus stem/model/shifts/overlap/device. |
| Pipeline | BPM detection | Implemented | `librosa` onset/beat based estimate. |
| Pipeline | SuperFlux-style onset detection | Implemented | Multi-band auto mode plus percussive/harmonic/broadband modes. |
| Pipeline | Hit classification | Implemented | Rule-based spectral class labels. |
| Pipeline | Batch quality clustering | Implemented | Mel prefilter + transient NCC + agglomerative clustering. |
| Pipeline | Online preview clustering | Implemented | Prototype-based incremental assignment for near-realtime feedback. |
| Pipeline | Representative selection | Implemented | Quality score picks best hit per cluster. |
| Pipeline | Optional synthesis | Implemented | Weighted aligned average for multi-hit clusters. |
| Pipeline | MIDI export | Implemented | Quantized or unquantized reconstruction MIDI. |
| Pipeline | Target reconstruction render | Implemented | Renders the selected sample representatives from MIDI/onset timing and matches RMS to the target stem. |
| Pipeline | Full-context reproduced mix | Implemented | Writes `reconstruction.wav` as non-target context bed plus target reconstruction, so separated-stem runs incorporate all other stems. |
| Pipeline | Per-hit review export | Implemented | Writes every accepted detected hit to `review/hits/*.wav` and records rows in the manifest. |
| Pipeline | Sample pack ZIP | Implemented | Includes WAVs, index JSON, MIDI, full-context reproduced mix, and target-stem reconstruction. |
| Supervision | Edited artifact re-export | Implemented | `supervised_export.py` writes edited samples, MIDI, reconstruction, ZIP, and `supervised/manifest.json`. |
| Supervision | Force-onset from waveform | Implemented | Adds user-forced hit slices from cached `stem.wav`; UI add-onset mode posts to `/hits/force-onset`. |
| Supervision | Suppressed-hit restore | Implemented | Restore endpoint and UI button reverse suppression without undoing unrelated edits. |
| Supervision | Suggestion diff previews | Implemented | Open suggestions include exact hit/cluster before-after previews and a UI `Diff` button. |
| Docs | Project review | Implemented | `docs/PROJECT_REVIEW.md`. |
| Docs | Timing/realtime analysis | Implemented | `docs/PIPELINE_TIMING_AND_REALTIME.md`. |
| Docs | API docs | Implemented | `docs/API.md`. |
| Docs | UI replacement docs | Implemented | `docs/UI_REPLACEMENT.md`. |
| Docs | Feature/task/progress tracking | Implemented | This file, `TASKS.md`, `PROGRESS.md`. |
| Docs | Hit review and streaming docs | Implemented | `docs/HIT_REVIEW_AND_STREAMING.md`. |
## Partially implemented features
| Area | Feature | Current state | Needed to call it complete |
|---|---|---|---|
| Progress | Stage progress | SSE streams stage boundaries and logs | Add lower-level progress inside Demucs and clustering. |
| Realtime | Online clustering | Implemented as batch-invoked prototype assignment | Add streaming/incremental audio analysis API for true realtime preview. |
| Run history | Manifest browser | Lists and reloads completed runs | Add side-by-side comparison and filtering/search. |
| Editing | Review workflow | Click-to-audition for hits and samples is implemented | Add onset editing, cluster merge/split, label reassignment. |
| Frontend quality | No-build JavaScript UI | Good enough for local app | Convert to TypeScript once interaction model stabilizes. |
## Explicit non-goals for this pass
- Realtime Demucs. It is not realistic for this use-case and should remain offline/cached.
- Perfect source separation. Stem quality depends on model choice and input material.
- Full DAW/sample-editor UX. This pass creates the workstation foundation; detailed editing is next.
## Interactive supervised UX features
| Area | Feature | Status | Notes |
|---|---|---|---|
| Supervision | Supplied UX docs embedded | Implemented | Added and aligned under `docs/interactive-ux/`. |
| Supervision | Persistent semantic state | Implemented | `supervision_state.json` is created beside each run manifest. |
| Supervision | Hit/cluster state model | Implemented | State tracks current cluster assignment, confidence, suppression, favorite/review flags, and representatives. |
| Supervision | Constraint store | Implemented | Stores `force-cluster`, `must-link`, `cannot-link`, `lock-cluster`, `suppress-pattern`, and `pin-representative`. |
| Supervision | Event log | Implemented | State changes append replay/audit events. |
| Supervision | Undo stack | Implemented | Last semantic edit can be undone. |
| Supervision | Confidence scoring | Partial | Heuristic and deterministic; does not yet use cached mel/transient feature margins. |
| Supervision | Outlier-first review queue | Implemented | UI prioritizes low-confidence/singleton/unstable hits. |
| Supervision | Move hit to cluster | Implemented | Creates supervision constraints and may produce suggestions. |
| Supervision | Pull hit into new cluster | Implemented | Creates a user cluster and cannot-link/force-cluster constraints. |
| Supervision | Lock cluster | Implemented | Lock state persists and updates confidence/UI. |
| Supervision | Suppress hit as bleed | Implemented | Marks hit suppressed, stores suppress-pattern, may suggest similar suppressions. |
| Supervision | Favorite representative | Implemented | Pins semantic representative and supervised export honors it before quality scoring. |
| Supervision | Suggestion inbox | Implemented | Move/split/suppress suggestions can be accepted/rejected and inspected with exact diff previews. |
| Supervision | Cluster explanation | Implemented | Backend and UI show confidence reasons, label distribution, outliers, and constraints. |
| Supervision | Edited artifact re-export | Implemented | Exports edited state into `supervised/` without mutating original batch artifacts. |
| Supervision | Force-onset from waveform | Implemented | Add-onset mode turns waveform clicks into forced hit slices from `stem.wav`. |
## Visual/UI experience
Status: implemented.
- Light, minimal, waveform-first interface closely aligned with the supplied reference composition.
- Compact top file selector plus one primary purple extract action.
- Quiet main waveform card with colored onset markers and click-to-select / force-onset behavior.
- One custom preview transport row instead of multiple native audio players.
- Right-side core-control card now exposes only stem, sensitivity, cluster count, and export samples in the default view.
- Fast modes, DSP/model parameters, pipeline logs, history, supervision, and raw tables are hidden behind `Advanced` / `Review & edit`.
- Extracted samples render as auditionable cards with waveform thumbnails and minimal labels.
## Clean default UI status
Status: implemented.
- Secondary panels are collapsed by default so the first screen is no longer dominated by logs, history, exports, or review/edit tools.
- The bottom dock stays as a small tab bar until a tool is opened.
- The top bar, sidebars, common controls, transport, and sample cards were tightened to give the waveform/sample workspace more room.
- No feature was removed; advanced and supervised tools remain available through expandable panels.
## Immediate waveform and guided flow
- Uploading or dropping a file now renders the source waveform in the browser before extraction starts.
- The left sidebar contains a compact `Start here` sequence: Load audio, set controls, extract, review/export.
- The waveform HUD states the current step and current progress status.
- The Source transport is available immediately after upload.
## Real progress visualization
- Job payloads and SSE updates include a top-level `progress` object.
- The waveform is tinted in two colors during active extraction: accent for completed work, neutral for remaining work.
- Demucs stem extraction reports exact completed split chunks when running separated-stem extraction.
- Stages that do not expose internal chunk progress update only at exact stage boundaries.
- The UI does not synthesize estimated progress or ETA.
## Pass: automatic card-flow UX
| Area | Feature | Status | Notes |
|---|---|---:|---|
| UI | Drop/upload starts processing automatically | Implemented | File selection calls the same job API without requiring the user to find a separate start button. |
| UI | Progressive sample cards | Implemented | Backend emits `sample` progress events and active jobs expose `partial_samples`. |
| UI | Grouped sample columns | Implemented | Cards are grouped by kick/snare/hihat/cymbal/tom/perc/other. |
| UI | Draw another candidate | Implemented | Column-level `Draw` action picks another detected hit candidate of that type. |
| UI | Dismiss card | Implemented | Hides the card locally and attempts to suppress its representative hit in supervised state. |
| UI | Trim/extend card | Implemented | Simple card controls adjust proposed timing and can save a forced hit. |
| UI | Zoomable/pannable waveform | Implemented | Pinch/ctrl-wheel zoom and horizontal/shift-wheel pan. |
| Pipeline | Automatic tuning | Implemented | `auto_tune=true` chooses onset sensitivity and grouping bounds from the separated target stem. |
| Export | MIDI fallback | Implemented | Missing `pretty_midi` no longer breaks extraction; a compact fallback MIDI writer is used. |
## Reference-style visual workflow
- The default web UI is now a reference-style sample extractor workspace: compact top bar, large waveform, persistent settings panel, grouped sample columns, and bottom selection bar.
- Users can still just drop audio anywhere; waveform rendering and extraction begin automatically.
- Expert parameters and semantic editing tools are available without cluttering the default path.
## Selected cards and backend simplification update
Implemented after the reference-image UI pass:
| Area | Feature | Status | Notes |
|---|---|---:|---|
| Separation | Spleeter backend | Implemented | Default backend, with `spleeter:4stems` selected by default. |
| Separation | Demucs backend | Implemented | Explicit higher-cost backend and automatic fallback when enabled. |
| Separation | No-separation backend | Implemented | Full-mix preview path for fastest iteration. |
| Export | Per-card selection | Implemented | Cards have real checkbox state; selected count drives `Export Selected`. |
| Export | Selected-only export | Implemented | `POST /api/jobs/{job_id}/export-selected` writes `selected/sample-pack.zip`. |
| Cards | Draw another | Implemented | Persists the next representative hit as a semantic override. |
| Cards | Trim/extend preview | Implemented | Rewrites a playable preview WAV immediately under `overrides/hits/`. |
| Docs | Separation backend docs | Implemented | See `docs/SPLEETER_AND_SEPARATION_BACKENDS.md`. |
| Docs | Card action docs | Implemented | See `docs/CARD_SELECTION_EXPORT_AND_EDITING.md`. |
## Upload/runtime fallback update (2026-05-12)
- Added a visible top-bar `Choose audio` affordance in addition to whole-app drag/drop.
- Fixed the default hidden state of the error banner so placeholder errors are not shown on page load.
- API errors now surface request path/status/detail in the visible banner and pipeline logs.
- `/api/config` now includes runtime diagnostics for optional separation backends.
- If Spleeter is unavailable, the simple UI keeps the app usable by switching to full-mix mode; backend fallback also uses full-mix rather than silently launching Demucs.
|