Lychee 是个很小巧的相册程序,采用PHP Laravel框架编写的。 由于用的pdo, 因此可以很方便的支持sqlite 和 mysql 等。

老灯用过很多相册程序,包括古董级的ImageVue(后面改名叫X3 photo gallery了),Synology的Photo Station和 QNAP的Photo Station, 这些都挺好用的,但是都不免费。

老灯很早之前就做过 Lychee的docker镜像,主要是作为一个docker化的app给小钢炮系统使用, 当时的Lychee还不能支持SQLite数据库,老灯自行加上了。 同时老灯调试时也发现一些bug, 修复之后,也随便回馈给了官方,提交PRT合并到官方repo了。 不得不说,既然当初Lychee被老灯一眼看上了,它还是有那么些优点的。 比如小巧易用,界面简洁,但不失美观。虽然是用PHP写的,但是采用业界流行的框架编写,代码整洁规范且标准。

近期想到,好久没更新Lychee docker镜像了。是不是要更新一下? 然后发现Lychee已经由之前的3.x版本,都升级到4.x了。但是其实没多少变化。

根据我QQ群里朋友的反馈,和我自身的使用经验来看,Lychee确实存在不少问题。而且这些问题是功能设计上的,不是代码上的。

正如我在https://github.com/ttys3/Lychee/issues/1 写的那样,Lychee的问题在于从设计上根本错了。

Lychee is a very easy-to-use photo gallery. simple but beautiful.

However, it does have some design problems

problem 1: user uploaded filename should not randomized or got obfucated. when the file leaves the Lychee app, it should be remaining meaningful, not something like unix timestamp or md5 hash you never know what this file do. a file named dog.jpg is more meaningful than a file named 06d80eb0c50b49a509b49f2424e8c805.jpg

problem 2: source file should not treated like thumbnail in the same level. source file should put in standalone directory. while thumbnail should generated under a dot directory like .lychee-thumb

problem 3: the photo importing feature, which is totally wrong designed while most usage case is, a user who has lot’s of photos on a NAS, the Lychee app should not copy or delete the source file, it should only record the file path and insert it into DB. and then generate the required thumbnails. users who may have TB level photos, if copy again, it will be a lot of space waste and may encounter on performance problem.

Lychee should take Synology Photo Station or Synology Moments as a good example

如果要改进,应该怎么办?

其实都不用自己费脑子。Synology和QNAP这些专业的公司,拥有优秀的产品经理和项目经理,他们做出来的东西,经过了时间和用户的双重考验。 随便拿Synology的Photo Station参考一下吧。 群晖(Synology)提供免费的demo可以让你登录进去体验真正的群晖系统 – DSM, 每次体验时间可长达30分钟。 分析一个相册的功能,足够了。

demo 体验地址: https://demo.synology.com/zh-cn

参考一下群晖的设计,Lychee 应该怎么做?

相册功能重新设计

  1. 相册名就是目录名,相册层级关系,就是目录层级关系。

image

image

  1. 删除相册,就是删除目录及其下所有文件

image

  1. 自动相册创建。当相册根目录下有新目录创建,并且有新文件添加时,新相册就自动创建了,相册名就是目录名。

导入功能重新设计

  1. 用户选择相册,或直接使用当前位置的相册。

  2. 用户选择NAS上的图片源目录(实际上是经过dock volume映射过去的)

  3. lychee扫描源目录所有图片

  4. lychee将源目录图片入库,并生成中图和小图. 源图片路径保持不变,lychee只记录源图片路径。

中图和小图统一放在lychee的.lychee_thumb 目录下, 缩略图路径与源目录路径保持映射关系, 也就是说,不依赖数据库,根本源文件路径,可以计算出缩略图的路径。

上传功能重新设计

  1. 用户选择相册,或直接使用当前位置的相册。

  2. 用户选并上传本地电脑的图片到lychee

  3. lychee将源目录图片入库,并生成中图和小图. 源图片路径为相册所在的目录,文件名不应该被修改成随机字符,因为随机字符意味了这个文件离开了这个系统,连鬼都不知道这个文件是干嘛的。 中图和小图统一放在lychee的.lychee_thumb 目录下, 缩略图路径与源路径保持映射关系。

当然,以上,只是一些思考罢了。一个人的精力是有限的,哪里有这么多时间来做?