# imajViewer [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Build](https://github.com/alhan/imajviewer/actions/workflows/build.yml/badge.svg)](https://github.com/alhan/imajviewer/actions/workflows/build.yml) [![Release](https://img.shields.io/github/v/release/alhan/imajviewer)](https://github.com/alhan/imajviewer/releases/latest) Ultra-lightweight image viewer written in Flutter — Linux & Windows. ![imajViewer](imajviewer.png) ## Features - **Formats:** PNG, JPEG, JFIF, WebP, BMP, GIF, WBMP - **Pan:** Left drag - **Zoom:** Mouse wheel (cursor-centered; viewport-centered in rotate mode) - **Fill/Fit toggle:** Double left click - **Contrast:** Right drag + vertical move - **Saturation:** Ctrl + Right drag + vertical move - **Brightness:** Ctrl+Shift + Right drag + vertical move - **Rotate:** Shift + Right drag + vertical move (~100px = 90°) - **Reset (all effects):** Double right click - **Navigation arrows:** bottom corners, visible on hover - **Settings (gear):** sort by time/name, print, shortcut info - **Print:** send the image to a printer (A4, fit) - Drag & drop to open images - Window size/position memory (JSON persistence) - Set as default image viewer - Cascade placement for new windows - Taskbar grouping (Linux: `StartupWMClass`) ## Install ### Linux (.deb, recommended) No Flutter SDK needed — grab the latest `.deb` from the [Releases page](https://github.com/alhan/imajviewer/releases/latest): ```bash sudo dpkg -i imajviewer_*_amd64.deb sudo apt-get install -f # install missing dependencies, if any ``` After install, open an image with `xdg-open ` or double-click it. ### Windows (installer) Download `imajviewer_setup_*.exe` from the [Releases page](https://github.com/alhan/imajviewer/releases/latest) and run it. The installer: - Installs to Program Files - Adds a Start Menu shortcut (optional desktop shortcut) - Registers file associations (PNG, JPG, JPEG, WebP, BMP, GIF) - Supports uninstall (Settings > Apps) ### Build from source | Requirement | Notes | |---|---| | [Flutter SDK](https://docs.flutter.dev/get-started/install) | stable channel | | Linux: GTK dev libs | `libgtk-3-dev`, `ninja-build`, `clang`, `cmake` | | Windows: VS 2022 Build Tools | "Desktop development with C++" workload | ```bash flutter pub get flutter build linux # Linux flutter build windows --release # Windows ``` Linux output: `build/linux/x64/release/bundle/` Windows output: `build\windows\x64\runner\Release\` (portable: copy the whole folder including `imajviewer.exe` and all DLLs). ## Keyboard & Mouse Shortcuts | Interaction | Action | |---|---| | Left drag | Pan | | Mouse wheel | Zoom (cursor-centered) | | Double left click | Fill / Fit toggle | | Right drag + vertical | Contrast (0.0 – 2.0) | | Ctrl + Right drag + vertical | Saturation (0.0 – 2.0) | | Ctrl+Shift + Right drag + vertical | Brightness (-100 – 100) | | Shift + Right drag + vertical | Rotate (free) | | Double right click | Reset (all effects) | | Left / Right arrow | Previous / next image | | Ctrl + Q | Close window | | Ctrl + Shift + Q | Close all windows | ## CI / Releases GitHub Actions builds Linux `.deb` and Windows installer on every push to `main`. Pushing a `v*` tag creates a GitHub Release with both installers as assets. ## Development ```bash flutter pub get flutter analyze flutter test ``` To rebuild the `.deb` locally: ```bash flutter build linux --release bash dist/rebuild-deb.sh ``` ## License [MIT](LICENSE)