Federated, self-hostable photo library : tag-based organization, cross-instance sharing, and WebDAV-exposed tag hierarchies.
Archypix is a self-hosted, federated photo library. It gives you full ownership of your media while letting you interact with users on other instances, without any central authority. Instead of rigid album structures, Archypix organizes everything around tags: flexible, hierarchical labels you can assign manually or through automated rules. Your tag tree can be browsed as a virtual folder hierarchy that can be synced with any WebDAV-compatible client or OS file manager.
Archypix uses a federated identity model: users are identified as @username:domain, resolved across instances via the standard WebFinger protocol.
Multiple backend instances can share a single public domain through a lightweight Resolver service, or operate independently on their own domain.
The full feature specifications are available in doc/01_GENERAL_SPECIFICATIONS.md.
Every picture carries any number of hierarchical tags, structured as slash-delimited paths such as /Photos/Travel/Alps. A picture tagged with a deep
path automatically appears under all its parent tags too: /Photos/Travel, then /Photos. Tags can be assigned manually or generated automatically
by rules you define. Deleted pictures are moved to a trash and kept for a configurable period before permanent removal.
You can define rules that tag your pictures automatically, without manual effort:
- By date range: group a holiday, a trip, or any period into a tag. Nested sub-periods are supported.
- By metadata: EXIF fields, GPS location, filename patterns, and more.
- By shared content: pictures you receive from other users can be automatically mapped into your own tag hierarchy.
Rules run as an ordered pipeline, re-evaluated whenever something relevant changes: a new upload, a metadata edit, a received share. Your library stays organized on its own.
A Hierarchy is a named, configurable view of your library organized as a virtual folder tree based on your tags. You choose which tags appear as folders, which subtrees to collapse, and which to exclude entirely. Hierarchies and Tags are the primary ways to browse your pictures in Archypix.
Any hierarchy can also be exposed as a WebDAV endpoint, making your library accessible from any sync client:
- Uploading a picture into a WebDAV folder automatically assigns the corresponding tag.
- Moving a picture between folders updates its tags.
- A configurable safe-delete mode protects against accidental bulk deletions from naive sync clients.
Archypix is federated: every instance is a peer, and no central server is required to coordinate sharing.
- Share pictures under a tag with a user on another instance.
- Shared pictures are never re-uploaded: recipients download them directly from your server.
- Optionally, new pictures added to the shared tag are announced to recipients automatically.
- Sharing is transitive: a recipient can re-share a collection that includes pictures owned by others.
- Revoke a share at any time; the revocation propagates to all downstream recipients immediately.
Files are stored in any S3-compatible object store (MinIO, AWS S3, Backblaze B2...). File downloads use short-lived presigned URLs generated by the storage backend, keeping large file traffic off the application server. Picture versioning is available and configurable per user.
Archypix is composed of two server-side services:
graph TB
client(["Client"])
resolver["Resolver"]
backA["Backend A"]
backB["Backend B"]
storage[("Postgres, Redis, S3")]
client -->|WebFinger| resolver
client -->|" REST / WebDAV "| backA
backA <-->|Federation| backB
backA -->|self - register| resolver
backB -->|self - register| resolver
backB --- storage
backA --- storage
| Component | Role |
|---|---|
| Resolver | WebFinger service. Maps @username:domain to the owning backend. Routes new user registrations to the least-loaded backend. |
| Backend | Axum HTTP server. Authoritative store for users, pictures, tags, and shares. Serves the REST API and WebDAV. |
| Worker | Async job pool for thumbnail generation, EXIF extraction, BlurHash, file hashing. ML inference planned. |
The project started as PicturesManager, a desktop photo manager built with Tauri. The stack was unusual by choice: a Rust backend coupled with a Rust WebAssembly frontend written in Yew, fast, safe, and entirely in one language. The core idea was already there: automatic grouping rules to organize pictures without manual effort.
PMCloud moved the project to the cloud. The desktop shell was dropped in favor of a Vue.js web frontend backed by a Rocket API and Diesel ORM. The signature feature of this iteration was shared groups: multiple users could collaborate on the same event's pictures while each keeping their own automatic grouping rules applied on top.
The project was rebranded as Archypix — Archy for the structured, architectural way it lets you organize your library, pix for pictures. The technology stack was carried forward and the codebase underwent a major refactoring (back / front), laying groundwork for the ambitions of the next phase.
Development restarted from a blank slate with an entirely new specification. The central breakthrough: Archypix became decentralized. Instances are peers — any instance can share with any other, world-wide, without a central registry. A single public domain can host multiple backend instances for scaling or migration, and completely independent domains federate natively. The tagging model was redesigned around hierarchical paths and automated pipelines, and hierarchies were introduced as the primary way to browse and sync the library.
This is the Archypix we are building today, and there is a lot left to implement. Contributions and ideas are very welcome.
Archypix is released under the GNU Affero General Public License v3.0.
In short: you are free to use, modify, and distribute Archypix, but any modified version you run as a network service must also be made available under the same license.