A Linux image compressor / converter for all common image formats. Lossless or lossy, individually or in batch.
Inspired by and extends Curtail.
- compress common image formats (PNG, JPEG, GIF, WebP, AVIF, JXL, SVG) lossless or lossy.
- BMP + TIFF are always encoded to WebP.
- animated GIFs are always compressed losslessly.
- convert any input format to any supported output format.
- optionally strip metadata (EXIF/XMP/JUMBF), reset file attributes.
- save output next to the original, to a custom folder, or backup->overwrite originals.
- recurse directories for batch compression.
- configurable timeout for compression / conversion operations.
Download latest release AppImage, then run:
bash install_appimage.sh ImSlim-*-linux-x86_64.AppImageThis copies the AppImage to ~/Applications, adds ImSlim to your application menu, and registers it as the handler for the supported image types.
imslim [FILES...] # compress the given files and folders
imslim --help # usage
imslim --version # versionPaths are handed to an already running ImSlim; without arguments the main window opens.
ImSlim is built with Python / PySide6. The compression libraries are built from source and statically linked:
- libjxl (
cjxl/djxl) - Jpegli (
cjpegli/djpegli) - mozjpeg (
jpegtran) - oxipng
- pngquant
- libwebp (
cwebp) - libavif (
avifenc/avifdec) - gifsicle
- svgo
See Makefile for details:
make build # build the wheel + sdist
make check # runs ruff check + ruff format check + basedpyright + pytest
make clean # remove all build artifacts
make distclean # remove build tools - expensive!
make fix # auto fix lint issues and format
make init # runs uv sync, installs deps
make install # install locally (even if version unchanged)
make package-linux # build the Linux AppImage
make run # runs the app
make tools # runs build / update script for image libraries
make translations # extract strings and rebuild translation catalogs
make uninstall # remove the uv tool, desktop entry, icon and AppImage
make upgrade # refresh dependency lockfile to newest versionsUI strings are wrapped in _() from imslim._i18n, which loads gettext
catalogs from src/imslim/locale/. Add a language with
./scripts/translations.sh init <lang>, edit its .po, then
make translations to regenerate the template and compile the .mo files
(requires GNU gettext). Untranslated builds fall back to English.
Note
make install: installs the app into the user's home (via uv tool install), registers it as a handler for supported image types, and refreshes the desktop menu cache with whatever tool the distro provides (kbuildsycoca on KDE, update-desktop-database on freedesktop-based DEs). It runs kbuildsycoca6/kbuildsycoca5 or update-desktop-database when present, so it works across KDE, GNOME, XFCE, and others.




