Compress, upscale and convert video, photos and audio on Windows: drop files, give each its own settings, press Start. Compress to a quality or to a size limit in MB, upscale 2x / 4x without inventing pixels, convert between the common video, image and audio formats. Outputs carry no metadata. One portable exe, no installer, no account; updates itself from GitHub Releases.
Drop files on the window · open a file's settings · press Start. Outputs land next to the sources.
- Three jobs, one window. Compress, upscale and convert are the same panel: pick the output format, the codec, the quality or a size limit, the scale. Every file in the list keeps its own settings; one click copies them to the other files of the same kind.
- A size limit that holds. Type a number of MB and the output stays under it: two-pass bitrate targeting for video, a quality search and then a downscale ladder for photos, a bitrate from the duration for audio.
- Upscale without invention. 2x / 4x by Lanczos resampling with a light sharpen, or by a small deterministic super-resolution network (FSRCNN bundled, EDSR for photos, downloaded once). The same input always gives the same output; nothing is painted in from noise or text.
- Clean outputs. By default no EXIF, XMP, IPTC, chapters, encoder tags or provenance manifests of any kind. Only the ICC colour profile is kept.
- Free and open source. GPL-3.0, no trial, no watermark, no paid tier. The source is here; build it yourself if you prefer.
- Portable. One
MediaForge.exewith a data folder next to it, no installer. Move the folder, move the app. The second launch brings the running window to the front.
- Download
MediaForge.exeinto a folder of its own, for exampleD:\Apps\MediaForge\. - Run it. FFmpeg is taken from
PATHor downloaded once into the data folder; an NVIDIA GPU is used for encoding when the machine has one. - Drop files or folders on the window (or press
Ctrl+O), open a file's settings if the defaults are not what you want, press Start. Outputs are written next to the sources as<name>_forge.<ext>.
Requirements: Windows 10 or 11 with the Microsoft Edge WebView2 Runtime (preinstalled on Windows 11 and on up-to-date Windows 10). No installer, no admin rights.
Note
The executable is not code-signed, so Windows SmartScreen may warn on first start (More info → Run anyway).
| Compress video | H.264, H.265 / HEVC, AV1 (CPU, or NVIDIA NVENC when present), VP9 and ProRes. A quality slider (100 = visually lossless) or a size limit in MB. Fit to 1080p / 720p / 480p, frame rate 24 / 30 / 60, audio kept, re-encoded to AAC or dropped. |
| Compress photos and audio | JPEG, WebP, AVIF, HEIC by quality or by size limit; MP3, AAC, Opus, OGG at a chosen bitrate or a size limit, with optional EBU R128 loudness normalisation. |
| Upscale 2x / 4x | Lanczos with a light sharpen (fast), FSRCNN (bundled, moderate) or EDSR (photos only, downloaded once, 38 MB per scale, best detail). Video frames stream through FFmpeg pipes; the thumbnail and the ETA show what to expect. |
| Convert | Video to MP4, MKV, WebM, MOV, GIF, or its audio track to MP3, M4A, Opus, FLAC, WAV; photos between JPEG, PNG, WebP, AVIF, TIFF, BMP, HEIC; audio between MP3, M4A, Opus, OGG, FLAC, WAV. |
| Clean outputs | Remove metadata is on per file by default: no tags, chapters or encoder names in the output. Off copies the source metadata as far as the target format allows. |
| Per-file settings | Every file opens its own panel; Apply to all video / photos / audio copies one file's settings to the others; the defaults for new files live in Settings. |
| Batch input | Drag and drop of files and folders (one level deep), several at once; a native multi-select dialog; duplicates are added once. Up to three files run in parallel. |
| Outputs | Next to the source or into one folder; a numbered suffix instead of an overwrite; Show in folder, Open, Run again; an optional folder opening and a sound when a batch finishes. |
| Liquid Glass UI | A 3:4 portrait window with refracting glass controls, spring motion and an animated background in one of four colour themes (Dusk, Nova, Frost, Bloom); a Scale setting from 100 to 200 %; embedded Sora and Geist Mono fonts; animation stops when nothing moves. |
| Self-updating app | New releases are detected on launch and then every 5 minutes, downloaded in the background (or on Download), verified by size and SHA-256 and installed on Restart. |
| Document | What it covers |
|---|---|
| User guide | Usage, keyboard, settings, formats and codecs, size limit, data folder, updates |
| Architecture | Stack, repository layout, modules, runtime data, behaviour, window |
| Bridge API | The JS ↔ Python contract: methods, events, payload types, option tables |
| Core | Probing, FFmpeg command lines, quality mapping, size targeting, upscale, jobs |
| UI design | Liquid Glass material, background, motion, components, copy rules |
| Build | Running from source, tests, building the exe, releasing, troubleshooting |
| Release notes | What changed in every version |
| Third-party components | What is bundled or downloaded, with licences |
Requirements: Windows, Python 3.14 (via the py launcher), PowerShell 5.1+, FFmpeg on PATH for the tests.
git clone https://github.com/softoblivion/media-forge.git
cd media-forge
powershell -ExecutionPolicy Bypass -File build\build.ps1The script creates .venv, installs the dependencies, runs the unit tests, draws the icon and produces
release\MediaForge.exe (one-file PyInstaller build, about 77 MB, most of it OpenCV) with release\SHA256SUMS.
| Task | Command |
|---|---|
| Run from source | set MEDIA_FORGE_HOME=%TEMP%\mf_scratch then scripts\run_dev.bat (--fake runs a simulated engine without touching files) |
| Unit tests | set MEDIA_FORGE_HOME=%TEMP%\mf_tests and set PYTHONPATH=src, then .venv\Scripts\python.exe -m unittest discover -s tests -t . |
| UI in a browser with mock data | python -m http.server 5173 --directory src\media_forge\ui, then http://localhost:5173/?mock=1 |
A single job runs without the window through
.venv\Scripts\python.exe -m media_forge.core.cli <file> [--set key=value ...].
Released under the GNU General Public License v3.0. Any distributed copy or derivative work must stay open source under the same license and keep the copyright notices.