No description
Find a file
Ömer Duran 6dc0acac13
Settings: Reorganize UI and add an Accessibility section #848 #799 #5429
* Frontend: Add settings for albums, favorites, folders, and media features

* Frontend: Enhance download settings for files and albums #848

* Frontend: Enhance download settings for files and albums #848

* Frontend: Update album download settings to restrict access to super admins

* Frontend: Add album sorting options to settings for super admins

* Frontend: Update download settings visibility

* Frontend: Refine download settings access control for user roles

* Tests: Add album, folder, moment, state, and month order selection options to page-model

* Frontend: Update access control for super admins in settings to include scope check

* Tests: Add new tests for download name and album order settings persistence

* Tests: Implement new tests for default album sort order persistence in settings

* Frontend: Move default album order settings

* Frontend: Add zoom accessibility option in settings #799

* Frontend: Update download name from "Share Identifier" to "Share Friendly" and refine hints for download options in settings

* Tests: Add new acceptance test for disabling album downloads while allowing file downloads in settings

* Frontend: Improve download options layout and hints

* Frontend: Refactor download options condition in settings page

* Frontend: Implement native zoom control in lightbox component

* Settings: Add Collections tab and move Services to its own page #848 #5429

- Add a super-admin Collections tab after Content holding the album
  Download and Sort Order settings; remove those cards from Content.
- Move Services from a settings tab to a dedicated page
  (page/services.vue) with a search toolbar and a Reload / Learn More
  action menu; link it from the navigation settings menu.
- Implement server-side services search (acc_name filter) with tests.
- De-duplicate the picture sort-order options into a shared
  SortOrderOptions builder in options.js.
- Update acceptance/unit tests and page models to match.

* Frontend: Regenerate translation catalogs #848 #5429

Ran `make gettext-extract` to pick up the new settings strings
(Collections, Features, Disable Downloads, and related messages) so
Weblate can translate them. Existing translations are preserved.

* Frontend: Move lightbox viewport-zoom handling into the view helper

- Move the viewport pinch-zoom lock/restore (disableNativeZoom /
  restoreNativeZoom + savedViewportContent) from lightbox.vue onto the
  View singleton in common/view.js.
- Drive it passively from View.apply() via a disableViewportZoom flag in
  the PLightbox case, alongside hideScrollbar / disableScrolling /
  disableNavigationGestures; lightbox.vue no longer references zoom.
- Make save/restore idempotent and extract the viewport constants.
- Cover the helpers and the apply() wiring in view.test.js.

* Settings: Add Accessibility section to General with Reduce Motion #848 #5429

- Move the page-zoom checkbox out of the feature-flags grid into a
  dedicated Accessibility card (super-admin only) with four toggles:
  Open on Hover, Reduce Motion, Hide Scrollbar, and Allow Page Zoom.
- Add a UI.ReduceMotion flag (defaults false) that toggles an
  html.reduce-motion class via config.setReduceMotion and suppresses map
  fly-to animations non-destructively (util.mapAnimateDuration).
- Make Open on Hover apply live by reading shouldOpenOnHover() through a
  reactive computed in the action/auth/lightbox menus; Zoom and Hide
  Scrollbar reload since they are baked into the server-rendered HTML.
- Reword two feature-grid hints to the "pictures" convention and cover
  the new helpers with Go and Vitest tests.

* Frontend: Regenerate translation catalogs #848 #5429

Ran `make gettext-extract` to pick up the new Accessibility settings
strings (Accessibility, Allow Page Zoom, Open on Hover, Hide Scrollbar,
Reduce Motion, and their hints) and the reworded feature-grid hints.
Existing translations are preserved.

---------

