Skip to content
dcog989Public

About

A Linux image compressor / converter for all common image formats. Lossless or lossy, individually or in batch.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

ImSlim

A Linux image compressor / converter for all common image formats. Lossless or lossy, individually or in batch, GUI or instant processing.

screen-1 screen-2

Features

  • compress common image formats (PNG, JPEG, GIF, WebP, AVIF, JXL, SVG) lossless or lossy.
  • BMP + TIFF are always encoded to WebP.
  • animated GIFs and PNGs are always compressed losslessly; animated WebP is flattened to its first frame.
  • 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.
  • optionally write the results into an imslim-<timestamp>-<pid> directory.
  • overwriting keeps the filename; when the output format changes (or BMP/TIFF are re-encoded to WebP), the result is written beside the original, which is left in place.
  • skip files whose compressed result would be larger.
  • recurse directories for batch compression.
  • three-column window: queue, options, and a live original/processed comparison.
  • right-click a queued file for Copy Path and Properties (dimensions, byte size, EXIF, timestamps).
  • drop files or folders on the window, or paste copied files or an image with Ctrl+V.
  • ImSlimNow: process files straight from a file manager, without the main window.
  • configurable compression timeout, log level and log rotation.
  • follows the system light/dark theme; UI strings are translatable.

Install

Download the latest release — the AppImage, install_appimage.sh, imslim.desktop, imslim-now.desktop and imslim.svg into one folder — then run:

bash install_appimage.sh ImSlim-*-linux-x86_64.AppImage

This copies the AppImage to ~/Applications, adds ImSlim to your application menu, and registers it as a handler for the supported image types.

Command line

imslim [FILES...]        # queue the given files and folders, then open the window
imslim --now FILES...    # process them immediately, without the main window
imslim --help            # usage
imslim --version         # version

Paths are handed to an already running ImSlim; without arguments the main window opens. Unknown options are rejected; put -- before a filename that starts with -. ImSlimNow takes no single-instance lock, so it runs alongside the GUI and exits with 0 on success, 1 when some files failed and 2 on a usage or environment error.


Technical

ImSlim is built with Python / PySide6. The compression libraries are built from source and statically linked:

The AppImage and wheel carry these binaries, so no system tools are needed at runtime. Logs are written to ~/.local/state/ImSlim/imslim.log (rotating); ImSlimNow writes imslim-now.log beside it so the two processes never rotate the same file.

Development

Requires Python 3.14+, uv; C/C++ toolchain (CMake, Ninja, pkg-config, curl, git) for the bundled tools; scripts/build_tools.sh installs what the distro package manager (apt/pacman) provides and downloads a pinned Node for svgo. Translations need GNU gettext.

git clone https://github.com/dcog989/ImSlim
cd ImSlim
make init           # uv sync
make tools          # build src/imslim/bin/linux-x86_64/
make run
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 versions
uv tool upgrade imslim       # just imslim
uv lock --upgrade && uv sync # this project's Python deps
uv tool upgrade --all        # global uv-installed tools

UI 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 directories, 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.


License

GNU General Public License v3.0

About

A Linux image compressor / converter for all common image formats. Lossless or lossy, individually or in batch.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages