A clean media toolkit for audio, video, covers and metadata.
MediaForge is a desktop-style media toolkit that helps you download media, save covers, export metadata, and keep everything organized.
It opens in your browser, runs on your machine, and stores files in clean folders by date, mode, and title.
Use it only with content you own, public domain content, Creative Commons content, or content you have permission to download.
| Media | Metadata | Workflow |
|---|---|---|
| MP3 / M4A / WEBM audio | cover image | URL analysis |
| MP4 video | description .txt |
background jobs |
| best original format | metadata .json |
organized output |
| audio/video quality presets | embedded tags when supported | batch URL queue |
| playlist expansion option | saved defaults | queue controls and output actions |
| clean portable builds | technical error details | open downloads from UI |
- Python 3.11+ installed
- FFmpeg installed and available in PATH
Check FFmpeg with:
ffmpeg -versionThe easiest way to use MediaForge is through the portable release.
- Download the latest
MediaForge-v1.1.0-portable.zipfrom the Releases page. - Extract the ZIP.
- Run
run.bat.
MediaForge will start locally and open in your browser.
From the project folder, run:
.\run.batMediaForge opens automatically at:
http://127.0.0.1:8787Paste multiple media links into the URL field, one per line.
MediaForge will create one job for each URL and process them through the queue.
Use Analyze preview to preview the first item before starting the queue.
Enable expand playlist links when you want a playlist URL to become multiple queued jobs. Use the playlist limit selector to choose 50, 100, 250, or no limit.
MediaForge keeps the jobs area simple while still giving control over larger batches and playlists.
- Click a status chip to filter the job list.
- Use
Refreshto update the list without removing anything. - Open the
Manage queuemenu for advanced actions. Pause queuestops new jobs from starting while current downloads continue.Resume queuecontinues queued jobs.Cancel queuedcancels jobs that have not started yet.Stop activecancels queued jobs and requests cancellation for running jobs.Clear finishedremoves completed, failed and cancelled jobs.Clear current filterremoves the current completed, failed or cancelled filter.- Error details stay open while the job list refreshes.
- The jobs area keeps stable spacing while queue controls open as a floating menu.
MediaForge includes quick presets for common download modes:
Audio best · MP3 320 · Video 1080p · Video 720p · OriginalYou can also save your current mode, quality and metadata options as local defaults.
Saved defaults are stored locally in:
mediaforge_settings.jsonThis file is ignored by Git and is not included in portable releases.
To create a clean portable ZIP from the repository:
.\tools\build_portable.ps1 -Version v1.1.0The generated ZIP is created outside the project folder.
The build script excludes development files such as .git, .venv, __pycache__, .pyc files and real downloaded media.
downloads/
└── 2026-05-31/
└── audio_mp3/
└── song_title/
├── song.mp3
├── cover.jpg
├── description.txt
└── mediaforge_metadata.jsonRepeated titles are saved safely as:
song_title_2
song_title_3
song_title_4MediaForge works best with YouTube and can also work with many compatible media links.
Examples may include:
YouTube · YouTube Music · SoundCloud · Vimeo · TikTok · Twitch · X/TwitterSome platforms may require login, cookies, region access, or may block extraction. DRM-protected streaming platforms are not supported.
Video quality
1080p max, 720p max, and 480p max mean “up to that quality when available”.
Audio quality
The MP3 bitrate controls the exported file. It does not improve the original source quality.
Jobs
Clearing jobs only clears the UI list. It does not delete downloaded files.
MediaForge is intended as a private desktop utility.
Current safeguards:
- binds to
127.0.0.1 - accepts only
httpandhttpsURLs - limits request body size
- constrains static file paths
- limits active jobs
- validates output folder actions inside
downloads - blocks clearing all jobs while downloads are running
- supports pausing and cancelling active queues
Do not expose it publicly without authentication, rate limiting, and additional hardening.
mediaforge/
├── app/
│ ├── server.py
│ ├── media.py
│ ├── jobs.py
│ ├── settings.py
│ ├── utils.py
│ └── static/
│ ├── assets/
│ │ ├── mediaforge-logo.png
│ │ └── preview.png
│ ├── index.html
│ ├── style.css
│ └── script.js
├── downloads/
│ └── .gitkeep
├── tools/
│ └── build_portable.ps1
├── CHANGELOG.md
├── SECURITY.md
├── requirements.txt
├── run.py
├── run.bat
├── RUN_SILENT.vbs
├── LICENSE
└── README.mdDeveloped by Diaboliko
Released under the MIT License.

