Skip to content

About

Registry-driven file format conversions for KDE Dolphin context menus

Resources

Stars

2 stars

Watchers

1 watching

Forks

Repository files navigation

Dolphin Context Actions

CI Release KDE Store

Adds file conversion, media tools, link actions, and a 7-Zip-style Archive menu to Dolphin's right-click menu.

Right-click a supported file to see the actions that apply to it.

Convert files from the right-click menu

How it works

The menu adapts to the file you right-click:

File type Menu shows
.gif Convert to MP4, WebM, MKV · Extract Audio · Upload to Imgur · Audio conversion
.mp4 / .webm / .mkv / .avi / .mov Convert to GIF (with quality presets) · Re-encode to MP4, WebM, MKV · Extract Audio · Upload to Imgur
.mp3 / .ogg / .flac / .wav / .m4a / .opus Convert between formats (source format is omitted)
.png / .jpg / .jpeg Upload to Imgur
.pdf / office documents Extract text or create a PDF
.md / .html Convert between Markdown, HTML, and PDF
.yaml / .json / .toml / .csv / .tsv Convert structured data
.png / .jpg / .webp / .heic Convert image formats

A dedicated Audio Converter submenu also appears for audio and video files with all 7 formats available as one-click actions.

Features

  • Two-directional menus — only relevant actions shown per file type
  • GIF from video — 4 quality presets (Small/Medium/Large/Source) using ffmpeg's two-pass palettegen method for clean colours
  • Video transcoding — re-encode between MP4 (H.264+AAC), WebM (VP9+Opus), and MKV (H.264+AAC)
  • Audio conversion — 7 formats: MP3 (V0), OGG (Q6), FLAC, WAV, M4A (AAC 192k), Opus (128k), ALAC
  • Audio extraction — pull audio track from video files as MP3
  • Imgur upload — upload images/GIFs/videos to Imgur with automatic clipboard copy of the URL
  • Progress bars — real-time progress via kdialog/qdbus, cancel any job
  • Batch processing — select multiple files, process them all at once
  • Configurable defaults — set your preferred audio format and GIF preset
  • Notifications — desktop notification on completion (or errors)
  • Document conversion — use LibreOffice, pandoc, or pdftotext when installed
  • Data conversion — convert YAML, JSON, TOML, CSV, and TSV files
  • Image conversion — convert PNG, JPEG, WebP, and HEIC files with ImageMagick

Create links from Dolphin

The context menu follows the stateful flow from Link Shell Extension:

  • Before picking, Pick Link Source appears at the context-menu root.
  • After picking, Drop Link As and Cancel Link Creation replace it.
  • Drop Link As expands to hardlink, symlink, clone, copy, and inspection actions.
  • Successful drops return the menu to Pick Link Source.
  • Failed drops keep the source so you can retry.

Archive (7-Zip-style menu)

A root-level Archive submenu matches 7-Zip's cascaded Windows Explorer menu:

  • Archives: Open archive, Extract files..., Extract Here, Extract to "name/", Test archive
  • Anything: Add to archive..., Compress and email..., Add to "name.7z", Add to "name.zip", and the matching email items
  • CRC SHA nested hashes (CRC-32 through BLAKE2sp, *, sidecar .sha256, checksum test)

Extract Here / Extract to / Test / one-click zip items use 7z when it is on PATH, otherwise unzip/zip, tar, gzip/bzip2/xz, unrar/unar, or bsdtar. .7z archives still need 7-Zip. CRC-32, MD5, and SHA hashes work without 7z; CRC-64, XXH64, and BLAKE2sp do not. Open / Extract files… / Add to archive… use Ark when present, otherwise xdg-open and the same zip/tar tools. Email uses xdg-email --attach.

Extract Here and Extract to run inside Dolphin: each click becomes one job in Dolphin's notification group, like a copy. It shows "Extracting 2 of 4", byte progress and speed, with Pause and Cancel for that click only.

Like the link actions, this menu comes from kio-plugin/ and needs a source install (make install / install.sh).

Installation

From Dolphin itself (easiest)

Dolphin can install these without a terminal:

  1. Open Settings → Configure Dolphin → Context Menu.
  2. Click Download New Services….
  3. Search for Dolphin Context Actions, Dolphin Archive, or Dolphin Link and click Install.

That downloads a small package from store.kde.org and runs its installer as you — no root, no compiler. Everything lands under your home directory plus the service menus, and the same dialog uninstalls it again. Conversion menus are generated on your machine, so they list only what your installed tools (ffmpeg, LibreOffice, pandoc, …) can actually do.

The three listings are separate products. Install the ones you want. Dynamic archive names and elevated link drops still need the KIO plugin from a source build (below).

