JPEG XL

Info

rules 57
github 35276
reddit 647

JPEG XL

tools 4225
website 1655
adoption 20712
image-compression-forum 0

General chat

welcome 3810
introduce-yourself 291
color 1414
photography 3435
other-codecs 23765
on-topic 24923
off-topic 22701

Voice Channels

General 2147

Archived

bot-spam 4380

benchmarks

fab
2021-08-19 03:45:33
2021-08-19 03:45:57
2021-08-19 03:59:20
only this
2021-08-19 03:59:21
https://discord.com/channels/794206087879852103/803645746661425173/877941366817161227
2021-08-19 03:59:33
and this
2021-08-19 03:59:34
https://discord.com/channels/794206087879852103/803645746661425173/877912076591456257
2021-08-19 03:59:39
seem quite decent
2021-08-19 03:59:48
the rest are blurred
Scope
2021-08-19 04:14:24
Because it's not just normal encoding, all images have only half resolution
fab
2021-08-19 05:00:29
i know but first discord link is 1920x1080 to 1920x1080
2021-08-19 05:00:38
resolution to same resolution
2021-08-19 05:01:08
second you could say because i'm interested
Scope
2021-08-19 05:06:40
This is an upscaling comparison (960x540 >> 1920x1080), not an encoding quality, so it makes no sense to compare JXL without using `--resampling=2`
Scope Some upscalers comparison (960x540 >> 1920x1080) 1. AMD FidelityFX Super Resolution 2. ImageMagick Lanczos 3. `-d 0.1 --resampling=2` 4. Cropped 1920x1080 source
2021-08-19 10:01:10
<https://github.com/libjxl/libjxl/pull/471>
2021-08-19 10:01:20
2021-08-19 10:01:20
2021-08-19 10:01:21
2021-08-19 10:01:22
2021-08-19 10:01:23
2021-08-19 10:01:24
2021-08-19 10:01:24
2021-08-19 10:04:37
Much better now, pretty close to ImageMagick Lanczos
veluca
2021-08-19 10:10:01
you mean Lanczos downsampling + upsampling?
Scope
2021-08-19 10:10:38
Yep
veluca
2021-08-19 10:10:58
interesting...
2021-08-19 10:11:56
I'd have thought it would be better tbh 😛
Scope
2021-08-19 10:12:49
Lanczos has less outline artifacts with the same sharpness
2021-08-19 10:13:13
2021-08-19 10:13:13
2021-08-19 10:13:14
2021-08-19 10:13:14
2021-08-19 10:13:15
2021-08-19 10:13:15
2021-08-19 10:13:16
2021-08-19 10:14:35
Lanczos with some Fabianium magic (same for downsampling and upsampling) `-filter Lanczos -define filter:blur=.9891028367558475`
w
2021-08-19 10:15:48
wow it's almost like jinc / ewa lanczos
2021-08-19 10:17:52
I wish amd made an actual upscaler like nnedi3, or simply just took nnedi3 and made it faster. fidelityfx SR is quite disappointing compared to already existing realtime upscalers based on nnedi such as ngu and fsrcnnx and especially what you're doing here lmao.
Scope
2021-08-19 10:33:18
FSR is pretty good, considering its speed, but it is more tuned for games, not for video or photos and it should not waste a lot of GPU resources, because the GPU will be busy not only with upscaling, but with all the other tasks for game rendering And realtime for video, where ~25 fps (sometimes 60) are usually enough, and games, where there are no limits, are different things (also games usually use higher bits of color data and FSR is also tuned for this)
w
2021-08-19 10:55:07
I also wish what you say about games using higher bits of color is true
Scope
2021-08-19 11:15:08
The final frame is rendered in the same bits as the user's display supports, but the internal processes, shaders, effects, textures, postprocessing and so on mostly work at higher bits <https://aschrein.github.io/2019/08/11/metro_breakdown.html>
Scope Lanczos has less outline artifacts with the same sharpness
2021-08-20 01:20:30
Lanczos IM downsampling Gigapixel AI upscaling (standard model without tuning settings) <:Thonk:805904896879493180>
2021-08-20 01:20:39
2021-08-20 01:20:39
2021-08-20 01:20:40
2021-08-20 01:20:40
2021-08-20 01:20:41
2021-08-20 01:20:42
2021-08-20 01:20:42
Jyrki Alakuijala
2021-08-20 02:30:28
Scope, thank you for keeping us in check with this
2021-08-20 02:31:11
For getting intended results from the JXL upscaling you need to use the downscaling in JXL
2021-08-20 02:31:46
The current version is a work-in-progress and is about to take the next step today
2021-08-20 02:38:10
The theoretical win that JXL's non-separable filtering should have is in oblique features -- not pixelizing them
2021-08-20 02:38:17
JXL:
2021-08-20 02:38:45
IM Lanczos:
2021-08-20 02:39:23
but looks like we still have problems that eat the gains that we might eventually get from solving that
Scope
Scope <https://github.com/libjxl/libjxl/pull/471>
2021-08-20 02:44:57
Yep, I used `--resampling=2` on the full image in this comparison ^ (but, without today's changes), downsampling was used only for the other resamplers And I started this comparison because the images after the JXL resampler (without the recent changes) looked strange
Jyrki Alakuijala
2021-08-20 02:46:40
correct observation and very good guidance for us, thank you!!
2021-08-20 02:47:05
I have four more small ideas that will improve the resampling a bit
2021-08-20 02:47:22
naturally when upsampling is a linear filter of 25 pixels, it will not be as good as neural upsampling
2021-08-20 02:48:16
particularly, it is not possible to gracefully interpolate all thing lines in different angles, and not even slowly developing edges in situations where the required subpixel ringing would be visible
2021-08-20 02:48:58
I am hoping that we will eventually (soon) be able to produce better results than IM lanczos
2021-08-20 02:49:49
with decent decoding speed -- and be able to layer them with 2x resampled VarDCT d2 for photos with d8 modular for a few shiny random pixels, text and graphics
2021-08-20 02:50:12
the layering will require a lot of heuristics and will not happen soon
2021-08-20 02:50:36
but the resampling is easier and we can make further improvements there
Scope
2021-08-20 02:56:18
Yes, neural upsampling was just for comparison, good methods are quite slow and most create a very unnatural image And strange results with `--resampling=2` I noticed a long time ago, but was not sure how it works, thought that maybe it is something much smaller than x2 downsampling or maybe it works on different principles for higher speed and it is incorrect to compare it with normal resamplers
Jyrki Alakuijala
2021-08-20 03:46:46
It is fair game to compare just like you are doing. Also very helpful for me to make further decisions about it.
2021-08-20 03:54:05
the good news is that if Lanczos / bicubic produces better or equally results than our 5x5 non-separable upsampler, a user just stop doing the jpeg xl upsampling and leave it up to skia/Chrome to resample
2021-08-20 03:54:55
my belief is that the 45 degree angles are the worst case behaviour for separable resamplers (lanczos/bicubic), and there we do a better job
2021-08-20 03:55:41
unfortunately, at 20-30 degree angle, there is no similar big win any more, and our non-separable will also expose pixel grid in the rendering artefacts (neural methods with larger support can easily fix things there, too)
2021-08-20 03:57:13
I like to put a lot of weight on the worst case behaviour and reduce the worst case error -- and there non-separable does have some success with the 45-degree edges
Scope
2021-08-20 04:13:31
Yes, or in the future I think it would also be nice to use the development of some of the highest quality variations of upsamplers (today most likely using the GPU), which could be integrated into browsers and any other formats and applications would use them, and the quality of these upsamplers would develop independently And about using for quality improvement during encoding, I think that the best method would not be to reduce whole image (especially when encoder has full image and "knows" how it was in source, unlike usual upsamplers), but selective approach, some parts/details would be better to keep in original resolution, than to try to reconstruct them later
Scope <https://github.com/libjxl/libjxl/pull/471>
2021-08-20 05:37:31
<https://github.com/libjxl/libjxl/commit/e00ac5788b769b14af8a543d6572aee615513649> 1. IM `-filter Cosine -resize 960x540` + IM `-filter Lanczos -define filter:blur=.9891028367558475 -resize 1920x1080` 2. JXL `-d 0.01 --resampling=2`
2021-08-20 05:37:44
2021-08-20 05:37:45
2021-08-20 05:37:46
2021-08-20 05:37:47
2021-08-20 05:37:48
2021-08-20 05:37:49
2021-08-20 05:37:51
2021-08-20 05:37:51
2021-08-20 05:37:53
2021-08-20 05:37:53
2021-08-20 05:37:55
2021-08-20 05:37:55
2021-08-20 05:37:56
2021-08-20 05:37:57
Scope
2021-08-20 05:47:44
For me, I notice differences in these areas where JXL has slightly worse results (but in others it can be better), a screenshot just to indicate the area
2021-08-20 05:49:29
2021-08-20 05:51:26
JXL has more thickened and distorted lines
Scope
2021-08-20 05:54:25
2021-08-20 05:59:11
And also I like the text in the other images with Lanczos more, although this is only on high quality images, I'm not sure that it will be better with noticeable compression artifacts
2021-08-20 11:31:41
Also, about AV1 Superres
2021-08-20 11:33:11
However, it is not very effective for still images <:SadOrange:806131742636507177>
Jyrki Alakuijala
Scope
2021-08-21 03:18:51
when I look at these images something strange has happened there in this post (not in the previous):
Scope However, it is not very effective for still images <:SadOrange:806131742636507177>
2021-08-21 03:20:36
AVIF tends to do a great job on low bpp in any case, I believe that because of the "tool" choices in JPEG XL we will get a 10-15 % improvement in low bpp area due to 2x2 resampling.
Scope
2021-08-21 03:20:39
Yes, because this is a scaling in the viewer, these images are not for comparison, only to point out the places I am talking about, it is better to compare in full images
Jyrki Alakuijala
2021-08-21 03:21:09
do you happen to know the support length of lanczos used in IM ?
2021-08-21 03:21:27
is it expressable by 5 pixel support?
Scope
2021-08-21 03:26:29
No, I didn't go into details, I just used Lanczos because it is usually the most versatile and even by various metrics usually outperforms the other known upscalers (if exclude ML and other more computationally-heavy ones)
2021-08-21 03:29:41
Perhaps there is something better, but my idea was to compare it with something fairly common
diskorduser
2021-08-21 03:31:31
Does FSR works better than or worse lanczos? I have tried line art images with FSR. It looks good
Scope
2021-08-21 03:34:07
Quite good, sometimes better, sometimes worse, it is also quite good at removing various artifacts and very fast (but unless it always needs to use the GPU) and it is also based on Lanczos
2021-08-21 03:34:57
https://twitter.com/RyanSmithAT/status/1423012754718289923
2021-08-21 03:36:44
2021-08-21 03:36:49
2021-08-21 03:40:13
But FSR is designed and optimized for games, not for normal image or video upscaling
diskorduser
2021-08-21 03:40:36
I have seen people calling it a improved lanczos before it was released.
Jyrki Alakuijala
2021-08-21 03:41:39
http://www.johncostella.com/magic/mks.pdf is also interesting
2021-08-21 03:42:25
my personal interest in the sampling was for 4x4 and 8x8 upsampling, for DC previews
2021-08-21 03:42:53
there, my focus was more on not having details (artifacts) present that disappear later when the full image arrives
2021-08-21 03:43:23
the worst artefact in showing 8x8 or 4x4 dc (in experimentation in pik) as well as 8x8 in jpeg is the pixel structure surfacing from the 8x8 grid
2021-08-21 03:43:42
lanczos or bicubic doesn't do a great job in removing it
2021-08-21 03:44:25
there I noticed that a non-separable filter can do better than a separable filter
2021-08-21 03:45:19
for 2x2 upsampling it is less of an issue, but still it matters a bit
2021-08-21 03:46:25
the upsampling in jpeg xl has non-linearities that make it impossible to reach the finest line widths, but those may reduce ringing
2021-08-21 03:46:47
we clamp the values within min/max ranges of original pixels
2021-08-21 03:47:08
this is great for flat edges, but not so good for the thinnest lines
2021-08-21 03:48:08
we added the decoding-side clamping before we had iterative downsampling so we don't know very well if the decoding-side clamping is an improvement or degradation right now
2021-08-21 03:48:49
and if that will make it impossible to achieve lanczos like quality for the thinnest lines
2021-08-21 03:49:20
in any case it should give less pixelization and likely less ringing at edges
Scope
2021-08-21 03:51:41
Is there no way to take any clarifying data from the full image? Because it's not just upsampling when the source image is completely unknown, but JXL has access to the full image before downsampling (although lossy compression will be an issue here as well, because it's already a distorted image compared to the source)
fab
2021-08-21 04:00:26
jxl preserves good the hair with new heuristics s 5
2021-08-21 04:01:02
if you want more preservation of banding and grey texts and less ringing s7 is way better
2021-08-21 04:01:08
without new heuristics
2021-08-21 04:01:35
to me would be good if the two heuristics were all the two good
Scope
Jyrki Alakuijala http://www.johncostella.com/magic/mks.pdf is also interesting
2021-08-21 07:19:17
Also https://news.ycombinator.com/item?id=26513518
2021-08-23 05:21:36
https://arxiv.org/abs/1708.07029v3
NeRd
2021-08-23 07:06:33
PNG: ``` 146 718 - oxipng 124 692 - optimised with many programs (the uploaded file) ``` JXL (v0.5.0, MacOS): ``` 171 877 - -q 100 138 974 - -q 100 -e 9 133 996 - -q 100 -e 9 -E 3 -I 1 133 844 - -q 100 -e 9 -E 3 -I 1 -g 0 122 781 - -q 100 -e 9 --palette 1000000 -I 2.46 -g 3 118 651 - -q 100 -e 9 --palette 1000000 -I 1 -g 3 -P 0 ``` WebP: ``` 102 992 - -lossless 101 450 - -lossless -z 9 ``` Does anyone know why JPEG-XL struggles with this image, while WebP is able to perform better, or does anyone have some parameter suggestions which outperform WebP? -P 0 was a happy mistake, I meant to try something else but mistyped.
veluca
2021-08-23 08:38:43
try -g 3 -I 0 -P 0 -e 9
2021-08-23 08:39:13
or other small -P values
eddie.zato
eddie.zato <:PepeOK:805388754545934396> ``` PS > cjxl 0.jpg 8p.jxl -j -e 8 --patches=0 JPEG XL encoder v0.5.0 [SSE4] Read 1988x3056 image, 52.9 MP/s Encoding [VarDCT, d1.000, kitten], 4 threads. Compressed to 1298130 bytes (1.709 bpp). 1988 x 3056, 0.55 MP/s [0.55, 0.55], 1 reps, 4 threads. PS > ls -File | Format-Table Name,Length Name Length ---- ------ 0.jpg 2097141 7.jxl 1300653 8.jxl 4397281 8p.jxl 1298130 ```
2021-08-23 11:42:28
Ok, there is some progress: ``` cjxl 0.jpg 7.jxl -j -e 7 cjxl 0.jpg 8.jxl -j -e 8 cjxl 0.jpg 8p.jxl -j -e 8 --patches=0 JPEG XL encoder v0.6.0 688f915 [SSE4] Name Length ---- ------ 0.jpg 2097141 7.jxl 1291696 8.jxl 1297652 8p.jxl 1297029 ```
veluca
2021-08-23 11:53:43
try with `-s 9 -I 0 --patches=0 -g 3 -P 0` 🙂 or -s 8 if you want that to be faster
2021-08-23 11:55:19
nah, doesn't work
diskorduser
2021-08-31 06:41:17
https://imagick-filters-comparison.netlify.app/
2021-08-31 06:44:00
Is robidoux / robidouxsharp better than lanczos for downscaling?
_wb_
2021-08-31 06:49:44
I prefer Mitchell myself, but it's a matter of taste
2021-08-31 06:50:36
Doing it in linear color is the most important thing (most things like default imagemagick and browsers do it in nonlinear space)
diskorduser
2021-08-31 07:04:28
Does it work in linear scale if I use like this? `convert {input} -colorspace RGB \ -filter Lanczos -define filter:blur=.9891028367558475 \ -distort Resize 20% -colorspace sRGB {output}`
_wb_
2021-08-31 07:07:03
Yes
2021-08-31 07:07:56
I don't particularly like Lanczos in linear space, I think it somehow looks better in nonlinear space
Deleted User
2021-08-31 11:29:54
Most important is to do rescaling at a higher bit depth and then dither to the original depth.
2021-08-31 11:32:13
<@!263309374775230465> `magick {input} -colorspace RGB +sigmoidal-contrast 6.5,50% -filter Lanczos -distort resize 20% -sigmoidal-contrast 6.5,50% -colorspace sRGB -ordered-dither o8x8,256 {output}`
_wb_
Most important is to do rescaling at a higher bit depth and then dither to the original depth.
2021-09-01 05:24:42
Yes, I consider it a given in image processing that processing is done with more precision (ImageMagick typically uses uint16 internally, though you can also compile it to use float instead). But yes, this is not always done (some downscalers don't, to save memory), and the dithering when going back to lower precision is a good point, I wasn't doing that yet actually. It might be a bit risky on nonphotographic images though, no?
diskorduser
<@!263309374775230465> `magick {input} -colorspace RGB +sigmoidal-contrast 6.5,50% -filter Lanczos -distort resize 20% -sigmoidal-contrast 6.5,50% -colorspace sRGB -ordered-dither o8x8,256 {output}`
2021-09-01 09:46:40
Are the values 6.5,50% specific to lanczos or is it okay to use them on any other algorithms?
2021-09-01 10:06:53
I see some vertical strips and grids on image with this method.
Deleted User
2021-09-01 01:32:21
> It might be a bit risky on nonphotographic images though, no? No, why should it?
2021-09-01 01:32:31
2021-09-01 01:32:31
2021-09-01 01:32:32
2021-09-01 01:32:32
2021-09-01 01:32:45
One is with, the other is without dithering.
2021-09-01 01:33:04
Dithering is only not recommended if your "nonphotographic" means images with a small color palette. But there you wouldn't wanna use Lanczos or even linear space.
diskorduser I see some vertical strips and grids on image with this method.
2021-09-01 01:33:25
It's okay if the other algorithms are similar to Lanczos. :D
diskorduser I see some vertical strips and grids on image with this method.
2021-09-01 01:33:38
What do you mean?
diskorduser
2021-09-01 01:42:16
If you zoom the image resized with -ordered-dither, there are visible dots in the image on 2x zoom.
Deleted User
2021-09-01 01:44:27
Do you have an example image where this happens?
2021-09-01 01:45:58
Did you use `o8x8,256`?
diskorduser
Did you use `o8x8,256`?
2021-09-01 01:50:44
Yes
_wb_
Dithering is only not recommended if your "nonphotographic" means images with a small color palette. But there you wouldn't wanna use Lanczos or even linear space.
2021-09-01 02:03:01
I mean something like a screenshot
2021-09-01 02:03:31
Or an illustration with large areas of solid color
Deleted User
2021-09-01 02:13:09
Solid colors won't change with dithering since they will always round back to the original color.
diskorduser
Do you have an example image where this happens?
2021-09-01 03:43:58
http://0x0.st/-vSN.mp4
Deleted User
2021-09-01 04:34:59
This looks like it's using a total of 256 colors instead of 256 per channel. What do you use for input/output?
2021-09-01 04:41:53
Maybe try `+channel -ordered-dither o8x8,256`.
diskorduser
2021-09-01 05:21:40
I used a 16mp 8-bit jpeg input and output a png.
2021-09-01 05:25:15
I get error, unrecognised option "+channels"
Deleted User
2021-09-01 05:29:40
Sorry, I think it should be channel without s. Otherwise convert to PNG first.
diskorduser
2021-09-02 02:50:16
Same patterns / dots with png input Adding +channel also didn't fix it.
2021-09-02 03:01:30
magick pexels-lisa-1083822.png -colorspace RGB +sigmoidal-contrast 6.5,50% -filter Lanczos -distort resize 56.25% -crop 200x200+200+200 -sigmoidal-contrast 6.5,50% -colorspace sRGB +channel -ordered-dither o8x8,25 -strip dither.png
Scope
2021-09-02 06:01:36
Hm, also experimented with scaling modes and got some interesting results
2021-09-02 06:02:08
Source images:
2021-09-02 06:02:09
2021-09-02 06:02:10
2021-09-02 06:02:11
2021-09-02 06:02:11
2021-09-02 06:02:11
2021-09-02 06:02:13
2021-09-02 06:02:13
2021-09-02 06:02:14
diskorduser
2021-09-02 06:05:12
Upscale?
Scope
2021-09-02 06:07:35
In the file names in this sequence: 1. FSR 2x 2. JXL `-s 7 -d 0.1 --resampling=2` <https://github.com/libjxl/libjxl/pull/533> 3. IM Downscale `-colorspace RGB -define filter:window=Quadratic -colorspace sRGB` + Upscale `-colorspace RGB +sigmoidal-contrast 7.5 -define filter:window=Jinc -define filter:lobes=3 -resize 200%% -sigmoidal-contrast 7.5 -colorspace sRGB` 4. IM Downscale `-colorspace RGB -filter Triangle -define filter:blur=.84549061701764 -colorspace sRGB` + Upscale `-colorspace RGB +sigmoidal-contrast 7.5 -define filter:window=Jinc -define filter:lobes=3 -define filter:blur=.88549061701764 -sigmoidal-contrast 7.5 -colorspace sRGB`
2021-09-02 06:07:53
- ```Butteraugli: 7.6523346901 3-norm: 2.521169 SSIMULACRA: 0.06312216 DSSIM: 0.00412691 0m8z22tarcu11.FSR.png Butteraugli: 13.6175022125 3-norm: 4.015311 SSIMULACRA: 0.05405400 DSSIM: 0.00434414 0m8z22tarcu11.jxlR2.png Butteraugli: 7.5799150467 3-norm: 2.412462 SSIMULACRA: 0.05904124 DSSIM: 0.00377530 0m8z22tarcu11.Quadratic_Ginseng3lobe.png Butteraugli: 7.8739781380 3-norm: 2.502248 SSIMULACRA: 0.05676201 DSSIM: 0.00292210 0m8z22tarcu11.Triangle_Ginseng3lobe.png ```
2021-09-02 06:07:54
2021-09-02 06:07:55
2021-09-02 06:07:56
2021-09-02 06:07:57
- ```Butteraugli: 7.9676017761 3-norm: 2.755792 SSIMULACRA: 0.07913098 DSSIM: 0.00589904 1h1rt.FSR.png Butteraugli: 14.3376636505 3-norm: 4.135510 SSIMULACRA: 0.07626729 DSSIM: 0.00642091 1h1rt.jxlR2.png Butteraugli: 8.1583213806 3-norm: 2.687468 SSIMULACRA: 0.08273491 DSSIM: 0.00552542 1h1rt.Quadratic_Ginseng3lobe.png Butteraugli: 8.1548051834 3-norm: 3.053624 SSIMULACRA: 0.07447507 DSSIM: 0.00490394 1h1rt.Triangle_Ginseng3lobe.png ```
2021-09-02 06:07:58
2021-09-02 06:07:59
2021-09-02 06:07:59
2021-09-02 06:08:00
- ```Butteraugli: 6.6735296249 3-norm: 1.567400 SSIMULACRA: 0.02005278 DSSIM: 0.00057343 2048x1320_carli-jeen-431.FSR.png Butteraugli: 6.3593711853 3-norm: 1.481147 SSIMULACRA: 0.01801966 DSSIM: 0.00043071 2048x1320_carli-jeen-431.jxlR2.png Butteraugli: 6.5563468933 3-norm: 1.418699 SSIMULACRA: 0.01828603 DSSIM: 0.00039971 2048x1320_carli-jeen-431.Quadratic_Ginseng3lobe.png Butteraugli: 5.8666715622 3-norm: 1.489459 SSIMULACRA: 0.01838885 DSSIM: 0.00048951 2048x1320_carli-jeen-431.Triangle_Ginseng3lobe.png ```
2021-09-02 06:08:02
2021-09-02 06:08:04
2021-09-02 06:08:08
2021-09-02 06:08:09
- ```Butteraugli: 7.3742027283 3-norm: 2.502985 SSIMULACRA: 0.10612870 DSSIM: 0.00516059 2048x1320_cayton-heath-60402.FSR.png Butteraugli: 7.9369306564 3-norm: 2.574979 SSIMULACRA: 0.09597047 DSSIM: 0.00424789 2048x1320_cayton-heath-60402.jxlR2.png Butteraugli: 6.8346881866 3-norm: 2.322578 SSIMULACRA: 0.09891145 DSSIM: 0.00444520 2048x1320_cayton-heath-60402.Quadratic_Ginseng3lobe.png Butteraugli: 6.2368092537 3-norm: 2.140422 SSIMULACRA: 0.09588916 DSSIM: 0.00338383 2048x1320_cayton-heath-60402.Triangle_Ginseng3lobe.png ```
2021-09-02 06:08:11
2021-09-02 06:08:12
2021-09-02 06:08:16
2021-09-02 06:08:18
- ```Butteraugli: 6.7863245010 3-norm: 2.206729 SSIMULACRA: 0.06249440 DSSIM: 0.00245042 2048x1320_davey-heuser-696.FSR.png Butteraugli: 10.3410911560 3-norm: 2.722653 SSIMULACRA: 0.05824124 DSSIM: 0.00209300 2048x1320_davey-heuser-696.jxlR2.png Butteraugli: 7.0041656494 3-norm: 2.180330 SSIMULACRA: 0.05992117 DSSIM: 0.00227412 2048x1320_davey-heuser-696.Quadratic_Ginseng3lobe.png Butteraugli: 6.7900328636 3-norm: 2.217274 SSIMULACRA: 0.05718720 DSSIM: 0.00178303 2048x1320_davey-heuser-696.Triangle_Ginseng3lobe.png ```
2021-09-02 06:08:19
2021-09-02 06:08:20
2021-09-02 06:08:21
2021-09-02 06:08:23
- ```Butteraugli: 6.0690393448 3-norm: 1.759394 SSIMULACRA: 0.05738130 DSSIM: 0.00163084 2048x1320_jean-lakosnyk-1325.FSR.png Butteraugli: 5.9236259460 3-norm: 1.652864 SSIMULACRA: 0.05371557 DSSIM: 0.00123964 2048x1320_jean-lakosnyk-1325.jxlR2.png Butteraugli: 5.9563336372 3-norm: 1.657374 SSIMULACRA: 0.05391854 DSSIM: 0.00131542 2048x1320_jean-lakosnyk-1325.Quadratic_Ginseng3lobe.png Butteraugli: 5.9652943611 3-norm: 1.927614 SSIMULACRA: 0.05329959 DSSIM: 0.00153713 2048x1320_jean-lakosnyk-1325.Triangle_Ginseng3lobe.png ```
2021-09-02 06:08:25
2021-09-02 06:08:27
2021-09-02 06:08:28
2021-09-02 06:08:30
- ```Butteraugli: 8.0101423264 3-norm: 2.390688 SSIMULACRA: 0.07831928 DSSIM: 0.00531854 2048x1320_william-iven-5893.FSR.png Butteraugli: 11.6504716873 3-norm: 3.314981 SSIMULACRA: 0.07232501 DSSIM: 0.00515426 2048x1320_william-iven-5893.jxlR2.png Butteraugli: 7.0145583153 3-norm: 2.245753 SSIMULACRA: 0.07329559 DSSIM: 0.00449057 2048x1320_william-iven-5893.Quadratic_Ginseng3lobe.png Butteraugli: 6.5637097359 3-norm: 2.364674 SSIMULACRA: 0.07382710 DSSIM: 0.00386518 2048x1320_william-iven-5893.Triangle_Ginseng3lobe.png ```
2021-09-02 06:08:31
2021-09-02 06:08:33
2021-09-02 06:08:34
2021-09-02 06:08:36
- ```Butteraugli: 8.2909440994 3-norm: 1.939780 SSIMULACRA: 0.02393107 DSSIM: 0.00088207 2048x1320_zugr-108.FSR.png Butteraugli: 8.3663911819 3-norm: 1.940193 SSIMULACRA: 0.02165503 DSSIM: 0.00065602 2048x1320_zugr-108.jxlR2.png Butteraugli: 7.1139197350 3-norm: 1.703904 SSIMULACRA: 0.02179263 DSSIM: 0.00066908 2048x1320_zugr-108.Quadratic_Ginseng3lobe.png Butteraugli: 6.6433234215 3-norm: 1.849612 SSIMULACRA: 0.02218326 DSSIM: 0.00070112 2048x1320_zugr-108.Triangle_Ginseng3lobe.png ```
2021-09-02 06:08:37
2021-09-02 06:08:39
2021-09-02 06:08:40
2021-09-02 06:08:42
- ```Butteraugli: 11.6934757233 3-norm: 3.486321 SSIMULACRA: 0.08302297 DSSIM: 0.00834876 zcnvlaon81541.FSR.png Butteraugli: 13.5171709061 3-norm: 4.207612 SSIMULACRA: 0.06727552 DSSIM: 0.00756088 zcnvlaon81541.jxlR2.png Butteraugli: 10.5054244995 3-norm: 3.325153 SSIMULACRA: 0.07742532 DSSIM: 0.00720557 zcnvlaon81541.Quadratic_Ginseng3lobe.png Butteraugli: 9.6023273468 3-norm: 3.450314 SSIMULACRA: 0.07479131 DSSIM: 0.00546741 zcnvlaon81541.Triangle_Ginseng3lobe.png ```
2021-09-02 06:08:42
2021-09-02 06:08:44
2021-09-02 06:08:45
2021-09-02 06:09:29
Metrics are also interesting
2021-09-02 06:16:51
Quadratic downsampler is sharper, with clearer lines, but makes artifacts on the sharp edges, Triangle is less sharper, the lines are very jagged, but it does not have as noticeable artifacts and in general it seems that it is closer to the original
diskorduser
2021-09-02 07:08:24
<@111445179587624960> have you tried this? https://forum.luminous-landscape.com/index.php?topic=91754.0;wap2
Scope
2021-09-02 07:17:28
No, just personal experiments on the visual result to find something in between that will work for photos as well as art and text
Deleted User
diskorduser magick pexels-lisa-1083822.png -colorspace RGB +sigmoidal-contrast 6.5,50% -filter Lanczos -distort resize 56.25% -crop 200x200+200+200 -sigmoidal-contrast 6.5,50% -colorspace sRGB +channel -ordered-dither o8x8,25 -strip dither.png
2021-09-02 12:19:44
You use 25 and not 256.
diskorduser
2021-09-02 04:27:33
so something went wrong during copy paste. sorry lol
Deleted User
_wb_ I mean something like a screenshot
2021-09-03 03:24:45
2021-09-03 03:24:46
2021-09-03 03:24:46
2021-09-03 03:24:47
2021-09-03 03:24:48
_wb_ Or an illustration with large areas of solid color
2021-09-03 03:25:01
2021-09-03 03:25:02
2021-09-03 03:25:02
2021-09-03 03:25:02
2021-09-03 03:25:03
2021-09-03 03:25:09
unscaled, scaled with no dithering, scaled with 2x2 ordered dithering, 4x4 and 8x8
2021-09-03 08:21:00
<@!794205442175402004> Well... are you going to use dithering by default now?
_wb_
2021-09-03 08:24:48
maybe - for rendering I think it's always a good idea, for compression maybe not always
Deleted User
2021-09-03 08:28:00
If you are concerned about compression, then your type of downsampling will have a greater impact than dithering.
veluca
2021-09-03 08:33:03
I do have a random CL for doing ordered dithering at decoding time
2021-09-03 08:33:10
it helps
_wb_
2021-09-03 08:35:09
does anyone know if ImageMagick does any dithering when converting its internal 16-bit buffers to 8-bit to encode them?
Deleted User
veluca I do have a random CL for doing ordered dithering at decoding time
2021-09-04 04:29:20
What's a random CL? Anyway, if you would want to dither at decode time, you would have to store IM's output with more than 8 bpc. But maybe worth testing how much larger an image would get when storing the resized version at 10 or 12 bpc.
_wb_ does anyone know if ImageMagick does any dithering when converting its internal 16-bit buffers to 8-bit to encode them?
2021-09-04 04:30:19
It doesn't. And it also doesn't use Lanczos and doesn't rescale in linear space by default. GIMP let's you choose what dithering to use when converting to 8 Bit but I don't remember what it displays as default. Audacity dithers by default though.
veluca
What's a random CL? Anyway, if you would want to dither at decode time, you would have to store IM's output with more than 8 bpc. But maybe worth testing how much larger an image would get when storing the resized version at 10 or 12 bpc.
2021-09-04 04:34:13
"random CL" here means "piece of code that was not submitted nor reviewed nor (I think) is visible in github or publicly anywhere" 😛 anyway, it does ordered dithering when doing the final float to 8bit integer conversion
Deleted User
2021-09-04 04:38:52
😮 Oh, so you mean lossy JXL specifically. Why did you do that in secret? And can't you just let that piece of code slip into the main branch with something you are meant to implement? 🤫
veluca
2021-09-04 04:39:52
in secret: because we didn't switch to github yet 😛
_wb_
2021-09-04 04:39:55
I think it was done before we moved to github
veluca
2021-09-04 04:40:09
it's not necessarily specific to lossy actually
_wb_
2021-09-04 04:40:18
I saw some WIP merge request on the private gitlab iirc
veluca
2021-09-04 04:40:42
and I *could* add it to the main branch, but implementing ordered ditherhing is not the hard part... the hard part is figuring out how to ask for it
_wb_
2021-09-04 04:42:17
I would either just always do it when int buffers are returned, or do it by default and have a decode option to disable it
veluca
2021-09-04 04:43:06
if you open an issue and/or discuss it with Lode... 😛
2021-09-04 04:43:17
I'd add it as a pixel format flag
Deleted User
veluca it's not necessarily specific to lossy actually
2021-09-04 04:45:27
Ah, yes, of course. It would also be nice for >8 bpc lossless. But the main complaint I had was that lossy JXL removed dithering from 8 bpc sources for it's internal representation but it doesn't add it back when decoding to 8 bpc and just strips away that additional info.
2021-09-04 04:46:43
<@!179701849576833024> Who is Lode?
veluca
2021-09-04 04:47:52
we don't remove dithering
2021-09-04 04:48:12
Lode is <@!768090355546587137> - aka one of the people that designs the API
Deleted User
veluca we don't remove dithering
2021-09-04 04:49:13
Maybe not intentionally but it does happen.
veluca
2021-09-04 04:49:41
yes, that I totally believe
2021-09-04 04:50:24
I don't see the harm in adding it - but again, probably better discussed in an issue or something like that
Deleted User
2021-09-04 04:51:29
Ok, I will create an issue for that on GitHub soon.
diskorduser
2021-09-04 05:49:45
Mozjpeg q90 jpg to jxl 14-15% savings.
_wb_
2021-09-04 05:54:11
Biggest savings will be with the stupidest jpeg encoders like what cameras or default libjpeg-turbo produce (no huffman optimization, sequential). With encoders like mozjpeg that already do optimized entropy coding, it makes sense that the savings are smaller.
diskorduser
2021-09-04 05:55:26
Still 14% savings is better than 7%. Like someone claimed on reddit
veluca
2021-09-04 05:56:33
ehhh
2021-09-04 05:56:36
try q89
2021-09-04 05:56:43
I suspect it will be worse
2021-09-04 05:56:52
(i.e. on 420)
diskorduser
2021-09-04 06:03:45
http://0x0.st/-wze.jpg
_wb_
2021-09-04 06:09:29
We're a bit worse on 420 because chroma from luma cannot be used there, but I don't expect that to make more than 2-3% difference
2021-09-04 06:14:37
It would be interesting to make some plots on some corpus of what the savings are (say as a boxplot) w.r.t. different jpeg encoders/settings
2021-09-04 06:16:32
(420 vs 444, mozjpeg vs libjpeg-turbo default vs libjpeg-turbo -optimize -progressive, q10 to q100, something like that)
2021-09-04 06:23:55
Also, we _could_ try to improve jpeg recompression. Afaik we haven't really done much to try to get its DC to compress better or to tweak the choices in the AC ctx model in the case of jpeg recompression, besides the initial things we did there to get good enough to drop brunsli...
diskorduser
2021-09-04 06:36:22
IMO using Jpeg recompression mode for comparing with jpg seems funny. Like the unlord guy on reddit
_wb_
2021-09-04 08:21:54
Ah yes of course that's not how you should compare jxl lossy compression to jpeg lossy compression
Deleted User
veluca if you open an issue and/or discuss it with Lode... 😛
2021-09-04 10:21:10
<@!768090355546587137> My part of the arrangement is done: https://github.com/libjxl/libjxl/issues/541 ;) ^^
2021-09-04 10:21:22
https://res.cloudinary.com/mattgore/064_crop_bad_extra.webp https://res.cloudinary.com/mattgore/064_crop_good_extra.webp
veluca
2021-09-04 10:25:06
for all that I notice the improvement, there is still a bit of banding 😛
2021-09-04 10:25:24
having said that, much harder to notice
2021-09-04 10:25:44
but dithering has another issue: it disappears when you zoom...
Deleted User
2021-09-04 10:43:25
Zooming is done independent from JXL, so that's nothing libjxl should worry about.
2021-09-04 10:56:25
Btw, it also only disappears when zooming out. At least on the web, displaying images with a higher pixel density than what the screen is capable is rather unlikely. Tiny previews will be new and smaller image files. HiDPI screens might get pictures with better resolution but I don't think these would exceed the displays' capabilities.
veluca
2021-09-04 11:43:38
nah, at least in Chrome it also disappears when zooming in, unfortunately...
Deleted User
2021-09-05 01:16:14
Huh, how does that happen?
2021-09-05 01:21:37
Ughhh, that's awful, I just checked. But how does Chrome mess that up? Still, I think I heard that Chrome grabs the 32 Bit floats directly for its HDR pipeline or something. So Chrome is responsible for dithering anyways (which it currently doesn't do).
diskorduser
2021-09-05 02:18:39
What is the approximate cjxl's -d value for mozjpeg q60?
Cool Doggo
2021-09-05 04:14:34
it would vary between images, but for me it took -d 10.7 to get similar quality
Scope
2021-09-05 04:26:18
A simpler way is to measure by Butteraugli the average values of the images with mozjpeg q60 and this will roughly be the distance
veluca
diskorduser What is the approximate cjxl's -d value for mozjpeg q60?
2021-09-05 07:34:29
What do you want to get? Similar quality or similar bitrate?
Ughhh, that's awful, I just checked. But how does Chrome mess that up? Still, I think I heard that Chrome grabs the 32 Bit floats directly for its HDR pipeline or something. So Chrome is responsible for dithering anyways (which it currently doesn't do).
2021-09-05 07:35:12
It's actually 16 bit floats ;) and I agree chrome should do better
diskorduser
veluca What do you want to get? Similar quality or similar bitrate?
2021-09-05 08:02:48
Quality
2021-09-05 08:03:45
Just want to post some benchmark values whenever I see someone say, jxl is not better than jpeg for webuse.
veluca
2021-09-05 08:04:09
mhhh... I think we map cjxl's -q 60 to roughly -d 4... but I don't know how well that corresponds to mozjpeg -q 60
2021-09-05 08:04:28
but I'd also say -q 60 is pretty much the low end of web use by most accounts
_wb_
2021-09-05 08:29:02
Facebook is interested in -d 3, and facebook (like any social media) is not exactly known for its high-fidelity transcoding
2021-09-05 08:29:46
I'd say -d 2 is more or less a reasonable setting for 'median web quality'
2021-09-05 08:31:46
Maybe -d 1 for high-fidelity use cases (luxury brands who really don't want to see any artifacts on their expensive products), -d 3 for high-traffic use cases (or developing world use cases) where saving bandwidth is more important than preserving fidelity
2021-09-05 08:33:25
Maybe -d 4 for those who really want to risk artifacts to save bandwidth, but I think it's the low end indeed
veluca
_wb_ Facebook is interested in -d 3, and facebook (like any social media) is not exactly known for its high-fidelity transcoding
2021-09-05 09:55:27
more like 3.5 - IIRC they use ~ `-q 65` (a random attempt with imagemagick's identify says 71, but...)
_wb_
2021-09-05 09:58:35
Yes, with jpeg now, maybe with jxl they would use a bit higher fidelity than what they do now though, no? If it still gives good density improvements compared to what they do now...
veluca
2021-09-05 10:03:37
maybe
_wb_
2021-09-05 10:06:55
Anyway, let's say they keep doing ~d3.5, I still consider fb/twitter to be at the lower end of what "web image quality" is, they obviously have lots of traffic and it's all UGC so if it looks like crap it's basically not their problem as long as it doesn't hurt engagement (unlike say brand websites where crappy images directly reflect poorly on the brand)
2021-09-05 10:08:02
Companies like Nike (one of our customers) are doing more like ~d1.5, if I have to give a ballpark number for it
improver
2021-09-05 10:09:39
thats part of a reason i cant bear going to fb its just too crappy experience
_wb_
improver thats part of a reason i cant bear going to fb its just too crappy experience
2021-09-05 10:21:58
The image quality is not the worst thing on fb imo, the people are often worse 😅
vladaad
2021-09-05 10:23:21
Having original versions of images/videos is actually a really nice feature of Discord
improver
2021-09-05 10:44:01
there actually are some p cool people but i didn't find them from my irl connections
2021-09-05 10:44:23
so it may b a bit difficult
2021-09-05 10:44:58
i prefer vk as site but i don't really browse it much either, other than follow some artists
2021-09-05 10:45:14
its got open original function too :>
Traneptora
_wb_ The image quality is not the worst thing on fb imo, the people are often worse 😅
2021-09-10 10:54:38
I take it you haven't seen FB_GENLOSS_DCT_CRUD.jpg.jpg.jpg.jpg
_wb_
2021-09-10 12:15:31
Ah yes, generation loss is a big problem when things travel between social media platforms and they all stupidly recompress from pixels
2021-09-10 12:16:52
Some memes get so deep-fried by jpg that the text becomes nearly illegible
Traneptora
2021-09-12 02:15:32
tfw deep fried memes are really a cultural relic of FB_jpg.jpg
2021-09-12 02:15:47
also you say "they all stupidly recompress from pixels"
2021-09-12 02:15:58
but keep in mind that this is largely the fault of browsers rather than users
2021-09-12 02:16:33
a user sees and image and right clicks and picks "copy image" and then goes to another tab and pushes Ctrl+V, it's whatever is handling the clipboard that only supports pixel data (or PNG) clipboards doing the decoding
2021-09-12 02:16:50
which atm is all major operating systems' UI
2021-09-12 02:17:30
you can't expect users to right click save image to hard drive and then upload it
w
2021-09-12 02:18:03
i think more people are hitting save on their phones than right clicking and hitting copy
Traneptora
2021-09-12 02:19:31
that might be true, but the point still is there
w
2021-09-12 02:19:34
also how deep fried an image is is a good indication of how much it has been reposted
Traneptora
2021-09-12 02:19:50
users aren't recompressing images cause they don't know better, users are doing whatever is convenient for them
w
2021-09-12 02:19:50
so i too find merit in deep fried memes
Traneptora
2021-09-12 02:20:03
and it's the responsibility of the software they use to make the convenient thing the correct thing, IMO
2021-09-12 02:20:33
like I don't think you can blame users for this
_wb_
2021-09-12 06:02:19
Copy/pasting images is a relatively recent thing though, no?
2021-09-12 06:02:53
Before that, it was always download and then reupload
2021-09-12 06:04:15
Afaik, fb and twitter etc still recompress anything you throw at them, even if it's a q20 jpeg, even if the recompressed fils is 5x as large as what you uploaded
Cool Doggo
_wb_ Copy/pasting images is a relatively recent thing though, no?
2021-09-12 04:15:14
From what I remember it has been a thing for about a year or 2
2021-09-12 04:15:37
Definitely could be wrong
_wb_
2021-09-12 04:53:28
Yes, something like that I think
2021-09-12 04:53:55
That's relatively recent - fb and twitter are quite a bit older than that
fab
2021-09-20 11:26:31
2021-09-20 11:26:32
Heavy png
2021-09-20 11:27:01
Thats with the first example image default
2021-09-20 11:29:13
2021-09-20 11:29:43
17 seconds for the Image
2021-09-20 11:30:42
Is jxl wasm snapdragon 780g not really faster than i3 330m maybe on wasm a bit but dont know Just see the screenshots i made
monad
2021-09-28 09:17:26
```Lossless recommendations comparison 2021-09-27 g0 = cjxl -d 0 -e 9 -E 3 -I 1 -g 0 g1 = cjxl -d 0 -e 9 -E 3 -I 1 -g 1 g2 = cjxl -d 0 -e 9 -E 3 -I 1 -g 2 g3 = cjxl -d 0 -e 9 -E 3 -I 1 -g 3 P0 = cjxl -d 0 -e 9 -I 0 -P 0 -g 3 --patches 0 P4 = cjxl -d 0 -e 9 -I 0 -P 4 -g 3 --patches 0 WebP = cwebp -z 9 -metadata all PNG = pingo -s9 -nostrip cjxl v0.6.0 0.6~alpha20210820161555-0+gite00ac57 cwebp v1.2.0 pingo v0.99 Total images 222 2D art 42 3D art 18 comic/manga 16 generated 8 graphic 11 misc 11 mixed 23 photo 49 pixel art 23 reduced palette 4 text 17 encoder mean bpp savings wins g0 3.559 31.19% 9 g1 3.475 32.81% 19 g2 3.451 33.28% 59 g3 3.577 30.86% 105 P0 6.302 -21.83% 19 P4 5.469 -5.72% 0 WebP 4.025 22.18% 20 PNG 5.173 0.00% 1 g2/PNG 3.444 33.43% 60 g3/PNG 3.569 31.01% 106 g2/P0/PNG 3.435 33.60% 79 g3/P0/PNG 3.562 31.15% 125 g2/WebP/PNG 3.421 33.87% 80 g3/WebP/PNG 3.531 31.73% 126 g2/g3/PNG 3.427 33.76% 159 smallest 3.386 34.55% 222```
_wb_
2021-09-28 12:14:43
what does g2/PNG mean? smallest of g2 and PNG?
monad
2021-09-28 08:42:23
Yes. I figure if you have a bunch of PNGs to start with, it makes sense to compare to their original size and keep the smaller file.
2021-09-28 08:50:03
'smallest' takes the smallest file out of all 8 options.
veluca
2021-09-28 09:49:23
good to know that -I 0 -P 4 is never useful...
Cool Doggo
2021-09-28 10:53:49
funny to me that the P0 has a much worse average than P4 but P4 still has no wins
monad
2021-09-28 11:57:59
By bpp, the closest P4 got to a win was on this image: P4 0.139 bpp, WebP 0.127 bpp. P0 was also slightly better than P4.
fab
2021-10-01 09:01:14
2021-10-01 09:04:05
IT LOOks blurrier than -d 0.843 -s 8 -I 0.881
2021-10-01 09:04:21
as the image i'm seeing with jpg there is a tiny difference
2021-10-01 09:06:26
that's an original jpg
2021-10-01 09:06:26
2021-10-01 09:06:56
as you can see is better in some parts
2021-10-01 09:08:37
2021-10-01 09:08:57
jxl it looks like a 91,8 kb image
2021-10-01 09:15:16
i'm trying -q 97.78 -I 0.878 -s 9 --use_new_heuristics
2021-10-01 09:18:48
2021-10-01 09:19:03
639 kb vs 125 kb vs 284 kb
2021-10-01 09:25:07
use -q 91.028 -s 8 for jpg source
2021-10-01 09:25:17
if you want to convert
2021-10-01 09:26:28
2021-10-01 09:26:32
that's original of jpg screenshots of xiaomi 639 kb
2021-10-01 09:26:43
so is normal that any encoder can't make miracles
2021-10-01 09:27:24
i'm using now HIQ ocr screenshot but the png are 8 bit so don't know is it a problem?
Fraetor
2021-10-01 09:31:48
If it is an SDR display that will be fine.
fab
2021-10-01 09:34:24
no i 'm talking if i want to re encode those images in jxl s 7 d 1
2021-10-01 09:34:30
will they display good
2021-10-01 09:34:56
the encoder will do the most optimal conversion
2021-10-01 09:35:06
considering they are switching more pipelines to 16 bit
2021-10-01 09:35:16
and floats works at 32 bit internally
Fraetor
2021-10-01 09:35:49
The 16th bit error on an 8 bit input will be insignificant, so that should be totally fine.
2021-10-01 09:36:13
Even less significant for the 32 bit floats.
fab
2021-10-01 09:36:58
should i delete HIQ ocr screenshot and try to find another program without ads than can shoot png in 16 bit
2021-10-01 09:37:04
maybe in f droid
2021-10-01 09:37:08
because i have f droid
Fraetor
2021-10-01 09:39:18
Surely for an accurate representation you want to capture the pixels rendered to the screen, which will probably be 8 bit, or if it really is HDR then 10 bit?
fab
2021-10-01 09:39:26
HIQ ocr screenshot don't have ADS
2021-10-01 09:39:52
i have a 400 euros phone
2021-10-01 12:34:38
2021-10-01 12:34:39
2021-10-01 12:35:04
i feel on those type of image avif is more efficient and if properly tuned and using cpu can re encode those image well
2021-10-01 12:36:58
2021-10-01 12:37:19
also on those type of image delta palette s 9 is more efficient
2021-10-01 12:38:08
for jpg encoding is already the best the build jamaika did
2021-10-01 12:38:40
for animation it can be improved currently is only 1:8 compression but the legs are rendered rightly ways
2021-10-01 12:39:45
for png is great it has very low bpp and it looks good
2021-10-01 12:40:04
it can reduce your image to 85% less from jpg
2021-10-01 12:40:16
png not tested but should be higher
2021-10-01 12:40:48
is a bit slow 39 minutes to encode 310 images, is right i can duplicate the command
2021-10-01 01:31:05
FOR FB PHOTOS THOUGH IT SUCKS
2021-10-01 01:31:17
In reencoding
2021-10-01 01:31:54
The new algorithm has Better speed 1 mpx s
2021-10-01 01:33:03
30.3 kb getting good appeal in cjxl
2021-10-01 01:35:33
THOUGH jaimaka encoder was good as s1 d1
2021-10-01 01:37:18
D 1 not good for fb photos trying s 8
2021-10-01 01:45:32
A bit improved in the -d 0.568 -s 8 -I 0.238 range
2021-10-01 01:45:38
but not for fb
eddie.zato
2021-10-03 11:48:51
`-e 9` is faster now, but compression has suffered. Tried it on one random jpeg:
2021-10-03 11:48:55
``` PS > Measure-Command {cjxl 0.jpg 1.jxl -e 9} JPEG XL encoder v0.7.0 c31dca7 [SSE4] Read 4296x2709 image, 38.0 MP/s Encoding [Container | JPEG, lossless transcode, tortoise | JPEG reconstruction data], 4 threads. Compressed to 6131413 bytes (4.215 bpp). 4296 x 2709, 0.06 MP/s [0.06, 0.06], 1 reps, 4 threads. Including container: 6132075 bytes (4.215 bpp). TotalSeconds : 198,4053449 PS > Measure-Command {cjxl 0.jpg 3.jxl -e 9} JPEG XL encoder v0.7.0 0c5cf04 [SSE4] Read 4296x2709 image, 42.1 MP/s Encoding [Container | JPEG, lossless transcode, tortoise | JPEG reconstruction data], 4 threads. Compressed to 6152671 bytes (4.229 bpp). 4296 x 2709, 1.03 MP/s [1.03, 1.03], 1 reps, 4 threads. Including container: 6153333 bytes (4.230 bpp). TotalSeconds : 11,7175869 ```
Scope
2021-10-03 02:05:27
I think it's because: > don't call ClusterGroups() at -e 9, it makes -e 9 extremely slow for little benefit
_wb_
2021-10-03 02:38:29
Maybe try it on a few more jpegs to get some more data points
2021-10-03 02:40:06
I only tried it on a bunch of ImageMagick/libjpeg-turbo encoded q70/q90 jpegs, and there I had one or two that got larger and 20 or so that became smaller
eddie.zato
2021-10-03 02:40:43
A few images. The changes are confusing:
2021-10-03 02:40:48
``` Name Length ---- ------ 1_e8.jxl 6273416 * 1_e9.jxl 6275158 1.jpg 6765844 2_e8.jxl 3962774 * 2_e9.jxl 3964212 2.jpg 4180185 3_e8.jxl 8101448 * 3_e9.jxl 8103363 3.jpg 9316706 4_e8.jxl 6155635 4_e9.jxl 6153333 4.jpg 6866353 5_e8.jxl 2648770 * 5_e9.jxl 2648938 5.jpg 3271338 6_e8.jxl 4775569 * 6_e9.jxl 4777064 6.jpg 5333906 7_e8.jxl 3342097 * 7_e9.jxl 3343268 7.jpg 3958760 8_e8.jxl 4841488 8_e9.jxl 4791002 8.jpg 5939988 9_e8.jxl 3998137 9_e9.jxl 3997743 9.jpg 4763973 ```
_wb_
2021-10-03 02:41:14
I do imagine that not doing ClusterGroups() does come at a cost in density, it's just that it made e9 really, really slow
2021-10-03 02:41:55
What are the stars?
2021-10-03 02:42:20
It would be useful to have before/after numbers
eddie.zato
2021-10-03 02:42:38
`-e 8` gives a smaller size than `-e 9`
_wb_
2021-10-03 02:43:13
Ah, interesting
2021-10-03 02:45:42
I suppose we're still not really estimating very well what the signaling cost of the MA tree itself is, or something like that.
eddie.zato
2021-10-03 02:46:47
I don't have the "old" `cjxl` before the commit at the moment, but I'll try to compare later with the encoding time.
2021-10-03 05:24:33
``` Old value -> New value Filename - original size Time in seconds Size in bytes Speed 1.jpg - 6765844 1,13 -> 1,53 6277585 -> 6273416 -e 8 545,36 -> 11,17 6241508 -> 6275158 -e 9 2.jpg - 4180185 0,53 -> 0,8 3962310 -> 3962774 -e 8 80,03 -> 6,48 3932227 -> 3964212 -e 9 3.jpg - 9316706 1,86 -> 2,5 8109369 -> 8101448 -e 8 674,61 -> 22,32 8098279 -> 8103363 -e 9 4.jpg - 6866353 1,35 -> 1,69 6165978 -> 6155635 -e 8 207,34 -> 11,79 6132075 -> 6153333 -e 9 5.jpg - 3271338 0,76 -> 1,07 2652490 -> 2648770 -e 8 59,58 -> 7,71 2651724 -> 2648938 -e 9 6.jpg - 5333906 0,92 -> 1,39 4780156 -> 4775569 -e 8 221,03 -> 9,81 4768952 -> 4777064 -e 9 7.jpg - 3958760 1,12 -> 1,6 3345219 -> 3342097 -e 8 240,11 -> 9,11 3339234 -> 3343268 -e 9 8.jpg - 5939988 0,72 -> 1 4846401 -> 4841488 -e 8 275,21 -> 7,41 4785088 -> 4791002 -e 9 9.jpg - 4763973 0,73 -> 0,97 4001580 -> 3998137 -e 8 69,88 -> 6,65 3999953 -> 3997743 -e 9 ```
2021-10-03 05:27:16
6 of 9 files are `-e 8` smaller than `-e 9`
_wb_
2021-10-03 05:27:41
That's kind of weird
2021-10-03 05:29:51
What's the source encoder of the jpegs? Phone camera?
eddie.zato
2021-10-03 05:32:38
`1-7` - art and photos from the Web `8,9` - photos taken by GoogleCameraMod with jpeg quality 95 or 97
2021-10-03 05:34:22
I can share these images if necessary
_wb_
2021-10-05 01:40:10
2021-10-05 01:40:11
2021-10-05 01:40:12
2021-10-05 01:40:13
2021-10-05 01:40:15
2021-10-05 01:40:16
2021-10-05 01:42:56
is that useful? should I upload more of these for the other images?
2021-10-05 01:43:10
at different distances maybe?
Scope
2021-10-05 01:47:00
Yep, some difference is noticeable, it might also be useful to look additionally at something like -d 8, for extreme cases
2021-10-05 01:49:52
There seems to be less ringing artifacts in some places and it even partially helped with the color bleeding/shifting
_wb_
2021-10-05 01:50:23
2021-10-05 01:50:23
2021-10-05 01:50:25
2021-10-05 01:50:26
2021-10-05 01:50:28
2021-10-05 01:50:30
2021-10-05 01:50:31
2021-10-05 01:50:32
2021-10-05 01:50:34
2021-10-05 01:50:35
2021-10-05 01:50:36
2021-10-05 01:50:37
2021-10-05 01:50:39
2021-10-05 01:50:40
2021-10-05 01:52:52
d8 looks like crap of course, both before and after
2021-10-05 01:56:44
overall statistics on this specific test set:
2021-10-05 01:56:45
before:
2021-10-05 01:56:46
``` Encoding kPixels Bytes BPP E MP/s D MP/s Max norm pnorm BPP*pnorm Bugs ------------------------------------------------------------------------------------------------------------ jxl:d0.5 14239 2624388 1.4744184 1.360 21.978 1.76332939 0.35466592 0.522925947102 0 jxl:d1 14239 1852011 1.0404860 1.320 16.866 2.35046148 0.63201660 0.657604433829 0 jxl:d2 14239 1254321 0.7046953 1.420 16.568 3.52525187 1.04249624 0.734642204710 0 jxl:d3 14239 985148 0.5534701 1.288 16.642 4.95267868 1.15051804 0.636777333556 0 jxl:d4 14239 820963 0.4612286 1.033 6.274 6.99091768 1.46571926 0.676031706800 0 jxl:d6 14239 631128 0.3545767 0.997 5.915 8.09897232 1.90482258 0.675405611653 0 jxl:d8 14239 520709 0.2925417 1.030 6.309 11.11856842 2.37287773 0.694165665527 0 Aggregate: 14239 1071385 0.6019191 1.195 11.328 4.62918211 1.08595991 0.653659975689 0 ```
2021-10-05 01:56:59
after:
2021-10-05 01:57:00
``` Encoding kPixels Bytes BPP E MP/s D MP/s Max norm pnorm BPP*pnorm Bugs ------------------------------------------------------------------------------------------------------------ jxl:d0.5 14239 2553538 1.4346138 0.863 16.136 1.57890558 0.36139130 0.518456956764 0 jxl:d1 14239 1790680 1.0060294 0.947 12.760 2.34807730 0.64451073 0.648396741124 0 jxl:d2 14239 1202531 0.6755990 0.985 15.021 3.82520533 1.06690052 0.720796872575 0 jxl:d3 14239 942403 0.5294554 0.948 11.234 6.67540455 1.21610050 0.643870923626 0 jxl:d4 14239 783129 0.4399730 1.014 6.837 7.27154827 1.54661112 0.680467080304 0 jxl:d6 14239 601603 0.3379891 1.025 6.948 11.29334736 2.05752738 0.695421799655 0 jxl:d8 14239 496335 0.2788480 1.028 7.453 11.60211468 2.59731948 0.724257429195 0 Aggregate: 14239 1027817 0.5774423 0.971 10.300 5.10368599 1.13970732 0.658115235775 0 ```
2021-10-05 01:58:25
so according to bpp*pnorm, it's an improvement at d0.5, d1 and d2, and a regression at higher distances
2021-10-05 01:59:00
(but of course the question is to what extent butteraugli can be trusted for this type of image content at high distance, since that's not really what it was designed for)
Scope
2021-10-05 02:06:28
Yep, -d 8 is excessive, but a lot of people like to compare at this quality and also the less noticeable artifacts - the more people like the result (on the loss of detail or blurring usually pay less attention) It would also be interesting to see if these changes would help on top, though it would probably require re-tuning 🤔 <https://github.com/libjxl/libjxl/pull/403>
2021-10-05 02:11:56
Later I will also look at the difference as soon as I can compile
fab
Scope Later I will also look at the difference as soon as I can compile
2021-10-05 02:25:16
You will do only for avx2
2021-10-05 03:32:17
this i like more as it is
2021-10-05 03:32:18
https://sneyers.info/comparison/before/cloth.png.jxl_d2.7_epf0.png
_wb_
2021-10-05 03:36:17
at what distance?
fab
2021-10-05 03:36:51
d 4.0 looks good definitely something i would use on new heuristics
2021-10-05 03:36:57
if i had same build
2021-10-05 03:37:09
i'm also comparing with original
2021-10-05 03:37:20
but currently i did the worst settigns
2021-10-05 03:37:46
2021-10-05 03:37:51
at d 4 this isn't preserved
_wb_
2021-10-05 03:39:09
well it is kind of to be expected at d4 that fidelity is not good
2021-10-05 03:39:23
question is if my changes cause it to be worse than it was or not
fab
2021-10-05 03:39:37
d1 is underexposed way
_wb_
2021-10-05 03:39:47
underexposed?
fab
2021-10-05 03:39:57
not worse on d1 worse
2021-10-05 03:40:19
d 2.7 epf 0 i don't like it but not sure if worse because i have problems so i can't judge well
2021-10-05 03:40:23
and also not good display
2021-10-05 03:40:32
i'm watching on a 15,6 samsung
2021-10-05 03:41:15
worse
2021-10-05 03:41:26
2021-10-05 03:42:08
maybe good for the average user but not for me that i'm used to jxl
2021-10-05 03:42:43
2021-10-05 03:42:44
though this is good
2021-10-05 03:43:45
no problem at d1
2021-10-05 03:44:21
2021-10-05 03:45:25
this was before
2021-10-05 03:45:35
2021-10-05 03:45:42
this bother me
2021-10-05 03:45:53
too fidelity in there
2021-10-05 03:46:58
2021-10-05 03:46:59
this looks way saturated
2021-10-05 03:47:03
it blinded me
2021-10-05 03:49:36
d2 is good
2021-10-05 03:50:38
d2 is not bad
2021-10-05 03:51:48
d1 compressed
2021-10-05 03:52:20
2021-10-05 03:55:05
the red looks blurry
2021-10-05 03:55:07
on my screen
2021-10-05 03:55:52
like too sharp on the greens
2021-10-05 03:56:19
like it doesn't look drastically different
2021-10-05 03:58:11
like on -d 2.36 -s 9 -I 0.656 --epf=2 --patches=0
2021-10-05 03:58:15
sure it looks better
2021-10-05 03:58:31
and q76 and up look decent
2021-10-05 04:03:09
you should optimize for -d 0.847
2021-10-05 04:03:22
this same heuristic
2021-10-05 04:03:45
scope what you think
2021-10-05 04:06:07
at -d 2.769 -s 6 -I 0.551 --epf=2 --patches=1 --gaborish=0 --intensity_target=282
2021-10-05 04:24:33
the problem is this read first 4 lines https://discord.com/channels/794206087879852103/803645746661425173/894975996346912790
Scope
2021-10-05 05:31:48
Lossy quality
_wb_ question is if my changes cause it to be worse than it was or not
2021-10-05 05:47:44
^ Yep, #689 is noticeably better overall, although the images are more blurry, but in my opinion it is much better visually perceived and better to sacrifice sharpness but eliminate artifacts as much as possible (in my experience people really hate artifacts)
diskorduser
2021-10-05 05:50:55
Yeah. No need for fidelity on low bpp. Just reduce artifacts.