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

Overview

@LycheeOrg

GitHub Release PHP 7.4 PHP 8.0 MIT License
Build Status Code Coverage CII Best Practices Summary Quality Gate Status
Website Documentation Changelog Front end repository Docker repository Gitter

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

The Lychee project was moved to LycheeOrg on the 1st of April 2018. We would like to thank electerious (Tobias Reich) for creating Lychee and for giving us the opportunity to make this project live on.

Upgrade from v3 is straight forward. Upgrade. »

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 7.4 or later and a MySQL-Database. Follow the instructions to install Lychee on your server. This version of Lychee is built on the Laravel framework. To install:

  1. Clone this repo to your server and set the web root to lychee/public
  2. Run composer install --no-dev to install dependencies
  3. Copy .env.example as .env and edit it to match your parameters
  4. Generate your secret key with php artisan key:generate
  5. Migrate your database with php artisan migrate to create a new database or migrate an existing Lychee installation to the latest framework.

See detailed instructions on the Installation page of our documentation.

Docker

Alternatively, an official Docker image can be found at LycheeOrg/Lychee-Docker or on Docker Hub as lycheeorg/lychee.

Update

Updating is as easy as it should be. Update »

Settings

Sign in and click the gear in the top left corner to change your settings. Settings »

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-front. Build »

Advanced Features

Lychee is ready to use straight after installation, but some features require a little more configuration.

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.

Troubleshooting

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

