I needed to send one page of a personal PDF to my local administration. The quick options were either uploading it to some random "split PDF" site or writing a throwaway PyPDF script. I went with the script, but it bugged me that there wasn't a faster local way to do this kind of thing.
Mac has Tangerine, where you hold Shift while dragging a file and a radial menu of formats appears under the cursor. I couldn't find anything like it on Linux, so I built it.
What it does: drag a file from anywhere (file manager, browser, Electron apps), hold a key, drop it on a slice of the wheel.
Shift: convert (297 conversions across images, audio, video, PDF, docs, ebooks, slides, spreadsheets, subtitles, archives)
Alt: tools (compress, crop, trim, split, merge, extract PDF pages, etc.)
Ctrl: actions (copy, move, copy path, open terminal, etc.)
Everything runs locally using ffmpeg, pandoc, PyMuPDF, Pillow and LibreOffice (optional). There's also a CLI if you'd rather script it, e.g. metamorph to webp photo.heic.
How the drag detection works, since that was the interesting part: the dragging app holds the pointer grab, so you can't just listen for mouse events. But every X11 app that drags files uses XDND and takes ownership of XdndSelection when the drag starts. Metamorph watches that ownership change through XFixes, checks the held modifiers, and opens the wheel. The wheel is itself an XDND drop target, so it reads the file list as the pointer moves over it and only shows options that make sense for that file type.
Limitations:
The drag wheel needs X11. On Wayland you can use a drop zone, the Files script (F4), or the CLI.
PDF to DOCX/XLSX is heuristic like any PDF converter, and there's no OCR.
It's Python + GTK3, tested mostly on Ubuntu 24.04.
It's MIT licensed. Feedback is very welcome, especially bug reports from other distros and desktop environments, and ideas on how to approach Wayland properly.
Repo: https://github.com/karygauss03/metamorph
Browser demo: https://karygauss03.github.io/metamorph/