Every other method

See INSTALL.md for every available method:

Method Command
From source make install (needs CMake and Qt 6)
GHNS Download New Services (ships a prebuilt helper)
Debian/Ubuntu sudo apt install ./dolphin-context-actions_0.1.0-1_all.deb
Fedora/openSUSE sudo rpm -i dolphin-context-actions-0.1.0-1.noarch.rpm
Arch Linux makepkg -si (from packaging/arch/)
Snap snap install dolphin-context-actions
Flatpak flatpak install io.github.bodencrouch.dolphin-context-actions
AppImage Download and run from releases

The helper is a C++/Qt 6 binary, same language as Dolphin.

Only the source install (make install / install.sh) currently builds kio-plugin/, so it's the only method that provides dynamic Archive names and elevated Link drops — see Limitations below.

After installation, restart Dolphin (killall dolphin) to load the service menus. The matching action menus will appear when you right-click a supported file.

Quick start

  1. Install (see above) and restart Dolphin
  2. Right-click a .gif → Context Actions → Convert to MP4
  3. Right-click a .mp4 → Context Actions → Convert to GIF… → choose a preset
  4. Right-click an .mp3 → Audio Converter → Convert to FLAC
  5. Right-click a .csv file → Convert → To JSON
  6. Right-click an image → Context Actions → Upload to Imgur

Create a link

  1. Right-click a file or folder, then choose Pick Link Source.
  2. Right-click the destination folder or its background.
  3. Open Drop Link As.
  4. Choose Drop Hardlink, Drop Symlink, or another drop action.

Unpack or compress

  1. Right-click a .zip / .7z / .tar.gz → Archive → Extract Here or Extract to "name/"
  2. Right-click files or a folder → Archive → Add to "name.7z" or Add to archive...
  3. Right-click anything → Archive → CRC SHA → SHA-256

Configuration

