In development
Own your audiobooks.
Oudy is a self-hosted audiobook system. One daemon owns the library, the
files, and your position in every book — and everything it can do goes
through a single documented HTTP API.
The daemon and its command-line tool are built. A terminal player browses
a library and resumes a book where it was left. A browser client and phone
apps come next.
The daemon
It owns the library, the database and the files. Import is the only
thing that writes to them, it is journalled, and it can be undone.
Nothing is deleted on the spot: what an import leaves behind goes to
trash and is pruned on a schedule you set.
The API
Complete, versioned, and documented well enough to write a client
against without reading the server’s source. An endpoint, field or error
code without a description fails the build, so the specification cannot
drift from the thing it describes.
The clients
No client is privileged. The administration tool is an ordinary HTTP
client — there is no socket to talk to and no database to edit by hand —
so anything it can do, a client you write can do too.
Audiobooks only
No podcasts, no video, no ebooks as library items. The data model is
books, series, authors and narrators, and it is shaped for nothing else.
A book is one timeline however many files it arrived as: chapters, a
position and a duration that mean the same thing whether it came as one
.m4b or five hundred and sixty .mp3s.
One position per book
A book’s position means the same thing on every client, to the
millisecond. Time is stored and sent as integer milliseconds everywhere,
never as floating point, so agreement between devices is structural
rather than hopeful. A device that got further while another was closed
is not rewound to catch it up — the one that fell behind moves forward.
It does not destroy your library
Scanning only ever reads: the scan that checks a library against the
catalogue cannot write, by construction rather than by care. The database
is backed up daily and the audio never is, because the audio is already
on disk. And if the database is lost outright, the catalogue can be
rebuilt from sidecar files written beside the books themselves.
How it works
You drop new books into one directory. Import reads them, works out what
they are, shows you what it would do, and only then places them in the
library. From that point the daemon serves everything over HTTP.
incoming/
import
library + catalogue
daemon
one documented API
terminal player
browser client
iOS
Android
Access is over a private network rather than the public internet, so there
is no port to open and nothing to harden against strangers.
State
What is built and what is not
| Daemon and CLI |
Import, metadata, playback, progress, review, verify, backups |
Built |
| Terminal player |
Browses a library, plays a book, resumes it where it was left |
Built |
| Browser client |
Player and library |
Next |
| iOS and Android |
Players, with lock-screen and car controls |
Planned |
The cheapest client was built second on purpose. If a terminal program can
browse the catalogue, resume a book at the right position and report
progress using only published endpoints, the API is real before three
more expensive clients depend on it.
What Oudy will not do
Written down so it is not quietly reintroduced later.
- Podcasts, video, ebooks. Not a media server that also does books.
- More than one catalogue. There is exactly one library.
- Transcode. Beyond a narrow remux for formats browsers cannot play.
- Face the public internet. Access is over a private network.
- Recommend things. The signals are kept; nothing guesses yet.
- Adopt a library in place. Oudy owns the layout of what it manages.
Licence
Oudy is free software under the GNU Affero General Public License,
version 3 or later. The Affero clause is the point rather than an
accident: Oudy is server software, and anyone who runs a modified version
for other people to use is expected to offer them its source.
Public source repositories are not up yet. They will be linked here.