Noureddine RAMDI / Photoview: a filesystem-first self-hosted photo gallery with RAW support and face recognition

Created Mon, 04 May 2026 10:23:01 +0000 Modified Sat, 23 May 2026 20:41:27 +0000

photoview/photoview

Photoview takes a different approach to self-hosted photo galleries by keeping your photos exactly where you store them on your filesystem—no importing or moving files. Instead, it indexes your directories and generates thumbnails on demand, providing a fast and straightforward web UI for browsing even large photo collections.

Photoview is a self-hosted photo gallery written in TypeScript that focuses on photographers who want to maintain full control over their photo storage and organization. Unlike many galleries that import media into a database or proprietary storage, Photoview uses a scan-based approach to map your local filesystem directories directly to albums. This means your photos stay where you put them—on your local fileserver or NAS—and Photoview indexes their metadata and generates thumbnails to enable fast browsing.

The application supports a range of media formats including RAW images, which are notoriously difficult to preview quickly on typical fileservers. Photoview also parses EXIF metadata, performs face recognition to group photos by faces automatically, and optimizes videos for web playback. Sharing is built-in with options for multiple users and public sharing protected optionally by passwords.

Under the hood, Photoview is built in TypeScript, running on Node.js. It is designed to run in Docker containers, supporting SQLite, MariaDB, or PostgreSQL as backend databases. This flexibility allows users to choose a database backend that fits their scale and preferences. The project supports several Linux distributions including Debian, Ubuntu, NixOS, and Unraid, making it suitable for many homelab and server environments.

scan-based indexing and thumbnail pipeline set it apart

The standout technical feature of Photoview is its filesystem-first indexing model. Instead of importing or copying media, Photoview scans configured directories on your server, building an internal representation of albums and photos. This means the filesystem is always the source of truth, which fits naturally with photographers’ workflows where files are often organized and backed up using standard tools.

Generating thumbnails and previews on demand is another critical piece. Photoview creates optimized thumbnails and web-friendly video versions to enable fast browsing over the web interface without heavy client downloads or delays. The thumbnail pipeline balances speed and quality, generating images only as needed and caching them.

Face recognition adds a layer of intelligence by automatically detecting and grouping faces across your photo library. This is a feature usually found in commercial photo services but integrated here in a self-hosted, privacy-conscious manner.

On the backend, support for multiple databases means you can start small with SQLite or scale up to MariaDB or PostgreSQL if you have a large collection or multiple users. The choice of TypeScript lets the project leverage modern JavaScript tooling and a rich ecosystem, and the codebase is modular and approachable for contributions.

The tradeoff here is that managing a scan-based index and thumbnails means you have to consider disk space for caches and the time needed for initial scans and updates, especially on large collections. Also, running it requires some familiarity with Docker and Linux server environments.

explore the project

The repository is organized with clear separation between backend services and frontend UI, both implemented in TypeScript. The README provides comprehensive documentation on configuration options, supported storage backends, and deployment.

Key directories include the backend API code that handles scanning, indexing, and media processing, and the frontend React-based UI that offers the web gallery experience. Configuration files and Docker setup scripts are included to help you get started quickly.

Although explicit command-line installation steps are not provided in the README, the project emphasizes Docker deployment. The README notes the migration to a new Docker registry and provides an example snippet to update your docker-compose.yml accordingly. Users should have Docker, docker-compose, and optionally make installed on their server.

For those interested in the internals, the code is well-structured, making it straightforward to trace how filesystem events trigger indexing and thumbnail generation, and how the API serves media metadata.

verdict

Photoview is a solid choice for photographers and enthusiasts who want to keep their photo collections exactly where they are on disk, without importing or duplicating files. Its support for RAW images, EXIF metadata, and face recognition makes it practical for serious photo libraries.

The filesystem-first design means you retain full control over file organization and backups, which is a big plus for those wary of opaque database imports. However, this approach also means you need to manage the scan and thumbnail cache thoughtfully, especially for large archives.

While the Docker-based deployment and multiple database options provide flexibility and scalability, they also require some familiarity with Linux server environments and container management.

Overall, Photoview is relevant if you want a privacy-conscious, self-hosted photo gallery that respects your existing filesystem structure and offers advanced media features. It’s less ideal if you prefer a turnkey cloud-like experience or are uncomfortable with server setup and maintenance.

A practical, developer-friendly project that balances control with functionality for personal photo management.


→ GitHub Repo: photoview/photoview ⭐ 6,423 · TypeScript