Vibecode AudioFetcher

track this build4 phases, 12 steps, beginner friendly
KINDA · weekend project
price $6/moyou'd save $72/yrbuild time one sittingcategory 🎬 audio & videoreplaced by 0 people

The core loop is genuinely one-shottable: a small local UI, yt-dlp for the fetch, ffmpeg for the encode, files land in a folder. What is not a one sitting is everything that makes a public converter feel reliable week after week · YouTube bot checks, cookies/PO tokens, geo blocks, fair queues, abuse protection, and a hosted path so non-technical people never open a terminal. Build the personal script; do not expect one prompt to replace a maintained public service.

the project pack5 files · written for this build, step by step
README.md
# AudioFetcher · indie build

A personal audio library whose hard problems are fetching politely and only once from sources that publish downloads, refusing to re-encode audio that is already in the format you asked for, and keeping an honest record of the permission claim behind anything fetched through the optional extractor.

Estimated effort: **weekend**. Work `BUILD_PLAN.md` top to bottom · every phase ends in a check that has to pass before the next one starts.

## Stack

| Part | Choice | Why |
| --- | --- | --- |
| Runtime | Python 3.12 with a small local web interface bound to the loopback address | this is one person's library and it should not be reachable from anywhere else |
| Fetching | Conditional requests with stored validators, one connection per host at a time | a feed poller that ignores caching headers is a poller that gets blocked |
| Encoding | ffmpeg, with stream copy preferred over transcoding wherever the format already matches | re-encoding lossy audio to a higher bitrate makes a bigger file that sounds worse |
| Storage | SQLite for rows, audio files on disk keyed by checksum | the checksum is the identity of a file and the filename is only a convenience |
| Extractors | An optional plugin interface, disabled unless configured, with an attestation record | the honest way to offer this is as a deliberate act with a name and a date attached |

## Before you start

Have every one of these ready. The plan assumes them from step one.

- [ ] **Python 3.12 or newer** · free
  - Why: Runs the local interface and the fetch queue.
  - Get it: python.org or your package manager.
  - Verify: python3 --version prints 3.12 or higher
- [ ] **ffmpeg with ffprobe** · free
  - Why: Probing before encoding is what makes the stream-copy path possible, and ffprobe is how you know whether to encode at all.
  - Get it: Your package manager.
  - Verify: ffprobe -version prints a version and ffmpeg -codecs lists an MP3 encoder
- [ ] **The published terms of every host you intend to fetch from, read and recorded** · free
  - Why: Rule zero rests on what those documents say today, and they change, so reading them is part of setup rather than part of the argument afterwards.
  - Get it: Read each host's terms and record the URL and the date in your configuration.
  - Verify: Every configured host has a terms URL and a date recorded
- [ ] **Disk space with a number you have decided in advance** · free
  - Why: An audio library grows until something stops it, and the thing that stops it should be a ceiling you chose rather than a full filesystem.
  - Get it: Decide the ceiling and the path, and put both in configuration.
  - Verify: Filling to the ceiling refuses new fetches
- [ ] **Whether any extractor will be enabled, and on what basis** · free
  - Why: This decision changes what the tool is, and making it deliberately at the start is the difference between a library and a liability.
  - Get it: Write down the answer, and if it is yes, write the attestation statement you are prepared to sign.
  - Verify: The README and the configuration agree, and the attestation row exists if enabled

## Quick start

Follow Phase 1 in `BUILD_PLAN.md`; it creates the project.

Then copy `.env.example` to `.env` and fill in the values it documents.

## Honest limits

This build deliberately does not replace:

- A hosted service other people can use.
- Anything that works around a protection measure.
- A shipped, enabled extractor for any platform.
- Loudness normalisation and audio repair.
- hosted UI for non-technical users
- playlist preview with per-track checkboxes
- priority queue and 320 kbps Pro path
- someone else fighting YouTube bot checks, PO tokens, and geo blocks
- email magic-link Pro auth and fair multi-user queueing

If one of those is essential to you, that is the reason to keep paying for AudioFetcher, and the README should say so rather than pretend.

$ choose a build depth, inspect the files, then open the complete pack in your agent

why people still pay

Power users already run yt-dlp. Everyone else pays to paste a link in a browser and get an MP3 without installing tools or debugging LOGIN_REQUIRED. The money is convenience plus the permanent maintenance of staying ahead of YouTube client checks, not a novel audio algorithm.

what you lose

xhosted UI for non-technical users

xplaylist preview with per-track checkboxes

xpriority queue and 320 kbps Pro path

xsomeone else fighting YouTube bot checks, PO tokens, and geo blocks

xemail magic-link Pro auth and fair multi-user queueing

share on X ↗"I just replaced AudioFetcher ($6/mo) with one prompt"
the escape hatch

Don't feel like building it? These folks already made it free.

yt-dlpUgly, terminal-shaped, and still the downloader every prettier app quietly depends on.183kaug 2026open source↗PParabolicA polite desktop face on yt-dlp; paste a playlist, pick MP3, go make tea.6.8kjun 2026open source↗TTartubeA gloriously busy desktop queue for whole channels and playlists.3.1kjul 2026open source↗

all 3 free alternatives to AudioFetcher →· no votes, no pay-to-list · just what's real

the numbers

AudioFetcher pricing

planmonthlyannual (per mo)what you get
free$0/user$0/user3 conversions/day; individual videos up to 20 minutes; up to 256 kbps; 0 playlist conversions; standard queue.
pro$6/user$4.92/userUnlimited conversions; playlists; priority queue; 320 kbps output; videos up to 12 hours.
supporter passcustom—30 days of unlimited conversions; playlists; priority queue; 320 kbps; videos up to 12 hours.

free tier3 conversions/day; individual videos up to 20 minutes; up to 256 kbps; 0 playlist conversions; standard queue.

billingPro is monthly + annual; Supporter Pass is a one-time $5 purchase for 30 days.

hidden costsThe service's official terms require users to convert only content they own or have permission to use.

verified 2026-08-12 · source ↗

questions
Vibecode AudioFetcher

Kinda. The core of AudioFetcher is buildable in a weekend with the prompt on this page, but there are real gaps: hosted UI for non-technical users, playlist preview with per-track checkboxes. Read the honest list above before committing.

How much does AudioFetcher cost?

AudioFetcher costs about $6/month (Pro, checked 2026-07-30), which is $72 per year.

What do I lose by replacing AudioFetcher?

Honestly: hosted UI for non-technical users; playlist preview with per-track checkboxes; priority queue and 320 kbps Pro path; someone else fighting YouTube bot checks, PO tokens, and geo blocks; email magic-link Pro auth and fair multi-user queueing. If any of those are load-bearing for you, keep paying.

Is there an open-source alternative to AudioFetcher?

Yes: yt-dlp (Ugly, terminal-shaped, and still the downloader every prettier app quietly depends on.) Parabolic (A polite desktop face on yt-dlp; paste a playlist, pick MP3, go make tea.) Tartube (A gloriously busy desktop queue for whole channels and playlists.) All 3 curated free alternatives are at vibecodeit.com/audiofetcher/alternatives. The prompt is for when you want it exactly your way.