Giter Site home page Giter Site logo

lycheeorg / lychee Goto Github PK

View Code? Open in Web Editor NEW
3.3K 34.0 295.0 151.9 MB

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

Home Page: https://lycheeorg.github.io/

License: MIT License

PHP 91.04% HTML 0.05% Shell 0.07% Makefile 0.11% Blade 7.10% TypeScript 1.63%
photos photo-management gallery hacktoberfest photo-gallery photo-gallery-application

lychee's Introduction

@LycheeOrg

GitHub Release PHP 8.2 & 8.3 MIT License Downloads
Build Status Code Coverage CII Best Practices Summary OpenSSF Scorecard Quality Gate Status
Website Documentation Changelog Front end repository Docker repository Gitter Discord

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

Notice: master & alpha branches

As LycheeOrg is a very small team, we do not have many maintainers. Most of us have an active work/family life, and as a result, it is no longer possible for us to apply proper 4-eyes principle in the coding reviews.

In order to keep our high code quality, the following changes have been applied.

  • master stays as a stable branch and contains 4-eyes peer-reviewed pull-requests.
  • alpha contains the latest changes (i.e. the above mentionned PR) merged with minimal review.

With this change, we hope to strike a balance between decently paced development (on alpha) and maintaining a robust core (on master).

On Docker, nightly/dev continues to refer to the latest master commit. The alpha tag is updated daily with the content of the associated branch.

That being said, if you like the gallery and would like to contribute, do not hesitate to open pull request. If you would like to see more functionalities added and help us push Lychee, Join the team!

Support the Team

We aim to maintain a free open-source photography library with high quality of code.
Being in control of our own data, our own pictures is something that we value above all.

Through contributions, donations, and sponsorship, you allow Lychee to thrive. Your donations directly support demo server costs, continuous enhancements, and most importantly bug fixes!

Installation

To run Lychee, everything you need is a web-server with PHP 8.2 or later and a database (MySQL/MariaDB, PostgreSQL or SQLite). 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. Run npm install to install node dependencies
  4. Run npm run build to build the front-end
  5. Copy .env.example as .env and edit it to match your parameters
  6. Generate your secret key with php artisan key:generate
  7. 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 Twitter's Card Validator.

ImageMagick

Lychee uses ImageMagick 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 ImageMagick in the settings.

New Photos Email Notification

In order to use the new photos email notification you will need to have configured the MAIL_ variables in your .env to your mail provider & setup cron. Once that is complete you then toggle Send new photos notification emails in the settings. Your users will be able to opt-in to the email notifications by entering their email address in the Notifications setting in the sidebar. Photo notifications will be grouped and sent out once a week to the site admin, album owner & anyone who the album is shared with, if their email has been added. The admin or user who added the photo to an album, will not receive a email notification for the photos they added.

Customizing

You can customize lychee with your own css code. Here you can find a list of available themes.

Troubleshooting

Take a look at the Documentation, particularly the FAQ if you have problems. Discovered a bug? Please create an issue here on GitHub! You can also contact us directly on gitter (login with your github account) or on discord »

Open Source Community Support

PhpStorm

We would like to thank Jetbrains for supporting us with their Open Source Development - Community Support program.

lychee's People

Contributors

alcatr4zz avatar aldjordje avatar alex-phillips avatar bennettscience avatar chostakovitch avatar d7415 avatar dependabot[bot] avatar evoludolab avatar gpotter2 avatar hermzz avatar horlogeskynet avatar ildyria avatar joebordes avatar jprokop1 avatar kamil4 avatar mingan666 avatar nagmat84 avatar nicokaiser avatar pchampio avatar qwerty287 avatar r7l avatar serenabutler avatar sjml avatar timo-reymann avatar tinohager avatar tmp-hallenser avatar ttys3 avatar wladif avatar yoshinorin avatar yuorfaec avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

lychee's Issues

Laravel Debug Bar

