Sasindu Bandara
← AppsLive — v1.1.0

A desktop media downloader that ships as a real installer.

Download

Version 1.1.0 — 24 Aug 2026

48 MB

Unsigned build — right-click the app and choose Open on first launch.

55 MB

Unsigned installer — SmartScreen will warn once; choose More info, then Run anyway.

Source and release notes on GitHub.

Download from the web

Runs in your browser
01

Waiting for a link

Preview
02Choose the format
Quality

Highest available, merged to MP4

Subtitles
03Two ways to finish

In the app

Copy your link, then open Media Downloader and paste it. The app does the fetching on your machine, at your connection speed, with no queue and no size limit.

Detecting your system…

Also available: macOS (Apple Silicon), Windows

In the terminal

The exact command for the options above. Needs yt-dlp and ffmpeg installed — the app bundles both so you do not have to.

yt-dlp -f "bv*+ba/b" --merge-output-format mp4 -o "%(title)s [%(id)s].%(ext)s" "<paste your link>"

Nothing you paste here leaves your browser. This page prepares the download; your machine performs it. Fetching media on the server would mean running a public download service from this domain — and the platforms block datacenter addresses anyway, so it would stop working within days.

First launch

Both builds are unsigned, so each system warns you once. This is not the app misbehaving — it is the cost of not paying for a certificate, and it happens exactly once per machine.

macOS

  1. 01Open the .dmg and drag the app to Applications
  2. 02Right-click the app and choose Open
  3. 03Click Open again in the dialog

Windows

  1. 01Run the installer
  2. 02On the SmartScreen warning, click More info
  3. 03Click Run anyway

What it is

Most tools in this category are a Python script and a README that assumes you already have a working toolchain. The interesting engineering problem is not the downloading — yt-dlp solves that — it is turning a Python GUI into something a non-technical person can install on two operating systems without touching a terminal.

That means bundling ffmpeg into the app so high-resolution downloads work out of the box, because anything above 360p arrives as separate video and audio streams that have to be merged. It means a PyInstaller spec per platform, an Inno Setup installer for Windows, a .dmg for macOS, and a GitHub Actions matrix that builds all of it from a version tag. It means a first-run experience that explains the unsigned-binary warning instead of letting the user conclude the app is broken.

The app itself is tkinter: quality presets, MP3 export, subtitle selection including Sinhala and Tamil, playlist handling, live progress with speed and ETA, and a cancel that stops cleanly mid-download. It also updates its own yt-dlp from inside the UI, because extractors break when platforms change their players and the fix is almost always just a newer yt-dlp.

What it does

  • Quality presets from best down to 360p, plus smallest-file mode
  • MP3 export at 192 kbps
  • Subtitles in English, Sinhala and Tamil, including auto-generated
  • Live progress with speed, ETA and file size, and a clean cancel
  • ffmpeg bundled — no separate install for high-resolution merging
  • Self-updating yt-dlp from inside the app
Version
1.1.0
Built with
Python, tkinter, yt-dlp, ffmpeg
Packaging
PyInstaller, Inno Setup, GitHub Actions
macOS
Apple Silicon (arm64)
Windows
64-bit installer
Price
Free, open source

Build notes

  1. 01

    Bundling ffmpeg was the difference between working and not

    Without ffmpeg on the PATH, every download silently caps at 360p — the only resolution served as a single combined stream. Users read that as a broken app, not a missing dependency. Shipping the binary inside the bundle and checking for it before falling back to PATH removed the single largest source of confusion.

  2. 02

    The release is triggered by a tag, not a push

    Pushing to main does nothing. Pushing a v-prefixed tag starts the build matrix, which produces both installers and attaches them to a GitHub release. The version string lives in three files and all three have to agree, which is exactly the kind of thing that should be checked by CI rather than remembered.

  3. 03

    Code signing is where hobby projects hit a wall

    Windows certificates run a few hundred dollars a year; Apple's programme is 99 and notarization is mandatory on modern macOS or the app simply refuses to open. Shipping unsigned and documenting the first-launch workaround is the honest trade for a free tool — but it is a real cost paid by every user, and worth naming rather than hiding.

Built by Sasindu Bandara, Software Engineer at Innovative-e, Inc. in Colombo, Sri Lanka.

Other apps

Colombo — GMT+5:30

I'm interested in hard problems at scale — distributed systems, AI integration that actually ships, and teams who care about the second year of a codebase. If that's you, say hello.