Audiobooklet - an Audiobookshelf player for Librem 5

Hi there,

I pulled my Librem 5 out of the drawer to see how it progressed, and it’s quite usable these days - cold weather is back, so I have pockets big enough to carry it, and the warmth feels nice too.

I haven’t found any Audiobookshelf client though, so I made one myself with a LLM. I wanted it to be fast and offline-first, not some lame web wrapper or electron app. It took me about a month to polish and get rid of all the rough edges, so hopefully it’s good enough for other people to use now. I’ve been using it almost daily. At this point I prefer it to Lissen on Android because it’s just more stable and predictable.

I used library versions present in PureOS Crimson, so a nice installable deb without extra deps is available. It’s all native code - Rust, SQLite, quite decent performance. There are also AppImages for other distributions, and Flatpaks for these who have too much free storage space. All GPLv3 of course.

The biggest feature is the offline mode. You can download books on Wi-Fi or other good network and listen them either completely offline, or using minimum data just to sync progress. There’s an offline mode toggle, and if it’s not enabled, the app prefers what’s downloaded anyway.

There is the standard stuff like search, dark mode, groupping by author/series, speedup, sleep mode, pause on call and headphones unplug, dark theme, notification accessible from lockscreen.

One thing I couldn’t implement was play/pause on pressing the button on headphones cable - apparently this isn’t implemented on the Librem 5 (but I’d love to be proven wrong!)

Where can we find it?

I forgot the link? lol, sorry

Are you planning on releasing this on Flathub as a Flatpak?

I would but that would be against their ToS, that’s why there’s a github-hosted flatpak repo.

I dislike the term “vibe-coded”, as it makes me think of stoned surfer instructing the chatbot to “you know, make me kind of a thing that sort of looks like it’s bitchen and makes me feel good”. You know… fuzzy input. The scary thing is that those kind of instructions actually get useful results.

We have been using GenAI.mil chatbots to code Python apps for our group. The results are truly useful (time saver, restore functionality lost due to government regulatory ineptitude, etc) and were pretty easy to do. I think really hard about what I ask the chatbot to do and treat it like a competent programmer who knows nothing about how we do business. My colleague is 22… very sharp, good work ethic. He asked me what he should make the app do and I gave him advice, but talks to the chatbot with very imprecise language… and the results of his work with the chatbot are a huge benefit to us. I have to do more documentary work on his app to meet cybersecurity requirements than he had to do creating the damned thing, but I’m really glad he did it. Even so, I am deathly afraid that getting good results from fuzzy input (vibe coding) is just going to breed more fuzzy input… and occasionally produce disastrous results.

Having said all that, I’m gonna check out Audiobookshelf, because it sounds good and I don’t think you mean “vibe-coded” the same way I do.

Use the Clankers, but interact with them as you would with idiot savants!

I’m a programmer working for 20 years, coding for about 10 more. I stopped developing larger projects for fun because of the amount of repetitive code I’ve written many times before - LLMs are great for not having to do that. Like, you know, I’ve written API clients before, and I’ve written GTK+ programs before, there’s nothing new to learn here but the code still needs to be written.

On the other hand, I hang out on Mastodon and Lemmy and people there are very much against software coded this way. They would discredit all your work because you’re a “slopist” and make a big fuss if it wasn’t clear. That’s why I have a separate Github account for LLM-assisted projects and very clearly mark Audiobooklet as such.

Maybe not a nice term, I don’t know, any suggestions that would fit in the tiny description field?

OK, I’m not know for brevity… Will this work?

“Clanker-coded to human requirements with strict human oversight, human test & evaluation and human responsibility for the resulting code.”

IIRC, that is a paraphrase of what a large Linux project came out with the other day. Can’t remember off hand if it was Debian or Linus. I think it is a fair compromise between the Luddites and the Trans-humanists.

Still, I’d like to see a way to tag code with its license and LLMs should honor and cite the licenses for code they produce. It would take retraining, but I think it’s necessary.

Yes, perfect for the description block :wink:

Let me know when you try it, I’m curious about your opinion

Heading out on a road trip this weekend, so it may be a few weeks before I can get to it.

If someone has a problem with “vibe coded” then how about “AI coded”? Means the same thing but is more neutral.

We might think it’s more neutral, but the Luddites need the “human” caveats to calm their spasms. :roll_eyes:

It’s not. The codec is capable of sensing the button being pressed, but there’s no interrupt line from the codec connected so the state of the button would have to be continuously polled.

Like, on a PCB? Right, can’t work around that, polling would be terrible for battery

I love using a local, well hacked, stripped, and reeducated LLM because it will always fix my indents and close my ()s, it is also like a super web search, spelling fixer, error codes analysis, and fast doc reader for finding the lib I didn’t know did exactly what I wanted. They are also stupid as hell and like to lie that they know something that they don’t. I guess if LLM use is good enough for Linus and the kernel it is good enough for me.
https://audiobookshelf.org/ seems interesting, I use cozy, a flatpak exclusive audiobook app, and the lack of tweaks for the automagical audiobook grouping is a problem, especially because I often have to make audiobooks from text. Cozy loves to stack several similar titles from a series like this: chapters 1,1,1, 2,2,2, 3,3,3, from books 1, 2, 3… there is simply no forced m3u maker or option to use a m3u to override its automatic organization of file grouping or order only automatic, it also only organizes by reader’s name or title, and some mp3 or m4b files especially DIYs are missing this info so the book gets lost by Cozy. Very un-Linuxy IMO.

I’m not sure if you’re going to love Audiobookshelf because it’s also not very linuxy. It takes audiobooks from directories on disk but also doesn’t do great on untagged files. But nothing as bad as you describe, worst that I saw happen is that X chapters turn into X books, not different books mixed up like in Cozy. I’m just making a Linux frontend for it though, Audiobookshelf is a server side program, so not much I can do about it, but it works for me most of the time.

I will admit that my best experience was back on the Maemo5-N900 with Panucci audiobook player, it let me build a m3u if needed rather than forcing an automatic playlist, auto-deciding what is a single book, or even not recognizing a titled file as an acceptable audiobook.
This is again me talking about Cozy and Panucci UX not your new app which I want to try out when I have time to get to know it, and thank you for having appinages and debs vs only flatpak!!

Yeah, flatpaks are especially bad on a phone with 32 GB storage. Last time the Librem was out of the drawer I installed like 8 programs from the Software Centre and was out of space, because of course each of them pulled a different version of GNOME. But still some people insist on using them so I added a build.