Right-click any media file → Context Actions → Configure… to open the settings dialog where you can set:

  • Default audio format — the format used when converting audio
  • Default GIF preset — the GIF quality preset used for video-to-GIF
  • Imgur Client ID — required for Imgur upload (register at https://api.imgur.com/oauth2/addclient)

Configuration is stored in ~/.config/dolphin-context-actions/config.json. The editable conversion catalog is stored beside it as conversions.json.

Requirements

  • CMake + Qt 6 (from-source builds; GHNS ships a prebuilt helper)
  • ffmpeg (≥ 4.4) with ffprobe (for media conversion only)
  • kdialog (part of KDE)
  • libnotify (for desktop notifications)
  • KIO 6 (for the root context-menu plugins)
  • 7zip (optional; zip/unzip/tar/unrar are used when it is missing)
  • Ark (optional; opens the Archive dialogs when installed)

Some conversions need extra tools. The installer only adds menu actions whose dependencies are available. See Adding conversions for the engine list.

Limitations

Link Shell Extension on Linux

The Link Shell Extension features work on most modern Linux filesystems (ext4, btrfs, xfs, etc.) but have some limitations compared to the Windows version:

  • No Junctions — NTFS Junctions are Windows-specific and cannot be created on Linux
  • No Volume Mountpoints — Windows Volume Mountpoints are not supported on Linux
  • Directory Hardlinks — Unix filesystems do not allow them. Use Drop Symlink.
  • Smart Move — Dolphin does not expose file moves to context-menu plugins.
  • Reparse Points — NTFS-specific reparse point operations are not applicable on Linux
  • Backup Mode — The Windows version's backup mode with elevated privileges is not implemented
  • Flatpak / Snap / AppImage — the context-menu plugins (and with them, all Link Shell Extension features, including elevated drops, and the Archive submenu) are not built or packaged for these formats. A root-owned, D-Bus-activated privileged helper is fundamentally incompatible with their sandboxing — there is no way to install a system D-Bus service or polkit action from inside a Flatpak/Snap confinement. Those formats ship the media-conversion CLI and service menus only.
  • rpm / deb / Arch packages — these still package the old Python CLI and service menus only; none of them build kio-plugin/ yet either, so the Link Shell Extension features (Pick Link Source / Drop Link As) and the Archive submenu aren't available from the packaged builds at all right now. install.sh / make install, run from a source checkout, is the only path that builds the C++ helper, the plugins, and the KAuth helper today.

The drop menu supports hardlinks, symlinks, clones, smart copy, link properties, and local hardlink enumeration.

Dropping onto a name that is already taken

A drop never overwrites what is already in the folder, and never fails just because the name is used. It renames what it drops, the way Link Shell Extension does:

Dropped as First collision Next
Drop Hardlink report - Hardlink.txt report - Hardlink (2).txt
Drop Symlink report - Symlink.txt report - Symlink (2).txt
Hardlink Clone project - Hardlink Clone project - Hardlink Clone (2)
Symlink Clone project - Symlink Clone project - Symlink Clone (2)
Smart Copy project - Smart Copy project - Smart Copy (2)

The number is the first one free in that folder. Folders keep their whole name, so v1.2 becomes v1.2 - Symlink, not v1 - Symlink.2.

Dropping into a root-owned directory

Dropping a hardlink or symlink into a directory you can't write to (/, /usr, etc.) prompts for the administrator password via polkit, same as Dolphin's own "Open as Administrator". The privileged half is a small KAuth helper (kio-plugin/linkhelper.cpp) installed root-owned to /usr/libexec/kf6/kauth/ and D-Bus-activated — it is never a user-writable script pointed at by pkexec, since pkexec performs no ownership check on its target and would make that equivalent to granting root to anything that can write your ~/.local/bin.

Hardlink Clone / Symlink Clone / Smart Copy are not offered elevated — those recurse over an arbitrarily large, user-controlled tree, which isn't something a reviewable privileged helper should do. They work normally when the destination is writable, and fail with a plain permission error otherwise.

This elevation path requires the KAuth helper to be installed to system directories, which today only install.sh / make install do — see Limitations above for which install methods currently build kio-plugin/ at all.

Older checkouts shipped a Python package. If you ever installed that as root (sudo pip install, pkexec pip install --user -e .), run scripts/check-privileged-pth.py --fix (or make doctor). Editable installs write a .pth file into site-packages that adds this checkout's old src/ directory to sys.path; done as root, that .pth file ends up root-owned while still pointing at a directory your normal user can write to, which means anything that can write there gets code run as root the next time anything does sudo python3 / pkexec ... python3. Current installs use CMake and do not write .pth files. install.sh/make install still call sudo only for the plugin step, and refuse to run under sudo themselves.

Project structure

├── CMakeLists.txt              # Qt 6 helper
├── Makefile                    # Build/install/uninstall
├── install.sh                  # Manual install script
├── kio-plugin/                 # Context-menu plugins + KAuth privileged-link helper
├── scripts/
│   └── check-privileged-pth.py # Scan leftover root-owned .pth files from old pip installs
├── debian/                     # Debian packaging
├── packaging/
│   ├── rpm/                    # RPM spec
│   ├── arch/                   # Arch Linux PKGBUILD
│   ├── snap/                   # Snapcraft yaml
│   ├── flatpak/                # Flatpak manifest
│   └── appimage/               # AppImage builder
├── servicemenus/
│   ├── dolphin-context-actions.desktop         # Smart menu (all media)
│   └── dolphin-audio-converter.desktop         # Dedicated audio submenu
├── assets/
│   └── conversions.json        # Bundled conversion catalog
├── helper/
│   ├── main.cpp                # CLI binary
│   ├── cli.cpp                 # CLI entry point + smart dispatch
│   ├── file_converter.cpp      # Document, data, and image conversion engines
│   ├── file_converter_menus.cpp # Generate conversion service menus
│   ├── ui.cpp                  # kdialog progress bars / dialogs
│   ├── config.cpp              # Config management
│   ├── link_ops.cpp            # Link Shell Extension operations
│   ├── archive_ops.cpp         # 7-Zip-style Archive menu operations
│   ├── converters.cpp          # Audio/video transcoding
│   └── uploaders.cpp           # Imgur upload
├── docs/
│   ├── CONFIGURATION.md        # Full config reference
│   └── DEVELOPMENT.md          # Contributor guide
└── man/
    └── dolphin-context-actions.1

Building the store package

scripts/build-ghns-package.sh <product> builds the archive that store.kde.org serves to Dolphin's Download New Services dialog (context-actions, archive, or link). tests/test_ghns_package.sh installs each into a throwaway $HOME and verifies the whole install/run/uninstall cycle. Releases are cut by release-please and all three packages are attached to each GitHub release automatically — see packaging/pling/PUBLISHING.md for how the store products are created and updated.

If this saved you a trip to a sketchy online converter, a rating on the store page helps other people find it.

Building packages

# Debian .deb
dpkg-buildpackage -us -uc

# RPM
rpmbuild -ba packaging/rpm/dolphin-context-actions.spec

# Arch Linux
cd packaging/arch && makepkg -si

# AppImage
appimage-builder --recipe packaging/appimage/AppImageBuilder.yml

Licence

MIT

About

Registry-driven file format conversions for KDE Dolphin context menus

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages