A small FastAPI + Vite React TypeScript application that downloads media from Instagram, YouTube, X/Twitter, Spotify and more.
Disclaimer: This project is provided for educational purposes only. Do not use it to infringe copyrights or to download content you do not have permission to access.
- Backend: FastAPI service that downloads media using
yt-dlp,instaloader, andspotdl. - Frontend: Vite + React + TypeScript UI to enter URLs and manage downloads.
- Python 3.10+ (3.11 recommended)
- Node.js 18+ and npm
- ffmpeg installed and available on your PATH (required by yt-dlp / ffmpeg postprocessing)
- Clone the repository
git clone https://github.com/Cheekurthi-Vamsi/Universal-Media-Downloader-.git- Backend setup
pip install -r requirements.txt
# optionally create a .env file in repo root to set API_KEY and other env vars- Run backend
# from repository root
uvicorn downloads.main:app --reload --host 0.0.0.0 --port 8000- Frontend setup & run
cd frontend
npm install
npm run devOpen the frontend URL shown by Vite (usually http://localhost:5173) and use the app. The backend defaults to http://localhost:8000.
API_KEY- optional, set to protect endpoints. If not set the server prints a generated key on startup.INSTALOADER_SESSION_FILE,INSTALOADER_USERNAME,INSTALOADER_PASSWORD- optional for Instagram private content.CORS_ALLOW_ORIGINS- comma-separated list of origins allowed for CORS (defaults to*).
- Use the frontend to paste a URL and choose media type (audio/video). The backend will return a
file_idand a download endpoint which will delete the file after it's served (cleanup also runs on TTL).
This tool can download content from third-party services. Make sure you have permission to download and store any content. Do not use this project to violate terms of service or infringe copyright.
- If downloads fail, check backend logs printed by uvicorn.
- Ensure
ffmpegis installed on your system and available in PATH for audio/video conversions. - For Instagram private content, set up
INSTALOADER_SESSION_FILEor login credentials as env vars.
- The backend stores temporary downloads under
downloads/and removes them after serving or via a cleanup TTL. - The frontend assets (favicon) are in
frontend/src/assets/.
If you'd like, I can:
- Start the dev servers and run a quick smoke test here.
- Generate a
favicon.icoand add multiple icon sizes for production.