Snapshot of the existing codebase before working through the TASKS.md backlog. Real library data (data/) and the iTunes import fixture (itunes-test-library/) are gitignored. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4.7 KiB
ok, so, I have a big greenfield project for us. I want us to code up a replacement for itunes on linux. The context is that I've used itunes for 25+ years, I have hundreds of playlists and I rely on the specific UI of itunes. I have not found an existing replacement mp3 playing/library management program for linux which has all the features from itunes I want. So, I think we can write it together. I'd like to start by creating a bare minimum MVP scaffold that we can add features to as we go.
Key details:
- we need to be able to import an itunes library from itunes. 12.8.3.1. I want to be able to copy over all the data itunes keeps track of (I think? I don't actually know what data itunes keeps track of but I know the data that I use in itunes. I want 'last-played' for all the songs, album art... not sure what else is necessary. File information like date-added.
- where we store the library data needs to be easily synced via syncthing. I don't want to have to manage complicated databases. I'd love to keep the library as a file (or files) that are easily synced. I don't need to be able to edit the file simultaneously from multiple machines but it should be able to elegantly handle conflicts in the files. This is probably the most complicated part so I wonder if there's a library we can utilize somewhere? This might be the first part to research, we'll want to nail it from the beginning. 2b. The folder of mp3s (etc) will also be synced via syncthing.
- I want to keep the layout largely the same: left sidebar and righthand playlist view.
- The left sidebar should include 'library' where we have the 3 column: genre/artist/album view that can be toggled with ctrl-b (for browse)
- playlist view should have customizable columns, user decides which ones are visible and this setting is set per-playlist. Can sort each playlist by each of these different columns, which is also saved per playlist (saved which column it is currently sorted by). The actual play-order is also saved per-playlist and is not affected by temporarily re-sorting by another criteria.
- user can add folders for playlists in the left sidebar. Otherwise playlists are sorted alphabetically
- the application should be as universally compatible on linux as possible, would be great to use it on older systems, but modern fedora compatibility is fine. It should be a gui app just like regular itunes and support window re-sizing.
- play/pause should be controlled by spacebar, skip track forward/back should be controlled by arrow keys, and this should appear to linux as a regular media player so we can use media keys.
- songs can be dragged from any playlist or from the library to any other playlist to add them to the playlist 9b. it should also support copy/pasting of songs from one playlist to another
- songs can be imported to the library by dragging them into any playlist or opening them with the app. Once opened by the app, the mp3 files should be copied to a directory that is kept organized by the app by artist/album as identified by the ID3 tags. So if a song file, from outside of the app, is opened in the app, that file is copied in.
- this program should support mp3, m4a and flac playback.
- there should be a standard playback timeline that the user can scrub around to set the place in the song they want to listen to. There should also be play/pause and next/back buttons visible in the top left.
- we need to be able to edit the ID3 tags of each song through some 'info' menu we can activate somehow.
- we have no need for the itunes store or the visualizer or movie playback or radio or the mini player or cd burning or ipod syncing. Not every feature will need to be copied.
how to do it
First of all, please let me know if you have any questions so I can clarify this project for you.
Second, I'd like you to translate this spec into a tasks.md file that makes sense to you. I'll work with you from time to time to work through the tasks to get us to a working program.
Once we're ready to start programming I suggest we start with just details 1 and 2. Let's research them and make sure we have a solid choice before moving forward. So at first we'll just have an itunes database translation/import tool. I'll want to run it on my existing database to see if it works. It's a tall order! Sorry it's such a hard place to start but I think this is the crucial detail, migrating my old stuff. Let me know if you think we should actually start by approaching this another way.
To verify that the import worked maybe we could at least get the library and playlist view working. We don't need playback, or editing or anything. We can at least just display the imported library to confirm it's all there.