Skip to content

v2.4.0

Choose a tag to compare

@github-actions github-actions released this 24 Oct 10:20
· 42 commits to main since this release
ad0905a

Highlights

Podcasts, and the Bridge

  • Podcasts beside your books. A podcast library sits on your server next to your audiobooks. In the player, its Shows grid marks shows with a new episode, each show has a page of its own (a show told in order starts at its first episode), and New episodes on Home gathers the latest from the shows you follow. Podcasts stay off your book shelves, book search and "next in series"; an episode you're in the middle of shows in Continue listening, like a book.
  • Play any episode, downloaded or not. Each show keeps the newest episodes ready (Keep N, Keep 3 by default), downloads an episode only when someone plays it (On demand), or keeps the whole feed (Archive). Press Play on an episode that isn't on the server yet and the player shows Getting this episode and starts it once it's ready; whatever you were listening to keeps playing meanwhile.
  • Add shows from the player. Search a podcast directory (Apple Podcasts, or Podcast Index if you set it up), follow a show by its feed address, or import an OPML list from another podcast app. A long list goes in batches of five, each row says how it went, and a feed that just failed isn't asked for again, so a few dead feeds don't hold up the rest. Export my shows saves your list for any podcast app, and Check for new episodes looks at a show's feed now.
  • Private feeds (paid or members-only) are seen only by the people who follow them, admins included, their addresses are kept encrypted by the Bridge, and they never go into an export.
  • The Bridge does the writing. The server still never writes to your folders: the Bridge, AudioSilo's optional companion container, reads the feeds, downloads the episodes and removes old ones nobody needs, and the server reads what it saves. Turn podcasts on under Server > Settings > Modules, then add a library with the Podcasts kind. "Give everyone access" grants a new podcast library to every enabled listener.
  • More from the Bridge. Pair one under Settings > Bridge and it can also:
    • Generate characters and recaps for a book the community hasn't covered, from the book's page in the console or the player (admins only). It transcribes the book, has an AI agent you provide (Claude or Codex, with your own subscription or API key) read it, checks the result for mistakes and spoilers, and shows an estimate first. A monthly cap limits what it spends.
    • Write a description: a short, spoiler-free one for a book nothing else describes. It stays on your server.
    • Detect chapters for a long book with none (Health > Long books without chapters): it finds them in the narration, with no agent cost. The player marks them "Chapters found in the narration on this server", and the book's page can switch back to the file's chapters.
    • Hand the transcription to an ASR worker on a faster computer (a Mac with Apple silicon, or a PC with an NVIDIA GPU).
  • Everything the Bridge generated is marked Generated on this server in the player and saved in a .audiosilo folder beside the book, so it survives a rebuild of the database.

Set up your server

  • The first time you sign in to the admin console on a new server, it opens Set up your server: eight short, skippable steps from an empty server to a named, matched library and a signed-in phone. Check your books folder (the usual Docker host-path mistake is caught before you meet an empty library), choose whether names come from tags or folders by comparing up to eight of your books side by side, set up community metadata and your Audible marketplace, check the addresses phones will use, and pick your backup schedule. Then pair a phone with a QR code, and optionally add a Bridge with the compose lines and a pairing code.
  • Everything you choose is an ordinary setting you can change later. Skipped steps wait on the Overview's Finish setting up card. A server already in use (it has a library, or more than one account) never sees the flow.
  • Settings locked by an AUDIOSILO_* environment variable show as locked, and the choices that only apply after a restart say so.

Give back to the community from your server

  • With a Bridge signed in to GitHub (its Accounts tab) and the Contributions module on, the book's Community metadata card can Share with the community the characters and recaps your Bridge generated (CC BY-SA 4.0, filed under your GitHub account), either straight from the Generate dialog or later, with nothing generated again.
  • Suggest corrections: when you've fixed a matched book's details and they differ from the community's, pick which edits to send and say where the right values come from (CC0). Each one is reviewed on GitHub like any other submission.
  • Nothing is ever sent unless you ask. The descriptions a Bridge writes always stay on your server.
  • Settings > Bridge has a setup card showing what's ready (pairing, libraries, speech recognition, the agent, the budget, GitHub) and what's left.