I tried to include the laravel debugbar (https://github.com/barryvdh/laravel-debugbar) to lychee. It seems to work, so javascript is loaded in the returned source code, but the div containers in html are missing. So it looks like they are not attached to the view, does anyone else succesfully added the debugbar to lychee? Or any idea what is missing here?

I did the composer require and a lot of cache cleanings and also added debugbar manually as provider, but none of it works.

Better folder structure?

Will lychee-laravel have a better folder structure for storing photos? i.e., not one single giant directory containing all files? This can become unweildy when accessing the pictures via the filesystem directly when you start to get thousands of files.

uncorrect thumbURL name on video upload

The videos import nicely, but i can't delete any of these, due to a false thumbURL in database...
see my screen capture below, the name file doesn't have a dot before jpeg extension !

thumbname

the problem affects only videos, not photos

Can't get video thumbs

Hi

Everything works well in my install but I can't get php-ffmpeg installed correctly :

composer require php-ffmpeg/php-ffmpeg
You are running composer with xdebug enabled. This has a major impact on runtime performance. See https://getcomposer.org/xdebug
Do not run ComposUsing version ^0.13.0 for php-ffmpeg/php-ffmpeg
./composer.json has been updated
Loading composer repositories with package infoUpdating dependencies (including require-dev)         Nothing to install or update
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover
Discovered Package: barryvdh/laravel-debugbar
Discovered Package: bepsvpt/secure-headers
Discovered Package: fideloper/proxy
Discovered Package: laravel/nexmo-notification-channel
Discovered Package: laravel/slack-notification-channel
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Discovered Package: pbmedia/laravel-ffmpeg
Package manifest generated successfully.

I guess it should appear in discovered, but it isn't, any idea ?

Error on composer install

I'm trying to do a clean installation, but I get the following error. If it's my mistake, perhaps you can point me in the right direction? I'm following the installation guide. Thanks.

composer install --no-dev
Loading composer repositories with package information
Installing dependencies from lock file
Nothing to install or update
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover

In Connection.php line 664:

  SQLSTATE[42S02]: Base table or view not found: 1146 Table 'lychee.configs'
  doesn't exist (SQL: select count(*) as aggregate from `configs` where `key`
   = compression_quality)


In PDOConnection.php line 63:

  SQLSTATE[42S02]: Base table or view not found: 1146 Table 'lychee.configs'
  doesn't exist


In PDOConnection.php line 61:

  SQLSTATE[42S02]: Base table or view not found: 1146 Table 'lychee.configs'
  doesn't exist


Script @php artisan package:discover handling the post-autoload-dump event returned with error code 1

Feature: New smart album "Random"

Would be nice to have a smart album that shows a random image in X sec/min or on each page load. We had this feature in our previously used tool and some employees would like to have it back.

I‘d program it myself, but would take a long time, as I am a frontend/node-backend dev, not PHP. Anyway, with good hints and tips (and I saw a well-documented plugin.md here), I would take that effort.

Picture ordering in albums

It would be nice if that setting can be adjusted per album instead of just server wide.
A default system like for licences would be convenient.

Use case: we might want some albums ordered by take date, others by title...

Additionally adding the possibility to reorder manually the pictures inside an album would be a nice addition. Something similar was already implemented in an old version of Lychee (after the fork but on the original repo). To manually reorder some pictures a lock key would be convenient to prevent users from moving pictures from A to B without wanting it.

Readme.md

  • Need to present the project (yet again)
  • should give a simple idea of how to install this version.
  • mention the migration is possible from the last version of Lychee (and how to)

Sub folder display

It would be nice to see at first glance if a folder contains subfolders.

Any idea of a visual for that ? I am not in favor of yet another ribon (like star etc).
Though a small folder discreet icon on the top right might do the trick. Other Ideas ?

404 on php/index.php after fresh install

Detailed description of the problem

Getting a "Server error or API not found." after fresh installation. Reason seems to be a missing index.php file in (also missing) php folder (see screenshot)

