Comments (13)
All right folks -- your patience has (finally) been rewarded. Custom file and folder names are now available. It was a months-long endeavor to undo some early assumptions but it's finally done and I'm very pleased with the result. Applies to GUI and CLI. I'll update the documentation soon with examples.
from libation.
from libation.
This is going to get LONG. Bottom line: yes, let's start this conversation and find a solution.
As Libation gets more popular, it's clear that what I made for my preferences is not the way others want to use it. I'm not willing to stop making it convenient for me -- it was for me first dammit :) -- but I'm willing to rethink some optional settings. This thread seems like a good place to start.
There's already a lot above in this thread to address:
- Libation doesn't need a flat folder structure. You point to a directory -- any directory -- and it will search that and all folders nested beneath it to any depth. It deep scans them a lot though so don't just point to C:\ or you're gonna have a bad time. I point to something like C:\Dropbox\audiobooks and within that I have all manner of OCD folder hierarchy. New books get liberated to that folder then I later move them within that folder
- Technically Libation looks for any audio file with the id in the file name. I assume people might want to convert to: m4b, mp3, aac, mp4, m4a, ogg, flac
- Regarding the 0-byte file idea: that would work with the current paradigm but it's totally a hack. And I actually support a secret hack exactly like this -- in addition to common audio filetypes, it also looks for files with the audible id and filetype ".libhack". Feel free to use this nasty trick. I did it for another users with exactly your needs.
- Storing all full files locally. "libhack" will do the trick. On my laptop, I use Dropbox's "smart sync" which makes it look to Windows like the files are local but they actually take up zero space unless I re-download them from Dropbox.
I think we can do better. Goals:
- "I would like to have complete control over my destination path and the created filenames."
- Not keep files around, yet have Libation recognize when book-liberation has occurred
- no hack-y extra files
I think the answer is:
- when you liberate a book, Libation should raise a flag in its database. In the folder scans, if it finds a liberated book then raise this same database flag -- this will fix the setting for books which have already been liberated
- new config setting for whether live-scanning will signal that a title is not currently liberated even if the database flag indicates it has been
- this means there needs to be a way to reverse that flag. What you really don't want to happen is: user liberates book, moves book file, and loses it. Now they can never liberate it again unless they edit/delete the database file
- someone's actually got to update the readme/documentation one of these days. Who's in charge of this mess anyway? Damn slacker...
2nd tier desires:
- A setting for custom file-naming patterns built directly into Libation. The "happy" path of this is dead simple. It's the edge cases that are hard. What about when someone has a typo in their pattern settings? What happens when a book has no author listed (yes, this has happened)? What happens when there are too many authors and the file name is so long it causes issues for windows (some versions of windows STILL haven't fixed the max file path length issue yet)? If the title is long and the author list is long, which do you truncate? What to do when a 'number in series' entry is weird? eg: "0.5", "1-4", ...
- export book.json like I do with .cue files. Seems do-able. Maybe add settings for both cue and json. A lot of people have wondered why I create these for all books when most people don't need them
- decrypt directly to mp3. I know this wasn't discussed here, but trust me when I say this is the number-one request by a wide margin
If you actually read all this, go get yourself a beer -- you earned it
from libation.
I look forward to hearing your thoughts on this also.
from libation.
Well it looks like someone beat me to the punch in creating this request! That said, my needs are simple. I'd just like to be able to have [Author] - [Title] - [Series].m4b in general. I have no problem appending the audibleID to the end of that though. As to author length, truncate after the second author, or take a queue from the scientific community and add Et Al. The metadata can store the full list. As to odd numbering of the series position, I can't say I have a good answer other than leave as is since neither . nor - should negatively affect file naming if I recall both my Windows and Linux path acceptable characters.
Please do keep the CUE files since they're the most uniformly acceptable to media players. JSON could certainly be an additional option though!
As to MP3, maybe I'm an oddball, but M4B is my preferred format since I can have everything in one file with the chapter markers. File size really isn't an issue in this day and age, especially with third-party AudioBook apps like Sirin, Voice, and Audiobook Player available on Android and iTunes natively on iOS. MP3 sure is universal, but I never feel like I get as good quality out of it. That said, I maintain my library (previously liberated using InAudible) with M4B and the CUE file in case I ever do need to convert to MP3 for whatever reason, or split by chapter markers. Since FFMPEG is the back end for this, I guess just having an option to tell it what to convert to and keep the CUE file would work to cover most people.
As to remote/central library storage, I empathize with the earlier post. If it's "easy" enough to implement the database idea with flags which could be overridden by a manual folder scan, I'd personally go that way. The .libhack method just doesn't sit well with me.
I think that's everything to address rmcrackan's post of options. But I may have missed something.
from libation.
Hold on, I'm going to grab a beer having read all the way through ;) . OK, I'm back.
Actually, with you commenting that you support 0-length-files so long as their extension is "libhack", well, I'm good with that, will begin using it. Delighted to hear that I might get an autoexported "books.json" as well, that's awesome too.
You're right that moving books into folders is hard (I know, I do it, and therefore my current system is broken in a billion ways). This is kind of similar to the request someone else made that we (ahem, well, a programmer who knows C#) normalize the tags in certain recommended ways. I think those two requests would actually be nice to handle; I really, honestly, should consider helping with this. I'm just not as comfortable in C# as Python, and I still have some bugs in my own system.
from libation.
think we can do better. Goals:
- "I would like to have complete control over my destination path and the created filenames."
- Not keep files around, yet have Libation recognize when book-liberation has occurred
- no hack-y extra files
That sounds awsome
I think the answer is:
when you liberate a book, Libation should raise a flag in its database. In the folder scans, if it finds a liberated book then raise this same database flag -- this will fix the setting for books which have already been liberated
new config setting for whether live-scanning will signal that a title is not currently liberated even if the database flag indicates it has been
this means there needs to be a way to reverse that flag. What you really don't want to happen is: user liberates book, moves book file, and loses it. Now they can never liberate it again unless they edit/delete the database file
It would be also good if there is away to set this flag manual.
For example a lot of my books are stored on a different storage which I cant easily mount into my Filestructure.
So the flag for already converted books would never be raised.
- someone's actually got to update the readme/documentation one of these days. Who's in charge of this mess anyway? Damn slacker...
Well you know, we all don't like to do documentation, because I/WE know already how it works. So why bothering to document it
But let's be ohnest, A good documentation is still a key part when you open source software to encurage like minded to get started working on it.
(Yes I still have the same problem, I'm also quiet lazy
2nd tier desires:
- A setting for custom file-naming patterns built directly into Libation. The "happy" path of this is dead simple. It's the edge cases that are hard. What about when someone has a typo in their pattern settings? What happens when a book has no author listed (yes, this has happened)? What happens when there are too many authors and the file name is so long it causes issues for windows (some versions of windows STILL haven't fixed the max file path length issue yet)? If the title is long and the author list is long, which do you truncate? What to do when a 'number in series' entry is weird? eg: "0.5", "1-4", ...
What about when someone has a typo in their pattern settings?
Validate the pattern before saving.
Maybe taking a look into https://github.com/filebot they use such a feature where you can change the destination path/filename pattern.
What happens when a book has no author listed (yes, this has happened)?
Use N. N. (Audible does this too e.g. for the german version of "Permanent Record" where the narrator is unnamed).
N. N. is latin for:
- Nomen nescio - I don't know the name
- Nullum nomen - Name is not mentioned (e.g. because of for security reasons for that person or because they want to be unnamed)
- Nomen nominandum - Name to be named (yet)
- Numerius Negidius - is a name used in Roman jurisprudence, based on a play on words: Numerius is a Roman praenomen, or forename, resembling the verb numero, "I pay"; while Negidius has the form of a gentile name formed from the verb nego, "I refuse". Thus, Numerius Negidius is a personal name that can also be interpreted to mean "I refuse to pay". For this reason, it was used to refer to the defendant in a hypothetical lawsuit.
Source: German Wikipedia
export book.json like I do with .cue files. Seems do-able. Maybe add settings for both cue and json. A lot of people have wondered why I create these for all books when most people don't need them
decrypt directly to mp3. I know this wasn't discussed here, but trust me when I say this is the number-one request by a wide margin
Sounds fair :)
Tbh. I don't have interest in both 😅
Maybe beeing able to deactivate the creation of the cue file since I don't need it at all.
m4b rocks :P
If you actually read all this, go get yourself a beer -- you earned it
Consider this as done :P
I have no problem appending the audibleID to the end of that though.
Mhh maybe the audible ID could be added as non standard tag to the file (I know it's id3 for mp3, don't know the standard for m4b files).
from libation.
I hope to revisit this eventually. For now though, there are just too many higher priorities items. So with respect to everyone here, I'm closing this for now -- I don't want to get your hopes up. If this were a paid job or if I had another few trusted developers, this could be a thing. I hope you understand.
Hopefully the structured exports can help you script a home spun solution.
from libation.
Fyi -- the "libhack" files are no mas. Do not use them. The alternative is officially supported now. The button which used to be edit-tags now exposes more functions, including this.
from libation.
from libation.
@wtanksleyjr libhack was, well, a hack and never intended as a usable feature.
The new workflow is that when a book is liberated, its state is saved in the db and it no longer matters what you do with the files. This change was made with users like you in mind. When this change was made recently, a migration script ran silently in the background to record these existing states to the database. If the file was found, it was set to Liberated. If not, it stayed on Not Liberated, and if the libhack file was found it was set to Error. Therefore, I imagine you have a ton of books with an Error status. You can manually change these in the UI, 1 book at a time.
Normally I 100% do not endorse users touching the database or coding directly against it -- the database is not an API and will not be supported like one. In this one case what you need to do is update Books set BookStatus=1 where BookStatus=2;
0 = Not Liberated , 1 = Liberated , 2 = Error
In general please do not write scripts against the database. I need to be able to alter it without breaking other people's stuff.
from libation.
from libation.
Thanks for this! Really appreciated.
from libation.
Related Issues (20)
- M4B ENCODING OPTIONS HOT 9
- Error upon Library scan with 10.6.3.1 HOT 2
- Minor display/layout issue HOT 10
- Unexpected Error HOT 11
- Error Importing Library HOT 2
- x86 version possible? HOT 3
- Windows Classic Settings scaling layout HOT 6
- macOS Catalina: Uncaught exception 'NSInternalInconsistencyException HOT 3
- Frozen "Audible Login" dialog on first import HOT 2
- License Denied - To the Best of Our Knowledge HOT 5
- Cannot edit custom naming for files HOT 1
- [Feature Request] Include evaluated file path as a column in main grid HOT 5
- Icon not visible when pinned to dark taskbar in KDE Plasma HOT 10
- State of traffic light icons difficult to see when using Libation's dark theme setting HOT 7
- Add Audiobook description/content metadata HOT 2
- Show sample custom naming for both books and podcasts HOT 3
- Feature Request: Allow custom book metadata that can be referenced in file naming templates HOT 2
- [Feature Request] Force rescan to detect book length changes. HOT 1
- Linux on X11 - instant crash HOT 4
- Newer Books Unable to Be Downloaded and Listed as [Blank Title] HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from libation.