
Cross-platform desktop app written in Go with Fyne UI framework.
No installation, no Python, no setup. One file — download it and double-click.
The button always gives you the newest version · browse all releases
MediaLoader.exe with the button above (about 350 MB — everything is inside the file).Documents folder.[!NOTE] “Windows protected your PC”? The app is not code-signed yet, so Windows SmartScreen warns about it. Click More info → Run anyway. The file is built from the source code in this repository.
The first launch takes a few extra seconds: MediaLoader unpacks its bundled
yt-dlp, FFmpeg and Deno into your user cache folder. Later launches are
instant.
macOS and Linux: no prebuilt package yet — see Build & Run to compile it yourself.
Download — automatic platform detection, quality segments, live progress |
Queue — per-item progress, speed and ETA |
History — last 50 downloads with a shortcut to their folder |
Settings — theme, bundled runtime status, cookies |
Technical log — collapsible raw yt-dlp output |
Empty states — every list explains what goes in it |
Light theme — switchable in Settings |
|
End users should download the installer/package for their OS. The release must
ship with its own yt-dlp, FFmpeg, and Deno runtimes; neither Python, pip, nor
a system PATH configuration is required.
MediaLoader[.exe]
bin/
yt-dlp[.exe]
ffmpeg[.exe]
ffprobe[.exe]
deno[.exe]
At launch, MediaLoader verifies these components. If one is missing, it asks the user to reinstall instead of failing during a download.
# Ubuntu/Debian
sudo apt install golang-go
# macOS
brew install go
# Windows: download from https://go.dev/dl/
sudo apt-get install gcc libgl1-mesa-dev xorg-dev
Put current platform-specific yt-dlp, ffmpeg, ffprobe, and deno
binaries in a directory, then point the app to it:
$env:MEDIA_LOADER_BIN_DIR = "C:\path\to\medialoader-runtime"
go run ./cmd
For release builds, copy this directory as bin/ next to the executable (or
to MediaLoader.app/Contents/Resources/bin on macOS). Pin versions and verify
SHA-256 checksums in CI before publishing an installer.
YouTube can temporarily block an IP address or ask for a browser sign-in. Each user must provide their own cookies; do not ship cookies with the app.
youtube.com in your own browser, sign in, and complete any CAPTCHA.cookies.txt format. yt-dlp documents
Get cookies.txt LOCALLY for Chrome
and cookies.txt for Firefox as suitable export extensions.cookies.txt grants access to your account session. Never commit, upload, or
share it; do not send it to support, and do not place it in an installer. The
repository ignores common cookie filenames. Advanced users may instead set
MEDIA_LOADER_COOKIES to an absolute file path.
The release bundles Deno because modern YouTube extraction needs a JavaScript runtime. It also bundles a current FFmpeg because YouTube often supplies video and audio as separate streams.
# Clone / download the project
cd medialoader
# Download Go dependencies
go mod tidy
# Run directly
go run cmd/main.go
# Build executable
go build -o medialoader cmd/main.go
# Windows build
GOOS=windows GOARCH=amd64 go build -o medialoader.exe cmd/main.go
# Build with no console window (Windows release)
go build -ldflags="-H windowsgui" -o medialoader.exe cmd/main.go
medialoader/
├── cmd/
│ └── main.go # Entry point
├── internal/
│ ├── downloader/
│ │ └── downloader.go # bundled yt-dlp/FFmpeg/Deno wrapper
│ ├── config/
│ │ └── config.go # User preferences
│ └── ui/
│ ├── app.go # Window shell, pages and actions
│ ├── theme.go # Dark/light palettes, sizes, radii
│ └── widgets.go # Cards, chips, sidebar nav, segments
├── images/ # README screenshots
├── go.mod
└── README.md
~/Downloads/MediaLoader/ (configurable)yt-dlp supports 1000+ sites nativelyfyne.io/fyne/v2/canvas.Imagetime.AfterFunc for scheduled downloads