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.
One workflow. Two environments.
Follow the project from a Windows utility to a browser, a job API and a self-hosted runtime.


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.
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