Skip to content

v2.1.0

Choose a tag to compare

@github-actions github-actions released this 03 Nov 21:31
· 95 commits to main since this release
v2.1.0
d0be467

WaveFlow Server 2.1.0

The server now runs on one computer without Docker: extract an archive and start it. An account can say once what an app that does not ask should get. The web client comes in seven more languages. The image moves to Debian 13, and its first boot after upgrading measures every lossless file again, so read Upgrading before you pull.

New

  • An archive for each system, with nothing to install. Each release now carries one for Windows, for macOS (Apple silicon and Intel) and for Linux (x86_64 and arm64). It holds the server, its own FFmpeg, a laptop.env of settings, the licences and a README.txt to read first. On a first start the browser opens by itself on the sign-in screen; on Windows and macOS, unless the server listens on a wildcard address, the setup token is already filled in. SHA256SUMS covers every archive.

    The Windows executables carry a self-signed certificate and the macOS ones an ad-hoc signature. A file changed after signing no longer matches its signature, but neither system trusts these signatures, so both still warn on the first launch. The README.txt says what to click past.

  • Transcoding profiles. In Settings › Playback, or through /api/v2/transcoding-profiles, an account sets a format and a bit rate for apps that do not ask, as a default and per Subsonic client name. A request naming a format or a bit rate is answered as before, and so is every request of an account with no profile. The web player, downloads and public shares keep the original.

    Two limits come with it. A transcode past the server's limits is refused with 429 rather than falling back to the original: 2 per account and 4 in all by default, set by WAVEFLOW_TRANSCODE_PER_USER_LIMIT and WAVEFLOW_TRANSCODE_GLOBAL_LIMIT. And an app that seeks by byte range may fail to seek in a transcode still being encoded; a row of Original for that app puts it right.

  • Seven more languages in the web client: German, Spanish, Italian, Japanese, Korean, and Simplified and Traditional Chinese, beside English and French. Settings › Language offers each, and a browser set to one opens in it. Native speakers reviewed all seven.

  • An open tab follows the library. What a scan, an upload from another device or a tag correction changed appears without a reload.

  • The transcoding state in the administration: whether the server can transcode, the transcodes running against the limits, and the output formats.

  • waveflow-server health asks /ready at WAVEFLOW_BIND and exits 0 on its readiness answer, or prints one line and exits 1.

Changed

  • The image runs on Debian 13 (trixie) instead of Debian 12, and its FFmpeg goes from 5.1 to 7.1.
  • curl has left the image. Its HEALTHCHECK now runs waveflow-server health.

For client authors

The native API only gains: /api/v2/transcoding-profiles, and events_cursor on each library in GET /api/v2/libraries, the point a client that has just read the catalogue starts following the change feed from. The Subsonic façade answers as it did for an account with no profile. Under a profile, a stream or a native stream that names neither a format nor a bit rate may now be transcoded, a source at or under the bit rate excepted.

Install

docker run -d --name waveflow \
  -p 4533:4533 \
  -v waveflow-data:/data \
  -v /path/to/music:/music:ro \
  ghcr.io/instazdll/waveflow-server:2.1.0

The image runs on linux/amd64 and linux/arm64, and is the same, digest for digest, on Docker Hub as instazdll/waveflow-server:2.1.0. latest now follows this release.

Upgrading from 2.0.1

Pull 2.1.0 and start it on the same data volume. Three things differ from the last upgrade.

  • The first boot of the image measures every lossless file again. A quality measurement is current only for the FFmpeg that took it, so the boot deletes them all and the background analysis takes each file anew, one at a time by default and never during a scan. On a large library that is hours of one core, and each file reads pending until its turn comes. WAVEFLOW_QUALITY_PARALLELISM paces it: raise it to finish sooner, or set it to 0 to hold the analysis off until a quieter moment.
  • The database schema changes, so going back requires a restore. 2.0.1 refuses to start on a database 2.1.0 has migrated. The boot first copies the database and its key into pre-migration-<epoch ms>/ in the data directory, and waveflow-server database restore puts that copy back, without anything the database gained since, and leaves the rest of the data directory as it is. With WAVEFLOW_MIGRATION_BACKUPS=0 the boot takes no copy, and the way back is a backup of your own.
  • A healthcheck of your own that calls curl now fails, because curl is no longer in the image. Remove it to use the image's own, or call waveflow-server health.

Full changelog: CHANGELOG.md · v2.0.1...v2.1.0

Download

The server for one computer, without Docker: extract the archive and start waveflow-server inside it. Each archive holds the server, its own FFmpeg and a README.txt to read first.

System Archive
Windows (x86_64) waveflow-server-2.1.0-windows-x86_64.zip
macOS (Apple silicon) waveflow-server-2.1.0-macos-arm64.zip
macOS (Intel) waveflow-server-2.1.0-macos-x86_64.zip
Linux (x86_64) waveflow-server-2.1.0-linux-x86_64.tar.gz
Linux (arm64) waveflow-server-2.1.0-linux-arm64.tar.gz

The Windows executables carry a self-signed certificate and the macOS ones an ad-hoc signature, which neither system trusts, so both warn on the first launch: README.txt says what to click past. SHA256SUMS holds the checksums of them all, and ffmpeg-8.1.3-sources.tar.gz the source of the FFmpeg they carry.

Container image

docker pull ghcr.io/instazdll/waveflow-server:2.1.0

The same image, digest for digest, is on Docker Hub:

docker pull instazdll/waveflow-server:2.1.0

Also published as latest in both, for linux/amd64 and linux/arm64 (a Raspberry Pi 4 or 5 on a 64-bit system).