A great looking and easy-to-use photo-management-system you can run on your server, to manage and share photos.

Last update: May 22, 2022

Lychee

A great looking and easy-to-use photo-management-system.

Since the 1st of April 2018 this project has moved to it's own Organisation (https://github.com/LycheeOrg) where people are able to submit their fixes to it. We, the Organisation owners, want to thank electerious (Tobias Reich) for the opportunity to make this project live on.

Lychee Lychee

Lychee is a free photo-management tool, which runs on your server or web-space. Installing is a matter of seconds. Upload, manage and share photos like from a native application. Lychee comes with everything you need and all your photos are stored securely. Read more on our website.

Installation

To run Lychee, everything you need is a web-server with PHP 5.5 or later and a MySQL-Database. Follow the instructions to install Lychee on your server. Installation »

How to use

You can use Lychee right after the installation. Here are some advanced features to get the most out of it.

Settings

Sign in and click the gear in the top left corner to change your settings. If you want to edit them manually: MySQL details are stored in data/config.php. Other options and hidden settings are stored directly in the database. Settings »

Update

Updating is as easy as it should be. Update »

Build

Lychee is ready to use, right out of the box. If you want to contribute and edit CSS or JS files, you need to rebuild Lychee. Build »

Keyboard Shortcuts

These shortcuts will help you to use Lychee even faster. Keyboard Shortcuts »

Dropbox import

In order to use the Dropbox import from your server, you need a valid drop-ins app key from their website. Lychee will ask you for this key, the first time you try to use the import. Want to change your code? Take a look at the settings of Lychee.

Twitter Cards

Lychee supports Twitter Cards and Open Graph for shared images (not albums). In order to use Twitter Cards you need to request an approval for your domain. Simply share an image with Lychee, copy its link and paste it in Twitters Card Validator.

Imagick

Lychee uses Imagick when installed on your server. In this case you will benefit from a faster processing of your uploads, better looking thumbnails and intermediate sized images for small screen devices. You can disable the usage of Imagick in the settings.

Docker

Browse the Docker Hub Registry for various automated Lychee-Docker builds. We recommend using lychee-docker by kdelfour.

Plugins and Extensions

The plugin-system of Lychee allows you to execute scripts when a certain action fires. Plugins are hooks, which are injected directly into Lychee. Plugin documentation »

It's also possible to build extensions upon Lychee. The way to do so isn't documented and can change every time. We recommend using the plugin-system, when possible.

Here's a list of all available Plugins and Extensions:

Name Description
lycheesync Sync Lychee with any directory containing photos More »
lycheeupload Upload photos to Lychee via SSH More »
Jekyll Liquid tag for Jekyll sites that allows embedding Lychee albums More »
lychee-redirect Redirect from an album-name to a Lychee-album More »
lychee-watermark Adds a second watermarked photo when uploading images More »
lychee-rss Creates a RSS-Feed out of your photos More »
lychee-FlashAir Import from a Toshiba FlashAir WiFi SD card More »
lychee-webroot Controls photos accessibility and keeps Lychee files hidden More »
lychee-create-medium Generate missing medium size photos More »

Troubleshooting

Take a look at the FAQ if you have problems. Discovered a bug? Please create an issue here on GitHub!

GitHub