lychee_404_error

Steps to reproduce the issue

  • Used this manual to install on server: https://github.com/LycheeOrg/Lychee-Laravel/wiki/Install
  • Everything worked out, DB is set up, no errors.
  • Set public folder to web root.
  • Called website, got 404 when trying to call /php/index.php + "Server error or API not found." (see screenshot)
  • php folder is not present in public folder (should it be?)

Browser and system

server runs with nginx 1.14.1, php 7.1.24, php-fpm

Could this be a problem with the missing .htaccess on nginx? What I tried here is to convert the rewrite rules to nginx config as follows (without success):

location / {
        if (!-e $request_filename){
                rewrite ^(.*)$ /%1 redirect;
        }
        if (!-e $request_filename){
                rewrite ^(.*)$ /index.php break;
        }
    }

Rss feed

Add a module that provide a rss feed of the "x" last pictures added (they need to be publicly available). :)

Album Download counter

It would be nice to be able as an admin or owner of an album to know how many times it has been downloaded. This would be convenient when you have users that you want to provide pictures to for a limited amount of time and you would like to be sure they downloaded them. :)

Shared albums: add `Share with...` to the album context menu.

  1. On click Share with AJAX request the server to get the list of user with whom the album[s] [is/are] not shared with. Use the union to build the list:
    • A is not not shared with alice and bob,
    • B is not shared with bob and charlie.
    • => Selecting A, B will return the alice, bob, charlie
  2. Display list, process is similar to move.

Require upload rights

Possibility to disable "full-photo" for public

I just setup Lychee-Laravel and so far it seems to work pretty well. I have been playing around with it and realized that its a bit weird that public users can see/download a picture in full size/quality. Is it possible to disable this altogether, maybe via a flag or a configuration somewhere?

How to install ?

It would be nice if we document the following processes:

  • installing Lychee-Laravel
  • migrating from Lychee to Lychee-Laravel

Make Starred Album Public?

How can I make the Starred album public? I can make all my starred photos public, but the starred album still isn't public

Add Nextcloud support

Similar to dropbox, there could be an option to import photos from Nextcloud installations.

Cannot create new album on clean install

After a clean install of Lychee-Laravel and migrating the DB (MariaDB), Lychee fails to create a new album, when selected in the UI, because there is a foreign key in the albums table migration with 'parent_id', that must not be empty...

Feature: Add tags for Albums

I thought about extending the Tags Feature such that albums may have tags as well. Then, you could add a parameter or selector for the lychee frame page such that not only the starred photos may be shown but the user can choose to show either starred ones or based on the photos'/albums' tags.

Motivation is, that the selected photos to be shown in the digital frame may vary, depending on mood or think of multiple frames for different family members accessing the same lychee instance.

Table 'lychee.user_album' doesn't exist

Hi!

I'm trying to do a clean install using PHP 7.2.13. When doing ./artisan migrate, the database is populated and everything seems to work fine. I can set up the administrative account and add a new user. When logging in with the new user, however, I get an error which is listed below.

I'm not sure what's wrong here. Maybe the table was forgotten to be created on migration?

I would be pleased if someone could help me with this one because Lychee seems to be awesome!

Again, here are the key facts:

  • installation succeeded without errors so far
  • administrative account set up without problems
  • trying to login with another used yields an error (Firefox tells me it happens when requesting /api/Albums::get)
