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

lossless e10 fails

monad
2023-12-21 08:38:19
Post images where JXL compresses worse than PNG, WebP or GIF. (Formerly "lossless e9 fails".)
2023-12-21 09:03:44
I'll start with an e10 fail. ```cjxl v0.10.0 26d32cab 11813 readme.d0e9.jxl 7129 readme.d0e10.jxl 7116 readme.z9.webp 7023 readme.d0e9P0I1g3patches0.jxl 6968 readme.png```
Oleksii Matiash
2023-12-21 09:09:09
2 377 120 fm.gif 2 568 214 fm.png 2 460 333 fm.png.jxl
monad
2023-12-21 09:15:23
It's pretty cheap to find animation fails, harder otherwise, I think.
2023-12-21 10:06:12
```7334 i34r6p4.d0e9.jxl 4282 i34r6p4.d0e10.jxl 3260 i34r6p4.z9.webp 2330 i34r6p4.png cjxl v0.10.0 26d32cab```
Oleksii Matiash
monad It's pretty cheap to find animation fails, harder otherwise, I think.
2023-12-21 12:30:10
Most of my animation samples are compressed better with jxl than with apng\gif
monad
2023-12-21 07:02:32
WebP exists, but looking back, my testing was with more practical effort (e7 vs m6) so I guess I extrapolated. Older cjxl failed to produce output entirely in many cases, but in viable cases, it did edge out WebP in the practical test on average.
_wb_
2024-01-17 09:29:12
For animation, often the difference is caused by having full frames vs cropped frames — libjxl/cjxl just encode frames literally, they don't try to avoid re-encoding unchanged parts using a cropped frame, so that can lead to surprisingly bad results sometimes. Though there can be other issues like palette ordering or gifs that were made with lzw-friendly dithering patterns which jxl might have more trouble with.
2024-01-17 09:31:34
Examples of poor lossless compression are good to have in any case, it's very useful to see where the current heuristics are not doing a good job — tricky thing is improving them in a way that doesn't make that particular image compress better while making others compress worse...
monad
2024-01-21 01:39:13
```bpp MP/s (u+s) command 14.6256 21 cwebp_1.2.4_z2metadataall 14.6294 7.0 oxipng_9.0.0_o1 15.4014 (ImageMagick default PNG) 16.2701 0.05450 cjxl_v0.9.0-a16a3e22_d0e9E3I100g2modular_palette_colors0X0Y0 17.9964 0.07671 cjxl_v0.9.0-a16a3e22_d0e9```
2024-01-21 01:47:52
```bpp MP/s (u+s) command 0.127413 1.3 cwebp_1.2.4_z9metadataall 0.138103 70 cwebp_1.2.4_z4metadataall 0.139606 0.318 cjxl_v0.9.0-a16a3e22_d0e9P0I0g3patches0 0.202177 2.2 cjxl_v0.9.0-a16a3e22_d0e8 0.300294 0.354 cjxl_v0.9.0-a16a3e22_d0e9```
2024-01-21 03:01:20
```bpp MP/s (u+s) command 2.14600 0.228 cwebp_1.2.4_z9metadataall 2.39284 4.0 cwebp_1.2.4_z4metadataall 2.71056 0.1643 cjxl_v0.9.0-a16a3e22_d0e9P0I1g3patches0 3.18760 0.0046428 oxipng_9.0.0_o6Za 3.23468 0.1078 cjxl_v0.9.0-a16a3e22_d0e9 3.66485 30 oxipng_9.0.0_o0 4.01182 (ImageMagick default PNG) 4.42924 0.547 cjxl_v0.9.0-a16a3e22_d0e8 4.81630 41 cwebp_1.2.4_z0metadataall 5.92038 1.26 cjxl_v0.9.0-a16a3e22_d0e7 14.2595 41 cjxl_v0.9.0-a16a3e22_d0e1```
2024-01-21 03:25:25
```bpp MP/s (u+s) command 0.602018 0.337 cwebp_1.2.4_z9metadataall 0.616708 23 cwebp_1.2.4_z7metadataall 1.10011 0.03314 cjxl_v0.9.0-a16a3e22_d0e9P0I1g3patches0 1.57614 45 cwebp_1.2.4_z2metadataall 1.84035 0.0873 cjxl_v0.9.0-a16a3e22_d0e9```
Fraetor
2024-01-21 09:58:10
``` $ wc -c ascii_grey.* 62185 ascii_grey.e9.jxl 55248 ascii_grey.png ```
2024-01-21 09:58:22
2024-01-21 09:58:38
(From https://shkspr.mobi/blog/2024/01/compressing-text-into-images/)
monad
2024-02-27 03:36:28
```Pareto front for user+system time and size | mean Mpx/(user+system s) | mean bpp | best of U 0.15525000 1.08 cwebp_1.2.4_z9 U 0.15612500 23 cwebp_1.2.4_z7 · 0.15612500 17 cwebp_1.2.4_z8 · 0.16512500 21 cwebp_1.2.4_z6 · 0.16575000 21 cwebp_1.2.4_z4 · 0.16575000 21 cwebp_1.2.4_z5 · 0.16750000 21 cwebp_1.2.4_z3 U 0.17412500 3.e+01 cwebp_1.2.4_z2 U 0.17918750 5.e+01 cwebp_1.2.4_z1 · 0.18896875 2.7 cjxl_0.9.0_d0e9P0I1g3patches0num_threads0 · 0.19143750 0.000474159 cjxl_0.9.0_d0e10 · 0.20518750 0.499 cjxl_0.9.0_d0e9num_threads0 · 0.23584375 2.6 cjxl_0.9.0_d0e8num_threads0 · 0.24096875 4.2 cjxl_0.9.0_d0e7num_threads0 · 0.24303125 4.3 cjxl_0.9.0_d0e6num_threads0 · 0.24415625 4.3 cjxl_0.9.0_d0e5num_threads0 U 0.27331250 >3.e+02 original · 0.37643750 15 cjxl_0.9.0_d0e2num_threads0 · 0.39640625 8.8 cjxl_0.9.0_d0e4num_threads0 · 0.64859375 13 cjxl_0.9.0_d0e3num_threads0 · 0.84784375 9.e+01 cjxl_0.9.0_d0e1num_threads0 · 1.00593750 4.e+01 cwebp_1.2.4_z0```
2024-02-27 04:02:33
```Pareto front for user+system time and size | mean Mpx/(user+system s) | mean bpp | best of U 0.51707235 0.554 cwebp_1.2.4_z9 U 0.53444050 14 cwebp_1.2.4_z7 · 0.53444050 10 cwebp_1.2.4_z8 U 0.58709432 15 cwebp_1.2.4_z6 · 0.59609533 0.0002444794 cjxl_0.9.0_d0e10 · 0.64120605 1.09 cjxl_0.9.0_d0e9P0I0g3modular_palette_colors10000patches0num_threads0 U 0.65174949 15 cwebp_1.2.4_z5 · 0.65174949 15 cwebp_1.2.4_z4 · 0.65183401 15 cwebp_1.2.4_z3 · 0.78361646 0.2516 cjxl_0.9.0_d0e9num_threads0 U 0.80468222 29 cwebp_1.2.4_z2 U 0.83768594 38 cwebp_1.2.4_z1 · 0.88761410 1.52 cjxl_0.9.0_d0e8num_threads0 · 0.91863168 3.08 cjxl_0.9.0_d0e7num_threads0 · 0.93084432 3.35 cjxl_0.9.0_d0e6num_threads0 · 0.95757268 3.61 cjxl_0.9.0_d0e5num_threads0 · 1.42129395 4.5 cjxl_0.9.0_d0e4num_threads0 · 1.53784229 16 cjxl_0.9.0_d0e2num_threads0 U 1.62975406 9.e+01 cjxl_0.9.0_d0e1num_threads0 U 1.69485294 4.e+02 original · 1.70748817 10 cjxl_0.9.0_d0e3num_threads0 · 1.97658891 5.e+01 cwebp_1.2.4_z0```
2024-02-27 04:51:58
```Pareto front for user+system time and size | mean Mpx/(user+system s) | mean bpp | best of U 0.05103143 8.9 cwebp_1.2.4_z8 · 0.05109595 0.422 cwebp_1.2.4_z9 U 0.05141853 25 cwebp_1.2.4_z7 U 0.05367655 3.e+01 cwebp_1.2.4_z6 · 0.05493460 0.1979 cjxl_0.9.0_d0e9P0I0g3patches0num_threads0 · 0.05493460 0.000293646 cjxl_0.9.0_d0e10 U 0.06916017 4.e+01 cwebp_1.2.4_z4 · 0.06916017 3.e+01 cwebp_1.2.4_z5 · 0.07232141 3.6 oxipng_9.0.0_o4a-fast-t1 · 0.07367623 5.5 oxipng_9.0.0_o3a-fast-t1 · 0.07686973 3.7 oxipng_9.0.0_o5a-fast-t1 · 0.07686973 3.6 oxipng_9.0.0_o6a-fast-t1 · 0.07709553 9.9 oxipng_9.0.0_o1a-fast-t1 · 0.07767617 4.e+01 cwebp_1.2.4_z3 · 0.07838583 8.3 oxipng_9.0.0_o2a-fast-t1 U 0.08990178 2.e+02 original · 0.08990178 13 oxipng_9.0.0_o0a-fast-t1 · 0.10651441 4.e+01 cwebp_1.2.4_z2 · 0.10683699 8.e+01 cwebp_1.2.4_z0 · 0.10774020 5.e+01 cwebp_1.2.4_z1 · 0.13619135 0.561 cjxl_0.9.0_d0e9num_threads0 · 0.14551378 2.6 cjxl_0.9.0_d0e8num_threads0 · 0.15202981 7.8 cjxl_0.9.0_d0e7num_threads0 · 0.16590055 8.0 cjxl_0.9.0_d0e6num_threads0 · 0.18815826 8.3 cjxl_0.9.0_d0e5num_threads0 · 0.20370639 19 cjxl_0.9.0_d0e2num_threads0 · 0.20886760 9.9 cjxl_0.9.0_d0e4num_threads0 · 0.26760859 8.e+01 cjxl_0.9.0_d0e1num_threads0 · 0.60273221 15 cjxl_0.9.0_d0e3num_threads0```
2024-02-27 05:08:23
[original source](https://dsp.stackexchange.com/questions/2010/what-is-the-least-jpg-compressible-pattern-camera-shooting-piece-of-cloth-sca/25618#25618) ```Pareto front for user+system time and size | mean Mpx/(user+system s) | mean bpp | best of U 0.02362061 0.608 cwebp_1.2.4_z9 U 0.02380371 6.6 cwebp_1.2.4_z8 · 0.02655029 0.04672 cjxl_0.9.0_d0e9P0I0g3patches0num_threads0 · 0.02655029 0.0001540604 cjxl_0.9.0_d0e10 · 0.02685547 17 cwebp_1.2.4_z6 U 0.02685547 17 cwebp_1.2.4_z7 U 0.03930664 19 cwebp_1.2.4_z5 U 0.03997803 22 cwebp_1.2.4_z4 · 0.04345703 20 cwebp_1.2.4_z3 · 0.04910278 0.660 cjxl_0.9.0_d0e9num_threads0 · 0.05175781 2.7 cjxl_0.9.0_d0e8num_threads0 U 0.06356812 >3.e+02 original · 0.10269165 8.7 cjxl_0.9.0_d0e7num_threads0 · 0.15722656 22 cwebp_1.2.4_z2 · 0.17083740 26 cwebp_1.2.4_z1 · 0.17498779 7.e+01 cwebp_1.2.4_z0 · 0.34426880 9.0 cjxl_0.9.0_d0e6num_threads0 · 0.80313110 9.0 cjxl_0.9.0_d0e5num_threads0 · 1.31115723 10 cjxl_0.9.0_d0e4num_threads0 · 1.52557373 3.e+01 cjxl_0.9.0_d0e2num_threads0 · 2.57080078 22 cjxl_0.9.0_d0e3num_threads0 · 7.00042725 9.e+01 cjxl_0.9.0_d0e1num_threads0```
veluca
2024-02-27 07:31:30
ohhh this thread is pain
monad
2024-02-27 07:32:41
you're welcome
_wb_
2024-02-27 07:49:58
Lossless nonphoto is such a very, very different game from any other kind of image compression. Very nice to get examples where there's room for improvement 🙂
yoochan
2024-02-27 09:03:56
<@794205442175402004> you designed lossless to perform well on photographic images initially ?
_wb_
2024-02-27 09:05:35
I didn't, the weighed predictor which is used in e3 was designed for that. Modular is designed to be flexible enough to do all kinds of images, photo and nonphoto, but the search space is just so huge that making a good encoder is tricky.
yoochan
2024-02-27 09:09:42
yet, in the usages, I see a richer use of lossless for screenshots, mangas, sharp edges stuff than photos which are very very well compressed (without blatant artifact) with varDCT
2024-02-27 09:12:49
but it's nice to have margin of improvement 😄
monad
2024-03-04 09:45:25
``` mean Mpx/(real s) | Pareto front for real time and size mean bpp | | best of 0.00052643 ..... . jxl_from_tree_0.10.1 0.00399780 12 R cwebp_1.2.4_z1 0.00588226 0.4294 · cjxl_0.9.0_d0e9E3I99g3patches0num_threads0 0.02443695 1.20 · cjxl_0.9.0_d0e9P5I100g3num_threads0 0.02570343 0.4112 · cjxl_0.9.0_d0e9num_threads0 0.05286407 2.53 · cjxl_0.9.0_d0e8num_threads0 0.05921936 12 · oxipng_9.0.0_o1a-fast-t1 0.05933380 4.54 · cjxl_0.9.0_d0e7num_threads0 0.06312561 23 R oxipng_9.0.0_o0a-fast-t1 0.06694794 4.83 · cjxl_0.9.0_d0e6num_threads0 0.07440186 4.88 · cjxl_0.9.0_d0e5num_threads0 0.09666443 1.e+03 R original 0.12020874 5.22 · cjxl_0.9.0_d0e4num_threads0 0.13626099 11 · cjxl_0.9.0_d0e3num_threads0 0.26112366 1.e+02 · cjxl_0.9.0_d0e1num_threads0 0.27323914 19 · cjxl_0.9.0_d0e2num_threads0```
Oleksii Matiash
monad ``` mean Mpx/(real s) | Pareto front for real time and size mean bpp | | best of 0.00052643 ..... . jxl_from_tree_0.10.1 0.00399780 12 R cwebp_1.2.4_z1 0.00588226 0.4294 · cjxl_0.9.0_d0e9E3I99g3patches0num_threads0 0.02443695 1.20 · cjxl_0.9.0_d0e9P5I100g3num_threads0 0.02570343 0.4112 · cjxl_0.9.0_d0e9num_threads0 0.05286407 2.53 · cjxl_0.9.0_d0e8num_threads0 0.05921936 12 · oxipng_9.0.0_o1a-fast-t1 0.05933380 4.54 · cjxl_0.9.0_d0e7num_threads0 0.06312561 23 R oxipng_9.0.0_o0a-fast-t1 0.06694794 4.83 · cjxl_0.9.0_d0e6num_threads0 0.07440186 4.88 · cjxl_0.9.0_d0e5num_threads0 0.09666443 1.e+03 R original 0.12020874 5.22 · cjxl_0.9.0_d0e4num_threads0 0.13626099 11 · cjxl_0.9.0_d0e3num_threads0 0.26112366 1.e+02 · cjxl_0.9.0_d0e1num_threads0 0.27323914 19 · cjxl_0.9.0_d0e2num_threads0```
2024-03-04 02:21:47
Funny enough webp -z 9 and jxl 0.9 -e10 produced exact the same size - 580 bytes. But used time..
monad
Oleksii Matiash Funny enough webp -z 9 and jxl 0.9 -e10 produced exact the same size - 580 bytes. But used time..
2024-03-04 09:51:56
cwebp z1 is 524B. e10 finds d0e9E4I100g3, but with ModularOptions::TreeMode::kNoWP, which is not otherwise exposed to cjxl CLI except via DCT.
2024-03-04 10:13:10
[source](<https://steamcommunity.com/games/1181000/announcements/detail/4228270796643251261>), [direct link](https://steamcdn-a.akamaihd.net/steamcommunity/public/images/clans/33198961/cd55258fb998427db3de0f3ac6d67df544da7dc7.png) cwebp z1 186x faster, 9% smaller; z7 22x faster, 19% smaller than cjxl e9 ``` mean Mpx/(real s) | Pareto front for real time and size mean bpp | | best of 5.24676539 1.64 R cwebp_1.2.4_z7 5.29886214 5.99 R cwebp_1.2.4_z6 5.30501496 0.049050 · cjxl_0.9.0_d0e9E3I100g3modular_palette_colors0Y0patches0num_threads0 5.75002550 11 R cwebp_1.2.4_z2 5.80246167 0.1484 · cjxl_0.9.0_d0e9P0E3I100modular_palette_colors10000X0Y0patches0num_threads0 5.90056735 14 R cwebp_1.2.4_z1 6.04422699 0.8521 · oxipng_9.0.0_o4a-fast-t1 6.10030286 3.96 · oxipng_9.0.0_o1a-fast-t1 6.47121237 0.075170 · cjxl_0.9.0_d0e9num_threads0 6.62034601 18 R oxipng_9.0.0_o0a-fast-t1 7.15607451 >1.e+03 R original 8.65211210 0.3991 · cjxl_0.9.0_d0e8num_threads0 9.32654622 30 · cwebp_1.2.4_z0 9.56911314 0.9436 · cjxl_0.9.0_d0e7num_threads0 10.06510830 1.22 · cjxl_0.9.0_d0e6num_threads0 10.14838078 1.46 · cjxl_0.9.0_d0e5num_threads0 12.47681816 12 · cjxl_0.9.0_d0e2num_threads0 12.89968721 2.74 · cjxl_0.9.0_d0e4num_threads0 13.68801347 25 · cjxl_0.9.0_d0e1num_threads0 14.59940331 7.54 · cjxl_0.9.0_d0e3num_threads0```
2024-03-05 03:04:45
```cwebp_1.2.4_z9 2.8x faster, 24% smaller than cjxl_0.9.0_d0e9num_threads0 mean Mpx/(real s) | Pareto front for real time and size mean bpp | | best of 2.61125772 0.2228 R cwebp_1.2.4_z9 2.88304012 0.13725 · cjxl_0.9.0_d0e9P0I100g3patches0num_threads0 2.90565201 0.16549 · cjxl_0.9.0_d0e9P0I1g3patches0num_threads0 3.46738812 0.079527 · cjxl_0.9.0_d0e9num_threads0 3.81318673 2.15 R oxipng_9.0.0_o2a-fast-t1 3.90722608 0.4688 · cjxl_0.9.0_d0e8num_threads0 4.16973765 4.20 R oxipng_9.0.0_o1a-fast-t1 4.35080633 1.233 · cjxl_0.9.0_d0e7num_threads0 4.74133488 >2.e+03 R original 5.01478395 1.671 · cjxl_0.9.0_d0e6num_threads0 5.28252315 2.12 · cjxl_0.9.0_d0e5num_threads0 5.76341049 3.31 · cjxl_0.9.0_d0e4num_threads0 5.92378472 9.87 · cjxl_0.9.0_d0e3num_threads0 6.34503858 15.5 · cjxl_0.9.0_d0e2num_threads0 7.99598380 65 · cjxl_0.9.0_d0e1num_threads0```
2024-03-05 03:19:02
```cwebp_1.2.4_z9 8.5x faster, 66% smaller than cjxl_0.9.0_d0e9num_threads0 mean Mpx/(real s) | Pareto front for real time and size mean bpp | | best of 0.64711837 0.7209 R cwebp_1.2.4_z9 0.86649850 0.1911 · cjxl_0.9.0_d0e9E3I100g3modular_palette_colors10000Y0patches0num_threads0 0.88094817 0.3366 · cjxl_0.9.0_d0e9P0I0g3modular_palette_colors10000patches0num_threads0 1.92914411 0.08459 · cjxl_0.9.0_d0e9num_threads0 2.46915921 0.6183 · cjxl_0.9.0_d0e8num_threads0 2.79213998 4.85 R cwebp_1.2.4_z6 2.93149526 1.41 · cjxl_0.9.0_d0e7num_threads0 3.24589620 39 R cwebp_1.2.4_z0 3.57653561 1.77 · cjxl_0.9.0_d0e6num_threads0 3.59964010 18 · oxipng_9.0.0_o0a-fast-t1 3.73706733 1.97 · cjxl_0.9.0_d0e5num_threads0 4.00242078 >7.e+02 R original 5.04909569 2.99 · cjxl_0.9.0_d0e4num_threads0 5.16089055 7.8 · cjxl_0.9.0_d0e3num_threads0 5.61606067 12 · cjxl_0.9.0_d0e2num_threads0 6.00161742 68 · cjxl_0.9.0_d0e1num_threads0```
2024-03-05 04:14:14
```cwebp_1.2.4_z4 89x faster, 7% smaller; cwebp_1.2.4_z9 3.84x faster, 16% smaller than cjxl_0.9.0_d0e9num_threads0 mean Mpx/(real s) | Pareto front for real time and size mean bpp | | best of 0.25065104 1.17 R cwebp_1.2.4_z9 0.25771077 26 R cwebp_1.2.4_z6 0.27042643 0.3318 · cjxl_0.9.0_d0e9P0I1g3patches0num_threads0 0.27724202 27 R cwebp_1.2.4_z4 0.29367065 0.6609 · cjxl_0.9.0_d0e9P1I100g3patches0num_threads0 0.29843140 0.3052 · cjxl_0.9.0_d0e9num_threads0 0.35321045 44 R cwebp_1.2.4_z1 0.36874390 2.10 · cjxl_0.9.0_d0e8num_threads0 0.40989176 4.42 · cjxl_0.9.0_d0e7num_threads0 0.42677816 4.52 · cjxl_0.9.0_d0e6num_threads0 0.44033813 4.82 · cjxl_0.9.0_d0e5num_threads0 0.55985514 56 R cwebp_1.2.4_z0 0.57178752 8.7 · cjxl_0.9.0_d0e4num_threads0 0.61086019 17 · cjxl_0.9.0_d0e2num_threads0 0.73307292 >8.e+02 R original 0.95154826 14 · cjxl_0.9.0_d0e3num_threads0 1.08156331 1.e+02 · cjxl_0.9.0_d0e1num_threads0```
2024-03-05 06:00:46
```vs cjxl_0.10.1_d0e10num_threads0: time size command 1.18% 95.0% cwebp_1.3.2_z1 60.993% 92.1% cwebp_1.3.2_z9 mean Mpx/(real s) | Pareto front for real time and size mean bpp | | best of 8.56108796 0.14005 R cwebp_1.3.2_z9 8.83606481 7.25 R cwebp_1.3.2_z1 9.12212577 0.093557 · cjxl_0.9.0_d0e9g3num_threads0 9.23631944 0.19439 · cjxl_0.9.0_d0e9P1I100g2patches0num_threads0 9.29800540 0.085421 · cjxl_0.10.1_d0e10num_threads0 9.33728009 0.2521 · cjxl_0.10.1_d0e9num_threads0 9.38915123 0.3471 · cjxl_0.10.1_d0e8num_threads0 9.42290509 0.9008 · cjxl_0.10.1_d0e7num_threads0 10.46108025 1.267 · cjxl_0.10.1_d0e6num_threads0 10.49486883 2.27 · cjxl_0.10.1_d0e5num_threads0 10.72720293 3.73 · cjxl_0.10.1_d0e4num_threads0 10.77122299 9.43 R cjxl_0.10.1_d0e3num_threads0 11.41498457 14.8 R cjxl_0.10.1_d0e2num_threads0 12.17617284 >2.e+03 R original 12.38359568 51 · cjxl_0.10.1_d0e1num_threads0```
2024-03-06 05:35:14
```vs cjxl_0.10.1_d0e10num_threads0: time size command 5.020% 96.1% cwebp_1.3.2_z4 47.072% 85.0% cwebp_1.3.2_z9 mean Mpx/(real s) | Pareto front for real time and size mean bpp | | best of 3.80757716 0.20232 R cwebp_1.3.2_z9 3.98006559 0.13188 · cjxl_0.9.0_d0e9g3num_threads0 4.09309028 0.2878 R cjxl_0.9.0_d0e9P1I100g3patches0num_threads0 4.30757716 1.897 R cwebp_1.3.2_z4 4.48028935 0.095237 · cjxl_0.10.1_d0e10num_threads0 4.60761188 0.3664 · cjxl_0.10.1_d0e9num_threads0 4.65226852 0.6274 · cjxl_0.10.1_d0e8num_threads0 4.78345679 1.598 · cjxl_0.10.1_d0e7num_threads0 4.88682099 3.75 R cwebp_1.3.2_z2 4.92001157 2.13 · cjxl_0.10.1_d0e6num_threads0 4.99876929 2.71 · cjxl_0.10.1_d0e5num_threads0 5.45851852 26 R cwebp_1.3.2_z0 6.42608410 3.61 · cjxl_0.10.1_d0e4num_threads0 6.79450617 >2.e+03 R original 7.98173997 15.7 · cjxl_0.10.1_d0e2num_threads0 8.43692901 9.87 · cjxl_0.10.1_d0e3num_threads0 8.82295910 58 · cjxl_0.10.1_d0e1num_threads0```
2024-03-06 10:50:02
```vs cjxl_0.10.1_d0e10num_threads0: time size command 52.251% 96.6% cwebp_1.3.2_z9 mean Mpx/(real s) | Pareto front for real time and size mean bpp | | best of 3.48629804 0.17003 R cwebp_1.3.2_z9 3.60766808 0.088843 · cjxl_0.10.1_d0e10num_threads0 3.73871127 0.3176 R cjxl_0.9.0_d0e9P0E3I100modular_palette_colors10000X0Y0patches0num_threads0 3.85140016 2.79 R cwebp_1.3.2_z5 3.88780510 0.3168 · cjxl_0.10.1_d0e9num_threads0 3.95989019 0.4976 · cjxl_0.10.1_d0e8num_threads0 3.98422493 2.06 · cwebp_1.3.2_z3 4.10638453 1.471 · cjxl_0.10.1_d0e7num_threads0 4.58962959 5.33 R cwebp_1.3.2_z1 4.72036101 1.916 · cjxl_0.10.1_d0e6num_threads0 4.90775877 2.49 · cjxl_0.10.1_d0e5num_threads0 5.34284048 22 R cwebp_1.3.2_z0 5.55684045 3.40 · cjxl_0.10.1_d0e4num_threads0 5.85539656 >2.e+03 R original 6.03226277 16.1 · cjxl_0.10.1_d0e2num_threads0 6.57390311 58 · cjxl_0.10.1_d0e1num_threads0 7.67883404 9.69 · cjxl_0.10.1_d0e3num_threads0```
2024-03-06 10:57:08
```vs cjxl_0.10.1_d0e10num_threads0: time size command 24.11% 99.6% cjxl_0.9.0_d0e9P5I100g3num_threads0 25.40% 93.6% cwebp_1.3.2_z9 mean Mpx/(real s) | Pareto front for real time and size mean bpp | | best of 2.43143519 0.3613 R cwebp_1.3.2_z9 2.48073302 0.13973 · cjxl_0.9.0_d0e9g3num_threads0 2.58572531 0.3807 R cjxl_0.9.0_d0e9P5I100g3num_threads0 2.59670910 0.091773 · cjxl_0.10.1_d0e10num_threads0 2.68321759 0.3857 R cjxl_0.9.0_d0e9P1I100g3patches0num_threads0 2.78604167 3.86 R cwebp_1.3.2_z6 2.78981867 0.3266 · cjxl_0.10.1_d0e9num_threads0 2.93591049 33 R cwebp_1.3.2_z0 2.97319444 0.5259 · cjxl_0.10.1_d0e8num_threads0 3.25605710 7.57 · cwebp_1.3.2_z1 3.27352238 1.497 · cjxl_0.10.1_d0e7num_threads0 3.34464506 3.32 · oxipng_9.0.0_o1a-fast-t1 3.58155864 2.14 · cjxl_0.10.1_d0e6num_threads0 3.71557099 >2.e+03 R original 3.74884259 4.14 · cjxl_0.10.1_d0e4num_threads0 3.78620756 2.73 · cjxl_0.10.1_d0e5num_threads0 3.83995370 10.9 · cjxl_0.10.1_d0e3num_threads0 4.98264275 18.5 · cjxl_0.10.1_d0e2num_threads0 5.16990355 72 · cjxl_0.10.1_d0e1num_threads0```
_wb_
2024-03-08 03:45:55
Thanks for finding all these cases where cjxl is messing up — one thing I noticed though is that some images contain Exif/xmp metadata, which cwebp strips by default and cjxl keeps by default. That's not really a fair comparison, so to keep things simple you may want to strip everything from the source png files before comparing
monad
_wb_ Thanks for finding all these cases where cjxl is messing up — one thing I noticed though is that some images contain Exif/xmp metadata, which cwebp strips by default and cjxl keeps by default. That's not really a fair comparison, so to keep things simple you may want to strip everything from the source png files before comparing
2024-03-08 09:14:33
Thanks, it was done with `-metadata all`, but I see I captured the webp size incorrectly on https://discord.com/channels/794206087879852103/1187313089612369991/1215587887907741776 (apparently cwebp's `Output` line doesn't include icc profile size =/ ). I'm not aware of anything here where cjxl actually keeps something cwebp does not, and in the case above, cjxl is more efficient at storing the icc profile anyway. I do think metadata is important, but understanding there are practical limitations, I intentionally avoided extravagant examples. If there is actually a general issue across the results, I can investigate later.
JendaLinda
2024-03-10 07:42:06
I found a few examples, they all come from one artist. The common characteristic is they are mostly flat colored with a noisy texture applied over the entire image.
yoochan
_wb_ Thanks for finding all these cases where cjxl is messing up — one thing I noticed though is that some images contain Exif/xmp metadata, which cwebp strips by default and cjxl keeps by default. That's not really a fair comparison, so to keep things simple you may want to strip everything from the source png files before comparing
2024-03-11 07:36:53
Wasn't jyrki the author of lossless webp? Doesn't he remember the best tricks he used which may explain the rare cases where webp outperform jxl? 😊
JendaLinda
2024-03-15 04:34:34
`310644 cwebp -z 9 367347 cjxl --allow_expert_options -d 0 -e 11 436289 cjxl -d 0 -e 10 458266 oxipng -o max --zopfli 461306 cjxl -d 0 -e 9` The `-e 11` also triggers the spec related palette transform issue.
2024-03-15 04:47:26
I hesitated to post this here but it's for science, I guess.
yoochan
JendaLinda `310644 cwebp -z 9 367347 cjxl --allow_expert_options -d 0 -e 11 436289 cjxl -d 0 -e 10 458266 oxipng -o max --zopfli 461306 cjxl -d 0 -e 9` The `-e 11` also triggers the spec related palette transform issue.
2024-03-15 05:05:57
What is this spec related issue I missed?
JendaLinda
yoochan What is this spec related issue I missed?
2024-03-15 05:11:32
The recently discovered discrepancy between the spec and libjxl. https://discord.com/channels/794206087879852103/1021189485960114198
_wb_
2024-03-15 05:12:43
It only triggers when combining large palettes and lz77, and can only happen at e8 or higher. In practice there will be no problem because we'll just update the spec and keep libjxl as it is.
yoochan
2024-03-15 05:13:22
Oh, this one, I didn't understood it had an impact on size 😅
JendaLinda
2024-03-15 05:14:29
It's just a coincidence this particular image triggers two unrelated issues.
yoochan
JendaLinda It's just a coincidence this particular image triggers two unrelated issues.
2024-03-15 05:15:57
But how do you know the issue is present then?
_wb_
2024-03-15 05:16:00
I suppose the issue is only when using jxl-oxide, which interprets it according to the spec as it is now. When using only libjxl, there should not be an issue.
2024-03-15 05:18:33
``` $ ~/dev/libjxl/build/tools/cjxl cat.png -d 0 -e 10 cat.png.new.jxl -g 3 JPEG XL encoder v0.10.0 c8451c52 [NEON] Encoding [Modular, lossless, effort: 10] Compressed to 337.5 kB including container (2.060 bpp). ``` (I don't have the patience for e11 but I'm assuming this is one of the things e11 will try)
2024-03-15 05:20:50
still not as good as webp, but getting closer
JendaLinda
2024-03-15 05:56:16
I understand that, as I'm still daily driving an old i5-3570, the `-e 11` took a while. I have my own script with bunch of presets to try and they all include `-E 3`. However it seems that in this case the `-E 3` hurts the compression. Curiously `-e 10 -g 3` also beats `-e 11`.
Tirr
_wb_ I suppose the issue is only when using jxl-oxide, which interprets it according to the spec as it is now. When using only libjxl, there should not be an issue.
2024-03-15 05:57:16
current release of jxl-oxide (v0.7.2) tries spec method, then libjxl method. the next release will default to libjxl method
JendaLinda
2024-03-15 06:03:17
Yes, I'm using the older version of jxl-oxide for reference. However because the spec method may perform incorrect decoding without giving an error, I ended up comparing the pixels decoded by djxl and jxl-oxide.
Tirr
2024-03-15 06:08:42
you can give `--lz77-mode std` to force jxl-oxide use the spec method
JendaLinda
2024-03-15 06:10:54
That's convenient. Thank you!
monad
_wb_ ``` $ ~/dev/libjxl/build/tools/cjxl cat.png -d 0 -e 10 cat.png.new.jxl -g 3 JPEG XL encoder v0.10.0 c8451c52 [NEON] Encoding [Modular, lossless, effort: 10] Compressed to 337.5 kB including container (2.060 bpp). ``` (I don't have the patience for e11 but I'm assuming this is one of the things e11 will try)
2024-03-17 04:50:50
Nope, e11 would do E4I100 where e10 does E0I50 by default.
JendaLinda
JendaLinda I understand that, as I'm still daily driving an old i5-3570, the `-e 11` took a while. I have my own script with bunch of presets to try and they all include `-E 3`. However it seems that in this case the `-E 3` hurts the compression. Curiously `-e 10 -g 3` also beats `-e 11`.
2024-03-17 10:14:49
As I mentioned above, -e 11 was worse than -e 10 -e 3 in this case.
monad
2024-04-15 03:25:22
```vs cjxl_0.10.1_d0e10num_threads0: time size command 35.93% 90.3% cwebp_1.3.2_z9 fastest smaller Pareto front for bpp and real time B bpp Mpx/real_s best of 277232 2.820150 0.4486 R cwebp_1.3.2_z9 290973 2.959930 0.2974 · cjxl_0.10.1_d0e10P14I100g3num_threads0 295241 3.003347 0.3855 · cjxl_0.10.1_d0e10P1I100g3patches0num_threads0 306867 3.121613 0.1612 · cjxl_0.10.1_d0e10num_threads0 315273 3.207123 0.946 R cjxl_0.10.1_d0e10P0I0g3modular_palette_colors10000patches0num_threads0 336085 3.418833 0.6217 · cjxl_0.10.1_d0e9num_threads0 348399 3.544098 1.02 R cjxl_0.10.1_d0e8num_threads0 351864 3.579346 4.12 R cjxl_0.10.1_d0e4num_threads0 357403 3.635691 9.6 R cjxl_0.10.1_d0e3num_threads0 360978 3.672058 2.33 · cjxl_0.10.1_d0e7num_threads0 375853 3.823374 2.88 · cjxl_0.10.1_d0e6num_threads0 382448 3.890462 3.57 · cjxl_0.10.1_d0e5num_threads0 403682 4.106466 15 R cjxl_0.10.1_d0e2num_threads0 554917 5.644908 >8.e+02 R original 877906 8.930522 56 · cjxl_0.10.1_d0e1num_threads0```
2024-04-15 03:57:44
```vs cjxl_0.10.1_d0e10num_threads0: time size command 2.0% 93.3% cwebp_1.3.2_z3 fastest smaller 20.2% 90.3% cjxl_0.10.1_d0e10P0I1g3patches0num_threads0 smallest faster Pareto front for bpp and real time B bpp Mpx/real_s best of 74670 2.28874 0.750 R cjxl_0.10.1_d0e10P0I1g3patches0num_threads0 76200 2.33563 6.9 R cwebp_1.3.2_z4 76869 2.35614 0.850 · cjxl_0.10.1_d0e10P0I0g3modular_palette_colors10000patches0num_threads0 77114 2.36365 7.5 R cwebp_1.3.2_z3 82686 2.53444 0.1516 · cjxl_0.10.1_d0e10num_threads0 88556 2.71436 0.709 · cjxl_0.10.1_d0e9num_threads0 91892 2.81661 14 R cwebp_1.3.2_z2 93726 2.87283 1.14 · cjxl_0.10.1_d0e8num_threads0 95686 2.93290 2.7 · cjxl_0.10.1_d0e7num_threads0 96444 2.95614 3.2 · cjxl_0.10.1_d0e6num_threads0 99009 3.03476 3.6 · cjxl_0.10.1_d0e5num_threads0 108358 3.32132 17 R cwebp_1.3.2_z1 116762 3.57891 6.7 · cjxl_0.10.1_d0e4num_threads0 118025 3.61762 11 · cjxl_0.10.1_d0e2num_threads0 133185 4.08230 10 · cjxl_0.10.1_d0e3num_threads0 169133 5.18415 >3.e+02 R original 289226 8.86516 4.e+01 · cjxl_0.10.1_d0e1num_threads0```
2024-04-15 04:07:26
```vs cjxl_0.10.1_d0e10num_threads0: time size command 32.95% 88.6% cwebp_1.3.2_z9 fastest smaller Pareto front for bpp and real time B bpp Mpx/real_s| best of 107984 0.416605 0.6732 R cwebp_1.3.2_z9 121893 0.470266 0.2218 · cjxl_0.10.1_d0e10num_threads0 126903 0.489595 0.7846 R cjxl_0.10.1_d0e9num_threads0 129438 0.499375 1.451 R cjxl_0.10.1_d0e8num_threads0 136848 0.527963 6.73 R cwebp_1.3.2_z2 136940 0.528318 3.39 · cjxl_0.10.1_d0e7num_threads0 149070 0.575116 10.8 R cwebp_1.3.2_z1 151186 0.583279 3.80 · cjxl_0.10.1_d0e6num_threads0 158789 0.612612 4.46 · cjxl_0.10.1_d0e5num_threads0 196636 0.758627 >2.e+03 R original 232663 0.897620 4.45 · cjxl_0.10.1_d0e4num_threads0 258082 0.995687 20.5 · cjxl_0.10.1_d0e2num_threads0 294658 1.13680 1.2e+02 · cjxl_0.10.1_d0e1num_threads0 544223 2.09963 11.5 · cjxl_0.10.1_d0e3num_threads0```
2024-04-15 04:17:21
```vs cjxl_0.10.1_d0e10num_threads0: time size command 0% 99.8% original fastest smaller 40.57% 68.5% cwebp_1.3.2_z9 smallest faster Pareto front for bpp and real time B bpp Mpx/real_s| best of 385038 1.485486 0.2687 R cwebp_1.3.2_z9 461116 1.778997 16.3 R cwebp_1.3.2_z1 462609 1.784757 0.3747 · cjxl_0.10.1_d0e10P0E3I100modular_palette_colors10000X0Y0patches0num_threads0 533952 2.060000 25 R oxipng_9.0.0_o0a-fast-t1 544620 2.101157 0.3996 · cjxl_0.10.1_d0e10P0I0g3modular_palette_colors10000patches0num_threads0 561137 2.164880 >2.e+03 R original 562038 2.168356 0.10903 · cjxl_0.10.1_d0e10num_threads0 607189 2.342550 0.5896 · cjxl_0.10.1_d0e10P0I100g3patches0num_threads0 716850 2.765625 0.3376 · cjxl_0.10.1_d0e9num_threads0 748680 2.888426 0.6585 · cjxl_0.10.1_d0e8num_threads0 844838 3.259406 1.510 · cjxl_0.10.1_d0e7num_threads0 908058 3.503310 1.832 · cjxl_0.10.1_d0e6num_threads0 941434 3.632076 2.017 · cjxl_0.10.1_d0e5num_threads0 1378507 5.318314 18.2 · cjxl_0.10.1_d0e2num_threads0 1577304 6.085278 3.81 · cjxl_0.10.1_d0e4num_threads0 1672208 6.451420 99 · cjxl_0.10.1_d0e1num_threads0 2405265 9.279572 10.4 · cjxl_0.10.1_d0e3num_threads0```
2024-04-15 04:23:11
```vs cjxl_0.10.1_d0e10num_threads0: time size command 1.7% 95.7% cwebp_1.3.2_z1 fastest smaller 19.32% 49.4% cwebp_1.3.2_z9 smallest faster Pareto front for bpp and real time B bpp Mpx/real_s| best of 54982 0.431638 0.8869 R cwebp_1.3.2_z9 68268 0.535940 0.4942 · cjxl_0.10.1_d0e10P0I0g3modular_palette_colors10000num_threads0 71275 0.559546 0.6252 · cjxl_0.10.1_d0e10P0I0g3modular_palette_colors10000patches0num_threads0 106608 0.836929 10 R cwebp_1.3.2_z1 111407 0.874604 0.1714 · cjxl_0.10.1_d0e10num_threads0 122780 0.963888 0.6150 · cjxl_0.10.1_d0e9num_threads0 124962 0.981017 1.34 · cjxl_0.10.1_d0e8num_threads0 129149 1.01389 2.88 · cjxl_0.10.1_d0e7num_threads0 137217 1.07723 3.31 · cjxl_0.10.1_d0e6num_threads0 140479 1.10283 24 R oxipng_9.0.0_o0a-fast-t1 140716 1.10469 3.37 · cjxl_0.10.1_d0e5num_threads0 142737 1.12056 >1.e+03 R original 228643 1.79497 4.19 · cjxl_0.10.1_d0e4num_threads0 265602 2.08512 19 · cjxl_0.10.1_d0e2num_threads0 278514 2.18648 1.0e+02 · cjxl_0.10.1_d0e1num_threads0 358627 2.81541 11 · cjxl_0.10.1_d0e3num_threads0```
2024-04-15 04:28:37
```vs cjxl_0.10.1_d0e10num_threads0: time size command 0.52% 97.2% cwebp_1.3.2_z2 fastest smaller 16.20% 26.1% cwebp_1.3.2_z9 smallest faster Pareto front for bpp and real time B bpp Mpx/real_s| best of 32806 0.313131 0.5812 R cwebp_1.3.2_z9 36436 0.347780 17 R cwebp_1.3.2_z6 39239 0.374534 0.3846 · cjxl_0.10.1_d0e10P0I0g3modular_palette_colors10000patches0num_threads0 41308 0.394283 0.4024 · cjxl_0.10.1_d0e10P0I0g3modular_palette_colors10000num_threads0 122070 1.16515 18 R cwebp_1.3.2_z2 125628 1.19911 0.09418 · cjxl_0.10.1_d0e10num_threads0 133392 1.27322 23 R cwebp_1.3.2_z1 133964 1.27868 0.2525 · cjxl_0.10.1_d0e9num_threads0 135427 1.29264 0.882 · cjxl_0.10.1_d0e8num_threads0 197928 1.88921 >8.e+02 R original 479706 4.57877 2.25 · cjxl_0.10.1_d0e7num_threads0 590582 5.63707 2.82 · cjxl_0.10.1_d0e6num_threads0 647840 6.18360 3.37 · cjxl_0.10.1_d0e5num_threads0 1108664 10.5821 3.58 · cjxl_0.10.1_d0e4num_threads0 1127916 10.7659 14 · cjxl_0.10.1_d0e2num_threads0 1255550 11.9842 70 · cjxl_0.10.1_d0e1num_threads0 1500661 14.3237 9.1 · cjxl_0.10.1_d0e3num_threads0```
2024-04-15 05:06:05
```vs cjxl_0.10.1_d0e10num_threads0: time size command 1.2% 77.2% cwebp_1.3.2_z6 fastest smaller 27.3% 70.3% cwebp_1.3.2_z9 smallest faster Pareto front for bpp and real time B bpp Mpx/real_s best of 25444 0.426868 0.652 R cwebp_1.3.2_z9 27958 0.469045 14 R cwebp_1.3.2_z6 34300 0.575443 0.2486 · cjxl_0.10.1_d0e10g3num_threads0 34635 0.581063 0.3947 · cjxl_0.10.1_d0e10E3I100g3modular_palette_colors10000Y0num_threads0 36198 0.607285 0.1784 · cjxl_0.10.1_d0e10num_threads0 37813 0.634380 1.04 · cjxl_0.10.1_d0e10P0I0g3modular_palette_colors10000patches0num_threads0 40316 0.676372 0.573 · cjxl_0.10.1_d0e9num_threads0 40978 0.687478 1.42 · cjxl_0.10.1_d0e8num_threads0 44347 0.743999 2.71 · cjxl_0.10.1_d0e7num_threads0 45875 0.769634 3.06 · cjxl_0.10.1_d0e6num_threads0 46451 0.779297 3.14 · cjxl_0.10.1_d0e5num_threads0 71863 1.20563 >5.e+02 R original 76865 1.28955 3.43 · cjxl_0.10.1_d0e4num_threads0 86987 1.45936 7.9 · cjxl_0.10.1_d0e3num_threads0 89760 1.50588 7.e+01 · cjxl_0.10.1_d0e1num_threads0 94018 1.57732 13 · cjxl_0.10.1_d0e2num_threads0```
TPS
2024-08-10 02:30:05
Since [AllRGB.com](https://AllRGB.com) has been mentioned before, has anyone looked into recreating any of the high-compressed images there using `tree_to_jxl`? I think a # of such images fail to be smaller JxL's via typical `cjxl` than best equivalent PNG or WebP. I _did_ post some JxL winners there, but here's 1 couldn't. _(Reposting from https://discord.com/channels/794206087879852103/824000991891554375/1269696743654686763 since maybe a better fit here?)_
2024-08-10 02:35:54
Silikone
2024-08-18 05:13:14
2KiB in JXL, 1KiB in WebP
yoochan
2024-08-18 07:00:26
Lossless? Did you tried with -e 10 -I 100?
Oleksii Matiash
yoochan Lossless? Did you tried with -e 10 -I 100?
2024-08-18 08:15:42
I confirm, 960 bytes in webp, 2357 in jxl with -e 10 -I 100. Speed is also incomparable
yoochan
2024-08-18 08:24:18
Damn! 😅
2024-08-18 08:28:23
The simpler the image, the better webp lossless is. Jyrky rocked... Perhaps some handcrafted jxl tree could beat webp on this one
monad
Silikone 2KiB in JXL, 1KiB in WebP
2024-08-19 01:31:59
```vs cjxl_0.10.1_d0e10num_threads0: time size command 4.81% 33.1% cwebp_1.3.2_z1 fastest smaller 24.5% 28.6% cwebp_1.3.2_z9 smallest faster Pareto front for bpp and real time B bpp Mpx/s real| best of 1114 0.004298 13.0 R cwebp_1.3.2_z1 3362 0.01297 0.6238 · cjxl_0.10.1_d0e10num_threads0 3952 0.01525 1.880 · cjxl_0.10.1_d0e10g3num_threads0 4016 0.01549 41 R cwebp_1.3.2_z8 4100 0.01582 1.732 · cjxl_0.10.1_d0e9num_threads0 4179 0.01612 3.99 · cjxl_0.10.1_d0e4E4g3num_threads0 4649 0.01794 3.34 · cjxl_0.10.1_d0e8num_threads0 6057 0.02337 16.2 · cjxl_0.10.1_d0e2g3num_threads0 6574 0.02536 5.71 · cjxl_0.10.1_d0e7num_threads0 6597 0.02545 5.79 · cjxl_0.10.1_d0e6num_threads0 6705 0.02587 6.15 · cjxl_0.10.1_d0e5g2num_threads0 7074 0.02729 5.99 · cjxl_0.10.1_d0e5num_threads0 7436 0.02869 17.0 · cjxl_0.10.1_d0e2g2num_threads0 9482 0.03658 5.39 · cjxl_0.10.1_d0e4num_threads0 10186 0.03930 1.2e+02 R cjxl_0.10.1_d0e1num_threads0 10616 0.04096 16.7 · cjxl_0.10.1_d0e2num_threads0 12264 0.04731 10.7 · cjxl_0.10.1_d0e3num_threads0```
CrushedAsian255
yoochan The simpler the image, the better webp lossless is. Jyrky rocked... Perhaps some handcrafted jxl tree could beat webp on this one
2024-08-22 08:27:35
maybe some AI/ML based jxl tree generator?
jonnyawsom3
2024-08-22 09:56:05
That was the idea to eventually add Splines when encoding, instead of heuristics
DZgas Ж
2024-08-28 02:08:18
png 1410 kb Modular, lossless 0.10.3 4a3b22d -e 5 2418 kB -e 7 2382 kB -e 9 1741 kB -e 9 -g 3 1375 kB **webp 667 kb**
veluca
2024-08-28 02:08:54
what does `-g 3 -e 10 -I 0` do?
2024-08-28 02:09:05
and/or `--patches 1`
DZgas Ж
veluca and/or `--patches 1`
2024-08-28 02:11:23
-g 3 -e 9 -I 0 1143.2 kB -g 3 -e 9 -I 0 --patches 1 219.0 kB <:JXL:805850130203934781>
veluca
2024-08-28 02:12:01
yeah, thought so 😄
DZgas Ж
veluca yeah, thought so 😄
2024-08-28 02:13:40
why not here
veluca
2024-08-28 02:14:00
it also works outside modular mode
DZgas Ж
2024-08-28 02:14:17
Moreover, it is not even explained what it is and how it can affect it.
veluca yeah, thought so 😄
2024-08-28 02:16:22
-g 3 -e 5 -I 1 --patches 1 138.1 kB
2024-08-28 02:16:38
Is there something you don't know?
2024-08-28 02:19:45
well, the bruteforce will have to go through all the options of the parameters to understand
2024-08-28 02:20:01
<:JXL:805850130203934781> 🤙
jonnyawsom3
DZgas Ж -g 3 -e 5 -I 1 --patches 1 138.1 kB
2024-08-28 02:27:13
`cjxl -d 0 a4_blocks.png Test.jxl --patches=1`
2024-08-28 02:27:28
Sometimes simplicity is best
DZgas Ж
2024-08-28 02:29:35
-e 2 2933.1 kB -e 3 3423.6 kB -e 4 4570.1 kB
2024-08-28 02:29:44
<:monkaMega:809252622900789269>
jonnyawsom3
2024-08-28 02:31:33
Seems like even with `--patches=1` they only actually enable at `-e 5` or higher
`cjxl -d 0 a4_blocks.png Test.jxl --patches=1`
2024-08-28 02:34:03
Interesting, optimizing the PNG into greyscale first increases the filesize of the JXL
DZgas Ж
2024-08-28 02:38:53
-g 3 -e X** -I 0 **--patches 1 -e 1 3337.6 kB -e 2 2933.1 kB -e 3 3423.6 kB -e 4 4570.1 kB -e 5 222.7 kB -e 6 222.7 kB -e 7 222.7 kB -e 8 219.1 kB -e 9 218.9 kB -g 3 -e X** -I 1 **--patches 1 -e 1 3337.6 kB -e 2 2933.1 kB -e 3 3423.6 kB -e 4 2816.3 kB -e 5 137.5 kB -e 6 136.8 kB -e 7 134.7 kB -e 8 131.3 kB -e 9 129.9 kB
2024-08-28 02:39:32
-g 3 -e 9 -I 3 --patches 1 125.6 kB
2024-08-28 02:39:57
-g 3 -e 10 -I 3 --patches 1 119.4 kB
2024-08-28 02:42:15
-g 3 -e 10 -I 50 --patches 1 115.5 kB
2024-08-28 02:44:30
Bruteforce has been banned 😢
2024-08-28 02:44:52
-g 3 -e 10 -I 100 --patches 1 115.2 kB
2024-08-28 02:46:22
-g 2 same size for -i 100
_wb_
2024-08-28 02:56:51
patches is a very powerful coding tool for things like screen content / text, but it's pretty hard to make an encoder that is both fast and does a good job at using patches effectively
2024-08-28 02:59:23
also there's lz77 and MA trees that interact in very nontrivial ways with eachother and with patches, making it hard to estimate signaling cost vs compression advantage for candidate patches
DZgas Ж
DZgas Ж -g 3 -e 10 -I 100 --patches 1 115.2 kB
2024-08-28 03:12:50
2024-08-28 03:13:44
14 times stronger than the PNG bruteforce and 6 times stronger than the maximum WEBP parameters
monad
DZgas Ж png 1410 kb Modular, lossless 0.10.3 4a3b22d -e 5 2418 kB -e 7 2382 kB -e 9 1741 kB -e 9 -g 3 1375 kB **webp 667 kb**
2024-08-28 10:09:31
```vs cjxl_0.10.1_d0e10num_threads0: time size command 25.983% 98.1% cjxl_0.10.1_d0e10g3num_threads0 fastest smaller 32.197% 97.1% cjxl_0.10.1_d0e10E3I100g3Y0num_threads0 smallest faster milestone |Pareto front for bpp and real time B bpp Mpx/s real || best of 114716 0.0519077 1.2003 ·R cjxl_0.10.1_d0e10E3I100g3Y0num_threads0 115992 0.0524851 1.4873 ·R cjxl_0.10.1_d0e10g3num_threads0 118184 0.0534769 0.38646 M· cjxl_0.10.1_d0e10num_threads0 1061134 0.480151 52.8 ·R cwebp_1.3.2_z1 1396536 0.631917 3.732 ·· cjxl_0.10.1_d0e8g3num_threads0 1493228 0.675669 56.8 ·R cwebp_1.3.2_z0 1739161 0.786951 2.888 M· cjxl_0.10.1_d0e8num_threads0 1741283 0.787911 0.88440 M· cjxl_0.10.1_d0e9num_threads0 2167844 0.980925 8.566 ·· cjxl_0.10.1_d0e6g3num_threads0 2382253 1.07794 6.498 M· cjxl_0.10.1_d0e7num_threads0 2418038 1.09413 8.779 ·· cjxl_0.10.1_d0e5g3num_threads0 2506287 1.13407 7.385 M· cjxl_0.10.1_d0e6num_threads0 2598040 1.17558 8.106 M· cjxl_0.10.1_d0e5num_threads0 2875491 1.30113 6.735 M· cjxl_0.10.1_d0e4num_threads0 3025268 1.36890 24.7 M· cjxl_0.10.1_d0e2num_threads0 3337662 1.51025 131 MR cjxl_0.10.1_d0e1num_threads0 3575200 1.61774 12.68 M· cjxl_0.10.1_d0e3num_threads0```
2024-08-28 10:35:11
lossless e10 fails
DZgas Ж
2024-08-29 12:15:31
<:kekw:808717074305122316>
2024-09-10 07:59:06
PNG 414 bytes WEBP 580 bytes JXL 2375 bytes
Oleksii Matiash
DZgas Ж PNG 414 bytes WEBP 580 bytes JXL 2375 bytes
2024-09-10 08:10:31
269 bytes
DZgas Ж
Oleksii Matiash 269 bytes
2024-09-10 08:15:29
how
Oleksii Matiash
2024-09-10 08:17:02
Even 262. Save file as uncompressed png, then just -d 0 -e 10. ~~Without resaving as uncompressed jxl achieves 357 bytes.~~ Disregard that, the cause was in some garbage after the data, so jxl had to use container
2024-09-10 08:19:08
Best webp - 340 bytes, and it does not care about compressed or not was png
DZgas Ж
2024-09-10 08:21:01
oh yeah
2024-09-10 08:21:13
my bad <:galaxybrain:821831336372338729>
monad
Oleksii Matiash Best webp - 340 bytes, and it does not care about compressed or not was png
2024-09-10 11:16:49
cwebp_1.3.2_z8 gives 328 B. but cwebp refuses to keep the exif. with stripped metadata, cjxl_0.10.1_d0e9 achieves 269 B.
jonnyawsom3
2024-09-11 01:30:31
Nice
JendaLinda
2024-09-11 09:12:29
If source PNG uses palette, cjxl would encode as RGB rather than grayscale. There's EXIF at the end of the file but it seems to be empty.
TPS
DZgas Ж my bad <:galaxybrain:821831336372338729>
2025-02-09 01:41:13
What does `-g 3` do?
DZgas Ж
TPS What does `-g 3` do?
2025-02-09 01:41:46
chunk 1024x1024
TPS What does `-g 3` do?
2025-02-09 01:43:24
In this case it was possible not to use it. It saves several bytes of service information on large images. And it can also compress a little better due to the continuity of the chunk
TPS
TPS Since [AllRGB.com](https://AllRGB.com) has been mentioned before, has anyone looked into recreating any of the high-compressed images there using `tree_to_jxl`? I think a # of such images fail to be smaller JxL's via typical `cjxl` than best equivalent PNG or WebP. I _did_ post some JxL winners there, but here's 1 couldn't. _(Reposting from https://discord.com/channels/794206087879852103/824000991891554375/1269696743654686763 since maybe a better fit here?)_
2025-02-09 01:44:25
<@226977230121598977> Any ideas w/ this I posted a few months ago?
DZgas Ж
TPS <@226977230121598977> Any ideas w/ this I posted a few months ago?
2025-02-09 01:50:02
I had my own project where I recorded all the colors of the image on a RGB cube map. But this your project doesn't look particularly personally interesting
2025-02-09 01:50:15
TPS
DZgas Ж I had my own project where I recorded all the colors of the image on a RGB cube map. But this your project doesn't look particularly personally interesting
2025-02-09 01:55:26
Actually not my project. My personal contribution was just improving the compression ratios, & the image I posted is 1 of my testcases since ~25 years (when original PNG standard was still in development). So far, WebP is best, but Idk why JxL shouldn't beat it. Do you have any insight?
DZgas Ж
TPS Actually not my project. My personal contribution was just improving the compression ratios, & the image I posted is 1 of my testcases since ~25 years (when original PNG standard was still in development). So far, WebP is best, but Idk why JxL shouldn't beat it. Do you have any insight?
2025-02-09 01:57:11
my opinion about webp vs jpeg xl? if you are specifically talking about those pictures, then. well, the pictures are okay
TPS
TPS
2025-02-09 01:58:24
<@226977230121598977> No, I mean specifically this image. (Sorry, I just figured out how to refer directly to the pic.)
DZgas Ж
TPS <@226977230121598977> No, I mean specifically this image. (Sorry, I just figured out how to refer directly to the pic.)
2025-02-09 02:08:40
Well, it looks powerful. There are no common algorithms for images and programs for a similar image to better compress. But knowing the principles of "Kolmogorov complexity", you can write a program that will generate this image. And it will size much less than Webp. Purely from the point of view of information value, here it is fun test pic, not more
TPS
DZgas Ж Well, it looks powerful. There are no common algorithms for images and programs for a similar image to better compress. But knowing the principles of "Kolmogorov complexity", you can write a program that will generate this image. And it will size much less than Webp. Purely from the point of view of information value, here it is fun test pic, not more
2025-02-09 02:11:36
You mean the spline/"vector" concept?
DZgas Ж
TPS You mean the spline/"vector" concept?
2025-02-09 02:12:05
what?
2025-02-09 02:12:26
https://en.wikipedia.org/wiki/Kolmogorov_complexity
TPS
DZgas Ж Well, it looks powerful. There are no common algorithms for images and programs for a similar image to better compress. But knowing the principles of "Kolmogorov complexity", you can write a program that will generate this image. And it will size much less than Webp. Purely from the point of view of information value, here it is fun test pic, not more
2025-02-09 02:13:59
I thought you meant a JxL tree like https://github.com/wwww-wwww/spline
DZgas Ж
TPS I thought you meant a JxL tree like https://github.com/wwww-wwww/spline
2025-02-09 02:15:21
no. that's not what i was talking about. jpeg xl can create your image with a few dozen bytes of algorithm. it's possible. just like: <#824000991891554375>
2025-02-09 02:16:11
But it is unlikely to compress standard compression method, it is not stronger than webp
TPS
DZgas Ж no. that's not what i was talking about. jpeg xl can create your image with a few dozen bytes of algorithm. it's possible. just like: <#824000991891554375>
2025-02-09 02:16:21
I think it uses same structures? https://jpegxl.info/old/art/
DZgas Ж
2025-02-09 02:16:57
yes
TPS
DZgas Ж yes
2025-02-09 02:20:50
IIUC, playing around on https://jxl-art.surma.technology/ … will give it a shot.
DZgas Ж
TPS IIUC, playing around on https://jxl-art.surma.technology/ … will give it a shot.
2025-02-09 02:24:23
I think it would be better to ask more specifically about this in the general chat to those who draw such art <#794206170445119489>
TPS <@226977230121598977> No, I mean specifically this image. (Sorry, I just figured out how to refer directly to the pic.)
2025-02-09 02:37:11
Well, it compressed better than the most powerful thing I know, paq8pxd is at hand
Magnap
2025-11-12 07:12:44
ECB Tux: https://commons.wikimedia.org/wiki/File:Tux_encrypted_ecb.png `pngcrush` gets it to 637.1 kB, `cjxl -d 0 -e 10` (commit `445e90984346b632ab3d039e1a3f790b5ade5b0f`, from 2025-10-31) gets it to 852.3 kB
monad
Magnap ECB Tux: https://commons.wikimedia.org/wiki/File:Tux_encrypted_ecb.png `pngcrush` gets it to 637.1 kB, `cjxl -d 0 -e 10` (commit `445e90984346b632ab3d039e1a3f790b5ade5b0f`, from 2025-10-31) gets it to 852.3 kB
2025-11-12 08:06:36
weirdly, my build is denser ```vs cjxl_0.12.0_445e9098_d0e10num_threads0: time size command 0.13% 94.3% cwebp_1.3.2_z0 fastest smaller 0.59% 74.6% cwebp_1.3.2_z7 smallest faster Pareto front for bpp and real time B bpp Mpx/s real | best of 549196 4.965965 13 R cwebp_1.3.2_z7 600180 5.426975 44 R cwebp_1.3.2_z1 635867 5.749665 0.2183 · ect_0.9.5_8 637513 5.764549 18 · ect_0.9.5_1 645521 5.836959 9.e+02 R original 694808 6.282624 59 · cwebp_1.3.2_z0 718809 6.499647 0.029542 · cjxl_0.12.0_445e9098_d0e10E3I100g3num_threads0 736669 6.661142 0.076820 · cjxl_0.12.0_445e9098_d0e10num_threads0 780953 7.061569 1.36 · cjxl_0.12.0_445e9098_d0e7num_threads0 783092 7.080910 0.2965 · cjxl_0.12.0_445e9098_d0e9num_threads0 784228 7.091182 0.6482 · cjxl_0.12.0_445e9098_d0e8num_threads0 789166 7.135833 1.76 · cjxl_0.12.0_445e9098_d0e6num_threads0 827357 7.481165 2.01 · cjxl_0.12.0_445e9098_d0e5num_threads0 875633 7.917688 2.71 · cjxl_0.12.0_445e9098_d0e4num_threads0 928620 8.396810 80 · cjxl_0.12.0_445e9098_d0e1num_threads0 1016827 9.194399 8.12 · cjxl_0.12.0_445e9098_d0e3num_threads0 1062936 9.611328 14 · cjxl_0.12.0_445e9098_d0e2num_threads0```
Magnap
monad weirdly, my build is denser ```vs cjxl_0.12.0_445e9098_d0e10num_threads0: time size command 0.13% 94.3% cwebp_1.3.2_z0 fastest smaller 0.59% 74.6% cwebp_1.3.2_z7 smallest faster Pareto front for bpp and real time B bpp Mpx/s real | best of 549196 4.965965 13 R cwebp_1.3.2_z7 600180 5.426975 44 R cwebp_1.3.2_z1 635867 5.749665 0.2183 · ect_0.9.5_8 637513 5.764549 18 · ect_0.9.5_1 645521 5.836959 9.e+02 R original 694808 6.282624 59 · cwebp_1.3.2_z0 718809 6.499647 0.029542 · cjxl_0.12.0_445e9098_d0e10E3I100g3num_threads0 736669 6.661142 0.076820 · cjxl_0.12.0_445e9098_d0e10num_threads0 780953 7.061569 1.36 · cjxl_0.12.0_445e9098_d0e7num_threads0 783092 7.080910 0.2965 · cjxl_0.12.0_445e9098_d0e9num_threads0 784228 7.091182 0.6482 · cjxl_0.12.0_445e9098_d0e8num_threads0 789166 7.135833 1.76 · cjxl_0.12.0_445e9098_d0e6num_threads0 827357 7.481165 2.01 · cjxl_0.12.0_445e9098_d0e5num_threads0 875633 7.917688 2.71 · cjxl_0.12.0_445e9098_d0e4num_threads0 928620 8.396810 80 · cjxl_0.12.0_445e9098_d0e1num_threads0 1016827 9.194399 8.12 · cjxl_0.12.0_445e9098_d0e3num_threads0 1062936 9.611328 14 · cjxl_0.12.0_445e9098_d0e2num_threads0```
2025-11-12 08:12:25
ah, my bad! I was reusing a command from my bash history, and I didn't notice I had progressive mode on because I had set that before the file names., with all the other options after the file names. now without it I get the same 736669 B