Skip to content

v2.5.0

Choose a tag to compare

@github-actions github-actions released this 28 Oct 13:51
· 371 commits to main since this release
e465ccb

Highlights

Faster

  • Scanning a new library is much quicker. Your server now reads several books at once (one per CPU core, up to 8; scan.concurrency changes it) and reads MP3 tags in blocks instead of byte by byte. The index it builds is the same as before. Rescans with nothing changed are quicker too, especially on network and FUSE storage (Unraid): fewer filesystem round trips, and a file ffprobe can't read isn't probed again until it changes.
  • Lists, search and Home answer sooner. Book lists, the recent shelf and search answers are kept ready and dropped on any change, and the count behind them is cheaper.
  • Many devices behind one address are no longer throttled. Signed-in requests are limited per sign-in, not per network address, so a household or a proxy no longer shares one budget. Sign-in, pairing and demo sessions stay limited per address. Every refusal now says how long to wait.
  • Grid covers are smaller and served faster.
  • The admin console opens its sections sooner, Health included, on large libraries.
  • Less memory at idle. The memory used to check a password is handed back once sign-ins go quiet.
  • The web player paints its first screen sooner. It shows Home and the library from your last visit at once, then refreshes them; covers above the fold load first; and the start-up download is smaller and compiled off the main thread.

Read the ebook, in the web player and the apps

  • Read as well as listen. When a book's folder also holds its ebook, the book's page shows Read the ebook, in the web player and in the iOS and Android apps. The reader shows the text a page at a time: tap or click the page edges, swipe, or use the arrow keys (a right-to-left book turns the other way). Contents opens on the chapter you're in, − and + change the text size, and the reader follows the app's light or dark look.
  • Which books. A folder book with exactly one .epub beside its audio, or a single-file book with an .epub of the same name next to it (Project Hail Mary.m4b and Project Hail Mary.epub). It must be an EPUB without DRM. Your server finds them at its next scan, without re-reading your audiobooks; there's nothing to switch on.
  • Your place on every device. The reader saves your place as you go, and your server keeps it for your account, so the book opens at the page you reached on your phone, laptop or another browser. Your reading place is separate from your listening place: one never moves the other.
  • Jump or Stay. If another device read further, AudioSilo never moves you back and never jumps you forward without asking. The reader offers "On Pixel 8 you were at 60%. Jump there?" with Jump and Stay.
  • Read offline. Downloading a book now takes its ebook too, so you can read with no connection, in the apps and the web player. Pages you read offline are saved on the device and sent to your server when it's back, with the same Jump or Stay if another device got further meanwhile.
  • Safe by design. An ebook's own scripts never run, the reader sends nothing out of the page it runs in, and in the apps it never sees your sign-in token.
  • In the admin console, a book's page shows its ebook in Files and as a chip at the top.

See Reading the ebook.

.mka books play everywhere

  • MP3 inside Matroska (.mka) now plays in the iOS and Android apps, not only the web player. With ffmpeg available (as for transcoding), the server repackages the MP3 inside into a plain MP3 file, without converting it, and serves that at the same address. Chapters come along, seeking works, and the result is kept in a cache in the data folder (up to 8 GB), so each file is done once. Your .mka files themselves are never changed.
  • Downloads of these books work too, offline included; the iPhone app (2.5.0) saves them as .mp3.
  • An .mka holding another codec (AAC, say) still plays in the web player only, as in 2.4.
  • In the web player, seeking in a podcast episode the server converts as it plays is now quick (the server no longer reads the episode from the start to get there), and .m4a episodes laid out with their index at the end now play.

Thanks to @wtanksleyjr for the request.

New book folders open before a scan

  • In the player's Folders, a book folder your server hasn't scanned yet shows as a book with Not scanned yet, rather than as a folder that looks unplayable. Open it and it plays; your server reads it on the spot. You can favourite it, and it can come up as the next book in a series or folder.
  • In the admin console, Folders says such a folder is Not in the library yet, with Rescan next to it.
  • A book folder you renamed and open before the next scan keeps its progress, bookmarks and the rest.

One command to install an ASR worker

  • An ASR worker hands your Bridge's speech recognition to a faster computer (a Mac with Apple silicon, or a PC with an NVIDIA GPU). The Bridge's Workers tab now gives you one line to paste into that computer's terminal: it downloads the worker for that computer from your Bridge and installs it as a service. Running the same line again updates it and keeps its settings. See Running a worker.
  • This needs Bridge v0.4.0, which ships alongside this release (below).

A copy of your database before every upgrade

  • When a new version has database changes to make, the server now copies your database into the backups folder first, and writes one line in the log naming the changes and the copy. The newest 3 of these copies are kept, and Server > Settings > Backups lists them as Before an upgrade. A fresh install, or a start with nothing to change, makes no copy.

Polish

  • Signing in says what went wrong and what to do next, in your language: a wrong name or password, an invite code that's used up or expired, or too many tries, with how many minutes to wait. Empty fields are pointed out before anything is sent, and a username with a stray space signs in. The connect page says "invite code" throughout.
  • First run: an admin signing in to a server with no library yet sees Add your first library, linking to the console's setup, instead of waiting for "your admin".
  • Missing books: a link to a book that isn't there (or that you can't see) shows This book isn't in the library with Back and Home, instead of a Retry that can't work or a spinner.
  • Removing a server from the player now asks first, and says what goes with it: its downloads, or the sign-in on this device.
  • A server that isn't answering is named in the offline bar, the top bar and Search ("Hearthside isn't answering"), not just "Some servers offline".
  • Downloads count the ebook in their progress and size, and Download again straight after a Cancel keeps the new download.
  • The book page's path ends in the book's title, and a downloaded book opened offline names its library.
  • In the web player, closing the tab while a book plays keeps that listening in History and the Journal.
  • Scrubbing near the end of a short book lands where you'd expect: the end guard is now at most 30 seconds or a tenth of the book, whichever is shorter.
  • Check for new episodes stays busy until the server has checked the show, then shows what it found.
  • In the console: the setup flow names a library only once its folder checks out, and its phone step leads with the address when the QR code can't work; settings check their ranges before saving; a share with many people shows +N; the Bridge setup card says when it's ready but the Contributions module is off, with a link; while the Bridge waits for a worker, its speech recognition step links to the Bridge's Workers tab.
  • audiosilo version prints the version and exits.

Fixes

  • Listening in the house could show listening someone did while their sharing was off. It now counts only listening from the moment they turned sharing on, and saving it as on again doesn't move that moment.
  • Giving someone library access could widen an admin's own share that happened to be named "Library: ". A share is only reused when it really is that library's whole-library share; anything else is left as it was. In the console, a narrowed or emptied library grant no longer reads as whole-library access, and a new grant takes the next numbered name when its name is already used.
  • A narrator in an .m4b's narrator tag is now read (it beats the composer tag). Existing books pick it up when their files change, or with Read the files again on the book's console page.
  • A folder's series position with a decimal part, like 02.5 - Gods of Risk, now reads as 2.5.
  • Listening progress saved against one of a book's audio files is kept on the book itself, so it isn't lost.
  • An ebook whose name is in a different Unicode form than its audio file's (as macOS can write them) is now found.
  • The first download of an .mka book, or its first play while the server is busy converting others, now waits for the repackaged MP3.
  • Community metadata lookups wait and try again when meta.audiosilo.app asks them to slow down.
  • In the player: a folder name with % in it opens; a used or expired pairing link on the served web player shows the server's sign-in card (and a link that failed for a passing reason keeps working on reload); a book link opened while signed out ends on the book after you sign in; /web/demo on a server without the demo says so and offers Sign in; an Up next entry you removed can't come back for a moment; in the web player, a seek made while a file loads holds; and the Library's "added" captions follow a language switch.
  • An episode's title shows once in the player bar, a start that fails keeps your saved place and says why, and on phones Add to collection moves into the book page's More menu so Download fits.
  • "2 days ago" and the like now follow the app's language in the iOS and Android apps.
  • In the reader: a sign-in that ended shows Reconnect, a place the server refused says it wasn't saved, a slow server no longer opens a downloaded book at the start, opening on another screen size no longer nudges your place back, and the iPhone no longer stays zoomed in after tapping a field in an ebook.
  • In the console: deleting a library that doesn't exist answers "not found" and writes nothing to the audit log; the Library screens offer a library choice by one rule; a book matched by hand stays out of a Shift-click range until its list has read it again; Copy path shows the path when the browser refuses to copy (plain http); Overview says nobody is listening once.
  • Every "too many requests" answer now says when to try again (Retry-After), and an unknown API address answers with JSON.

Bridge v0.4.0

  • Install an ASR worker with one command. The Workers tab leads with a one-line install for macOS and Linux (x86-64 and arm64): the Bridge serves the worker builds for its own version, and the line downloads, installs and starts the worker as a service. Running it again updates the worker and keeps its settings. Add --run to run it in the terminal instead. It works behind a reverse proxy (with public_url set), and a refusal from outside your network prints why rather than failing silently. Each Bridge release on GitHub also carries the worker downloads. On a Mac, transcribing needs Apple silicon: an Intel Mac installs the worker, but there is no speech engine for it.
  • Re-installing a worker over a running one on macOS no longer fails with "Bootstrap failed: 5".
  • Copy buttons work over plain http on a LAN address.
  • Pairing says what actually went wrong: a server that couldn't be reached (with the address to use instead), a server that answered with an error, or a pairing that wasn't saved and needs a new code.
  • The page: Accounts says signed in when GitHub sharing goes through gh or the environment; Status links Workers while speech recognition waits for one; the tab bar wraps on a phone; Jobs uses the console's names for job kinds and no longer shows raw codes.
  • A first start racing a reset-password run can no longer overwrite the new password, and a password change that loses to a reset says so.

Update the image (ghcr.io/kodestar/audiosilo-bridge) to v0.4.0. Bridge v0.3.0 and later keep working with this server; the one-command worker install needs v0.4.0.

After updating

  • Three database migrations (0055-0057) run on first start: the stored file order, each book's ebook, and reading places. Before they run, the server copies your database into the backups folder (the newest 3 such copies are kept). The next scan finds your ebooks and records each book's file order, without re-reading the audio.
  • A book whose files were put in a new order (natural file order, 2.4.0) keeps your place as a time in the whole book, so if it was re-ordered on this upgrade, that time may now fall in a different part of the book.
  • New settings: scan.concurrency (books read at once during a scan) and rate_limit.{address,token,media}.{rate,burst}, each with an AUDIOSILO_ environment variable. The defaults suit most servers; nothing to change.
  • Series positions with a decimal part (02.5 - Title) now read as 2.5. Existing books change when they're read again (a file change, or Read the files again on the book's console page).
  • GET /libraries no longer sends a library's folder on the server to listeners and demo visitors; admins still get it. The apps and the web player never used it. If you have a script that reads root with a listener's token, use an admin's.
  • Reading in the apps needs the 2.5.0 app for iPhone or Android. Older apps keep working as before, without Read the ebook. The web player bundled with this release has the reader.
  • On iPhone, .mka books are best with the 2.5.0 app: the 2.4.1 app can stop with a false "End of book" about ten seconds into the first play of one (a second play works).
  • audiosilo now stops with an error when given a word on the command line it doesn't know, instead of ignoring it.

Apart from root above, every change to the player API is additive, so existing iOS, Android and web players keep working. New: GET /ebook, GET/PUT /reading-progress, ebook on books, ebooks in /server, pending_book on /fs folders, ebook on the admin book, invite_used/invite_expired codes on a refused invite, Retry-After on every 429, and a JSON 404 for an unknown API route.

Bundled web player 2.5.0:

  • The ebook reader with offline reading and Jump or Stay, ebooks in downloads, unscanned book folders that open as books, .mka books played without converting, clearer sign-in and connect messages, the admin's first-run link, not-in-library pages, a confirmation before removing a server, the down server named everywhere, and history kept when a tab closes.

Native builds embed the web player; ffmpeg/ffprobe are found locally or
auto-downloaded on first use. Prefer Docker for advanced / multi-user
setups: ghcr.io/kodestar/audiosilo-server.

AudioSilo is free; sponsors keep it going:
GitHub Sponsors.