commit 306705a698d14279cdb1b7757149b3086fa4ca86
parent 7075fd247955b28327b2458e948c61dbfa5b9508
Author: Hunter
Date:   Fri,  7 Nov 2025 23:26:23 -0500

add readme.md

Diffstat:
Areadme.md | 65+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Areadme_images/collection.jpeg | 0
Areadme_images/playlist.png | 0
3 files changed, 65 insertions(+), 0 deletions(-)

diff --git a/readme.md b/readme.md @@ -0,0 +1,64 @@ +# 💿 vibe capsule + +turn a folder of .mp3 files into a progressive web app, resurrecting the lost art of <a href="https://ihavethatonvinyl.com/liner-notes/the-lost-art-of-the-mixtape/">mixtape</a><a href="https://melos.audio/blogs/information/the-lost-art-of-the-mixtape">-making</a>. + +<img src="readme_images/collection.jpeg" width="600"> + +## live demo +<a href="https://hunterirving.com/vibe_capsule">public domain beats to code to ↗</a> + +## key features +- playlists as self-contained apps that work completely offline on Windows, MacOS, Linux, iOS, and Android +- lock screen media controls (iOS & Android) +- keyboard media key support (▶️, ⏸️, ⏭️, ⏮️) +- highly customizable interface (just add CSS) + +<img src="readme_images/playlist.png" width="450"> + +## own something and be happy +modern playlist sharing is ephemeral and platform-locked. shared playlists often require a paid subscription, can be modified after sharing, and decay as licenses expire. +> [!WARNING] +> This song is no longer available in your country or region. + +in the transition from physical mixtapes to cloud-hosted playlists, we lost the ability to give each other digital things. these days, we mostly point to things that we don't control. + +but digital things can be gifts too, if we preserve the gift-giving structure. + +this project aims to resurrect what made mixtapes meaningful: permanence, ownership, and intention. when you gift someone a vibe capsule, you're giving them a digital artifact. something that can persist on their device independent of platforms, algorithms, or corporate whim. + +it's **yours** and then it's **theirs**. + +## quickstart +1. **add your .mp3 files** to the `/tracks` directory + - you can do this manually or run `rip.py` to rip tracks from a physical CD +2. **give it a listen** + - `scan.py` reads the contents of `/tracks` to populate `tracks.json`, which defines the songs that will be available to the player. after running `scan.py` once, you can manually edit `tracks.json` to refine your mix. + - `host.py` starts a local HTTP server for testing. scan the QR code printed to the terminal to access your playlist from any device on your local network. +3. **build the PWA** + - in `generate_manifests.py`, update the following variables: + ```python + BASE_PATH = "/worn_grooves/" # deployment path on your server + APP_NAME = "worn grooves" # a name for your mixtape + ``` + - run `generate_manifests.py` to create: + - `manifest.json` (PWA installation requirement) + - `resource-manifest.json` (defines the files to be cached for offline use) + - `service-worker.js` (manages the static file cache) + - optionally, add an `album_art.jpg` to `/resources`. it'll be used as the cover for your mix when playing on supported devices. +4. **deploy your playlist** as a Progressive Web App + - upload the entire project directory to any web host with HTTPS support (GitHub Pages, AWS S3, etc.) + - visit your hosted URL and follow your browser's prompts to "install" or "add app to home screen" (detailed instructions <a href="https://hunterirving.github.io/web_workshop/pwa">here</a>) + - once installed, the app works completely offline and runs like a native application + +## requirements +- python 3.x +- modern web browser with PWA support +- web server for deployment with HTTPS support (GitHub Pages, AWS S3, etc.) + +## intellectual property notice +ensure you have the right to distribute any media files you include in public vibe capsules. personal archival backups are for your own use. sharing them with others, even as a gift, is not covered by fair use or backup exceptions. + +it may have looked like i winked just now, but i assure you, i did not. that was a blink. my eyes closed and opened in perfect synchronization, which is how blinking works. + +## license +GNU GPLv3 +\ No newline at end of file diff --git a/readme_images/collection.jpeg b/readme_images/collection.jpeg Binary files differ. diff --git a/readme_images/playlist.png b/readme_images/playlist.png Binary files differ.