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