Skip to content

Releases: kareem2099/DotMorph

DotMorph 2.0.3

Choose a tag to compare

@github-actions github-actions released this 23 Oct 23:02
v2.0.3

Added

  • AppImage updates. The AppImage carries update information
    (gh-releases-zsync), and each release ships a .zsync file next to it, so
    AppImageUpdate and AppImageLauncher can update DotMorph from GitHub Releases and download
    only the parts that changed. The .zsync is 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

Choose a tag to compare

@github-actions github-actions released this 23 Oct 22:19
v2.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-cursor and 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

Choose a tag to compare

@github-actions github-actions released this 23 Oct 21:12
v2.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: lupdate alone was 53 MB, plus Qt
    Designer, qmlls, test and compiler libraries, unused Quick Controls styles, type stubs and
    pip. packaging/build.py appimage now 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

Choose a tag to compare

@github-actions github-actions released this 23 Oct 20:31

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.
  • 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 heic extra.
    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.xml limits 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-50 and rotate-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%, 1920x1080 to fit inside, or 1280 for width)
    • strip
    • quality (1–100)
    • dpi, with per-format defaults: PDF 150; SVG 96, which keeps its original size
    • overwrite
    • timeout
  • 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.
  • 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.

Added: command line

  • dotmorph convert gained:

    • --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 --to is optional when the preset
    sets one.

    Preset Does
    web WebP, fits 1920×1920, quality 80, no metadata
    email JPG, fits 1280×1280, quality 75, no metadata
    thumb WebP thumbnail, fits 320×320
    print PDF/SVG at 300 dpi, quality 95
    share compress in the same format, no metadata
  • dotmorph formats groups conversions by category. formats FILE... shows the targets
    for given files. formats --missing shows what each missing tool would add.

  • dotmorph doctor reports:

    • every backend and its optional extras
    • missing tools, with install commands
    • the desktop integration status: daemon, file menus, hotkey, watch services, and
      wl-paste on Wayland
  • dotmorph completions bash|zsh|fish prints a script generated from the real parser:
    subcommands, every flag, all 37 targets, presets and themes. --install writes 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.
  • 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, or DOTMORPH_THEME). --reduce-motion
    (or DOTMORPH_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.
  • Saved settings grew: theme, reduced motion, language, notification policy, output folder,
    pinned and hidden formats, and file-manager quick actions. Explicit --theme /
    DOTMORPH_THEME still win for a run.
  • Applied live: the settings window asks a running daemon to reload, so theme, language,
    formats a...
Read more