Laravel photo library for your server or web hosting
Lychee is a web app for managing a photo library, written in PHP on Laravel with a Vue front end. It runs on a server or ordinary web hosting: you upload photos, sort them into nested albums and choose who can see each album. Original files are kept as they are, with optimized variants generated next to them.
Password-protected albums, per-account sharing and embeds
- Public albums can require a password, allow or block downloads, and either appear on the instance's public gallery page or stay off it.
- Sharing can also target specific accounts on the instance, with read-only or full access.
- Albums can be embedded in another website. Marking one as sensitive hides it behind an extra click.
- Photos come in by drag and drop, with large files sent in chunks, or from a URL or Dropbox.
php artisan lychee:sync /pathbatch-imports a folder that already sits on the server. - EXIF and IPTC metadata are extracted and displayed, and photos are rotated automatically from their EXIF orientation.
- Video files (MP4, WebM, MOV and AVI among others) sit alongside JPEG, PNG, GIF and WebP. Version 7.12.0 added JPEG XL and Google Motion Photos.
- Users sign in with a username and password, WebAuthn (security key or biometrics) or OAuth through an external provider. Version 7.12.0 added email login.
PHP 8.4 required, paid extras, v8 in the works
A manual install needs PHP 8.4 or newer. The guide also requires eighteen PHP extensions (bcmath, exif and gd among them), Apache or nginx, and a MySQL, MariaDB, PostgreSQL or SQLite database. Imagick, Exiftool and FFmpeg are optional; FFmpeg handles video thumbnails. The default Docker image runs FrankenPHP with Laravel Octane, and the docs recommend a dedicated worker service (LYCHEE_MODE=worker) for background jobs. The older nginx + PHP-FPM image is still published, marked deprecated.
Several features are locked to the Supporter Edition, at €5 a month. Library statistics, user groups and upload quotas, anonymous uploads, AES-encrypted links, watermarking and white labeling need a license key, obtained by sponsoring the project on GitHub. Yet the SE code is public, under the same MIT license, and one key covers as many instances as you run. There is no trial and no refund: the project advises starting with the free edition, which puts no cap on users, albums or uploads.
Photographers are the declared audience, and selling photos takes the Pro edition. The homepage calls Lychee "Made for Photographers, by Photographers", and the FAQ describes the free edition as "a great choice for personal use". The webshop module (per-album pricing, a basket, payment through Mollie, PayPal or offline) belongs to a Pro edition aimed at people who sell their pictures. The editions page gives no price for it.
Version 7.12.0 shipped on October 22, 2026, and v8 is on the way. It is the eighth release since September 1 and patches two PHP remote code execution flaws in the Docker image (CVE-2026-109618 and CVE-2026-109619). The documentation files face recognition under v8, while the editions page lists it in the free tier. Face recognition runs in a separate microservice built on FastAPI and DeepFace, and will be disabled by default "while it matures". NSFW classification, also slated for v8, is Supporter Edition only.
