git repos / SagoImageBrowser

blame: README.md

normal view · raw

c0882fd1 Poul Sander 2026-02-23 19:00 1
# SagoImageBrowser
c0882fd1 Poul Sander 2026-02-23 19:00 2
c0882fd1 Poul Sander 2026-02-23 19:00 3
A Qt6-based image browser application for viewing and managing image collections.
c0882fd1 Poul Sander 2026-02-23 19:00 4
c0882fd1 Poul Sander 2026-02-23 19:00 5
## Features
c0882fd1 Poul Sander 2026-02-23 19:00 6
ce844ce8 Poul Sander 2026-06-10 18:04 7
- Browse images in a directory tree with file system navigation
ce844ce8 Poul Sander 2026-06-10 18:04 8
- Multi-threaded, cached thumbnail generation for a responsive UI
ce844ce8 Poul Sander 2026-06-10 18:04 9
- Single image view mode with keyboard-driven zoom, pan, fit and navigation
ce844ce8 Poul Sander 2026-06-10 18:04 10
- Fullscreen viewing
ce844ce8 Poul Sander 2026-06-10 18:04 11
- EXIF/IPTC metadata panel (camera, exposure, ISO, focal length, dimensions, …)
ce844ce8 Poul Sander 2026-06-10 18:04 12
- Geo location with a clickable OpenStreetMap link when an image is geotagged
ce844ce8 Poul Sander 2026-06-10 18:04 13
- Edit image captions (written to the IPTC Caption-Abstract tag)
ce844ce8 Poul Sander 2026-06-10 18:04 14
- Lossless 90° rotation (updates the EXIF orientation tag, pixel data untouched)
ce844ce8 Poul Sander 2026-06-10 18:04 15
- Move images to trash and delete files
ce844ce8 Poul Sander 2026-06-10 18:04 16
- Right-click context menus (including copying file paths), also in fullscreen
ce844ce8 Poul Sander 2026-06-10 18:04 17
- Configurable keyboard shortcuts
ce844ce8 Poul Sander 2026-06-10 18:04 18
- Preferences for background color, thumbnail cache size, dock locking and layout
ce844ce8 Poul Sander 2026-06-10 18:04 19
- Path entry field with autocomplete
ce844ce8 Poul Sander 2026-06-10 18:04 20
- Translations (Danish included)
ce844ce8 Poul Sander 2026-06-10 18:04 21
- Supports every image format provided by the installed Qt image plugins
c0882fd1 Poul Sander 2026-02-23 19:00 22
c0882fd1 Poul Sander 2026-02-23 19:00 23
## Requirements
c0882fd1 Poul Sander 2026-02-23 19:00 24
c0882fd1 Poul Sander 2026-02-23 19:00 25
- C++17 or later
c0882fd1 Poul Sander 2026-02-23 19:00 26
- CMake 3.21+
ce844ce8 Poul Sander 2026-06-10 18:04 27
- Qt6 (Widgets and LinguistTools components)
ce844ce8 Poul Sander 2026-06-10 18:04 28
- Git and a network connection — Exiv2 (v0.28.8) is fetched and statically linked
ce844ce8 Poul Sander 2026-06-10 18:04 29
  at configure time via CMake `FetchContent`