Co-authored-by: Michael Mayer <michael@photoprism.app>
2026-07-08 14:11:36 +02:00
.agents Develop: Refactor project configuration directory structure 2026-04-08 09:25:48 +02:00
.claude Docs: Clarify checking off met Acceptance Criteria in GitHub issues 2026-06-18 12:40:54 +00:00
.github Links: Use canonical trailing-slash form for website URLs 2026-06-24 17:20:30 +02:00
assets Settings: Reorganize UI and add an Accessibility section #848 #799 #5429 2026-07-08 14:11:36 +02:00
cmd/photoprism Links: Use canonical trailing-slash form for website URLs 2026-06-24 17:20:30 +02:00
docker Docker: Remove unused goproxy module-proxy image and build target 2026-06-10 18:24:59 +00:00
frontend Settings: Reorganize UI and add an Accessibility section #848 #799 #5429 2026-07-08 14:11:36 +02:00
internal Settings: Reorganize UI and add an Accessibility section #848 #799 #5429 2026-07-08 14:11:36 +02:00
pkg PWA: Add maskable icons, lang/dir, and install screenshots #5696 2026-06-30 19:53:52 +02:00
scripts PWA: Add maskable icons, lang/dir, and install screenshots #5696 2026-06-30 19:53:52 +02:00
setup Setup: Default to MariaDB 12.3 (LTS) in compose examples #5705 2026-06-28 15:15:27 +02:00
.clabot CI: Add initial .clabot config file 2022-03-11 19:54:39 +01:00
.codespellrc CI: Add codespell config and fix typos (#4506) 2025-03-27 16:42:24 +01:00
.dockerignore Develop: Ignore .gitconfig files in dev environment 2026-05-22 23:55:19 +02:00
.editorconfig Add .editconfig to specify editor defaults 2025-12-02 16:48:43 +01:00
.env.example Develop: Honor WORKING_DIR in Dockerfile WORKDIR via compose build arg 2026-05-22 22:26:24 +00:00
.fossa.yml Links: Change https://photoprism.app/ to https://www.photoprism.app/ 2023-02-08 09:07:42 +01:00
.gitignore Develop: Ignore .gitconfig files in dev environment 2026-05-22 23:55:19 +02:00
.golangci.yml CI: Add revive.toml & "make lint-go" target, improve .golangci.yml #5330 2025-11-21 10:28:43 +01:00
.ldap.cfg Tests: Make acceptance-*-restart targets stop the daemon first 2026-05-04 11:52:25 +02:00
.my.cnf Develop: Honor MARIADB_PORT and POSTGRES_PORT overrides #5590 2026-05-20 09:44:12 +00:00
.prettierignore Frontend: Restrict Prettier to CSS and JSON via .prettierignore 2026-05-16 10:34:38 +02:00
.qdrant.yaml AI: Add Qdrant vector database for test & development #1090 #1287 #4669 2025-03-31 12:35:28 +02:00
.report.tmpl CI: Generate NOTICE file with go-licenses and npm license-report 2024-05-15 10:11:15 +02:00
.rsyncignore Setup: Add .rsyncignore and gitignore private setup/Makefile 2026-05-22 06:48:29 +00:00
.semver Setup: Improve package build configuration #3861 2024-05-25 11:11:36 +02:00
.telemetry Build: Add shared .telemetry file to opt out of CLI telemetry 2026-04-24 16:42:21 +02:00
AGENTS.md Docs: Clarify checking off met Acceptance Criteria in GitHub issues 2026-06-18 12:40:54 +00:00
CODE_OF_CONDUCT.md Links: Use canonical trailing-slash form for website URLs 2026-06-24 17:20:30 +02:00
codecov.yml Codecov: Disable commit status on GitHub 2019-12-01 21:58:12 +01:00
CODEMAP.md Docs: Reflect the /portal default Portal web UI prefix 2026-06-10 04:43:50 +00:00
compose.armv7.yaml Develop: Make compose working_dir and paths configurable via WORKING_DIR 2026-05-22 09:03:34 +00:00
compose.intel.yaml Setup: Add PHOTOPRISM_OIDC_PROMPT to compose & Helm examples #5698 2026-06-27 12:39:25 +00:00
compose.latest.yaml Config: Add PHOTOPRISM_SITE_NAME to compose examples and Helm charts 2026-06-10 14:28:50 +00:00
compose.local.yaml Develop: Honor MARIADB_PORT and POSTGRES_PORT overrides #5590 2026-05-20 09:44:12 +00:00
compose.mariadb.yaml Develop: Honor MARIADB_PORT and POSTGRES_PORT overrides #5590 2026-05-20 09:44:12 +00:00
compose.mysql.yaml Develop: Honor MARIADB_PORT and POSTGRES_PORT overrides #5590 2026-05-20 09:44:12 +00:00
compose.nvidia.yaml Setup: Add PHOTOPRISM_OIDC_PROMPT to compose & Helm examples #5698 2026-06-27 12:39:25 +00:00
compose.preview.yaml Config: Add PHOTOPRISM_SITE_NAME to compose examples and Helm charts 2026-06-10 14:28:50 +00:00
compose.yaml Setup: Default to MariaDB 12.3 (LTS) in compose examples #5705 2026-06-28 15:15:27 +02:00
CONTRIBUTING.md Links: Use canonical trailing-slash form for website URLs 2026-06-24 17:20:30 +02:00
Dockerfile Docker: Bump dev base image to develop:260629-resolute 2026-06-30 01:13:20 +02:00
eslint.config.mjs Frontend: Add npm workspaces and root ESLint config for IDE auto-detection 2026-02-27 11:41:30 +01:00
FUNDING.yml Links: Use canonical trailing-slash form for website URLs 2026-06-24 17:20:30 +02:00
GLOSSARY.md Docs: Drop private subrepo references from public files 2026-05-05 09:40:18 +00:00
go.mod Dependencies: Upgrade klauspost, geo, x/text & x/tools Go modules 2026-07-07 23:57:52 +00:00
go.sum Dependencies: Upgrade klauspost, geo, x/text & x/tools Go modules 2026-07-07 23:57:52 +00:00
LICENSE Links: Use canonical trailing-slash form for website URLs 2026-06-24 17:20:30 +02:00
Makefile HEIC: Upgrade libheif from v1.23.0 to v1.23.1 #5708 2026-06-29 22:22:37 +02:00
NOTICE Dependencies: Upgrade klauspost, geo, x/text & x/tools Go modules 2026-07-07 23:57:52 +00:00
package-lock.json Frontend: Upgrade Vitest, Vite, browserslist & Vue language server 2026-07-08 00:04:29 +00:00
package.json Frontend: Retire redundant minimatch override 2026-05-05 10:13:03 +00:00
prometheus.yml OAuth2: Remove client soft delete and fix client add command #213 #3943 2024-01-29 21:08:01 +01:00
README.md Docs: Update tagline in README.md 2026-06-28 10:36:59 +02:00
revive.toml CI: Add revive.toml & "make lint-go" target, improve .golangci.yml #5330 2025-11-21 10:28:43 +01:00
SECURITY.md Docs: Update SECURITY.md 2024-10-18 02:50:08 +02:00
SPONSORS.md Links: Use canonical trailing-slash form for website URLs 2026-06-24 17:20:30 +02:00

PhotoPrism: Browse Your Life in Pictures

License: AGPL Documentation Community Chat GitHub Discussions Bluesky Social Mastodon

PhotoPrism® is an AI-powered, privacy-first app for browsing, organizing, and sharing photos and videos. It helps tag, search, and rediscover media without getting in your way, whether self-hosted or in the cloud.

To get a first impression, you are welcome to play with our public demo. Please be careful not to upload any private, unlawful or offensive pictures.

Feature Overview

Our mission is to provide the most user- and privacy-friendly solution to keep your pictures organized and accessible. That's why PhotoPrism was built from the ground up to run wherever you need it, without compromising freedom, privacy, or functionality:

Being completely self-funded and independent, we can promise you that we will never sell your data and that we will always be transparent about our software and services. Your data will never be shared with Google, Amazon, Microsoft or Apple unless you intentionally upload files to one of their services. 🔒

Getting Started

Step-by-step installation instructions for our self-hosted community edition can be found on docs.photoprism.app - all you need is a Web browser and Docker to run the server. It is available for Mac, Linux, and Windows.

The stable releases and development preview are available as a multi-arch image for 64-bit AMD, Intel, and ARM processors. That means, Raspberry Pi and Apple Silicon users enjoy the exact same functionality and can follow the same installation steps.

See our Getting Started FAQ for alternative installation methods, for example using the tar.gz packages we provide.

Support Our Mission 💎

PhotoPrism is 100% self-funded and independent. Your continued support helps us provide more features to the public, release regular updates, and remain independent!

Our members enjoy additional features, including access to interactive world maps, and can join our private chat room to connect with our team. We currently have the following membership options:

  • You can sign up directly on our website and pay with credit card or SEPA through Stripe, so you don't need to link an external account and can easily upgrade or downgrade at any time
  • Alternatively, Patreon also supports PayPal, additional currencies, and lets you choose between monthly and annual billing for all tiers

If you currently support us through GitHub Sponsors, you can also register on our website and use the Activate GitHub Sponsors Membership button to link your account. For details on this and how to link your Patreon account, see our Activation Guide.

You are welcome to contact us for change requests, membership questions, and business partnerships.

View Membership FAQ Sign Up

Why Your Support Matters

  • Your continued support helps us provide regular updates and remain independent, so we can fulfill our mission and protect your privacy
  • Sustained funding is key to quickly releasing new features requested by you and other community members
  • Being self-funded and independent, we can personally promise you that we will never sell your data and that we will always be transparent about our software and services

Please also leave a star on GitHub if you like this project. It provides additional motivation to keep going.

A big thank you to all current and past sponsors, whose generous support has been and continues to be essential to the success of the project!

View Sponsors View Credits

Getting Support

Visit docs.photoprism.app/user-guide to learn how to sync, organize, and share your pictures. If you need help installing our software at home, you are welcome to post your question in GitHub Discussions or ask in our Community Chat. Common problems can be quickly diagnosed and solved using our Troubleshooting Checklists. Eligible members are also welcome to email us for technical support and advice.

Upcoming Features and Enhancements

Our Project Roadmap shows what tasks are in progress and what features will be implemented next. You are invited to give ideas you like a thumbs-up, so we know what's most popular.

Be aware that we have a zero-bug policy and do our best to help users when they need support or have other questions. This comes at a price though, as we can't give exact release dates for new features. Our team receives many more requests than can be implemented, so we want to emphasize that we are in no way obligated to implement the features, enhancements, or other changes you request. We do, however, appreciate your feedback and carefully consider all requests.

Because sustained funding is key to quickly releasing new features, we encourage you to support our mission by signing up for a personal membership or purchasing a commercial license.

Become a Member

GitHub Issues ⚠️

We kindly ask you not to report bugs via GitHub Issues unless you are certain to have found a fully reproducible and previously unreported issue that must be fixed directly in the app. Thank you for your careful consideration!

Connect with the Community

Follow us on Mastodon, Bluesky, or join the Community Chat to get regular updates, connect with other users, and discuss your ideas. Our Code of Conduct explains the "dos and donts" when interacting with other community members.

As a contributor, you are also welcome to contact us directly if you have something on your mind that you don't want to discuss publicly. Please note, however, that due to the high volume of emails we receive, our team may be unable to get back to you immediately. We do our best to respond within five business days or less.

Every Contribution Makes a Difference

We welcome contributions of any kind, including blog posts, tutorials, translations, testing, writing documentation, and pull requests. Our Developer Guide contains all the information necessary for you to get started.


PhotoPrism® is a registered trademark. By using the software and services we provide, you agree to our Terms of Service, Privacy Policy, and Code of Conduct. Docs are available under the CC BY-NC-SA 4.0 License; additional terms may apply.