[2019-02-02 16:23:37] production.ERROR: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'lychee.user_album' doesn't exist (SQL: select * from `albums` where `owner_id` <> 1 and `parent_id` is null and (`id` in (select `album_id` from `user_album` where `user_id` = 1) or (`public` = 1 and `visible_hidden` = 1)) order by `owner_id` asc, `description` desc) {"exception":"[object] (Illuminate\\Database\\QueryException(code: 42S02): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'lychee.user_album' doesn't exist (SQL: select * from `albums` where `owner_id` <> 1 and `parent_id` is null and (`id` in (select `album_id` from `user_album` where `user_id` = 1) or (`public` = 1 and `visible_hidden` = 1)) order by `owner_id` asc, `description` desc) at /var/www/app/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664, Doctrine\\DBAL\\Driver\\PDOException(code: 42S02): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'lychee.user_album' doesn't exist at /var/www/app/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:63, PDOException(code: 42S02): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'lychee.user_album' doesn't exist at /var/www/app/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:61)
[stacktrace]
#0 /var/www/app/vendor/laravel/framework/src/Illuminate/Database/Connection.php(624): Illuminate\\Database\\Connection->runQueryCallback('select * from `...', Array, Object(Closure))
#1 /var/www/app/vendor/laravel/framework/src/Illuminate/Database/Connection.php(333): Illuminate\\Database\\Connection->run('select * from `...', Array, Object(Closure))
#2 /var/www/app/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2082): Illuminate\\Database\\Connection->select('select * from `...', Array, true)
#3 /var/www/app/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2070): Illuminate\\Database\\Query\\Builder->runSelect()
#4 /var/www/app/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2556): Illuminate\\Database\\Query\\Builder->Illuminate\\Database\\Query\\{closure}()
#5 /var/www/app/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2071): Illuminate\\Database\\Query\\Builder->onceWithColumns(Array, Object(Closure))
#6 /var/www/app/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(516): Illuminate\\Database\\Query\\Builder->get(Array)
#7 /var/www/app/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(500): Illuminate\\Database\\Eloquent\\Builder->getModels(Array)
#8 /var/www/app/app/Album.php(206): Illuminate\\Database\\Eloquent\\Builder->get()
#9 /var/www/app/app/Http/Controllers/AlbumsController.php(65): App\\Album::get_albums_user(1)
#10 [internal function]: App\\Http\\Controllers\\AlbumsController->get(Object(Illuminate\\Http\\Request))
#11 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): call_user_func_array(Array, Array)
#12 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\\Routing\\Controller->callAction('get', Array)
#13 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Route.php(212): Illuminate\\Routing\\ControllerDispatcher->dispatch(Object(Illuminate\\Routing\\Route), Object(App\\Http\\Controllers\\AlbumsController), 'get')
#14 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Route.php(169): Illuminate\\Routing\\Route->runController()
#15 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(682): Illuminate\\Routing\\Route->run()
#16 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#17 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#18 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(151): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#19 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#20 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(75): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#21 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(151): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#22 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#23 /var/www/app/vendor/laravel/framework/src/Illuminate/Session/Middleware/AuthenticateSession.php(39): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#24 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(151): Illuminate\\Session\\Middleware\\AuthenticateSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#25 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#26 /var/www/app/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#27 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(151): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#29 /var/www/app/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(63): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#30 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(151): Illuminate\\Session\\Middleware\\StartSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#31 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#32 /var/www/app/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#33 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(151): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#34 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#35 /var/www/app/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(66): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#36 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(151): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#37 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#38 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#39 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(684): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#40 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(659): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#41 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(625): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#42 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(614): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#43 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#44 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#45 /var/www/app/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(21): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#46 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(151): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#47 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#48 /var/www/app/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#49 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(151): Fideloper\\Proxy\\TrustProxies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#50 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#51 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(31): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#52 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(151): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#53 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#54 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(31): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#55 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(151): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#56 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#57 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#58 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(151): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#59 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#60 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(62): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#61 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(151): Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#62 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#63 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#64 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(151): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#65 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(116): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#66 /var/www/app/public/index.php(55): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#67 {main}

Importing returns 404

Import::server and Import::url simply returns 404. No pictures are imported from directory or from link.

Diagnostics

Error: No or wrong property for identifier in database

System Information

Lychee Version: 3.2.9
DB Version: 040000
System: Linux
PHP Version: 7.3
MySQL Version: 10.1.37-MariaDB-0+deb9u1
Imagick: 1
Imagick Active: 1
Imagick Version: 1687
GD Version: 2.2.5

