A one-stop DaVinci Resolve workflow manager for Linux. Drop a video, and Monke figures out the rest: the codec, the flags, the frame-rate fix. Then it converts your finished edit back to an upload-ready MP4 and cleans up after itself.
Editing in DaVinci Resolve on Linux means running the same tedious loop by hand every time:
remember the ffmpeg command -> transcode to an edit codec -> edit ->
render -> transcode back to MP4 -> hunt down the multi-GB leftovers -> delete
Resolve on Linux won't import H.264/AAC MP4 at all, so every clip has to be transcoded to an edit codec first. And Android screen recordings are variable-frame-rate, which Resolve silently conforms to a fixed timeline, so the audio drifts out of sync minutes into the edit, long after you'd notice why.
Monke Convert puts the whole loop in one window, and the frame-rate fix happens automatically, so you never find out it was needed.
Select video -> Convert -> Open in Resolve -> Render -> Convert back -> Clean up
The one button that makes this feel like a tool rather than a graphical wrapper. It inspects the file and picks the right command, and it tells you why, instead of asking you to trust it:
| Monke sees... | because... | Monke does... |
|---|---|---|
| πΌ Already Resolve-ready | codec is ProRes / DNxHR / MJPEG | skips conversion, so import it directly |
| π± Android screen recording | MediaMuxer tags, no rotation, variable frame rate | Everyday + automatic CFR fix |
| π± Android camera | MediaMuxer tags, rotation matrix, GPS | Everyday (Maximum if 10-bit) |
| π iPhone / iPad | Apple Core Media tags | Everyday (Maximum if 10-bit HDR) |
| π₯οΈ Desktop capture (OBS, Kazam) | ffmpeg muxer + monitor resolution | Everyday |
| π¬ Cinema / 4K / HDR | 3840 wide or more, 10-bit, or Rec.2020 | High quality / Maximum |
| π₯ Anything else | no distinguishing metadata | Everyday, a safe default |
From your side, every video is just Browse, then Convert.
You should not need to know what "DNxHR SQ" means to convert a video. Every option leads with a name you can act on, prints the technical name quietly beside it, and shows both the file size and how long it will take before you commit:
| Technical name | Speed | Good for | |
|---|---|---|---|
| Draft | DNxHR LB | β‘ Fast | rough cuts, long screen recordings |
| Everyday | DNxHR SQ | β‘ Fast | almost everything, and the default |
| High quality | DNxHR HQ | β‘ Fast | colour grading |
| Maximum (10-bit) | DNxHR HQX | β‘ Fast | HDR and 10-bit cameras |
| ProRes Draft to High | ProRes Proxy to HQ | π’ Slow | handing footage to a Mac or Final Cut |
Yes, and that is the point. DaVinci Resolve on Linux ships Avid's own libDNxSDK.so
and offers DNxHR LB, SQ, HQ, HQX and 444 as render presets. It will decode ProRes,
but it does not write it on Linux. DNxHR is the codec Resolve is happiest with here.
It is also much faster. Measured on a 12-thread Ryzen 5 3600 encoding 1080p30,
ffmpeg's prores_ks runs at 0.26 to 0.33x realtime, while dnxhd runs at
1.3 to 1.9x for the same file size and comparable SSIM. That is five to seven
times faster: a 28-minute lecture drops from roughly 85 minutes to about 15.
ProRes is still one click away, and honestly labelled Slow.
- A preview, not a filename. The video you dropped, with its resolution, length and codec as chips you can read at a glance.
- Real progress, not a spinner. A true percentage and ETA, parsed from ffmpeg's machine-readable output stream.
- Automatic VFR fix. Variable-frame-rate sources are conformed to a constant rate so the audio never drifts. This is the bug the whole app exists to prevent.
- Honest size and time estimates, before you commit an hour and 40 GB. DNxHR is computed exactly (its frames are 4096-byte aligned); ProRes is quoted as a range.
- Disk guard. Refuses to start an encode that won't fit, and aborts if the disk fills mid-transcode. The indicator turns amber under 20 GB and red under 10 GB.
- Pause, resume, and safe cancel. Cancelling deletes the half-written file; it never leaves a truncated MOV that looks complete.
- Overnight queue. Line up a term's worth of lectures and let them run.
- Back to MP4. Convert the finished Resolve render to H.264/AAC (CRF 18,
+faststart), with all metadata stripped so your GPS location doesn't get uploaded. - YouTube Shorts. Reframe to 1080x1920 by centre-crop or blurred background.
- Thumbnail grabber. Pick from nine frames sampled across the clip.
- One-click Resolve. Launch DaVinci Resolve straight from the app.
- Safe cleanup. Delete intermediates or the whole project, to the trash by default, with hard guardrails against deleting anything outside the project.
You're feeding this app video files, and video demuxers are a large, memory-unsafe parsing surface. Monke Convert treats every input as hostile:
- ffmpeg runs inside a bubblewrap sandbox. No network, no capabilities, an empty environment, the input mounted read-only and only the output directory writable. A malicious file that exploits a demuxer bug lands in an empty jail. (Auto-disables with a warning if bubblewrap isn't installed.)
- No shell, ever. ffmpeg is invoked with an argument list, never a command string, so there is nothing for a crafted filename to inject into.
- Protocol confinement. Every path is passed as a
file:URL with-protocol_whitelist file, so a file namedconcat:...orhttp://...is read as a file, not as an ffmpeg protocol. - Deletion is contained and reversible. Targets must resolve inside the project; symlinks are removed as links, never followed out. Everything goes to the trash by default, and deleting a whole project makes you type its name.
- Never clobbers. Encodes go to a temporary file and are atomically renamed on success, so a crash or cancel can't corrupt an existing render.
- No pickle, no
yaml.load, no network. Settings are validated JSON; history is parameterised SQLite; nothing phones home.
More detail in SECURITY.md.
Linux Mint / Ubuntu / Debian. ffmpeg is required; bubblewrap is recommended for the sandbox. There is no system PyQt6 package on these distributions, so the installer builds a private virtual environment. Nothing is forced into your system Python.
git clone https://github.com/harshavardhanmdev/Monke-Convert.git
cd Monke-Convert
./install.shinstall.sh does three things: it offers to apt install ffmpeg bubblewrap, it
builds the virtual environment, and it adds Monke Convert to your application
menu. It installs:
| What | Where |
|---|---|
| Launcher script | ~/.local/bin/monke-convert |
| Menu entry | ~/.local/share/applications/monke-convert.desktop |
| Icons (7 sizes) | ~/.local/share/icons/hicolor/*/apps/monke-convert.png |
Then press your Super key and type Monke, or run monke-convert in a terminal.
Each release ships a
single-file executable and a .deb:
# single binary
chmod +x monke-convert && ./monke-convert
# or the Debian package
sudo apt install ./monke-convert_*.debgit pullThat's it for the code: install.sh installs the package in editable mode, so a pull
takes effect the next time you launch.
If the icon or menu entry looks out of date, the desktop files need refreshing too. Re-run the installer, which is safe to run repeatedly:
./install.shYour desktop caches icons, so if the old one lingers, log out and back in.
The codebase has a hard rule that makes it a pleasure to test: monke_convert/core/
never imports Qt. All the decision-making (codec choice, command construction, VFR
detection, size estimation, path safety) is pure Python, exercised headlessly.
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest # runs real ffmpeg encodes; the sandbox tests need bubblewrap
ruff check .The suite includes end-to-end tests that transcode synthesized clips and assert the
things that matter: that a VFR source comes out with audio and video the same length,
that DNxHR sizes are predicted to the byte, and that a concat:-named file is read as
a file.
monke_convert/
core/ pure logic, zero Qt (safety, sandbox, probe, classify, commands, estimate)
workers/ QProcess encode runner, QThread prober, job queue
ui/ PyQt6 window, widgets and dialogs
Ideas tagged good first issue
are a great place to start contributing:
- Subtitle generation (Whisper)
- Silence removal
- Auto intro / outro
- Batch Smart Convert for a whole folder
- Windows and macOS builds
Pull requests are welcome. See CONTRIBUTING.md. The short
version: keep core/ free of Qt, add a test, and run ruff before you push.
MIT Β© Harsha Vardhan M
Powered by Nexorium Systems Private Limited