Repolode
HoshinoSuzumi

HoshinoSuzumi/chronoframe

Self-hosted photo gallery that extracts EXIF, identifies shooting locations, plays Live Photos and offers albums and a map explore view.

Open-source alternative to:Google PhotosApple Photos

Stars
1,949
Forks
153
Open issues
32
Last commit
3 hours ago

What is it?

ChronoFrame is a self-hosted photo gallery for publishing your own photos. After upload, it extracts EXIF metadata, generates previews and identifies shooting locations through reverse geocoding. Visitors can browse by time, album or map, and zoom into large images with a WebGL viewer.

The project covers Live Photos and Motion Photos by automatically pairing an image with its video, with playback on hover or long-press. Albums can be reordered, hidden or protected with passwords. An admin dashboard handles batch uploads, metadata and rating edits, batch downloads, reindexing, and shows task queues and logs.

Storage can be local files, S3-compatible services or OpenList, with CDN URLs configurable. Deployment is documented with Docker and Docker Compose, and a setup wizard creates the administrator and storage on first run. The app is built with Vue and Nuxt.

Key features

  • 01Automatic EXIF extraction, previews and shooting-location recognition after upload.
  • 02Live Photo and Motion Photo pairing with hover or long-press playback.
  • 03WebGL zoom and tiled rendering for large images.
  • 04Albums with reordering, hiding and password protection.
  • 05Map view with MapLibre or Mapbox and a choice of place-name language.
  • 06Storage on local disk, S3-compatible services or OpenList.

Use cases

  • Publishing a personal photography portfolio on your own server.
  • Sharing password-protected albums with family or clients.
  • Browsing a photo library by location on a map.
  • Keeping photos in an S3 bucket while serving them through a gallery front end.

Quick start

  1. 1

    Create docker-compose.yml with the ChronoFrame service definition

  2. 2

    Start the container in the background

    docker compose up -d
  3. 3

    Open http://localhost:3000 and finish the setup wizard to create an administrator and choose storage

Things to know

  • Docker is the recommended deployment; running from source needs Node.js 22 and pnpm 10.34.6.
  • Public deployments should be served over HTTPS behind a proxy.
  • Some features depend on a map token (MapLibre/Mapbox) and optional services such as S3 or OpenList.

Topics

FAQ

What is chronoframe?
Self-hosted photo gallery that extracts EXIF, identifies shooting locations, plays Live Photos and offers albums and a map explore view. ChronoFrame is a self-hosted photo gallery for publishing your own photos. After upload, it extracts EXIF metadata, generates previews and identifies shooting locations through reverse geocoding. Visitors can browse by time, album or map, and zoom into large images with a WebGL viewer.
Is chronoframe free to use? What license does it have?
chronoframe is open source under the MIT license. Check the license terms before using it in commercial products.
Is chronoframe still maintained?
Actively maintained. The last commit to chronoframe was on Oct 21, 2026.
What can I use chronoframe for?
Publishing a personal photography portfolio on your own server. Sharing password-protected albums with family or clients. Browsing a photo library by location on a map. Keeping photos in an S3 bucket while serving them through a gallery front end.
How do I install chronoframe?
Create docker-compose.yml with the ChronoFrame service definition Start the container in the background: docker compose up -d Open http://localhost:3000 and finish the setup wizard to create an administrator and choose storage
Where can I get chronoframe?
The source code and installation instructions are on GitHub: https://github.com/HoshinoSuzumi/chronoframe

Summary generated by AI from the project's README. GitHub stats refresh daily.

Related projects