Skip to content

Release 0.20.0: Guide follow-ups and We Recommend - #764

Closed
thcp wants to merge 5 commits into
mainfrom
next-release
Closed

thcp wants to merge 5 commits into
mainfrom
next-release

Conversation

@thcp

@thcp thcp commented Oct 4, 2026

Copy link
Copy Markdown
Collaborator

Brings the last two changes for 0.20.0 into main. The first part of 0.20.0 (#752, #756, #758) is already on main through #759.

next-release still carries the three earlier commits under their pre-rebase ids, with the same content main has, so this is merged as a squash: it brings exactly the eight changed files and nothing twice.

Tested on the combined branch before merging: full Playwright 464 passed (one unrelated lyrics flake, 24 of 24 on rerun), and an automated run with real separation, 71 of 71 assertions.

Closes #760
Closes #761

thcp added 5 commits October 4, 2026 12:53
…nd, and a clear message for read-only portable installs (#752)

fix(desktop): stop with a clear message when a portable install cannot write its folder (#746)

A portable zip extracted under Program Files is not writable without admin.
Setup, the CUDA torch swap and the updater all write inside the install, so
it failed part way with "failed to write migration flag: Access is denied".

At startup, a portable package that cannot write its own folder now shows a
native error dialog naming the folder and where to move it, then exits.
Elevation is not offered: an elevated window cannot receive drag and drop
from Explorer, and every launch would prompt. The writability probe only
runs for a portable package, so no other install gets a file written into
its root at startup.

Closes #746


fix(queue): trashing a song mid-extraction stops it, and imports never take the studio (#747, #748)

#748: deleting a song from the library while it was extracting moved it to
the Trash and left the job running, hidden. A stuck one held the queue with
no way out, and after a restart it came back as a Paused row.

- Trashing a queued or running job now stops it on the server, so the phone
  gets it too. It settles as the new "stopped" status with its files kept:
  only emptying the Trash deletes files, the rule finished tracks follow.
- Restore brings it back to the library as Stopped. It does not queue it.
  An Extract button on the row (POST /api/jobs/{id}/extract) runs it again.
- A stopped job is saved to registry.json and survives a restart in the
  Trash. A trashed job interrupted by a restart is stopped, never resumed.
- Cancel now reaches the analyze stage: its ffmpeg is registered and it
  checks for cancel between steps.
- A cancel or trash that lost the race to a finishing job no longer leaves
  its flags set, which made later vocal splits cancel themselves at once.
- A cancelled job's folder is removed with the same retry delete_job uses.
- On load, a library row still saying Processing asks the server where the
  job stands.
- Queue rows use the library's trash icon.

#747: an import with nothing open put its name and "Extracting" on the Now
Playing card. Imports now always run in the background, and the first to
finish opens by itself only if the studio is still empty and nothing,
including a Sync again import, holds it.

Closes #747
Closes #748
Closes #750
Closes #751
…the Trash icon (#756)

feat(trash): hold a row for a second to restore it, pick several, and a count on the icon

Restoring from the Trash used to mean dragging one row at a time onto the
Library button, which nothing on screen explained, and a click on a
trashed row opened it in the studio as if it were not trashed.

Hovering a Trash row now turns its second line into "Hold left click for
1 second to restore". A click selects a row, Ctrl+click adds or removes
one, Shift+click takes a range. Holding the mouse button, or Enter, for a
second restores the row, or the whole selection when the row is part of
it; letting go early does nothing. Every row the hold will restore fills
while it is held.
Dragging onto Library still restores, the selection too. Restore never
queues a song again (#748).

The Trash icon carries the same count badge as the Queue, and its label
says how many songs are in it, so a full Trash is visible from anywhere.

Closes #749
Closes #755
feat(help): Guide in the rail makes the studio explain itself

Nothing in the studio said what its controls do, and a new user has to
press things to find out, which can start an extraction or delete a song.

Guide, in the rail below Trash, turns help mode on, and a pill at the
bottom says so. Pointing at a control, focusing it, or clicking it
outlines it and shows a box beside it with the control's own label and
what it does, in plain words. Nothing else is marked, so the screen
stays calm. While help mode is on, presses are taken by it, so
exploring never acts on the studio. Esc or Guide again turns it off.

The box covers the top bar, the rail, the song list, every lane control
(naming its instrument), the song facts, the waveforms and the bottom
bar. Settings lists every option, tab by tab, in one line each. Texts
are help.* keys in all ten languages.

Closes #757


fix(help): head a lane's M, S, + and K boxes with what they do

In help mode the box over a lane's M button was headed "M", and S, +
and the K box the same: the heading took the visible text first, and
for these it is one character. Someone who does not know what M means
learned nothing from the heading.

A visible text of one or two characters now gives way to the button's
full label ("Mute Drums", "Transpose Drums up one semitone"). The K box
has no label of its own, so it gets one: "Key of Drums", in all ten
languages.

Refs #757
…o song open (#762)

feat(help): Guide shows where to point, explains each song fact, and works with no song open

Three gaps in help mode, found by using it:

- Turning Guide on gave no hint of where to point. Every control it can
  explain now glows once, for about a second and a half, and fades, so the
  screen stays calm afterwards. Large areas such as the waveforms are left
  out of the glow.
- The row of song facts was explained as one block. Each card now explains
  itself: key and how sure its guess is, BPM, LUFS, duration, dynamic range,
  tempo stability, and every presence card, naming its instrument.
- With no song open, the studio switches Export Mix, the song details
  button and the analysis cards off for the pointer, so help mode never
  heard it over them. In help mode they receive the pointer again; Guide
  still takes every click, so nothing is pressed by accident.

Closes #760
…763)

feat(recommend): Adrianna Claro on We Recommend, and partner cards with several links

Adrianna Claro, a soul and contemporary R&B singer, songwriter and
composer, joins Artists & Creators, with her photo and her music on
Spotify and Apple Music. Killah Trakz gains Spotify and Apple Music
beside Instagram, and NIHIL gains Spotify.

A partner card could only hold one link, because the whole card was the
link. A card can now carry several: it is then a plain card with one
labelled pill per destination, since a link inside a link is invalid
HTML and which one a click follows is up to the browser. A card with a
single url stays a link as a whole, exactly as before.

The README table lists the same links, and is now sorted by category,
then name, the order the app already shows them in.

Closes #761
Comment thread tests/test_jobs_trash.py
job, job_dir = _queued_upload("888888888886")
client.post(f"/api/jobs/{job.id}/trash")

assert client.delete(f"/api/jobs/{job.id}").status_code == 200
@thcp

thcp commented Oct 4, 2026

Copy link
Copy Markdown
Collaborator Author

Replaced by a PR from release/0.20.0-final, which has the same content on top of main. This one conflicts because next-release still carries the three earlier commits under their pre-rebase ids.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant