Skip to content

wuvt/rolled

Repository files navigation

rolled

Return Of Librarian Len's Electronic Database (ROLLED) is the latest advent in disk-locating technology.

usage

There are four fundamental parts of this software:

  • the ingestion scripts
  • a postgres database
  • a typesense node
  • the frontend

The ingestion and frontend are containerized, and configured entirely via environment variables: refer to the table below to set everything up to your liking.

environment variable purpose
ING_POSTGRES_HOST pg endpoint
ING_POSTGRES_PORT ingress pg port
ING_POSTGRES_USERNAME ingress pg username
ING_POSTGRES_PASSWORD ingress pg password. secret.
ING_POSTGRES_DATABASE ingress pg database name
ING_TYPESENSE_HOST ingress typesense node. this software does not support a multi-node search cluster at the moment.
ING_TYPESENSE_PORT ingress typesense port. see above re: clusters.
ING_TYPESENSE_PROTO ingress typesense protocol. (http/https)
ING_TYPESENSE_BOOTSTRAP_API_KEY initial/admin api key. secret.
ING_TYPESENSE_SEARCH_API_KEY generated search/read only API key. this will be exposed on the frontend.
FE_TYPESENSE_HOST typesense backend endpoint relative to client
FE_TYPESENSE_PORT typesense backend port relative to client
FE_TYPESENSE_PROTO typesense backend protocol (http/https)
FE_TYPESENSE_SEARCHKEY generated search/read only API key. this will be exposed on the frontend.
FE_ALLOWED space-separated list of allowed CIDR-format IP ranges. by default the frontend denies all access.

The endpoints prefixed ING_ are relative to the ingestion container. The ones prefixed FE_ are relative to the client (sans FE_ALLOWED, which is relevant to the frontend container). Keep this in mind as you dockerize or k8s-ize or whatever: the client does not have cluster networking (probably. you might be doing something cursed. not my business if so.).

Furthermore, the ingestion scripts expect /data to contain a /data/sheets with the source spreadsheets. Cached MusicBrainz API content will be read and written to /data/manifest.json, so if you're bringing your own mount that as well.

prod

In production, you will probably be inclined to use a non-local postgres or typesense database.

dev

For development purposes, it has all been containerized in a single docker compose file: simply construct a dev.env file in the root of this repository following this format:

POSTGRES_USER=root
POSTGRES_PASSWORD=<some entropic password. or 'aids'. whichever you prefer.>
TYPESENSE_API_KEY=<some string, which will become the typesense bootstrap/admin api key>
ING_POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
ING_TYPESENSE_BOOTSTRAP_API_KEY=${TYPESENSE_API_KEY}
ING_TYPESENSE_SEARCH_API_KEY=<some string, which will become the search-only key exposed by 
the frontend>
FE_TYPESENSE_SEARCHKEY=${ING_TYPESENSE_SEARCH_API_KEY}

place your spreadsheets in ./ingestion_data/sheets/, run docker compose up, then open localhost:1337 in the web browser of your choice.

contributing

WUVT IT is always looking for helping hands. Hit us up.

This software is licensed & available in its entirety under the GNU GPL.

Copyright 2025 WUVT-FM et al.

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. 

roadmap

  • spread the scope to include liners/promos/IDs/etc.
  • allow digital playback of media for which there is a digital copy
    • alexandria http over the local network (which already exists)
    • symlink directory /tank/library/rolled/<mbid>/<track#>.flac
      • should be piss easy to add a HEAD req check during ingestion to check for album existence
      • then likewise easy to generate a link to the nth track symlink
  • direct injection of "playback" into the airchain? everyone jacks into the board anyway...
  • pages for artists, maybe. /artist/mbid, pulls in a picture/desc/albums (with art)
  • pages for albums, then, i guess. you get the idea.

About

A simple metadata-matching and search frontend for an Excel-based music library

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors 4

  •  
  •  
  •  
  •