Skip to content

UI/UX pass: working help, unsaved-changes prompt, clear hierarchy, Default Streaming default - #10

Merged
soficis merged 6 commits into
feat/tensor-inferencefrom
feat/ui-ux-pass
Oct 5, 2026
Merged

soficis merged 6 commits into
feat/tensor-inferencefrom
feat/ui-ux-pass

Conversation

@soficis

@soficis soficis commented Oct 5, 2026

Copy link
Copy Markdown
Owner

Summary

A UI/UX pass from a heuristic review of the running app. UI-only: the renderer chain, RendererPipeline and applyPlan() stage order are untouched. Stacked on #9 (feat/tensor-inference).

Bugs

  • The keyboard shortcuts dialog ("?" / Ctrl+/) was never added to the desktop, so it never appeared and swallowed the next click. It now opens as a DialogWindow, and key names show as letters instead of numbers.
  • The stray "8212" under the batch area (an em dash built with the integer juce::String constructor) is gone.
  • The Clear confirmation no longer contradicts itself or shows an internal ticket id: "Remove all N stems from this session? This can't be undone."
  • The status badge failed contrast (white on grey, about 2.8:1). It now uses dark text where needed, and READY replaces IDLE.

Unsaved work

  • Closing with unsaved changes asks Save / Don't Save / Cancel. The header shows * while the session differs from the last save or load.

Defaults

  • New sessions default to the Default Streaming master preset instead of Udio Optimized. Sessions saved without a preset also load as Default Streaming.

Hierarchy and empty state

  • Buttons come in four styles: primary, secondary, quiet and danger. Import is the one primary action until stems exist. Save, Load, Models and Settings are quiet links, and Clear is styled as destructive. Disabled buttons are outlined, not filled.
  • Actions that need stems (and the transport) are disabled until stems are imported.
  • The empty waveform is a bordered drop zone that highlights on drag and opens Import on click.

Controls and wording

  • Vocal Model and the model name appear only when AI Stem Separation is on, and models get plain names (for example "BS-RoFormer (best quality, GPU recommended)").
  • Renderer and Active chain moved into Advanced. Combos are wider, with tooltips for Master, Platform, Renderer and Mode.
  • Accessibility titles on combos, sliders, transport buttons and meters.

Less noise

  • Meters read -- with no signal instead of -70.0.
  • The batch strip shows only while a batch has items. Nothing fed it before, so it only ever showed placeholders.
  • The log is collapsible, collapsed by default, and opens on failure. Dialog-open lines are no longer logged, and the idle progress bar is hidden.
  • The header profile dropdown, which was never populated, is hidden. The deck's Profile combo is the single profile control.

Dialogs and layout

  • Settings has Export, GPU acceleration and Audio output sections, and removing the GPU runtime now asks first.
  • The Model Browser opens at 760x560, so its buttons are no longer clipped.
  • At the 960x640 minimum window size, the settings row wraps instead of clipping Platform, and action buttons use a compact font instead of wrapping.

Testing

  • Windows Release: ctest 270/270 pass (two GPU tensor probes skip without the hardware). This includes the golden and regression tests, which are unchanged by the new default preset.
  • New unit tests: ControlDeck stem gating, separation visibility, meter formatting, layout at 940 and 1500 px; TaskCenterPanel batch strip, log and idle progress visibility; session isModified(); the default preset.
  • Checked in the running app: the shortcuts dialog; the * marker and quit prompt (Cancel stays, Don't Save quits, no false * at startup); the GPU-removal confirmation (Cancel keeps the runtime); meters, log and progress in the idle state; layout at 960x640.

Not verified

  • Save → choose a file → quit.
  • The drag-over highlight.
  • Click-to-import: only the code wiring was checked.
  • Mix + Master becoming the primary button once stems are loaded.

Known gaps (already there, not addressed)

  • No live batch progress: nothing updates the batch strip during a run.
  • No undo: Ctrl+Z only logs "no undo history".

🤖 Generated with Claude Code

soficis and others added 6 commits October 5, 2026 15:26
…tatus badge, Default Streaming as the default master

- The shortcuts dialog was never added to the desktop, so "?" and Ctrl+/ showed
  nothing and swallowed the next click; it now opens as a DialogWindow. Key names
  and the batch em dash were built with the integer String constructor ("8212").
- Closing with unsaved changes now asks Save / Don't Save / Cancel; the header shows
  "*" while the session differs from the last save or load.
- Clear's confirmation no longer contradicts itself or shows an internal ticket id.
- The status badge uses dark text where white failed contrast; READY replaces IDLE.
- New sessions default to the Default Streaming master preset instead of Udio Optimized.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…age separation controls

- Button variants (primary/secondary/quiet/danger): Import is the one primary action
  until stems exist, then Mix + Master; Save/Load/Models/Settings are quiet; Clear is
  styled as destructive.
- Actions that need stems are disabled until stems are imported; transport too.
- The empty waveform is a bordered drop zone that highlights on drag and opens
  Import on click.
- Vocal Model and the model name appear only when AI Stem Separation is on; model
  names are plain language instead of Hugging Face repo ids.
- Renderer and Active chain move into Advanced; combos widened; tooltips for Master,
  Platform, Renderer and Mode; accessibility titles for combos, sliders and transport.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…at the minimum window size

- The batch strip shows only while a batch has items (nothing fed it before, so it
  only ever showed placeholders); the log is collapsible, collapsed by default, and
  opens on failure; dialog-open noise is no longer logged; idle progress is hidden.
- Meters read "--" instead of -70.0 when there is no signal.
- The header profile selector, which was never populated, is hidden; the deck's
  Profile combo is the single profile control.
- Settings has Export / GPU acceleration / Audio output sections, and removing the
  GPU runtime asks first. The Model Browser opens at 760x560.
- Disabled buttons are outlined instead of filled, so they no longer outshine enabled ones.
- At 960x640 the settings row wraps instead of clipping Platform, and action buttons
  use a compact font instead of wrapping.
- Tests: ControlDeck stem gating, separation visibility, meter formatting and layout
  at 940/1500 px; TaskCenterPanel batch strip, log and idle progress visibility.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…, restore the single-file tip

- Quitting while a task runs now asks first, then continues into the
  unsaved-changes prompt.
- The empty state opens Import only on a left click released inside it,
  and only when the session has no stems; stems without a preview show
  "Preview unavailable" instead of the import prompt.
- The empty state again points single-file users at AI Stem Separation.
- Session files saved before the master preset field existed load as
  Udio Optimized again, as they were mastered; new sessions still
  default to Default Streaming.
- Unit tests cover the quit decision, the click decision and the
  preset fallback.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nus glyph and clipped meter captions

README
- Corrects the shortcuts (Ctrl+Shift+A is Auto Master; Ctrl+/ opens the
  shortcut list) and the inference notes, which still said no audio-tensor
  path exists.
- Adds presets, the light vocal model, export formats and sessions.
- Build steps and developer notes move into collapsed sections.

UI
- The zoom-out button showed "?": a \u escape in a narrow string is
  mangled by MSVC. It is now UTF-8 bytes.
- The L/R captions were drawn above the meter panel and clipped.
- The loudness bar was painted behind the first readout.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@soficis
soficis merged commit 00cda93 into feat/tensor-inference Oct 5, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant