Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "waveflow-server"
version = "2.0.1"
version = "2.1.0-rc.1"
description = "Self-hosted music server with WaveFlow and Subsonic compatibility."
authors = ["InstaZDLL <github.105mh@8shield.net>"]
edition = "2021"
Expand Down
5 changes: 3 additions & 2 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,9 @@ revision of its survey, and a status line saying what has happened since.

The notes published with each stable release, one per tag, in
[`releases/`](releases/): [2.0.0](releases/v2.0.0.md) and
[2.0.1](releases/v2.0.1.md). The release workflow refuses a stable tag that has
none. Every change, release by release, is in the [CHANGELOG](../CHANGELOG.md).
[2.0.1](releases/v2.0.1.md), and those of [2.1.0](releases/v2.1.0.md), written
ahead of its tag. The release workflow refuses a stable tag that has none. Every
change, release by release, is in the [CHANGELOG](../CHANGELOG.md).
The screenshots the README shows are in [`screenshots/`](screenshots/).

## History
Expand Down
47 changes: 47 additions & 0 deletions docs/releases/v2.1.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# 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](#upgrading-from-201) 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. None of the seven has had a native speaker's review yet.
- **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

```bash
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`](https://github.com/InstaZDLL/waveflow-server/blob/v2.1.0/docs/guides/operations.md#a-copy-before-every-upgrade) 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](https://github.com/InstaZDLL/waveflow-server/blob/v2.1.0/CHANGELOG.md) · https://github.com/InstaZDLL/waveflow-server/compare/v2.0.1...v2.1.0
3 changes: 2 additions & 1 deletion tests/migrations/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,11 +45,12 @@ use waveflow_server::Config;
/// `the_version_being_shipped_has_its_schema_recorded` now holds it: the PR
/// that bumps `version` in `Cargo.toml` for a release fails until it adds that
/// tag here, with the newest migration of that moment as its baseline.
const RELEASED_SCHEMAS: [(&str, i64); 4] = [
const RELEASED_SCHEMAS: [(&str, i64); 5] = [
("v2.0.0-beta.0", 20_260_823_020_000),
("v2.0.0-beta.1", 20_260_914_030_000),
("v2.0.0", 20_261_028_000_000),
("v2.0.1", 20_261_028_000_000),
("v2.1.0-rc.1", 20_261_102_000_000),
];

/// The identifiers the fixture below writes and the assertions read back.
Expand Down
Loading