https://github.com/electerious/Lychee
Comments
  • 1. Added support for selecting photos/albums individually

    Note that the commit is on top of the "Better highlighting of selected items", because it uses two functions that were introduced there. Apart from that, they are independent.

    Reviewed by hrniels at 2016-08-14 18:27
  • 2. Fix the position of contextMenu for button_add button for mobile device

    This pull request fixes the position of context menu for button_add on mobile device which should be shown on the top right like desktop version. The root cause is touchend event will return no pageX and pageY, and thus we need to capture pageX and pageY from orignalEvent.

    It is ok to show the context menu on the top left, but I think we should give the user least surprised. I am not sure if this change will have some side effects. Please help review if this change is ok.

    Before change: 2014-10-10 12 40 31

    After change: 2014-10-10 12 43 57

    By the way, the wierd white shadow on the context menu can only be reproduced on my Nexus 4 with latest Chrome. It seems like the "border-radius and box-shadow" make this, because when I disable one of them, the white shadow is gone. But I have tried many devices:

    • iPod touch 5 with Safari and Chrome
    • Nexus 5 with Chrome
    • LG G Tablet 8.3 with Chrome

    The issue is not happened.

    So I am not sure if this is only happened on specific devices and don't know what's the root cause. Maybe we can track this issue if other people also have the same issue.

    Reviewed by powentan at 2014-10-10 13:30
  • 3. Various fixes for php 32bits and long albums/photos ids

    (love your project btw) The ids have to be integers as this is what the javascript part expect. (When creating an album for instance.)

    edit: Just realized it breaks staring photos. "0"s & "1"s are passed through json to javascript. I'll look into it soon.

    edit2: On an other topic, using "prerender" instead of "prefetch" decrease considerably the time needed to show the next/previous photo.

    Reviewed by karlak at 2016-03-16 15:18
  • 4. Table prefix

    This was a lot of work, but finally I got it. When installing you can now choose an optional table prefix for your lychee installation.

    This fixes issue #196

    Reviewed by cternes at 2014-08-24 19:59
  • 5. Docker Integration

    This pull request allows users to deploy Lychee through docker using the codebase itself, rather than some third party wrapper such as kdelfour/lychee-docker.

    This youtube video demonstrates the code in action.

    Resons for Development

    It looks like the Lychee used to support building through docker, but then using kdelfour/lychee-docker became the official way, but the problem with this is that the third party wrapper may get out of sync with the codebase. For example, if a new branch needs a new package, then its easier for that branch to just edit the Dockerfile here for when it is ready to be merged into master.

    Also, it looks like the kdelfour image is not being kept up-to-date. The last time an image was pushed was 8 months ago.

    Another factor is that the kdelfour image uses php 5.5 instead of this integration which uses 5.6. Php 5.5 isn't supported anymore, and 5.6 only has security updates. It would be good to upgrade to 7.0 or 7.1 which this should make somewhat easier (ties into my first point).

    Lastly, the kdelfour image works based on using an internal MySQL server. As somebody else has pointed out, it's much better practice to keep the database outside the application container, either by using another container, or by just running your own MySQL server. In this case you can do either, and just pass the details in using environment variables.

    Reviewed by programster at 2017-02-19 14:36
  • 6. Allowed Albums with only Sub albums to show a thumbnail

    This allows an album with no pictures that contains subalbums with pictures to still have a thumbnail.

    Changes

    1. Album.php functions getSubAlbums and addSubAlbumIds to static to allow better access from Albums.php.
    2. The thumbnail query has been changed to get the output of AddSubAlbumIds and use it in an "IN" SQL function

    Result

    In a structure as follows:

    • Main Album
      • Sub1
        • Sub2
          • Pic2.jpg
        • Pic1.jpg

    Main Album will have Pic1 and Pic2 in its thumbs list as will Sub1. Sub2 will only have Pic2.

    Reviewed by patmagauran at 2016-09-06 19:45
  • 7. A couple of features and bug fixes

    Hello there, I have been testing out Lychee fixing bugs and adding minor features in progress. Here is a list of the changes I have introduced so far.

    • Faster photo browsing thanks to caching.
    • Default sort order of albums is changed from new to old.
    • Preserves scroll position when changing from albums to album and vice versa
    • Better Unicode support for values read from the database

    Hopefully these are of use to you. If you have any questions, do not hesitate to ask.

    Cheers, Roman

    Reviewed by r0x0r at 2014-09-15 20:22
  • 8. Added feature to move files before processing in Import.php for server

    This will move folders then files for a server import job to the LYCHEE_DATA/HASH/ folder. File processing will then be operated on that specified HASH dir.

    Reviewed by djdallmann at 2014-05-04 14:28
  • 9. Add video support

    This PR adds video support, see electerious/Lychee#63

    It uses MediaElement.js to provide Cross-Browser video support with a Flash Fallback and currently allows mp4, flv, webm and ogv.

    To Do:

    • [x] Support WMV (video/x-ms-wmv)
    • [x] Allow upload of unsupported video types for direct download (avi, mov, mkv, ...)
    • [x] Use AddType for supported video types in .htaccess to set correct headers in Apache
    • [ ] Add/Set Thumbnail for video
    • [ ] Add default Thumbnail (Maybe something using the Iconic "video" Icon)
    • [ ] Upload from browser (only Import from Server at the moment)
    • [ ] Build MediaElement.js JavaScript and CSS with Gulp into dist/* files (I added them to paths.main but it didn't work)
    • [ ] Add Database Schema change
    • [ ] Fix "janky" CSS transitions on switch from default to .full
    • [ ] Change Actions

    Folder / Database Changes:

    • Adds uploads/video folder and corresponding constants
    • Adds media_type VARCHAR(10) DEFAULT 'photo' to lychee_photos
    Reviewed by rhurling at 2015-05-06 11:22
  • 10. Docker Improvements

    This PR includes all of the remaining improvements for Docker requested in #237. This includes:

    • Install ImageMagick
      • ImageMagick is now installed during the RUN command for installing dependences. I wasn't sure of a way to test and see if Lychee was actually using it, but I'm assuming that if it's installed and enabled in Lychee's settings it will work.
    • Updated values in php.ini
      • A RUN command now configures settings in php.ini to the recommended values.
    • Use data volumes
      • I figured out everything that was necessary to launch the application and maintain persistent data using volumes (see below).

    As requested, here are the instructions for installing Lychee using Docker. Feel free to include any parts of this throughout Lychee's documentation where appropriate.

    Installation Using Docker

    Note: pre-installation of the latest version of Git and Docker is required to deploy Lychee using Docker.

    First, you should clone the latest version of Lychee and build it using the Dockerfile included in the repository.

    git clone https://github.com/electerious/Lychee.git
    cd Lychee
    sudo docker build -t lychee .
    

    Once this is finished, remember to set the proper permissions on the uploads and data directories so the container can mount these directories as volumes.

    chmod -R 777 uploads/ data/
    

    Now you can use the docker run command to run your Lychee container.

    sudo docker run -v /var/lib/mysql --name lychee_data \
                    -v $(pwd)/data:/app/data \
                    -v $(pwd)/uploads:/app/uploads \
                    -i -t -d -p 8000:80 lychee
    

    Browse to localhost:8000 (the port can be specified via the -p flag) and you will see Lychee's configuration page. The default database username is root with no password (you can manage MySQL users by running docker exec -i -t <container_id> mysql). After submitting your database configuration, you can sign in and create a new username and password and start using Lychee.

    Note: if you are deploying on a server, you might want to forward your container to port 80 instead of 8000 so it'll be publicly accessible.

    Managing Data

    Running the container with the above options mounts three Docker data volumes. The first is a named data volume used to store the MySQL database. The last two will mount the /data and /uploads from the container to your host Lychee directory. If you would like to upgrade or redeploy Lychee while preserving your data, you can kill the container and the volumes will persist. Just rebuild your new container and run it using a similar command:

    sudo docker run --volumes-from lychee_data \
                    -v $(pwd)/data:/app/data \
                    -v $(pwd)/uploads:/app/uploads \
                    -i -t -d -p 8000:80 lychee
    
    Reviewed by renfredxh at 2014-10-26 20:08
  • 11. Better EXIF extraction

    Small rewrite of EXIF extraction and a few improvements.

    • No need to create temp variable to check if array element exists
    • No error suppression #515
    • Import photo tags (works with Lightroom, maybe also with others softwares) #514
    • Converting GPS coordinates to float number of degrees #494

    Tested with a few photos, without bugs.

    Reviewed by qligier at 2016-04-17 20:37
Related tags
Manage your photos with Piwigo, a full featured open source photo gallery application for the web
Manage your photos with Piwigo, a full featured open source photo gallery application for the web

Manage your photos with Piwigo, a full featured open source photo gallery application for the web. Star us on Github! More than 200 plugins and themes available. Join us and contribute!

Apr 14, 2022
Another web based photo gallery
Another web based photo gallery

Phyxo Simply share your images. Requirements This project use severals librairies that need at least PHP 7.3.0 This project uses a database and suppor

Feb 24, 2022
Fetch instagram photos without the need for app aproval

Fetch instagram photos without the need for app aproval. This plugin will download the photos and/or video thumbnails to local storage. All media will be stored in a json file.

Apr 11, 2022
Alternative image provider for fakerphp using picsum.photos

Fakerphp Picsum Images Introduction Alternative image provider for fakerphp using picsum.photos This package has been forked from mmo/faker-images for

Mar 28, 2022
A Sharex IMG uploader that runs with PHP | Use a hosting site if you're a beginner use 000webhost
A Sharex IMG uploader that runs with PHP | Use a hosting site if you're a beginner use 000webhost

Sharex-Img-Uploader A Sharex IMG uploader that runs with PHP | Use a hosting site if you're a beginner use 000webhost Setting up SXCU In YOUR_DOMAIN_U

Dec 21, 2021
With the help of QR code technologies, digital entry passes can be created, which a user can show at the entry point to pass the door.
With the help of QR code technologies, digital entry passes can be created, which a user can show at the entry point to pass the door.

Navratri_Entry With the help of QR code technologies, digital entry passes can be created, which a user can show at the entry point to pass the door.

Nov 1, 2021
ImageWorkshop is a PHP5.3+ library that helps you to manage images based on GD library

================================ ImageWorkshop class ================================ Summary and features Really flexible and easy-to-use PHP class t

Apr 4, 2022
An easy-to-use PHP QrCode generator with first-party support for Laravel.
An easy-to-use PHP QrCode generator with first-party support for Laravel.

An easy-to-use PHP QrCode generator with first-party support for Laravel.

May 23, 2022
PHPExif is a library which gives you easy access to the EXIF meta-data of an image

PHPExif v0.6.4 PHPExif is a library which gives you easy access to the EXIF meta-data of an image. PHPExif serves as a wrapper around some native or C

Apr 29, 2022
The image server plugin allows you to add responsive images via config without extra elements

Grav image server plugin adds picture tag with loading, responsive, high density images

Mar 28, 2022
⚡ Dynamically generated, customizable SVG that gives the appearance of typing and deleting text. Typing SVGs can be used as a bio on your Github profile readme or repository.
⚡ Dynamically generated, customizable SVG that gives the appearance of typing and deleting text. Typing SVGs can be used as a bio on your Github profile readme or repository.

⚡ Dynamically generated, customizable SVG that gives the appearance of typing and deleting text. Typing SVGs can be used as a bio on your Github profile readme or repository.

May 20, 2022
Image optimization / compression library. This library is able to optimize png, jpg and gif files in very easy and handy way. It uses optipng, pngquant, pngcrush, pngout, gifsicle, jpegoptim and jpegtran tools.

Image Optimizer This library is handy and very easy to use optimizer for image files. It uses optipng, pngquant, jpegoptim, svgo and few more librarie

May 17, 2022
An easy and elegant way to generate gravatars 🖼

pH2Gravatar The simplest Gravatar PHP package An easy and elegant way to generate gravatar profile photos from email addresses ?? ⛏ Requirements PHP 7

Mar 27, 2022
Wonderfully easy on-demand image manipulation library with an HTTP based API.
Wonderfully easy on-demand image manipulation library with an HTTP based API.

Glide Glide is a wonderfully easy on-demand image manipulation library written in PHP. Its straightforward API is exposed via HTTP, similar to cloud i

May 16, 2022
Picasso is a Laravel Image Management and Optimization Package

Picasso is a Laravel Image Management and Optimization Package. Define image dimensions and options, store uploaded image in multiple dimensions with or without a watermark and retrieve optimized images on your website when needed.

Apr 1, 2022
🤹‍♀️Very simple to use Gravatar implementation for Laravel
🤹‍♀️Very simple to use Gravatar implementation for Laravel

Very simple to use Gravatar implementation for Laravel. Install, Include the Facade and then generate, simple! Installation You can install the packag

May 7, 2022
The Tinify API allows you to compress and optimize WebP, JPEG and PNG images.

The Tinify API allows you to compress and optimize WebP, JPEG and PNG images. It is designed as a REST service. The client libraries in various languages make it very easy to interact with the Tinify API.

May 13, 2022
This is a class of php QR Code, This library helps you generate QR codes in a jiffy.

This is a class of php QR Code, This library helps you generate QR codes in a jiffy.

Mar 23, 2022
👤 Add your own default WordPress avatar.

Custom User Avatar WordPress currently only allows you to use custom avatars that are uploaded through Gravatar. Custom User Avatar enables you to use

Jan 24, 2022