Important
You and users MUST log out and log back in after updating for Kavita to function correctly!
v0.7 is finally here and boy is it big! When I started v0.7, I had planned for just a reader refresh and stats, but due to the 4 vacations I had during the development, so much more got added in. This is a massive update with many areas touched, tweaked, and added to, including a lot of bug fixes brought by our community. Let's start with the name of the release.
Stats:
Since the beginning of Kavita, I've always wanted rich metadata and cool stats to understand how much my users and I are reading, what's hot on the server, when is the most popular day for reading, etc. That's what the main feature of this release is about. Adding this cool contextual information into Kavita and presenting to not only the admin, but letting the users see their individual statistics. For example, I've learned since I started this project 2 years ago till this year, I've read 200K pages of manga. I hope you all enjoy the statistics and if you have any ideas, jump on our feature site and let me know.
Image Reader:
Last release I had already started a major cleanup of the image reader (or what I usually call the manga reader), but wasn't able to wrap it up and give it the polish needed before the release, so this release window, I polished until I thought I was looking at a mirror. My focus was not only on improvement on layout but also getting the double page reader down correct and that's what I did. I worked closely with a few members of the community (Thank you @hgourvest and @handy1928) to ensure the double reader works exactly as you'd expect and along the way, added a cool new effect to emulate a comic book page spine). I also added the ability to change pages with swipes, something users have requested. I still have some more items planned, but for now, the reader is solid.
Customization:
Everyone loves customization and so do I, which is why this release I made progress on an overarching set of features I want to add to Kavita. This customization added gives you the power to choose how content from libraries gets included or processed. With the new Library Settings, you can configure certain libraries to not show on any dashboards, in search results, or recommendations or a mix and match. In addition, you can allow or deny the auto creation of Collections (driven from SeriesGroup tag) and just to top it all off, add a custom image for the library icon, so it's easier to distinguish. I hope you enjoy the flexibility these enhancements bring and look forward to what I have in store in future releases.
Manga Manager:
I want to also give a big shout-out to @ThePromidius, the creator of our Tachiyomi plugin, who has built what I believe to be the best ComicInfo tagger around, Manga Manager. Over the past year, he has been putting a lot of time and effort into a rework of his tool and recently released the beta. It's insanely fast and has the potential to outshine all other tools out there. I encourage you to check it out. I have taken a role in his project to help him deliver on a combined vision.
Authentication:
Not so much as something new, more of an alert. All users must re-authenticate (log out then in again) for this release. I made some internal changes in the authentication tokens to allow for some optimizations in our API layer. Again, All users must re-authenticate after update.
Lastly, I want to shout out to some miscellaneous enhancements, like OPDS which received a touch up to include more metadata (authors, genres) in the feeds or to prepend reading order number in reading lists due to Chunky not respecting the spec. Kavita also now auto-creates Collections if SeriesGroup tag is filled out. If you're wondering what about reading lists, I got you covered (in another release). I worked up the code but didn't have time to polish it all out.
With all things said, I appreciate the community for coming out and helping with support and reporting issues and feature requests. Many feature requests were implemented in this release. Thank you to everyone that has reported issues. I encourage the community to speak up if they are facing issues so I can get them fixed.
Added
- Added: Added a new setting under Media to allow covers to be saved as WebP. This results in a x3 savings. There is no task to perform the conversion, just use Refresh Covers on the library.
- Added: Series Detail page now has a dedicated Want to Read button for toggling and also let's you quickly see this is in your want to read list.
- Added: Series Detail page will now show a tag badge showing unread chapters when there is reading progress on the Series Image.
- Added: When there is progress on a series, the continue point will now pretty print under the series cover image. This will only work with volumes and loose leaf chapters. Specials are not shown due to spacing issues.
- Added: Added the ability to turn off folder watching for individual libraries in new library settings Advanced tab.
- Added: Added the ability to turn off including a library's series on Dashboard page.
- Added: Added the ability to turn off including a library's series on Recommended page.
- Added: Added the ability to turn off including a library's series and any derived info in search results.
- Added: Added the ability to upload custom images for libraries (only visible in side nav). Customize to your hearts content!
- Added: Added release date on the reading list item, if it's set in the underlying chapter.
- Added: Added an Open API spec generator that gets saved with codebase. This enables external API reference
- Added: From library settings, admins can now kick off a forced series scan, which ignores last scan date and will act more like a first time scan. This is expensive, but useful if you need to run a full scan after Kavita has migrations.
- Added: New task called Analyze Files which is used to run a one time migration that scans all files and calculates extension and file size information about them for the statistics view.
- Added: Added many new visualizations for server-wide statistics: Total Series, Total Volumes, Total Files, Total Size, Total Genres/People, Top 5 release years, Most active users, Popular Libraries (by read events), Popular Series (by read events), Recently read series, Top Readers (with breakdown of Comics/Manga/Books reading hours and against time periods), Format breakdown and size, Publication Status breakdown, Reading History over time, and most popular reading day.
- Added: Added basic user stats: Total Pages Read, Time Spent Reading, Chapters Read, Last Active, Reading History
- Added: Added back old PDF to image rendering code just for Tachiyomi, so users can get maximum use from the application.
- Added: Added Genre and Authors to Series level OPDS feeds.
- Added: Added summary to Volume and Chapter feeds.
- Added: New API for getting a given chapter's pages' file dimensions
- Added: Added a Save preferences button to save a few preferences from the manga reader directly to user settings.
- Added: Double and Double (manga) now have a shadow effect to emulate a real comic book. You can enabled this via user settings under 'Emulate comic book'
- Added: Added percentage of a given library and average hours read per week to user stats
- Added: When there are multiple files for a chapter, show a count card on the series detail to help user understand duplicates exist.
- Added: Added Size throughout the UI and in the APIs for CDisplayEx integration
- Added: Ability to provide environment variables PUID and PGID which allow running Kavita as a non-root user in a Docker container. If you do not specify these variables, Kavita will run as root. If specified, user and group 'kavita' will be created in the container with the specified UID and GID if they don't already exist. Kavita will then run as that user. (Thank you @mikeymakesit for the contribution)
- Added: More aggressive pre-caching for next and previous chapters. This allows for less lag spikes when switching to another chapter in continuous reading mode on the second page on slower networks.
- Added: Manga reader now has swipe support. You can swipe left, right, up, and down. Swipe will trigger the appropriate page change based on reading direction and reading mode (up/down or left/right). If there is area to scroll, the reader will make sure you hit the end and require another swipe to trigger the page change.
- Added: Users can now click the Words Read count on user stats to view a year over year count
- Added: Added a new Yearly stat table for counting files over the years. This is not hooked up to the UI, but will be in a later release.
- Added: Added new statistics for analytics (Kavita Stats): users with emulate comic book enabled, percentage of libraries with folder watching enabled, percentage of libraries included in search/dashboard/recommended, total reading hours, is server storing cover images as webP.
- Added: New server setting for Host name. If the server sits behind a reverse proxy, this can be set in Host Name and host name will be used for link generation and accessibility checks (aka if the server can be reached from outside the network) will be skipped, thus an email will always send.
- Added: Added the ability to allow a library to generate Collections from SeriesGroup tag in ComicInfo.xml
- Added: New setting in Library settings which allows for Auto Collection generation to be turned off for a library.
- Added: Added a new JWT Claim to allow getting UserId throughout the codebase. All users will need to reauthenticate.
- Added: Added UTC Dates throughout the application. They are not exposed in API, but will come later with localization work. For now, they will be in sync with non-UTC dates.
- Added: (API) ChapterDto from series/chapter and ReadingListItems now have a field LastReadingProgressUtc, which contains the latest reading progress for the authenticated user. This is for CDisplayEx integration.
- Added: Added Library name and File Size for reading list items for CDisplayEx
- Added: Allow changing listening IP addresses from server settings to one or multiple addresses. Defaults to 0.0.0.0,::. This is not available for Docker users. (Thank you @Kupferhirn for your contribution)
- Added: CDisplayEx now supports Kavita. Thank you @hgourvest.
Changed
- Changed: Reworked messaging on Media tab to provide more information about when WebP can be used and what browsers support it.
- Changed: Changed compact numbering to extend to one decimal place (20K -> 20.5K) and applied it to Page Length.
- Changed: If an epub has an invalid language tag set, drop the language altogether rather than saving the invalid tag and later throwing an error
- Changed: Tags, Collections, Genres, and People are all now shown alphabetically throughout the app.
- Changed: Improved support for partial volumes (1.5) in Comic libraries
- Changed: Series Detail buttons now use a proper tooltip
- Changed: Metadata filter Release Year has been renamed to Release to fix up some smaller screen rendering issues.
- Changed: Changed the library settings modal to be a streamlined, wizard-like (for new libraries only) modal.
- Changed: You can now access library settings from side nav
- Changed: When typing the library name in Library settings, the name is checked in real-time.
- Changed: Refactored the design of reading list page to follow more in line with the list view.
- Changed: Redesigned the edit collection tag modal to align with new library settings and provide inline name checks.
- Changed: Redesigned the edit reading list modal to align with new library settings and provide inline name checks (and ability to update the name)
- Changed: Split each (image) renderer up into separate classes to separate logic and make support much easier
- Changed: Progress reporting now requires LibraryId to be passed (api/reader/bookmark). OPDS-PS will reflect this.
- Changed: (Performance) Reduced 4 spots where JOINS were occurring when the extra data wasn't used.
- Changed: Reading list items will prefer book title from Book libraries
- Changed: Reading list items in OPDS will now use the full formatted title, like the Web UI does in addition to series name
- Changed: Reading list items will prepend their order as Chunky does not respect the OPDS sepc.
- Changed: Users can now send non pdf/epub to their devices, so long as they are not Kindle. Requires latest Kavita Email service.
- Changed: Some areas in the UI, like Last Active will now show live updates against the date instead of detailed date information (ie a minute ago)
- Changed: ChapterInfo api will now optionally send file dimensions if requested.
- Changed: Double and Double (Manga) readers will now NOT show double pages in the following conditions: On first page, next page is a wide, current page is a wide, on last page.
- Changed: When switching from single renderer, double renderer will now be smart about page pairs and can put you back a page to ensure you're reading pairs of pages correctly.
- Changed: First time run of Kavita will now wait 12 hours before it sends an install to stats server. This gives users the option to turn it off and gives users the chance to check out the software without muddying up our numbers.
- Changed: (Performance) Slightly sped up word count for epubs
- Changed: (Performance) Replaced WebP conversion with NetVips, which is drastically lighter on memory and CPU
- Changed: Progress dtos now have LastModifed timestamp on them for CDisplayEx API needs.
- Changed: Jump bar and jump bar resuming are disabled when there is a custom sort present
- Changed: (Performance) Reduced an additional db call in chapter info API (readers)
- Changed: Added messaging on Media tab to help the user understand to run the convert covers to WebP, after modifying the setting.
- Changed: On phone, when applying a metadata filter, when clicking apply, collapse the filter automatically.
- Changed: Changed OPDS to be enabled by default for new installs. This should reduce issues with users being confused about it before it's enabled.
- Changed: Made the unread badge smaller to avoid collision with new card count on series detail
- Changed: Default layout mode is now called Scroll to better reflect how it operates.
- Changed: Docker health checks will not log at all anymore
- Changed: Changed Word Count to Length to match the way pages work on info cards
- Changed: Made reading time more clear when min hours is 0
- Changed: Apply more aggressive coalescing when remapping bad metadata keys for epubs.
- Changed: Reduced the padding between icons and text in side nav items
- Changed: When clicking on an activity stream header from dashboard, show the title on the resulting page.
- Changed: Moved the bottom menu on the manga reader up a bit for iOS devices which have a 'handlebar' that can interfere with the buttons
- Changed: Swallow all noisy messages that are from RequestLoggingMiddleware when the log level is on Information or above.
- Changed: All loading indicators in the app are now consistent
- Changed: Updated the word count calculation to be more accurate by taking a book's word count and multiplying by the percentage of the book read.
- Changed: Images are cached more aggressively. The downside is that it can take up to a minute after a cover change to accurately reflect, but the app is more performant.
- Changed: After a download is zipped up (like a series download), delete the temp folder as it's no longer needed (as opposed to waiting for nightly task).
- Changed: server/accessible API will return true if the host name is set.
- Changed: Loading indicator in the manga reader is now center positioned
- Changed: Updated app to Angular 15, including many dependencies and font upgrades
- Changed: Dropped support for iOS 12.5. Supporting old versions was preventing improvements. A very small percentage of our userbase used these devices.
- Changed: Not read badge on cards now follows the top right curvature of the card
- Changed: (Performance) Refactored Genre and Tag maintenance methods in the Scan loop to be faster for lookups.
- Changed: Ensure when grabbing comma separated tags from that we remove duplicates
- Changed: Updated many spelling errors and wordings to be more clear (Thank you @DomenicF for the contribution)
- Changed: (Performance) Sped up the following APIs: collection/search, download/bookmarks, reader/bookmark-info, recommended/quick-reads, recommended/quick-catchup-reads, recommended/highly-rated, recommended/more-in, recommended/rediscover, want-to-read/
Fixed
- Fixed: Fixed: Fixed an issue with adding a new device
- Fixed: Fixed a bug where FOREIGN KEY constraints could be thrown when deleting Series with relations
- Fixed: Fixed a missing check in update library to ensure no libraries are created with same name
- Fixed: Fixed a bug where updating library name wouldn't emit an update event to automatically update side nav
- Fixed: Fixed a bug where reordering the list items could sometimes not update correctly with drag and drop.
- Fixed: Fixed a bug where duplicate collection tags could be created
- Fixed: Fixed a bug where collection tag normalized title was being set to uppercase.
- Fixed: Fixed a bug on series detail when bulk selecting between volume and chapters, the code which determines which chapters are selected didn't take into account mixed layout for Storyline tab.
- Fixed: Fixed a bug where epubs packed with Sigil that had invalid keys wouldn't render TOC. This change will apply extra fallback mapping to help when keys are referenced incorrectly (ie '../Text/file.xhmtl' vs actual of 'Text/file.xhtml' or just 'file.xhtml')
- Fixed: When an epub has a malformed page, Kavita now presents a much better message to the UI than before.
- Fixed: Fixed up the edit series relationship modal on tablet viewports
- Fixed: Fixed a long standing bug where fit to height on tablets wouldn't center the image in manga reader
- Fixed: Fixed an annoying bug where on mobile, the metadata filter drawer would open automatically for no reason.
- Fixed: Fixed a bug where pagination area would be too small when the book's content was less that height on default mode in epub reader.
- Fixed: Fixed an ordering issue where Volume 1 was a single file but also tagged as Chapter 1 and Volume 2 was Chapter 0. Thus Volume 2 was being selected for continue point when Volume 1 should have been.
- Fixed: Fixed fit to width on phones still having a horizontal scrollbar
- Fixed: Fixed a bug where there is extra space under the image when fit to width and on a phone due to pagination going to far
- Fixed: Fixed a bug where fit to height could still have a scrollbar due to the horizontal scrollbar messing with calculations
- Fixed: Fixed a bug in iOS where fullscreen wasn't triggering
- Fixed: Removed an additional unneeded save progress call on loadPage
- Fixed: Snap points for double page reader are now working correctly in all conditions
- Fixed: Webtoon reader will use max width of all images to ensure images align well
- Fixed: On Original scaling mode, users can use the keyboard to scroll around the images without pagination kicking off.
- Fixed: Fixed a bug where reading list detail wouldn't show the picture that was set.
- Fixed: Fixed a bug when clicking on a series rating for the first time, the rating wouldn't show in the modal.
- Fixed: Fixed a bug on scroll mode with immersive mode, the bottom menu bar could clip with the book body
- Fixed: Fixed a bug in reading lists where when deleting an item, order could be miscalculated.
- Fixed: Ensure all series sort orders by SortName are using case invariant
- Fixed: Fixed a bug where if during new word count calculation, new word count is zero, restoring the old count wasn't working.
- Fixed: Don't show 'not much going on' when we are actively downloading in event widget
- Fixed: Fixed an issue where folder watching could be activated when creating a new library, despite it globally being set off
- Fixed: Fixed a few components where lifecycle hooks weren't being called due to not implementing interface
- Fixed: Fixed a bug in reading list title generation to avoid Volume 0 if the underlying file has a title set.
- Fixed: Fixed an edge case in epub reader where epubs with bad keys, when falling back to hacks, could have multiple keys that match the hack algorithm and would throw an error.
- Fixed: Fixed a bug where non-admins couldn't update their OWN reading lists. Reading lists are user-based and not only for admins.
Theme
- Added: Added a new css variable for controlling size of the read triangles: --card-progress-triangle-size
- Added: Themes can now override the color of the header on mobile devices via --theme-color and Kavita will now update both theme color as well as color scheme.
- Changed: Themes no longer need to maintain a complete copy of all css variables, but just include variables they want to override.
- Changed: Updated theme support to be able to customize the tile color dynamically via --tile-color
- Changed: Removed --manga-reader-bg-color as not used
Removed
- Removed: Removed an extremely old check for docker containers that had the data/ mount, when Kavita moved to config/ in Nov 2021.
- Removed: Dropped support for iOS 12.5. Supporting old versions was preventing improvements. A very small percentage of our userbase used these devices.