Skip to content

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

Good Gallery

A fast desktop gallery for large photo and video libraries, from a few thousand files to half a million, on local disks or network shares. It finds photos by the tags, ratings and dates already in your files, and lets you touch them up without opening another program.

Runs on Windows and Linux. To try it without installing, open the web version: your photos stay on your computer.

Written in Rust (egui on wgpu).

The masonry view with the sidebar: libraries, people, places, ratings and tags

Features

  • Four views: Masonry, Justified, Grid and List, grouped by day. Scrolling stays smooth with hundreds of thousands of items, and the scrollbar shows the years to jump to.
  • Smart albums: keep a search under a name in the sidebar, or build one from conditions matching all or any: tags, People and Places, ratings, dates such as the last 30 days, size, duration, megapixels, orientation and what a photo shows. It stays up to date as photos are added, tagged and rated.
  • Libraries anywhere: add local folders or network shares (\\server\share). Thumbnails are cached on your computer, so an offline share stays browsable.
  • Always up to date: changes on disk are picked up as they happen, with periodic checks for anything missed.
  • Search by what's in your files: tags from EXIF, IPTC, XMP and .xmp sidecars (Lightroom, digiKam, darktable and others), including hierarchies like Places|Italy|Rome and face regions as People. Photos with a GPS position but no place tag show under the nearest town in Places, named offline, and never written into the file. A world map shows where they were taken. Filter by file name, folder, date, rating and type, and sort by date, name, path or size.
  • Faces, on your computer: choose detection and recognition models (compare them), and the app finds faces in the background and suggests who they are. A name you confirm goes into the file as a face region other programs can read. Off until you choose a model.
  • Search by what's in the photo, on your computer: type "a dog on a beach" and see the photos that show it, without tags. A model you download looks at each photo once, in the background, from its thumbnail. Off until you choose a model.
  • Viewer: step through the gallery, zoom and pan, play videos, see a photo's details, who is where in it (from its face regions) and a filmstrip of the gallery.
  • Open with Good Gallery from Explorer or your file manager: a photo in a library opens in it; any other photo or video shows at once, and you can step through its folder without adding it as a library.
  • Editing: exposure, brightness, contrast, highlights, shadows, whites and blacks; tone curves over a histogram; white balance, vibrance and saturation; grain, vignette and blur (behind the subject, tilt-shift or radial); your own .cube LUTs at a strength; crop, rotate, straighten by any angle, flip, and a smaller size with a quality of your choice. The subject and the background, found automatically, can each get their own light and color. Gradient, luminance and color masks do the same for any other part of a photo. Save as a copy, or over the original, which is kept so you can revert, or without a backup to save space. Edits stay editable, earlier saves can be brought back from the version history, and metadata and color profiles are kept.
  • Rename many files at once: search and replace, regular expressions, and placeholders for the date taken, the date modified and tags. A preview shows every new name first, sidecars come along, and Undo takes it back.
  • Fix the dates of many photos: take the date taken from the file name, from another date the photo has, or shift it to correct a wrong camera clock. A preview shows every old and new date first, and Undo takes it back.
  • Light or dark, following your system.

Good Gallery only changes files when you ask it to: saving or reverting an edit, rating, tagging, naming a face or renaming.

Justified Grid
Justified view Grid view
List Viewer
List view Viewer with the info panel and filmstrip
Editing
Editing a photo in the viewer

Formats: JPEG, PNG, WebP, GIF and AVIF photos; MP4, M4V, MOV, WebM and MKV videos. JPEG, PNG and WebP photos can be edited.

Install

Windows

Download from the releases (Windows 10 or 11, 64-bit):

  • good-gallery-<version>-windows-x64-setup.exe installs for your user, without admin rights. You choose a Start menu shortcut, a desktop shortcut and whether Explorer offers Good Gallery under Open with; the last one can be changed later in the settings.
  • good-gallery-<version>-windows-x64-portable.zip runs from wherever you extract it.

Both include exiftool, ffmpeg and libmpv. The downloads aren't code-signed yet, so SmartScreen may warn: choose More info → Run anyway (for the zip: Properties → Unblock before extracting).

Your index, settings and thumbnails live in %APPDATA%\good-gallery. Updates reuse it, and uninstalling leaves it in place.

The app asks GitHub when it starts whether there is a newer version and shows a notice if there is. Check now in the settings asks at any time. Nothing is downloaded until you press Update and restart (or use the release page, for the portable zip and on Linux). You can turn the check off in the settings.

Linux

On Ubuntu 24.04 or newer and on Fedora (x86-64, X11 or Wayland), download the package and install it, which also brings exiftool, ffmpeg and libmpv:

sudo apt install ./good-gallery-<version>-linux-x64.deb
sudo dnf install ./good-gallery-<version>-linux-x64.rpm

On Fedora, install ffmpeg from RPM Fusion for all video codecs. There's no package repository yet, so install a new release the same way.

On other distributions, download good-gallery-<version>-linux-x64.tar.gz. It uses your distribution's helpers; on Debian, for example:

sudo apt install libimage-exiftool-perl ffmpeg libmpv2

