Skip to content
All projects

MediaGrab

A personal-use media downloader that grew from a native Windows utility into a Next.js and FastAPI application, self-hosted with Docker Compose on a Linux Mint laptop and started manually when needed.

Personal Project

Self · 2026

One workflow. Two environments.

Follow the project from a Windows utility to a browser, a job API and a self-hosted runtime.

Desktop UI
MediaGrab Windows desktop application UI
MediaGrab Windows desktop application UI
The WPF desktop client showing URL input, format/quality selection, and download progress
Web UI — Light
MediaGrab web application light mode
MediaGrab web application light mode
Browser client in light mode showing URL input, format selection, and progress

The original local utility

The WPF client starts yt-dlp locally, with FFmpeg handling conversion or merging. The browser version moves that work behind an API.

Windows desktop

Inside the application

Explore the engineering decisions and their supporting evidence.

Project evolution1 / 3

Overview

MediaGrab is a personal-use downloader for supported media URLs, with audio/video output and selectable quality. This case study covers the C#/WPF Windows application and the browser client backed by Next.js and FastAPI. Both use yt-dlp to retrieve media and FFmpeg for conversion or stream merging. I manually start the containerized web application with Docker Compose on my Linux Mint laptop when needed. I have also used Cloudflare Tunnel and a custom domain to reach it remotely.

Project evolution: Overview. 1 of 13.

Result

MediaGrab includes a Windows desktop downloader and a browser-based downloader with a FastAPI job API. Both support audio/video output and quality selection. The desktop client saves files locally; the web version processes media on my Linux Mint server and returns the result to the browser. I manually start its separate Next.js and FastAPI containers with Docker Compose when needed. The GitHub repository is linked below.

  • C#
  • WPF
  • .NET
  • Next.js
  • React
  • TypeScript
  • Tailwind CSS
  • Python
  • FastAPI
  • yt-dlp
  • FFmpeg
  • Docker
  • Docker Compose
  • Linux Mint
  • Cloudflare Tunnel