Improved Means for Achieving Deteriorated Ends


An Overcomplicated Music Setup

Intro

Some friends encouraged me to write up my system for managing my music collection so here we go. Let's start by going over my goals and hardware:

  1. No dependence on cloud services to listen to my music.
  2. Be able to listen via laptop, phone, or turntable.
  3. Be able to share music with friends easily via Library and Radio.
  4. Pay the damn artists.

It isn't very relevant but since many people share their listening setups, I'll briefly summarize that:

If it isn't already clear, Fuck Spotify in my opinion.

An Aside on Film

Why the hell isn't there a bandcamp for film? Seriously. I've recently started trying to build up a physical media collection for film and I would love to primarily buy from independent vendors or just not Amazon!

It would be wonderful to have a service where I could buy DRM-free digital copies in addition to steelbooks and follow studios or directors I know I like. If you have a place you like to buy films, by all means send word. I'm aware of Orbit and Diabolik but there's a lot not on either store.

The Process

One thing I'll freely admit is not great with my setup is discovery. I read a few online publications, am subscribed to a few substacks, and use nitter to check some X feeds without sending traffic to that hellhole. Acquisition is very well covered between Bandcamp and Discogs. I'm okay to rely on those services for buying music though like all SaaS they are at constant risk of enshittification.

I won't cover discovery as part of this article. I just want to talk through the wildness that is my library process. Alright, so we've found an album worth grabbing, maybe on bandcamp or maybe on discogs. We'll assume bandcamp since you automatically get free Flacs with physical media purchases. Okay, it goes like this.

  1. Run beets import to copy the Flacs into the music library.
    • beets is very good. It normalizes the folder and file naming, standardizes the tags based on what is in musicbrainz, and ensures album art is present. Brilliant.
  2. Copy normalized flacs to the tangara, add them to emacs with M-x emms-add-directory.
    • My kingdom for EMMS to support filesystem watching my music directory.
  3. Run beets convert to create opus files and load them on the phone.
  4. Add the new album to records.dat
    • This is a goofy S-expression based list of my record collection that lives in my emacs config and powers the bandcamp embedding and album art on radio.
    • One annoying part is getting the bandcamp release IDs, running this on the album page will do the trick: JSON.parse($("[name='bc-page-properties']")[0].content)['item_id']
    • At some point I'll extend this to support youtube embeds also.
  5. Run the covers.lisp script and collards deploy to make the album available on radio.

I won't claim that this process isn't a headache. I won't claim this is something that reasonable people should want to do. I am happy with it for my needs. And there are upsides.

Beets config

import:
  log: beet-import.log
  copy: yes
  write: yes
  resume: ask
  languages: en
  incremental: yes

paths:
  default: $albumartist - $album ($original_year)/$track - $title
  comp: Compilations/$album ($original_year)/$track - $title

plugins: convert fetchart mbcollection missing

convert:
  format: opus
  never_convert_lossy_files: yes
  embed: no
  copy_album_art: yes

fetchart:
  minwidth: 500
  maxwidth: 700

missing:
  count: yes

musicbrainz:
  user: somefin
  pass: LOL,NO
Favorite Albums of 2025