ChronoFrame
ChronoFrame handles personal gallery application as a self-hosted solution.
Self-hosted photo management, honestly reviewed. This is what you actually get when you run it on your own server.
TL;DR
- What it is: MIT-licensed self-hosted photo gallery with full EXIF parsing, geolocation mapping, and Live/Motion Photo support — running on SQLite3 with no separate database required [README].
- Who it’s for: Photographers and privacy-conscious individuals who want out of Google Photos, need metadata-rich browsing, and care about where their photos’ GPS data goes [5][README].
- Cost savings: Google One costs $2.99–$13.99/mo depending on storage tier. ChronoFrame runs on a $5–10/mo VPS with your own storage — you pay once to set it up and own the infrastructure permanently [README].
- Key strength: The EXIF pipeline is unusually thorough — capture time, geolocation, camera parameters, reverse geocoding — and the interactive map view lets you browse photos by where they were taken [README][5].
- Key weakness: At 1,696 GitHub stars, this is a young project with limited independent review coverage. The reverse geocoding feature depends on an external Mapbox API key, and there’s no facial recognition. If you want AI tagging and face albums, look at PhotoPrism or Immich instead [README][4][5].
What is ChronoFrame
ChronoFrame is a self-hosted web application for managing and browsing a personal photo library. You upload photos through the web interface, and it handles the rest: thumbnail generation, EXIF extraction, GPS parsing, reverse geocoding, and organization into albums. The whole thing runs in a single Docker container backed by SQLite3 — no separate Postgres or MySQL instance to manage [README][website].
The project is built on Nuxt 4 with full TypeScript, Drizzle ORM for database access, and TailwindCSS on the frontend. That stack is modern and well-maintained, which matters for long-term self-hosting. The README describes it as “a smooth photo display and management application, supporting multiple image formats and large-size image rendering” [README].
What separates ChronoFrame from the generic photo gallery crowd is its specific focus on location-aware browsing. EXIF parsing is table stakes. What’s less common is the “explore map” view — you can navigate your entire photo library geographically, seeing dots on a globe that represent where you’ve shot. Combined with reverse geocoding (which converts GPS coordinates into readable location names), this makes ChronoFrame a genuinely useful tool for travel photographers or anyone whose library spans multiple countries [README][5].
The project also handles Apple LivePhoto and Google Motion Photo formats natively, detecting and processing the accompanying MOV video files so the dynamic effects are preserved. That’s a specific feature that most lightweight gallery tools skip entirely [README][website].
As of this review, ChronoFrame sits at 1,696 GitHub stars. It’s appeared on ProductHunt and HelloGitHub, and has a Discord community — but it’s clearly earlier-stage than Immich (which has tens of thousands of stars) or PhotoPrism [README][5].
Why people choose it over Google Photos, Immich, and PhotoPrism
There are no substantial third-party reviews of ChronoFrame yet — the project is young enough that independent write-ups haven’t accumulated. What we can do is map the trade-offs against the tools it competes with, based on what the ecosystem says about those tools.
Versus Google Photos. This is the most common migration trigger. Google Photos is free up to 15GB, then forces you into Google One tiers. The privacy angle is the stronger argument than the cost angle: Google scans your photos for content moderation, uses metadata for ad targeting, and you have no visibility into what data leaves your library. For photographers shooting at identifiable locations — political events, protests, confidential client sites — this matters more than for casual family albums. ChronoFrame runs on infrastructure you control, with GPS data that never leaves your server [README][5].
Versus Immich. AlternativeTo lists Immich as the top alternative to ChronoFrame [5]. Immich is the dominant self-hosted Google Photos replacement right now — it has face recognition, partner sharing, machine learning-powered search, a mobile app with automatic backup, and is under heavy active development. One EU-based photo service (PixelUnion) built their entire product on the Immich backend rather than build from scratch [1]. If you want feature parity with Google Photos including face albums and mobile auto-backup, Immich is the stronger choice. ChronoFrame doesn’t have facial recognition, and the mobile story isn’t as developed [README][1][5].
Versus PhotoPrism. PhotoPrism is the other major self-hosted photo tool with geolocation features [4]. The AlternativeTo community has given it 122 likes and 10 reviews averaging 4.6/5 [4]. The recurring complaint is installation complexity — one reviewer calls it “decidedly not Windows” and says “First install Docker…” is not an easy installation for non-technical users [4]. PhotoPrism also has a commercial licensing model where advanced features like facial recognition and some AI features are gated behind paid tiers. ChronoFrame is fully MIT with no commercial tier: everything in the repository is free to run [README][4].
The practical read: Immich is the power user’s choice, PhotoPrism is the photographer’s power tool, ChronoFrame is what you pick if you want a cleaner, simpler gallery experience focused on metadata and location browsing without the feature sprawl. It’s not trying to replace Google Photos feature-for-feature. It’s trying to be a well-built gallery viewer that respects your metadata.
Features
Based on the README and official documentation:
Photo management:
- Upload and browse photos through a web interface [README]
- JPEG, PNG, HEIC/HEIF format support [README]
- Automatic EXIF extraction: capture time, camera parameters, GPS coordinates [README]
- Reverse geocoding via Mapbox — GPS coordinates become readable location names [README]
- Smart thumbnail generation using ThumbHash [README]
- Album organization [5]
Location and mapping:
- Explore map view — browse your entire library geographically [README][website]
- Two map providers: MapLibre (open-source) or Mapbox [README]
- MapTiler or Mapbox access token required for map display [README]
- Separate unrestricted Mapbox token required for reverse geocoding [README]
Live and motion photo support:
- Apple LivePhoto format detection and processing [README][website]
- Google-standard Motion Photo support [README][website]
- Automatic MOV video file detection to preserve dynamic effects [website]
Storage:
- Local filesystem [README]
- S3-compatible object storage (Backblaze B2, MinIO, Cloudflare R2, AWS S3) [README]
- OpenList storage backend [README]
- Configurable CDN URL for photo delivery acceleration [README]
Deployment and infrastructure:
- Single Docker container [README]
- SQLite3 database — no separate database service required [website]
- Available on both GitHub Container Registry and Docker Hub [README]
- REST API [merged profile]
- NPM-based if you prefer building from source [merged profile]
What it doesn’t have:
- Facial recognition [4][5]
- Mobile app with automatic backup (Immich’s killer feature)
- AI-powered content tagging or smart search
- Multi-user management beyond basic admin credentials
- Video transcoding or a media server mode
Pricing: SaaS vs self-hosted math
Google Photos / Google One (what you’re escaping):
- Free: 15GB across Google services (fills up fast with modern camera files)
- 100GB: $2.99/month ($35.88/year)
- 200GB: $3.99/month ($47.88/year)
- 2TB: $9.99/month ($119.88/year)
iCloud Photos (if you’re in the Apple ecosystem):
- 50GB: $0.99/month
- 200GB: $2.99/month
- 2TB: $9.99/month
ChronoFrame self-hosted:
- Software: $0 (MIT license) [README]
- VPS: $5–8/month (Hetzner CX22, Contabo, DigitalOcean Droplet) for a lightly used instance
- Storage: depends on your approach — local disk included with VPS, or S3-compatible object storage at around $6/TB/month (Backblaze B2)
- Mapbox API: free tier covers 50,000 map loads/month, which is more than adequate for personal use. Reverse geocoding requests are separate — pricing depends on volume but a personal library is unlikely to cost anything meaningful.
The math for a photographer with a 200GB library: Google One 200GB plan: $3.99/month = $47.88/year. Self-hosted on a $6 Hetzner VPS with local storage: $72/year. The cost argument isn’t dramatic at this scale — you’re not saving a fortune. The real argument is control and privacy, not dollars. The math tips heavily in favor of self-hosting once you exceed 1TB, where Google One charges $9.99/month ($120/year) for 2TB vs a VPS + Backblaze B2 at roughly $6 + $6 = $12/month for 1TB of actual storage plus compute.
No pricing data is available for a ChronoFrame cloud-hosted tier — the project doesn’t offer one. It’s purely self-hosted.
Deployment reality check
The website’s “Simple Deployment” claim is largely accurate, with one important asterisk.
What makes it genuinely simple:
- No external database required. SQLite3 is embedded — you don’t need to spin up a separate Postgres or MySQL container. This is a meaningful simplification compared to PhotoPrism (which recommends MariaDB) or most other self-hosted tools [website][4].
- Single docker run command gets you running:
docker run -d --name chronoframe -p 3000:3000 -v $(pwd)/data:/app/data --env-file .env ghcr.io/hoshinosuzumi/chronoframe:latest[README] - Available on both GHCR and Docker Hub, so you can pull from whichever registry is faster for your region [README]
The env file you need to write: At minimum: admin email, session password (32-character random string), storage provider, and storage path. If you want the map features, you need at least a MapTiler or Mapbox public access token. If you want reverse geocoding (location names from GPS), you need a Mapbox unrestricted token as a separate credential [README].
What can trip you up:
- Mapbox dependency for geolocation. The explore map and reverse geocoding — arguably the most distinctive features — require external API credentials. MapLibre is the open-source map renderer option, but it still requires a MapTiler access token. Mapbox reverse geocoding requires a separate unrestricted token. These aren’t expensive or difficult to obtain, but they’re external dependencies that need API account setup. If you want a fully air-gapped installation with no external services, the location features won’t work [README].
- HEIC/HEIF processing. These formats from modern iPhones require server-side decoding libraries. The Docker image should handle this, but it can add processing time for large Apple photo library imports.
- Early-stage project. At 1,696 stars, ChronoFrame hasn’t accumulated the battle-tested deployment guides, community troubleshooting threads, and corner-case fixes that Immich or PhotoPrism have [README][4][5]. You’re somewhat on your own if something breaks.
- No documented migration path. If you’re coming from Google Photos or iCloud, there’s no built-in import tool for those formats. You’ll need to export your library (Google Takeout, iCloud download) and upload manually or via mounted storage.
Realistic time estimate for a technical user: 30–60 minutes to a working instance on a fresh VPS. For someone comfortable with Docker but new to self-hosting: 2–3 hours including domain setup and Mapbox account creation. For someone new to Linux servers: budget a full afternoon or hire help.
Pros and cons
Pros
- Genuinely MIT licensed. No commercial tier, no feature gating, no “fair-code” restrictions. Everything in the repository is yours to run, fork, or embed [README].
- No database to manage. SQLite3 embedded means one fewer service to maintain, back up, and worry about. For a personal gallery this is exactly the right call [website].
- EXIF pipeline is thorough. Capture time, camera make/model, GPS coordinates, aperture, ISO — all extracted and browsable. Most lightweight galleries do a fraction of this [README].
- Live/Motion Photo support. Native handling of Apple LivePhoto and Google Motion Photo is uncommon in self-hosted options. If you shoot primarily on iPhone, this matters [README][website].
- Explore map is genuinely useful. Browsing photos geographically across years and trips is a feature that’s surprisingly rare in lightweight gallery tools [5][README].
- Modern tech stack. Nuxt 4, TypeScript, Drizzle ORM — this isn’t a PHP app from 2012. The codebase is maintainable and the framework choices are sound [README].
- S3 storage support. You’re not locked into local disk. Backblaze B2, Cloudflare R2, MinIO — any S3-compatible storage works, which makes backup and scaling straightforward [README].
Cons
- No facial recognition. If you want face albums, smart grouping by person, or the Google Photos “who’s in this photo” experience, ChronoFrame doesn’t have it. Neither PhotoPrism free tier nor ChronoFrame does — Immich is where this feature lives in the self-hosted space [4][5].
- Mapbox dependency for key features. The explore map and reverse geocoding require external API tokens. These are free at personal scale but add account setup friction and an external call on every geocoding request [README].
- Small community. 1,696 stars and a Discord server is fine, but it means less community documentation, fewer Stack Overflow answers, and slower response to edge-case bugs compared to Immich or PhotoPrism [README][4].
- No mobile auto-backup app. The biggest reason people self-host Google Photos is automatic phone backup. ChronoFrame doesn’t have a companion mobile app for this. You manage your library through the web interface [README][5].
- No AI search or auto-tagging. You can’t search “photos from the beach” or “photos with my dog” unless you tagged them manually. PhotoPrism offers this via TensorFlow integration; Immich has its own ML pipeline [4][5].
- Limited video support. ChronoFrame handles MOV files as part of Live Photos but it’s not a general-purpose media server. No transcoding, no video library management [README].
- No multi-user management. The deployment is configured around a single admin account. Sharing access or managing multiple family members’ libraries isn’t a documented use case [README].
Who should use this / who shouldn’t
Use ChronoFrame if:
- You’re a photographer whose primary frustration with Google Photos is privacy and location data — you don’t want GPS coordinates of sensitive shoots going through Google’s servers.
- You want a gallery that takes EXIF metadata seriously and surfaces it browsably, including a map view of where you’ve shot.
- You shoot Apple LivePhoto or Google Motion Photo and want those preserved in a self-hosted gallery.
- You’re comfortable with Docker and can set up a Mapbox API key.
- You want a clean, focused tool without AI feature sprawl.
Skip it (use Immich instead) if:
- Automatic mobile phone backup is why you’re self-hosting. Immich has a companion iOS/Android app built for this.
- You want facial recognition and smart albums.
- Your library is large and you need a proven, battle-tested deployment with years of community troubleshooting behind it.
Skip it (use PhotoPrism instead) if:
- You want AI-powered content tagging and smart search across a large library.
- You’re willing to deal with more complex setup in exchange for deeper machine learning features [4].
Skip it (stay on Google Photos) if:
- You have under 15GB of photos and the free tier covers you.
- You’re not comfortable with command-line server management and don’t have someone to help.
- You need mobile auto-backup from day one with zero setup friction.
Skip it (use Ente Photos instead) if:
- You want a zero-knowledge, end-to-end encrypted photo storage solution where even the server operator can’t read your photos. Ente Photos is self-hostable and has a mobile app.
Alternatives worth considering
From the AlternativeTo listing and the broader ecosystem [5]:
- Immich — the most direct alternative. Better mobile story, facial recognition, auto-backup app, larger community. More complex to deploy (requires Postgres + Redis). Best overall self-hosted Google Photos replacement [1][5].
- PhotoPrism — AI-powered tagging, WebDAV sync, face recognition, map view. More features, harder setup, freemium commercial licensing for advanced features [4][5].
- Ente Photos — end-to-end encrypted, self-hostable, mobile apps for iOS and Android, open-source. The choice if zero-knowledge encryption matters most.
- DigiKam — desktop application, not web-based. Exceptionally powerful for local photo management. 360 likes on AlternativeTo [5]. Not a self-hosted server; it’s a desktop tool.
- Piwigo — PHP-based, very mature, large plugin ecosystem. Old-school feel but highly stable.
- Lychee — lightweight PHP gallery. Simpler than ChronoFrame, less metadata-focused.
- QuMagie — only relevant if you own a QNAP NAS. QNAP’s proprietary photo management, $8–10/month subscription [2]. Lock-in with no migration path.
- Google Photos — the incumbent. Still the easiest experience. Still the data privacy trade-off you’re trying to escape.
For a non-technical founder or privacy-conscious photographer, the realistic shortlist is ChronoFrame vs Immich vs Ente Photos. Pick ChronoFrame if the map/EXIF focus and simpler setup (SQLite3, no separate DB) fits your use case. Pick Immich if you need mobile auto-backup and facial recognition. Pick Ente if encryption is the priority.
Bottom line
ChronoFrame is a focused, well-built photo gallery for people who treat their photo library as a geographic and metadata record, not just an album of pretty pictures. The EXIF pipeline, explore map, and Live Photo support aren’t features bolted on for a feature matrix — they’re the product’s actual design direction. The MIT license, SQLite3 backend, and straightforward Docker deployment make it one of the simpler self-hosted gallery options to get running.
The trade-offs are equally clear: no facial recognition, no mobile auto-backup app, an external Mapbox dependency for the best features, and a young community that hasn’t yet accumulated the troubleshooting depth of Immich or PhotoPrism. For a photographer looking to escape Google Photos’ location data sharing with a clean gallery that takes metadata seriously, ChronoFrame is a solid choice. For anyone who needs mobile auto-upload or AI-powered organization, look at Immich first.
If deployment is the blocker, that’s exactly what unsubbed.co’s parent studio upready.dev handles for clients — one-time setup fee, you own the infrastructure, no recurring bills to a cloud provider.
Sources
- AlternativeTo — PixelUnion (EU-based Immich-backed photo storage service, community reviews and alternatives context). https://alternativeto.net/software/pixelunion/about/
- AlternativeTo — QuMagie (QNAP’s AI photo management, $8–10/mo, listed ChronoFrame as alternative). https://alternativeto.net/software/qumagie/about/
- Track Awesome Selfhosted — awesome-selfhosted weekly updates (self-hosted software ecosystem context). https://www.trackawesomelist.com/awesome-selfhosted/awesome-selfhosted/week/
- AlternativeTo — PhotoPrism (4.6/5, 122 likes, 10 community reviews — competitor with AI features and installation pain feedback). https://alternativeto.net/software/photoprism/about/
- AlternativeTo — Geolocation tag listing (ChronoFrame listed: MIT, Self-Hosted/Docker, 10 likes, best alternatives Ente Photos and Immich, 20 alternatives). https://alternativeto.net/browse/all/?tag=geolocation
Primary sources:
- GitHub repository and README: https://github.com/hoshinosuzumi/chronoframe (1,696 stars, MIT license)
- Official website: https://chronoframe.bh8.ga
- Live demo: https://lens.bh8.ga
- Docker image (GHCR): https://github.com/HoshinoSuzumi/chronoframe/pkgs/container/chronoframe
Features
Integrations & APIs
- REST API
Replaces
Related Media & Streaming Tools
View all 334 →Immich
95KHigh-performance self-hosted photo and video management — automatic backup, ML-powered search, and a Google Photos-like experience on your own server.
Jellyfin
49KThe volunteer-built media solution that puts you in control of your media. Stream movies, shows, music, and photos to any device from your own server.
PhotoPrism
39KAI-Powered Photos App for the Decentralized Web. Tag and find pictures automatically without getting in your way.
Cobalt
39KSave what you love without ads, tracking, paywalls or other nonsense. Just paste the link and you're ready to rock.
qBittorrent
36KAn open-source software alternative to uTorrent. Feature-rich and runs on all major platforms.
SRS
29KSimple, high efficiency, realtime video server. Supports RTMP, WebRTC, HLS, HTTP-FLV, SRT, MPEG-DASH and GB28181.