Skip to content

Zheng-Bote/web-gallery_desktop-gallery

Repository files navigation

Desktop-Gallery

A high-performance, professional Desktop Picture Gallery and Image management tool.

Developed for Linux, macOS, and Windows.

Report Issue Β· Request Feature

MIT License GitHub release (latest by date)


**Table of Contents**

Description

Qt6 C++23

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.

Key Features

βœ… runs on Linux βœ… runs on MacOS βœ… runs on Windows

πŸš€ Performance & Core

  • 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.

🌍 Geo-Intelligence

  • 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.

πŸ“ Metadata Management

  • 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.

☁️ Export & Cloud

  • 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).

🌐 Internationalization

  • i18n: Support for multiple languages (English, German).

see also

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

(back to top)

Status

GitHub Created At GitHub release (latest by date) GitHub Release Date Status

GitHub Issues GitHub Pull Requests

Getting Started

Prerequisites

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)

Project Structure

.
β”œβ”€β”€ 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

Build Instructions

# 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 .

(back to top)

Documentation & Screenshots

Note

please visit Desktop-Gallery Github Pages for more.

App Screenshot

Architecture Overview

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.

1. Technology Stack

  • 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 Photo wrapper)
  • Build System: CMake

2. High-Level Architecture Diagram

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
Loading

(back to top)

Authors and License

License Distributed under the MIT License. See LICENSE for more information.

Copyright (c) 2025 ZHENG Robert

Authors

  • Zheng Robert - Core Development

Code Contributors

Contributors

Zheng Robert


πŸ––

About

A high-performance, professional Desktop Picture Gallery and Image management tool for Linux, MacOs and Windows

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •