diff --git a/docs/releases.md b/docs/releases.md index 143a9539..a1db35d7 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -30,6 +30,84 @@ ## Version 6 +### v6.6.6 😈 + +Released on Jun 11, 2025 + +#### Spicy change: Photo and Album relationships, Colour palette extraction and more! + +Evil number, spicy changes. This release brings a big turn in the way photos and albums are related to each other. +Before version 6.6.6, a photo could only be in one album at a time. This was a willing decision aimed at simplifying the way +photos were accessed and rights were handled. As a result, duplicates would effectively be duplicated rows in the database, which in itself, does not pose a problem of storage. +However, as I was implementing one of the coming feature: a *Timelines* page, it became clear that this was not going to be usable. +Duplicates would be displayed successively in such page and it would be impossible to distinguish them. This became the main reason for this change. + +While doing this change, it also became clear that legacy ids for albums could no longer be preserved. +As a result, we dropped the legacy ids for albums and photos. This means that the remnants of API v1 are now completely gone. + +This release also brings the support of two new languages: Arabic and Dutch. The former is still in early steps as we are still using the Left-to-Right (LTR) layout, +but we are planning to also add Persian (fa) and with it a full Right-to-Left (RTL) display. + +We also added a registration page, which you can enable/disable in your settings. + +Finally for the great supporters of Lychee we added two new features: + +- The ability to create user-groups. This functionality is currently hidden behind a feature flag, but we are planning to make it available soon. + This will allow you to create groups of users and share albums with those groups, simplifying the sharing process. +- The extraction of the dominant colour palette from photos (you will need to enable it in your settings). + + +#### Most notable changes + +`SE` refers to functionalities that are aimed at the Supporter Edition. + +* `new` #3387 : Dutch translations by @ildyria. +* `new` #3396 : Arabic support by @ildyria. +* `new` #3388 : Support space in search terms by @ildyria. + > You can now search for terms with spaces, to do so, you will need to use quotes around the search term. +* `new` #3383 : Add option to disable slideshow by @ildyria. + > One of our users requested the ability to disable the slideshow mode in the photo view. + > Well here it is! Available as an option in the settings page. +* `new` #3384 : Add registration page by @ildyria. + > Registration is disabled by default, but you can enable it in the User Management section of the settings page. +* `new` #3379 : Add option to override the album visibility for smart and tag albums by @ildyria. + > By default, smart albums and tag albums are respecting the access rights of the user to select the pictures. + > One of our users requested the ability to override this visibility constraint. This option is now available in the settings page. +* `SE` #3406 : Add User-groups by @ildyria. + > User Groups are coming. As they do not provide value for the moment, they are hidden behind a feature flag. +* `SE` #3409 : Add color extraction from pictures. by @ildyria. + > This option is available in the image processing section of the settings page. + > It allows you to extract the 5 dominant colours from photos. We provide two different engines for this: + > + > - Slower: `league` does a full sampling and uses ciede2000DeltaE for colour distance calculation. + > - Faster: `farzai` uses spot sampling and k-mean distance. +* `new` #3359 : Refactoring photo-album relation by @ildyria. + > As explained in the introduction, this is a big change which allows a photo to be in multiple albums at the same time instead of being duplicated. + > We are looking forward to the possibilities this opens up for the future. +* `new` #3375 : Drop legacy id by @ildyria. + > Not a big change, but this may impact some of the users who relied on old sharing links. + +#### Other boring changes + +`klo` refers to *Keep the Light On*. In other words, basic software updates. + +* `klo` #3374 : Remove "unjustified" photo layout option from code by @ildyria. + > Long overdue change, unjustified layout had been removed already in version 5. This is cleaning legacy code. +* `klo` #3355 : Remove dependency on parent-id and directly extract from the url by @ildyria. + > Necessary for the change of the photo-album relationship. +* `fixes` #3386 : Fix 500 when the imagick config file does not exists by @ildyria. + > Version 6.6.5 introduced a check to see whether imagick was properly configured to support pdf. + > This check was not working on windows servers as the imagick config file was not present and resulted in a 500 crash. + > We fixed it. +* `klo` #3390 : Add copilot instructions by @ildyria. + > While we are not active AI users, we provide some guidelines for contributors who feel like vibe coding on Lychee. +* `new` #3389 : Compact left menu by @ildyria. + > As we add more and more functionalities, the left menu was getting a bit crowded. This reduces the spacing to avoid having scroll bar. +* `klo` #3356 : Refactoring LiveMetrics to avoid photo.album_id requirement. by @ildyria. + > Necessary for the change of the photo-album relationship. +* `klo` #3426 : Minor documentation improvements by @ildyria. + + ### v6.6.5 Released on May 27, 2025 @@ -56,8 +134,7 @@ This small release fixes an indexing bug in the timeline view mode and adds a fe - An annimation when switching images in the photo view. - A proper login page instead of a modal. - -`klo` refers to *Keep the Light On*. In other words, basic software updates. +#### Most notable changes * `new` #3351 : Add go home link on error page by @ildyria > When directly accessing a photo or album without permission or which does not exists, we customized the error page diff --git a/src/components/widgets/Announcement.astro b/src/components/widgets/Announcement.astro index 22072dee..9c37612a 100644 --- a/src/components/widgets/Announcement.astro +++ b/src/components/widgets/Announcement.astro @@ -10,8 +10,8 @@ >NEW Lychee 6.6.5 is now available! »Lychee 6.6.6 is now available! » {SITE?.name} -
+
{ secondaryLinks.map(({ text, href }, index) => ( <> diff --git a/src/content/post/2025-06-11-version-6-6-6.mdx b/src/content/post/2025-06-11-version-6-6-6.mdx new file mode 100644 index 00000000..71703897 --- /dev/null +++ b/src/content/post/2025-06-11-version-6-6-6.mdx @@ -0,0 +1,61 @@ +--- +publishDate: 2025-06-11T17:00:00Z +author: ildyria +title: 'Version 6.6.6 and what is next?' +excerpt: Why is version 6.6.6 special? What is next on the roadmap for Lychee? +image: https://images.unsplash.com/photo-1660262848906-319f55766d2b?q=80&w=3474&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D +category: Release Notes +tags: + - lychee + - blabla + - Supporter Edition + - v6 +--- + +Five days ago, we looked back on what we have accomplished over the past six months. + +#### What is special about version 6.6.6? + +Today, we are happy to announce the release of Lychee [version 6.6.6](https://github.com/LycheeOrg/Lychee/releases/tag/v6.6.6). An ill-fated version number which marks a brutal change in the way Lychee binds photos to albums. +We are moving from "*a photo can only be in a single album*" to "*a photo can be in multiple albums*". + +To "*render unto Caesar*", [Matthias Nagel](https://github.com/nagmat84) was the first to suggest it, and I was not convinced that it was a good idea. +It has always been a feature that I thought was not needed, and I was afraid that it would complicate the codebase. +Now having worked on creating a timeline view, I can see how useful it is to have a photo in multiple albums: it avoids duplication. + +While invisible to the user, this architecture change has a big impact. By having the relation a photo has a unique album, +it makes it possible to do a file mapping between the photos/albums in Lychee and the files/folders on the backend. +While this is not currently implemented, it could be in the future as this has been a long-standing complaint from some of our users. +By moving to a many-to-many relation between photos and albums, this mapping is no longer an "easy" task, but we believe the benefits outweigh the drawbacks. + +#### Improved way of working with stacked pull requests + +Having so many changes in the codebase in parallel makes it hard to keep track of what is going on, what needs to be reviewed, etc. +To make it easier on our reviewers, we use [stacked pull requests](https://www.stacking.dev/). The idea being that each pull request builds on top of a previous one. +This way the changes are smaller and thus easier to review. + +The first drawback of this approach is that if you use the strategy squash-and-merge, you are facing some issues. + +- While the CI guarantees that if you merge from bottom to top into the main branch, you will not have any issues. + It quickly goes sideway as conflicts between commits are bound to happen and need to be resolved. + The easy way to avoid this is to collapse the stack into a single commit once all the PR are approved before merging into main. +- The second issue is that because of squash-and-merge, you will need to rebase to ensure a nice linear stack and propagate changes up. + A review on the bottom with change requests will impact the PR above it. There are no easy solution to this but some git wizardry. + I will admit that `git reset --soft xxx` has become one of my best friends. + +And finally, the last drawback of this approach is the growing number of PRs waiting to be merged. In itself it is not too annoying but GitHub +does not provide a good visual overview of the state of the stack. For this reason, to increase the visibility of the changes, we have created +a new [new page](https://pr.lycheeorg.dev/) to list all the open pull requests in a stack and their status. +Of course as per open-source tradition, the source code is available on [GitHub](https://github.com/LycheeOrg/Lychee-Pull-Requests). + +A stack is automatically recognized by following the branch naming-convention `feature-name/pr-name`: all the pull requests that start with the same `feature-name/` are part of the same stack. +With this, we hope to make it easier for our reviewers to keep track of the changes and for our users to see what is coming next. + +#### A bit of help, please? + +If you speak Spanish, we would love to take a bit of your time to help us double check the Spanish translation of Lychee. +The pull request is available on [GitHub: #3398](https://github.com/LycheeOrg/Lychee/pull/3398), just add comments to the lines that need to be changed and we will take care of the rest. + +As always, this release would not have been possible without the help of our supporters and hard work of our reviewers. +If you would like to help or join us, we are always looking for more contributors. +Please reach out to us on our [Discord](https://discord.gg/JMPvuRQcTf). \ No newline at end of file diff --git a/src/navigation.js b/src/navigation.js index d36e9da2..06442621 100644 --- a/src/navigation.js +++ b/src/navigation.js @@ -10,8 +10,8 @@ export const headerData = { href: getBlogPermalink(), }, { - text: 'Lychee Version 6 is Live!', - href: getPermalink('2024-10-26-v6', 'post'), + text: 'Version 6.6.6 and what is next?', + href: getPermalink('2025-06-11-version-6-6-6', 'post'), }, { text: 'Current developments', @@ -66,6 +66,7 @@ export const footerData = { { text: 'License', href: getPermalink('/license') }, { text: 'Release Notes', href: getPermalink('/docs/releases.html') }, { text: 'Privacy Policy', href: getPermalink('/privacy-policy') }, + { text: 'Pull Request Dashboard', href: 'https://pr.lycheeorg.dev/' }, ], socialLinks: [ { ariaLabel: 'RSS', icon: 'tabler:rss', href: getAsset('/rss.xml') }, diff --git a/src/pages/get-supporter-edition.astro b/src/pages/get-supporter-edition.astro index 6ed9526c..e38b20b3 100644 --- a/src/pages/get-supporter-edition.astro +++ b/src/pages/get-supporter-edition.astro @@ -129,7 +129,7 @@ const metadata = { tagline="the essentials and a few more" products={['Free', 'Lychee SE']} extra="* This table is summary of Lychee's functionalities and does not represent the large amount of configurations available.
\ - ** A lot of default values are still in English. Any pull requests with translation to your own language would help.
\ + ** Some languages are still untranslated. Any translations provided via weblate will be appreciated.
\ *** This option is not available on SE as they are already hidden." specs={[ { @@ -213,6 +213,11 @@ const metadata = { available: [false, true], isV6: true, }, + { + feature: 'Color palette extraction', + available: [false, true], + isV6: true, + }, { feature: 'Album management', @@ -289,6 +294,34 @@ const metadata = { available: [false, true], isV6: true, }, + + { + feature: 'Timeline', + isHeader: true, + isV6: true, + isSoon: true, + }, + { + feature: 'Standalone page', + available: [true, true], + }, + { + feature: 'Direct date access', + available: [true, true], + }, + { + feature: 'With access control', + available: [true, true], + }, + { + feature: 'Custom granularity', + available: [false, true], + }, + { + feature: 'Custom format', + available: [false, true], + }, + { feature: 'User management', isHeader: true, @@ -297,6 +330,11 @@ const metadata = { feature: 'Login with WebAuthn and Oauth', available: [true, true], }, + { + feature: 'Registration page', + available: [true, true], + isV6: true, + }, { feature: 'Access rights management per album', available: [true, true], @@ -320,38 +358,20 @@ const metadata = { available: [false, true], isV6: true, }, - { - feature: 'User groups', - available: [false, true], - isV6: true, - isSoon: true, - }, { - feature: 'Timeline', + feature: 'User groups', isHeader: true, isV6: true, - isSoon: true, - }, - { - feature: 'Standalone page', - available: [true, true], - }, - { - feature: 'Direct date access', - available: [true, true], }, { - feature: 'With access control', - available: [true, true], - }, - { - feature: 'Custom granularity', + feature: 'Support group admin', available: [false, true], }, { - feature: 'Custom format', + feature: 'Support group sharing', available: [false, true], + isSoon: true, }, @@ -386,6 +406,7 @@ const metadata = { { feature: 'Personal favourites', available: [false, true], + isV6: true, }, {