Paste a link. Pick a format. Done.
A desktop app and a self-hosted web app for downloading video or MP3 from YouTube, Pinterest, Instagram, Facebook and X — from one codebase.
Download · How it works · Build · Tests
Most yt-dlp wrappers are a text box and a button. They work for a week, then YouTube changes something and they quietly start handing you 360p — or nothing at all — with an error nobody can read.
ABSP is the same idea, done properly:
- It actually gets 4K. Most wrappers silently cap at 1080p because the YouTube client they use has been SABR-gated. ABSP uses the clients that still return the full stream ladder — with the measurements to back it up.
- It solves YouTube's JS challenge. Without a JavaScript runtime, yt-dlp returns zero playable formats. ABSP uses the runtime it already ships, so there is nothing extra to install — why this trips everyone up.
- It never eats your files. Every job runs in a scratch directory and only moves results into place on success. Downloading the MP3 of a video you already saved will not delete the video — which is exactly what happens when you get this wrong.
- It stays current. yt-dlp is fetched at runtime and updated with one click, because a pinned copy goes stale within days.
- It reads like software, not a stack trace. Every failure people actually hit maps to a sentence that says what to do about it.
No account, no telemetry, no bundled adware, no premium tier.
Grab the build for your machine from the latest release:
| Platform | File |
|---|---|
| macOS — Apple Silicon (M1–M4) | ABSP-*-arm64.dmg |
| macOS — Intel | ABSP-*.dmg |
| Windows 10/11 (64-bit) | ABSP Setup *.exe |
| Windows — portable, no install | ABSP-*-win.zip |
The first launch is blocked, because the builds are not code-signed — that needs paid certificates from Apple and a Windows CA. On Windows: More info → Run anyway. On macOS: System Settings → Privacy & Security → Open Anyway. One time, then it behaves like any other app.
On first run ABSP downloads its engine (yt-dlp + ffmpeg, ~130 MB) into your user data folder behind a progress screen. That happens once.
npm install
npm run serveIt prints a URL with an access token. Open that on any device on the same Wi-Fi, paste a link, tap Save to device. Same interface, same features — the server does the work and hands your phone the finished file.
| Sites | YouTube · Pinterest · Instagram · Facebook · X (Twitter) |
| Video | Up to 4K, MP4 — H.264 preferred for compatibility, VP9/AV1 optional |
| Audio | MP3, M4A, Opus, FLAC, WAV, with bitrate control |
| Playlists | Whole playlists and Pinterest boards, or a range like 1-10 |
| Batch | Paste many links at once |
| Trim | Save just a section, cut on keyframes |
| Queue | Pause, resume, retry, cancel — and it survives an app restart |
| Extras | Cover art, metadata, chapters, subtitles (embedded or .srt), SponsorBlock |
| Network | Proxy support, stall detection, resumable downloads |
Everything runs locally. Files land in ~/Downloads/ABSP, or wherever you point it.
A Node core wraps yt-dlp and ffmpeg, Electron wraps the Node core, and the browser UI is identical in both. There is no second implementation to keep in sync — the desktop app is the web app plus a native file picker.
server/
binaries.js fetches + updates yt-dlp / ffmpeg per platform
ytdlp.js format selection, structured progress, error translation
jobs.js queue, persistence, pause/resume/retry, stall detection
app.js HTTP API + server-sent events
standalone.js LAN web-server entry point
electron/ desktop shell — runs the same server on a random local port
public/ the UI, identical in both modes
→ Read the full technical write-up — the YouTube JS challenge, SABR and PO tokens, the client benchmark, the bug that deletes your files, and why macOS calls unsigned apps "damaged".
npm install
npm start # desktop app
npm run serve # web serverInstallers:
npm run dist:mac # .dmg + .zip for Apple Silicon and Intel
npm run dist:win # .exe installer + portable .zip
npm run dist:allBoth Windows targets cross-build from an Apple Silicon Mac with no Wine.
Regenerate the icon with npm run icon and the screenshot with
npm run screenshot — both are produced by scripts in this repo, not by hand.
npm test # 53 unit tests — deterministic, offline, gates CI
npm run test:e2e # 142 assertions against a live serverThe unit suite covers source detection, playlist rules, format selection, every error translation, download-folder validation and settings I/O.
The end-to-end suite drives the real HTTP API: probes and downloads across all five sites, every audio format, quality ladders, overwrite protection, job control, pause/resume/retry, playlist ranges, trimming, HTTP range requests, server-sent events and concurrency limits. It depends on five third-party sites, so it deliberately does not gate CI:
ABSP_TOKEN=e2etoken npm run serve # terminal 1
ABSP_TOKEN=e2etoken npm run test:e2e # terminal 2| Variable | Effect |
|---|---|
ABSP_TOKEN |
Fixed access token for web mode — one is generated if unset |
ABSP_NO_TOKEN=1 |
Disable the token entirely; trusted networks only |
ABSP_HOST=127.0.0.1 |
Bind to this machine only, no LAN |
PORT |
Web server port (default 8710) |
ABSP_DATA_DIR |
Override the data folder |
Everything else lives in Settings: download folder, codec preference, cookies, proxy, concurrency, stall timeout, SponsorBlock and subtitle options.
| Symptom | Fix |
|---|---|
| Downloads suddenly fail | Settings → Update engine. This fixes most breakage |
| Only low quality offered | Settings → Advanced → Player clients → android_vr,web_embedded |
| Private or age-restricted content | Settings → Use cookies from browser → Chrome |
| Safari cookies fail on macOS | Grant ABSP Full Disk Access, or use Chrome |
| "No video found" | The post is an image, not a video |
| A download hangs | It is killed after 5 minutes of silence — press Retry |
Issues and pull requests are welcome — see CONTRIBUTING.md.
Run npm test before opening a PR.
Download things you have the right to: your own uploads, Creative Commons and public-domain works, content the creator offers for download, or material your local law permits you to copy for personal use.
Bulk downloading violates the Terms of Service of all five sites. Instagram, Facebook and X posts also routinely show identifiable private individuals — saving and resharing those raises privacy questions that have nothing to do with copyright. ABSP is built to run on your own machine for your own use; running it as a public service is a different thing entirely, and that is on you.
Built on yt-dlp and FFmpeg. Both are excellent — this is a friendly face on top of them.
MIT licensed.