Cross-platform desktop toolbox launcher built with Python and PySide6.
| Platform | Supported forms | Release scope |
|---|---|---|
| Windows | Python source and PyInstaller .exe |
Windows launcher and EXE build are supported |
| Linux | Python source, AppImage, and native .deb |
Linux Mint 22.3 Cinnamon x86_64 is the primary tested release target |
Ready-made AppImage, DEB, and EXE packages include their Python and PySide6 runtimes; a separate Python installation is needed only to run or build from source.
- Version:
0.45-beta - Linux AppImage build output:
dist-appimage/Toolbox-0.45-beta-x86_64.AppImage - Linux DEB build output:
dist-deb/Toolbox-0.45-beta-amd64.deb - Windows executable build output:
dist-windows/Toolbox-0.45-beta-windows-x86_64.exe
- Multiple toolbox tabs with reorder/visibility management
- Multiple synchronized windows in one safe application process (
Ctrl+N) - Drag-and-drop app entries and section separators
- Multi-select movement with structure-preserving behavior
- Grid snapping with optional auto-compaction
- Separator protection and snapping with conflict hints
- Per-section and global separator/title color management (all tabs)
- Configurable separator spacing with separate
Gap AboveandGap Below - Per-tab canvas background color via right-click menu
- Automatic or manually adjustable tile-title font size in Settings
- Persistent per-folder icon sizes directly in the open folder's breadcrumb bar
- Responsive folder grids and an optional responsive layout for normal toolbox tabs
- Independently configurable system-tray visibility and minimize-on-close behavior
- Tool launch options (args, working dir, wait mode, admin)
- Image-file thumbnail previews with
Fit/Fill and crop - Video-file thumbnail previews (ffmpeg-based)
- FFmpeg source detection with status display in Settings (env/manual/system/internal)
- Manual FFmpeg path field in Settings (with browse + rescan)
- Hover-enlarged media preview (optional, configurable in Settings)
- Persistent thumbnail cache with pre-generated
normal+HQvariants - Broken-entry diagnostics and optional cleanup
- Linux
.desktopmetadata, native theme icons, monitored launch failures, and%f/%F/%u/%Utile-drop support - JSON import/export for toolbox state and UI settings
- Keyboard undo/redo (
Ctrl+Z,Ctrl+Y)
- Python 3.11 or newer for the application source
- PySide6
- pytest (for running tests)
ffmpeg(optional for source runs, only needed for video thumbnail previews)
The Windows setup script intentionally uses Python 3.11. Linux Mint 22.3 uses Python 3.12. Official Linux packages include their own reviewed FFmpeg/FFprobe build and corresponding-source release.
py -3.11 -m venv .venv
.venv\Scripts\Activate.ps1
python -m pip install -U pip
python -m pip install -r requirements-dev.txt.venv\Scripts\python.exe main.pyOn Windows, start-toolbox.bat is the recommended launcher. It creates the .venv
with Python 3.11 when needed, installs missing runtime dependencies, and starts the GUI
with .venv\Scripts\pythonw.exe.
The official Windows x86_64 release is built on Windows with Python 3.11.9 and
the exact dependencies in requirements-build-windows.txt:
py -3.11 -m venv .venv-release
.venv-release\Scripts\python.exe -m pip install -r requirements-build-windows.txt
.venv-release\Scripts\Activate.ps1
.\scripts\build-windows-release.ps1The script embeds the Toolbox and runtime license notices, runs a frozen EXE
smoke test, and produces a portable ZIP plus SHA-256 files in dist-windows/.
The manual GitHub workflow .github/workflows/build-windows-release.yml performs
the same isolated build on Windows Server 2022 and uploads only validated files.
The interactive _pyinstaller_venv_spec_v3.3_debug_fixed.bat remains available
for development builds, but its output is not an official release artifact.
The normal Windows build does not silently collect FFmpeg from PATH or from
arbitrary project folders. FFmpeg/FFprobe are bundled only when the reviewed
absolute paths are supplied through TOOLBOX_FFMPEG_BINARY and
TOOLBOX_FFPROBE_BINARY. Do not distribute such a Windows build until its exact
binary provenance, license, and corresponding source have been added to the
release notices and assets.
Linux Mint 22.3 uses Python 3.12 by default. Install the venv package once, then create an isolated environment:
sudo apt install python3-venv desktop-file-utils libfuse2t64
python3 -m venv .venv
.venv/bin/python -m pip install -U pip
.venv/bin/python -m pip install -r requirements-dev.txt
QT_QPA_PLATFORM=xcb .venv/bin/python main.pyThe application stores Linux configuration in
${XDG_CONFIG_HOME:-$HOME/.config}/toolbox.
The AppImage is a single-file x86_64 release. Internally it contains a
PyInstaller onedir payload to avoid a second extraction step at every launch.
Qt's XCB cursor, image, utility, and XKB helper libraries are bundled so a
standard Mint desktop does not need the optional libxcb-cursor0 or
libxkbcommon-x11-0 runtime packages. The AppImage type-2 runtime itself still
requires the host package libfuse2t64. The official Linux release includes
separate FFmpeg/FFprobe 7.0.2 programs built from pinned official source under
LGPL-2.1-or-later.
sudo apt install build-essential curl pkg-config xz-utils zlib1g-dev
.venv/bin/python -m pip install -r requirements-build-linux.txt
./scripts/build-bundled-ffmpeg.sh
APPIMAGETOOL="$HOME/.local/bin/appimagetool" ./scripts/build-appimage.shbuild-bundled-ffmpeg.sh also creates the mandatory corresponding-source
release below dist-source/. Publish that archive and its checksum next to the
AppImage and DEB. The AppImage build refuses to proceed if the source release is
missing or has an invalid checksum.
The build accepts only the pinned appimagetool binary by default. Its expected
SHA-256 is stored in
packaging/linux/appimagetool-x86_64.sha256. To update the tool intentionally,
set TOOLBOX_APPIMAGETOOL_SHA256 to the reviewed replacement binary's SHA-256 and
update the pinned file in the same change.
After building and verifying the AppImage, create a native Mint/Ubuntu package from the identical payload:
./scripts/build-deb.sh dist-appimage/Toolbox-0.45-beta-x86_64.AppImageThe resulting dist-deb/Toolbox-0.45-beta-amd64.deb installs Toolbox below
/usr/lib/toolbox with /usr/bin/toolbox as its launcher. Unlike the AppImage,
the native package does not require FUSE. Bundled FFmpeg remains private to
Toolbox and never replaces /usr/bin/ffmpeg or /usr/bin/ffprobe.
Install and start it with:
sudo apt install ./dist-deb/Toolbox-0.45-beta-amd64.deb
toolboxOutputs:
dist-appimage/Toolbox-0.45-beta-x86_64.AppImage
dist-appimage/Toolbox-0.45-beta-x86_64.AppImage.sha256
dist-source/Toolbox-0.45-beta-ffmpeg-7.0.2-source.tar.xz
dist-source/Toolbox-0.45-beta-ffmpeg-7.0.2-source.tar.xz.sha256
dist-source/Toolbox-0.45-beta-ffmpeg-7.0.2-linux-x86_64.tar.xz
dist-source/Toolbox-0.45-beta-ffmpeg-7.0.2-linux-x86_64.tar.xz.sha256
dist-windows/Toolbox-0.45-beta-windows-x86_64.exe
dist-windows/Toolbox-0.45-beta-windows-x86_64.exe.sha256
dist-windows/Toolbox-0.45-beta-windows-x86_64.zip
dist-windows/Toolbox-0.45-beta-windows-x86_64.zip.sha256
Run it:
chmod +x dist-appimage/Toolbox-0.45-beta-x86_64.AppImage
./dist-appimage/Toolbox-0.45-beta-x86_64.AppImageIf FUSE is unavailable:
./dist-appimage/Toolbox-0.45-beta-x86_64.AppImage --appimage-extract-and-runOfficial AppImage and DEB releases always contain the pinned, reproducibly built
FFmpeg and FFprobe binaries. Source runs still use the configured manual path,
the system PATH, or an internal build in that order. See
THIRD_PARTY_NOTICES.md and the corresponding-source
archive for provenance, license, source, and rebuild instructions.
The stable Linux location is ${XDG_CONFIG_HOME:-$HOME/.config}/toolbox. Earlier
builds that derived their folder name from the executable are not migrated
automatically because several old folders may exist and choosing one silently could
overwrite newer data. Close Toolbox, back up both locations, and copy tools.json
and ui_settings.json from the intended old folder into ~/.config/toolbox once.
The old folder is left untouched.
Linux:
QT_QPA_PLATFORM=offscreen .venv/bin/python -m pytest -q
./scripts/test-appdir.sh
./scripts/test-appimage.sh dist-appimage/Toolbox-0.45-beta-x86_64.AppImage
./scripts/verify-linux-release.sh \
dist-appimage/Toolbox-0.45-beta-x86_64.AppImageWindows:
$env:PYTHONPATH='.'
.venv\Scripts\python.exe -m pytest -q- Most layout/style changes in
Settingsapply afterSave & Apply. - Tile-title text follows the icon size by default. Disable the automatic option
in
Settings > Appearance & Layoutto select a fixed size from 8 to 24 pixels. - While browsing a folder, use the
Symbolgrößeslider in the breadcrumb bar to set a size only for that folder. The reset button restores the current global icon size; folder-specific sizes are shared by synchronized windows and survive application restarts. Folder tiles automatically wrap when the window becomes narrower and flow back into fewer rows when it grows. Automatically wrap tiles to the window widthunderSettings > Appearance & Layoutis enabled by default for normal toolbox tabs. Resizing never overwrites saved tile positions. Disable the option whenever you want to edit the free-form layout; manual tile movement is intentionally disabled while responsive presentation is active.- If you leave
Settingswith unsaved changes and switch to a toolbox tab, pending settings are auto-applied. - Create a new toolbox tab with the
+action in the top tab bar or withCtrl+T; the existing tab context-menu action remains available. - Open another synchronized Toolbox window with
Ctrl+N. All windows share tabs, entries, settings, persistence, and global undo/redo, while each window keeps its own active tab, search, selection, and folder-browse state. - A second Toolbox/AppImage start activates the last window by default. Change
this under
Settings > System, or use--new-window/--activate-existingto override it for one start. - Right-click a toolbox tab and choose
Open This Tab in New Windowto open a second view focused on that tab. - Tile positions snap to the active grid, so visible spacing changes in row-sized steps.
Check Broken Entriesruns in the background and shows results when scanning is done.- Hover preview only appears when media preview is enabled and
Hover Previewis checked. - On Linux, dropping files or URLs on a compatible
.desktoptile passes them to the launcher's declared%f,%F,%u, or%Ufield. Dropping on empty canvas space continues to add a new tile. - Linux desktop entries use their localized
Name=on first import and resolveIcon=through the active freedesktop icon theme. Existing user-renamed tile titles are preserved.
- On Linux, add
Toolbox-Code-Backup.desktopto Toolbox or startscripts/create_code_backup.shdirectly. - The script requires
7z(sudo apt install p7zip-full) and, for a Git checkout,git. It archives source files, local changes, and the complete self-contained Git history, then verifies both archive integrity and a temporary restore. - Build outputs, AppImages, virtual environments, caches,
.envfiles, logs, executables, and previous archives are excluded. - The resulting unencrypted
toolbox_code_<timestamp>.7zis stored in the project root. Protect or move it after creation. scripts/create_code_backup.sh --self-testperforms the complete verification without leaving an archive. Diagnostic output is written below$XDG_STATE_HOME/toolbox(or~/.local/state/toolbox).- Windows users can use
create-project-backup.bat, which applies matching exclusions and archive-integrity checks.
- The release target is Linux Mint 22.3 Cinnamon x86_64; ARM64 is not built.
- Administrator elevation and Windows window-style options are intentionally hidden
on Linux. Toolbox never inserts
sudoor launches through a shell. - Normal Linux
Type=Applicationdesktop entries are parsed and monitored directly.Terminal=trueandDBusActivatable=trueentries are delegated to GIO; GIO cannot report every failure that occurs after the desktop system has accepted the start request. - FFmpeg remains optional for source runs. Official Linux AppImage and DEB releases bundle the pinned LGPL build privately for video thumbnails.
- AppImage desktop-menu installation, automatic updates, signing, and Wayland certification are outside this release.
- A visible Cinnamon/X11 check for panel icon, resizing, HiDPI, and file-manager
double-click remains a release-operator check; the build additionally performs a
real
qxcbsmoke test whenever it runs inside an X11 session.
- Runtime lookup order:
TOOLBOX_FFMPEG_PATH- manual path from Settings
- system
PATH - common Windows install locations (Windows only)
- bundled binaries next to the executable /
_MEIPASS
- PyInstaller spec supports optional ffmpeg/ffprobe bundling:
TOOLBOX_FFMPEG_BINARYTOOLBOX_FFPROBE_BINARY
- In Settings, the FFmpeg section shows the currently detected source and resolved executable path.
- Toolbox source code remains under the MIT License. Bundled components retain their own licenses; see NOTICE and THIRD_PARTY_NOTICES.md.
- Official Linux releases contain FFmpeg/FFprobe 7.0.2 under
LGPL-2.1-or-later. Their exact source, signature, license, binary build script,
and checksums are provided in the matching
dist-sourcerelease archive. - Official Windows EXE builds contain no FFmpeg. They embed the Toolbox, Python, PySide6/Qt, and PyInstaller notices; the Windows ZIP exposes the same notices as regular files beside the EXE.
- Every download location offering the AppImage or DEB must also offer that corresponding-source archive and clearly link the two.
main.py: app entry pointapp/: application modules (UI, features, services, domain)tests/: unit testspackaging/linux/: AppDir metadata and PyInstaller hookscripts/build-appimage.sh: reproducible Linux AppImage buildscripts/build-bundled-ffmpeg.sh: reproducible bundled FFmpeg and source offerscripts/build-deb.sh: native Linux Mint/Ubuntu DEB buildscripts/build-windows-release.ps1: verified Windows EXE and ZIP build.github/workflows/build-windows-release.yml: isolated Windows release runnertoolbox_lightweight.spec: Windows PyInstaller EXE definitiontoolbox_linux.spec: Linux PyInstaller AppDir definition
Toolbox itself is licensed under the MIT License. See LICENSE. Bundled third-party software remains under the licenses listed in NOTICE and THIRD_PARTY_NOTICES.md.