Library and console

  • Tags and genres. Books gain tags, genres, a subtitle, publisher, language and abridged, all editable on the book's page (one at a time or in bulk). Genres are read from the files' genre tag and Audiobookshelf's metadata.json, tags from metadata.json, and the subtitle, publisher, language and abridged from metadata.json or a community match. The player shows the subtitle and genre and tag chips, and Library > Books filters by genre and tag.
  • Duplicates across libraries. Health > Likely duplicates has Include other libraries, and each copy says which library it's in. The Health counts stay per library.
  • Selecting many books. Admin Books has a Select button, Shift-click selects a range in the grid or the table, Select all takes every book shown, and Select all N matching reaches past the loaded page (up to 1,000 books).
  • Files play in natural order. "2- Part" now comes before "10- Part", whatever the punctuation, in folder books and in each disc of a joined book. Chapters a Bridge found move with their files, so there's nothing to detect again.
  • .mka (Matroska audio) is now indexed and plays in the web player, converted by the server as it plays (this needs ffmpeg). The iOS and Android apps list these books but can't play them yet. An .mka beside a same-named file in another audio format is left out, as .aax is.
  • Match review lists the best matches first. Match by hand opens over the review, which keeps its place, and a book matched since the run is left alone when you apply it. A book held back for its length now says so.
  • Listen in player on a book's console page opens it in the web player, already signed in. The link it uses expires after two minutes.
  • The library export adds published dates, every series a book is in, an optional description, and one row per copy if you ask.

Thanks to @scruffynerf and @wtanksleyjr for the requests behind much of this section.

Fixes

  • A series tag with a marked position, like "Discworld, book #40", now gives the series "Discworld" and position 40.
  • A title written in another script ("Война и мир", "第1章") was treated like a placeholder such as "Track 01", so the folder name replaced it. It's now kept.
  • Matching cleans genre words and nested brackets out of titles more reliably.
  • Opening your account page many times could stop the API keys list from loading, and lock others behind the same home connection out of changes. Listing keys no longer counts toward that limit.
  • A ?path= that differed from a book's folder only in letter case could add a duplicate book. It now gets "not found".
  • Renaming or moving a library declared in config.yaml from the console made every restart add it again. Those fields are now locked, and adding a library at another folder under a name config.yaml already uses is refused.
  • Re-running a match no longer replaces a book you matched by hand.
  • With cors_origins set, every answer now tells caches that it depends on the requesting site, so a cached cover can't reach a site it wasn't granted to.
  • In the player: the search palette and Up next show book titles instead of file names, and starting a book from its page takes it off Up next once it plays.
  • The web player has a proper "not found" page, and a pairing link for another server says so instead of "Could not reach".
  • Scanning an invite QR code in the app now goes straight to signing in, instead of being turned away.
  • The first-run banner in the log names /admin as well as /.
  • Expired pairing codes are cleared out daily.

After updating

  • Eight database migrations (0047-0054) run on first start. The next scan reads each book's genres from its files and metadata.json once, without re-reading the audio.
  • Podcasts need Bridge v0.3.0 or later, and so do generating, chapter detection and contributions. Its image is now public, no login needed: ghcr.io/kodestar/audiosilo-bridge. See Running a Bridge.
  • Podcasts need the app 2.4.0 or later, or the web player. Older apps don't show podcasts at all, even to an admin, and can't see or clear the podcast episodes in someone's Up next (clearing it there leaves the episodes in place).
  • Natural file order may move a listener's place: a book whose files played out of order is fixed at the next scan, and someone partway through it may find their place in it has moved. A copy downloaded to a phone takes the new order the next time the book is started online (app 2.4.0), and plays in its download order until then.
  • The tag fixes above (series positions, titles in other scripts) reach an existing book when one of its files changes, or when you press Rescan this book.
  • Rolling back to 2.3.1 still works. If you then upgrade again, podcast shows are re-indexed. From this release on, a server started on a database that a newer version has upgraded logs a warning naming the migrations it doesn't know.
  • The server is built with Go 1.26.10, which carries the latest standard library security fixes.

Every change to the player API is additive, so existing iOS, Android and web players keep working.

Bundled web player:

  • Podcasts (Shows, show pages, New episodes on Home, play on demand, Add shows with search, feed addresses and OPML import, Export my shows), tags, genres and subtitles with Library filters, generated characters, recaps, descriptions and chapters, Generate for admins, invite codes that go straight to signing in, a link naming a book that opens it, .mka playback, and a themed "not found" page.

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.