Spaces:
Sleeping
Sleeping
File size: 8,964 Bytes
eb1a122 b8fa9bf eb1a122 b8fa9bf eb1a122 3e9170f b8fa9bf eb1a122 f08496f 3e9170f f08496f 3e9170f f08496f 3e9170f f08496f 3e9170f 0b5f0f0 3e9170f f08496f e33cc90 eb1a122 e33cc90 0b5f0f0 e33cc90 eb1a122 b8fa9bf eb1a122 0b5f0f0 eb1a122 b8fa9bf f08496f eb1a122 f08496f eb1a122 e33cc90 3e9170f eb1a122 b8fa9bf 3703c4e 3e9170f 3703c4e 0b5f0f0 8c10624 7f1f066 | 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 | # Custom UI replacement
Last updated: 2026-05-12
## What changed
The active interface is a custom browser UI served from `web/` by the FastAPI app in `app.py`. The old Gradio files live in `legacy/` and are no longer used by the active application.
## UX goals
1. Match the supplied minimal reference image as the default view: file identity, one purple extract action, large waveform, compact right controls, and sample cards.
2. Keep the first screen focused on extraction and audition, not pipeline/debug/editor internals.
3. Preserve advanced workstation features behind a single secondary `Review & edit` workbench.
4. Keep stage timing, logs, run history, and semantic supervision available without dominating the default layout.
5. Make `stem=all` and `online_preview` available as advanced presets instead of primary controls.
6. Keep the frontend deployable without a JavaScript build step until the interaction model stabilizes.
## Pass 6 visual simplification
The UI was first restyled to the supplied minimal reference direction:
- light native-feeling canvas instead of the previous dark dashboard;
- compact top bar with file selector/status and one primary purple `Extract Samples` action;
- large waveform-first workspace with colored lollipop onset markers;
- right-side control card for the primary extraction decisions;
- advanced DSP/model parameters moved into a collapsible panel;
- representative samples rendered as auditionable cards with waveform thumbnails;
- pipeline, run history, supervision, and raw tables kept available as collapsible utility panels.
## Pass 7 reference-alignment hardening
This pass closed the visual fidelity gaps from the previous approximation:
- removed the visible waveform header so the canvas is quiet like the reference image;
- replaced separate native stem/reconstruction audio controls with one minimal transport row: play button, time, progress line, and Source/Stem/Reproduced preview modes;
- renamed the right card to `Common controls` and limited it to stem, hit sensitivity, sample groups, plus fast-preview/best-quality presets;
- collapsed pipeline/history/supervision/tables into one `Review & edit` workbench below the sample cards;
- hid selected-hit/sample audio elements from the default layout while preserving click-to-audition behavior;
- tightened card spacing, border radii, font scale, waveform height, and sample-card proportions to better match the supplied image.
The UI is still not a pixel-for-pixel clone because it must remain functional across arbitrary audio files and preserve the project’s editing tools, but the default screen is now intentionally aligned with the reference composition.
## Pass 8 fixed workstation layout
This pass responds to the no-scroll workstation requirement and the missing-upload affordance:
- the document body is fixed to the viewport with `overflow: hidden`;
- the app uses a top bar, left sidebar, center workspace, right sidebar, and bottom dock;
- pipeline/history/selection tools moved into the left sidebar;
- extraction/export/advanced controls moved into the right sidebar;
- semantic review/edit tools and raw tables moved into the bottom bar;
- all long content now scrolls only inside its own panel;
- the upload affordance is now an explicit `Upload audio` button in the top bar;
- dropping a file anywhere on the app loads it and shows a full-screen drop overlay while dragging.
## UI structure
| Area | Purpose |
|---|---|
| Top bar | App identity, explicit upload button, selected-file metadata, backend status, and one primary purple `Extract Samples` action. |
| Left sidebar | Source/drop guidance, selected-hit/sample context, pipeline logs, and run history. |
| Center workspace | Quiet waveform canvas, Source/Stem/Reproduced transport row, and representative sample cards. |
| Right sidebar | Common controls, exports, and collapsed advanced parameters grouped by stem separation, hit detection, grouping, export, and cache. |
| Bottom dock | Review/edit semantic supervision tools and raw tables in expandable panels. |
## Frontend implementation
Files:
- `web/index.html`
- `web/styles.css`
- `web/app.js`
The frontend uses modern browser APIs directly:
- `fetch` for API calls.
- `FormData` for upload.
- `<audio>` for previews.
- `<canvas>` for waveform/onset visualization.
- CSS grid, responsive layout, custom properties, and backdrop filters for layout/polish.
No Gradio runtime, iframe, or generated UI framework is involved.
## Backend integration
The frontend creates a job with `POST /api/jobs`, then polls `GET /api/jobs/{id}` until completion. Completed jobs expose direct download URLs for:
- sample pack ZIP
- MIDI reconstruction
- source mix WAV
- target stem WAV
- non-target context bed WAV
- target reconstruction WAV
- full-context reproduced mix WAV
- individual sample WAVs
The run history panel calls `GET /api/jobs` and can reload any completed manifest still present under `.runs/`.
## Clustering UX
Two modes are exposed:
| Mode | UX intent |
|---|---|
| `batch_quality` | Slower, final-quality clustering using all-pairs similarity plus agglomerative clustering. |
| `online_preview` | Faster near-realtime-style clustering using prototype assignment. Best for quick iteration after bypassing Demucs. |
## Why SSE progress with polling fallback instead of websockets
The active UI uses Server-Sent Events through `GET /api/jobs/{job_id}/events` for stage/log updates, with the older polling loop retained as a fallback. WebSockets are unnecessary here because the pipeline is stage-oriented and the frontend does not need bidirectional streaming while extraction runs.
## Remaining UI improvements
- Add waveform zoom/pan while keeping the fixed workstation layout uncluttered.
- Add inline cluster merge/split/relabel workflows inside `Review & edit`.
- Add A/B comparison between parameter runs.
- Add downloadable timing report per job.
- Add filters/search to the run history browser.
- Convert the frontend to TypeScript when the UX stops moving quickly.
## Latest review UI additions
The current UI now includes:
- Hidden selected-hit and selected-sample audio elements for click-to-audition without visible player clutter.
- Clickable waveform onset markers that select and audition the nearest detected hit.
- A detected-hit review table backed by `review/hits/*.wav` artifacts.
- Audition buttons for representative sample rows.
- Server-sent-events job progress via `GET /api/jobs/{job_id}/events`, with polling fallback.
This still stops short of destructive editing. The next UI layer should store edits as manifest overlays, then call a re-export endpoint that reuses cached hit audio instead of rerunning Demucs/onset detection.
## Pass 9 reproduced audio and parameter hierarchy
This pass made the audio preview and control model more explicit:
- `reconstruction.wav` is now a full-context reproduced mix, not just the sample-triggered target layer.
- `target_reconstruction.wav` preserves the sample-only target reconstruction for focused inspection.
- `source.wav`, `stem.wav`, and `context_bed.wav` are exported as explicit layers.
- The transport has Source, Stem, and Reproduced preview buttons and switches to Reproduced after extraction.
- The right sidebar now separates Common controls from Advanced parameters.
- Advanced parameters are grouped by pipeline stage: stem separation, hit detection, grouping, export/cache.
See `docs/REPRODUCED_AUDIO_AND_PARAMETERS.md`.
## Pass 10 clean-default refinement
This pass responds to the UI being too cluttered after the workstation and reproduced-audio additions.
Changes:
- all non-essential side/bottom panels are collapsed by default;
- the bottom dock is compact until a review/table tool is opened;
- top-bar controls are shorter and visually lighter;
- common controls hide explanatory copy and show only the core knobs;
- pipeline logs, run history, exports, supervision, and raw tables remain present but opt-in;
- the no-scroll workstation constraint is preserved.
See `docs/CLEAN_DEFAULT_UI.md`.
## Immediate waveform and extraction progress update
The default workflow now starts with visible feedback: selecting or dropping a file causes the browser to decode the uploaded audio and render a peak-envelope waveform immediately. This happens before `/api/jobs` is called. The user can play the uploaded source through the transport while choosing common controls.
During extraction, the waveform is reused as the progress surface. The backend sends a real `progress` object through the normal job payload and SSE stream. The frontend clips an accent-colored copy of the waveform from the left to exactly that progress fraction and leaves the remaining waveform neutral. No estimated time progress is animated.
A compact `Start here` panel was added to the left sidebar to make the sequence obvious: Load audio → Set controls → Extract → Review/export.
|