A high-performance, professional Desktop Picture Gallery and Image management tool.
Developed for Linux, macOS, and Windows.
**Table of Contents**
- Description
- Status
- Getting Started
- Documentation & Screenshots
- Architecture Overview
- Authors and License
Desktop-Gallery is a powerful Picture Gallery and Image management tool built with C++23 and Qt6. It is designed to handle large photo collections efficiently using a multithreaded architecture and a local SQLite database.
Beyond viewing images, it serves as a comprehensive Metadata Editor and Workflow Tool, allowing photographers to synchronize EXIF/IPTC/XMP data, geocode images via OpenStreetMap, visualize locations on an interactive map, and bulk-export assets to WebP or upload them directly to a CrowQtServer (Crow Web-Gallery) instance.
β runs on Linux β runs on MacOS β runs on Windows
- Database-Driven: High-performance SQLite backend with caching for instant search and filtering.
- Multithreading: Asynchronous recursive folder scanning and thumbnail generation.
- Cross-Platform: Runs natively on Linux, macOS, and Windows.
- Reverse Geocoding: Automatically fetch address data (City, Street, Country) based on GPS coordinates using OpenStreetMap (Nominatim).
- Interactive Map View: Visualize selected images on a map using Leaflet.js integration.
- GPS Data Management: Read, write, and propagate GPS metadata.
- Comprehensive Editor: View and edit EXIF, IPTC, and XMP data.
- Smart Synchronization: Automatically syncs metadata between standards (e.g., changing EXIF Copyright updates IPTC and XMP fields instantly).
- Bulk Operations: Write default metadata (Copyright, Author) to multiple selected images at once.
- Smart Rename: Bulk rename files based on their creation timestamp.
- WebP Bulk Export: Convert images to WebP with customizable quality, resizing, and watermarking.
- Cloud Upload Client: Integrated client to upload images and metadata to a CrowQtServer (supports JWT Auth & Refresh Tokens).
- i18n: Support for multiple languages (English, German).
| Product | Description |
|---|---|
| CrowQtServer | Crow ReST API Server with Qt6 & Worker (Inbox-Pattern) for Web-Gallery |
| Webserver Admin | extending CrowQtServer API Server to SCS (web-based user management etc) |
| Web-Gallery frontend | Angular Web-Frontend for Web-Gallery |
| Desktop-Gallery | Desktop-Gallery image management and uploader to Web-Gallery |
| CrowQtClient | simple Desktop Client to upload Pictures to the Web-Gallery |
| CliImgClient | Commandline Batch Image processing and uploader to Web-Gallery |
To build this project, you need the following dependencies installed:
- CMake (3.16+)
- C++ Compiler supporting C++23 (GCC 13+, Clang 16+, MSVC 2022)
- Qt6 (Core, Gui, Widgets, Sql, Concurrent, Network, WebEngineWidgets, LinguistTools)
- Exiv2 (Library for image metadata)
.
βββ CMakeLists.txt # Main build configuration
βββ LICENSE # MIT License
βββ README.md # Project documentation
βββ configure
βΒ Β βββ rz_config.hpp.in # Version and Project defines
βββ i18n # Translation files (.ts and .qm)
βΒ Β βββ gallery_de.ts
βΒ Β βββ gallery_en.ts
βββ include # Header files (.hpp)
βΒ Β βββ DatabaseManager.hpp # SQLite encapsulation
βΒ Β βββ LoginDialog.hpp # Server Auth UI
βΒ Β βββ MapWindow.hpp # QWebEngine Map View
βΒ Β βββ MainWindow.hpp # Main GUI Logic
βΒ Β βββ UploadManager.hpp # Network/Upload Logic
βΒ Β βββ rz_metadata.hpp # Metadata Definitions & Mappings
βΒ Β βββ rz_photo.hpp # Image & Exiv2 Wrapper
βββ resources # Icons and Assets
βΒ Β βββ img
βββ src # Source files (.cpp)
βΒ Β βββ DatabaseManager.cpp
βΒ Β βββ ImageIndexer.cpp # Multithreaded Scanner
βΒ Β βββ MainWindow.cpp
βΒ Β βββ MapWindow.cpp
βΒ Β βββ ThumbnailDelegate.cpp # Custom Grid Rendering
βΒ Β βββ UploadManager.cpp
βΒ Β βββ main.cpp # Entry Point
βΒ Β βββ picture_widget.cpp # Detail View
βΒ Β βββ rz_photo.cpp # Exiv2 Implementation
# 1. Clone the repository
git clone [https://github.com/Zheng-Bote/qt_desktop-gallery.git](https://github.com/Zheng-Bote/qt_desktop-gallery.git)
cd qt_desktop-gallery
# 2. Create build directory
mkdir build && cd build
# 3. Configure with CMake
cmake ..
# 4. Build
cmake --build .Note
please visit Desktop-Gallery Github Pages for more.
Desktop-Gallery is a high-performance, multithreaded desktop application designed for managing, editing, and distributing digital photography. It is built using modern C++ (C++23) and the Qt 6 Framework.
The application follows a Model-View-Controller (MVC) architectural pattern, leveraging Qt's efficient signal/slot mechanism for event-driven communication and SQLite for persistent data storage.
- Language: C++23
- GUI Framework: Qt 6.x (Widgets, GUI, Core)
- Database: SQLite 3 (via QtSql)
- Concurrency: QtConcurrent / QThreadPool
- Networking: QtNetwork (REST API / Multipart Uploads)
- Web Engine: QtWebEngine (Chromium-based) for Map rendering
- Metadata Library: Exiv2 (via custom
Photowrapper) - Build System: CMake
graph TD
User[User Interaction] --> UI[Presentation Layer]
subgraph "Presentation Layer (UI)"
UI --> MW[MainWindow]
UI --> PW[PictureWidget Details]
UI --> MAP[MapWindow / Leaflet]
UI --> DLG[Dialogs / Settings]
end
subgraph "Business Logic Layer"
MW --> IDX[ImageIndexer Worker]
MW --> UP[UploadManager]
MW --> GEO[Nominatim Geocoding]
PW --> P_WRAP[Photo Wrapper / Exiv2]
end
subgraph "Data Persistence Layer"
IDX --> DB[(SQLite Database)]
DB --> MODEL[QSqlTableModel]
MODEL --> MW
UP --> API[CrowQt Server API]
P_WRAP --> FS[File System]
end
License Distributed under the MIT License. See LICENSE for more information.
Copyright (c) 2025 ZHENG Robert
Authors
π
