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).
- 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
.xmpsidecars (Lightroom, digiKam, darktable and others), including hierarchies likePlaces|Italy|Romeand 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
.cubeLUTs 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 |
|---|---|
![]() |
![]() |
| List | Viewer |
![]() |
![]() |
| Editing | |
![]() |
Formats: JPEG, PNG, WebP, GIF and AVIF photos; MP4, M4V, MOV, WebM and MKV videos. JPEG, PNG and WebP photos can be edited.
Download from the releases (Windows 10 or 11, 64-bit):
good-gallery-<version>-windows-x64-setup.exeinstalls 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.zipruns 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.
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.rpmOn 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 libmpv2Extract 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.
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.
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.
-
Rust through rustup;
rust-toolchain.tomlpins 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.ps1once for exiftool, ffmpeg and libmpv (intotarget/helpers/, where development builds find them;GOOD_GALLERY_EXIFTOOL,GOOD_GALLERY_FFMPEGandGOOD_GALLERY_MPVpoint 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-driversgives the snapshot tests a software GPU;xvfbruns--screenshotwithout 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.
| 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.
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.
- docs/architecture.md: how it is built; the decisions behind it are in the specs' plans and docs/decisions.md
- docs/design.md: visual design
- docs/glossary.md: terms
- docs/specs/: feature specs
- AGENTS.md: guidelines for coding agents
- Issues: what's next
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).