c0882fd1 Poul Sander 2026-02-23 19:00 30
c0882fd1 Poul Sander 2026-02-23 19:00 31
## Building
c0882fd1 Poul Sander 2026-02-23 19:00 32
c0882fd1 Poul Sander 2026-02-23 19:00 33
### Prerequisites
c0882fd1 Poul Sander 2026-02-23 19:00 34
c0882fd1 Poul Sander 2026-02-23 19:00 35
Install Qt6 development files:
c0882fd1 Poul Sander 2026-02-23 19:00 36
c0882fd1 Poul Sander 2026-02-23 19:00 37
```bash
c0882fd1 Poul Sander 2026-02-23 19:00 38
# On Ubuntu/Debian
ce844ce8 Poul Sander 2026-06-10 18:04 39
sudo apt-get install qt6-base-dev qt6-tools-dev
c0882fd1 Poul Sander 2026-02-23 19:00 40
c0882fd1 Poul Sander 2026-02-23 19:00 41
# On macOS with Homebrew
c0882fd1 Poul Sander 2026-02-23 19:00 42
brew install qt6
c0882fd1 Poul Sander 2026-02-23 19:00 43
```
c0882fd1 Poul Sander 2026-02-23 19:00 44
c0882fd1 Poul Sander 2026-02-23 19:00 45
### Build Steps
c0882fd1 Poul Sander 2026-02-23 19:00 46
c0882fd1 Poul Sander 2026-02-23 19:00 47
```bash
c0882fd1 Poul Sander 2026-02-23 19:00 48
cd SagoImageBrowser
ce844ce8 Poul Sander 2026-06-10 18:04 49
cmake -B build
ce844ce8 Poul Sander 2026-06-10 18:04 50
cmake --build build
c0882fd1 Poul Sander 2026-02-23 19:00 51
```
c0882fd1 Poul Sander 2026-02-23 19:00 52
ce844ce8 Poul Sander 2026-06-10 18:04 53
The compiled executable will be at `./build/SagoImageBrowser`.
ce844ce8 Poul Sander 2026-06-10 18:04 54
ce844ce8 Poul Sander 2026-06-10 18:04 55
### Installing
ce844ce8 Poul Sander 2026-06-10 18:04 56
ce844ce8 Poul Sander 2026-06-10 18:04 57
```bash
ce844ce8 Poul Sander 2026-06-10 18:04 58
cmake --install build
ce844ce8 Poul Sander 2026-06-10 18:04 59
```
ce844ce8 Poul Sander 2026-06-10 18:04 60
ce844ce8 Poul Sander 2026-06-10 18:04 61
This installs the executable, a `.desktop` entry and the application icon.
c0882fd1 Poul Sander 2026-02-23 19:00 62
c0882fd1 Poul Sander 2026-02-23 19:00 63
## Running
c0882fd1 Poul Sander 2026-02-23 19:00 64
c0882fd1 Poul Sander 2026-02-23 19:00 65
```bash
ce844ce8 Poul Sander 2026-06-10 18:04 66
./build/SagoImageBrowser [path]
ce844ce8 Poul Sander 2026-06-10 18:04 67
```
ce844ce8 Poul Sander 2026-06-10 18:04 68
ce844ce8 Poul Sander 2026-06-10 18:04 69
An optional directory or image path can be passed on the command line.
ce844ce8 Poul Sander 2026-06-10 18:04 70
ce844ce8 Poul Sander 2026-06-10 18:04 71
## Tests
ce844ce8 Poul Sander 2026-06-10 18:04 72
ce844ce8 Poul Sander 2026-06-10 18:04 73
A small test for the EXIF reader is built alongside the application:
ce844ce8 Poul Sander 2026-06-10 18:04 74
ce844ce8 Poul Sander 2026-06-10 18:04 75
```bash
ce844ce8 Poul Sander 2026-06-10 18:04 76
./build/test_exifreader
c0882fd1 Poul Sander 2026-02-23 19:00 77
```
c0882fd1 Poul Sander 2026-02-23 19:00 78
c0882fd1 Poul Sander 2026-02-23 19:00 79
## Project Structure
c0882fd1 Poul Sander 2026-02-23 19:00 80
c0882fd1 Poul Sander 2026-02-23 19:00 81
```
c0882fd1 Poul Sander 2026-02-23 19:00 82
src/
ce844ce8 Poul Sander 2026-06-10 18:04 83
  ├── main.cpp                  # Application entry point
ce844ce8 Poul Sander 2026-06-10 18:04 84
  ├── mainwindow.h/cpp          # Main application window
ce844ce8 Poul Sander 2026-06-10 18:04 85
  ├── imagemodel.h/cpp          # Image list/grid data model
ce844ce8 Poul Sander 2026-06-10 18:04 86
  ├── fsdirmodel.h/cpp          # Directory tree model
ce844ce8 Poul Sander 2026-06-10 18:04 87
  ├── imageviewwidget.h/cpp     # Single-image display widget (zoom/pan)
ce844ce8 Poul Sander 2026-06-10 18:04 88
  ├── thumbnailworker.h/cpp     # Background thumbnail generation
ce844ce8 Poul Sander 2026-06-10 18:04 89
  ├── thumbnailcache.h/cpp      # Thumbnail caching
ce844ce8 Poul Sander 2026-06-10 18:04 90
  ├── thumbnaildelegate.h/cpp   # Thumbnail rendering in the view
ce844ce8 Poul Sander 2026-06-10 18:04 91
  ├── exifreader.h/cpp          # EXIF/IPTC reading, caption writing, rotation
ce844ce8 Poul Sander 2026-06-10 18:04 92
  ├── preferencesdialog.h/cpp   # Preferences dialog
ce844ce8 Poul Sander 2026-06-10 18:04 93
  ├── shortcutmanager.h/cpp     # Configurable keyboard shortcuts
ce844ce8 Poul Sander 2026-06-10 18:04 94
  └── pathcompletermodel.h/cpp  # Autocomplete for the path field
ce844ce8 Poul Sander 2026-06-10 18:04 95
test/                           # Unit tests
ce844ce8 Poul Sander 2026-06-10 18:04 96
translations/                   # Qt translation files (.ts)
ce844ce8 Poul Sander 2026-06-10 18:04 97
extra/                          # Desktop entry and icons
ce844ce8 Poul Sander 2026-06-10 18:04 98
CMakeLists.txt                  # Build configuration
c0882fd1 Poul Sander 2026-02-23 19:00 99
```
c0882fd1 Poul Sander 2026-02-23 19:00 100
c0882fd1 Poul Sander 2026-02-23 19:00 101
## License
c0882fd1 Poul Sander 2026-02-23 19:00 102
c0882fd1 Poul Sander 2026-02-23 19:00 103
MIT Expat License
c0882fd1 Poul Sander 2026-02-23 19:00 104
c0882fd1 Poul Sander 2026-02-23 19:00 105
Copyright (c) 2026
c0882fd1 Poul Sander 2026-02-23 19:00 106
c0882fd1 Poul Sander 2026-02-23 19:00 107
Permission is hereby granted, free of charge, to any person obtaining a copy
c0882fd1 Poul Sander 2026-02-23 19:00 108
of this software and associated documentation files (the "Software"), to deal
c0882fd1 Poul Sander 2026-02-23 19:00 109
in the Software without restriction, including without limitation the rights
c0882fd1 Poul Sander 2026-02-23 19:00 110
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
c0882fd1 Poul Sander 2026-02-23 19:00 111
copies of the Software, and to permit persons to whom the Software is
c0882fd1 Poul Sander 2026-02-23 19:00 112
furnished to do so, subject to the following conditions:
c0882fd1 Poul Sander 2026-02-23 19:00 113
c0882fd1 Poul Sander 2026-02-23 19:00 114
The above copyright notice and this permission notice shall be included in all
c0882fd1 Poul Sander 2026-02-23 19:00 115
copies or substantial portions of the Software.
c0882fd1 Poul Sander 2026-02-23 19:00 116
c0882fd1 Poul Sander 2026-02-23 19:00 117
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
c0882fd1 Poul Sander 2026-02-23 19:00 118
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
c0882fd1 Poul Sander 2026-02-23 19:00 119
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
c0882fd1 Poul Sander 2026-02-23 19:00 120
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
c0882fd1 Poul Sander 2026-02-23 19:00 121
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
c0882fd1 Poul Sander 2026-02-23 19:00 122
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
c0882fd1 Poul Sander 2026-02-23 19:00 123
SOFTWARE.
1970-01-01 00:00 124