Local-first file conversion, download, and post-processing. 50+ formats. Zero uploads. Zero limits.
Contrary Convertor is a free, open-source desktop app that converts, downloads, and post-processes files completely locally β no cloud, no subscriptions, no file size caps, no account. Drop in a file, pick an output format, convert. That's it.
| Platform | File | Link |
|---|---|---|
| πͺ Windows | .exe installer (NSIS) |
β Releases |
| π macOS | .dmg disk image |
β Releases |
| π§ Linux | .AppImage (portable) |
β Releases |
No installation required for AppImage β just
chmod +xand run.
Windows installer bundles everything. Double-click and go.
- Formats: JPG Β· PNG Β· WebP Β· AVIF Β· GIF Β· TIFF Β· BMP Β· ICO Β· SVG
- Auto EXIF rotation β images never come out sideways
- Handles truncated or malformed images gracefully (
failOnError: false) - Quality presets: Lossless Β· High Β· Medium Β· Custom (manual slider)
- Resize by width/height with aspect-ratio awareness
- Formats: MP4 Β· WebM Β· MOV Β· AVI Β· MKV Β· GIF Β· FLV Β· WMV
- H.264 + yuv420p +
-movflags +faststartbaked in for maximum compatibility - Platform compatibility fix mode β rewraps and re-encodes for specific targets
- Extract audio from any video (MP3, WAV, FLAC, OGG, AAC, Opus)
- Framerate and resolution controls
- Formats: MP3 Β· WAV Β· FLAC Β· OGG Β· AAC Β· Opus
- Proper codec mapping per format (libmp3lame, pcm_s16le, flac, libvorbis, aac, libopus)
- Bitrate control
- PDF: β HTML Β· TXT Β· extract images Β· extract fonts Β· watermark
- DOCX/DOC/ODT: β PDF Β· HTML Β· TXT Β· extract images Β· extract text
- HTML: β PDF (via headless Puppeteer) Β· PNG screenshot
- Markdown: β HTML
- JSON β CSV β XML β YAML β TOML β .env β bidirectional, all combinations
- XLSX β CSV Β· JSON Β· Excel
- Nested object auto-flattening for .env export
- ZIP, TAR, GZ β compress and extract
- Game archives:
.pak(Unreal 4/5) Β·.rpf(GTA V / RDR2) Β·.wad(Doom) Β·.obb(Android)
- TTF β OTF conversion via opentype.js
- Font metadata extraction (family, designer, glyph count, version, license)
- OBJ β GLB Β· GLB β OBJ Β· FBX β GLB
Click "Want to download a link?" below the dropzone to switch to download mode. Paste any URL and hit download.
| Source | Method | Formats |
|---|---|---|
| YouTube | yt-dlp (auto-installed) | MP4 (1080p/720p/480p/360p/Best) Β· MP3 |
| Spotify | spotdl (auto-installed) | MP3 @ 320k |
| yt-dlp | MP4 Β· MP3 | |
| TikTok | yt-dlp | MP4 Β· MP3 |
| Twitter / X | yt-dlp | MP4 Β· MP3 |
| yt-dlp | MP4 Β· MP3 | |
| Twitch | yt-dlp | MP4 Β· MP3 |
| yt-dlp | MP4 Β· MP3 | |
| Vimeo | yt-dlp | MP4 Β· MP3 |
| SoundCloud | yt-dlp | MP3 |
| Direct links | Multi-threaded downloader | Any file type |
Notes:
yt-dlpis downloaded automatically on first use β no manual setup needed.- Spotify downloads work via
spotdl, which is silently pip-installed on first use (uses the bundled Python if Python isn't on your system). - Pasting a Spotify URL automatically locks the format picker to MP3.
- Direct link downloads support configurable parallel threads (1β16) for faster large-file downloads.
- Real-time progress shows percent, MB/s speed, and downloaded/total size.
- Select any image β choose "Remove BG" from the dropdown
- On-device AI subject detection β uses ONNX/WASM (
@imgly/background-removal-node), nothing leaves your machine - Mask editor β paint/erase canvas overlay to refine edges:
- ποΈ Brush β paint areas to keep
- π§Ή Eraser β remove from mask
- Adjustable brush size (5β80px), crosshair cursor
- Output:
filename_removedbg.png(transparent PNG) - AI model (~50MB) downloads once on first use, then cached
- Select any audio or video file β choose "BG Noise Removal" under Post Process
- Pass 1 (DSP): double
afftdn+anlmdn+ low-shelf equalizer via FFmpeg - Pass 2 (AI): DeepFilterNet speech enhancement model
- DeepFilterNet is silently auto-installed via pip on first use
- Falls back gracefully to Pass 1 if DeepFilterNet is unavailable
- Works on single files and bulk batches
- Output:
filename_denoised.ext
- Full text extraction page-by-page via
pdfjs - Where images exist in the PDF:
[Insert Image Here]placeholder is inserted - OCR for images β Tesseract.js extracts text from JPG, PNG, WebP, BMP, TIFF, GIF, AVIF
- pdf-lib fallback parser for encrypted/complex layouts
- Diagonal text watermark stamped across every page
- Adjustable opacity (0.00β1.00, default 0.15)
- Custom watermark text input
- Output:
filename_watermarked.pdf
- Drop multiple files at once for batch conversion
- Right-click the dropzone β multi-file selection dialog
- Common output formats computed from intersection of all files' supported formats
- Per-file progress reporting and individual success/failure history entries
- Works with all conversion types including noise removal and watermarking
- Ctrl+V to paste files directly into the app
- Works with files copied from Explorer and screenshots from clipboard
- Clipboard images are saved to temp and loaded automatically
Open with the β gear icon in the title bar:
| Setting | Description |
|---|---|
| Download Threads | Parallel connections for direct link downloads (1β16) |
| yt-dlp Quality | Default video quality: Best Β· 1080p Β· 720p Β· 480p Β· 360p Β· Audio Only |
| Library | Purpose |
|---|---|
| Electron | Desktop shell |
| fluent-ffmpeg + ffmpeg-static | Video / audio processing |
| sharp | Image conversion |
| pdf-lib | PDF manipulation & watermarking |
| pdfjs-dist | PDF text extraction |
| mammoth | DOCX β HTML/TXT |
| puppeteer | HTML β PDF / PNG |
| tesseract.js | OCR for images |
| @imgly/background-removal-node | AI background removal |
| yt-dlp | Video/audio downloading |
| spotdl | Spotify downloading |
| DeepFilterNet | AI noise removal |
| file-type | Magic byte file detection |
| opentype.js | Font conversion |
| node-stream-zip | Archive handling |
git clone https://github.com/AroseEditor/Contrary-Convertor.git
cd Contrary-Convertor
npm install --legacy-peer-deps
npm start# Windows installer (.exe)
npx electron-builder --win nsis
# macOS DMG
npx electron-builder --mac dmg
# Linux AppImage
npx electron-builder --linux AppImageOutput goes to dist/. A build-release.bat is included for Windows convenience.
A unified release workflow (.github/workflows/release.yml) builds all three platforms in parallel, auto-extracts the version from package.json, parses the matching section from updates.md as release notes, and drafts a GitHub Release. Trigger it manually from the Actions tab.
PRs welcome. Open an issue first for major changes.
- Fork the repo
- Create your branch:
git checkout -b feature/my-feature - Commit:
git commit -m 'Add: my feature' - Push:
git push origin feature/my-feature - Open a Pull Request
See updates.md for the full version history.
MIT Β© Arose Editor
If this saved you time, you can support development via UPI β DM on Discord: ayush.ue5