Extract the archive and run ./good-gallery, or ./install.sh to add it to your app menu (./install.sh --uninstall removes it). Data lives in ~/.local/share/good-gallery.

In the browser

Try it at flayms.github.io/Good-Gallery without installing anything. Pick a folder and browse it with the same gallery, search and viewer. Nothing is uploaded: the index and thumbnails stay in your browser. It works in current Chrome, Edge, Firefox and Safari, for folders up to about 20,000 files. Network shares and editing need the desktop app.

To host it yourself, extract good-gallery-<version>-web.zip from the releases into any folder of a static web server. It needs no server-side code, but it has to be served over HTTPS (or on localhost), since browsers offer folder access and storage only there.

Getting started

Open Settings, add a folder as a library and wait for the first indexing to finish. Then:

Where Key Does
Gallery Ctrl + mouse wheel Bigger or smaller tiles
Gallery Hold the middle mouse button Autoscroll
Gallery Ctrl + B Hide or show the sidebar
Gallery Enter, or a double-click Open in the viewer
Gallery Click, Ctrl + click, Shift + click Select one, add or remove one, add a range
Gallery Ctrl + A / Esc Select all / clear the selection
Viewer ← / → Previous / next
Viewer + / − / 0, mouse wheel, click Zoom in, out, fit
Viewer I / F Info panel / filmstrip
Viewer P Face regions
Viewer Space, ↑ / ↓ Play or pause a video, volume
Viewer E Edit the photo
Viewer Esc Close (while editing: stop editing; while cropping: leave the crop)
Editing Ctrl + Z / Ctrl + Shift + Z Undo / redo
Editing Hold \ Compare with the photo before these changes
Editing Double-click a slider Reset it

Edited photos saved over their original show Revert to original in the info panel.

Development

Requirements

  • Rust through rustup; rust-toolchain.toml pins the version.

  • Windows: the MSVC build tools with the Windows SDK:

    winget install Microsoft.VisualStudio.2022.BuildTools --override "--wait --passive --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended"

    Run ./packaging/fetch-helpers.ps1 once for exiftool, ffmpeg and libmpv (into target/helpers/, where development builds find them; GOOD_GALLERY_EXIFTOOL, GOOD_GALLERY_FFMPEG and GOOD_GALLERY_MPV point elsewhere). Tests that need a missing helper skip themselves. The installer needs NSIS (winget install NSIS.NSIS).

  • Linux (Ubuntu):

    sudo apt install build-essential pkg-config libimage-exiftool-perl ffmpeg libmpv2 mesa-vulkan-drivers xvfb

    mesa-vulkan-drivers gives the snapshot tests a software GPU; xvfb runs --screenshot without a display.

  • Browser version: clang, Trunk (cargo install --locked trunk), and Node.js for its tests (on Linux once: sudo npx playwright install-deps chromium).

  • Releases: cargo install --locked git-cliff@2.14.2.

Development builds keep their data in %APPDATA%\good-gallery-rust (Linux: ~/.local/share/good-gallery-rust), away from your real index.

Commands

Command Does
cargo run -p app Run the app (-- --data-dir <folder> for another data folder)
cargo test --workspace All tests, including UI snapshots (UPDATE_SNAPSHOTS=1 rewrites them)
cargo clippy --workspace --all-targets -- -D warnings Lint
cargo fmt --all Format
cargo xtask check-specs Check that specs and tests reference each other
cargo xtask screenshots Render the screenshots above from a generated demo library (needs exiftool and ffmpeg). After every release, the Screenshots workflow does it on Windows and offers changes on the screenshots-refresh branch
cargo xtask dist Build the installer and portable zip, or on Linux the .tar.gz, into target/dist/
cargo xtask icons Write the lucide icons named in app::icons and render the app icon from its SVG
cargo xtask places Rebuild the places named from GPS positions from GeoNames (needs curl)
cargo xtask map Rebuild the world map from Natural Earth (needs curl)
cargo xtask countries Rebuild the country names in every language from Unicode CLDR (needs curl)
cargo xtask web Build the browser version into target/web/
cargo xtask web-test Build the browser version and run its tests in Chromium
cargo xtask release Cut a release (see below)

CI runs formatting, clippy, the spec check and all tests on Windows, Linux and in the browser for every pull request.

Releases

Commits follow Conventional Commits (feat: …, fix(viewer): …, feat!: …). On a clean, up-to-date main, cargo xtask release picks the next version from the commits since the last tag, shows the release notes and, once you confirm, updates Cargo.toml and CHANGELOG.md, tags and pushes. The tag starts the release workflow, which builds, smoke-tests and publishes the downloads and deploys the browser version. Pass major, minor, patch or a version to override, --dry-run to preview.

Further reading

License

GPL-3.0. The bundled ffmpeg and libmpv builds are GPL too; see packaging/windows/THIRD-PARTY-NOTICES.txt. Place names come from GeoNames (CC BY 4.0) and country names in other languages from Unicode CLDR (Unicode License v3), the world map from Natural Earth (public domain).

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages