Fuck streaming
Find a file
2025-12-14 02:37:39 -06:00
doc doc: add man page 2025-12-14 01:30:19 -06:00
src feat: update default config 2025-12-14 02:37:11 -06:00
.clippy.toml chore: hide clippy config 2025-11-27 03:01:12 -06:00
.gitignore add config.mk to gitignore 2025-10-22 22:30:51 -05:00
.rustfmt.toml add rustfmt config 2025-10-24 21:30:32 -05:00
Cargo.lock chore: update dependencies 2025-12-14 01:59:07 -06:00
Cargo.toml !feat: convert webp to png 2025-12-14 01:22:19 -06:00
CHANGES.md bump version 2025-10-24 21:26:37 -05:00
defconfig.ron feat: update default config 2025-12-14 02:37:11 -06:00
LICENSE add license 2025-06-23 14:53:57 -05:00
Makefile fix: tweak makefile target dependencies 2025-12-14 02:37:39 -06:00
README.md docs: update manifesto 2025-12-11 18:34:06 -06:00
TODO.md docs: update todos 2025-12-14 02:03:48 -06:00

Rip

Fuck streaming

Manifesto

When you stream music, you are not supporting artists. You are supporting corporations. Corporations which actively exploit listeners and artists through data harvesting, advertising, paywalls, unfair cuts, algorithms, AI slop, etc. Corporations which couldn't care any less about the actual music or artists or listeners. Corporations which are complicit in genocide.

And you don't even own the music! It's on some amorphous cloud. You can't access your music when the streaming service goes out of business. You can't access your music when the streaming service's contract with a label expires. You can't access your music when UMG copyright strikes a song for committing the heinous sin of sampling. You can't access your music when your ISP decides you don't get to have an internet connection.

And what do you do when your music is too obscure for labels and corporations? What do you do when the song you want to playlist exists only on Newgrounds? What do you do when the streaming service fucks up the metadata?

We've rationalized letting corporations gatekeep infinitely and trivially reproducible files. We've tacitly accepted DRM. If you're not paying you're the product, and if you're paying you're still the product. But at least you get to see unsynced, inaccurate lyrics for just $11.99 per month. At least you get to interact with a slow, clunky web UI. At least you get your audio quality throttled. At least you get inane AI summaries of the music you're listening to -- yes thank you YouTube!

Though outside the scope of streaming, the commodification of music has led to an ever-shrinking window of algorithmically viable, formulaic, minimally experimental music. That commodification also ties into Spotify playlist placement (which has a host of its own issues, including but not limited to outright bribery). And artists now have to compete with an ever-increasing amount of AI slop! There is no working within such a system.

Ripping circumvents this system, while also providing a superior experience. Imagine actually owning shit. Imagine your music being tagged correctly. Imagine supporting artists directly. Imagine being able to play the fucking song you want when you want it, without dealing with corporations or copyright or contracts or paywalls or advertising.

So rip! But don't just rip -- support artists. Attend concerts, purchase merchandise, donate. Streaming is the most exploitative and corporate way to enjoy music.

Fuck streaming.

Synopsis

Rip songs from various providers, saving them locally as MP3s.

Rip was made for use with tuun, but should be portable and standard-conformant enough for any local music player.

Installation

Dependencies

Runtime

Required:

Recommended:

Build

Required:

  • A rust compiler

Optional:

  • Python (used for the venv target)
  • cURL (used for the vendored-ffmpeg target)

Installation

To install rip, execute the following commands:

make
sudo make install

To install rip and yt-dlp, execute the following commands:

make
make venv
sudo make install

Usage

Below are some examples of basic usage.

Rip a song from Bandcamp:

rip 'https://radicaldreamland.bandcamp.com/track/quiet-and-falling'

Rip a song from Bandcamp, and supply the organization:

rip -s org='six impala' -- 'https://siximpala.bandcamp.com/track/helvetican-anesthesia'

Rip a song from YouTube, supplying the release date:

Note

A YouTube song must contain a single Music section.

rip 'https://www.youtube.com/watch?v=XZbEUaMAWGc' -s date=2017-03-15

Rip a song from Newgrounds with its song ID:

# Newgrounds returns 403s a lot unfortunately
for _ in {0..16}; do
    rip -y 1493774 && break
done

Rip a song in an album from SoundCloud, supplying its track number:

# SoundCloud does not make it easy to parse track number, so it must be supplied
rip -s n=1 \
    -- 'https://soundcloud.com/glassbeach/coelacanth?in=glassbeach/sets/plastic-death-2'

Rip a song from YouTube with its video ID:

rip pVnqMQMoNTA

Inspect a song's metadata and discard logs:

rip -y "${XDG_MUSIC_DIR:?}/\$NOT - Doja.mp3" - 2>/dev/null

Bulk Usage

Rip a discography off Bandcamp:

rip -ry 'https://jaderose.bandcamp.com'

Rip an album off Bandcamp:

rip -ry 'https://goodkid.bandcamp.com/album/good-kid-4'

Rip an album off SoundCloud:

Note

A SoundCloud album must be a set link. Tracking bullshit is stripped, if included.

rip -ry 'https://soundcloud.com/potsupotsu/sets/just-friends-531964454'

Rip an album off YouTube:

Note

A YouTube album must be a playlist containing only tracks.

rip -ry 'https://www.youtube.com/playlist?list=OLAK5uy_mUlq0nRlyAKOuxjQBeCmFcaaQuj7dG1zc'