Comments
  • Some tag albums do not load size_variants for images

    Some tag albums do not load size_variants for images

    Detailed description of the problem [REQUIRED]

    I have a tag album that seems to be getting null for all size_variants for all child images. I confirmed the size_variants are in db, and images load in their normal albums. This leads to an empty album being displayed. Not all tag albums are effected, and I am not able to reproduce this behavior in a new test tag album.

    Sample of json response:

    {
       "id":"MQTPtB8HTwEjaZqGyAsQNuzs",
       "show_tags":[
          "Alex"
       ],
       "max_taken_at":null,
       "min_taken_at":null,
       "thumb":{
          "id":"kdQAigqTbenfget2WUJkk5xW",
          "type":"image\/jpeg",
          "thumb":"uploads\/thumb\/a7ccb66be0baead7b7b02e6d264ecede.jpeg",
          "thumb2x":"uploads\/thumb\/[email protected]"
       },
       "photos":[
          {
             "id":"GPjbt0B3KBKQm_iCStmEWZXb",
             "created_at":"2022-05-13T18:13:13.113101-07:00",
             "updated_at":"2022-05-13T18:13:59.488932-07:00",
             "album_id":"NpvFgSmSs1fqocFavGATgq_X",
             "title":"2022-05-13-0034",
             "description":"Red Cliffs, NV",
             "tags":[
                "Alex"
             ],
             "license":"CC-BY-NC-ND-4.0",
             "is_public":0,
             "is_starred":false,
             "iso":null,
             "make":"Nikon",
             "model":"LS-4000",
             "lens":null,
             "aperture":null,
             "shutter":null,
             "focal":null,
             "latitude":null,
             "longitude":null,
             "altitude":null,
             "img_direction":null,
             "location":null,
             "taken_at":"2022-05-01T12:00:00.000000-07:00",
             "taken_at_orig_tz":"America\/Los_Angeles",
             "type":"image\/jpeg",
             "filesize":0,
             "checksum":"a3b4f128860cb566927cd699e7ef19b0d6c15537",
             "original_checksum":"a3b4f128860cb566927cd699e7ef19b0d6c15537",
             "live_photo_content_id":null,
             "live_photo_checksum":null,
             "live_photo_url":null,
             "is_downloadable":true,
             "is_share_button_visible":true,
             "size_variants":{
                "original":null,
                "medium2x":null,
                "medium":null,
                "small2x":null,
                "small":null,
                "thumb2x":null,
                "thumb":null
             },
             "next_photo_id":"656pjb4jIMx_gstz3jS32wkt",
             "previous_photo_id":"Ql4Ef8AQPE-G83yz-lRivhNq"
          },
          {
             "id":"656pjb4jIMx_gstz3jS32wkt",
             "created_at":"2022-05-13T18:13:07.534035-07:00",
             "updated_at":"2022-05-13T18:13:59.452552-07:00",
             "album_id":"NpvFgSmSs1fqocFavGATgq_X",
             "title":"2022-05-13-0031",
             "description":"Red Cliffs, NV",
             "tags":[
                "Alex"
             ],
             "license":"CC-BY-NC-ND-4.0",
             "is_public":0,
             "is_starred":false,
             "iso":null,
             "make":"Nikon",
             "model":"LS-4000",
             "lens":null,
             "aperture":null,
             "shutter":null,
             "focal":null,
             "latitude":null,
             "longitude":null,
             "altitude":null,
             "img_direction":null,
             "location":null,
             "taken_at":"2022-05-01T12:00:00.000000-07:00",
             "taken_at_orig_tz":"America\/Los_Angeles",
             "type":"image\/jpeg",
             "filesize":0,
             "checksum":"4bf5ec7a2678ca6fb386705e932900457174a389",
             "original_checksum":"4bf5ec7a2678ca6fb386705e932900457174a389",
             "live_photo_content_id":null,
             "live_photo_checksum":null,
             "live_photo_url":null,
             "is_downloadable":true,
             "is_share_button_visible":true,
             "size_variants":{
                "original":null,
                "medium2x":null,
                "medium":null,
                "small2x":null,
                "small":null,
                "thumb2x":null,
                "thumb":null
             },
             "previous_photo_id":"GPjbt0B3KBKQm_iCStmEWZXb",
             "next_photo_id":"CcjCgUHwqcO7K8affrREgdCC"
          },
    

    Console error msg: Uncaught TypeError: _photo.size_variants.original is null

    In DB: MariaDB [lychee]> select * from size_variants where photo_id='GPjbt0B3KBKQm_iCStmEWZXb'; +-------+--------------------------+------+-------------------------------------------------+-------+--------+----------+ | id | photo_id | type | short_path | width | height | filesize | +-------+--------------------------+------+-------------------------------------------------+-------+--------+----------+ | 63697 | GPjbt0B3KBKQm_iCStmEWZXb | 0 | big/a3b4f128860cb566927cd699e7ef19b0.jpeg | 5632 | 3688 | 7582218 | | 63705 | GPjbt0B3KBKQm_iCStmEWZXb | 1 | medium/[email protected] | 3299 | 2160 | 2253539 | | 63704 | GPjbt0B3KBKQm_iCStmEWZXb | 2 | medium/a3b4f128860cb566927cd699e7ef19b0.jpeg | 1649 | 1080 | 651860 | | 63703 | GPjbt0B3KBKQm_iCStmEWZXb | 3 | small/[email protected] | 1100 | 720 | 316462 | | 63701 | GPjbt0B3KBKQm_iCStmEWZXb | 4 | small/a3b4f128860cb566927cd699e7ef19b0.jpeg | 550 | 360 | 90236 | | 63699 | GPjbt0B3KBKQm_iCStmEWZXb | 5 | thumb/[email protected] | 400 | 400 | 65902 | | 63698 | GPjbt0B3KBKQm_iCStmEWZXb | 6 | thumb/a3b4f128860cb566927cd699e7ef19b0.jpeg | 200 | 200 | 20629 | +-------+--------------------------+------+-------------------------------------------------+-------+--------+----------+

    Steps to reproduce the issue

    Steps to reproduce the behavior: I am not sure what triggered this condition or what it is choking on.

    Screenshots If applicable, add screenshots to help explain your problem.

    Output of the diagnostics [REQUIRED]

    Diagnostics
    -----------
    Warning: Dropbox import not working. dropbox_key is empty.
    Warning: zend.assertions is disabled although Lychee is in debug mode. For easier debugging code generation for assertions should be enabled.
    
    System Information
    ------------------
    Lychee Version (git):            master (2fdd6bc) --  - Up to date (13 seconds ago).
    DB Version:                      4.5.1
    
    composer install:                dev
    APP_ENV:                         production
    APP_DEBUG:                       true
    
    System:                          Linux
    PHP Version:                     8.1
    PHP User agent:                  Lychee/4 (https://lycheeorg.github.io/)
    Timezone:                        America/Los_Angeles
    Max uploaded file size:          500M
    Max post size:                   500M
    Max execution time:              200
    MySQL Version:                   10.6.7-MariaDB-2ubuntu1
    
    Imagick:                         1
    Imagick Active:                  1
    Imagick Version:                 1691
    GD Version:                      2.3.0
    
    Config Information
    ------------------
    version:                         040501
    check_for_updates:               1
    sorting_photos_col:              created_at
    sorting_photos_order:            DESC
    sorting_albums_col:              max_taken_at
    sorting_albums_order:            DESC
    imagick:                         1
    skip_duplicates:                 1
    small_max_width:                 0
    small_max_height:                360
    medium_max_width:                1920
    medium_max_height:               1080
    lang:                            en
    layout:                          1
    image_overlay_type:              none
    default_license:                 CC-BY-NC-ND-4.0
    compression_quality:             90
    full_photo:                      1
    delete_imported:                 1
    Mod_Frame:                       1
    Mod_Frame_refresh:               30
    thumb_2x:                        1
    small_2x:                        1
    medium_2x:                       1
    landing_page_enable:             1
    landing_owner:                   Vincent Juliano
    landing_title:                   Life on 35mm
    landing_subtitle:                Click top right to continue.  Next page top left to login
    landing_facebook:                
    landing_flickr:                  
    landing_twitter:                 
    landing_instagram:               
    landing_youtube:                 
    landing_background:              /uploads/medium/3d4bf4e35e5ea06853d7983c88efb6a2.jpg
    site_title:                      Vince Juliano's Photo Gallery
    site_copyright_enable:           1
    site_copyright_begin:            2021
    site_copyright_end:              2022
    additional_footer_text:          "Alex's Photos" copyright Alex Panicacci 2022
    display_social_in_gallery:       0
    public_search:                   0
    SL_enable:                       0
    SL_for_admin:                    0
    public_recent:                   0
    recent_age:                      60
    public_starred:                  0
    downloadable:                    1
    photos_wraparound:               1
    map_display:                     1
    zip64:                           1
    map_display_public:              1
    map_provider:                    Wikimedia
    force_32bit_ids:                 0
    map_include_subalbums:           1
    update_check_every_days:         3
    has_exiftool:                    1
    share_button_visible:            1
    import_via_symlink:              0
    has_ffmpeg:                      1
    location_decoding:               1
    location_decoding_timeout:       30
    location_show:                   1
    location_show_public:            1
    rss_enable:                      0
    rss_recent_days:                 7
    rss_max_items:                   100
    prefer_available_xmp_metadata:   0
    editor_enabled:                  1
    lossless_optimization:           1
    swipe_tolerance_x:               150
    swipe_tolerance_y:               250
    local_takestamp_video_formats:   .avi|.mov
    log_max_num_line:                10000
    unlock_password_photos_with_url_param: 0
    nsfw_visible:                    0
    nsfw_blur:                       0
    nsfw_warning:                    0
    nsfw_warning_admin:              0
    map_display_direction:           1
    album_subtitle_type:             oldstyle
    upload_processing_limit:         4
    public_photos_hidden:            1
    new_photos_notification:         1
    legacy_id_redirection:           1
    

    Browser and system

    Firefox 100.0 Mac Os 12.3.1

    bug upstream 
    opened by jln646v 110
  • Update breaks uploading

    Update breaks uploading

    Detailed description of the problem [REQUIRED]

    After updating uploading a new image gives an error. There is no thumbnail created, the space for the photo in the album is black. However if you click on this space, the uploaded image is shown. So somehow the thumbnail is not created.

    Steps to reproduce the issue

    Steps to reproduce the behavior:

    1. Go to an album
    2. Click on the plus and upload an image from the local machine.
    3. Error in webserver log: Sun 16 Jan 2022 10:03:57 +0100|CGI returned 500 Internal Error

    Screenshots image

    image

    Output of the diagnostics [REQUIRED]

    sudo -u www php artisan lychee:diagnostics

    Diagnostics

    Info: Latest version of PHP is 8.1

    System Information

    Lychee Version (git): master (a7de020) - Up to date (2 days ago). DB Version: 4.4.0

    composer install: --no-dev APP_ENV: local APP_DEBUG: false

    System: FreeBSD PHP Version: 8 PHP User agent: Lychee/4 (https://lycheeorg.github.io/) Max uploaded file size: 100M Max post size: 100M Max execution time: 0 MySQL Version: 8.0.27

    Imagick: 1 Imagick Active: 1 Imagick Version: 1692 GD Version: 2.3.1

    Config Information

    version: 040400 check_for_updates: 1 sorting_Photos_col: taken_at sorting_Photos_order: ASC sorting_Albums_col: title sorting_Albums_order: DESC imagick: 1 skip_duplicates: 0 small_max_width: 0 small_max_height: 360 medium_max_width: 1920 medium_max_height: 1080 lang: en layout: 1 image_overlay_type: date default_license: none compression_quality: 90 full_photo: 1 delete_imported: 0 Mod_Frame: 1 Mod_Frame_refresh: 30 thumb_2x: 1 small_2x: 1 medium_2x: 1 landing_page_enable: 1 landing_owner: Marc landing_title: Marc landing_subtitle:
    landing_facebook:
    landing_flickr:
    landing_twitter:
    landing_instagram:
    landing_youtube:
    landing_background: dist/finland.jpg site_title: fotos site_copyright_enable: 1 site_copyright_begin: 1984 site_copyright_end: 2021 additional_footer_text:
    display_social_in_gallery: 0 public_search: 0 SL_enable: 0 SL_for_admin: 0 public_recent: 0 recent_age: 1 public_starred: 0 downloadable: 0 photos_wraparound: 1 map_display: 0 zip64: 1 map_display_public: 0 map_provider: OpenStreetMap.org force_32bit_ids: 0 map_include_subalbums: 0 update_check_every_days: 3 has_exiftool: 1 share_button_visible: 0 import_via_symlink: 0 has_ffmpeg: 0 location_decoding: 0 location_decoding_timeout: 30 location_show: 0 location_show_public: 0 rss_enable: 0 rss_recent_days: 7 rss_max_items: 100 prefer_available_xmp_metadata: 0 editor_enabled: 1 lossless_optimization: 0 swipe_tolerance_x: 150 swipe_tolerance_y: 250 local_takestamp_video_formats: .avi|.mov log_max_num_line: 1000 unlock_password_photos_with_url_param: 0 nsfw_visible: 1 nsfw_blur: 0 nsfw_warning: 0 nsfw_warning_admin: 0 map_display_direction: 1 album_subtitle_type: oldstyle upload_processing_limit: 4 public_photos_hidden: 1 new_photos_notification: 0

    Browser and system

    Browser: Firefox 91.0.1 Server: FreeBSD 13.0

    bug 
    opened by oblomow 65
  • Missing thumbs on map, cover on albums and Show nothing in some albums (other albums are normal)

    Missing thumbs on map, cover on albums and Show nothing in some albums (other albums are normal)

    Detailed description of the problem [REQUIRED]

    Issue 1: Missing thumbs on map. Right click on the thumb and click show picture in new tab, it showed "404 not found", and the URL is http://x.x.x.x/null.

    Issue 2: Thumbs of album covers are sometimes missing and sometimes normal. After manually specifying a photo as the cover, the cover thumb can be displayed all the time.

    Issue 3: Nothing in some albums, but other albums are normal.

    Issue 4: Sometimes I got "Server error or API not found" error during importing photos from server, or just during I visist the website. It will disappear after a webpage reloading.

    My thoughts: I'm wondering if it is because I uploaded too many photos. The album mentioned in issue 2 has about 1150 photos. And there are about 6500 photos in the whole server. I remember the thumbs on map were normally showing on the day before yesterday. I only uploaded 100 photos at that time. Yesterday I reinstall the server and then import all of my photos. So I don't know if it's the reason. Another possibility about issue 1: Because I'm using TrueNAS, I mounted extenal strorage to these paths:

    • ../uploads/import
    • ../uploads/big
    • ../uploads/medium
    • ../uploads/small
    • ../uploads/raw
    • ../uploads/thumbs

    I don't know if thumbs on map are stored in ../uploads/thumbs, or somewhere else.

    Steps to reproduce the issue

    Steps to reproduce the behavior: Issue 1: Click on map. Issue 2: Just visit Lychee. Issue 3: Just open an album. Issue 4: Click "import from server" or just switch albums or click on settings, logs and so on.

    Screenshots Issue 1: eb162bbae44d3f96d5e83137a884593 image

    Issue 2: Missing: 1223b05b76d6ed5f2978a2bc56df49d

    Normal after reloading webpage several times: a9483b632517a13e4f4682dcd2e2561

    Issue 3: Problematic album: At first a blue process line showed on the top. image

    Then an video album with blank thumb appeared, then disappeard very soon (about 0.1s). 8061a1e8d57107518e1952be155dd14

    Then nothing here. ff7050b776c4854f9b60e97e9e12ed9

    Normal albums: image

    Issue 4: Don't have chance to screenshot yet.

    Output of the diagnostics [REQUIRED]

    Diagnostics
    -------
    Warning: Dropbox import not working. dropbox_key is empty.
    Info: Latest version of PHP is 8.1
    
    
    
    System Information
    --------------
    Lychee Version (git):            master (e150930) - Data not in Cache
    DB Version:                      4.5.0
    
    composer install:                --no-dev
    APP_ENV:                         production
    APP_DEBUG:                       false
    
    System:                          FreeBSD
    PHP Version:                     8
    PHP User agent:                  Lychee/4 (https://lycheeorg.github.io/)
    Timezone:                        Asia/Shanghai
    Max uploaded file size:          10240M
    Max post size:                   10240M
    Max execution time:              300
    MySQL Version:                   10.4.24-MariaDB
    
    Imagick:                         1
    Imagick Active:                  1
    Imagick Version:                 1692
    GD Version:                      2.3.1
    

    Browser and system

    Microsoft Edge 99.0.1150.55 on Windows 10

    bug 
    opened by geeklihui 62
  • Updating breaks Lychee

    Updating breaks Lychee

    Detailed description of the problem

    Updating breaks Lychee. ( thank $deity for backups and databasedumps)

    Steps to reproduce the issue

    Steps to reproduce the behavior:

    1. log on to (working) Lychee
    2. Click on 'update'
    3. After updating there is an error about missing admin in the database. please run: php artisan lychee:reset_admin
    4. Error page:database out of date.

    Screenshots If applicable, add screenshots to help explain your problem.

    Output of the diagnostics

    Diagnostics

    Info: Latest version of PHP is 8.1

    System Information

    Lychee Version (git): master (a7de020) - Up to date (13 hours ago). DB Version: 4.4.0

    composer install: --no-dev APP_ENV: local APP_DEBUG: false

    System: FreeBSD PHP Version: 8 PHP User agent: Lychee/4 (https://lycheeorg.github.io/) Max uploaded file size: 100M Max post size: 100M Max execution time: 0 MySQL Version: 8.0.27

    Imagick: 1 Imagick Active: 1 Imagick Version: 1692 GD Version: 2.3.1

    Config Information

    version: 040400 check_for_updates: 1 sorting_Photos_col: taken_at sorting_Photos_order: ASC sorting_Albums_col: title sorting_Albums_order: DESC imagick: 1 skip_duplicates: 0 small_max_width: 0 small_max_height: 360 medium_max_width: 1920 medium_max_height: 1080 lang: en layout: 1 image_overlay_type: date default_license: none compression_quality: 90 full_photo: 1 delete_imported: 0 Mod_Frame: 1 Mod_Frame_refresh: 30 thumb_2x: 1 small_2x: 1 medium_2x: 1 landing_page_enable: 1 landing_owner: Marc landing_title: Marc landing_subtitle: Why stop now? landing_facebook: landing_flickr: landing_twitter: landing_instagram: landing_youtube: landing_background: dist/finland.jpg site_title: fotos site_copyright_enable: 1 site_copyright_begin: 1984 site_copyright_end: 2021 additional_footer_text:
    display_social_in_gallery: 0 public_search: 0 SL_enable: 0 SL_for_admin: 0 public_recent: 0 recent_age: 1 public_starred: 0 downloadable: 0 photos_wraparound: 1 map_display: 0 zip64: 1 map_display_public: 0 map_provider: OpenStreetMap.org force_32bit_ids: 0 map_include_subalbums: 0 update_check_every_days: 3 has_exiftool: 1 share_button_visible: 0 import_via_symlink: 0 has_ffmpeg: 0 location_decoding: 0 location_decoding_timeout: 30 location_show: 0 location_show_public: 0 rss_enable: 0 rss_recent_days: 7 rss_max_items: 100 prefer_available_xmp_metadata: 0 editor_enabled: 1 lossless_optimization: 0 swipe_tolerance_x: 150 swipe_tolerance_y: 250 local_takestamp_video_formats: .avi|.mov log_max_num_line: 1000 unlock_password_photos_with_url_param: 0 nsfw_visible: 1 nsfw_blur: 0 nsfw_warning: 0 nsfw_warning_admin: 0 map_display_direction: 1 album_subtitle_type: oldstyle upload_processing_limit: 4 public_photos_hidden: 1 new_photos_notification: 0

    Browser and system

    Browser: Firefox 96.0

    opened by oblomow 58
  • Albums::get times out on big gallery

    Albums::get times out on big gallery

    Albums::get (and thus the main gallery view) times out when there are a lot of albums and/or photos.

    I started uploading a lot of older albums to Lychee recently, and now I can no longer see the album list when logged in. When not logged in, the gallery does load quickly (but shows no albums, since all are private still).

    The problematic gallery has 232 albums (nested a few levels deep) with 8701 photographs in total.

    The failing URL is /api/Albums::get, which returns 500. The error log says:

    PHP Fatal error:  Maximum execution time of 30 seconds exceeded in /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Foundation/Application.php on line 753
    PHP Stack trace:
    PHP   1. {main}() /Lychee-Laravel/public/index.php:0
    PHP   2. App\Http\Kernel->handle() /Lychee-Laravel/public/index.php:53
    PHP   3. App\Http\Kernel->sendRequestThroughRouter() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:116
    PHP   4. Illuminate\Routing\Pipeline->then() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:151
    PHP   5. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:47-59}() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:104
    PHP   6. Illuminate\Routing\Pipeline->Illuminate\Pipeline\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:140-169}() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53
    PHP   7. Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163
    PHP   8. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:47-59}() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php:62
    PHP   9. Illuminate\Routing\Pipeline->Illuminate\Pipeline\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:140-169}() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53
    PHP  10. Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163
    PHP  11. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:47-59}() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php:27
    PHP  12. Illuminate\Routing\Pipeline->Illuminate\Pipeline\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:140-169}() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53
    PHP  13. App\Http\Middleware\TrimStrings->handle() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163
    PHP  14. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:47-59}() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:21
    PHP  15. Illuminate\Routing\Pipeline->Illuminate\Pipeline\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:140-169}() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53
    PHP  16. Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull->handle() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163
    PHP  17. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:47-59}() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:21
    PHP  18. Illuminate\Routing\Pipeline->Illuminate\Pipeline\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:140-169}() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53
    PHP  19. App\Http\Middleware\TrustProxies->handle() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163
    PHP  20. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:47-59}() /Lychee-Laravel/vendor/fideloper/proxy/src/TrustProxies.php:57
    PHP  21. Illuminate\Routing\Pipeline->Illuminate\Pipeline\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:140-169}() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53
    PHP  22. Bepsvpt\SecureHeaders\SecureHeadersMiddleware->handle() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163
    PHP  23. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:28-36}() /Lychee-Laravel/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php:21
    PHP  24. App\Http\Kernel->Illuminate\Foundation\Http\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:173-177}() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:30
    PHP  25. Illuminate\Routing\Router->dispatch() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:176
    PHP  26. Illuminate\Routing\Router->dispatchToRoute() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Router.php:612
    PHP  27. Illuminate\Routing\Router->runRoute() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Router.php:623
    PHP  28. Illuminate\Routing\Router->runRouteWithinStack() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Router.php:657
    PHP  29. Illuminate\Routing\Pipeline->then() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Router.php:682
    PHP  30. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:47-59}() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:104
    PHP  31. Illuminate\Routing\Pipeline->Illuminate\Pipeline\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:140-169}() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53
    PHP  32. App\Http\Middleware\EncryptCookies->handle() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163
    PHP  33. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:47-59}() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php:66
    PHP  34. Illuminate\Routing\Pipeline->Illuminate\Pipeline\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:140-169}() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53
    PHP  35. Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163
    PHP  36. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:47-59}() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php:37
    PHP  37. Illuminate\Routing\Pipeline->Illuminate\Pipeline\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:140-169}() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53
    PHP  38. Illuminate\Session\Middleware\StartSession->handle() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163
    PHP  39. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:47-59}() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php:56
    PHP  40. Illuminate\Routing\Pipeline->Illuminate\Pipeline\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:140-169}() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53
    PHP  41. Illuminate\View\Middleware\ShareErrorsFromSession->handle() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163
    PHP  42. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:47-59}() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php:49
    PHP  43. Illuminate\Routing\Pipeline->Illuminate\Pipeline\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:140-169}() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53
    PHP  44. Illuminate\Session\Middleware\AuthenticateSession->handle() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163
    PHP  45. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:47-59}() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Session/Middleware/AuthenticateSession.php:39
    PHP  46. Illuminate\Routing\Pipeline->Illuminate\Pipeline\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:140-169}() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53
    PHP  47. App\Http\Middleware\VerifyCsrfToken->handle() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163
    PHP  48. App\Http\Middleware\VerifyCsrfToken->handle() /Lychee-Laravel/app/Http/Middleware/VerifyCsrfToken.php:60
    PHP  49. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:47-59}() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php:75
    PHP  50. Illuminate\Routing\Pipeline->Illuminate\Pipeline\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:140-169}() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53
    PHP  51. Illuminate\Routing\Middleware\SubstituteBindings->handle() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163
    PHP  52. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:28-36}() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php:41
    PHP  53. Illuminate\Routing\Router->Illuminate\Routing\{closure:/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Router.php:678-682}() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:30
    PHP  54. Illuminate\Routing\Route->run() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Router.php:680
    PHP  55. Illuminate\Routing\Route->runController() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Route.php:176
    PHP  56. Illuminate\Routing\ControllerDispatcher->dispatch() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Route.php:219
    PHP  57. App\Http\Controllers\AlbumsController->callAction() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:45
    PHP  58. call_user_func_array:{/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54}() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
    PHP  59. App\Http\Controllers\AlbumsController->get() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
    PHP  60. App\ModelFunctions\AlbumFunctions->prepare_albums() /Lychee-Laravel/app/Http/Controllers/AlbumsController.php:55
    PHP  61. App\ModelFunctions\AlbumFunctions->get_albums() /Lychee-Laravel/app/ModelFunctions/AlbumFunctions.php:245
    PHP  62. App\ModelFunctions\AlbumFunctions->get_sub_albums() /Lychee-Laravel/app/ModelFunctions/AlbumFunctions.php:446
    PHP  63. App\ModelFunctions\AlbumFunctions->get_sub_albums() /Lychee-Laravel/app/ModelFunctions/AlbumFunctions.php:516
    PHP  64. App\ModelFunctions\AlbumFunctions->get_sub_albums() /Lychee-Laravel/app/ModelFunctions/AlbumFunctions.php:516
    PHP  65. App\ControllerFunctions\ReadAccessFunctions->album() /Lychee-Laravel/app/ModelFunctions/AlbumFunctions.php:510
    PHP  66. App\ModelFunctions\SessionFunctions->is_current_user() /Lychee-Laravel/app/ControllerFunctions/ReadAccessFunctions.php:68
    PHP  67. Illuminate\Support\Facades\Facade::get() /Lychee-Laravel/app/ModelFunctions/SessionFunctions.php:70
    PHP  68. Illuminate\Support\Facades\Facade::__callStatic() /Lychee-Laravel/app/ModelFunctions/SessionFunctions.php:70
    PHP  69. Illuminate\Session\SessionManager->get() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:237
    PHP  70. Illuminate\Session\SessionManager->__call() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:237
    PHP  71. Illuminate\Session\SessionManager->driver() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Support/Manager.php:146
    PHP  72. Illuminate\Session\SessionManager->getDefaultDriver() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Support/Manager.php:59
    PHP  73. Illuminate\Foundation\Application->offsetGet() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Session/SessionManager.php:210
    PHP  74. Illuminate\Foundation\Application->make() /Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Container/Container.php:1233
    

    Output of the diagnostics

    I can't access the settings right now, since the mainpage fails to load...

    More info required 
    opened by matthijskooijman 55
  • [Enhancement] Be able to rotate image

    [Enhancement] Be able to rotate image

    I know i am being a bit of invasive lately.... Sorry the covid stay at home is pushing me to work harder on my photos....

    Anyway, is there a way to rotate images after they have been uploaded? I find sometimes some photos are rotated, specially from my analog film scanned, and it would be a nice feature to be able to rotate them in Lychee....

    Project for volunteers 
    opened by gardiol 54
  • Enable phpstan

    Enable phpstan

    Just to be nice...

    • The workflow is disabled so the code still passes CI.
    • Once merged in master this will allow to then merge in WIP branches and hopefully decrease the conflicts.

    In order to run it just do: make phpstan (and cry)

    The rules so far are:

    1. basic checks, unknown classes, unknown functions, unknown methods called on $this, wrong number of arguments passed to those methods and functions, always undefined variables
    2. possibly undefined variables, unknown magic methods and properties on classes with __call and __get
    3. unknown methods checked on all expressions (not just $this), validating PHPDocs return types, types assigned to properties
    4. basic dead code checking - always false instanceof and other type checks, dead else branches, unreachable code after return; etc.
    5. checking types of arguments passed to methods and functions
    6. report missing typehints
    7. report partially wrong union types - if you call a method that only exists on some types in a union type, level 7 starts to report that; other possibly incorrect situations

    Also the following: https://github.com/phpstan/phpstan-strict-rules

    • Require booleans in if, elseif, ternary operator, after !, and on both sides of && and ||.
    • Require numeric operands or arrays in + and numeric operands in -/*///**/%.
    • Require numeric operand in $var++, $var--, ++$varand --$var.
    • These functions contain a $strict parameter for better type safety, it must be set to true:
      • in_array (3rd parameter)
      • array_search (3rd parameter)
      • array_keys (3rd parameter; only if the 2nd parameter $search_value is provided)
      • base64_decode (2nd parameter)
    • Variables assigned in while loop condition and for loop initial assignment cannot be used after the loop.
    • Variables set in foreach that's always looped thanks to non-empty arrays cannot be used after the loop.
    • Types in switch condition and case value must match. PHP compares them loosely by default and that can lead to unexpected results.
    • Check that statically declared methods are called statically.
    • ~~Disallow empty() - it's a very loose comparison (see manual), it's recommended to use more strict one.~~
    • ~~Disallow short ternary operator (?:) - implies weak comparison, it's recommended to use null coalesce operator (??) or ternary operator with strict condition.~~
    • Disallow variable variables ($$foo, $this->$method() etc.)
    • Disallow overwriting variables with foreach key and value variables
    • Always true instanceof, type-checking is_* functions and strict comparisons ===/!==. These checks can be turned off by setting checkAlwaysTrueInstanceof/checkAlwaysTrueCheckTypeFunctionCall/checkAlwaysTrueStrictComparison to false.
    • Correct case for referenced and called function names.
    • Correct case for inherited and implemented method names.
    • ~~Contravariance for parameter types and covariance for return types in inherited methods (also known as Liskov substitution principle - LSP)~~
    • Check LSP even for static methods
    • Require calling parent constructor
    • Disallow usage of backtick operator ($ls = `ls -la`)
    • Closure should use $this directly instead of using $this variable indirectly

    Fruthermore:

    • Enforce the use of \Safe\functions when available.
    opened by ildyria 40
  • /public/api/Albums::get 400 (Bad Request)

    /public/api/Albums::get 400 (Bad Request)

    Detailed description of the problem [REQUIRED]

    main.js?1597871784:2 POST /public/api/Albums::get 400 (Bad Request)

    I get this error and then the page reloads immediately after. I also get a glimpse of an error saying "ERROR: Session Time Out"

    Also, I am using the MYSQL method to connect to database. It worked for creating all the tables just fine, so I'm not sure why it would say "username" and "password" is empty in DIAGNOSTICS since it didn't have that issue when creating the tables... I was curious though, MYSQL is actually depreciated since PHP 7.0, so does the mysql method actually use MYSQLI??

    Steps to reproduce the issue

    After initial setup is done, I go to the /public folder again and it'll pop up the create account dialog, but then immediately go into a reload loop with the above errors

    Output of the diagnostics [REQUIRED]

    Diagnostics ----------- Error: username empty or not set in database Error: password empty or not set in database Warning: Dropbox import not working. dropbox_key is empty. Warning: Pictures that are rotated lose their metadata! Please install Imagick to avoid that.

    System Information
    ------------------
    Lychee Version (release):   4.0.6
    DB Version:                 4.0.6
    
    composer install:           --no-dev
    APP_ENV:                    production
    APP_DEBUG:                  false
    
    System:                     Linux
    PHP Version:                7.4
    MySQL Version:              5.6.49-cll-lve
    
    Imagick:                    -
    Imagick Active:             1
    Imagick Version:            -
    GD Version:                 2.2.5
    
    Config Information
    ------------------
    version:                    040006
    check_for_updates:          0
    sorting_Photos_col:         takestamp
    sorting_Photos_order:       ASC
    sorting_Albums_col:         max_takestamp
    sorting_Albums_order:       ASC
    imagick:                    1
    skip_duplicates:            0
    small_max_width:            0
    small_max_height:           360
    medium_max_width:           1920
    medium_max_height:          1080
    lang:                       en
    layout:                     1
    image_overlay:              1
    image_overlay_type:         desc
    default_license:            none
    compression_quality:        90
    full_photo:                 1
    delete_imported:            0
    Mod_Frame:                  1
    Mod_Frame_refresh:          30
    thumb_2x:                   1
    small_2x:                   1
    medium_2x:                  1
    landing_page_enable:        0
    landing_owner:              John Smith
    landing_title:              John Smith
    landing_subtitle:           Cats, Dogs & Humans Photography
    landing_facebook:           https://www.facebook.com/JohnSmith
    landing_flickr:             https://www.flickr.com/JohnSmith
    landing_twitter:            https://www.twitter.com/JohnSmith
    landing_instagram:          https://instagram.com/JohnSmith
    landing_youtube:            https://www.youtube.com/JohnSmith
    landing_background:         dist/cat.jpg
    site_title:                 Lychee v4
    site_copyright_enable:      1
    site_copyright_begin:       2019
    site_copyright_end:         2019
    additional_footer_text:     
    display_social_in_gallery:  0
    public_search:              0
    SL_enable:                  0
    SL_for_admin:               0
    public_recent:              0
    recent_age:                 1
    public_starred:             0
    downloadable:               0
    photos_wraparound:          1
    map_display:                0
    zip64:                      1
    map_display_public:         0
    map_provider:               Wikimedia
    force_32bit_ids:            0
    map_include_subalbums:      0
    update_check_every_days:    3
    has_exiftool:               0
    share_button_visible:       0
    import_via_symlink:         0
    has_ffmpeg:                 0
    location_decoding:          0
    location_decoding_timeout:  30
    location_show:              1
    location_show_public:       0
    rss_enable:                 0
    rss_recent_days:            7
    rss_max_items:              100
    prefer_available_xmp_metadata: 0
    
    opened by jamesautodude 39
  • Use filestreams

    Use filestreams

    fixes https://github.com/LycheeOrg/Lychee/issues/60

    This is the follow up of #1309. The file objects for images use file streams internally and therewith save a lot of read-write cycles to disk. Previously, every image operation followed the pattern: read file, do image operation, write file. Now, the image file is loaded once, all image operations are done in memory and then the various target files (i.e. the original and the size variants) are written once.

    In the long run, this approach will also allow to store the media files on a non-local storage (such as AWS 3). The old approach would have triggered a complete file transfer for every elementary image operation.

    I promised 85% test coverage for the source code in /app/Actions/Photo and /app/Image. I already have pushed /app/Actions/Photo above 90%. :tada: The coverage of /app/Image is still as low as it always has been. But I am going to push more tests to the PR. Nonetheless the PR is ready for review.

    A change being worth of discussion

    This PR includes a change in the naming strategy which needs discussion. We already had a discussion about that on Gitter. Previously, the name of the image files was based on the checksum of the final image (i.e. after optional auto-rotation, etc.) With the new approach the final checksum is unknown until the image stream has been written onto disk which means that the file cannot be named after the checksum. (Well, it could, but at the cost of higher code complexity.)

    Now, the image files are named randomly. This PR includes three different naming strategies. Eventually, I only want to include one naming strategy in order to reduce test and maintenance efforts:

    1. SizeVariantFullyRandomNamingStrategy: As the name suggests every image file (incl. the different size variants) is named completely random. There is no way to tell if two image files are size variants of the same photo. The directory structure of /uploads/ contains two level of sub-directories from /uploads/aa/aa/... through /uploads/ff/ff/.... This avoids thousands of files in a single directory. The directories are created on-the-fly as necessary. The old directories /uploads/thumb, /uploads/small, ..., /uploads/big are not used anymore, but they remain in place for existing photos which already have been uploaded. There is no migration of existing photos to the new naming scheme.
    2. SizeVariantSharedPrefixRandomNamingStrategy: Similar to the first strategy except that files for different size variants of the same photo share an identical random prefix and then use a suffix to distinguish the different size variants, i.e. file names look like uploads/<xx>/<yy>/<zzzzzzzzzzz>-{full|medium2x|medium|small2x|small|thumb2x|thumb}.ext. This allows to easily identify files which "belong together". In particular size variants of the same photo are placed in the same sub-directory next to each other.
    3. SizeVariantGroupedRandomNamingStrategy: Very similar to the old strategy, except that the file name is not based on the checksum of the original size variant but chosen randomly. Except for that the files are still placed in the traditional directories /uploads/small, ..., /uploads/big and use a @2x-infix for the HiDPI-variants.

    Currently, the strategy SizeVariantSharedPrefixRandomNamingStrategy is active, because it is my favorite. But we can discuss that.

    opened by nagmat84 38
  • Massive refactoring of backend: v4.2.0 + fixes #843 #846 #858

    Massive refactoring of backend: v4.2.0 + fixes #843 #846 #858

    • start using Livewire for the front-end, for now accessible at example.com/livewire if enabled via LIVEWIRE_ENABLED in .env
    • use Facade AccessControl to access Session information (basically home-brewed Auth)
    • use Facade Lang to access Lang information (Easier to use through the blade template)
    • heavy refactoring of the core, introducing more granularity:
      • Interfaces are Contracts
      • Group Factories
      • use trait on album for smaller dedicated operations
      • add Nested Set theory to Album to allow access to all descendants

    Will probably be a bump to version 4.2.0 to be honest given the amount of change applied.

    Additionally fixes #843

    opened by ildyria 38
  • Allow hiding public albums from general public

    Allow hiding public albums from general public

    This is a simpler variant of the "Additional login screen" PR (https://github.com/LycheeOrg/Lychee/pull/1325) by hfr which we closed. It allows to hide every public album and photo from users not logged in.

    Unfortunately, the way how to get empty result sets are very bad. For example, $query2->where('null', '=', 'never-true');. Is there a way to get empty result sets with "native" code?

    opened by qwerty287 35
  • New Photos Email Has Broken Thumbnails

    New Photos Email Has Broken Thumbnails

    Detailed description of the problem [REQUIRED]

    The new photos weekly email has all broken thumbnails. It looks like they link back to password protected files. As none of my photos are in public albums, it makes this email sort of pointless. Could we generate public thumbnails for the email or somehow handle this better?

    Steps to reproduce the issue

    Steps to reproduce the behavior:

    1. Add private photos
    2. Open weekly notification email
    3. See none of the thumbnails load

    Screenshots Screen Shot 2023-01-03 at 12 23 31 PM

    Output of the diagnostics [REQUIRED]

    Diagnostics
    -------
    Warning: Dropbox import not working. dropbox_key is empty.
    Info: Latest version of PHP is 8.2
    
    
    
    
    System Information
    --------------
    Lychee Version (git):                    local (2902bee) -- Could not compare.
    DB Version:                              4.6.5
    
    composer install:                        dev
    APP_ENV:                                 production
    APP_DEBUG:                               false
    
    System:                                  Linux
    PHP Version:                             8.1.13
    PHP User agent:                          Lychee/4 (https://lycheeorg.github.io/)
    Timezone:                                America/Los_Angeles
    Max uploaded file size:                  200M
    Max post size:                           200M
    Max execution time:                      200
    MySQL Version:                           10.9.4-MariaDB-1:10.9.4+maria~ubu2204
    
    exec() Available:                        yes
    Imagick Available:                       1
    Imagick Enabled:                         1
    Imagick Version:                         1691
    GD Version:                              2.3.3
    Number of foreign key:                   26 found.
    
    
    
    
    Config Information
    --------------
    version:                                 040605
    check_for_updates:                       1
    sorting_photos_col:                      created_at
    sorting_photos_order:                    DESC
    sorting_albums_col:                      max_taken_at
    sorting_albums_order:                    DESC
    imagick:                                 1
    skip_duplicates:                         1
    small_max_width:                         0
    small_max_height:                        360
    medium_max_width:                        1920
    medium_max_height:                       1080
    lang:                                    en
    layout:                                  1
    image_overlay_type:                      none
    default_license:                         CC-BY-NC-ND-4.0
    compression_quality:                     90
    grants_full_photo_access:                1
    delete_imported:                         1
    mod_frame_enabled:                       1
    mod_frame_refresh:                       30
    thumb_2x:                                1
    small_2x:                                1
    medium_2x:                               1
    landing_page_enable:                     1
    site_owner:                              Vincent Juliano
    landing_title:                           Life on 35mm
    landing_subtitle:                        Click top right to continue.  Next page top left to login
    sm_facebook_url:                         
    sm_flickr_url:                           
    sm_twitter_url:                          
    sm_instagram_url:                        
    sm_youtube_url:                          
    landing_background:                      dist/cat.webp
    site_title:                              Vince Juliano's Photo Gallery
    footer_show_copyright:                   1
    site_copyright_begin:                    2021
    site_copyright_end:                      2023
    footer_additional_text:                  "Alex's Photos" copyright Alex Panicacci 2022
    footer_show_social_media:                0
    public_search:                           0
    SL_enable:                               0
    SL_for_admin:                            0
    public_recent:                           0
    recent_age:                              60
    public_starred:                          0
    grants_download:                         1
    photos_wraparound:                       1
    map_display:                             1
    zip64:                                   1
    map_display_public:                      1
    map_provider:                            Wikimedia
    force_32bit_ids:                         0
    map_include_subalbums:                   1
    update_check_every_days:                 3
    has_exiftool:                            1
    share_button_visible:                    1
    import_via_symlink:                      0
    has_ffmpeg:                              1
    location_decoding:                       1
    location_decoding_timeout:               30
    location_show:                           1
    location_show_public:                    1
    rss_enable:                              0
    rss_recent_days:                         7
    rss_max_items:                           100
    prefer_available_xmp_metadata:           0
    editor_enabled:                          1
    lossless_optimization:                   1
    swipe_tolerance_x:                       150
    swipe_tolerance_y:                       250
    local_takestamp_video_formats:           .avi|.mov
    log_max_num_line:                        10000
    unlock_password_photos_with_url_param:   0
    nsfw_visible:                            0
    nsfw_blur:                               0
    nsfw_warning:                            0
    nsfw_warning_admin:                      0
    nsfw_banner_override:                    
    map_display_direction:                   1
    album_subtitle_type:                     oldstyle
    upload_processing_limit:                 4
    public_photos_hidden:                    1
    new_photos_notification:                 1
    legacy_id_redirection:                   1
    zip_deflate_level:                       6
    SA_enabled:                              1
    default_album_protection:                1
    allow_username_change:                   1
    

    About

    Browser and system

    Server: Ubuntu Server 22.10 Lychee 4.6.5 Client: MacOs 12.6.2 Firefox 108.0.1

    bug 
    opened by jln646v 0
  • [Mobile Feature Request] Send Photos from Gallery to my Lychee app

    [Mobile Feature Request] Send Photos from Gallery to my Lychee app

    Explain in a few words which functionality or improvements you would like to see in Lychee. Would there be an option to send photos directly from the gallery of an iPhone or Android Gallery to our personal Lychee website ?

    enhancement Low Priority 
    opened by anjanesh 2
  • Unable to open sidebar, can't navigate away from log/diagnostic/setting page

    Unable to open sidebar, can't navigate away from log/diagnostic/setting page

    Detailed description of the problem

    While trying to get to the bottom of #1674, I stumbled across this curious issue. Normally, closing the sidebar refreshes to the home page. However, following the below steps will close the sidebar without refreshing--and you're unable to open the sidebar again. In order to navigate away, you need to refresh the browser or otherwise alter the URL directly.

    Steps to reproduce the issue

    1. Log in as admin
    2. Click settings cog on top left
    3. Open an album
    4. Click "Settings", "Users", "U2F", "Sharing", "Show Logs", or "Diagnostics" on the left sidebar
    5. Click "Close" on the left sidebar (NOT the chevron to the right of the sidebar)
    6. Click the chevron on the top left and the sidebar will not open

    Screenshots After step 3, an album and the side bar are opened image

    Opened the logs after step 4. Note how the URL has not changed. image

    Following step 5, sidebar is closed, log screen is still open, and the URL has not changed. Clicking the chevron changes the color but otherwise does nothing. image

    Output of the diagnostics

    Diagnostics
    -------
    Warning: Dropbox import not working. dropbox_key is empty.
    Info: Latest version of PHP is 8.2
    
    
    System Information
    --------------
    Lychee Version (git):                    master (6ca3066) -- 1 commits behind 923bfb4 (11 seconds ago)
    DB Version:                              4.6.5
    
    composer install:                        --no-dev
    APP_ENV:                                 production
    APP_DEBUG:                               false
    
    System:                                  Linux
    PHP Version:                             8.1.13
    PHP User agent:                          Lychee/4 (https://lycheeorg.github.io/)
    Timezone:                                America/Chicago
    Max uploaded file size:                  500M
    Max post size:                           500M
    Max execution time:                      200
    MySQL Version:                           8.0.31-0ubuntu0.20.04.2
    
    exec() Available:                        yes
    Imagick Available:                       1
    Imagick Enabled:                         1
    Imagick Version:                         1690
    GD Version:                              2.3.3
    Number of foreign key:                   11 found.
    
    Lychee total space:                      37.72 GB
    Upload folder space:                     37.56 GB
    System total space:                      72.50 GB
    System free space:                       22.96 GB (31%)
    
    
    Config Information
    --------------
    version:                                 040605
    check_for_updates:                       1
    sorting_photos_col:                      taken_at
    sorting_photos_order:                    ASC
    sorting_albums_col:                      max_taken_at
    sorting_albums_order:                    ASC
    imagick:                                 1
    skip_duplicates:                         0
    small_max_width:                         0
    small_max_height:                        360
    medium_max_width:                        1920
    medium_max_height:                       1080
    lang:                                    en
    layout:                                  1
    image_overlay_type:                      date
    default_license:                         CC-BY-NC-SA-4.0
    compression_quality:                     90
    grants_full_photo_access:                1
    delete_imported:                         0
    mod_frame_enabled:                       1
    mod_frame_refresh:                       30
    thumb_2x:                                1
    small_2x:                                1
    medium_2x:                               1
    landing_page_enable:                     0
    site_owner:                              [Fname] [Lname]
    landing_title:                           [Name]'s Photos!
    landing_subtitle:                        Pictures and movies of various trips
    sm_facebook_url:                         https://www.facebook.com/[user]
    sm_flickr_url:                           
    sm_twitter_url:                          https://www.twitter.com/[user]
    sm_instagram_url:                        
    sm_youtube_url:                          
    landing_background:                      dist/cat.webp
    site_title:                              [Name]'s Photos
    footer_show_copyright:                   1
    site_copyright_begin:                    2019
    site_copyright_end:                      2022
    footer_additional_text:                  
    footer_show_social_media:                0
    public_search:                           0
    SL_enable:                               0
    SL_for_admin:                            0
    public_recent:                           0
    recent_age:                              1
    public_starred:                          0
    grants_download:                         0
    photos_wraparound:                       1
    map_display:                             1
    zip64:                                   1
    map_display_public:                      0
    map_provider:                            Wikimedia
    force_32bit_ids:                         0
    map_include_subalbums:                   1
    update_check_every_days:                 3
    has_exiftool:                            0
    share_button_visible:                    1
    import_via_symlink:                      0
    has_ffmpeg:                              1
    location_decoding:                       1
    location_decoding_timeout:               30
    location_show:                           0
    location_show_public:                    0
    rss_enable:                              0
    rss_recent_days:                         7
    rss_max_items:                           100
    prefer_available_xmp_metadata:           0
    editor_enabled:                          1
    lossless_optimization:                   0
    swipe_tolerance_x:                       150
    swipe_tolerance_y:                       250
    local_takestamp_video_formats:           .avi|.mov
    log_max_num_line:                        1000
    unlock_password_photos_with_url_param:   0
    nsfw_visible:                            0
    nsfw_blur:                               0
    nsfw_warning:                            0
    nsfw_warning_admin:                      0
    nsfw_banner_override:                    
    map_display_direction:                   1
    album_subtitle_type:                     oldstyle
    upload_processing_limit:                 8
    public_photos_hidden:                    1
    new_photos_notification:                 0
    legacy_id_redirection:                   1
    zip_deflate_level:                       6
    SA_enabled:                              1
    default_album_protection:                1
    allow_username_change:                   1
    

    Browser and system

    • Win 10 Pro 22H2
      • Firefox 102.6.0esr (64-bit)
      • Chrome 108.0.5359.125 (Official Build) (64-bit)
    • iPadOS 16.1.1 (20B101)
      • Safari
    • Android 13 build TP1A.221105.002
      • Firefox 108.1.0 (Build #2015920443) (had to rotate to landscape)
      • Chrome 108.0.5359.128 (had to rotate to landscape)
    • Ubuntu 20.04.5 LTS
      • Firefox 108.0 (64-bit)
    bug 
    opened by yuorfaec 0
  • Share button does nothing

    Share button does nothing

    Detailed description of the problem [REQUIRED]

    Just installed the latest docker container to test out lychee. Everything seems to work great! However, I am looking for a way to implement some images in another tool/program, and I really need an easy access share/link.

    After installing and setting up, I added a few various images to various albums (Some in the public one and in others). However when I do, nothing happens. All other icons/buttons seem to work as intended.

    Steps to reproduce the issue

    Steps to reproduce the behavior:

    1. Install the latest docker container. (I used v4.6.5)
    2. setup admin account per normal, and upload some folders
    3. Click the share gear/button after selecting a specific image
    4. Nothing happens... it highlights with a click/mouseover. But no menu or anything

    As a side note, I assume the popovers are javascript or bootstrap based, but I see no errors in the console.

    Screenshots image

    Output of the diagnostics [REQUIRED]

        Diagnostics
        -------
        Warning: Dropbox import not working. dropbox_key is empty.
        Warning: Default timezone not properly set; you might experience strange results when importing photos without explicit EXIF timezone
        Warning: git (software) is not available.
        Foreign key: albums.id                      → base_albums.id       : NO ACTION
        Foreign key: base_albums.owner_id           → users.id             : NO ACTION
        Foreign key: photos.album_id                → albums.id            : NO ACTION
        Foreign key: photos.owner_id                → users.id             : NO ACTION
        Foreign key: size_variants.photo_id         → photos.id            : NO ACTION
        Foreign key: sym_links.size_variant_id      → size_variants.id     : NO ACTION
        Foreign key: tag_albums.id                  → base_albums.id       : NO ACTION
        Foreign key: user_base_album.base_album_id  → base_albums.id       : CASCADE
        Foreign key: user_base_album.user_id        → users.id             : CASCADE
    
    
    
        System Information
        --------------
        Lychee Version (git):                    ?? (26b5393) -- Could not compare.
        DB Version:                              4.6.5
        
        composer install:                        --no-dev
        APP_ENV:                                 production
        APP_DEBUG:                               false
        
        System:                                  Linux
        PHP Version:                             8.1.12
        PHP User agent:                          Lychee/4 (https://lycheeorg.github.io/)
        Timezone:                                UTC
        Max uploaded file size:                  100M
        Max post size:                           100M
        Max execution time:                      3600
        SQLite Version:                          3.40.0
        
        exec() Available:                        yes
        Imagick Available:                       1
        Imagick Enabled:                         1
        Imagick Version:                         1691
        GD Version:                              2.3.3
        Number of foreign key:                   9 found.
    
    
    
        Config Information
        --------------
        version:                                 040605
        check_for_updates:                       0
        sorting_photos_col:                      taken_at
        sorting_photos_order:                    ASC
        sorting_albums_col:                      max_taken_at
        sorting_albums_order:                    ASC
        imagick:                                 1
        skip_duplicates:                         0
        small_max_width:                         0
        small_max_height:                        360
        medium_max_width:                        1920
        medium_max_height:                       1080
        lang:                                    en
        layout:                                  1
        image_overlay_type:                      desc
        default_license:                         none
        compression_quality:                     90
        grants_full_photo_access:                1
        delete_imported:                         0
        mod_frame_enabled:                       1
        mod_frame_refresh:                       30
        thumb_2x:                                1
        small_2x:                                1
        medium_2x:                               1
        landing_page_enable:                     0
        site_owner:                              John Smith
        landing_title:                           John Smith
        landing_subtitle:                        Cats, Dogs & Humans Photography
        sm_facebook_url:                         https://www.facebook.com/JohnSmith
        sm_flickr_url:                           https://www.flickr.com/JohnSmith
        sm_twitter_url:                          https://www.twitter.com/JohnSmith
        sm_instagram_url:                        https://instagram.com/JohnSmith
        sm_youtube_url:                          https://www.youtube.com/JohnSmith
        landing_background:                      dist/cat.webp
        site_title:                              Lychee v4
        footer_show_copyright:                   1
        site_copyright_begin:                    2019
        site_copyright_end:                      2019
        footer_additional_text:                  
        footer_show_social_media:                0
        public_search:                           0
        SL_enable:                               0
        SL_for_admin:                            0
        public_recent:                           0
        recent_age:                              1
        public_starred:                          0
        grants_download:                         0
        photos_wraparound:                       1
        map_display:                             0
        zip64:                                   1
        map_display_public:                      0
        map_provider:                            Wikimedia
        force_32bit_ids:                         0
        map_include_subalbums:                   0
        update_check_every_days:                 3
        has_exiftool:                            1
        share_button_visible:                    0
        import_via_symlink:                      0
        has_ffmpeg:                              1
        location_decoding:                       0
        location_decoding_timeout:               30
        location_show:                           1
        location_show_public:                    0
        rss_enable:                              0
        rss_recent_days:                         7
        rss_max_items:                           100
        prefer_available_xmp_metadata:           0
        editor_enabled:                          1
        lossless_optimization:                   0
        swipe_tolerance_x:                       150
        swipe_tolerance_y:                       250
        local_takestamp_video_formats:           .avi|.mov
        log_max_num_line:                        1000
        unlock_password_photos_with_url_param:   0
        nsfw_visible:                            1
        nsfw_blur:                               0
        nsfw_warning:                            0
        nsfw_warning_admin:                      0
        nsfw_banner_override:                    
        map_display_direction:                   1
        album_subtitle_type:                     oldstyle
        upload_processing_limit:                 4
        public_photos_hidden:                    1
        new_photos_notification:                 0
        legacy_id_redirection:                   1
        zip_deflate_level:                       6
        SA_enabled:                              1
        default_album_protection:                1
        allow_username_change:                   1
    

    Browser and system

    Chrome - MacOS

    bug 
    opened by icsy7867 12
  • DTO -> Resources

    DTO -> Resources

    Fixes #1642

    Leverage of Laravel Resources for a more explicit attributes in responses. No hidden surprises.

    • [x] : add json missing tests for smart albums as we no longer return null.
    opened by ildyria 1
  • reload to main page
  • It should show up an alert box but it does not
  • Screenshots If applicable, add screenshots to help explain your problem.

    Output of the diagnostics [REQUIRED]

    (Settings => Diagnostics or https://example.com/Diagnostics or php artisan lychee:diagnostics)

    System Information
    ------------------
    Lychee Version (git):                    master (5b0d944) -- 3 commits behind 6460503 (0 seconds ago)
    DB Version:                              4.6.3
    
    composer install:                        --no-dev
    APP_ENV:                                 production
    APP_DEBUG:                               false
    
    System:                                  Linux
    PHP Version:                             8.1.12
    PHP User agent:                          Lychee/4 (https://lycheeorg.github.io/)
    Timezone:                                Europe/Stockholm
    Max uploaded file size:                  2M
    Max post size:                           8M
    Max execution time:                      0
    PostgreSQL Version:                      PostgreSQL 15.1 (Debian 15.1-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
    
    exec() Available:                        yes
    Imagick Available:                       1
    Imagick Enabled:                         1
    Imagick Version:                         1691
    GD Version:                              2.3.3
    
    Config Information
    ------------------
    version:                                 040603
    check_for_updates:                       0
    sorting_photos_col:                      taken_at
    sorting_photos_order:                    ASC
    sorting_albums_col:                      title
    sorting_albums_order:                    ASC
    imagick:                                 1
    skip_duplicates:                         0
    small_max_width:                         0
    small_max_height:                        360
    medium_max_width:                        1920
    medium_max_height:                       1080
    lang:                                    en
    layout:                                  1
    image_overlay_type:                      none
    default_license:                         CC-BY-NC-ND-4.0
    compression_quality:                     90
    full_photo:                              1
    delete_imported:                         0
    mod_frame_enabled:                       1
    mod_frame_refresh:                       30
    thumb_2x:                                1
    small_2x:                                1
    medium_2x:                               1
    landing_page_enable:                     0
    site_owner:                              lychee
    landing_title:                           lychee
    landing_subtitle:                        lychee is great
    sm_facebook_url:
    sm_flickr_url:
    sm_twitter_url:
    sm_instagram_url:                        
    sm_youtube_url:
    landing_background:                      
    site_title:                              lychee
    footer_show_copyright:                   1
    site_copyright_begin:                    2010
    site_copyright_end:                      2022
    footer_additional_text:
    footer_show_social_media:                1
    public_search:                           0
    SL_enable:                               0
    SL_for_admin:                            0
    public_recent:                           1
    recent_age:                              90
    public_starred:                          0
    downloadable:                            0
    photos_wraparound:                       1
    map_display:                             0
    zip64:                                   1
    map_display_public:                      0
    map_provider:                            Wikimedia
    force_32bit_ids:                         0
    map_include_subalbums:                   0
    update_check_every_days:                 3
    has_exiftool:                            1
    share_button_visible:                    0
    import_via_symlink:                      0
    has_ffmpeg:                              1
    location_decoding:                       0
    location_decoding_timeout:               30
    location_show:                           1
    location_show_public:                    0
    rss_enable:                              1
    rss_recent_days:                         365
    rss_max_items:                           1000
    prefer_available_xmp_metadata:           0
    editor_enabled:                          1
    lossless_optimization:                   0
    swipe_tolerance_x:                       150
    swipe_tolerance_y:                       250
    local_takestamp_video_formats:           .avi|.mov
    log_max_num_line:                        1000
    unlock_password_photos_with_url_param:   0
    nsfw_visible:                            1
    nsfw_blur:                               1
    nsfw_warning:                            1
    nsfw_warning_admin:                      0
    nsfw_banner_override:
    map_display_direction:                   1
    album_subtitle_type:                     oldstyle
    upload_processing_limit:                 4
    public_photos_hidden:                    1
    new_photos_notification:                 0
    legacy_id_redirection:                   1
    zip_deflate_level:                       6
    SA_enabled:                              1
    

    Browser and system

    bug 
opened by zeeshanabid 10
Releases(v4.7.0)
  • v4.6.5(Dec 26, 2022)

    What's Changed

    • Fixes for v4.6.4 by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1665
    • allow username change by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1667

    Full Changelog: https://github.com/LycheeOrg/Lychee/compare/v4.6.4...v4.6.5

    Source code(tar.gz)
    Source code(zip)
    Lychee.zip(9.94 MB)
  • v4.6.4(Dec 25, 2022)

    This release does significant changes at the database level, do make sure you have a back-up available if necessary.

    What's Changed

    • Fix list of shares by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1590
    • Add flags to command by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1594
    • Add API to change upload date & fix API token auth by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1591
    • Fix remove album cover throwing 403 by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1598
    • add descriptions to configuration items by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1584
    • Merge gallery, view and frame Into a Unified Frontend by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1522
    • Refactor box model by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1562
    • enable strict mode in Laravel by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1588
    • refactor diagnostics to use Laravel pipelines by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1595
    • Checks if Webp is available for GD in diagnostics. by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1611
    • Smart album - On This Day - new feature by @aldjordje in https://github.com/LycheeOrg/Lychee/pull/1607
    • Add option to enable-disable smart albums in the back-end by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1619
    • Add Unix socket support to Redis by @r7l in https://github.com/LycheeOrg/Lychee/pull/1632
    • Versioning code refactoring by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1628
    • move contracts where they belong by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1638
    • Full URL for metadata by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1653
    • Remove and clean up unused files by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1649
    • Add number of foreign key check and listing option by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1655
    • Apply rights naming convention by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1539
    • Create admin during installation, allow multiple admins by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1602
    • Remove (broken and unused) installer scripts by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1662
    • release v4.6.4 by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1661

    New Contributors

    • @aldjordje made their first contribution in https://github.com/LycheeOrg/Lychee/pull/1607
    • @r7l made their first contribution in https://github.com/LycheeOrg/Lychee/pull/1632

    Full Changelog: https://github.com/LycheeOrg/Lychee/compare/v4.6.2...v4.6.4

    Source code(tar.gz)
    Source code(zip)
    Lychee.zip(9.94 MB)
  • v4.6.3-RC1(Dec 4, 2022)

    What's Changed

    • Fix list of shares by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1590
    • Add flags to command by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1594
    • Add API to change upload date & fix API token auth by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1591
    • Fix remove album cover throwing 403 by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1598
    • add descriptions to configuration items by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1584
    • Merge gallery, view and frame Into a Unified Frontend by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1522
    • Refactor box model by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1562
    • enable strict mode in Laravel by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1588
    • refactor diagnostics to use Laravel pipelines by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1595
    • Checks if Webp is available for GD in diagnostics. by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1611
    • version 4.6.3 by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1606

    Full Changelog: https://github.com/LycheeOrg/Lychee/compare/v4.6.2...v4.6.3-RC1

    Source code(tar.gz)
    Source code(zip)
    Lychee.zip(11.25 MB)
  • v4.6.2(Nov 12, 2022)

    What's Changed

    • Arrayable DTO using reflection by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1529
    • Adopt new modern dialog by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1519
    • Consolidate localization by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1494
    • Add option to skip diagnostic checks by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1558
    • Upgrade to Laravel 9 + switch to Laragear/WebAuthn by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1469
    • Add option to append tags by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1564
    • V4.6.2 by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1574
    • fix smart albums rights by @ildyria & @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1578
    • Fix files installation if no Git repo is available by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1581

    Full Changelog: https://github.com/LycheeOrg/Lychee/compare/v4.6.1...v4.6.2

    Source code(tar.gz)
    Source code(zip)
    Lychee.zip(11.84 MB)
  • v4.6.2-RC2(Nov 6, 2022)

    What's Changed

    • Arrayable DTO using reflection by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1529
    • Adopt new modern dialog by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1519
    • Consolidate localization by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1494
    • Add option to skip diagnostic checks by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1558
    • File cleanups and remove Homestead by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1563
    • Upgrade to Laravel 9 + switch to Laragear/WebAuthn by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1469
    • Add option to append tags by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1564
    • composer update by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1571
    • V4.6.2 by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1574

    Fixed on top of 4.6.2-RC1

    • Enable Php 8.2 in CICD by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1572
    • fix smart albums rights by @ildyria & @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1578

    Full Changelog: https://github.com/LycheeOrg/Lychee/compare/v4.6.1...v4.6.2-RC2

    Source code(tar.gz)
    Source code(zip)
    Lychee.zip(11.84 MB)
  • v4.6.2-RC1(Oct 29, 2022)

    What's Changed

    • Arrayable DTO using reflection by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1529
    • Adopt new modern dialog by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1519
    • Consolidate localization by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1494
    • Add option to skip diagnostic checks by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1558
    • File cleanups and remove Homestead by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1563
    • Upgrade to Laravel 9 + switch to Laragear/WebAuthn by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1469
    • Add option to append tags by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1564
    • composer update by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1571
    • V4.6.2 by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1574

    Full Changelog: https://github.com/LycheeOrg/Lychee/compare/v4.6.1...v4.6.2-RC1

    Source code(tar.gz)
    Source code(zip)
    Lychee.zip(11.84 MB)
  • v4.6.1(Oct 8, 2022)

    IMPORTANT

    • This update contains a Security Update which fix multiple XSS vulnerability and update the Content Security Policy.
    • This update will drop the API key in favor to Authorization token. As a result, once the migration is applied the old API token won't work anymore.

    What's Changed

    • Drop page support by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1489
    • Add user and better structure to session json by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1443
    • Move 'installation:complete' to web instead of per route by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1467
    • Cleaning config table by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1491
    • Update Exec.php by @corrilan in https://github.com/LycheeOrg/Lychee/pull/1153
    • Ensure that Admin rights are overloading others by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1508
    • Improve config options by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1366
    • Fixes #1514 by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1515
    • Shared albums should not consider the require_link property. by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1480
    • Improve API client usability by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1368
    • Improve & fix CSP by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1528
    • Fixes #1506 by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1516
    • Remove use directive by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1537
    • i18n(ES) by @joebordes in https://github.com/LycheeOrg/Lychee/pull/1541
    • i18n(EN) grammar and syntax detected by Grammarly by @joebordes in https://github.com/LycheeOrg/Lychee/pull/1542
    • Fix dead Installation/Build link in readme.md by @PeterDaveHello in https://github.com/LycheeOrg/Lychee/pull/1543
    • Typofixes by @nexxai in https://github.com/LycheeOrg/Lychee/pull/1544
    • Add an option to regenerate square thumbs by @kamil4 in https://github.com/LycheeOrg/Lychee/pull/1545
    • add exec check by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1540
    • Add csp exceptions by @kamil4 in https://github.com/LycheeOrg/Lychee/pull/1551

    New Contributors

    • @corrilan made their first contribution in https://github.com/LycheeOrg/Lychee/pull/1153
    • @joebordes made their first contribution in https://github.com/LycheeOrg/Lychee/pull/1541
    • @PeterDaveHello made their first contribution in https://github.com/LycheeOrg/Lychee/pull/1543
    • @nexxai made their first contribution in https://github.com/LycheeOrg/Lychee/pull/1544

    Full Changelog: https://github.com/LycheeOrg/Lychee/compare/v4.6.0...v4.6.1

    Source code(tar.gz)
    Source code(zip)
    Lychee.zip(12.58 MB)
  • v4.6.1-RC1(Sep 28, 2022)

    IMPORTANT

    • This update contains a Security Update which fix multiple XSS vulnerability and update the Content Security Policy.
    • This update will drop the API key in favor to Authorization token. As a result, once the migration is applied the old API token won't work anymore.

    What's Changed

    • Drop page support by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1489
    • Add user and better structure to session json by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1443
    • Move 'installation:complete' to web instead of per route by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1467
    • Cleaning config table by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1491
    • Update Exec.php by @corrilan in https://github.com/LycheeOrg/Lychee/pull/1153
    • Ensure that Admin rights are overloading others by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1508
    • Improve config options by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1366
    • Fixes #1514 by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1515
    • Shared albums should not consider the require_link property. by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1480
    • Improve API client usability by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1368
    • Improve & fix CSP by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1528
    • version 4.6.1 by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1533

    New Contributors

    • @corrilan made their first contribution in https://github.com/LycheeOrg/Lychee/pull/1153

    Full Changelog: https://github.com/LycheeOrg/Lychee/compare/v4.6.0...v4.6.1-RC1

    Source code(tar.gz)
    Source code(zip)
    Lychee.zip(12.58 MB)
  • v4.6.0(Sep 4, 2022)

    Important

    Once the migration is applied, should you wish to rollback, you will need to reset your admin user otherwise it will not be possible to log as admin anymore.

    What's Changed

    • Provide an ASCII fallback for multibyte filenames by @kamil4 in https://github.com/LycheeOrg/Lychee/pull/1453
    • Cleanup download tests by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1457
    • Run npm install in post-merge hook by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1445
    • Authorization tests by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1414
    • Fix CI badge in readme by @d7415 in https://github.com/LycheeOrg/Lychee/pull/1460
    • just remove --no-suggest by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1463
    • Use Laravel Auth facade. by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1403
    • Fix user test by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1471
    • Fixes #1473 by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1475
    • Fixes #1472 by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1474
    • sync Front-end by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1479
    • Pull Request template by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1485
    • v4.6.0-RC3 by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1486
    • remove $locale in favor of Lang::get() by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1490
    • fix Installation by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1495
    • Fix installation again. by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1505

    Full Changelog: https://github.com/LycheeOrg/Lychee/compare/v4.5.3...v4.6.0

    Source code(tar.gz)
    Source code(zip)
    Lychee.zip(12.57 MB)
  • v4.6.0-RC3(Aug 26, 2022)

    Important

    Once the migration is applied, should you wish to rollback, you will need to reset your admin user otherwise it will not be possible to log as admin anymore.

    What's Changed

    • Fixes #1473 by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1475 (v4.6.0-RC)
    • Fixes #1472 by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1474 (v4.6.0-RC)
    • Provide an ASCII fallback for multibyte filenames by @kamil4 in https://github.com/LycheeOrg/Lychee/pull/1453
    • Cleanup download tests by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1457
    • Run npm install in post-merge hook by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1445
    • Authorization tests by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1414
    • Fix CI badge in readme by @d7415 in https://github.com/LycheeOrg/Lychee/pull/1460
    • just remove --no-suggest by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1463
    • Use Laravel Auth facade. by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1403

    Full Changelog: https://github.com/LycheeOrg/Lychee/compare/v4.5.3...v4.6.0-RC3

    Source code(tar.gz)
    Source code(zip)
    Lychee.zip(12.57 MB)
  • v4.6.0-RC2(Aug 23, 2022)

    Important

    Once the migration is applied, should you wish to rollback, you will need to reset your admin user otherwise it will not be possible to log as admin anymore.

    What's Changed

    • Fixes #1473 by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1475 (v4.6.0-RC)
    • Fixes #1472 by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1474 (v4.6.0-RC)
    • Provide an ASCII fallback for multibyte filenames by @kamil4 in https://github.com/LycheeOrg/Lychee/pull/1453
    • Cleanup download tests by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1457
    • Run npm install in post-merge hook by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1445
    • Authorization tests by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1414
    • Fix CI badge in readme by @d7415 in https://github.com/LycheeOrg/Lychee/pull/1460
    • just remove --no-suggest by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1463
    • Use Laravel Auth facade. by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1403

    Full Changelog: https://github.com/LycheeOrg/Lychee/compare/v4.5.3...v4.6.0-RC2

    Source code(tar.gz)
    Source code(zip)
    Lychee.zip(12.55 MB)
  • v4.6.0-RC(Aug 19, 2022)

    Important

    Once the migration is applied, should you wish to rollback, you will need to reset your admin user otherwise it will not be possible to log as admin anymore.

    What's Changed

    • Provide an ASCII fallback for multibyte filenames by @kamil4 in https://github.com/LycheeOrg/Lychee/pull/1453
    • Cleanup download tests by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1457
    • Run npm install in post-merge hook by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1445
    • Authorization tests by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1414
    • Fix CI badge in readme by @d7415 in https://github.com/LycheeOrg/Lychee/pull/1460
    • just remove --no-suggest by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1463
    • Use Laravel Auth facade. by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1403

    Full Changelog: https://github.com/LycheeOrg/Lychee/compare/v4.5.3...v4.6.0-RC

    Source code(tar.gz)
    Source code(zip)
    Lychee.zip(12.55 MB)
  • v4.5.3(Aug 7, 2022)

    This is official release making the step from 4.4.0.

    IMPORTANT

    • The internal representation of Albums changed with version 4.5.0; we strongly recommend that you BACK UP YOUR DATABASE BEFORE UPDATING.
    • The folder structure changed for images; please check the required directory permissions. Read more here ».

    Notable Modifications (since 4.4.0)

    • New ID scheme. Albums and photos are migrated to a new ID scheme. Previously, albums and photos used time-based integer IDs. The new IDs are truly 144bit of randomness encoded in Base64 as a 24-character string; e.g., if your photo had the URL https://my-domain.tld/r/16102925744307/16102927818284 before, it may have the URL https://my-domain.tld/r/GTqZfSso3nPeCnTNW4ovisgC/jM6KkmlK7X0LtVas5MjrHtTO after the migration. This means, external links to your albums or photos will stop working. However, we implemented a redirection service. You can enable/disable the re-direction service under Settings > More > legacy_id_redirection. This gives you time to migrate any external reference to the new IDs. We also generate a log entry every time the redirection service is used. This log contains the legacy and new ID as well as information where the request came from. This may help you with the migration of your external links.

    • New folder structure for images:

      • Deep directory structure. Instead of all images of a certain kind residing in a single, flat directory (potentially containing thousands of files), we now have two additional two-letter directory levels under each kind (e.g., images are stored as medium/ba/d0/9a28ec995ead4877dfa1befa2d3b.jpg).
      • HiDPI (@2x) variants now reside in their own directories.
      • big has been renamed to original.

      Note that this only affects newly added photos; those added in the past are not moved to new locations. Also, see the note above about directory permissions.

    • Refactoring of the internal architecture and the representation of albums. While this didn't add any major new features, a number of optimizations have been put in place to speed up various operations, e.g., on installations with many hundreds of albums. Because this requires a particularly complex database migration, those with existing installations should pay attention to the note above about backing up their database.

    • Refactoring of error handling and reporting. This should result in more meaningful error messages both in the web front end and in the server logs (instead of the old cryptic "Server error or API not found" messages).

    • Refactoring of the file handling during upload/import. Instead of using temporary files and (re-)reading them many times, we now rely on file streams. This not only speeds up processing during upload/import (by around 50% in our tests), but is also an important step towards future support for the use of AWS S3 as image storage.

    • New features in the web front end :

      • QR code added in the sharing menu.
      • GPX tracks can be added to albums for displaying together with photos on the map.
      • Drag/drop support added for albums and photos to facilitate more intuitive Move/Merge
    • ZIP compression level can now be changed and the compression can be disabled.

    • Support of Vietnamese language.

    What's Changed (since 4.5.2)

    • Moved unit tests for root album into separate class by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1416
    • Add some tests by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1395
    • move the traits to the class as it is only used once by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1425
    • Fix test interaction with smart albums by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1428
    • Fix album unit tests by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1427
    • Security fix: Unsorted photos by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1430
    • Improve cicd by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1424
    • add JetBrain Open Source Community Support by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1442
    • Make VideoHandler support optional by @kamil4 in https://github.com/LycheeOrg/Lychee/pull/1439
    • Update dependencies and add NPM lockfile by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1440
    • Ensure consistent sorting of albums in list of shares by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1429
    • Added options for ZIP compression by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1436
    • Update readme.md by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1450
    • version 4.5.3 by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1447

    Full Changelog: https://github.com/LycheeOrg/Lychee/compare/v4.5.2...v4.5.3

    Source code(tar.gz)
    Source code(zip)
    Lychee.zip(12.54 MB)
  • v4.5.2(Aug 6, 2022)

    What's Changed

    • Center search clear X by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1264
    • Added more file to gitignore by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1282
    • Fixes 1280 by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1284
    • More efficient deletion (but ugly) by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1277
    • Update composer.lock by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1285
    • Fix rollback code for mysql by @kamil4 in https://github.com/LycheeOrg/Lychee/pull/1289
    • Added file extension to temporary files by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1275
    • Add file ext to tmp file by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1290
    • Fix version of php-exif instead of using dev by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1292
    • Add locale variable by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1291
    • Update php-exif to 0.7.5 by @kamil4 in https://github.com/LycheeOrg/Lychee/pull/1296
    • Use server's default timezone as default timezone by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1297
    • Consistent JSON API incl. Proper Handling of Errors (2nd half of big refactoring) by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1217
    • Add album tracks by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1274
    • Add QR code locales by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1260
    • Fix coloring in scripts by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1305
    • Fix livewire search X by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1306
    • Exception-free wrapper for Laravel's report method. by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1315
    • Fixes #1311 by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1317
    • php artisan lychee:sync failing with Unresolvable dependency resolving bool $enableCLIFormatting by @mederel in https://github.com/LycheeOrg/Lychee/pull/1319
    • Fixes #1323. by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1327
    • Sync frontend for drag / drop by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1308
    • Create CONTRIBUTING.md by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1331
    • Make Linter happy about tests by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1332
    • simplify actions by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1335
    • Improve file handling by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1309
    • Update dependencies by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1337
    • Fixes #1330 by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1339
    • Bump guzzlehttp/guzzle from 7.4.2 to 7.4.3 by @dependabot in https://github.com/LycheeOrg/Lychee/pull/1347
    • Remove executable bit from non-executable files by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1348
    • Fixes #1342 by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1349
    • Test samples for pending PR. by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1352
    • Fix of tests for console commands for pending PR. by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1353
    • Fix missing photos var and add photo title by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1360
    • Remove Google Fonts by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1302
    • Update PHPExif and sync frontend by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1362
    • Migrate install_files scripts to PHP and add more config to .env by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1361
    • Override key:generete command to fix recreating key every time by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1364
    • Bump guzzlehttp/guzzle from 7.4.3 to 7.4.4 by @dependabot in https://github.com/LycheeOrg/Lychee/pull/1365
    • Bump guzzlehttp/guzzle from 7.4.4 to 7.4.5 by @dependabot in https://github.com/LycheeOrg/Lychee/pull/1376
    • Synchronize/update the list of PHP extensions by @kamil4 in https://github.com/LycheeOrg/Lychee/pull/1375
    • New locale strings by @kamil4 in https://github.com/LycheeOrg/Lychee/pull/1377
    • Extractor uses EXIFtool for all types of media, if available. by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1379
    • Enable phpstan by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1336
    • Fix GD (broken by #1336) by @kamil4 in https://github.com/LycheeOrg/Lychee/pull/1386
    • Restore code to fix image dimensions post-rotation by @kamil4 in https://github.com/LycheeOrg/Lychee/pull/1389
    • fixes #1390 by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1392
    • Ensure a local timestamp for mov videos by @kamil4 in https://github.com/LycheeOrg/Lychee/pull/1387
    • Add vietnamese file by @hiensarahly in https://github.com/LycheeOrg/Lychee/pull/1382
    • Fix untranslatable strings by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1371
    • add check about exec + diagnostics output by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1397
    • Make migration of filesize more robust wrt. broken DB by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1394
    • remove old workflow runs by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1393
    • remove broken pipeline by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1400
    • Update to php-exif 0.7.8 by @kamil4 in https://github.com/LycheeOrg/Lychee/pull/1401
    • Improve safety and reliability of lychee:ghostbuster by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1405
    • SQLite does not return a int on getCode() but a string. by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1407
    • Update php-exif to 0.7.9 by @kamil4 in https://github.com/LycheeOrg/Lychee/pull/1408
    • Add "Clear" button to logs by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1374
    • Update php-exif to 0.7.10 by @kamil4 in https://github.com/LycheeOrg/Lychee/pull/1413
    • Use filestreams by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1351

    New Contributors

    • @mederel made their first contribution in https://github.com/LycheeOrg/Lychee/pull/1319
    • @hiensarahly made their first contribution in https://github.com/LycheeOrg/Lychee/pull/1382

    Full Changelog: https://github.com/LycheeOrg/Lychee/compare/v4.5.1...v4.5.2

    Source code(tar.gz)
    Source code(zip)
  • v4.5.1(Aug 6, 2022)

    What's Changed

    • Add indices to speed up query for album covers by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1196
    • Fixes #1192 by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1194
    • add migration to enforce optimization of tables by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1199
    • Added diagnostic for default timezone setting. by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1207
    • Improved file handling by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1203
    • Fix some potential null references by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1213
    • Fixes #1208 by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1212
    • Fix import of video files and thumbnail generation by @kamil4 in https://github.com/LycheeOrg/Lychee/pull/1219
    • Fixes #1221 by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1222
    • Explicitly round new dimensions to integer by @kamil4 in https://github.com/LycheeOrg/Lychee/pull/1235
    • Move filesize to size variants by @Chostakovitch in https://github.com/LycheeOrg/Lychee/pull/1239
    • Belated sync of frontend for PR #1239 by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1245
    • Added a console command to fix the tree by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1252
    • Speed up POST api/Album::getPositionData by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1256
    • Fix geoposition types by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1258
    • Fix dead links by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1263
    • Fix untranslatable strings by @qwerty287 in https://github.com/LycheeOrg/Lychee/pull/1270
    • Fix the path to the ImageOptimizer class by @kamil4 in https://github.com/LycheeOrg/Lychee/pull/1273
    • Added shortcuts via RewriteRule to .htaccess by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1272
    • Add missing indices by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1278

    Full Changelog: https://github.com/LycheeOrg/Lychee/compare/v4.5.0...v4.5.1

    Source code(tar.gz)
    Source code(zip)
  • v4.5.0(Aug 6, 2022)

    What's Changed

    • Fix #1163 : no longer require intl by @yuorfaec in https://github.com/LycheeOrg/Lychee/pull/1164
    • Some fixes by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1172
    • Replace hardcoded php7 with something generic by @kamil4 in https://github.com/LycheeOrg/Lychee/pull/1173
    • Refactor Model Architecture by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1055

    New Contributors

    • @yuorfaec made their first contribution in https://github.com/LycheeOrg/Lychee/pull/1164

    Full Changelog: https://github.com/LycheeOrg/Lychee/compare/v4.4.0...v4.5.0

    Source code(tar.gz)
    Source code(zip)
  • v4.4.0(Dec 3, 2021)

    PHP 7.4 IS NOT LONGER SUPPORTED AND WILL NOT WORK. Expect error 500.

    We are aware this may not be a popular decision.

    Please accept the rationale of such change:

    • Php supported version: we want to stay in the green zone, anything orange is ignored.
    • PHP 8.0 brings lots of improvements: stronger typing, JIT... read more here
    • Spatie requires in all their updated packages to be in version 8.0 (basically some of our dependencies).

    What's Changed

    • Fixes #1149 by @nagmat84 in https://github.com/LycheeOrg/Lychee/pull/1154
    • Fix diagnostics by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1152
    • Upgrade composer and php version by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1145
    • bump to version 4.4.0 + remove unnecessary php-intl requirement by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1157
    • update codecov.yml by @ildyria in https://github.com/LycheeOrg/Lychee/pull/1158

    Full Changelog: https://github.com/LycheeOrg/Lychee/compare/v4.3.6...v4.4.0

    Source code(tar.gz)
    Source code(zip)
    Lychee.zip(12.04 MB)
  • v4.3.6(Nov 23, 2021)

    THIS IS THE LAST VERSION OF LYCHEE WHICH SUPPORTS PHP 7.4.

    • fixes #1059 : Add Cache busting.
    • new #1049 / fixes #1011 : New Photos Email Notification
      • Send an email when new photos were added to albums that have been shared.
      • Use the laravel notification system to send via SMTP, env settings will need to be set up.
      • It is set to send out emails once a week via cron, so the laravel cron job would need to be set up.
      • Neither is required so if people don't want to set those up then it won't affect the operation of Lychee.
      • Add admin setting to toggle the notification option, which enables a user level menu item to change their email. This is purely opt-in, so users can clear their email if they don't wish to receive the emails anymore.
      • The email that gets sent out has been branded lychee, and will group the last week's worth of notifications and send them all out in one email to each user that has an email set up.
    • new #1065 : Add Polish translation.
    • new #1071 : Avoid git rebase conflicts during development on other branches
    • new #1086 : cli sync from from server with option to delete, import via symlink, etc.
    • new #1097 : Make language more gender neutral.
    • fixes #1102 : Character limitation of table column logs.function causes server error 500 for deployments with long installation path
    • fixes #1105 : Fix type issues related to thumbs
    • fixes #1108 : Fixes takestamps.
      • This should correct all instances of incorrect album min/max takestamps and as a bonus be computationally much less expensive.
    • fixes #1110 : round in php8 requires an int or float as the first argument.
    • fixes #1119 : No video upload when ffmpeg is missing
    • new #1122 : Improved French translations.
    • fixes #1121 : Fix lychee:video_data
    • fixes #1033 : A bit of JS to prevent multiple submissions of the migration form.
    • fixes #1127 : The upload_processing_limit parameter only works when uploading images in the admin account. It does not work for images uploaded by other users
    • new #1142 : also support Caps on size format in diagnostics.
    • fixes #1146 : artisan optimize crashes with Unable to prepare route
    • fixes https://github.com/LycheeOrg/Lychee-front/pull/270: Copy To... didn't work correctly
    • fixes https://github.com/LycheeOrg/Lychee-front/issues/273: Wrong support of ' (single quote) in some places
    • fixes #1123: Album renaming did not work reliably
    • new https://github.com/LycheeOrg/Lychee-front/pull/276: Remember user preference for the visibility of the info sidebar
    • fixes https://github.com/LycheeOrg/Lychee-front/pull/278: Fix the menu for smart and tag albums and in public mode, fix import into top-level albums view, fix empty info sidebar for albums

    Full Changelog: https://github.com/LycheeOrg/Lychee/compare/v4.3.4...v4.3.6

    Source code(tar.gz)
    Source code(zip)
    Lychee.zip(12.15 MB)
  • v4.3.4(Jul 9, 2021)

    • new #972 : more versions and dependencies check
    • fixes #954 : Google Motion Photo
    • new #988 : Added raw values of attributes to JSON API
    • new #1000 : Extended search for cameramodel and date.
    • fixes #998 : Use Guzzle7 instead of Guzzle6
    • fixes #994 : Disable login with Legacy if UserAdmin exists
    • new #991 : Add attribute 'filesize_raw' to entity 'Photo'
    • new #1016 : Refactor timestamps
    • fixes #1008 : null error on live photo import
    • new #1041 : Enhance German Translation

    Packaged version of Lychee including the vendor folder. Install process is as follow:

    1. extract the zip file.
    2. create your database and user manually

    Then you have two possibilities:

    • cp .env.example .env
    • edit .env
    • php artisan key:generate
    • php artisan migrate
    • sudo chown -R www-data:www-data .

    or

    • sudo chown -R www-data:www-data . and access from your browser the Lychee installation and follow the installation steps

    See change log: https://lycheeorg.github.io/docs/releases.html See how to update: https://lycheeorg.github.io/docs/update.html See how to upgrade from version 3: https://lycheeorg.github.io/docs/upgrade.html

    Source code(tar.gz)
    Source code(zip)
    Lychee.zip(12.10 MB)
  • v4.3.0(Apr 18, 2021)

    • new #940 : Improved support for touch devices.
    • new #939 : Responsive web design for small screens.
    • fixes #959 : Excluded '/api/Session::init' from CSRF protection (as per the API specs).
    • fixes #959 : Fixes .lycheeignore support.
    • new #942 : Add support for Portuguese language.
    • fixes #927 : Also copy over the password column when migrating from the very old version 3 of Lychee
    • fixes #932 : Public photos hidden

      It adds a new config variable public_photos_hidden, which defaults to 1 (preserving the current behavior). If set to 0, photos individually made public (rather than through an album) will be included in the results of a public search or in public tagged albums. Basically, they will no longer be treated as hidden (even though they still won't be findable through browsing; we could address that as well by making the Public smart album, well, public -- I welcome your input if we should, and if so, what to name the config variable to enabled that, other than public_public wink).


    Packaged version of Lychee including the vendor folder. Install process is as follow:

    1. extract the zip file.
    2. create your database and user manually

    Then you have two possibilities:

    • cp .env.example .env
    • edit .env
    • php artisan key:generate
    • php artisan migrate
    • sudo chown -R www-data:www-data .

    or

    • sudo chown -R www-data:www-data . and access from your browser the Lychee installation and follow the installation steps

    See change log: https://lycheeorg.github.io/docs/releases.html See how to update: https://lycheeorg.github.io/docs/update.html See how to upgrade from version 3: https://lycheeorg.github.io/docs/upgrade.htmlVe

    Source code(tar.gz)
    Source code(zip)
    Lychee.zip(12.00 MB)
  • v4.2.2(Feb 16, 2021)

    • fixes #882 : Password albums were broken.
    • fixes #891 : Download: file not found on password protected Album
    • fixes #895 : Default license display
    • fixes #888 : Refactoring of the rotation code
    • new #887 : Add the possibility to not display the GPS direction on the map
    • new #892 : Add --force option to the Command Line Interface for Takedate
    • fixes #890 : Fix delete bug when selecting multiple sub albums
    • new #901 : Add more diagnostics checks
    • new #905 : Improve Chinese translation
    • fixes #908 : Migration from v3 was broken since version 4.2

      By adding nested set tree, column _lft and _rgt did not exist on first import while the code required it.

    • new #919 : Add the possibility to limit the number of image being processed

      This will lower the memory load on the server, especially on RAM limited instances.

    • fixes #925 : Some user decided to upload pictures without extension, this broke our code...
    • fixes #903 : Windows microtime() was a bit slow, generating collisions in the uploaded file names.

      The file name are now generated from the sha1 hash of the file.

    • new #894 : Extend the functionality of Import from server to have the same interface as from the command line.

    Packaged version of Lychee including the vendor folder. Install process is as follow:

    1. extract the zip file.
    2. create your database and user manually

    Then you have two possibilities:

    • cp .env.example .env
    • edit .env
    • php artisan key:generate
    • php artisan migrate
    • sudo chown -R www-data:www-data .

    or

    • sudo chown -R www-data:www-data . and access from your browser the Lychee installation and follow the installation steps

    See change log: https://lycheeorg.github.io/docs/releases.html See how to update: https://lycheeorg.github.io/docs/update.html See how to upgrade from version 3: https://lycheeorg.github.io/docs/upgrade.htmlVe

    Source code(tar.gz)
    Source code(zip)
    Lychee.zip(11.65 MB)
  • v4.2.1(Jan 24, 2021)

    Custom album covers (#875)

    • new #875 : Add custom cover for albums
      • custom album covers
      • IMPORTANT: support for 3 distinct images for albums dropped (overkill given that 2 are barely visible)

    Packaged version of Lychee including the vendor folder. Install process is as follow:

    1. extract the zip file.
    2. create your database and user manually

    Then you have two possibilities:

    • cp .env.example .env
    • edit .env
    • php artisan key:generate
    • php artisan migrate
    • sudo chown -R www-data:www-data .

    or

    • sudo chown -R www-data:www-data . and access from your browser the Lychee installation and follow the installation steps

    See change log: https://lycheeorg.github.io/docs/releases.html See how to update: https://lycheeorg.github.io/docs/update.html See how to upgrade from version 3: https://lycheeorg.github.io/docs/upgrade.html

    Source code(tar.gz)
    Source code(zip)
    Lychee.zip(11.62 MB)
  • v4.2.0(Jan 24, 2021)

    • fixes #831 - Bad extension filename when you upload *.jpg

      The regression was introduced in 4.0.8 as part of #777.

    • new #874 - Update CLI Takedate
      • add option --timestamp added to set create_at to timestamp of media file for media that lacks EXIF information
      • use same formatting for 'sysdate' as for 'takedate'
    • new #832 - Major rework of backend
      • start using Livewire for the front-end, for now accessible at example.com/livewire if enabled via LIVEWIRE_ENABLED in .env (DO NOT USE, still in development)

      • use Facade AccessControl to access Session information (basically home-brewed Auth Facade)

      • use Facade Lang to access Lang information (Easier to use through the blade template)

      • heavy refactoring of the core, introducing more granularity:

        • Interfaces are Contracts
        • Group Factories
        • use trait on album for smaller dedicated operations
        • add Nested Set theory to Album to allow access to all descendants
      • fixes #843

      • fixes #846

      • fixes #858


    Packaged version of Lychee including the vendor folder. Install process is as follow:

    1. extract the zip file.
    2. create your database and user manually

    Then you have two possibilities:

    • cp .env.example .env
    • edit .env
    • php artisan key:generate
    • php artisan migrate
    • sudo chown -R www-data:www-data .

    or

    • sudo chown -R www-data:www-data . and access from your browser the Lychee installation and follow the installation steps

    See change log: https://lycheeorg.github.io/docs/releases.html See how to update: https://lycheeorg.github.io/docs/update.html See how to upgrade from version 3: https://lycheeorg.github.io/docs/upgrade.html

    Source code(tar.gz)
    Source code(zip)
    Lychee.zip(11.62 MB)
  • v4.1.0(Dec 27, 2020)

    REQUIRE PHP 7.4

    • new #798 : Force migration page.

      when the database is behind the file version, we immediately redirect to a migration page to ensure that database columns are not missing, generating error 500.

    • new #800 : Move to GitHub actions instead of Travis CI.

      They are still available in the Ajax query

    • upd #799 #816 : Require PHP 7.4

      PHP 7.3 is EOL.

    • new #807 : add new command: php artisan lychee:rebuild_albums_takestamps

      there are instances where the album min max takestamps are broken. This allows the user to reset it.

    • upd #808 : Update traditional Chinese files.
    • fixes #813 : some error 500 during installations were not properly caught.
    • fixes #806 : Direct Links of albums do not respect url if lychee installed in subdirectory
    • fixes #811 : fall back to native metadata extraction on error
    • fixes #810 : fix(rss): avoid display feed link in HTML if RSS option is disabled
    • new #819 : add support for WebAuth: Yubikeys & fingerprint & other authentication devices.

      This is only available to the admin login (for now) Also implements shortcut k to pop-up the passwordless login interface.

    • new #822 : add sensitive albums
      • adds a new "flag" so that such folders can be recognized at first glance while being logged in.
      • adds a key-bind h who hides all folders previously marked as sensitive.
      • adds a pink star in the header to notify the user is in a Sensitive folder.
      • Changing this property is either done on clicking on the star or toggling it in the visibility parameters.
      • makes it possible to hide Sensitive folder by default.

      Important note: if a sensitive folder is set as public, it will be revealed by h. If you do not wish such public folder to be visible, set it as hidden.

    • fixes #831 : Use correct file name for small/medium downloads

      fixes a regression bug introduced by #777


    Packaged version of Lychee including the vendor folder. Install process is as follow:

    1. extract the zip file.
    2. create your database and user manually

    Then you have two possibilities:

    • cp .env.example .env
    • edit .env
    • php artisan key:generate
    • php artisan migrate
    • sudo chown -R www-data:www-data .

    or

    • sudo chown -R www-data:www-data . and access from your browser the Lychee installation and follow the installation steps

    See change log: https://lycheeorg.github.io/docs/releases.html See how to update: https://lycheeorg.github.io/docs/update.html See how to upgrade from version 3: https://lycheeorg.github.io/docs/upgrade.html

    Source code(tar.gz)
    Source code(zip)
    Lychee.zip(11.07 MB)
  • v4.0.8(Nov 19, 2020)

    REQUIRE PHP 7.4

    • fixes #783 : Can't rename tag album

      Tag-albums were not accessible by albums.getByID

    • fixes #781 : Fixes a bug which prevented the use of sharing albums between users

      This rare bug was only triggered if a non-admin user was sharing an album with another user.

    • fixes #779 : Fixes some missing information on Tag Albums in the front end.
    • fixes #766 : It is no longer possible to use the 'photo rotation' functionality

      While the buttons are still accessible we now return an error instead of filling up the entire disk space of the server.

    • fixes #751 : In some rare instance, it was not possible to generate video thumbnails

      this is fixed. We try to reextract the 'aperture' property to get the thumbnail. We also added a warning in the case where FFmpeg was not enabled.

    • fixes #769 : when moving pictures in Image view, the second try resulted in failure

      we no longer clear the content of json.album when moving an image. This ensure that the required properties are still accessible

    • fixes : Settings are accessible in Image view

      There were rare sequence of events which prevented the settings view to open.

    • new : /Frame will now display a warning if no pictures are found.

      instead of staying a black screen, we now send an alert()

    • new : Share information are no longer displayed in public mode

      They are still available in the Ajax query

    • upd #773 : Update French localization

      spacing typos in French localization

    • new #771 : Update French localization

      minor changes in the French localization.

    • new #764 : Add Diagnotics warnings if the php init values are too low (less than 30M).
    • new #757 : Add limits on the number of logs seen.

      Too many logs lines where crashing php by using too much memory.

    • new #758 : Add the possibility to chose the picture ordering per album

      the admin can now chose whether to order by name etc per album instead of globally.


    Packaged version of Lychee including the vendor folder. Install process is as follow:

    1. extract the zip file.
    2. create your database and user manually

    Then you have two possibilities:

    • cp .env.example .env
    • edit .env
    • php artisan key:generate
    • php artisan migrate
    • sudo chown -R www-data:www-data .

    or

    • sudo chown -R www-data:www-data . and access from your browser the Lychee installation and follow the installation steps

    See change log: https://lycheeorg.github.io/docs/releases.html See how to update: https://lycheeorg.github.io/docs/update.html See how to upgrade from version 3: https://lycheeorg.github.io/docs/upgrade.html

    Source code(tar.gz)
    Source code(zip)
    Lychee.zip(10.40 MB)
  • v4.0.7(Oct 9, 2020)

    • fixes #584 : Albums that do not allow photo downloads cannot be included as enclosures.

      This checks album permissions before creating the enclosure to add to the feed.

    • new #616 : Add picture rotations

      As known improvements, this code will rotate all images.

    • fixes #621 ( #623 ) : Original migration from v3 is less prone to break
    • new #625 : Better new smart albums

      this allows the ability to add more smart albums and more flexibility in using them.

    • fixes #642 : Permission problem on Windows

      Windows does not understand the concept of readable but not writable permission.

    • new #656 : Add support for FireTV
    • fixes #662 : Error code changes in PhP
    • new #660 : Add new available licenses
    • new #659 : Add lossless image optimization support
    • fixes #668 : Improved French translation
    • new #671 : Add a redirection system

      Instagram uses the hashtag for topics as a result, sharing a lychee link to an album does not work on it. Given example.com/r/123456 will be redirected to example.com/gallery#123456
      and example.com/r/123456/7890 will be redirected to example.com/gallery#123456/7890
      to allow sharing on such plateform.

    • new #667 : Add support for traditional Chinese language
    • new #678 : Add support for Norvegian language
    • new #677 : Make swipping tolerances configurable.
    • fixes #680 : Distinguish UTC vs local video takestamps
    • fixes #708 : More failsafe when migrating from V3.
    • new #704 : Add smart albums by tag

      it is now possible to create smart albums which will take a list of tag and return an album containing the pictures with those tags.

    • new #721 : Upgrade to Laravel version 8
    • new #727 : When checking a password on an album, upon success we also unlock the other albums with that same password.
    • new #749 : Add webp support to the GD handler

    Packaged version of Lychee including the vendor folder. Install process is as follow:

    1. extract the zip file.
    2. create your database and user manually

    Then you have two possibilities:

    • cp .env.example .env
    • edit .env
    • php artisan key:generate
    • php artisan migrate
    • sudo chown -R www-data:www-data .

    or

    • sudo chown -R www-data:www-data . and acces from your browser the Lychee installation and follow the installation steps

    See change log: https://lycheeorg.github.io/docs/releases.html See how to update: https://lycheeorg.github.io/docs/update.html See how to upgrade from version 3: https://lycheeorg.github.io/docs/upgrade.html

    Source code(tar.gz)
    Source code(zip)
    Lychee.zip(10.40 MB)
  • v4.0.6(May 26, 2020)

    • new #588 : add an option to the sync command to 're-sync' images that already exist.

      Since XMP sidecars are now allowed, images with the same checksum will not get updated metadata if the sidecar changes but the checksum remains the same. This adds an optional flag to the lychee:sync command that forces existing images with no change in checksum to get updated metadata from XMP files (if they exist). It only updates the image if the metadata read in differs from the metadata that the image aleady has.

    • new #599 : Added method to get the full path of albums.

      Specifically in the sharing screen, when albums are sometimes named the same (if they are organized by Year and Month), then it is impossible to tell which album you are actually sharing. This adds the ability to get the album's "full path" and sends it down for the sharing settings.

    • fixes #596 : Failing xmp file read results in fallback to native exif extraction.

      If the EXIF succeeds but sidecar fails, it reverts falls into the catch.

    • new #574 : Support of HEIC files and subsequently convert raw files (e.g. .NEF) into jpeg.

      if a raw file is imported such as .nef, php-imagick will try to generate a thumbnail jpeg for it. Note that the extension still needs to be added in your advanced settings.

      Important: Lychee was never meant to convert RAW files such as .nef, .cr2 .arw etc. If you shoot RAW, it is to be able to change exposure, dodge&burn, crop etc. later in a proper image processing software such as Lightroom, > Photoshop, Capture One, Luminar, Darktable … otherwise you better shoot JPEG. Lychee does not intend to provide those functionality.

    • new #594 : Add debug bar for dev install.

      It is disabled by default, even in debug mode. To enable it, set DEBUGBAR_ENABLED to true in your .env file.

    • new #579 : Ghostbuster command to clean up dead symlinks.

      The ghostbuster command also parses the database and see if some symlinks are dead. It will delete the photo from the database in such case. As this behaviour can modify the database, we disable it by default.

    • new #577 : Parse additional xmp sidecars files to update metadata.

      This reads in XMP sidecar files (if they exist). Thankfully, exiftool supports reading in sidecars, so we can use the same technique we're using to read the files. We merge both file and sidecar metadata, taking priority based on user settings (default to prefer image metadata)

    • fixes #581 : Undefined property errors when migrating from 3.1.6.

      The missing license, lens are now taken care off.

    • fixes #565 : No Dropbox Import with Lychee 4.0.0.

      The CSP was a bit too tight, preventing the execution of the script from dropbox.


    Packaged version of Lychee including the vendor folder. Install process is as follow:

    1. extract the zip file.
    2. create your database and user manually

    Then you have two possibilities:

    • cp .env.example .env
    • edit .env
    • php artisan key:generate
    • php artisan migrate
    • sudo chown -R www-data:www-data .

    or

    • sudo chown -R www-data:www-data . and acces from your browser the Lychee installation and follow the installation steps

    See change log: https://lycheeorg.github.io/docs/releases.html See how to update: https://lycheeorg.github.io/docs/update.html See how to upgrade from version 3: https://lycheeorg.github.io/docs/upgrade.html

    Source code(tar.gz)
    Source code(zip)
    Lychee.zip(9.56 MB)
  • v4.0.5(May 15, 2020)

    This is a very minor update version and mostly contains bug fixes and adds fail safe to help user install Lychee.

    • new #551
    • fixes #557
    • fixes #550
    • fixes #460

    Packaged version of Lychee including the vendor folder. Install process is as follow:

    1. extract the zip file.
    2. create your database and user manually

    Then you have two possibilities:

    • cp .env.example .env
    • edit .env
    • php artisan key:generate
    • php artisan migrate
    • sudo chown -R www-data:www-data .

    or

    • sudo chown -R www-data:www-data . and acces from your browser the Lychee installation and follow the installation steps

    See change log: https://github.com/LycheeOrg/Lychee/wiki/Changelog See how to upgrade from version 3: https://github.com/LycheeOrg/Lychee/wiki/Upgrade-from-version-3

    Source code(tar.gz)
    Source code(zip)
    Lychee.zip(10.75 MB)
  • v4.0.4(May 11, 2020)

    This is a very minor update version and mostly contains bug fixes and adds fail safe to help user install Lychee.

    • new Better support for SQLite
    • fixes #539
    • fixes #533
    • fixes #529
    • fixes #525

    Packaged version of Lychee including the vendor folder. Install process is as follow:

    1. extract the zip file.
    2. create your database and user manually

    Then you have two possibilities:

    • cp .env.example .env
    • edit .env
    • php artisan key:generate
    • php artisan migrate
    • sudo chown -R www-data:www-data .

    or

    • sudo chown -R www-data:www-data . and acces from your browser the Lychee installation and follow the installation steps

    See change log: https://github.com/LycheeOrg/Lychee/wiki/Changelog See how to upgrade from version 3: https://github.com/LycheeOrg/Lychee/wiki/Upgrade-from-version-3

    Source code(tar.gz)
    Source code(zip)
    Lychee.zip(10.73 MB)
Owner
Lychee Organisation
The Lychee Organisation
Lychee Organisation
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!

Piwigo 1.8k Apr 14, 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.

GeNx 39 Dec 7, 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

Arnaud Becher 16 Dec 9, 2022
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

Nicolas 16 Oct 13, 2022
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

Pix 10 Nov 26, 2022
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.

Kushang Shah 5 Aug 7, 2022
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

Clément Guillemain 853 Dec 27, 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.

Simple Software LLC 2.2k Jan 5, 2023
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

null 135 Dec 4, 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

catchIT 7 Dec 30, 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.

Jonah Lawrence 2k Jan 9, 2023
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

Piotr Śliwa 879 Dec 30, 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

♚ PH⑦ de Soria™♛ 6 Jul 12, 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.

Laravelista 82 Nov 24, 2022
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

The League of Extraordinary Packages 2.4k Dec 19, 2022
🤹‍♀️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

Wavey 11 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.

Devscast 10 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.

null 59 Oct 5, 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

David Artiss 13 Jan 24, 2022