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

RaveSteel
I was actually thinking about OpenTTD recently, after my friend took a map screenshot of our last game... 5 Gigapixels large... The screenshot function already does chunked encoding, so it *miiight?* be possible to make a JXL patch with *relatively* little effort, although using patches from the game tiles would be another very advanced, time consuming, extremely efficent way
2024-09-13 12:07:26
Thanks for the tip
Show the compression results and I doubt they'll have a reason to say no :P
2024-09-13 12:08:13
For this specific screenshot WebP actually had the best compression, but I will get a larger testing set by taking screenshots from multiple games
Orum
2024-09-13 12:09:47
yeah, I have ~500 screenshots from over 100 different games, and in general JXL beats WebP
jonnyawsom3
RaveSteel Thanks for the tip
2024-09-13 12:10:39
https://discord.com/channels/794206087879852103/794206170445119489/1215134557104373770
2024-09-13 12:10:45
2024-09-13 12:10:54
May take a while
RaveSteel
2024-09-13 12:10:58
lmao
2024-09-13 12:11:23
This indeed seems like a good idea [BigBrain](https://cdn.discordapp.com/emojis/615775892177944627.webp?size=128&quality=lossless&name=BigBrain)
Tirr
2024-09-13 12:13:35
libjxl d0e1 runs at 500~600 MP/s so it would be like 40 mins
_wb_
2024-09-13 12:13:54
I feel like this is stretching the definition of "screenshot"
2024-09-13 12:14:20
is it re-rendering the scene at an arbitrary resolution or what is this doing?
RaveSteel
2024-09-13 12:15:00
`The Giant screenshot, on the other hand, saves an image of the whole map at the closest zoom (excluding currently open windows); it does not matter where the user view camera is or what the magnification is. If the map is very large it will take a long time to save the image, and produce a large file. ` - https://wiki.openttd.org/en/Manual/Screenshot
2024-09-13 12:15:21
Quackdoc
2024-09-13 12:16:00
I wonder how fast hydrium would encode it
afed
2024-09-13 12:19:25
decoding may be a bigger problem than encoding, because currently it's slower than e1, at least if not using cropped decoding
RaveSteel
2024-09-13 12:20:17
I am not even able to encode it, avifenc, cwebp and cjxl fail. I'll try using streaming input for cjxl
jonnyawsom3
_wb_ is it re-rendering the scene at an arbitrary resolution or what is this doing?
2024-09-13 12:20:58
For some context, this is the minimap view of the game. Every pixel signifies 1 tile in the game, and each tile has either terrain or a building, with vehicles using sprites rendered on top. The base game is 8 bit, and will actually output 8 bit PNGs, but mods are commonly used so the game fallbacks to 32 bit. There are multiple zoom levels, ranging from +4x in and -8x out, although I'm not sure if default is exactly 1:1 with the tiles and sprite textures https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1536610/ss_8994cb799dfad2e4ba93b9f29943ceb6aeaacaf3.1920x1080.jpg?t=1701554571
RaveSteel
2024-09-13 12:21:42
Now let's see lol
afed
2024-09-13 12:21:48
because avif and webp are quite limited in image size
CrushedAsian255
2024-09-13 12:22:30
Can’t AVIF tile indefinitely?
jonnyawsom3
2024-09-13 12:23:53
There's a more complete thread of my OpenTTD compressing here https://discord.com/channels/794206087879852103/803645746661425173/1215462142963355728
afed
CrushedAsian255 Can’t AVIF tile indefinitely?
2024-09-13 12:26:48
yeah, av1 is limited to 4096x2304 per tile, but it's like basically separate images as I recall, glued together at the container level
RaveSteel
2024-09-13 12:28:58
While cwebp and avifenc failed to encode at all, the JXL encoded in only 32 seconds at e8 ``` WebP: Saving file 'OpenTTD_giant.webp' Error! Cannot encode picture as WebP Error code: 5 (BAD_DIMENSION: Bad picture dimension. Maximum width and height allowed is 16383 pixels.) Command exited with non-zero status 255 0:02.41 seconds AVIF: Too big PNG dimensions (32641 x 16471 > 268435456 px): OpenTTD.png Cannot read input file: OpenTTD.png Command exited with non-zero status 1 0:00.00 seconds JXL: JPEG XL encoder v0.10.3 4a3b22d2 [AVX2,SSE4,SSE2] Encoding [Modular, lossless, effort: 8] Compressed to 88550.3 kB (1.318 bpp). 32641 x 16471, 17.982 MP/s [17.98, 17.98], , 1 reps, 32 threads. 0:32.43 seconds ```
jonnyawsom3
For some context, this is the minimap view of the game. Every pixel signifies 1 tile in the game, and each tile has either terrain or a building, with vehicles using sprites rendered on top. The base game is 8 bit, and will actually output 8 bit PNGs, but mods are commonly used so the game fallbacks to 32 bit. There are multiple zoom levels, ranging from +4x in and -8x out, although I'm not sure if default is exactly 1:1 with the tiles and sprite textures https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1536610/ss_8994cb799dfad2e4ba93b9f29943ceb6aeaacaf3.1920x1080.jpg?t=1701554571
2024-09-13 12:29:47
The decompressed save file for that game is 420 MB alone by the way, thankfully only a 34 MB download from the server thanks to XZ compression (Apparently?)
CrushedAsian255
The decompressed save file for that game is 420 MB alone by the way, thankfully only a 34 MB download from the server thanks to XZ compression (Apparently?)
2024-09-13 12:30:09
Try XZ compressing the ppm from the png
jonnyawsom3
2024-09-13 12:32:04
I don't have the screenshots anymore, they were 250 MB or something and I never took the 1 M width one so deleted them months ago
RaveSteel
2024-09-13 12:33:00
Let me upload the smaller 110MB screenshot, one second
2024-09-13 12:34:00
https://files.catbox.moe/ci700d.png
2024-09-13 12:34:03
Here it is
jonnyawsom3
2024-09-13 12:34:57
Annoyingly I also don't have the test results from back then either... Guess it's before I just dumped my CMD output into a txt file before turning my computer off :P
2024-09-13 12:38:20
Here's a 'screenshot' my friend took of their last game, the site downloads the original PNG but displays jpegs for the zooming https://www.easyzoom.com/imageaccess/1eaf033ff25a41609b06f3103a307458?show-annotations=false
CrushedAsian255
2024-09-13 12:39:04
Ah yeas my favourite site {{meta.title}}
jonnyawsom3
2024-09-13 12:39:46
Biggest issue is the isometric view meaning 60% of the image buffer is just waste...
_wb_
CrushedAsian255 Can’t AVIF tile indefinitely?
2024-09-13 12:42:00
There are various profiles. You can make an AVIF that does not conform to any profile, and then the limit is 65536x65536 (which is the limit imposed by AV1 header syntax). If you want to conform to the AVIF Baseline profile, the limit is 8192x4352 and no more than 8912896 pixels (so enough for 4K). If you want to conform to the AVIF Advanced profile, the limit is 16384x8704 and no more than 35651584 pixels (so enough for 8K). Then presumably all of these limits can be circumvented by using MIAF grid derivation, though I'm not sure what the constraints are on that.
CrushedAsian255
_wb_ There are various profiles. You can make an AVIF that does not conform to any profile, and then the limit is 65536x65536 (which is the limit imposed by AV1 header syntax). If you want to conform to the AVIF Baseline profile, the limit is 8192x4352 and no more than 8912896 pixels (so enough for 4K). If you want to conform to the AVIF Advanced profile, the limit is 16384x8704 and no more than 35651584 pixels (so enough for 8K). Then presumably all of these limits can be circumvented by using MIAF grid derivation, though I'm not sure what the constraints are on that.
2024-09-13 12:42:49
So you can’t tile past 64k?
_wb_
2024-09-13 12:43:12
I'm not sure, the MIAF spec is behind the ISO paywall so I cannot easily check 🙂
RaveSteel
2024-09-13 12:43:22
I tried using the --grid parameter with avifenc, but the error message was always the same `Too big PNG dimensions (32641 x 16471 > 268435456 px): OpenTTD.png`
jonnyawsom3
2024-09-13 12:44:40
65536 x 4096
_wb_
2024-09-13 12:44:43
it's funny how AVIF proponents are making fun of the JPEG XL spec being behind the ISO paywall, but actually the AVIF spec is normatively referencing the MIAF spec which is normatively referencing the HEIF spec and both MIAF and HEIF are also ISO standards and behind a paywall
CrushedAsian255
2024-09-13 12:45:01
Was about to say
2024-09-13 12:45:19
Isn’t the whole point of AVIF to be fully open for everyone?
_wb_
2024-09-13 12:46:23
> Too big PNG dimensions (32641 x 16471 > 268435456 px): OpenTTD.png This is likely caused by a default limit in libpng, you can remove that limit but it requires either rebuilding your libpng with some other constants for that limit, or rebuilding avifenc so its png decoding code is telling libpng to remove the dimension limits
RaveSteel
2024-09-13 12:46:26
The most ridicolous thing about this is that the do not know even what royality free and libre mean. So they think a paywalled spec means the entire software is "NOT FREE"
_wb_ > Too big PNG dimensions (32641 x 16471 > 268435456 px): OpenTTD.png This is likely caused by a default limit in libpng, you can remove that limit but it requires either rebuilding your libpng with some other constants for that limit, or rebuilding avifenc so its png decoding code is telling libpng to remove the dimension limits
2024-09-13 12:49:00
I would maybe do this, if I genuinely thought that AVIF stood a chance against even the PNG.
Orum
afed yeah, av1 is limited to 4096x2304 per tile, but it's like basically separate images as I recall, glued together at the container level
2024-09-13 12:52:08
that's at the stream level, not the container level
CrushedAsian255 Isn’t the whole point of AVIF to be fully open for everyone?
2024-09-13 12:53:30
it's supposed to be only freely licensed patents used in it
2024-09-13 12:54:50
anyway AVIF's strength is lossy, there's really no point in testing it for anything else
afed
Orum that's at the stream level, not the container level
2024-09-13 12:57:00
some group of tiles at the bitstream level, the rest is at the container level for avif, but I don't remember the maximum size, probably something up to 16k
RaveSteel
2024-09-13 12:59:26
Ok, last post about OpenTTD
2024-09-13 12:59:30
``` 364M OpenTTD_giant_e8.jxl 477M OpenTTD_giant.png 546M OpenTTD_giant_e7.jxl 6,1G OpenTTD_giant.ppm ```
2024-09-13 12:59:55
Encode for e8 was 2 minutes, e7 was 1 minute
Orum
afed some group of tiles at the bitstream level, the rest is at the container level for avif, but I don't remember the maximum size, probably something up to 16k
2024-09-13 01:01:22
🤔 I'm not sure about that, as IVF existed prior to tiles (introduced in VP9), though I suppose they could have extended the IVF spec... (or had it in the spec before any codec actually made use of it)
2024-09-13 01:02:15
IVF spec is devilishly hard to find, if it even exists...
afed
afed some group of tiles at the bitstream level, the rest is at the container level for avif, but I don't remember the maximum size, probably something up to 16k
2024-09-13 01:03:07
ah, yeah, because there are different profiles, so I don't really remember the exact limits <:Thonk:805904896879493180>
_wb_
2024-09-13 01:14:13
AVIF and JXL are pretty much exactly in the same situation regarding openness: - both are presumably royalty-free - both have good FOSS implementations available, under a permissive license (both BSD-3clause) - both have a specification that is publicly available, though there is a paywall involved for at least part of the spec - both have a specification that is not controlled by a single actor (e.g. a single company): any spec changes require a broader consensus There are some minor differences: - royalty-free: for JXL there are no challenges yet, i.e. ~~trolls~~ companies claiming you should pay them to use JXL. For AV1 there's Sisvel. - the AVIF spec itself is available without paywall, though you do also need to get access to the MIAF and HEIF specs which are paywalled - JXL is owned by the JPEG committee in which anyone can participate after becoming an accredited ISO member (which does involve paying a membership fee; the amount varies by country and situation, e.g. in some countries it is free for academics and a few hundred dollars for others, in other countries it can cost thousands of dollars), while AVIF is owned by the AOM in which it is somewhat harder to participate, there is a substantial financial cost to becoming an AOM member.
jonnyawsom3
RaveSteel ``` 364M OpenTTD_giant_e8.jxl 477M OpenTTD_giant.png 546M OpenTTD_giant_e7.jxl 6,1G OpenTTD_giant.ppm ```
2024-09-13 01:17:19
Optimized PNG?
Orum
_wb_ AVIF and JXL are pretty much exactly in the same situation regarding openness: - both are presumably royalty-free - both have good FOSS implementations available, under a permissive license (both BSD-3clause) - both have a specification that is publicly available, though there is a paywall involved for at least part of the spec - both have a specification that is not controlled by a single actor (e.g. a single company): any spec changes require a broader consensus There are some minor differences: - royalty-free: for JXL there are no challenges yet, i.e. ~~trolls~~ companies claiming you should pay them to use JXL. For AV1 there's Sisvel. - the AVIF spec itself is available without paywall, though you do also need to get access to the MIAF and HEIF specs which are paywalled - JXL is owned by the JPEG committee in which anyone can participate after becoming an accredited ISO member (which does involve paying a membership fee; the amount varies by country and situation, e.g. in some countries it is free for academics and a few hundred dollars for others, in other countries it can cost thousands of dollars), while AVIF is owned by the AOM in which it is somewhat harder to participate, there is a substantial financial cost to becoming an AOM member.
2024-09-13 01:19:42
just wait until JXL catches on and Sisvel shows up
2024-09-13 01:20:03
they will attempt the same with JXL as they have with AVIF/AV1
RaveSteel
Optimized PNG?
2024-09-13 01:21:11
Let me try
jonnyawsom3
2024-09-13 01:22:02
Curious if it goes down to 8 bit like mine did
RaveSteel
2024-09-13 01:22:20
oxipng just crashes at my default settings lol, let me adjust
jonnyawsom3
2024-09-13 01:22:42
Maybe ECT, it's efficent who would've guessed
_wb_
Orum they will attempt the same with JXL as they have with AVIF/AV1
2024-09-13 01:25:09
yeah trolls will troll. I'm hoping we will be less affected though — video is much more of a patent minefield than still images
RaveSteel
2024-09-13 01:25:56
oxipng always crashes when it reaches +33GB RAM usage
2024-09-13 01:37:43
Ok I was wrong, the crash was due to something different, oxipng is at 48GB RAM currently
DNFrozen
2024-09-13 01:58:59
one if my png images can no be converted using `cjxl v0.11.0 f28befa [AVX2,SSE2]` "getting pixel data failed" but the older version `cjxl v0.10.2 e148959 [AVX2,SSE4,SSE2]` can do it
CrushedAsian255
2024-09-13 01:59:38
Is it possible to send this PNG file in a zip?
2024-09-13 01:59:44
Zipso discord doesn’t mess with it
DNFrozen
2024-09-13 02:00:25
RaveSteel
2024-09-13 02:36:31
Nooooooooooooo, it crashed after running for over an hour 💀
jonnyawsom3
Maybe ECT, it's efficent who would've guessed
2024-09-13 02:37:48
It's generally been 2x more memory efficent if you want to give it a shot
2024-09-13 02:37:57
https://github.com/fhanau/Efficient-Compression-Tool
RaveSteel
2024-09-13 02:38:30
Sure, I'll have a look after trying oxipng at "-o 1" lmao
jonnyawsom3
2024-09-13 02:38:46
`--zc 1`
RaveSteel
2024-09-13 02:39:10
I'll add it, why not
2024-09-13 02:40:10
I can safely say that JXL is better (what a surprise!), because encoding doesn't take an hour at e8
DNFrozen
RaveSteel Nooooooooooooo, it crashed after running for over an hour 💀
2024-09-13 02:40:42
https://media.tenor.com/8CPvdgIHcZ4AAAAM/rookie-numbers.gif
RaveSteel
2024-09-13 02:41:07
Maybe if I had 128GB RAM<:kekw:808717074305122316>
DNFrozen
2024-09-13 02:41:29
2024-09-13 02:41:45
what aare you trying to do?
RaveSteel
DNFrozen what aare you trying to do?
2024-09-13 02:42:20
`oxipng -Z -o max -P OpenTTD_giant.png` lol
2024-09-13 02:42:33
The image is 476MiB
jonnyawsom3
RaveSteel I can safely say that JXL is better (what a surprise!), because encoding doesn't take an hour at e8
2024-09-13 02:43:39
Well, you do need to make a 6 GB intermediary file first
RaveSteel
Well, you do need to make a 6 GB intermediary file first
2024-09-13 02:44:31
Streaming the input will surely improve in the next versions making this unncessary
2024-09-13 02:44:48
Trust
jonnyawsom3
2024-09-13 02:45:39
I *was* trying to think of how streamed PNG decoding works last night. I guess just read a fixed amount of bytes, work on that, decompress the next segment and then just re-join any split data between them since the max is 32K deflate blocks
RaveSteel
Well, you do need to make a 6 GB intermediary file first
2024-09-13 02:46:14
Also the intermediary can luckily be directly streamed to cjxl using `magick`
jonnyawsom3
2024-09-13 02:46:50
I probably could with ffmpeg, but then I'm storing another 6 GB in memory too
monad
DNFrozen one if my png images can no be converted using `cjxl v0.11.0 f28befa [AVX2,SSE2]` "getting pixel data failed" but the older version `cjxl v0.10.2 e148959 [AVX2,SSE4,SSE2]` can do it
2024-09-13 02:47:55
```JPEG XL encoder v0.11.0 4df1e9ec [AVX2,SSE4,SSE2] lib/extras/dec/apng.cc:895: JXL_FAILURE: Exuberant input after IEND chunk lib/extras/dec/decode.cc:151: JXL_FAILURE: Codecs failed to decode Getting pixel data failed.``` The file has a bunch of data appended to the end. So I guess you have to decide whether that's important and strip it if not.
DNFrozen
2024-09-13 02:50:35
yeah sure they are not important but i gues it would be better if cjxl can handle that
2024-09-13 02:51:15
and the older version that i copied from the xl converter was able to read it
monad
2024-09-13 02:53:29
idk if it's better to silently drop data or signal to the user by default
jonnyawsom3
2024-09-13 02:53:47
Could use tweakpng to try and see what it is
RaveSteel
2024-09-13 02:53:48
I would definitely like to know
DNFrozen
2024-09-13 02:58:27
tweakpng gives this warning
2024-09-13 02:59:41
i gues if it's formated incorrectly dropping the data seems to be the correct default option
monad
2024-09-13 03:02:54
It's not necessarily incorrect though, some app probably put it there quite intentionally. In this case it seems like more image data since there's a second IEND chunk.
DNFrozen
2024-09-13 03:13:30
but it sounds like storing extra data this way is unusual and no other programm besides the one that put it there would know what it means 🤔 so the only options for cjxl is dropping this data or refuse to convert it at all right?
RaveSteel
2024-09-13 03:18:44
`oxipng --zc 12 -o 2 OpenTTD_giant.png --out OpenTTD_giant_oxipng.png` led to ``` 395M OpenTTD_giant_oxipng.png 477M OpenTTD_giant.png ```
jonnyawsom3
2024-09-13 03:21:47
8 bit?
RaveSteel
2024-09-13 03:22:50
Yes, but the source PNG was 8 bit as well
jonnyawsom3
2024-09-13 03:24:28
Right, works better than mine then
DNFrozen tweakpng gives this warning
2024-09-13 03:25:45
```pngcheck -vvs original.png Scanning: original.png File: original-1 chunk IHDR at offset 0x0000c, length 13 300 x 300 image, 32-bit RGB+alpha, non-interlaced chunk pHYs at offset 0x00025, length 9: 2835x2835 pixels/meter (72 dpi) chunk IDAT at offset 0x0003a, length 127682 zlib: deflated, 32K window, default compression row filters (0 none, 1 sub, 2 up, 3 avg, 4 paeth): 1 4 4 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 1 1 1 1 4 1 4 1 1 3 3 3 1 2 2 4 4 4 4 4 2 4 2 4 2 4 4 2 3 2 2 2 2 2 4 4 4 4 2 2 2 2 2 2 4 4 2 2 2 2 2 2 2 2 2 2 2 2 4 4 4 4 4 4 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 2 4 4 4 2 4 2 2 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 4 3 3 4 4 4 2 2 4 4 3 3 4 4 4 2 2 4 4 4 4 4 4 4 4 4 4 4 2 4 3 4 3 3 3 4 3 3 3 4 3 3 3 3 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 4 4 2 3 3 3 2 3 3 3 3 2 2 2 2 4 2 4 2 2 2 2 3 4 4 3 2 2 2 2 2 2 2 2 2 2 3 3 4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 4 4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 4 4 4 (300 out of 300) chunk IEND at offset 0x1f308, length 0 invalid chunk name "↨☻" (17 02 40 08)``` ```pngcheck -vvs original-1.png Scanning: original-1.png File: original-1-1 chunk IHDR at offset 0x0000c, length 13 300 x 300 image, 32-bit RGB+alpha, non-interlaced chunk pHYs at offset 0x00025, length 9: 2835x2835 pixels/meter (72 dpi) chunk IDAT at offset 0x0003a, length 31682 zlib: compression header fails checksum row filters (0 none, 1 sub, 2 up, 3 avg, 4 paeth): zlib: inflate error = -3 (data error)```
2024-09-13 03:26:09
So it's a second PNG with invalid data
2024-09-13 03:27:50
No wait... pngcheck was being weird, it's just creating random files with no data in them
DNFrozen
2024-09-13 03:38:35
2024-09-13 03:41:07
so what are you thoughts about the correct default behavior of cjxl when dealing with images like this?
monad
2024-09-13 03:44:20
safest is to refuse to encode and let the user decide what to do. but I could also accept make efforts to encode and emit a warning when dropping data
DNFrozen
2024-09-13 03:47:05
most users will probably use software like xl converter and will never see any of these console warnings so the default choice is what they get
RaveSteel
2024-09-13 04:44:29
I am currently encoding a small dataset of 560 PNG screenshots from various games to JXL and AVIF to open a feature request for Valve's gamescope to add JXL support - 560 1920x1080 screenshots, 1,4G Is 560 images large enough or should I add more?
yoochan
2024-09-13 04:53:16
It sounds fine
jonnyawsom3
2024-09-13 04:54:15
Ideally we could throw some 4K ones in too, maybe round it up to 2 GB. Issue would be finding them :P Although that could be a separate comparison for later
2024-09-13 04:55:40
I offer `Doggo.png`, a screenshot which has served me well over years of compression testing
RaveSteel
Ideally we could throw some 4K ones in too, maybe round it up to 2 GB. Issue would be finding them :P Although that could be a separate comparison for later
2024-09-13 04:56:21
I was thinking of creating 4K screenshots by using gamescope, since it can kinda work like super resolution. I will probably do that later, but it will take a while to go through a large variety of games, as well as having to decode the resulting AVIF to PNG after the fact.
I offer `Doggo.png`, a screenshot which has served me well over years of compression testing
2024-09-13 04:56:40
Thanks
jonnyawsom3
RaveSteel I was thinking of creating 4K screenshots by using gamescope, since it can kinda work like super resolution. I will probably do that later, but it will take a while to go through a large variety of games, as well as having to decode the resulting AVIF to PNG after the fact.
2024-09-13 04:57:40
Yeah, especially having to encode to AVIF in 4K :P
RaveSteel
2024-09-13 04:58:22
Luckily gamescope is quite fast at encoding AVIF
2024-09-13 06:20:05
gamescope is encoding AVIF at AVIF_SPEED_FASTEST, but without tiling: ``` #define AVIF_SPEED_FASTEST 10 . . . // * Speed range: [AVIF_SPEED_SLOWEST - AVIF_SPEED_FASTEST]. Slower should make for a better quality // image in less bytes. AVIF_SPEED_DEFAULT means "Leave the AV1 codec to its default speed settings"./ // If avifEncoder uses rav1e, the speed value is directly passed through (0-10). If libaom is used, // a combination of settings are tweaked to simulate this speed range. ```
2024-09-13 06:35:42
To continue the encoding test of 560 PNG 1920x1080 screenshots To level the playing field I encoded JXL at e1, but also higher effort setting to compare better: ``` AVIF s10: - 0:09.23 seconds - 1,3GB JXL e1: - 0:02.39 seconds - 1,1GB JXL e2 - 0:14.30 seconds - 1012M ``` I repeated each encode 3 times and took the average. Encoded with v0.11.0 4df1e9e and avifenc 1.1.1
2024-09-13 06:35:55
JXL is not only much faster but also still smaller
2024-09-13 06:36:34
I mentioned it above, but the original PNGs were 1,4G
monad
2024-09-13 06:38:59
Sounds very comprehensive (as long as content is reasonably representative of general use).
RaveSteel
2024-09-13 06:40:31
It should be, these screenshots are from a variety of games, 62 in fact. I aimed at using 10 screenshots from each directory, but ended up at 560 because some directories had less than 10 screenshots
2024-09-13 06:42:42
I also made sure to not only include gameplay screenshots but also menues etc.
2024-09-13 06:43:03
Though the latter of course only make up a small part of the set
monad
2024-09-13 06:43:13
Very nice.
RaveSteel
2024-09-13 06:43:34
Thanks
monad
Ideally we could throw some 4K ones in too, maybe round it up to 2 GB. Issue would be finding them :P Although that could be a separate comparison for later
2024-09-13 06:44:22
I have a decent amount of native 4k screenshots if useful.
RaveSteel
2024-09-13 06:44:46
I'll gladly take them if you are able to share them
2024-09-13 06:45:24
And I'll see if I can include some HDR screenshots, maybe from the HDR discord that was linked here a few days ago
2024-09-13 07:27:09
I will continue posting here since this pertains to the gathering of images: https://files.catbox.moe/4viy1s.zip Have a zip containing an HDR AVIF created by gamescope, the decoded PNG using avidec and a JXL encoded from it. mpv is badly mangling the AVIF's colours for me for some reason, the PNG and JXL look fine.
2024-09-13 07:28:21
For those interested in testing HDR without having an HDR display: you can run gamescope with `--hdr-enabled` and `--hdr-debug-force-output` and it will output HDR. It will of course look wrong on an SDR display
afed
2024-09-13 07:32:55
also avif needs validation for true lossless because not all apps do it properly and only libaom has lossless support
RaveSteel
RaveSteel To continue the encoding test of 560 PNG 1920x1080 screenshots To level the playing field I encoded JXL at e1, but also higher effort setting to compare better: ``` AVIF s10: - 0:09.23 seconds - 1,3GB JXL e1: - 0:02.39 seconds - 1,1GB JXL e2 - 0:14.30 seconds - 1012M ``` I repeated each encode 3 times and took the average. Encoded with v0.11.0 4df1e9e and avifenc 1.1.1
2024-09-13 08:49:55
I made a typo here, the original PNGs are 1.2GiB, AVIF is therefore in fact 8% LARGER instead of slightly smaller
2024-09-13 08:51:21
Some of the images were inflated by a factor of 8 or more
monad
RaveSteel I'll gladly take them if you are able to share them
2024-09-13 09:25:28
<https://mega.nz/file/7ccE2DIZ#tNBo5nxAqoAfJHm8oGIF8XvI89mSulaFdEEYEsX3OzQ>
RaveSteel
2024-09-13 09:26:03
many thanks
monad
2024-09-13 09:46:49
I can produce arbitrarily many more, from a very wide variety of games if you feel there's something lacking. Those were just legit one's I'd taken since getting the monitor.
RaveSteel
2024-09-13 11:31:39
Sure, I'll be happy to have another source for these screenshots, because taking 4k screenshots on a 1080p monitor is pretty tedious
2024-09-13 11:34:03
Same as last time I am aiming for around 10 image per game, where each screenshot varies sufficiently
username
2024-09-13 11:34:22
question is Steam still encoding "*lossless*" (not actually lossless) AVIF screenshots?
2024-09-13 11:34:44
last I checked it was doing that
RaveSteel
2024-09-13 11:35:08
Non-gamescope Steam is still using PNGs while gamescope is using lossless AVIF
username
2024-09-13 11:35:41
last I checked the AVIF outputs it was giving wheren't actually lossless
2024-09-13 11:35:54
like because of the whole RGB YUV thing
RaveSteel
2024-09-13 11:35:56
Because of YUV444 you mean?
username
2024-09-13 11:36:02
yea
RaveSteel
2024-09-13 11:36:22
Wait a sec, I saw something in the AVIF encoding funtion of gamescope about that
username
2024-09-13 11:37:30
don't know exactly how you are submitting a request to Valve for JXL and such but maybe you should mention their AVIFs aren't actually lossless if you get the chance
RaveSteel
2024-09-13 11:37:58
``` // We are not actually using YUV, but storing raw GBR (yes not RGB) data // This does not compress as well, but is always lossless! ``` From src/steamcompmgr.cpp
2024-09-13 11:38:27
Though I haven't verified this
2024-09-13 11:39:36
Here's a gamescope AVIF, if you want to verify
username
2024-09-13 11:43:47
oh huh I guess it is fully lossless it seems. I was checking in the wrong way the first time around
RaveSteel
2024-09-13 11:46:16
How are you checking? For me ImageMagick's identify and avifdec seem to suggest YUV444
username
2024-09-13 11:47:50
I originally was using exiftool but I got suspicious it wasn't actually telling me what it was so then I put it through ffprobe (from ffmpeg) and it says it's gbrp10le
RaveSteel
2024-09-13 11:48:04
Ah alright
Orum
2024-09-13 11:49:19
AVIF lossless is just pain <:SadCat:805389277247701002>
username
2024-09-13 11:49:54
yeah
RaveSteel
2024-09-13 11:50:48
It is still sometimes smaller than PNG, but sometimes it is also much larger
username
2024-09-13 11:51:03
they are trying to make it better in backwards incompatible ways that still don't even get close to JXL: https://github.com/AOMediaCodec/libavif/issues/2077
2024-09-13 11:51:35
wouldn't be surprised if one day they decide to start putting AV2 streams in AVIFs
RaveSteel
2024-09-13 11:51:56
It'll be some more years until AV2 is ready, no?
2024-09-13 11:52:05
Or am I out of the loop?
username
2024-09-13 11:52:47
i'm also out of the loop but I meant as in the future when AV2 is actually done/ready
RaveSteel
2024-09-13 11:53:13
When that happens it may *hopefully* be better than AV1
username
2024-09-13 11:54:24
AVIF to me seems like a live service format where they just decide to randomly add backwards incompatible stuff. imagine if the same was done with PNG and people started getting PNGs on their computers that other programs can't open
RaveSteel
2024-09-14 12:00:33
I already posted an HDR AVIF earlier that I couldn't get to display correctly anywhere, except in Chrome. Displaying HDR content is not even that well implemented in windows image viewers, but it is still worse on linux. But that is the problem with HDR content on any system, including mobile OSes, at this time. Except maybe macOS.
juliobbv
RaveSteel When that happens it may *hopefully* be better than AV1
2024-09-14 12:29:04
I played with AVM a few months (research 7.0 branch), and quality was noticeable better than AV1
2024-09-14 12:30:06
but right now, the encoder is so slow that it takes like a minute to encode a single keyframe, I so just limited my testing to just images
RaveSteel
juliobbv I played with AVM a few months (research 7.0 branch), and quality was noticeable better than AV1
2024-09-14 12:30:27
How does it compare to JXL?
juliobbv
2024-09-14 12:33:34
I limited my testing to the low-mid fidelity lossy range (as I was interested in exercising the new low-bitrate coding tools), so I'm not sure how it does at the higher-fidelity range
2024-09-14 12:34:08
but my understanding is that there are improvements all across the quality range to various degrees
2024-09-14 12:34:38
but the current slowness is intractable heh
2024-09-14 12:36:45
if I were to spitball a number... AVM r7.0 was 15-20% better in intra-only than aomenc at cpu-used 0 intra-only
RaveSteel
2024-09-14 12:38:01
Does this encoder support lossless?
juliobbv
2024-09-14 12:39:09
it does, by virtue of inheriting the AV1 codebase
2024-09-14 12:39:32
but I don't think there has been any meaningful work to improve lossless though
RaveSteel
juliobbv it does, by virtue of inheriting the AV1 codebase
2024-09-14 12:39:41
Ahhh alright
monad
RaveSteel Same as last time I am aiming for around 10 image per game, where each screenshot varies sufficiently
2024-09-14 02:22:03
I see, I will work on round two then.
RaveSteel
2024-09-14 02:24:10
I already have around 300 screenshots at this time, but I'll take all you can offer
monad
2024-09-14 02:29:58
Btw, looks like 0.11 is slower and usually denser than 0.10.
RaveSteel
2024-09-14 02:30:30
Good to know
CrushedAsian255
2024-09-14 02:30:32
dense being better compression?
monad
2024-09-14 02:30:44
better mean bpp
RaveSteel I already have around 300 screenshots at this time, but I'll take all you can offer
2024-09-14 02:35:36
What games have you already sufficiently covered?
A homosapien
monad Btw, looks like 0.11 is slower and usually denser than 0.10.
2024-09-14 03:19:52
This is lossless? Are the same gains for lossy as well?
monad
2024-09-14 03:26:36
oh, yeah, lossless. lossy would require actually looking at the images ...
A homosapien
2024-09-14 03:29:49
I made a few comparisons earlier this year: https://github.com/libjxl/libjxl/issues/3530#issuecomment-2132164263
2024-09-14 03:30:35
It's definitely a noticeable improvement for screenshots/artwork
2024-09-14 03:30:49
For photographic content it's harder to see a difference, it's one of those things where preferences for artifacts and detail retention play a big role in what one would consider "image quality"
Demiurge
2024-09-14 05:57:05
Are there any image codec comparisons between aom and avm? https://gitlab.com/AOMediaCodec/avm
2024-09-14 05:57:58
I heard someone say that avm has big improvements over avif despite not being optimized for still images.
CrushedAsian255
2024-09-14 05:58:14
fab talks about it a lot
Oleksii Matiash
CrushedAsian255 fab talks about it a lot
2024-09-14 06:22:23
Fab mostly talks about things existing only in his head, so I would not take it seriously
RaveSteel
monad What games have you already sufficiently covered?
2024-09-14 09:23:55
At this time I have 380 images from maybe 10 games on my side, nonidea from how many games the files you sent me previously are from. Unless you have +10000 images I will take all you can send me. I aim at a very large datset to be representative of different types of graphical styles/games this time.
2024-09-14 09:26:00
Games that are covered ar this time - Satisfactory - Factorio - Star Wars: Outlaws - One of the Yakuza games - CS:GO - WH40K Boltgun - Holocure - Doom Eternal
Demiurge
2024-09-14 09:29:29
I heard it from this article: https://www.autocompressor.net/blog/progressive-avif But I cannot find ANY comparisons between avm and aom.
2024-09-14 09:30:21
So I wonder where anyone would even get that impression or how you could even test it out since I don't think avm is integrated into libheif or ffmpeg or anything
RaveSteel
Demiurge I heard it from this article: https://www.autocompressor.net/blog/progressive-avif But I cannot find ANY comparisons between avm and aom.
2024-09-14 09:32:20
Maybe someone on the AV1 discord conpared then?
jonnyawsom3
RaveSteel Games that are covered ar this time - Satisfactory - Factorio - Star Wars: Outlaws - One of the Yakuza games - CS:GO - WH40K Boltgun - Holocure - Doom Eternal
2024-09-14 09:33:45
If you wanted to give AVIF a nice punch, you could throw in some OpenTTD screenshots (Although maybe not above 8K)
RaveSteel
If you wanted to give AVIF a nice punch, you could throw in some OpenTTD screenshots (Although maybe not above 8K)
2024-09-14 09:34:18
While true, I try to be objective in my selection
2024-09-14 09:34:44
And besides, JXL beats AVIF even without cherry picking ;)
Quackdoc
If you wanted to give AVIF a nice punch, you could throw in some OpenTTD screenshots (Although maybe not above 8K)
2024-09-14 09:36:10
speaking of openttd, I did download it on my phone to try it because of the chatting of it, doesn't seem very usable on phone lol
RaveSteel
2024-09-14 09:37:04
That's probably like trying to play a desktop game directly on a phone display in terms of UI
jonnyawsom3
2024-09-14 09:37:43
It does work... Surprisingly well, but the UI is still very much in the 90s so trying to use it on a phone is... A talent
Quackdoc
2024-09-14 09:37:53
it's also very... wide
juliobbv
Demiurge I heard it from this article: https://www.autocompressor.net/blog/progressive-avif But I cannot find ANY comparisons between avm and aom.
2024-09-14 10:43:21
AVM is in constant development, so any comparisons between it and AOM are bound to become obsolete
2024-09-14 10:47:27
we'll most likely have to wait until like 2030 for mainstream AV2 to be a thing 😄
monad
2024-09-14 01:54:10
At this time I have 380 images from
monad Btw, looks like 0.11 is slower and usually denser than 0.10.
2024-09-16 02:27:17
Accidentally sent that one with CPU time. Here's the more practical real time plot.
CrushedAsian255
monad Accidentally sent that one with CPU time. Here's the more practical real time plot.
2024-09-16 02:28:49
is bottom left best?
monad
2024-09-16 02:29:07
bottom left is best bpp, worst speed
CrushedAsian255
2024-09-16 02:29:24
so top left is best?
monad
2024-09-16 02:30:56
the pareto front is represented by points for which there are no points both further left and further up
2024-09-16 02:32:23
it is not so interesting here, the general conclusion is 0.11 is slower and denser
2024-09-16 02:41:18
mixed results on ui/text. 0.11 is denser at lowest efforts, less dense at mid-higher efforts
Demiurge
2024-09-19 08:29:35
Anyone recommend some good images for lossy codec stress testing?
2024-09-19 08:30:50
Images that are a problem for avif or jxl
2024-09-19 08:31:01
or any lossy codec.
2024-09-19 08:33:32
So far I really like this image because there's so much stuff that lossy codecs hate in it: https://storage.googleapis.com/avif-comparison/images/subset1/sample_images/2011-03-05_03-13_Madeira_159_Funchal__Mercado_dos_Lavradores.png
_wb_
2024-09-19 08:40:09
yes that's a nice one
Demiurge
2024-09-19 08:51:11
`avifenc -j all --autotiling -q 50 -s 4 mercado.png mercado.avif` `cjxl.exe -q 75 mercado.png mercado.jxl`
2024-09-19 08:51:47
The <:JXL:805850130203934781> is superior in almost every way except one
2024-09-19 08:52:25
the colors are notably less vibrant. Everything else is noticeably more detailed and closer to the original, except for color.
_wb_
2024-09-19 08:53:25
generally problem images for avif are these: - close-ups of human faces — avif will smudge any subtle skin texture - nature photography (e.g. landscape with lots of trees, bushes etc) — avif will require lots of bits for all of the entropy in such images - clouds — it smoothes them into plastic balloons - anything with subtle, low-contrast textures, e.g. concrete walls, marble statues, etc — again, will be smoothed into oblivion typical problem images for jxl are these: (or rather, images where avif can look better than jxl at low-medium quality) - anything with high-contrast edges — jxl will have ringing artifacts while avif can avoid those better even at low quality - anything where "smoothing things into oblivion" is not considered a problem, like images of shiny cars or colorful balloons, or noisy skies where avif's "denoising" can be preferable to jxl's attempts at preserving the noise.
Demiurge
2024-09-19 08:53:46
`aom [enc]:3.6.1` `cjxl v0.11.0 4df1e9e [AVX2,SSE2]`
_wb_ generally problem images for avif are these: - close-ups of human faces — avif will smudge any subtle skin texture - nature photography (e.g. landscape with lots of trees, bushes etc) — avif will require lots of bits for all of the entropy in such images - clouds — it smoothes them into plastic balloons - anything with subtle, low-contrast textures, e.g. concrete walls, marble statues, etc — again, will be smoothed into oblivion typical problem images for jxl are these: (or rather, images where avif can look better than jxl at low-medium quality) - anything with high-contrast edges — jxl will have ringing artifacts while avif can avoid those better even at low quality - anything where "smoothing things into oblivion" is not considered a problem, like images of shiny cars or colorful balloons, or noisy skies where avif's "denoising" can be preferable to jxl's attempts at preserving the noise.
2024-09-19 08:54:58
But smoothing the noise is never preferable if the goal is fidelity.
2024-09-19 08:55:28
But yeah, images that are already smooth to begin with are definitely avif's strong suit.
2024-09-19 09:04:23
If I was viewing or showing a flicker test of a noisy sky image, and one encoder shows all the noise smoothed out, that would look pretty embarrassing for that encoder.
2024-09-19 09:04:40
Assuming you have the original to compare against.
2024-09-19 09:06:58
If anyone has any specific images, like a detailed facial close up, or anime, or a sky, or marble and concrete, etc... I would like to experiment with them and maybe make some nice comparisons showing jxl's progress
jonnyawsom3
Demiurge the colors are notably less vibrant. Everything else is noticeably more detailed and closer to the original, except for color.
2024-09-19 09:20:22
You might want to check older versions of libjxl too. I know that was a regression but can't recall which release
Demiurge
2024-09-19 09:39:49
I think I am one of the first to point out the loss of color in the first place :) And it's been a problem for a long time it looks like.
2024-09-19 09:42:07
In this mercado image, it's particularly important for the thin red beams in the bottom right of the image.
CrushedAsian255
_wb_ generally problem images for avif are these: - close-ups of human faces — avif will smudge any subtle skin texture - nature photography (e.g. landscape with lots of trees, bushes etc) — avif will require lots of bits for all of the entropy in such images - clouds — it smoothes them into plastic balloons - anything with subtle, low-contrast textures, e.g. concrete walls, marble statues, etc — again, will be smoothed into oblivion typical problem images for jxl are these: (or rather, images where avif can look better than jxl at low-medium quality) - anything with high-contrast edges — jxl will have ringing artifacts while avif can avoid those better even at low quality - anything where "smoothing things into oblivion" is not considered a problem, like images of shiny cars or colorful balloons, or noisy skies where avif's "denoising" can be preferable to jxl's attempts at preserving the noise.
2024-09-19 09:42:08
Can you fix point 2 by denoising before JXL ?
Demiurge I think I am one of the first to point out the loss of color in the first place :) And it's been a problem for a long time it looks like.
2024-09-19 09:42:34
Yeah I remember you mentioning this a few months ago
Demiurge
2024-09-19 09:43:28
denoising before encoding will probably reduce the bitrate a lot by making the image easier to encode (removing entropy from the image)
CrushedAsian255
2024-09-19 09:44:06
Since AVIF is doing it anyway, could JXL do that as a preprocessing step for really high distances
Demiurge
2024-09-19 09:44:39
Only if they name it "avif mode"
CrushedAsian255
Demiurge I think I am one of the first to point out the loss of color in the first place :) And it's been a problem for a long time it looks like.
2024-09-19 09:44:40
Maybe chroma is being rounded down instead of rounded to nearest?
Demiurge Only if they name it "avif mode"
2024-09-19 09:44:53
As an optional flag ofc
Demiurge
CrushedAsian255 Maybe chroma is being rounded down instead of rounded to nearest?
2024-09-19 09:45:04
that is kinda what it looks like... It just looks really desaturated.
CrushedAsian255
Demiurge Only if they name it "avif mode"
2024-09-19 09:45:57
but theoretically if this was implemented could it help JXL be more competitive with AV1 at low quality ?
Oleksii Matiash
Demiurge `avifenc -j all --autotiling -q 50 -s 4 mercado.png mercado.avif` `cjxl.exe -q 75 mercado.png mercado.jxl`
2024-09-19 09:47:01
300 ms to open avif vs 16 ms for jxl 🤦‍♂️
Demiurge
CrushedAsian255 Since AVIF is doing it anyway, could JXL do that as a preprocessing step for really high distances
2024-09-19 09:52:24
Personally I don't like this idea. A codec should reliably transmit a signal faithful to the original signal. I think, if there is a problem with the transmission, and the transmission does not contain enough information to reconstruct a clear and accurate representation of the original signal, it would be nice if that were more obvious and somehow conveyed to the viewer in a way that minimally obscures or distracts from the information that's present. And I think blue noise is the perfect way to convey that, as noise is already universally interpreted by all as a sign of a weak signal, and blue noise in particular is easy to see through, minimally obscuring what's underneath. That's why it's used so well in dithering.
damian101
Demiurge So far I really like this image because there's so much stuff that lossy codecs hate in it: https://storage.googleapis.com/avif-comparison/images/subset1/sample_images/2011-03-05_03-13_Madeira_159_Funchal__Mercado_dos_Lavradores.png
2024-09-19 09:52:40
there is a horizontal line going through the middle of the image, where pixels are shifted somehow...
2024-09-19 09:53:09
introduced by the camera maybe?
2024-09-19 09:53:27
most visible in the fruits
2024-09-19 09:54:27
I wonder what's the origin of that. Looks like the picture is pieced together without being perfectly aligned
_wb_
2024-09-19 09:58:30
the original source of this image is https://upload.wikimedia.org/wikipedia/commons/2/2f/2011-03-05_03-13_Madeira_159_Funchal%2C_Mercado_dos_Lavradores.jpg
damian101
2024-09-19 10:00:07
WTF
2024-09-19 10:00:13
there is something very weird going on
Demiurge
CrushedAsian255 Maybe chroma is being rounded down instead of rounded to nearest?
2024-09-19 10:00:31
Not only does it look desaturated, it looks like the chroma channels are just heavily distorted in general, almost like they're being stored at a lower resolution, and with more severe ringing artifacts and quantization noise.
2024-09-19 10:01:51
But when it comes to the creases on clothes, the texture on walls, etc, it's way better than the avif.
_wb_
2024-09-19 10:03:15
that line you see <@401816384109150209> , is it going from the cauliflower to the oranges? I don't think there's something wrong, just some details in the image happen to line up by accident, and after the downscaling it looks a bit like a seam or something
Demiurge
2024-09-19 10:03:20
pretty good work overall especially people working primarily on lossy psycho tuning like Jyrki :)
2024-09-19 10:04:10
Overall I would say it's slightly better than aom, after deducting some points for the color.
damian101
_wb_ that line you see <@401816384109150209> , is it going from the cauliflower to the oranges? I don't think there's something wrong, just some details in the image happen to line up by accident, and after the downscaling it looks a bit like a seam or something
2024-09-19 10:06:57
no, that one might be natural...
_wb_
2024-09-19 10:08:21
could you describe where this line is then? I can't seem to see it
damian101
2024-09-19 10:09:02
I will come back to this...
2024-09-19 10:09:46
because the actual weird thing is not the existence of that line, but something else with it... need a bit of time to investigate...
Demiurge
2024-09-19 10:10:14
I even tested out lossy modular... incredibly, even though it's far less mature, it does just as good as vardct on this mercado image!
CrushedAsian255
2024-09-19 10:10:50
I feel like lossy modular might have some serious untapped potential
Demiurge
2024-09-19 10:11:28
It has the same exact color issue too, so I think it must somehow share some code with vardct even though it's a completely different method of quantization
CrushedAsian255 I feel like lossy modular might have some serious untapped potential
2024-09-19 10:12:15
it definitely has. Wavelet based image compression is a pretty good idea in general and the way it's designed in jxl is very, VERY clever from what I can tell
2024-09-19 10:12:40
But modular is a pretty blanket term in jxl to refer to anything that isn't vardct
2024-09-19 10:13:41
lossy modular seems like a super improved version of jpeg2k
CrushedAsian255
2024-09-19 10:13:51
What else is there?
2024-09-19 10:14:15
You can’t use RCTs alone to compres
Demiurge
2024-09-19 10:14:27
modular has a whole bunch of different modes and knobs and switches.
2024-09-19 10:15:10
"lossy modular" is synonymous with Squeeze/Haar wavelet transform
CrushedAsian255
2024-09-19 10:15:20
So does VarDCT though
Demiurge
2024-09-19 10:16:22
modular also has some stuff from webp-lossless and a whole bunch of tools for lossy and lossless coding.
2024-09-19 10:16:43
splines are considered part of modular mode too I think. Anything that isn't vardct.
2024-09-19 10:16:51
patches and dots too maybe?
_wb_
2024-09-19 10:17:13
both vardct and lossy modular use XYB, maybe the balance between luma and chroma should be adjusted a bit
Demiurge
_wb_ both vardct and lossy modular use XYB, maybe the balance between luma and chroma should be adjusted a bit
2024-09-19 10:17:56
Keep in mind the problem is only noticeable at low bitrates. I wouldn't want to make a suggestion that only works on low bitrates but harms things on high bitrates.
Tirr
2024-09-19 10:18:53
with modular, maybe one can do some simple edge detection transform, put data from the transform into hidden channel, and do some prediction with the hidden channel
2024-09-19 10:20:17
but maybe the hidden channel doesn't compress very well
_wb_
2024-09-19 10:21:00
one thing is that both are basically scaling the amount of quantization in the same way for luma and chroma, as in: the amount of quantization is different for each X,Y,B component, but the way it scales with the distance setting is the same (if I'm not mistaken)
2024-09-19 10:22:20
it could be useful to apply different scaling curves to the quantization, since chroma starts out already rougher than luma so if you go to lower quality, you might run into chroma issues earlier than luma issues
CrushedAsian255
2024-09-19 10:22:59
Yeah, we need to make sure the chroma does quantise to a point where it’s noticeably dulling colours
Demiurge
2024-09-19 10:23:09
there's insane untapped potential :) For extremely low bitrates, you could use some really expensive but effective techniques like spline detection and image decomposition into multiple layers for encoding different parts of an image in its most effective encoding.
CrushedAsian255
2024-09-19 10:23:14
Less accurate colours, sure, but we don’t want noticeable dullness
Demiurge
_wb_ one thing is that both are basically scaling the amount of quantization in the same way for luma and chroma, as in: the amount of quantization is different for each X,Y,B component, but the way it scales with the distance setting is the same (if I'm not mistaken)
2024-09-19 10:26:46
that makes sense. It's not taking into account that it's already coarse quantization to begin with and it shouldn't go below a certain extreme-o quasimodo uglisimo setting
damian101
_wb_ could you describe where this line is then? I can't seem to see it
2024-09-19 10:28:54
Ok, I found out what is going on. Gwenview, eats up an entire line of pixels when displaying the image at 100% scaling. So does it when watching at 200%. At 400%, not anymore (most likely because the scaling method changes). So, most likely you could not see what I was seeing because your image viewer actually displayed the image correctly. Gwenview eats up the same line when displaying the image transcoded to JXL. But it eats up a different line when the image is transcoded to AVIF.
2024-09-19 10:29:22
So, don't use Gwenview, I guess.
_wb_
2024-09-19 10:29:35
why does it eat a line when viewing at 100%? that doesn't make any sense
damian101
2024-09-19 10:30:01
indeed it doesn't
_wb_
2024-09-19 10:30:03
it's supposed to not do any scaling at all and just send the pixels 1:1
damian101
2024-09-19 10:30:17
right
_wb_ it's supposed to not do any scaling at all and just send the pixels 1:1
2024-09-19 10:34:27
Setting display scaling from 125% to 100% fixes the issue.
2024-09-19 10:34:55
Using KDE Plasma on Wayland btw
CrushedAsian255
2024-09-19 10:38:03
GPU drivers may be eating the pixels then
damian101
CrushedAsian255 GPU drivers may be eating the pixels then
2024-09-19 10:38:43
All other applications can display everything correctoly, MPV, qimgv, ...
2024-09-19 10:39:18
also very weird that with AVIF, the missing line is a different one
2024-09-19 10:39:30
I assume because it decodes to YUV, not RGB?
2024-09-19 10:39:34
still makes little sense
jonnyawsom3
CrushedAsian255 Can you fix point 2 by denoising before JXL ?
2024-09-19 11:03:20
Vaguely related, but if I recall above distance 20 cjxl downsamples the image and raises the quality again to compensate
Demiurge I even tested out lossy modular... incredibly, even though it's far less mature, it does just as good as vardct on this mercado image!
2024-09-19 11:04:03
Could try delta palette, but that's only cjxl 0.6
spider-mario
_wb_ why does it eat a line when viewing at 100%? that doesn't make any sense
2024-09-19 08:15:51
probably some tiling + off-by-one
RaveSteel
2024-09-20 10:41:47
Continuing from https://discord.com/channels/794206087879852103/804324493420920833/1286484147518570547. I have not tried e10. Tested with 0.11.0 No settings were given besides effort. ``` 226852 The_Night_Watch_-_HD_e1.jxl 226852 The_Night_Watch_-_HD_e2.jxl 207704 The_Night_Watch_-_HD_e3.jxl 207704 The_Night_Watch_-_HD_e4.jxl 207704 The_Night_Watch_-_HD_e5.jxl 207704 The_Night_Watch_-_HD_e6.jxl 207704 The_Night_Watch_-_HD_e7.jxl 204472 The_Night_Watch_-_HD_e8.jxl 204040 The_Night_Watch_-_HD_e9.jxl ``` e1 to e7 all took pretty much exactly 60 seconds to encode as well as very similar CPU and RAM usage. More interesting are the filesizes of the recompressed JXLs. e1 to e7 pretty much all behaved like the attached graph shows.
2024-09-20 10:42:50
The plots for e8 and e9 also look similar, except e9 took much longer
2024-09-20 10:43:30
I posted this as graphs instead of numbers to show the resource usage over time
2024-09-20 10:58:15
I also tested how much respources are used to open the images. I worked around the Qt-JXL-plugin limitation by recompiling Kimageformats. I switched from gwenview to nomacs because it is faster and uses less resources. e1 to e6 also look very similar here, it gets more interesting at e7 to e9.
Demiurge
2024-09-20 01:09:02
When comparing 0.11 to 0.10, I notice there is a difference but unfortunately I don't notice any remarkable improvement yet. Maybe the improvements are only apparent in a particular image type.
2024-09-20 01:09:56
As far as lossy/psychovisual performance goes.
_wb_
2024-09-20 01:43:31
I don't think there are any _big_ differences between 0.10 and 0.11 in terms of encoding/quality.
Demiurge
2024-09-20 03:32:07
I know it was being tweaked, but idk what type of images it was being tuned for.
Kampidh
Here's a 'screenshot' my friend took of their last game, the site downloads the original PNG but displays jpegs for the zooming https://www.easyzoom.com/imageaccess/1eaf033ff25a41609b06f3103a307458?show-annotations=false
2024-09-21 03:00:20
tried this one for luls, it somehow encodes but jxlinfo got confused at the end
juliobbv
Demiurge So far I really like this image because there's so much stuff that lossy codecs hate in it: https://storage.googleapis.com/avif-comparison/images/subset1/sample_images/2011-03-05_03-13_Madeira_159_Funchal__Mercado_dos_Lavradores.png
2024-09-21 07:17:54
I was curious about how this image would fare with SVT-AV1-PSY (tune still-image, preset 3) and it does seem to do significantly better compared to aomenc at this size
2024-09-21 07:30:07
the difference is most noticeable around the column's texture, PSY retains it much better despite using 8% less bitrate
Demiurge
2024-09-21 08:04:06
Hmm...
2024-09-21 08:04:22
But your AVIF is using chroma subsampling
2024-09-21 08:04:35
I can tell by how dreadful the red jacket looks :D
2024-09-21 08:04:52
So it's not a direct comparison to the 4:4:4 avif
Oleksii Matiash
juliobbv I was curious about how this image would fare with SVT-AV1-PSY (tune still-image, preset 3) and it does seem to do significantly better compared to aomenc at this size
2024-09-21 08:27:51
IrfanView opens it as black screen, FastStone says it won't open without installing AV1 extension from MS, that is actually installed. Other avifs are opened fine by both viewers
juliobbv
Demiurge So it's not a direct comparison to the 4:4:4 avif
2024-09-21 08:29:10
correct, SVT only support 4:2:0 right now 😭
Demiurge
2024-09-21 08:29:49
:(
juliobbv
Oleksii Matiash IrfanView opens it as black screen, FastStone says it won't open without installing AV1 extension from MS, that is actually installed. Other avifs are opened fine by both viewers
2024-09-21 08:30:52
no idea what's going on to be honest... opens on default MacOS viewer, Safari and Chrome
Oleksii Matiash
juliobbv no idea what's going on to be honest... opens on default MacOS viewer, Safari and Chrome
2024-09-21 08:31:11
FF also opens it without issues
juliobbv
Demiurge I can tell by how dreadful the red jacket looks :D
2024-09-21 08:32:14
also, there are some viewers that display 4:2:0 chroma with nearest neighbor interpolation, which looks 🤮
CrushedAsian255
juliobbv also, there are some viewers that display 4:2:0 chroma with nearest neighbor interpolation, which looks 🤮
2024-09-21 08:33:18
why tf
2024-09-21 08:33:43
waterfox also opens it
Demiurge
2024-09-21 08:35:00
yeah, waterfox uses nearest neighbor too
CrushedAsian255
2024-09-21 08:35:30
so that's why it looked trash
2024-09-21 08:35:30
:/
2024-09-21 08:35:47
i thought it was just low bpp
Demiurge
2024-09-21 08:37:31
I can tell by the pixels, and by seeing many neighbors in my time.
CrushedAsian255
2024-09-21 08:39:14
when zoomed in it's quite obvious blocking
A homosapien
Demiurge yeah, waterfox uses nearest neighbor too
2024-09-21 08:46:29
This is just a native issue with avif ~~(and all video-based image codecs)~~, the spec doesn't actually require chroma upsampling, it's expected that video players/image viewers do their own chroma upsampling. It's a strange leftover from the video codec world.
2024-09-21 08:46:36
Relevant issue: https://github.com/GoogleChromeLabs/squoosh/issues/1368#issuecomment-1589663546
CrushedAsian255
A homosapien This is just a native issue with avif ~~(and all video-based image codecs)~~, the spec doesn't actually require chroma upsampling, it's expected that video players/image viewers do their own chroma upsampling. It's a strange leftover from the video codec world.
2024-09-21 08:47:38
even av1 doesn't specifiy?
A homosapien
2024-09-21 08:48:16
it's a video codec thing. all videos don't chroma upsample, your video player does that
2024-09-21 08:48:29
at least that's how I understand it
CrushedAsian255
2024-09-21 08:48:41
i would expect them to at least specify an upscaling mode?
2024-09-21 08:49:16
does the h.26x formats specify?
2024-09-21 08:50:03
webp assumes bilinear
2024-09-21 08:50:04
https://fossies.org/linux/libwebp/sharpyuv/sharpyuv.h
2024-09-21 08:50:18
Assumes that the image will be upsampled using a bilinear filter. If nearest neighbor is used instead, the upsampled image might look worse than with standard downsampling
A homosapien
2024-09-21 08:51:04
`avifdec` I think does have bilinear chroma upscaling enabled by default.
2024-09-21 08:52:04
but again it's not required by the spec, which is a problem
CrushedAsian255
2024-09-21 08:52:24
Does JXL specify?
_wb_
2024-09-21 08:52:31
Yes
CrushedAsian255
2024-09-21 08:52:47
Although is it just used for JPEG or can you enable it?
_wb_
2024-09-21 08:52:49
This is a typical difference between video and image
2024-09-21 08:53:35
Still image codecs consider color transforms and chroma subsampling as part of the codec, basically as coding tools that need to be specified
2024-09-21 08:53:48
Video codecs consider those things "application problems"
CrushedAsian255
2024-09-21 08:53:56
Bruh
_wb_
CrushedAsian255 Although is it just used for JPEG or can you enable it?
2024-09-21 08:55:24
Libjxl only used ycbcr when recompressing JPEGs, when doing lossy from pixels it only uses xyb and doesn't do subsampling
2024-09-21 08:56:14
Though libjxl does use whole-image downsampling when you go down to really low qualities (d>20 iirc)
CrushedAsian255
2024-09-21 08:57:15
whole-image downsampling like it just cuts the resolution by 2?
A homosapien
2024-09-21 08:57:22
It's an implicit `--resampling=2` right?
_wb_
2024-09-21 08:57:22
Yep
2024-09-21 08:57:28
Yes
CrushedAsian255
2024-09-21 08:57:52
is subsampling coded per frame or per image?
_wb_
2024-09-21 08:58:00
Per frame
CrushedAsian255
2024-09-21 08:58:18
i guess you could seperate the image into more and less important parts and use patches to have some parts more and less resolution
_wb_
2024-09-21 08:59:04
Yes, such things are possible.
CrushedAsian255
2024-09-21 08:59:37
like if it's an image of a sign on a background, you can make the sign clear and make everything else downsampled
A homosapien
CrushedAsian255 i guess you could seperate the image into more and less important parts and use patches to have some parts more and less resolution
2024-09-21 09:00:23
Maybe in the far future with lossy e10/11?
2024-09-21 09:01:02
Wishful thinking I know but I like to dream
CrushedAsian255
2024-09-21 09:02:52
since there are so many coding tools, if jxl becomes fully mainstream im guessing people will make forks that are tuned for specific needs
2024-09-21 09:03:00
like one for good quality at ultra low bitrates
2024-09-21 09:03:14
or fast high quality but don't care about ratio as much
A homosapien
2024-09-21 09:06:05
Considering how expressive the bitstream is, the possibilities are endless <:pancakexl:1283670260209156128>
_wb_
2024-09-21 09:14:25
Yes, there is a lot of room left for more advanced encoding approaches
2024-09-21 09:23:09
1. Design a future-proof, very expressive image codec. 2. Implement a complete and fast decoder. 3. Implement an encoder that is good enough to show the potential. 4. Get enough adoption so people can conveniently use it in practice. ---- we are now here ----- 5. Get universal adoption so interoperability is not an issue. 6. Make better encoders that make use of more of the available coding tools. 7. Get better at niche/atypical image content (currently focus is mostly on photos) 8. Get (more) applications to support new functionality that jxl enables, like layers and the various extra channel types.
CrushedAsian255
2024-09-21 09:23:42
can JXL [simulate an entire computer system](<https://en.wikipedia.org/wiki/FORCEDENTRY#Exploit>) ?
_wb_
2024-09-21 09:29:15
I don't think so. Or at least it will have very limited resources. It's not Turing complete.
CrushedAsian255
_wb_ 1. Design a future-proof, very expressive image codec. 2. Implement a complete and fast decoder. 3. Implement an encoder that is good enough to show the potential. 4. Get enough adoption so people can conveniently use it in practice. ---- we are now here ----- 5. Get universal adoption so interoperability is not an issue. 6. Make better encoders that make use of more of the available coding tools. 7. Get better at niche/atypical image content (currently focus is mostly on photos) 8. Get (more) applications to support new functionality that jxl enables, like layers and the various extra channel types.
2024-09-21 09:36:43
₩Ɇ ₩łⱠⱠ ₮₳₭Ɇ ØVɆⱤ ₮ⱧɆ ₩ØⱤⱠĐ Ø₣ ł₥₳₲Ɇ₴
_wb_ Yes, there is a lot of room left for more advanced encoding approaches
2024-09-21 09:37:24
so *that's* why it's called "long-term"
2024-09-21 09:37:40
does the X stand for something in perticular?
_wb_
2024-09-21 09:38:02
I wasn't there when JPEG chose a name
2024-09-21 09:38:22
But they had XR, XT and XS already
CrushedAsian255
2024-09-21 09:38:30
probably eXtended or eXtension
2024-09-21 09:38:40
or maybe Elon musk works for JPEG
2024-09-21 09:39:33
JPEG XL: JPEG Extended Long-term
jonnyawsom3
CrushedAsian255 i guess you could seperate the image into more and less important parts and use patches to have some parts more and less resolution
2024-09-21 09:53:54
Using a 3 layer image with blend you could make your own chroma subsampled image ;P
CrushedAsian255
Using a 3 layer image with blend you could make your own chroma subsampled image ;P
2024-09-21 09:54:10
i guess
jonnyawsom3
CrushedAsian255 can JXL [simulate an entire computer system](<https://en.wikipedia.org/wiki/FORCEDENTRY#Exploit>) ?
2024-09-21 09:56:49
I stumbled across that while looking into https://github.com/libjxl/libjxl/issues/3775
2024-09-21 09:57:03
As the researchers said "Amazing but horrifying" or something along those lines
CrushedAsian255 does the X stand for something in perticular?
2024-09-21 09:58:04
One idea was JPEG XtendedLife To try and live as long as the original JPEG has
DNFrozen
2024-09-21 03:34:00
so after about 2 weeks roughly 20% of my png images are already converted to jxl with effort 11 <:Stonks:806137886726553651>
A homosapien
CrushedAsian255 can JXL [simulate an entire computer system](<https://en.wikipedia.org/wiki/FORCEDENTRY#Exploit>) ?
2024-09-21 04:10:25
Jpeg XL is "Turing complete" within 1024 x 1024 px https://dbohdan.com/jpeg-xl
CrushedAsian255
One idea was JPEG XtendedLife To try and live as long as the original JPEG has
2024-09-21 10:26:14
JPEG Excel?
Orum
DNFrozen so after about 2 weeks roughly 20% of my png images are already converted to jxl with effort 11 <:Stonks:806137886726553651>
2024-09-22 07:56:30
how many images, or perhaps more importantly, pixels, do you need to convert?
2024-09-22 07:56:44
because that sounds like a hell of a lot...
_wb_
2024-09-22 08:04:44
Effort 11 is just silly
DNFrozen
2024-09-22 08:06:07
the size of the images is variable there are many small images like 300*300 that take like 3-4 minutes to convert (with one core) and some much bigger files the folders that are converted are in total around 5GB and the ones that are not around 20GB but beside the png files they also contain jxl files that are converted with effort 9 🤷‍♂️
2024-09-22 08:06:14
it's a bit messy
Orum
2024-09-22 08:08:29
a small image takes 3 to 4 minutes?!
DNFrozen
2024-09-22 08:08:31
and there are also a few images that failed to convert with the newest version but overall just a few I'll deal with them when the rest is converted
Orum a small image takes 3 to 4 minutes?!
2024-09-22 08:09:00
effort 11
Orum
2024-09-22 08:09:21
yeah, I'm not on a new enough <:JXL:805850130203934781> to have access to that yet
DNFrozen
2024-09-22 08:09:54
thats why they hide even the option to use it by default
Orum
2024-09-22 08:10:34
it was added in 0.11.0?
DNFrozen
2024-09-22 08:11:35
it was there before but 0.11.0 made it much faster
2024-09-22 08:12:34
2024-09-22 08:12:51
usually it only lets you do 10
2024-09-22 08:13:07
but with this you can use the good stuff
Orum
2024-09-22 08:14:30
ahh, I see <:PepeOK:805388754545934396>
DNFrozen
2024-09-22 08:14:52
and then there is also this
Orum
2024-09-22 08:14:54
yeah, e 11 is not worth it...
DNFrozen
2024-09-22 08:15:54
but i haven't gotten an executeable for that but for now e11 should be good enough
Orum
2024-09-22 08:16:37
I would only bother with e 10
2024-09-22 08:16:51
e 11 is just terribly slow
DNFrozen
2024-09-22 08:17:07
all i hear is weakness
Orum
2024-09-22 08:17:21
all I hear is practicality
2024-09-22 08:17:37
honestly I produce images faster than I can encode them in e11
2024-09-22 08:17:48
so I would literally never finish encoding them if I used e11
DNFrozen
2024-09-22 08:17:54
don't question e11
2024-09-22 08:19:42
yeah if i would add new png faster i would have to give up on 11
TheBigBadBoy - 𝙸𝚛
2024-09-22 03:58:14
e11 ftw 💯
monad
2024-09-22 04:09:31
it is an expert option, so it's obviously good
jonnyawsom3
2024-09-22 08:09:29
<@384009621519597581> some experiments with patch detection on tiled images https://discord.com/channels/794206087879852103/803645746661425173/1247714711777054730 https://discord.com/channels/794206087879852103/803645746661425173/1280929625555603480
AccessViolation_
2024-09-22 09:08:55
👀
2024-09-22 09:22:54
love me some patches
Demiurge
2024-09-24 10:04:21
`Trying 512341239571 combinations... Waiting until a better compression algorithm is invented... Estimated time: only 3 seconds... relative to the predicted heat death of the universe.`
afed
2024-09-24 04:27:51
<:Poggers:805392625934663710> https://github.com/WangXuan95/NBLI
2024-09-24 04:34:56
2024-09-24 04:38:24
<https://github.com/WangXuan95/Image-Compression-Benchmark>
_wb_
2024-09-24 05:05:11
Would be interesting to add multithreaded results to that...
2024-09-24 05:06:45
Also: why make a new lossless format in 2024 that can only do 8-bit?
CrushedAsian255
2024-09-24 05:10:50
How does it work?
2024-09-24 05:10:55
What algorithm)
jonnyawsom3
_wb_ Would be interesting to add multithreaded results to that...
2024-09-24 05:24:25
That looks like multithreaded to me, matches my speeds on cjxl with 8 threads at least
2024-09-24 05:26:45
`3840 x 2160, geomean: 92.225 MP/s [87.51, 94.23], , 10 reps, 8 threads.` `3840 x 2160, geomean: 22.040 MP/s [21.63, 22.27], , 10 reps, 0 threads.`
afed
2024-09-24 05:30:05
```All above compressor/decompressor are tested in single-threaded, See Lossless-Image-Compression-Benchmark for detail.```
jonnyawsom3
2024-09-24 05:31:46
Then either their CPU is 8x faster than mine, or they didn't realise cjxl runs multithreaded by default
afed
2024-09-24 05:33:29
CrushedAsian255
2024-09-24 05:34:56
They must assume num threads 0 means no multi threading
jonnyawsom3
2024-09-24 05:35:04
It does
CrushedAsian255
2024-09-24 05:35:24
As in single threading only correct
jonnyawsom3
2024-09-24 05:37:36
```wintime -- cjxl -d 0 --disable_output Test.png -e 3 --num_threads=0 --num_reps=5 JPEG XL encoder v0.11.0 0185fcd [AVX2,SSE2] Encoding [Modular, lossless, effort: 3] Compressed to 9481.4 kB (9.145 bpp). 3840 x 2160, geomean: 4.056 MP/s [4.02, 4.10], , 5 reps, 0 threads. PageFaultCount: 738871 PeakWorkingSetSize: 233.5 MiB QuotaPeakPagedPoolUsage: 32.93 KiB QuotaPeakNonPagedPoolUsage: 14.2 KiB PeakPagefileUsage: 262 MiB Creation time 2024/09/24 18:28:41.369 Exit time 2024/09/24 18:28:51.825 Wall time: 0 days, 00:00:10.455 (10.46 seconds) User time: 0 days, 00:00:00.718 (0.72 seconds) Kernel time: 0 days, 00:00:09.734 (9.73 seconds)``` ```wintime -- cjxl -d 0 --disable_output Test.png -e 3 --num_threads=8 --num_reps=5 JPEG XL encoder v0.11.0 0185fcd [AVX2,SSE2] Encoding [Modular, lossless, effort: 3] Compressed to 9481.4 kB (9.145 bpp). 3840 x 2160, geomean: 19.078 MP/s [18.65, 19.58], , 5 reps, 8 threads. PageFaultCount: 819563 PeakWorkingSetSize: 237.1 MiB QuotaPeakPagedPoolUsage: 33.18 KiB QuotaPeakNonPagedPoolUsage: 17.52 KiB PeakPagefileUsage: 279.8 MiB Creation time 2024/09/24 18:29:34.123 Exit time 2024/09/24 18:29:36.520 Wall time: 0 days, 00:00:02.396 (2.40 seconds) User time: 0 days, 00:00:03.453 (3.45 seconds) Kernel time: 0 days, 00:00:11.437 (11.44 seconds)```
2024-09-24 05:40:06
0 threads means no multithreading, and 8 threads matches their results, so either something went wrong or they got a magic 5x encoding boost
monad
2024-09-24 07:42:01
maybe it's because you're comparing MB/s to MP/s
_wb_
2024-09-24 08:15:53
That's a 3x difference for 8-bit RGB
DZgas Ж
DNFrozen and then there is also this
2024-09-24 11:18:33
verypog ```JPEG XL encoder v0.14.0 890f6hdf [AVX10,AVX2,SSE4,SSE2] Encoding [Modular, lossless, effort: 14] Trying 97960325 configurations, please be patient ...```
2024-09-24 11:22:06
It's a bit of a shame that for 1 bit of images like 64x64, the maximum compression configuration is achieved already on the parameters -e 5. And no further new breakthrough are taking place... It's like being stuck in a local minimum
jonnyawsom3
monad maybe it's because you're comparing MB/s to MP/s
2024-09-25 12:56:21
Never even occurred to me that they'd use MB/s for image comparisons, but I suppose it makes sense. Thanks for pointing it out
DZgas Ж It's a bit of a shame that for 1 bit of images like 64x64, the maximum compression configuration is achieved already on the parameters -e 5. And no further new breakthrough are taking place... It's like being stuck in a local minimum
2024-09-25 12:57:32
There is this https://github.com/libjxl/libjxl/issues/3775#issuecomment-2317324336
2024-09-25 12:57:57
> The trick here was to apply one squeeze step followed by a palette step, which has the effect of turning the 1-bit image into a 2-bit image of half the size. This image compresses better since the MA tree gets a larger effective local neighborhood for context, etc.
CrushedAsian255
> The trick here was to apply one squeeze step followed by a palette step, which has the effect of turning the 1-bit image into a 2-bit image of half the size. This image compresses better since the MA tree gets a larger effective local neighborhood for context, etc.
2024-09-28 08:54:51
Could this work with 2 squeeze steps and a 4 bit image?
2024-09-28 08:57:01
Nevermind squeeze only applies to one half of the image
RaveSteel
2024-09-28 03:33:59
Images which show texture (stone etc.)
2024-09-29 03:18:31
Has anyone benchmarked a dataset exclusively comprised of HDR images and compared JXL to AVIF?
_wb_
2024-09-29 03:28:24
We recently did that in JPEG with some objective metrics. Now we're going to try some subjective experiments...
Demiurge
2024-09-29 09:17:51
Hey guys. I was annoyed with how vipsthumbnail introduces significant halo artifacts when shrinking images intended for codec testing. I'm trying a new vipsthumbnail command for improving the quality of the output. I'll post the command line arguments in a bit.
2024-09-29 09:52:47
`vipsthumbnail -a -t -i srgb -e ./sRGB_v4_ICC_preference.icc -n perceptual -r none -p vsqbs -s 1000x> -o 'tn_%s.jxl[lossless,effort=2,keep=icc]' input.img` The documentation for vipsthumbnail is pretty bad. Here's an explanation. `-a` linear light resize. disables all shrink on load mechanics so it's significantly slower `-t` auto rotate based on exif tag, probably not needed and done by default now `-i srgb` for untagged images, use srgb `-e srgb` export color profile, can also put `srgb` here or a filename. `-n perceptual` profile rendering intent `-r none` no stupid sharpening filter that causes halo `-p vsqbs` new, apparently fast and high quality resampling algorithm instead of the default bilinear method, I haven't really tested it though... `-s 1000x>` resize if more than 1000px wide `-o 'tn_%s.jxl[lossless,effort=2,keep=icc]'` output format template (lossless jxl effort 2 with `tn_` prepended to the filename hope this helps!
2024-09-29 10:05:55
For list of alternatives to vsqbs try `vips --list interpolate`
2024-09-29 10:19:19
vsqbs seems to be the fastest :)
2024-09-30 12:12:43
here's a good illustration of the crushed shadows on d=1
2024-09-30 12:13:17
Here's a really good one, if you look at the dark patch on the right side of the image.
2024-09-30 12:13:57
Just look at any areas that are really dark.
2024-09-30 12:14:14
Keep in mind that the source has color profile information attached (I used jxl as the source.)
2024-09-30 12:21:01
Also look at the blurring behind the woman at the bottom right:
2024-09-30 12:22:01
Overall, I think the encoder probably reserves too many bits for high-contrast areas where a small amount of distortion is harder to notice... and too little bits for low-contrast areas where the same amount of distortion is much easier to notice.
2024-09-30 12:22:53
In order to fully appreciate the effect you need to look at dark images with lots of stuff going on in the deep dark shadows.
2024-09-30 12:23:38
Most images don't have so many really dark regions with lots of subtle shadows, figure and textures happening in the darkness.
2024-09-30 12:24:33
Dark materials would also probably have their textures blurred.
2024-09-30 12:24:45
If only we had more dark test images :)
2024-09-30 12:31:14
Maybe it's a color profile error...
2024-09-30 12:31:33
source: https://wallhere.com/en/wallpaper/566971
2024-09-30 12:36:12
Something REALLY weird is going on here. Look how busted THIS image is. source: https://wallhere.com/en/wallpaper/773518
2024-09-30 12:36:28
It looks like the color profile is being misinterpreted.
2024-09-30 12:36:53
Anyone else notice something extremely wrong in this last image?
RaveSteel
Demiurge Something REALLY weird is going on here. Look how busted THIS image is. source: https://wallhere.com/en/wallpaper/773518
2024-09-30 01:18:13
The d1 encode is bt2020, the source image is bt709
2024-09-30 01:19:40
Indeed, converting the source_wood.jxl rsults in a bt2020 JXL
2024-09-30 01:20:09
Only happens with lossy encoding
2024-09-30 01:20:15
Lossless retains bt709
2024-09-30 01:20:16
weird
2024-09-30 01:39:17
passing `--disable_perceptual_optimizations` while converting results in the output being bt709, same as the input
2024-09-30 01:40:16
But the image looks worse due to this option being specified lol
2024-09-30 01:40:19
Demiurge
2024-09-30 03:59:14
what? Well that's weird. That's definitely some sorta bug that might not actually have anything to do with psycho at all
RaveSteel The d1 encode is bt2020, the source image is bt709
2024-09-30 05:34:28
how can you tell?
Quackdoc
2024-09-30 05:42:40
what happens if you `djxl --color_space=RGB_D65_SRG_Per_SRG` repacling whatever is needed?
A homosapien
2024-09-30 05:43:21
ah colorspace shenanigans, this is why I just encode everything in srgb to eliminate all variables when testing
2024-09-30 05:43:44
I don't trust any program to handle color correctly
Quackdoc
A homosapien ah colorspace shenanigans, this is why I just encode everything in srgb to eliminate all variables when testing
2024-09-30 05:43:56
jokes on you, now you have one of the largest variables that exists, hard coded display/application variations
damian101
A homosapien ah colorspace shenanigans, this is why I just encode everything in srgb to eliminate all variables when testing
2024-09-30 05:45:56
Now half the color-managed software will decode as gamma 2.2, the other as inverse sRGB OETF. So will half the displays.
A homosapien
2024-09-30 05:46:07
https://tenor.com/view/sisyphus-rael-gif-943215023730044045
2024-09-30 05:46:55
It never ends, color management is such a pain
Quackdoc
A homosapien It never ends, color management is such a pain
2024-09-30 05:47:03
it really is
2024-09-30 05:47:16
use android + TV for 1886 [av1_chad](https://cdn.discordapp.com/emojis/862625638238257183.webp?size=48&quality=lossless&name=av1_chad)
A homosapien
2024-09-30 05:52:10
why is displaying color such a mess?
Quackdoc
A homosapien why is displaying color such a mess?
2024-09-30 05:52:39
well, it's a combo of paywalled specifications and it just being super complicated
2024-09-30 05:52:52
this is why I want PQ to catch on so bad because it simplifies a LOT of things
damian101
A homosapien why is displaying color such a mess?
2024-09-30 05:55:06
because some transfer curves have mismatched OETF and EOTF
2024-09-30 05:55:56
and because displays don't signal to the OS what they use
2024-09-30 05:56:08
and because the OS does not signal to applications what the display uses
Quackdoc
because some transfer curves have mismatched OETF and EOTF
2024-09-30 05:56:49
I mean, in sRGB's case the "reference display" is pretty simply defined.
2024-09-30 05:57:41
the issue is the paywalled spec allowing people to push their own BS
damian101
Quackdoc I mean, in sRGB's case the "reference display" is pretty simply defined.
2024-09-30 05:58:01
isn't that just gamma 2.2?
Quackdoc
2024-09-30 05:58:29
yeah, but some displays use the inverse oetf
damian101
2024-09-30 05:58:36
yes
2024-09-30 05:59:01
The issue is, for correct reproduction, you should always encode using the inverse EOTF.
2024-09-30 05:59:49
OETFs that are not the inverse EOTF are just stupid stupid stupid.
2024-09-30 05:59:54
They distort the image.