DB structure not compatible with sqlite

I came here from #46 and wanted to test out this version with sqlite. Unfortunately, it seems like one of the database migration is not sqlite-compatible. Here are the logs

Migrating: 2018_11_09_144227_nullable_field_photo

   Illuminate\Database\QueryException  : SQLSTATE[HY000]: General error: 1 Cannot add a NOT NULL column with default value NULL (SQL: alter table "photos" add column "type_temp" varchar not null)

  at /var/www/Programs/personal/lychee/Lychee-Laravel/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664
    660|         // If an exception occurs when attempting to run a query, we'll format the error
    661|         // message to include the bindings with SQL, which will make this exception a
    662|         // lot more helpful to the developer instead of just the database's errors.
    663|         catch (Exception $e) {
  > 664|             throw new QueryException(
    665|                 $query, $this->prepareBindings($bindings), $e
    666|             );
    667|         }
    668|

  Exception trace:

  1   Doctrine\DBAL\Driver\PDOException::("SQLSTATE[HY000]: General error: 1 Cannot add a NOT NULL column with default value NULL")
      /var/www/Programs/personal/lychee/Lychee-Laravel/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:82

  2   PDOException::("SQLSTATE[HY000]: General error: 1 Cannot add a NOT NULL column with default value NULL")
      /var/www/Programs/personal/lychee/Lychee-Laravel/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:80

  Please use the argument -v to see more details.

Zooming of photos

From: https://github.com/electerious/Lychee/issues/762

Hi, first of all, thank you for your hard work on this amazing project. +1 1st_place_medal
Just a question - I looked at the docs and haven't found any keyboard shortuct to zoom image in/out.
If this is not implemented yet, would it be possible to add this feature?
I have datasheets as images and they're very hard to read in fullscreen mode.
I would need to zoom it in.
Thank you.

Example: https://1drv.ms/u/s!Asev3XxUh8b_n5NC9I-CJnZxddgYQw

Add code documentation

Even if the functions are pretty self explanatory. It would be nice to actually have a small documentation above each one.

If that could be done before the release of the V4 that would be top though.

Back button and subfolders

When in a sub folder, it would be nice if ESC or clicking on the back button brings us to the parent folder.

Missing `vendor` folder on clone

Laravel requires a vendor directory to install dependencies with composer. The fix is to mkdir vendor on the server, but we should consider adding an empty directory to the repo for easier installation.

Extract and store GPS data

I'd like to be able to display GPS data along with the rest of the photo info. It looks like there's already some code to extract the GPS data from the EXIF tags in app/Photo.php but it isn't stored or displayed anywhere (as far as I can see).

Ideally I'd like to store Longitude, Latitude, Elevation, and a textual description (eg: London, UK).

The question is, how do store the longitude/latitude? Both MySQL and MariaDB have geospatial fields in their newer versions (MySQL 8+ and MariaDB 10.2+ at least) and from a bit of quick research those seems like fairly extended releases (the LTS for both is 8.0 and 10.3 respectively). AWS provides both of those versions and so does Homestead.

Alternatively, we could store all them as DECIMAL values, but this comes with the downside of not being able to use all the fancy geospatial query functionality, like being able to find all photos within a specific range. At least not without using a third-party search engine like ElasticSearch or Lucene.

A final and more aggressive alternative (and perhaps an idea for another day) is to move all photo metadata to a JSON format and use the builtin MySQL/MariaDB JSON functions to process the data. This would provide the flexibility in the future to add metadata without creating additional fields in the photos table.

Set star to an album

I would like to "set star" to an album like I'm able to star a photo.
The suggested behaviour would be the following:

  • Database table lychee_albums is extended by a binary field 'star', like lychee_photos
  • Context menu for an album has 'set star' like a photo
  • If an album is starred, the table entry becomes a 1 for 'star' field, like photos
  • The smart Album 'starred' (or favorites) shows all starred photos (as before) and additionally all photos of albums which are starred

The idea of marking the album itself as starred and not the photos included in the album at this particular moment, is, that it is dynamically because the album photos may change.

Background (or why would I like to have these kind of functionality):
I have a self-made digital frame on which my lychee gallery photos should be displayed. Therefore, I have built a short php script (can be found here: Lychee_frame ) which hooks to the lychee classes and generate an HTML page showing a random picture directly from the lychee data.

So far, so good. But, there are some albums I want to have in my gallery but do not want to be displayed on the digital frame, e.g. very old pictures or the photo album from our last house conversion.

Therefore, my Idea was to only show starred pictures but it is really not convenient to star hundreds of pictures individually.

Sadly, until now, I was not able to hack my way through the Lychee-front structure..

Thanks for your support!

cheers,
chrobs

Division by zero error on upload

I get this error when uploading some of my pictures. I think it may have to do with GPS coordinates being set to zero by my Camera(?)

↵ (1/1)↵ ErrorException↵↵Division by zero↵
--
in Extractor.php line 230
at HandleExceptions->handleError(2, 'Division by zero', '/var/www/xxxxx/subdomains/xxxxx/html/app/Metadata/Extractor.php', 230, array('rational' => '0/0', 'parts' => array('0', '0')))in Extractor.php line 230
at Extractor->formattedToFloatGPS('0/0')in Extractor.php line 245
at Extractor->getGPSAltitude('0/0', '' . "\0" . '')in Extractor.php line 184
at Extractor->extract('/var/www/xxxxx/subdomains/xxxxxx/html/public/uploads/big/322d2c5b0f8cde11f65652ed8d667ae2.JPG')in PhotoFunctions.php line 321
at PhotoFunctions->add(array('name' => 'DSCN2411.JPG', 'type' => 'image/jpeg', 'tmp_name' => '/tmp/phpMZ7iI4'), '15496269639362')in PhotoController.php line 128
at PhotoController->add(object(Request))
at call_user_func_array(array(object(PhotoController), 'add'), array(object(Request)))in Controller.php line 54
at Controller->callAction('add', array(object(Request)))in ControllerDispatcher.php line 45
at ControllerDispatcher->dispatch(object(Route), object(PhotoController), 'add')in Route.php line 212
at Route->runController()in Route.php line 169
at Route->run()in Router.php line 682

Duplicate entry

Trying to import many photos with "Import from Server" and getting errors "Integrity constraint violation: 1062 Duplicate entry 'NNN' for key 'PRIMARY'" (photos table). That's really annoying.

Frame displays non public pictures.

The current code is:

$photo = Photo::where('star', '=', 1)->inRandomOrder()->first();

This needs to be improved to only display pictures in public folder.

This could also take account of whether the user is logged in or not and display the appropriate selection.

Localization - some glitches

First of all: Thanks for the lightspeed implementation of the localization feature!
Doing german localization I found some glitches in Implementation:

  1. On the main/start page, the word "Albums" at the top center of the page stays unlocalized. Exactly that word was the reason for the issue, because my customer asked me to change this :-)
    It may use the 'ALBUMS' variable too.

  2. On the "Settings" page, the whole part to change the localization is not localizable :-))

Add `.env` file

.env.exmple is helpful for learning how to configure Laravel, but should the repo contain a pre-configured .env for the user? Even an empty document so they encryption key is added to the correct place will make installation easier.

Error on migration

Starting with a fresh v4 installation, trying to migrate from an old Lychee database. The following error returns on the first artisan migrate command:

Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `users` add unique `users_username_unique`(`username`))

Current lychee install is v 3.2.11
DB: update_030211

Shared albums: policy

If an album is shared, do we want to automatically apply it to the children ?
Or is this something that we only do in the sharing panel (click on parent also move children) ?

Update wiki pages for v4

Need to update:

  • Update instructions
  • FAQ
  • Server settings/permissions
  • New features (subalbums, multiuser)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.