github stemdeckapp/stemdeck v0.4.0-alpha.3

latest releases: v0.20.0, v0.19.1, v0.19.0...
5 months ago

v0.4.0-alpha.3

Important

macOS users run this after installing:

xattr -dr com.apple.quarantine /Applications/StemDeck.app

macOS Gatekeeper will block the app on launch without this step. Proper code signing is planned for a future release.


What's new in alpha.3

This release applies the papaya improvement cycle ÔÇö 11 fixes across the backend pipeline, frontend, and desktop setup flow.

Backend

Download retries on transient network errors

yt-dlp downloads now retry up to 3 with exponential backoff (2 / 4 / 8 s) on transient failures ÔÇö SSL errors, connection resets, DNS blips, timeouts. Non-retriable errors (404, private video, geo-block, age-restricted) still fail immediately with no retry.

Pipeline timeout constants

Hardcoded timeouts scattered across pipeline files (300 s for FFmpeg, 120 s for analysis, 1800 s for Demucs stall detection) are now named constants in config.py, overridable via environment variables (STEMDECK_TIMEOUT_FFMPEG, STEMDECK_TIMEOUT_ANALYZE, STEMDECK_TIMEOUT_DEMUCS_STALL).

Registry schema migration

The job registry now runs a _migrate() function on load that upgrades persisted schemas incrementally. The existing "version" field is now acted on ÔÇö adding or changing schema fields in future releases will not break already-completed jobs on restart.

Job correlation in logs

Every pipeline log line is now prefixed with [job_id], making it straightforward to trace a single job across the download  analyze  separate stages in log output.

Frontend

Client-side upload validation

File size and type are now validated in the browser before the upload begins. Files over 100 MB or with unsupported formats are rejected immediately with a toast ÔÇö no round-trip to the server needed.

Stem names from API

STEM_NAMES is no longer hardcoded in JavaScript. The frontend fetches the authoritative list from GET /api/config on startup, so adding or renaming a stem in the backend is reflected in the UI without a separate frontend change.

SSE race condition guard

SSE-driven state updates are now deferred by one tick (setTimeout(..., 0)) so in-progress user interactions (mixer moves, stem toggles) are not clobbered by a concurrent server-sent event.

localStorage error visibility

localStorage reads and writes that fail (e.g. quota exceeded) now emit a console.warn instead of being silently swallowed, making persistence failures visible during debugging.

Removed debug console.log

A leftover console.log call in player.js has been removed.

Replaced alert() with toast

Unsupported file type errors that previously used alert() now use the in-app showError() toast ÔÇö accessible, mobile-friendly, and consistent with the rest of the UI.

Desktop setup

Actionable error messages

Each terminal error state in the setup flow now includes a specific recovery hint and a working Retry button ÔÇö e.g. "Check that your disk has at least 2 GB free and click Retry" instead of a bare error string.

Artifact scan

  • Windows portable packages were scanned with ClamAV in CI before upload.

Artifact build

  • macOS arm64 and x64 DMGs and runtime packs were built and inspected on a macOS Woodpecker agent before upload.

Don't miss a new stemdeck release

NewReleases is sending notifications on new releases.