I'm super excited about the upcoming v39.1 release, especially for Mac users. Over all, this release improves scaling- and image loading performance and fixes some bugs.
Changes:
- Mac versions now capable of using Mac's native image readers, delivering considerably faster reading of multiple image formats
- AVIF reader now handles HDR AVIF images (converts colors to best fitting sRGB color space)
- Improved hardware scaling via TurboJPEG reader (fast scaling from 7/8 to 1/8 of JPEG size)
- Initial (most expensive) scaling can now be performed accelerated by image readers. Initial scaling currently supported by the Mac image reader and TurboJPEG
- Faster thumbnail rendering (warming up metadata in multiple threads instead of on UI thread)
- Fixed problem causing wrong orientation of some written AVIF images
- Fixed support for color indexed PNG files
- Disable color subsampling now available as an AVIF option too
- Fixed bug causing broken icons for some web locations when using HiDPI thumbnails
- Checkbox list now allows multiple selection
- Fix: AlbumImage.saveImage picked the wrong file type
- Increased length of UI targets to 80 chars (SearchBar)
- Reverted Notifier behaviour
- Reverted copy files behaviour
Developer stuff:
- Added Tools menu to System Console
- Added keyboard shortcut for printing profiling data from system console (CTRL/CMD+P)
- Added better scaling profiling data
Installers:
Windows:
https://jalbum.net/download/jAlbum-install.exe
Mac (M-series):
https://jalbum.net/download/jAlbum-M.dmg
Mac (Intel):
https://jalbum.net/download/jAlbum.dmg
Improved initial scaling
jAlbum now hints image readers about the largest desired image size, thereby allowing image readers to perform the, usually expensive, initial scaling as the image is being loaded. This not only speeds up album builds, the initial scaling is also performed using a high quality hardware accelerated scaler (similar to Lanczos), so you may even benefit in image quality. Another advantage of this is lower RAM usage in the image processing pipeline (the Java side won't need to handle the largest image size). Currently two image readers supports initial scaling:
- Mac Image reader
- TurboJPEG image reader
The TurboJPEG image reader however has a caveat to the initial scaling. It is only done in the following ratios: 7/8, 6/8, 5/8, 4/8, 3/8, 2/8 and 1/8, so if your largest image size vs the original image size (width or height) matches these rational numbers, then jAlbum won't need to do the initial (most expensive) scaling itself. jAlbum does usually use hardware (GPU) accelerated scaling, so this improvement mostly matters if you're using one of jAlbum's high quality "smooth" scalers, for instance Lanczos.
Example:
Assume your original JPEG images are 4032x3024. If you multiply 4032 with one of the rational numbers listed above, for instance 2/8, you get 1008, so if you set the "Image bounds" under Settings->Images to 1008x756, then the initial scaling will be performed by the super fast TurboJPEG reader. If you just pick an "even number", like 1000x750, then the image reader will do the initial scaling to 1008x756, followed by jAlbum scaling the image to fit within 1000x750.
Mac image readers
The Mac versions of jAlbum (Intel and M-series) can now utilise Mac's native image readers, so all file formats supported by, for instance Apple Photos and Finder's Preview (57 formats on my Mac), are now available within jAlbum. As Apple has spent considerable time accelerating these readers you will often enjoy several times faster image reading with many formats, for instance:
- Reading HEIF/HEIC files: 7.3x faster
- Reading RAW (Nikon NEF) files: 4.6x faster
- Reading JPEG files: 0.5x faster, i.e. slower than TurboJPEG, but still 2x faster than the classic JPEG reader
TurboJPEG is obviously the "king" of JPEG reading, but if you're scaling your images using any of the slow software scalers (Lanczos for instance), then the reduced scaling time may outweigh the slower read performance. You may however wish to only have the Mac image reader read certain file types. By default, the Mac image reader takes precedence over all other image readers. To for instance make an exception and disable a certain file type (for instance JPEG) from the Mac image reader, select Tools->Mac image readers:
You will now see a dialog showing all supported file types:
To disable any file format from the Mac reader, just untick the relevant checkbox and hit Ok. The change is in effect instantly.
There is also a "master switch" for jAlbum image readers to, for instance disable the Mac image reader, including all its formats, open Preferences->Advanced->Image readers:
You will usually need to restart jAlbum for changes here to take effect.
Profiling for max performance
If you're playing with various settings in order to achieve max album build performance, it may be helpful to see just where jAlbum spends its time. After an album build, you can open jAlbum's System Console (F7) and just hit CTRL/CMD+P in order to print profiling info on the last album build to the system console. For a typical album build, it may look like this (top 10 lines):
CustomScaler.scale: 108 calls 8,911s
Writing: AVIF Image Writer: 142 calls 8,015s
Scale to fit 1600x900: 34 calls 7,288s
Scale to fit 800x400: 34 calls 6,225s
Reading: jAlbum Mac Native Reader: 38 calls 3,277s
Scale to fit 476x380: 3 calls 3,165s
Scale to fit 400x200: 34 calls 0,903s
AlbumBean.processFilters: 179 calls 0,504s
init: 1 calls 0,381s
RotationSupport.adjustOrientation: 40 calls 0,289s
This also reveals what component(s) jAlbum was using for reading and writing image files.