A lightweight web application to download audio from YouTube videos in maximum available quality. Built with Flask, yt-dlp, and vanilla HTML/CSS/JS.
- Max Quality Extraction — Automatically streams the highest available bitrate audio from YouTube.
- MP3 Output — Audio is transcoded to a real MP3 using a bundled FFmpeg binary.
- Universal Link Support — Videos, shorts, live streams, and music.youtube.com.
- Audio Preview — Built-in HTML5 player for previewing before download.
- Download History — Recent conversions saved in browser localStorage.
- Minimal UI — Clean, light-mode interface.
Your Browser ──► Flask + yt-dlp ──► YouTube
localhost:5000 (runs locally) Home IP
The entire app runs locally on your machine. When you request a download, the local server extracts and downloads the audio from YouTube with yt-dlp, then streams the finished file to your browser. All YouTube requests originate from your home IP — no cookies, tokens, or cloud accounts required.
- Backend: Python, Flask, Flask-CORS,
yt-dlp - Frontend: HTML5, CSS3, JavaScript (ES6+)
- Icons & Typography: Font Awesome 6, Google Fonts (Poppins)
git clone https://github.com/aluukill/YTm3.git
cd YTm3
python -m venv venv
venv\Scripts\activate # Windows
pip install -r requirements.txtpython app.pyVisit http://localhost:5000 — paste a YouTube URL and download the audio. The app serves both the frontend and the API from the same local server.
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/status |
Health check |
POST |
/api/info |
Fetch video metadata (title, author, duration, thumbnail) |
POST |
/api/download |
Download the audio server-side and register a file token |
GET |
/api/file/<id> |
Stream the prepared audio (?download=1 forces a download) |
The server downloads the audio with yt-dlp (handling YouTube's signature, PO-token, and SABR checks automatically), transcodes it to MP3 with a bundled FFmpeg binary (imageio-ffmpeg), and streams it straight to the browser. No proxying through third parties.
YTm3/
├── app.py # Flask app: API server, yt-dlp wrapper & static frontend
├── index.html # Frontend
├── style.css # Styles
├── script.js # Client-side logic
├── logo.png # Logo
├── requirements.txt # Python dependencies
├── .gitignore
└── README.md
