SagoImageBrowser
Checkout
HTTPS git clone https://github.com/sago007/SagoImageBrowser.git
SSH git clone git@github.com:sago007/SagoImageBrowser.git
# SagoImageBrowser
A Qt6-based image browser application for viewing and managing image collections.
## Features
- Browse images in a directory tree with file system navigation
- Multi-threaded, cached thumbnail generation for a responsive UI
- Single image view mode with keyboard-driven zoom, pan, fit and navigation
- Fullscreen viewing
- EXIF/IPTC metadata panel (camera, exposure, ISO, focal length, dimensions, …)
- Geo location with a clickable OpenStreetMap link when an image is geotagged
- Edit image captions (written to the IPTC Caption-Abstract tag)
- Lossless 90° rotation (updates the EXIF orientation tag, pixel data untouched)
- Move images to trash and delete files
- Right-click context menus (including copying file paths), also in fullscreen
- Configurable keyboard shortcuts
- Preferences for background color, thumbnail cache size, dock locking and layout
- Path entry field with autocomplete
- Translations (Danish included)
- Supports every image format provided by the installed Qt image plugins
## Requirements
- C++17 or later
- CMake 3.21+
- Qt6 (Widgets and LinguistTools components)
- Git and a network connection — Exiv2 (v0.28.8) is fetched and statically linked
at configure time via CMake `FetchContent`
## Building
### Prerequisites
Install Qt6 development files:
```bash
# On Ubuntu/Debian
sudo apt-get install qt6-base-dev qt6-tools-dev
# On macOS with Homebrew
brew install qt6
```
### Build Steps
```bash
cd SagoImageBrowser
cmake -B build
cmake --build build
```
The compiled executable will be at `./build/SagoImageBrowser`.
### Installing
```bash
cmake --install build
```
This installs the executable, a `.desktop` entry and the application icon.
## Running
```bash
./build/SagoImageBrowser [path]
```
An optional directory or image path can be passed on the command line.
## Tests
A small test for the EXIF reader is built alongside the application:
```bash
./build/test_exifreader
```
## Project Structure
```
src/
├── main.cpp # Application entry point
├── mainwindow.h/cpp # Main application window
├── imagemodel.h/cpp # Image list/grid data model
├── fsdirmodel.h/cpp # Directory tree model
├── imageviewwidget.h/cpp # Single-image display widget (zoom/pan)
├── thumbnailworker.h/cpp # Background thumbnail generation
├── thumbnailcache.h/cpp # Thumbnail caching
├── thumbnaildelegate.h/cpp # Thumbnail rendering in the view
├── exifreader.h/cpp # EXIF/IPTC reading, caption writing, rotation
├── preferencesdialog.h/cpp # Preferences dialog
├── shortcutmanager.h/cpp # Configurable keyboard shortcuts
└── pathcompletermodel.h/cpp # Autocomplete for the path field
test/ # Unit tests
translations/ # Qt translation files (.ts)
extra/ # Desktop entry and icons
CMakeLists.txt # Build configuration
```
## License
GPL 3.0 or later, see `LICENSE` file for details.
Some files might have more liberal licenses, see individual file headers for details.