Skip to content

Releases: Difegue/LANraragi

LANraragi 0.9.3 - Law (Earthlings on Fire)

28 Dec 23:25
e337c94
Compare
Choose a tag to compare

Merry Christmas! To wrap up the year, I am bringing you the gift of Chinese.

This release clears out a few long-standing feature requests; We haven't had sub-500 issue numbers in a long time!
There are also a fair amount of new features, new plugins(GalleryDL is here!), existing plugin fixes, and API doodads for clients to play with.

I hope you all have an excellent end of the year -- Surely tanks will be finished in 2025.

This update bumps the Perl minversion requirement to v.5.36.0.


🖼️ Thumbnail improvements (#953 / #1059 / #1076)

Last release broke automatic generation of cover thumbnails in an attempt to spam the job queue less; This should now be fixed.
Page thumbnails improved a lot last time but were a bit slower as a result; I've reintroduced some multithreading there so that beefy machines don't get stuck for ages generating all pages if they can help it.

And finally, in what is a bit of a breaking change, the default mount directory for thumbnails has changed.
It used to be a subdirectory of the content folder, but as recent changes made it possible to be its own Docker volume, this made the situation convoluted and hard to work with.

tl;dr /home/koyomi/lanraragi/content/thumb is now /home/koyomi/lanraragi/thumb.
Feel free to set it back to the old location in server settings if you want to keep the old behavior. Sorry for the trouble!

🌟 Added Rating option on WebUI contextMenu (#873, @Hanga7yr)

There's some new shorthand UI for creating and deleting rating:xxx tags.

It might be possible to allow being able to set those ratings from the Reader page as well in the future, like what has been done for Categories... But for now this is only usable in the Index.

📚 Tankoubons are progressing (#519, #1045) (@EfronC)

While there's no UI yet, if you use the API to assign archives to Tankoubons, they will all be grouped under said tank, which will show up in search.
Tankoubons can also now have their own summary and tags -- Tankoubon-specific tags will be added to the sum of the tags of all the contained archives.

The feature is still a WIP and is disabled in the web UI;
Clients can use the grouping mechanism with the search API by using the group_tanks flag.

🈁 Localization support and official CN translation (#617, @Haibersut)

image

This has been a longstanding ask to the point there are maintained translated forks of the server -- There have been attempts to bring localizations in a few times but I never managed to make anything pan out... Until now! Many thanks to @Haibersut for going through with this anew.

LRR is now (mostly) fully localizable, and will adapt its display language to whatever your browser requests (through the Accept-Language header) if it supports it.. Which for now really just means english and chinese.

The current work translates most of the webapp - Some dynamic popup messages will remain untranslated in this release.
More languages coming soon -- If you wish to contribute yourself, feel free to check the Documentation.

🅱️ Base URL support (#363, @alethiophile)

This was another longstanding request for folks who wanted to deploy LANraragi without using an entire toplevel domain or subdomain.
You can now configure base_url_path in lrr.conf to allow for subdirectory deployment.

E.g. if a top-level deployment had the URL manga.example.com, a subdirectory deployment might have the URL example.com/manga. LANraragi can be used as normal, with all its internal URLs rewritten to be under the /manga subdirectory:

  base_url_path => "/manga",

🎁 Other changes

  • Plugin Dev QoL updates (#1091 / #1071 / #1041, @IceBreeze)

    💣 Error handling from plugins is now handled more gracefully at the plugin loader level.
    💥 This really mostly means you can write sloppier code than before and stop caring about error checking -- Any die exceptions thrown from plugins will be mirrored to a proper error message for end users.
    🧩 Plugins can now use named parameters instead of the previous array mechanism - See the Documentation if you fancy migrating.

  • Upload API endpoint (#1085, @psilabs-dev)

    ⬆️ This API implementation (using multipart/form-data encoding) allows users to perform language-agnostic archive migrations or mirrors from their existing archive servers and downloaders to the LRR server via the API, or write comparatively thin HTTP client wrappers around their downloaders that negotiate with and push to LRR during that application's runtime.
    🏣 You can also attach the SHA1 hash of the file to check for file integrity and avoid corruptions during transit.

  • Fix Docker healthcheck failing with proxies and ipv6 (#1040, #1117, @psilabs-dev)

    🐋 The built-in healthcheck is a dumb wget and will false fail in a lot of cases... But we fixed some of them with this update.

  • Plugin updates

    🆕 Add plugin to copy tags from another archive ID (@IceBreeze)
    🆕 Add GalleryDL plugin (#1109, @okaros)
    🧩 [ComicInfo] Add support for elements in ComicInfo files (#1047)
    🧩 [Koromo] Avoid ARRAY garbage tags for unexpected koromo info.json files (#1050, @siliconfeces)
    🧩 [Eze] Check for existing upload_date tag before processing (#1046, @lnhpm)
    🧩 [HDoujin] Improve HDoujin info.txt parsing with additional field support (#1053, @HDoujinDownloader)
    🧩 [RegexParse] Add testing for RegexParse (#1060, @siliconfeces)
    🧩 [HDoujin] Add title and source extraction for HDoujin info files (#1068, @HDoujinDownloader)
    🧩 [nH] Fix local filepaths not being decoded before being used for seach (#1074, @natanane)
    🧩 [nH] Add support to set upload date in timestamp field using epoch stamp (#1077, @shinji257)
    🧩 [FAKKU] Add option to use FAKKU plugin safely (#1082, @nivkner)
    🧩 [ComicInfo] Add Title parsing and updating to ComicInfo (#1098, @shinji257)
    🧩 [Pixiv] Add Pixiv summary (#1105, @psilabs-dev)
    🧩 [FAKKU] Fixed Fakku summary and added thumb folder to gitignore. (#1113, @Nixis198)
    🧩 [RegexParse] Add support for multiple artists in filename (#1084, @IceBreeze)

  • Miscellaneous bugfixes and improvements

    💎 (#1037) Use string-based comparison (cmp) rather than numeric <=> for IDs (@siliconfeces)
    💎 Fix backup generation failing if content folder is Readonly
    💎 Add support for .zst and .tar.zst archives (#1063, @baysonfox)
    💎 (#1055) Fix tag edit fields on mobile (@alethiophile)
    💎 (#1070) Fix Windows uninstall failing if wslconfig.exe is unavailable
    💎 Fix archive count stat not being counted correctly
    💎 Add logging to debug occasional filetype failures on mass downloads
    💎 (#846) Add some basic retry logic for blank content-disposition headers
    💎 Fix the issue where "Pin this Category" doesn't work in Chrome (#1132, @Reiyy)
    💎 Test for file existence before removing mojo/minion/shinobu pid files (#1110, @okaros)
    💎 Fix incorrectly fired page_thumb jobs when the cover is missing
    💎 Update npm, Mojo and Minion versions
    💎 Update perl requirement to v5.36 so we can use try/catch
    💎 Fix incorrect search sorting in some cases (#1122, @psilabs-dev)
    💎 Fix noisy logs (#1125, @psilabs-dev)
    💎 Add docs and permission-fixing to the plugin sideload directory
    💎 Fix search engine not halting token processing when there are no more results

  • API Changes

    🔑 (#1119) Add recordsTotal to /api/search/random
    🔑 (#1085) Implement /api/archives/upload (@psilabs-dev)
    🔑 Fix JSON types on /api/info -- This is a breaking change. (thanks @MegrezZhu for a bugfix on this)
    🔑 Add a cleaner successMessage to metadata update API
    🔑 (#1080) Add total_archives to /api/info
    🔑 (#519) Add parameter to search API to group IDs into tanks if enabled
    🔑 PUT /api/tankoubons/:id/archive is now PUT /api/tankoubons/:id and the payload has changed to accomodate being able to set specific summary/tags for Tanks.

Full Changelog: v.0.9.22...v.0.9.30

Bowie saw Russell as predicting the data avalanche of the Internet. You can attempt to use the information it generates to shore up your preconceptions, or you can simply sit on the banks and watch an endless, ever-broadening stream of information go by. Russell “was right, mean old bastard that he was,” Bowie said in 1997.

LANraragi 0.9.22 - Telling Lies (Adam F mix)

04 Nov 00:17
85f9a6f
Compare
Choose a tag to compare

This update hotfixes the built-in EH downloader to correct issue #1101 - 0.9.3 isn't really ready for an external release but this issue impacts enough people that it's worth getting a quick patch out.
Look at the 0.9.20 release for a fuller changelog since 0.9.1.

Full Changelog: v.0.9.21...v.0.9.22

But if baffling and clunky on record, lines like “gasping for my resurrection” and “come straggling in your tattered remnants” came alive on tour, with Bowie playing a Satanic figure in his performance, coming across as an aging imp of the perverse.

LANraragi 0.9.21 - Telling Lies (Paradox mix)

25 Jul 18:52
d2cd6ad
Compare
Choose a tag to compare

Just a small hotfix release to make things easier for API clients.
Look at the previous release for the full deets!

Full Changelog: v.0.9.20...v.0.9.21

“Telling Lies” lacks a definitive version. Instead it has four faces: a drum-happy mix by Bowie and Plati, originally called the “Feelgood Mix,” which was the first version of “Lies” to be released; a Guy Called Gerald’s “Paradox” mix (dub and ambient brewed in a kettle, with Bowie’s vocal twisted into odd shapes); Adam F.’s buoyant, airy take, with a better chorus/verse join than the LP track.

LANraragi 0.9.2 - Telling Lies

25 Jul 15:15
7bdc218
Compare
Choose a tag to compare

A new release this early!? It's surprising how much stuff you end up with in just a month sometimes.
I hope y'all are having a sugoi summer™️!


📇 Add support for Koharu-style info.yaml (#1023, @siliconfeces)

Another day, another info.yaml spec...
Support for Koharu's yaml syntax has been added to the existing KSK plugin.

🌽 Add a new tag rule for fast replacements (#1015, @nuclear06)

You can now use ns_a:tag_a => ns_b:tag_b to perform replacements.
This works similarly to ns_a:tag_a -> ns_b:tag_b, but uses a hash table to enhance speed.
The result is that this rule is way faster, but only executes after all other tag rules.

🧺 Other changes

  • (#980) Sideloaded plugins in Docker installs are now persisted (@Nixis198)

    📩 Previously, plugins sideloaded through the web client would land alongside the stock plugins, in home/koyomi/lanraragi/lib/LANraragi/Plugin.
    🐋 The issue with this was that Docker installs would lose their sideloaded plugins on every update.
    🐳 Uploaded plugins now land in /home/koyomi/lanraragi/lib/LANraragi/Plugin/Sideloaded, which now has its own VOLUME set for Docker installs. If I ever make a third-party plugin repository, they'll probably install in there as well.

  • (#1022) Fix summary whitespace display

    🗒️ Summaries supported newlines and tabs just fine, but the web client was just eating those up. Things should work better now 👍

  • Plugin changes/fixes

    🧩 (#1007) Allow ksk plugin to handle single-string in yamls alongside arrays
    🧩 (#1012) Updated the FAKKU plugin to add summary support and source tag lookup (@Nixis198)
    🧩 (#993) EH plugin can now handle source tags with https prefix (@anonstash)

  • Miscellaneous bugfixes and improvements

    💎 Updated to Alpine 3.20 for Docker/Win builds
    💎 (#882) Rewrite given/when as if-chains (@siliconfeces)
    💎 Avoid puking out warning when calling trim_crlf with undef (#1026) (@siliconfeces)
    💎 Revert maximum-scale change to fix pinch to zoom
    💎 Ignore source: or date_added: namespaces when building tag cloud (#1013) (@nuclear06)
    💎 (#1006) Use proper locale comparison API for clientside category sorting
    💎 Fix error messages being broken by xml_escape
    💎 Updated Taskbar icon for Windows installs
    💎 Fix PWA app.webappmanifest references
    💎 Use a better placeholder for checkbox menu when there are no categories on the server
    💎 Fix backup restoration failing when setting summaries

Full Changelog: v.0.9.10...v.0.9.20

As a transition piece, “Lies” worked well, getting the band into the frame of mind for what would become Earthling. When they got off the road, Bowie hustled to take a “sonic photograph” of them in the studio before they lost their tour-hardened sound..

LANraragi v.0.9.1 - Dead Man Walking

27 Jun 22:10
fbd98f4
Compare
Choose a tag to compare

d1c4ce390019f3b8a3c194c17b7a693abf62eb062a34a77062a6adb4eb30820a

Can you believe I've left a bunch of stuff pile up on the table again because I wanted to get tanks out in this release and never got to it?

While tanks are still in an unfinished state, this release adds a lot of frontend improvements I think y'all will enjoy. Thanks a lot to everyone who has contributed!


🪟 WSL1 has been deprecated

I keep getting swarmed in Windows support issues because Microsoft would rather slap AI shit into their OS than fix the bitrot in their Linux subsystem.. The issues got too complex to debug properly because of the amount of moving parts (WSL1/2, Alpine versions, Redis versions), so I'm trimming things down and limiting the Windows installer to WSL2-only.

I've gone in and also fixed a few issues that pop up when you only have wsl2 installed, so hopefully there's a sharp decrease in the amount of Windows problems for now. It just works again! Mostly.

Windows users will lose any functional form of dynamic file watching for now. Blame MS, install linux, I don't care anymore*
* If you still need WSL1, Nightly builds will continue to provide "Legacy" MSIs that run on WSL1 and an older version of Alpine.

🐳 Explicitly declare the thumbnail subfolder in Docker installs (#953)

The thumbnail folder defaults to being a subfolder of the content directory, which is usually fine even if your content folder is readonly, as the Docker container will try to fix permissions on it.
But if that subfolder wasn't created yet, permissions fixing would do nothing! The thumbnail folder now needs to be declared as a separate volume to make sure it exists.

If you're updating, make sure to create a new bind mount to your existing thumbnail folder!
Otherwise Docker will create a new volume and the server will regen all thumbs.

🕰️ "On Deck" has been added to the Carousel (#935)

335834363-1e0c4792-3bb4-465f-8957-3db7fead32f9

This will show the last opened files ordered by time, leveraging recent search engine additions.
This is more of a "History" feature than a real On Deck, as it will show even files that have been read to completion.

☑️ Implement multiselect for context menu categories (#918) (@cazendium)

image

Instead of reopening different context menus everytime you want to add/remove one archive to a category, you can now quickly see and reassign categories through a set of checkboxes.

📜 Implement Summary field (#588)

323404087-0d6d4a99-655b-468d-8197-5dcbb315e780

This is a new database field, and can now be populated from plugins and used by API clients.
It's also included in backup/restore alongside other metadata.
...I don't have much to say about it it's just a text blob

🤖 Revamp page thumbnail generation (#885)

Coupled with some efficiency changes in the Reader, it should now be easier to see the progress of the server with new thumbnails, and archives which are already fully cached shouldn't have unneeded lag.

pagethumbs.mp4

🧩 New bundled plugins

🎃 Other changes

  • Miscellaneous frontend patches (@cazendium)

    💠Stop the web page from zooming in when double tapping, such as flipping quickly through pages
    💠Prevent zooming in on mobile when you try to type in a textfield (password, search, editor) or if the tag overlay gets too large
    💠Open LRR without the URL address bar if you save it as a web app on iOS, with custom background color/status bar color

  • (#917) Allow filtering on number of read pages (@owldyn)

    📈 You can now search for galleries with a specific number of pages read using read:20, or with a range: read:>20, read:<=30.
    📊 Much like On Deck, this only works if server-side progress tracking is enabled.

  • (#689) Remove last_used for categories and just sort alphabetically

    🀄 My initial thinking behind sorting by last_used time was that if you use a specific category a bunch it'd float up naturally instead of making you hunt in the dropdown.. But that's never worked too well, so back to alpha sorting we go.
    📍 You can still pin categories if you want them to always show up first.

  • (#975) Try to avoid recreating resized files on every serve

    🏗️ If you have "Resize pages" enabled, the server used to redo the scaling operation dynamically everytime the page was served.
    🐌 Resized pages will now be cached and won't be recreated unless you change the image quality parameter.

  • (#987) Add patterns for timestamp tag rendering (@chierinyan)

    📅 Any tag whose namespace starts with date or time will now be considered a UNIX timestamp by the frontend and parsed as such.
    ㊙️ There's no change to serverside data.

  • (#961) Fix missing XML escapes for title and category data

    〰️ This was mostly a problem with the OPDS feed, but you could technically have raw html in the server MOTD that'd just be parsed on the main index...

  • (#976) Add basic pagination support to OPDS

    📊 Loading the OPDS feed will no longer take years if you have a bunch of files.

  • Miscellaneous bugfixes and improvements

    💎 (#990) Show a more detailed error message if file move fails when using the web uploader (@siliconfeces)
    💎 (#992) Ignore source tags when searching for untagged files (@anonstash)
    💎 (#996) Make install script die on any error (@siliconfeces)
    💎 (#994) Add minimal docker-compose.yml file to documentation (@RexYuan)
    💎 (#975) Preload image size (HEAD requests) asynchronously in Reader (@anonstash)
    💎 (#907/#920) Fix source tag not removing the protocol from URL (@RodolfoFigueroa)
    💎 (#984) The FAKKU plugin now works again (@Nixis198)
    💎 (#989) Changed the Koushoku.yaml plugin to add the "Released" tag. (@Nixis198)
    💎 Windows distro repairs should now show the full results of the wsl.exe commands it invokes
    💎 WSL detection should now work properly if you only have WSL2 installed
    💎 (#985) Log error message if open_filename fails (@siliconfeces)
    💎 (#977) Add PWA manifest (@jacobgkau)
    💎 (#973) Fix unicode parsing problems with plugins that consume YAML (@shinji257)
    💎 (#938) When doing ID lookups with the nH plugin, use filesystem name instead of the name stored in the database
    💎 (#943) Save japanese title from Chaika.moe metadata (@BWsix)
    💎 (#963) Enable SOCKS proxy support (@ypoluektovich)
    💎 (#945) Update Tachiyomi docs (@RePod)
    💎 (#941) Skip offensive warning screen with EH autodownloads (@f8upd8)
    💎 (#940) Update the download URL of Tachiyomi extension (@Seflyx)
    💎 (#865) Lower the intersectionObserver threshold to 50% for progress tracking in infinite scroll
    💎 (#849) Fix new archives with non-ascii characters not being visible in search
    💎 (#899) Add missing decode to batch tag rules to avoid mangling non-ascii characters
    💎 Fix not being able to paste multiple tags if tagger.js is active
    💎 (#904) Fix missing click handlers on theme radiobuttons in settings
    💎 (#903) Use password directly when connecting to Redis (@TomaSajt)
    💎 (#900) Set missing ghostscript device value in PDF page generation (@TomaSajt)
    💎 (#895) Improve first/last page detection filters
    💎 (#889) Don't use variable that's know to be empty/undefined/falsy in error output (@siliconfeces)
    💎 (#887) Prevent secrets file causing a crash if contentdir is readonly
    💎 (#886) Improve archive deletion handling (@siliconfeces)
    💎 Replace both OpenSans and Roboto typefaces with Geist. I think it looks neat!

  • API Changes

    🔑 (#906) Add filesize and filename to archive JSONs
    🔑 (#885) Added /api/archives/:id/files/thumbnails, which will queue a single job with progress reporting to generate thumbnails for all pages of an archive
    🔑 (#885) /api/archives/:id/thumbnail?page=${page} will no longer fire individual jobs for each thumbnail (unless no_fallback is specified)
    🔑 (#911) Search can now use "lastread" as a sort key if you want to sort by last read time.
    🔑 (#588) PUT /api/archives/:id/metadata now accepts summary as a field.
    🔑 (#588) Archive JSONs will now return summary data.
    🔑 last_used has been removed from Category objects. (please scream at me if you need them back even as empty placeholders)

Full Changelog: v.0.9.0...v.0.9.10

As Plati said, the track “begins completely programmed and ends completely live.” It opens with solitary synthesizer flourishes and ends with the sound of live musicians making themselves heard above the din [...] The title line itself is a cruel joke: he’s escaped the past and wound up a zombie.

LANraragi v.0.9.0 - Hallo Spaceboy

31 Oct 13:07
3e10960
Compare
Choose a tag to compare

ecbf30a6df1c84691bc670a2fbb5398a5f99bc71b03b79c6066e576a43e67799

LANraragi release jumpscare! awooooooooooooo

Happy Halloween! 🎃

I wanted to hold off this release until it had a big feature deserving of the major version update, but since it's been so long...
A terrifyingly huge pile of QoL stuff has built up in the meantime! I think you'll find something to enjoy in here.

There's also been some community activity recently, including:

It's not a spooky release without some cold sweat, right? So here's a:

🛑🪟 WARNING FOR OLD WINDOWS VERSIONS 🛑🪟

This new update jumps the Windows Linux distro by quite a few software versions (See "Add AVIF/JPEGXL support to Windows" below), including non-reversible updates to Redis 7 for the database.

I've received spare reports of large databases on WSL1 breaking with the new Redis version and being unable to save changes, so please make a backup of your database folders before updating in case you need to roll back!
In case you updated anyway and hosed yourself, WSL2 should work and allow you to access the app for backup.json generation.


All set? Let's get to the actual changes:

🧛 (#789) "Save archive title" is now a global preference for all plugins

image

With this change, plugins are no longer responsible for handling whether they should update the Archive title or not; They can always just hand off a title suggestion, and it'll only be applied if you enabled this global preference in Plugin Configuration.

It defaults to ON, so you should very much make sure all your plugin settings are set correctly upon updating.

🍬 Archive overlay improvements

image

The reader overlay now features a few additional shortcuts if you're logged in, including a Delete button and a quick Category UI so you can see at a glance which Categories a file belongs to, and add/remove them as you please.

It now also shows the Archive name on top!

🦇 Add AVIF/JPEGXL support to Windows builds (#626 / #792 / #805)

Through the arcane magicks of... Alpine Linux updates!
image

The Horror!

Windows was previously stuck on Alpine 3.12 due to musl's DNS changes breaking downloader support -- As a result they were missing out on recent ImageMagick updates, including the stuff needed for avif/jxl.

3.18 fixed the mess, so I'm quite pleased to finally be rid of dual-legacy Docker image building for the time being.
(the legacy Dockerfile will remain maintained for a bit longer for the poor chaps stuck on aging Synology hardware... update already lads I'm all for reducing ewaste but surely there's a more up to date community linux or something)

🍡 JPEGXL thumbnail support (#825 - @polak14)

image

JPEGXLBROS WE'RE SO BACK unless you're using Chrome because Google decided your meme format didn't have a future

This adds an optional toggle in settings to use JPEGXL instead of JPEG for thumbnail generation. Your existing thumbnails won't be regenerated however, so you should use the "Regenerate all thumbnails" option if you want to switch everything to JXL.

JXL brings slight size improvements, and has less artifacting if you're using high quality thumbnails:

du --apparent-size  
1404    ./jpg sample (HQ thumbnails)
1152    ./jxl sample 
21.88% diff

1180    ./jpg scale (LQ thumbnails)
906     ./jxl scale
30.24% diff


Considering the wins, I might use JXL in "Resize images in Reader" later down the line?
I guess browser support would have to get a bit closer(doesn't even work in Firefox stable smh my head), but with Apple supporting the format it'll probably happen at some point.

💀 Plugin for Koushoku/Anchira YAML files (#833 - @siliconfeces)

image
This plugin adds support for the info.yaml files you can find embedded in files coming from KSK(rip) or Anchira.
We had a full KSK plugin set with downloader and everything, but the website died before we could ship it lmao

This also adds a YAML parsing library(YAML::Syck) to the stock codebase modules, so writing future plugins that parse yaml should be easier.

🧟 LRR now supports OPDS-PSE 1.2 (#791 - @kuroneko995)

OPDS Page Streaming Extension 1.2 adds support for tracking the last time reading progress was updated, so that clients can either use the server progress or their own.

As with everything OPDS, this is quite niche and only Panels for iOS supports it... But as a bonus for API clients, LRR archive objects now expose a lastreadtime value you can use.

👻 Tankoubons are (almost) here! (#519 / #818 - @EfronC)

This update introduces a new way to classify your files, Tankoubons.

Much like Categories, Tanks allow you to regroup multiple archive IDs...
Except that unlike Categories, Tanks have a specific order and will hide their contents from the Archive list and search, effectively allowing you to only show one entry for multiple files, with chapters.
Sounds pretty neat! Except...it's not actually finished! 🫠

0.9.0 only features the API endpoints for tankoubons, allowing API clients to get a headstart on implementing adding/removing archives to/from tanks. The web UI and implementation in search will come in a future release.

🎃 Other changes

  • (#864) Make stats page faster when file access is slow (@siliconfeces)

    📈 Historically, the stats page used to do filesystem operations to count your total archive count and content folder size.
    📉 This could be slow if you were using software forbidden by god cloud-based filesystems.
    📊 Stats now exclusively use the database to compute their information - It might not be filesystem-accurate at all times as a result, but with time I've changed my mind on this and think it's probably better to be database-accurate so we're consistent.

  • Dev environment changes (@siliconfeces)

    💎 The Redis hostname can now be overridden by the environment variable LRR_REDIS_ADDRESS
    🐳 A docker-compose file has been added and documented if you want to setup an environment where the Redis database is in a separate container. it's the docker way™️....

  • (#811) Fix broken encoding for titles (@siliconfeces)

    🀄 get_title didn't handle text encoding properly, which caused non-trivial characters getting mangled in the "add to/remove from category" toasts from last release.

  • (#589) Update themes to use webkit-line-clamp

    〰️ This adds basic support for two-line titles in thumbnail view.
    🏬 If one wants unlimited lines, it's now as easy as removing -webkit-line-clamp: 2; from div.id2 a. Use table view if you want more tbh

  • (#840) Implement title similarity scanning for the Hentag plugin (@siliconfeces)

    🔎 This plugin will now try to find the most similar title to your archive's, instead of relying on exact matches.
    📜 This has been added to a core function (LANraragi::Utils::String::most_similar($title_hint, @titles)), so feel free to reuse this for your own plugins!

  • (#866 - #823) Remove loading='lazy' from Reader (@siliconfeces / @URenko)

    🐌 Lazyloading images was pretty much broken in different ways in both FF and Chrome, so it's been removed for now.

  • (#874) Add missing package-lock.json file and switch to npm ci

    🏗️ This enables easily reproducible builds. I don't know how those newfangled npm things work, okay?
    📦 I'm not quite sure the builds are perfectly reproducible considering cpan installs can use different/later versions of Perl packages depending on the options you give it...ah well

  • Update secret generation so it doesn't only rely on machine hostname

    🧙 The mojo secret is used to authenticate login cookies - Using the hostname alone was a bit weak, so it's now coupled with a randomly-generated string.
    ㊙️ The secret string is generated and stored in the app root folder -- If LRR_DATA_DIRECTORY is declared however, it'll be stored there.

  • Miscellaneous bugfixes and improvements

    💎 (#769) Add missing search cache invalidation to set_isnew
    💎 (#788) Add some more information to the epub warning
    💎 (#792) Eval thumbnail minion job and fail it properly if thumbnail fails to gen
    💎 (#798) Don't add non-ascii artists to EH URL searches
    💎 (#807) Use File::Temp rather than homebrew stuff (@siliconfeces / Additional fixes in #827 - @polak14)
    💎 (#...

Read more

LANraragi v.0.8.90 - The Hearts Filthy Lesson

19 Mar 16:57
3dbce9f
Compare
Choose a tag to compare

621f5c7eb11b1333ead938dc9b3f9716deccd59a21d0b0a38a057f6e7e7ce281

Happy new year! We back on the grind.
I'm still mostly working on non-LRR things at the moment(and playing Pizza Tower, go play pizza tower) but for some reason there's been an insane influx of pull requests recently -- Is this the power of Holopin? Just look at all those contributor avatars down there yooooooooo

As such, this is a plugin-focused release, with a few other nice bonuses. Roll it in!

🛑 Important changes

  • If you're running from source, database_config is now officially in use, and all your non-archive configuration keys will be moved to it the next time you start the server. As a reminder, this DB lives in Redis index 2 by default and can be changed in lrr.conf.

🧩 A morbillion new plugins

Plugins are a nice and easy way to contribute since they're isolated from the rest of the app, so I tend to be more lenient with code review on those!

My outmost thanks go out to everyone who added support for their meme format/websites in this release:

(ok I guess comicinfo.xml isn't really a meme format considering how prevalent it is)

I've started drafting out some design concepts for an eventual plugin git repository so I can be even more lenient with plugins in the future -- Maybe that'll be the big feature to land in 0.9.0.

Other changes

  • (#586) Page count search has been added

    🔎 You can now search for galleries with a specific number of pages with pages:20, or with a page range: pages:>20, pages:<=30.
    🤔 This first version isn't indexed so it might run a bit slow - let me know how it runs for you!

  • (#762) Increase search speed when sorting by non-title tags (@djacks6278)

    🏎️ As we keep carving away at the old shit search code, sorting should now be around 20x faster for non-title sorts.

  • (#682) Progress tracking and "Set this page as thumbnail" now works with infinite scrolling

    ♾️ If you open the Reader in infinite scrolling mode, it'll also now automagically scroll to the page you last read.
    ⌛ Although due to the way infinite scrolling currently works, you might have to wait for all the images to be loaded for that scroll to happen...

  • (#780) Category messages will now give you the name of the category/archive instead of the IDs (@siliconfeces)

    🗂️ heh
    image

  • (#759) Added an option in settings to overwrite existing archives when uploading a new one (@qhua948)

    ⬆️ This only applies to remote downloads and the 'add archive' page.
    🛑 This will delete metadata for old files when they're replaced! Use with caution.

  • (#742) Filter more credit pages & move covers to start (@Asinin3)

    🛺 The reader will now move the following pages to the end when reading: end_card_save_file, notes, artist_info, credit, 999nhnl
    🆙 Likewise, images starting by cover will now be moved to the start by default.

  • Miscellaneous bugfixes and improvements

    💎 (#686) Add top level subfolder option for Folder2Cat script
    💎 (#731) Fix tooltips in the carousel (@pastalian)
    💎 (#732) Fix full page refreshes occasionally breaking the carousel
    💎 (#755) Fix resetting the database not triggering a search index rebuild
    💎 (#760) Fix source: tags not being indexed for search
    💎 (#752 / #778) Fix some old code that was spewing out warnings (@siliconfeces)
    💎 Perl signatures are now allowed in the codebase 👍👍🆒
    💎 Some documentation fixes (@gogim1 , @ForsakenRei)

Full Changelog: v.0.8.81...v.0.8.90

“Hearts” began as a group improvisation in the Leon sessions (Garson started things off by playing a hook on piano, while Eno’s contribution was to loop a French radio broadcast and blast it every four bars) and it shows in the song’s structure, as “Hearts” can seem like a welded-together collection of pieces.

LANraragi v.0.8.81 - I'm Deranged (Lost Highway edit)

23 Dec 21:35
21fa4f4
Compare
Choose a tag to compare

woops lol

This is a hotfix update for v.0.8.8 - I'd recommend checking the release notes for that if you haven't already.
I swear this is the last 2022 release for real trust me bro

  • Miscellaneous bugfixes and improvements

    💎 Fixed OPDS API outputting invalid XML and not formatting its timestamps to the expected format
    💎 Fixed newly added archives not being in the search index unless at least one plugin was ran
    💎 Fixed Linux::Inotify2 not installing anymore and leading the filewatcher to use its default mode
    💎 Updates Linux::Inotify2 to 2.3 on non-Windows versions
    💎 Fix being unable to search with non-Latin1 characters

Full Changelog: v.0.8.8...v.0.8.81

The track’s harmonic stasis and ominous mood better suited the sequence David Lynch used it for on Lost Highway—scoring a driver’s-eye shot of a sped-up stream of highway center lines, a loop of ceaseless, violent motion. “Deranged” also improved in concert, once the song was prised loose from its album mix and given fresh, bloody life by the Outside and Earthling tour bands.

LANraragi v.0.8.8 - I'm Deranged

20 Dec 16:00
a688ff3
Compare
Choose a tag to compare

Happy Holidays from your favorite degeneracy library!
I am bringing you the long-awaited gift of indexes to cap off the year.

🛑 Important changes

If you don't want to read the rest of the changelog:

  • If you're running from source, LRR now requires two supplementary Redis databases, using indexes 2 and 3 by default. You can change those numbers in lrr.conf. (Only database_search is used for now, config will come into use next release)
  • If you update a large instance, search will not work for a bit while the indexes are built -- You can follow the status of the stat_indexes Minion job to see when you can start searching again.
  • The /api/archives/random endpoint has slightly changed, which means third-party clients might have broken random functionality until you update.
  • OPDS-PSE support is in, but won't work for archives that don't use JPEG for their images.

🔍 Search has been rewritten (#555, #444, #563, #657 and more!)

Search has always been the biggest performance bottleneck of the entire server due to using a rather dumb algorithm that always did multiple database passes...
Through the incredible invention of search indexes but for redis, I'm happy to announce that search is now up to 10 times faster for the most used scenarios.

088search_Trim.mp4

Some notes on the search rewrite:

  • Spaces are no longer a delimiter for different tags in a search prompt, commas should now be used instead. This matches what the autocompletion box does and how metadata as a whole is entered into the app, so I don't think this will cause too much pain.
  • Search now requires the index tables to be built (does so on app start, and then updates them as tags/titles/etc are modified), so large instances might take a few mins to get a usable search again after updating.
  • Title searches will work the same as before (quotes or $ for an exact match, ? * _ % as wildcards. )
  • For tags, if you don't use exact matches, tag searches will be wildcarded on both ends (like previous behavior), namespace:tag searches will only be wildcarded at the end (namespace stays intact).
    You can use *namespace:tag if you want the old behavior for some weird reason.

This was one of the biggest jobs on the list, and while it took a few days to get it right I hope you'll enjoy it -- I do think it's quite a gamechanger.
This rewrite doesn't optimize everything (large intersections and sorting by anything else than title will still be a bit slow), so there's certainly still room for improvement.

The new system makes heavy use of Redis sets and sorted sets, which are all lodged in a separate, third database.
See the DB Architecture document. (the config keys moving to a fourth database is a pending change that will land in a future release.)

📚 OPDS PSE Compliance

I've dusted off the OPDS API to make it use the new Search, and took the opportunity to implement a few niceties.

LANraragi now supports OPDS PSE 1.1, which means you can use compatible OPDS clients to read archives page-by-page from the server and update your reading progression. (If server-side progress tracking is enabled)
As a known caveat, OPDS-PSE will currently not work if your archive contains non-JPEG image files.

Considering the surprisingly complete state of third-party LRR clients, I don't think many people use OPDS at all, but it's nice to be a good citizen to standards nonetheless.
And if you can't sideload DuReader, that means you can now use Panels on iOS! At least until Apple finally caves in and allows sideloading on their devices. god bless the EU

Other changes

  • (#646) New EH layout compatibility

    🐼 Both ex and e-h have recently updated their layout and search API - While the old plugin still works fine on the new layouts, it still got a small update to benefit from the changes.
    🔍 You can now search by gID -- this will fall back to title name if no gId found or search failed. (Thanks @polak14 !)
    🍪 The igneous cookie is now supported, which fixes the problem of using ex in non European and American regions. (Thanks @zizzdog !)

  • (#709) Carousel now auto-reloads with every new search + has a nicer empty view

    🎠 whee
    🆕 I couldn't really afford to make the carousel auto-reload before since it relies on Search, which had...yeah.

  • Add basic Redis password support

    💍 You can now set redis_password in lrr.conf in case your Redis server is password-protected.

  • Windows fixes

    🪟 The WSL detection should now work regardless of your system language.
    🛠️ The Windows app should now detect "file not found" WSL failures better.
    🔧 The repair button is also now always available from Settings.

  • Miscellaneous bugfixes and improvements

    💎 Login now redirects you to the page you tried to access beforehand
    💎 Update FontAwesome to v6
    💎 Update Mojolicious to v9.30
    💎 (#396) Allow most common http methods when CORS is enabled
    💎 Fix not being able to redownload an URL after having deleted it from the server without a restart

  • API Changes

    🔑 /api/search/random now uses the same object syntax as /api/search (arcid instead of id, newonly instead of isnew)
    🔑 ?key= can be used again to authenticate API requests. (Mostly just for OPDS, please don't actually use this)

Full Changelog: v.0.8.7...v.0.8.8

Inspired by his and Eno’s trip to the Gugging Psychiatric Clinic in 1994, [...] “Deranged” seems mainly Eno’s work, though one ancestor was Bowie and Nile Rodgers’ “Real Cool World” (there’s also an echo of “Billie Jean” in its opening four-note synth hook)

LANraragi v.0.8.7 - Outside

14 Oct 20:01
fe84fa2
Compare
Choose a tag to compare
b4d48b4b506fa4b075e88ed7fc24661e17d994e82f7677d7a9fcd54ed25a8bf9.mp4

If you can believe it, it's a bugfix update once again!
This is a small update to mostly fix the Windows build, but I've had enough time to throw in some extra bonuses as well.
It's a busy end of the year so LRR is probably going to stay on the backburner for the time being; Although as always, if you want to pitch in a PR for Hacktoberfest, I'll gladly take the time to review it! 🧑‍💻

🪟 Windows installs have been fixed..again! (#673)

Not so much fixed as adapted for Windows 11; The WSL detection wasn't working properly and generating a ton of support requests as a result.
I've also fixed some leftover issues with DistroInstaller, so hopefully this is a smooth experience again now.

🐧 The Docker image has been updated to s6-overlay 3.x (#684)

Thanks to @Guerra24 for this!
This is mostly an internal change that won't affect endusers, but it took a bit of work to make that update so I thought I'd shout it out anyways. (totally not trying to make those release notes at least 50 lines long)

I've said this back in 0.8.6 already but:
⚠️ If you're encountering issues while running on old Linux versions (seen it happen on Synology devices), I recommend you build a custom Docker image yourself using the legacy Dockerfile as a base.

🖼️ Add tentative JPEGXL support (#665)

Much like HEIF exactly 10 releases prior (wow!), jpegxl (.jxl) files are now recognized as valid images by the server.

If you want thumbnail support to work, you'll likely have to install libjxl-dev or similar on your Linux machine.
Said lib isn't out in any stable form of Debian yet, but I'm sure Arch users or similar can get it already.

Windows users don't have that library since it hasn't been backported to Alpine 3.12, so no JXL thumbnails for you! 🤷

Other changes

  • (#672) Add category operation to batch tagging

    😎 You can now serial-add multiple archives to a category through a batch operation. Simple yet effective!
    🤔 The main category UI already allowed you to do this so I'm duplicating a bit, but it makes sense to have that in the batch UI as well.

  • (#671) Update the filemap whenever an ID gets modified

    🔢 The ID update code from 0.8.6 overall worked well, but it was forgetting to update the internal filemap, which would lead to duplicates and other weirdness when running clean database operations.

  • Miscellaneous bugfixes and improvements

    💎 (#678) Make URL downloads use unlimited response size
    💎 step down to x86-64 level 1 for the ffi docker build so that my E350 CPU can still run the Docker image
    💎 (#662) Add some extra filtering to F! search so it performs better (@polak14)
    💎 (#698) Remove the maxlength parameter on tagrules

Full Changelog: v.0.8.6...v.0.8.7

"[Outside] is only symbolically anguished. I think we are in for a very good time when we get to the next millennium."
-- Bowie, press conference, 1995.