Repository navigation
Releases: kareem2099/DotMorph
Release list
DotMorph 2.0.3
Added
- AppImage updates. The AppImage carries update information
(gh-releases-zsync), and each release ships a.zsyncfile next to it, so
AppImageUpdate and AppImageLauncher can update DotMorph from GitHub Releases and download
only the parts that changed. The.zsyncis summed and signed like every other file.
Changed
- README: the AppImage no longer asks for
libxcb-cursor0(bundled since 2.0.2).
Full changelog: https://github.com/kareem2099/DotMorph/blob/v2.0.3/CHANGELOG.md
DotMorph 2.0.2
Fixed
- The AppImage now starts on systems without Qt's X11 libraries. On a clean Ubuntu 22.04
(and other minimal installs) it exited before showing a window: Qt's xcb plugin needs
libxkbcommon-x11,libxcb-cursorand 14 more XCB libraries that only machines with Qt
or a full desktop already have. The AppImage now bundles them (1.1 MB, taken from
AlmaLinux 8, so glibc 2.28 is still the minimum). - Two Qt plugins whose libraries are not shipped (PDF images, virtual keyboard) are left out
of the AppImage instead of failing to load.
Added
packaging/build.py appimage-test: starts the AppImage offline on a clean Ubuntu 22.04
X server and checks that its window opens. The release workflow runs it on every build.
Full changelog: https://github.com/kareem2099/DotMorph/blob/v2.0.2/CHANGELOG.md
DotMorph 2.0.1
Changed
- The AppImage is about a third smaller (~108 MB down to ~72 MB). The PySide6 wheels it
bundles carry Qt developer tools DotMorph never runs:lupdatealone was 53 MB, plus Qt
Designer,qmlls, test and compiler libraries, unused Quick Controls styles, type stubs and
pip.packaging/build.py appimagenow removes them before packing, and fails the build
if trimming would take out anything the app loads.
Full changelog: https://github.com/kareem2099/DotMorph/blob/v2.0.1/CHANGELOG.md
DotMorph 2.0.0
The first stable release. DotMorph was rebuilt end to end: a new conversion engine, a new
animated wheel, and native Linux desktop integration. The jump from 0.1.0 to 2.0.0 marks
that rewrite. There was no 1.x release.
Highlights
- 440+ conversions: 53 formats and 6 tools on 8 backends. DotMorph detects the tools
installed on your machine and only offers conversions that will work. It started with 9. - A two-ring radial menu drawn on the GPU:
- Categories sit on the inner ring, and each one blooms a fan of formats outward.
- Animations throughout: fly-out, glow, hover lift, progress arc, a particle burst on
success, and a shake on failure.
- Edge dock: drag the wheel against a screen edge and it becomes a slim tab. A half
wheel opens from it, like Android's edge panels. - Opens in about 0.1 s through a background daemon, instead of about 1 s to start Qt.
- Opens from anywhere:
- file-manager right-click (Nautilus, Thunar, Dolphin, Nemo)
- "Open with"
- a global hotkey with your copied files
- folders watched for new files
- the terminal
- Settings window, with a full Arabic interface (right to left) and DotSuite branding.
- Install it your way: pipx (PyPI), AppImage,
.deb, AUR, or from source. One tag
publishes them all. - Fully local: no uploads, no telemetry, Apache 2.0.
Added: conversion engine
-
Pluggable backend registry (
core/registry.py):- Each backend declares what it can convert and which tools it needs, and the live table
is built from what is installed right now. - When two backends can do the same conversion, the better one wins (Pillow before
ImageMagick, librsvg before ImageMagick for SVG). - A broken or odd tool can never take the app down.
- Each backend declares what it can convert and which tools it needs, and the live table
-
Format catalog (
core/formats.py): 53 formats in 4 categories, with aliases (.jpeg,
.jfif,.tif,.htm,.markdown,.mpg,.oga). The menu order puts targets of the
same category first (MP4 → MKV before MP4 → MP3), then the rest, then tools. For PDF,
images come first. -
Backends:
Backend Converts Notes Pillow PNG, JPG, WebP, AVIF, GIF, BMP, TIFF, ICO, TGA, image → PDF Keeps animation (GIF / WebP / APNG / AVIF), EXIF orientation, ICC profiles and EXIF. HEIC/HEIF with the optional heicextra.librsvg SVG → PNG, JPG, WebP, AVIF, GIF, BMP, TIFF, ICO, vector PDF Called directly through ctypes, the same renderer GNOME uses, so no new dependency. Text and fonts stay real text in the PDF. poppler PDF → PNG, JPG, WebP (one image per page), PDF → TXT Progress per rendered page. Ghostscript PDF compress, merge PDFs and images, PostScript → PDF Also renders PDF pages when poppler is missing. ImageMagick PSD, XCF, HEIC/HEIF, JPEG XL → any image format or PDF Renders to PNG first and Pillow writes the result, so distro policy.xmllimits on PDF don't get in the way.ffmpeg MP4, MKV, WebM, MOV, AVI, M4V, FLV, WMV, MPEG, TS, 3GP ↔ video, GIF, audio; MP3, M4A, OGG, Opus, FLAC, WAV, AAC, WMA ↔ audio; GIF → MP4/WebM Container swaps with the same codec are a stream copy (seconds, lossless), with a fallback to a transcode. GIF output uses a generated palette. Encoders are probed (libx264 → openh264 → mpeg4, VP9 → VP8). Live progress. LibreOffice DOCX, DOC, ODT, RTF, TXT, HTML, PPTX, PPT, ODP, XLSX, XLS, ODS, CSV → PDF and between Office formats Headless, with a private profile, so it works while LibreOffice is open. One conversion at a time. pandoc Markdown, HTML, reST, Org, EPUB, DOCX, ODT → HTML, Markdown (GFM), DOCX, ODT, EPUB, TXT, PDF Markdown → PDF goes through a PDF engine (typst, weasyprint, wkhtmltopdf, tectonic, xelatex, pdflatex), or through DOCX → LibreOffice. -
Tools that keep the format:
compress: JPG, PNG (palette), WebP, AVIF, PDF (Ghostscript/ebook) and video
(x264 / VP9). The result is never bigger than the original.resize-50androtate-90: images and video.strip: removes EXIF, GPS and tags from images, video and audio. A JPEG keeps its
quantisation tables, so there is no visible quality loss.mute: drops the audio from a video.merge-pdf: several images and/or PDFs into one PDF.
-
Options for every conversion:
resize(50%,1920x1080to fit inside, or1280for width)stripquality(1–100)dpi, with per-format defaults: PDF 150; SVG 96, which keeps its original sizeoverwritetimeout
-
Real progress from ffmpeg (
-progress), PDF pages, and batches. When a tool can't
report progress, the UI shows elapsed seconds instead. -
Cancel: kills the external tool's whole process group within about 0.5 s.
-
Parallel batches (
jobs). Outputs keep the input order, and LibreOffice jobs are
serialised automatically. -
Safe output:
- Every job works in a hidden
.dotmorph-*folder next to the output, so the final move
is a rename and half-written files never appear. - Existing files are never overwritten unless asked (you get
name (1).ext). - Parallel jobs never claim the same name.
- Every job works in a hidden
-
Helpful errors:
- A missing tool is named, with the install command for your distro (apt, dnf, pacman,
zypper; detected from/etc/os-release). - Messages show the file name, not the full path.
- A corrupt image says so plainly.
- A missing tool is named, with the install command for your distro (apt, dnf, pacman,
Added: command line
-
dotmorph convertgained:--resize,--strip,--quality,--dpi,--timeout-j/--jobs,--notify,-n/--dry-run--preset web|email|thumb|print|share- a live progress bar on stderr
- Ctrl-C cancels cleanly
- exit codes: 0 = all converted, 1 = something failed, 130 = cancelled
-
Presets. Explicit flags win over the preset, and
--tois optional when the preset
sets one.Preset Does webWebP, fits 1920×1920, quality 80, no metadata emailJPG, fits 1280×1280, quality 75, no metadata thumbWebP thumbnail, fits 320×320 printPDF/SVG at 300 dpi, quality 95 sharecompressin the same format, no metadata -
dotmorph formatsgroups conversions by category.formats FILE...shows the targets
for given files.formats --missingshows what each missing tool would add. -
dotmorph doctorreports:- every backend and its optional extras
- missing tools, with install commands
- the desktop integration status: daemon, file menus, hotkey, watch services, and
wl-pasteon Wayland
-
dotmorph completions bash|zsh|fishprints a script generated from the real parser:
subcommands, every flag, all 37 targets, presets and themes.--installwrites it to
your user completion folder. -
GUI flags:
--theme,--reduce-motion,--clipboard,--no-daemon.
Added: the wheel
- A new QML wheel, with sectors drawn on the GPU (QtQuick.Shapes) and a glow
(MultiEffect):- Two rings: categories (Image, Video, Audio, Docs, Tools) inside, and that
category's formats blooming outward in a fan. Few targets give a single ring. - A category with a single option is a shortcut: one click converts.
- Animations: a staggered fly-out with a little spin, a hover lift in the
category's colour, rings that lean toward the pointer, and an implode on close. - Converting: the centre becomes a progress arc with a percentage, or elapsed
seconds, and a spark that orbits it. Click the centre to cancel. - Success: a check mark draws itself, with a particle burst. Failure: a cross,
a shake, and the error underneath. - Drag-over and empty-state ripples.
- Two rings: categories (Image, Video, Audio, Docs, Tools) inside, and that
- Drag to move: grab the wheel anywhere. It turns see-through while moving. A press
that moves is never a click. - Options panel (
O, or the button on the rim):- quality slider, PDF/SVG resolution, size (75 / 50 / 25 %) and remove metadata
- saved in
~/.config/dotmorph/settings.json - a summary shows in the centre, and a dot on the button marks non-default options
- Keyboard: arrows / Tab, Enter / ↑, Backspace / ↓,
1–9,O, Esc. - Themes: dark, light and glass (
--theme, orDOTMORPH_THEME).--reduce-motion
(orDOTMORPH_REDUCE_MOTION=1) turns animations off. - App icon (
dotmorph.svg).
Added: settings window (dotmorph settings)
- A separate window in the DotSuite style, with seven pages. It is also in the app menu as
"DotMorph Settings" and as an action on the DotMorph launcher, and reachable from the
wheel through All settings… in the options panel.- General:
- theme, with a live preview of the wheel
- reduced motion
- language: System, English or العربية
- notifications: long jobs, always or never
- where converted files go: next to the original, or a folder you pick
- default quality, resolution, size and metadata
- Wheel: pin formats so they come first, or hide the ones you never use. Click once to
pin, twice to hide, again to reset. - Shortcut: press keys to record a new global shortcut. Keys that are already taken are
refused, and you can remove the shortcut. - Integrations: turn the daemon and the file-manager menus on and off, choose which
quick actions the menus show, undock the edge dock, and install shell completion. - Watch folders: add a folder with a folder picker and a target format, see which
watchers are active, and remove them. - Tools: every engine, ready or missing, with "copy install command" buttons.
- About: version, links, and the settings file.
- General:
- Saved settings grew: theme, reduced motion, language, notification policy, output folder,
pinned and hidden formats, and file-manager quick actions. Explicit--theme/
DOTMORPH_THEMEstill win for a run. - Applied live: the settings window asks a running daemon to reload, so theme, language,
formats a...