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

libjxl

_wb_
2021-05-09 01:53:27
That is weird
2021-05-09 01:54:53
What colorspace is your display? Is color management maybe doing its own dithering?
2021-05-09 01:55:36
(what OS and viewer are you using?)
Jim
2021-05-09 01:58:56
Windows 10 - set on sRGB. I used ImageGlass.
2021-05-09 01:59:35
I tried in IrfanView with same result but moving the image at 100% caused the banding to "jiggle"
2021-05-09 02:01:04
Same result in Windows Photo.
diskorduser
2021-05-09 02:27:13
`cxl IMG_20210505_091937_1-sharpened_cmpk_cmpk.jpg cmpk.jxl -d 0.5 -s 8 J P E G \/ | /\ |_ e n c o d e r [v0.3.7 | SIMD supported: AVX2,SSE4,Scalar] Read 3456x4608 image, 7.1 MP/s Encoding [Container | VarDCT, d0.500, kitten | 402-byte Exif], 2 threads. /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../include/c++/10.2.0/bits/atomic_base.h:217: void std::atomic_flag::clear(std::memory_order): Assertion '__b != memory_order_acq_rel' failed. [1] 34292 abort (core dumped) cjxl IMG_20210505_091937_1-sharpened_cmpk_cmpk.jpg cmpk.jxl -d 0.5 -s 8`
2021-05-09 02:27:35
Is it failing because of ram shortage?
_wb_
2021-05-09 02:31:03
Nah it's likely that bug that will be fixed at next sync
diskorduser
2021-05-09 02:31:23
it works fine with -s7 thou
Jyrki Alakuijala
Just wondering though... is a "jxlmux" planned? (Btw, could you hire more people?^^)
2021-05-09 02:35:24
send me your resume: jyrki@google.com and I will put it into our system -- currently our team is not expanding, we are still learning to scale up structure, roles, clarity and happiness with our current size, but there are always exceptions for compelling cases
_wb_
diskorduser it works fine with -s7 thou
2021-05-09 02:37:47
Yes, that bug is in the butteraugli-iteration codepath which is only activated at -s 8/9
Deleted User
veluca kinda want to try it now actually... can you share the jxl file?
2021-05-09 02:54:32
Here is the original in case you want to try different JXL/JPEG variants.
Are you sure you responded to a right thread? I was talking about an optical illusion while in motion (it doesn't exist if you stop zooming in/out), something completely unrelated to dithering.
2021-05-09 02:55:24
Oh, that's what you meant. Anyway, it wouldn't happen with dithered resampling.
veluca
2021-05-09 02:55:27
thanks! although I think that the jpeg you attached to the bug makes for a compelling case already πŸ˜„
Jim
Here is the original in case you want to try different JXL/JPEG variants.
2021-05-09 02:56:16
That one has no banding
Deleted User
Jyrki Alakuijala send me your resume: jyrki@google.com and I will put it into our system -- currently our team is not expanding, we are still learning to scale up structure, roles, clarity and happiness with our current size, but there are always exceptions for compelling cases
2021-05-09 02:57:14
I wasn't talking about me. ^^ I was hoping Google could send over some more devs to the libjxl team. πŸ˜„
Jim That one has no banding
2021-05-09 02:57:38
What display are you using?
veluca
I wasn't talking about me. ^^ I was hoping Google could send over some more devs to the libjxl team. πŸ˜„
2021-05-09 02:58:21
that'd be a bit problematic right now from what I understand of things
Deleted User
Just wondering though... is a "jxlmux" planned? (Btw, could you hire more people?^^)
2021-05-09 02:59:13
You're not the first one to come up with this idea πŸ˜‰ https://discord.com/channels/794206087879852103/803663417881395200/830745493368733697 It would be awesome if it happened...
Jim
2021-05-09 02:59:44
You mean monitor?
Deleted User
2021-05-09 03:01:19
Yes. I would guess it cannot fully recreate full 8-bits per channel.
Jim
2021-05-09 03:06:12
It's a laptop, rather new. No idea what the screen on it is. It is also connected to an ASUS ML238.
_wb_
2021-05-09 03:28:51
New screens are often P3
Deleted User
2021-05-09 03:29:41
But only the expensive ones. πŸ˜„
_wb_
2021-05-09 03:32:13
Even one that can do 100% of sRGB is not so cheap
Jim
2021-05-09 03:35:27
The marketing claimed it can do 100% sRGB. Don't know if that's true.
_wb_
2021-05-09 03:36:32
I have a BenQ here that can do most of P3 / Adobe RGB 98 and 100% of sRGB
veluca
2021-05-09 03:38:05
my laptop can apparently do 132% of sRGB
2021-05-09 03:38:12
whatever that means
Jim
2021-05-09 03:38:54
Irradiated <:kekw:808717074305122316>
_wb_
2021-05-09 03:42:32
means it can do some wider gamut than sRGB
2021-05-09 03:43:00
viewing the gradients on the BenQ with brightness cranked up now
Deleted User
veluca whatever that means
2021-05-09 03:43:18
It means you should make sure to clamp the gamut when watching sRGB content. ^^
_wb_
2021-05-09 03:43:33
the blue one without dithering has really obvious banding
2021-05-09 03:44:55
with dithering the obvious banding is gone. I can still see some banding in the top right quadrant of the image, and a little bit in the bottom left.
2021-05-09 03:47:16
2021-05-09 03:48:30
in the gray one I still see some banding in both, but it is a lot worse without dithering
2021-05-09 03:49:29
in the one without dithering, the bands are clear also when I look closely
2021-05-09 03:50:13
in the one with dithering I cannot really see the bands when I look closely, but when I look from a distance then I do see some banding
2021-05-09 03:52:18
2021-05-09 03:53:53
the difference in banding can even be seen when I make a photo of the screen with my crappy phone camera
2021-05-09 03:54:42
(funny how its white balancing is desaturating that blue a lot)
2021-05-09 04:01:51
when I zoom in with Preview (which is doing NN upsampling), I can actually see the 4x4 dither patterns in the blue image (and just blocky banding in the non-dithered one)
2021-05-09 04:04:27
The dither patterns don't look optimal, there might be room for improvement there
2021-05-09 04:05:03
(maybe could do a decoding at bitdepth 4 or so to better see the dithering patterns)
veluca
It means you should make sure to clamp the gamut when watching sRGB content. ^^
2021-05-09 04:18:42
oh, I know that (I even calibrated my monitor, thanks to <@!604964375924834314> :D), but I'm not quite sure what a percentage above 100% means πŸ˜„ I guess below 100% it's just a given fraction of the gamut is reachable, but above it's a bit more fuzzy to me...
_wb_ The dither patterns don't look optimal, there might be room for improvement there
2021-05-09 04:19:41
I'm doing this https://en.wikipedia.org/wiki/Ordered_dithering with a 4x4 matrix, unless I did something wrong xD
Deleted User
2021-05-09 04:26:04
The guy from the issue recommended https://discord.com/channels/794206087879852103/804324493420920833/840934339827204136 but no idea how performant that would be.
_wb_
veluca I'm doing this https://en.wikipedia.org/wiki/Ordered_dithering with a 4x4 matrix, unless I did something wrong xD
2021-05-09 04:35:57
It's ok but maybe a different matrix would work slightly better
veluca
The guy from the issue recommended https://discord.com/channels/794206087879852103/804324493420920833/840934339827204136 but no idea how performant that would be.
2021-05-09 04:37:31
the part of that suggestion that worries me is "This technique is covered by Ulichney’s ​U.S. patent 5535020 and the specific implementation we showed is partly covered by Epson’s ​U.S. patent 6088512."
_wb_
2021-05-09 04:37:47
Ugh
2021-05-09 04:37:55
What year are those from?
veluca
2021-05-09 04:38:00
no clue
_wb_ It's ok but maybe a different matrix would work slightly better
2021-05-09 04:38:21
changing matrix is cheap anyway
2021-05-09 04:38:28
not sure what to try, but...
2021-05-09 04:39:20
(of course, to actually have it in djxl/the API, there's more work involved - perhaps we could add a new output format, UINT8_DITHERED?)
_wb_
2021-05-09 04:40:00
Both are expired
2021-05-09 04:40:16
One is from 1992, the other from 1997
Pieter
2021-05-09 04:41:41
Any reason to do anything else than Floyd-Steinberg?
_wb_
2021-05-09 04:41:45
Is there any reason not to dither? It's not like undithered is more correct
veluca
2021-05-09 04:42:14
10-bit lossless would be rounded in a weird way to 8-bit πŸ˜„
Pieter
2021-05-09 04:42:38
Dithering on material with sharp edges and text may be undesirable.
veluca
Pieter Any reason to do anything else than Floyd-Steinberg?
2021-05-09 04:42:43
it's an error diffusion based method, not quite SIMD/parallelization friendly
2021-05-09 04:43:13
ordered dithering is just biasing the rounding in a location-dependant way, basically
Pieter
veluca it's an error diffusion based method, not quite SIMD/parallelization friendly
2021-05-09 04:43:17
Ok, fair, but it's also computationally very cheap I think, compared to decoding jxl?
veluca
2021-05-09 04:43:36
well, ordered dithering is a lot cheaper πŸ˜„
Pieter
2021-05-09 04:43:50
I have no doubt about that.l :D
veluca
2021-05-09 04:43:51
also I think less likely to cause problems at sharp edges
Pieter
2021-05-09 04:43:58
Hmm, perhaps.
veluca
2021-05-09 04:44:33
and I don't think one needs very fancy dithering to get stuff to work well for 8-bit output...
_wb_
2021-05-09 04:49:32
It just improves the effective display bitdepth in slow gradients, and since it only introduces off-by-one diffs w.r.t. no dithering, I don't think sharp edges or text will look any different.
2021-05-09 04:49:53
I think it is basically a no-brainer to just always do it
2021-05-09 04:50:31
Well a no-brainer that does require some reflection and verification maybe
2021-05-09 04:53:51
We have the luxury (at least in vardct mode) to work in high precision anyway, so we have the actual signal at whatever bitdepth. So the dither is accurate and not just some noise that hides banding.
2021-05-09 04:55:14
(in that respect I think we have an advantage compared to avif, which works at the signalled bitdepth afaik)
Pieter
2021-05-09 04:55:26
is jxl decoding specified at the pixel value level?
_wb_
2021-05-09 04:55:31
No
2021-05-09 04:55:58
It is specified using real numbers
2021-05-09 04:56:11
Which is of course something that doesn't really exist 🀣
2021-05-09 04:56:43
(real numbers are very inaccurately named)
2021-05-09 04:58:07
Conformance for lossless will have pixel exact requirements, but for lossy there will be tolerances that allow implementations using float or fixed point.
2021-05-09 04:59:38
Those tolerances still have to be defined but I think dithering will not be the biggest concern there.
Pieter
2021-05-09 05:00:15
That's a good reason for dithering by default though, even if it's a relatively simple one.
2021-05-09 05:00:48
vardct has real numbers, and without dithering you're throwing that precision unconditionally away
veluca
2021-05-09 05:02:29
none of this really affects browsers, though πŸ˜„
_wb_
2021-05-09 05:04:10
Chrome apparently uses 16-bit half-floats for HDR. Not 10-bit ints with PQ or HLG. I wonder where that final conversion to display space is happening, and if it does dithering.
veluca none of this really affects browsers, though πŸ˜„
2021-05-09 05:04:26
I suppose it does for an image displayed 1:1, no?
2021-05-09 05:06:49
(even when rescaling, there is in a way more information preserved in the dithered image)
Deleted User
_wb_ Chrome apparently uses 16-bit half-floats for HDR. Not 10-bit ints with PQ or HLG. I wonder where that final conversion to display space is happening, and if it does dithering.
2021-05-09 05:12:00
The issue is that we apparently need more than 8-bit for SDR already but displaying more than 8-bit isn't really common.
veluca
2021-05-09 05:12:47
browsers would convert on the fly from floats to the display colorspace in u8 though, so it's not the jpeg xl API that would have to take care of dithering
2021-05-09 05:12:58
(for jpeg xl)
_wb_
2021-05-09 05:15:20
Oh we only give the float buffer to chrome?
veluca
2021-05-09 05:18:38
well, not now
2021-05-09 05:18:45
but we will for 92 I believe
_wb_
2021-05-09 05:20:04
Dithering is the task for whoever does the final conversion to display space integers
2021-05-09 05:24:35
I thought we were going to have an api where basically chrome says to libjxl "please give me an uint8 rgba buffer in my display space", and libjxl either returns that (if it can), or it returns a uint8 rgba buffer and an icc profile and tells chrome "you take care of this please"
2021-05-09 05:24:47
But maybe that doesn't work after all?
2021-05-09 05:25:03
(because display space could change and stuff?)
veluca
2021-05-09 05:28:25
it's better if we tell chrome "here is a chunk of 200 pixels, they're RGBA floats, in X colorspace, please take care of the rest"
Deleted User
2021-05-09 05:30:17
But it doesn't hurt if djxl supports dithering just in case, right? ;)
_wb_
2021-05-09 05:31:42
It doesn't hurt, no, and will help for simpler applications that are not as tightly integrated.
veluca it's better if we tell chrome "here is a chunk of 200 pixels, they're RGBA floats, in X colorspace, please take care of the rest"
2021-05-09 05:33:03
Ah ok. Then I suppose we could at some point try to get dithering in the "take care of the rest" part, but that's completely orthogonal to jxl integration then.
veluca
2021-05-09 05:33:40
yep
Jake Archibald
2021-05-10 09:17:51
Will `--allow_more_progressive_steps` produce output similar to how browsers will decode JXL? Or is it better to leave it off?
_wb_
2021-05-10 09:23:52
Good question. It's in djxl mostly to show what _could_ be done with a partial bitstream (and even at that it's not really being exhaustive in trying to show as much as is possible, since it still does not show partial squeeze refinement steps, only full steps).
2021-05-10 09:24:39
How many repaints browsers will actually do is a different thing, and there are several considerations there to take into account.
2021-05-10 09:26:34
First there's the impact on decode speed and memory usage; likely it makes sense to avoid multiple repaints when the file is locally cached or the network is fast enough.
2021-05-10 09:28:02
Secondly some people don't like progressive loading at all.
Jake Archibald
2021-05-10 09:30:01
(yeah, I've never understood why, tbh)
2021-05-10 09:30:52
Ok, I'll go without `--allow_more_progressive_steps`, assuming it might be _less_ representative of what the browser will do
veluca
2021-05-10 09:34:18
I think that's a safe bet
_wb_
2021-05-10 10:35:41
Any update on the state of progressive jxl decoding in chromium, <@795684063032901642> ? I suppose it is less urgent than making animation work (since it does not have impact on the final result), but is someone working on it?
Moritz Firsching
2021-05-10 10:51:40
working on animation right now..
Jake Archibald
2021-05-10 02:18:11
<@!794205442175402004> djxl wouldn't spit out a file until it had more than 50k of input. Does that seem correct?
veluca
2021-05-10 02:19:12
depends on the total size πŸ™‚
Jake Archibald
2021-05-10 02:19:20
Here's the full file
veluca
2021-05-10 02:19:27
seems a bit excessive
2021-05-10 02:19:35
how did you create it?
Jake Archibald
2021-05-10 02:19:43
https://squoosh.app
veluca
2021-05-10 02:19:52
I mean with what flags?
2021-05-10 02:20:47
depending on flags and the image itself, the DC preview will be available anywhere between 5-25% of the total size
Jake Archibald
2021-05-10 02:22:17
Quality 40, effort 4, progressive rendering on
2021-05-10 02:23:24
Edge filter on
veluca
2021-05-10 02:23:26
mhh, yeah, quality 40 will not be too good for getting DC early (effort 4 shouldn't change *too* much, but I believe progressive rendering mostly just increases file size if you're mostly interested in the DC)
Jake Archibald
2021-05-10 02:23:53
Ohh, so what would you recommend?
veluca
2021-05-10 02:24:48
I don't remember what squoosh's effort corresponds to in terms of cjxl speed
Jake Archibald
2021-05-10 02:25:01
Give me the JXL settings and I'll translate it
veluca
2021-05-10 02:25:28
try something like -q 70 to 90, -s 7
2021-05-10 02:25:33
and nothing else
Jake Archibald
2021-05-10 02:25:46
What about epf?
veluca
2021-05-10 02:25:52
default is good
Jake Archibald
2021-05-10 02:26:00
cool
2021-05-10 02:26:22
`-s 7` is the maximum speed, right?
veluca
2021-05-10 02:26:42
no
2021-05-10 02:26:45
maximum is -s 9
2021-05-10 02:27:00
well, -s 9 the *slowest*
2021-05-10 02:27:32
(yeah, those numeric values are weird)
Jake Archibald
2021-05-10 02:27:50
whoa, I think we've got these backwards on Squoosh
2021-05-10 02:28:07
I wonder if that explains why increasing effort sometime increases filesize
veluca
2021-05-10 02:28:09
-s 3 is the fastest, -s 9 is the slowest
2021-05-10 02:28:20
it absolutely would πŸ˜„
2021-05-10 02:28:57
-s 3 for lossless/delta palette in particular can be a huuuge blowup in size
_wb_
2021-05-10 02:30:13
we have a very confusing --speed where higher means slower
fab
2021-05-10 02:30:59
Higher should be always slower
2021-05-10 02:31:10
Wp2 is in this Way
Jake Archibald
2021-05-10 02:31:11
for _speed_?
fab
2021-05-10 02:31:16
Yes
_wb_
2021-05-10 02:31:18
it's like the very confusing --cpu_used where lower number means more cpu used
2021-05-10 02:31:28
we should just rename --speed to --effort
Jake Archibald
2021-05-10 02:31:37
Yeah, we call it effort in Squoosh
fab
2021-05-10 02:32:36
Yes i fully agree
_wb_
2021-05-10 02:35:37
maybe let's start by adding --effort and keeping --speed as a deprecated synonym
fab
2021-05-10 02:37:56
Wp2 is -effort
2021-05-10 02:38:03
Not --effort
2021-05-10 02:38:27
And without =
_wb_
2021-05-10 02:40:03
gzip-style?
2021-05-10 02:40:30
to me that looks a bit weird
2021-05-10 02:42:09
single letter `-e 3` or long-form `--effort 3` (with or without an `=`) feels most 'conventional' to me, but of course that's all a matter of preference and habit
Jake Archibald
2021-05-10 02:43:37
`-s 7` seems to produce a bigger file than `-s 6` and `-s 8`
2021-05-10 02:44:28
I'll double check it's not just Squoosh
_wb_
2021-05-10 02:45:44
that can happen - more effort does not necessarily mean smaller file, it should mostly mean "better size/quality trade-off"
2021-05-10 02:45:59
(though the only thing it is really guaranteed to mean is "slower")
2021-05-10 02:47:08
for lossless of course it should be the case that more effort means smaller file (though even that isn't always true)
veluca
_wb_ (though the only thing it is really guaranteed to mean is "slower")
2021-05-10 02:48:04
I don't think even that is *fully* guaranteed xD
paperboyo
2021-05-10 02:52:08
Unrelated directly, but sometimes higher Effort in sqoosh gives me errors on both Firefox and Chrome (OSX&Win):
Jake Archibald
2021-05-10 02:53:08
I think we need to take a close look at our implementation. I'm getting different results between squoosh & the cli
2021-05-10 02:56:37
<@!179701849576833024> problem is, if I go for the higher quality settings, it's going to be much bigger than a jpeg of decent quality
veluca
2021-05-10 02:58:43
mhhh, perhaps our definition of "decent quality" differs then πŸ˜›
Jake Archibald
2021-05-10 02:59:10
hm maybe
veluca
2021-05-10 03:00:46
what happens if you recompress the JPEG?
2021-05-10 03:01:01
i.e. `cjxl image.jpeg image.jxl`
2021-05-10 03:01:38
(for that matter, where do you get the DC render for JPEG?)
Jake Archibald
2021-05-10 03:03:06
JPEG 302kB, JXL 270kB
2021-05-10 03:04:24
2021-05-10 03:04:28
Here's the JPG
2021-05-10 03:05:26
But here's a JXL that looks good to me too
veluca
2021-05-10 03:06:44
you're right, it looks surprisingly good for being quality 40
Jake Archibald
2021-05-10 03:07:07
I think there's a lot of grass and dirt that can take the noise
veluca
2021-05-10 03:07:23
yeah
Jake Archibald
2021-05-10 03:08:08
the only dodgy bit is the around the bottom of the chiminea, but that _kills_ AVIF
2021-05-10 03:08:16
goes flat in a really ugly way
veluca
2021-05-10 03:09:04
given the quality etc, I'd expect that you get a decent preview at ~40 kB here
_wb_
2021-05-10 03:09:36
I suppose it also depends on whether you have a separate DC frame or not
Jake Archibald
2021-05-10 03:09:52
It doesn't seem to produce a seperate DC frame
_wb_
2021-05-10 03:10:02
without the separate DC frame there's also the AC metadata in the DC groups which might postpone the point where DC is complete
Jake Archibald
2021-05-10 03:10:11
50kB frame
2021-05-10 03:10:30
Which looks like DC plus some AC in the top left
_wb_
2021-05-10 03:11:11
with `cjxl --progressive_dc=1` you force a separate DC frame (that itself happens to be progressive, but you need djxl --allow_more_progression to see that)
veluca
Jake Archibald 50kB frame
2021-05-10 03:12:00
did you create this image with --progressive / --progressive_ac?
2021-05-10 03:12:48
the part with AC looks a bit bad to me
Jake Archibald
2021-05-10 03:13:02
`--progressive`
_wb_
2021-05-10 03:13:14
it looks like the first scan of progressive ac
2021-05-10 03:13:50
the first scan looks worse than the fancy-upsampled DC because it doesn't do any fancy upsampling anymore
2021-05-10 03:14:32
(might be better to treat it as 1:4 and do fancy 4x upsampling to it)
veluca
2021-05-10 03:14:36
try without, it should be a bit smaller πŸ˜„
2021-05-10 03:15:22
also try --progressive_dc=0, it can have some *weird* effects on file size (usually it makes it better, but not always...)
_wb_
2021-05-10 03:15:40
best to get DC fast and no extra AC scans should be `--progressive_dc=1 --progressive_ac=0`
2021-05-10 03:16:15
but default should not get DC that much later. It's a somewhat different image you get with progressive DC or not though
Jake Archibald
2021-05-10 03:17:54
``` ----progressive_ac=0 didn't expect any argument passed to it. Error parsing flag --progressive_ac=0 ```
veluca
2021-05-10 03:18:34
I believe you can skip the flag and it's equivalent
Jake Archibald
2021-05-10 03:20:50
yeah, that worked, and it looks like DC then full squares
_wb_
2021-05-10 03:21:11
That's the progression I like most, tbh
2021-05-10 03:21:51
Clear when you have the full image, still good preview and indication of progress (because groups are popping in)
Jake Archibald
2021-05-10 03:53:07
I'll run with that then
raysar
Jake Archibald `-s 7` seems to produce a bigger file than `-s 6` and `-s 8`
2021-05-10 09:11:23
Hello, i have a problΓ¨me with squoosh options, why you don't use the same "effort" than cjxl encoder? You use 0 to 6 numbers althought cjxl use 3 to 9. It's not good at all for future user when they switch to cjxl. πŸ˜• And you use -s 6 as default againt the real defaut -s 7. (I understand because it's too slow) But i think you need to write what is the real default param. In cjxl patch are enable at -s 7 and no at -s 6, for screenshot size is very different without patches. The epf param an gaborish param vary with quality, maybe it's why you have differences in squoosh?
_wb_
2021-05-10 09:13:27
The 3 to 9 thing in cjxl is a bit weird, but the reasoning is that maybe one day we'll have a 1 to 11 scale
2021-05-10 09:13:44
https://c.tenor.com/KzQ1LFMZMlQAAAAM/spinal-tap-clever-and-stupid.gif
2021-05-10 09:13:57
https://c.tenor.com/hLVZC4qxNBUAAAAM/these-go-to11-spinal-tap.gif
raysar
_wb_ The 3 to 9 thing in cjxl is a bit weird, but the reasoning is that maybe one day we'll have a 1 to 11 scale
2021-05-10 09:16:55
Yes but we need to have the same "number" for the same effort between squooth and cjxl. The world no need more complexity than it is πŸ˜†
Jake Archibald
2021-05-10 09:17:11
<@231086792315633664> see the discussion above
2021-05-10 09:17:27
https://github.com/GoogleChromeLabs/squoosh/compare/jxl-fix
raysar
Jake Archibald https://github.com/GoogleChromeLabs/squoosh/compare/jxl-fix
2021-05-10 09:22:46
Ah sorry, i don't understand exactly the discussion but i read it before posting ^^, so it's a great comit πŸ’™
Jyrki Alakuijala
_wb_ The 3 to 9 thing in cjxl is a bit weird, but the reasoning is that maybe one day we'll have a 1 to 11 scale
2021-05-11 08:06:30
going to 11 is a tradition by now: brotli goes to 11 and guetzli goes to --quality 110
_wb_ (might be better to treat it as 1:4 and do fancy 4x upsampling to it)
2021-05-11 08:08:21
do all the scans have x/y resolution asymmetry? Do we need a special 4x2 upsampler?
_wb_
Jyrki Alakuijala do all the scans have x/y resolution asymmetry? Do we need a special 4x2 upsampler?
2021-05-11 08:12:54
I don't think that is really needed. In VarDCT scans you would normally use a resolution-symmetric scan script. In Squeeze scans you alternate between symmetric information available and 1:2 or 2:1 asymmetric information available, but there I would just skip the asymmetric intermediate results.
2021-05-11 08:42:02
wow <@!811568887577444363> , that "SIMDify upsampling" merge request does look impressive! πŸ™‚
2021-05-11 08:42:14
> 4x / 8x upsampling got 18-19 times faster (on 16-x float vector CPU). > 2x upsampling got just 5.6x faster -> it seems there is still place for optimization.
2021-05-11 08:42:52
(it was quite slow to begin with, of course, but still)
2021-05-11 08:44:18
this should make the fancy DC upsampling in progressive rendering cheap enough, right?
Jyrki Alakuijala
_wb_ I don't think that is really needed. In VarDCT scans you would normally use a resolution-symmetric scan script. In Squeeze scans you alternate between symmetric information available and 1:2 or 2:1 asymmetric information available, but there I would just skip the asymmetric intermediate results.
2021-05-11 09:13:11
Thank you for clarifying
2021-05-11 09:14:54
I really like our 8x upsampling a lot -- I spent about a month tweaking it for pik possibly around 2017 and I believe that it is somewhat difficult to do better than that without using a priori info or very large supports
2021-05-11 09:15:44
adding a gentle amount of noise on it would improve the results further
2021-05-11 09:16:11
now one of the major differences is from going from "glossy" to "non-glossy" between the interpolated and the final image
2021-05-11 09:18:20
there is also some shift of brightness or contrast in some areas -- it might be possible to do better if we understand better what and why it is happening
2021-05-11 09:18:50
possibly it is the 3rd power vs. real gamma should be around 2.6 causing some averaging not to work that well
2021-05-11 09:21:56
my work back then was for a 4x4 upsampler that Moritz then resampled to be 2x2 and 8x8 by first applying my code twice into 16x16 resolution and then averaging down to 8x8 (and 2x2)
2021-05-11 09:24:33
the idea I explored with was to move pik's 8x8 DC into a 4x4 DC with great upsampling (for even higher quality of previews) and then codify the rest with a DCT
2021-05-11 09:25:02
it wasn't easy to get it working in a way that was competitive with the pik's current approach so I dropped the idea, but the upsampler survived into JPEG XL πŸ˜„
_wb_
Jyrki Alakuijala possibly it is the 3rd power vs. real gamma should be around 2.6 causing some averaging not to work that well
2021-05-11 09:27:02
our 1:8 is effectively downsampled in a colorspace a gamma of ~3, while to avoid color shift you need to downsample in linear color (gamma 1). Not much can be done about that, the only way to avoid it is to do the DCTs in linear color but that would be a very bad idea.
Jyrki Alakuijala
2021-05-11 09:27:34
that would be horrible of course
2021-05-11 09:27:50
also, linear gamma downsampling is not what you always want
_wb_
2021-05-11 09:28:12
it's not always what you want, but it is the only 'correct' thing to do, physically speaking
Jyrki Alakuijala
2021-05-11 09:28:48
if we could estimate the variance of each 8x8 pixel based on the neighbourhood and do a pseudo gamma correction at around gamma 2, we'd have likely significantly better results
_wb_
2021-05-11 09:29:17
I do get customer complaints about linear downsampling, usually because it makes black text on a white background thinner than the too-bold-because-of-sRGB-downsampling they are used too (which is wrong but better for legibility)
Jyrki Alakuijala
2021-05-11 09:29:38
I think it depends on the resulting angular pixel size
2021-05-11 09:30:18
if pixels are smaller or larger than receptors
_wb_
2021-05-11 09:30:46
anyway, browsers also downscale in nonlinear color, just with the display transfer curve instead of the gamma ~3 we have
Jyrki Alakuijala
2021-05-11 09:30:48
if pixels are smaller than receptors, then they should work with photon-based physical modeling to produce the same experience
2021-05-11 09:32:00
if pixels are bigger than receptors, then they are already observed through compressed gamma and signals could be better averaged in the compressed space
2021-05-11 09:32:21
I believe that it is complicated, I think there is no one correct way there
_wb_
2021-05-11 09:36:07
yes, it is. for progressive previews I think what we have now is good enough though
2021-05-11 09:36:14
for the 1:8 preview at least
2021-05-11 09:36:37
if we want to go into 1:16 previews and other more blurhashy stuff, that's something else
2021-05-11 09:37:11
and the intermediate progressive passes for 1:4 or 1:2 - equivalent info, that's something else too
2021-05-11 09:38:12
currently the first progressive AC pass looks worse than the DC alone, which is an annoying nonmonotonicity of experience...
2021-05-11 09:39:23
(the same is true in the case of old JPEGs, btw. Once the DC goes from "fancy upsampled" to "blocky old DC" mode, things get worse before they get better again)
Jake Archibald
2021-05-12 08:05:27
Btw, Squoosh doesn't have the "effort" setting backwards, since we map to the "speed tier" enum, where higher numbers are faster (less effort), rather than cjxl's backwards speed πŸ˜€
2021-05-12 08:06:19
If cjxl renames to "effort", I'm happy to match the numbers up, but I definitely don't want to put a backwards speed setting on there
monad
2021-05-12 08:37:02
It was certainly interesting reading the code and seeing that, along with the fact speeds are referred to by their animal analogues.
190n
2021-05-12 08:41:21
anyone else getting ``` error while loading shared libraries: libIlmImf-2_5.so.25: cannot open shared object file: No such file or directory ``` when running either cjxl or djxl compiled from the AUR `libjpeg-xl` package (latest v0.3.7-1)? it doesn't seem like any package (official or AUR) provides that library, idk if it's supposed to be compiled along with libjxl or if i should get it somewhere else for now
Crixis
2021-05-12 08:42:41
i use AUR libjpeg-xl package, in what operation give this error?
190n
2021-05-12 08:43:02
any invocation of either of those binaries, even getting help or printing version doesn't work
Crixis
2021-05-12 08:43:06
no, i use libjpeg-xl-git sorry
190n
2021-05-12 08:43:22
hmm i'll try building that
2021-05-12 08:43:34
i _think_ i have libjpeg-xl on my laptop too and it works <:Thonk:805904896879493180>
Crixis
2021-05-12 08:43:38
I disabled test
2021-05-12 08:45:00
diff
2021-05-12 08:45:09
``` diff --git a/PKGBUILD b/PKGBUILD index 4dcb98c..37c19e5 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -2,7 +2,7 @@ pkgbase=libjpeg-xl-git pkgname=('libjpeg-xl-git' 'libjpeg-xl-doc-git') -pkgver=0.3.7.r3.gab7c5e9 +pkgver=0.3.7.r5.g040eae8 pkgrel=1 pkgdesc='JPEG XL image format reference implementation (git version)' arch=('x86_64') @@ -58,15 +58,16 @@ build() { export CC='clang' export CXX='clang++' cmake -B build -S jpeg-xl \ - -DCMAKE_BUILD_TYPE:STRING='None' \ + -DCMAKE_BUILD_TYPE:STRING='Relase' \ -DCMAKE_INSTALL_PREFIX:PATH='/usr' \ + -DBUILD_TESTING=OFF \ -DJPEGXL_ENABLE_BENCHMARK:BOOL='false' \ -DJPEGXL_ENABLE_FUZZERS:BOOL='false' \ -DJPEGXL_ENABLE_PLUGINS:BOOL='true' \ - -DJPEGXL_ENABLE_VIEWERS:BOOL='false' \ + -DJPEGXL_ENABLE_VIEWERS:BOOL='true' \ -DJPEGXL_ENABLE_GIMP_SAVING:BOOL='ON' \ -DJPEGXL_FORCE_SYSTEM_BROTLI:BOOL='true' \ - -DJPEGXL_FORCE_SYSTEM_GTEST:BOOL='true' \ + -DJPEGXL_FORCE_SYSTEM_GTEST:BOOL='false' \ -DJPEGXL_FORCE_SYSTEM_HWY:BOOL='true' \ -DJPEGXL_WARNINGS_AS_ERRORS:BOOL='false' \ -Wno-dev ```
190n
2021-05-12 08:53:25
ok it works now Β―\_(ツ)_/Β―
Crixis
190n ok it works now Β―\_(ツ)_/Β―
2021-05-12 08:53:36
gg
190n
2021-05-12 08:53:54
tyty no idea why the other one didn't work tho
2021-05-12 08:54:22
well the old one linked against libIlmImf and this one doesn't
2021-05-12 08:54:26
dunno what changed tho
improver
2021-05-12 08:54:40
underlying lib changed soname
2021-05-12 08:54:51
so when you rebuilt it and relinked to new soname it just worked
2021-05-12 08:55:16
p usual issue, when you get these just rebuild relevant aur package
190n
2021-05-12 08:55:55
ah that makes sense
improver
2021-05-12 08:56:20
tbh maintainer should b making bumps for pkgrel when this happens but it's aur and if they arent aware it wont happen
spider-mario
2021-05-12 11:53:53
yeah, Ilm = Industrial Light & Magic, those originally behind EXR
diskorduser
190n anyone else getting ``` error while loading shared libraries: libIlmImf-2_5.so.25: cannot open shared object file: No such file or directory ``` when running either cjxl or djxl compiled from the AUR `libjpeg-xl` package (latest v0.3.7-1)? it doesn't seem like any package (official or AUR) provides that library, idk if it's supposed to be compiled along with libjxl or if i should get it somewhere else for now
2021-05-12 12:43:20
I got that error after updating Arch. Rebuilding the package fixed it.
_wb_
2021-05-12 08:00:56
Yay repo sync!
Scope
2021-05-12 08:04:15
With fixed patches?
BlueSwordM
2021-05-12 08:09:45
Also, is it 0.3.8 or 0.4.0 <:Thonk:805904896879493180>
Scope
2021-05-12 08:09:53
<https://encode.su/threads/3564-JXL-version-0-3-released?p=69684&viewfull=1#post69684>
_wb_
2021-05-12 08:12:26
Patches should be fixed, yes
2021-05-12 08:15:41
I don't know what we are doing with the version numbering, you can consider this to be a 0.4.0rc1, I suppose
2021-05-12 08:16:20
It _should_ be a complete decoder now, that can handle all exotic corners of the spec
Pieter
2021-05-12 08:23:32
Are you working on a set of test vector images or so, to test compliance?
_wb_
2021-05-12 08:25:51
I have put a few examples here to test some common problems: https://github.com/libjxl/conformance
2021-05-12 08:27:09
We'll have to add a bunch more to cover everything that an alternative decoder could get wrong, but to test applications it's a start
Pieter
2021-05-12 08:27:29
I demand nested patches inside the DC component.
_wb_
2021-05-12 08:27:43
πŸ˜‚
Pieter
2021-05-12 08:28:12
And an image with a MA tree leaf for every pixel.
_wb_
2021-05-12 08:28:15
Creating those exotic bitstreams will be fun
veluca
2021-05-12 10:01:56
"fun"
_wb_
2021-05-12 10:09:32
Generalizing jxl_from_tree to also do VarDCT, patches, splines etc, will be tricky but Good For Art πŸ˜‚
BlueSwordM
2021-05-12 10:42:29
What does MA mean?
improver
2021-05-12 11:17:55
meta-adaptive
Scope
2021-05-13 12:29:34
Manga set ```305 168 792 - previous build 305 419 668 - new build``` πŸ€”
2021-05-13 12:36:25
Better only on a few images with text (by 1-4%), on the rest worse or the same
veluca
2021-05-13 12:45:40
I suspect that for lossless the heuristics are not as well tuned as they should be
Pieter
2021-05-13 01:45:13
i assume that even though what was there is fixed, it's still not really usable in many images
_wb_
2021-05-13 05:14:07
For lossless the situation is much trickier than for lossy: for lossy it is likely going to be a win because you're using modular to encode something that likely encodes better with modular than with dct.
2021-05-13 05:14:54
For lossless, the question is if the signalling cost of patches is worth the saving, and it isn't always
Scientia
2021-05-13 05:23:29
you could have a flag to test savings in the meanwhile
2021-05-13 05:23:48
which would do two or more encodes but it would at least tell you if it was worth it
_wb_
2021-05-13 05:32:12
Yes, or take a corpus with images from Scope's test where it helps and where it doesn't, and try to improve the heuristics to make it help more and not-help less
Petr
2021-05-13 09:50:36
What's the use case for decode_oneshot and encode_oneshot? Does anyone use it in practice?
veluca
2021-05-13 09:52:14
the use case is giving an example of how to use the API
2021-05-13 09:52:15
πŸ˜›
Petr
2021-05-13 09:53:26
ah, ok πŸ™‚
lithium
2021-05-13 07:38:34
Hello, I get some build problem on windows-msys2-mingw64 ```cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DJPEGXL_ENABLE_BENCHMARK=OFF -DCMAKE_C_COMPILER=clang.exe -DCMAKE_CXX_COMPILER=clang++.exe -G Ninja ..``` I think this probably a path problem, but i can't fix this, Could anyone can teach me how to fix this? ```Change Dir: C:/msys64/home/lee/Project/jpeg-xl/build/CMakeFiles/CMakeTmp Run Build Command(s):C:/msys64/usr/bin/ninja.exe cmTC_1013d && [1/2] Building C object CMakeFiles/cmTC_1013d.dir/testCCompiler.c.obj FAILED: CMakeFiles/cmTC_1013d.dir/testCCompiler.c.obj C:\msys64\mingw64\bin\clang.exe -o CMakeFiles/cmTC_1013d.dir/testCCompiler.c.obj -c testCCompiler.c /bin/sh: C:msys64mingw64binclang.exe:Command not found ninja: build stopped: subcommand failed.```
lithium Hello, I get some build problem on windows-msys2-mingw64 ```cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DJPEGXL_ENABLE_BENCHMARK=OFF -DCMAKE_C_COMPILER=clang.exe -DCMAKE_CXX_COMPILER=clang++.exe -G Ninja ..``` I think this probably a path problem, but i can't fix this, Could anyone can teach me how to fix this? ```Change Dir: C:/msys64/home/lee/Project/jpeg-xl/build/CMakeFiles/CMakeTmp Run Build Command(s):C:/msys64/usr/bin/ninja.exe cmTC_1013d && [1/2] Building C object CMakeFiles/cmTC_1013d.dir/testCCompiler.c.obj FAILED: CMakeFiles/cmTC_1013d.dir/testCCompiler.c.obj C:\msys64\mingw64\bin\clang.exe -o CMakeFiles/cmTC_1013d.dir/testCCompiler.c.obj -c testCCompiler.c /bin/sh: C:msys64mingw64binclang.exe:Command not found ninja: build stopped: subcommand failed.```
2021-05-13 08:19:59
ok, fixed
_wb_
2021-05-14 07:26:21
The Japanese national body of ISO is discovering some minor inconsistencies between the spec and the reference software, which we will have to resolve but which is also a very good sign because it likely means that camera manufacturers are working on a hardware encoder.
2021-05-14 07:34:10
No, we will fix the spec if fixing the code would break things.
2021-05-14 07:34:41
2021-05-14 07:35:31
PreviewHeader is something I don't think cjxl uses at all atm
2021-05-14 07:37:34
Yes we need to fix it before declaring a 0.4 release
2021-05-14 07:40:46
I don't think any existing bitstreams would break by fixing things
2021-05-14 07:53:24
National bodies have already reviewed the committee draft and the DIS. Now they are reviewing the FDIS but in principle it's just a binary "approved" or "not approved" at this ballot (the previous two ballots had the option of making comments, which we then had to reply to)
2021-05-14 07:54:37
Most comments in the past came from ANSI and DIN (the US and German national bodies).
2021-05-14 08:00:21
I hope the ballot results for Part 1 will be there by the July JPEG meeting, but I am not sure. When the FDIS ballot gets approved, it then takes a couple more weeks for ISO to do its thing and publish the actual IS.
2021-05-14 08:01:56
The big milestone was in January when JPEG approved the FDIS for submission to ISO, after that it should be OK since it was already approved by all relevant experts.
2021-05-14 08:03:23
So it is unlikely that at this point, the national bodies will vote "no" and block the standardization. It is more of a formality at this stage in the process, afaiu.
tufty
2021-05-14 05:25:56
hello everyone, oss-fuzz has found a jxl which locks up git master jxlinfo http://www.rollthepotato.net/~john/clusterfuzz-testcase-minimized-thumbnail_fuzzer-6181430527918080 with git master jpeg-xl I see: ``` john@banana ~/pics/fuzz $ ~/GIT/jpeg-xl/build/examples/jxlinfo clusterfuzz-testcase-minimized-thumbnail_fuzzer-6181430527918080 xsize: 6008 ysize: 4807 have_container: 0 uses_original_profile: 0 bits_per_sample: 24 exponent_bits_per_sample: 7 intensity_target: 255.000000 min_nits: 0.000000 relative_to_max_display: 0 linear_below: 0.000000 have_preview: 0 have_animation: 0 orientation: 1 num_extra_channels: 0 alpha_bits: 0 alpha_exponent_bits: 0 alpha_premultiplied: 0 ``` and the prompt never comes back. djxl fails quickly, I suppose it sees the nonsense values in basic_info and gives up vips sees basic-info, tries to get the next chunk, then (after >5s of cpu in JxlDecoderProcessInput()) sees an error looking at the read()s it's doing, each 4kb read after basic_info gets slower and slower, it looks like on a quadratic scale so perhaps there's some O(N^2) hole it's fallen into in the parser?
veluca
2021-05-14 05:27:32
that's absolutely possible, if perhaps a bit unlikely - can you open a bug?
tufty
2021-05-14 05:31:20
sure would someone be able to very quickly test it before I open the bug? I don't want to make extra work
2021-05-14 05:41:36
issue opened
veluca
2021-05-14 05:43:51
I mean, I could verify it either before or after you make the issue πŸ˜›
2021-05-14 05:44:10
it's never a bad idea to file issues for such things
tufty
2021-05-14 05:45:46
hehe OK, well the issue is there now
veluca
2021-05-14 05:46:20
yup, I assigned it to a couple of people that I think are the best to figure it out πŸ™‚
KAGAMI
_wb_ I have put a few examples here to test some common problems: https://github.com/libjxl/conformance
2021-05-15 02:01:26
Are those examples all free to use? Probably good to add some license?
_wb_
2021-05-15 05:43:59
They should be free to use, but I should add the exact licenses I guess
2021-05-15 05:54:22
Yes, I need to check that
2021-05-15 05:56:14
Alpha triangles and sunset logo I made myself. They are CC0.
2021-05-15 06:00:05
Yes, see <#824000991891554375> 😁
2021-05-15 06:29:44
Well cwebp just silently ignores/strips ICC profiles, doesn't it? So if there is a performance bug in ICC handling, cwebp wouldn't trigger it because it doesn't even look at the ICC...
2021-05-15 06:37:29
cwebp always silently strips icc profiles afaik
2021-05-15 06:38:55
Yes, you have to use webpmux to explicitly add it
2021-05-15 06:39:38
And then dwebp will silently strip it again when you convert back to png πŸ˜–
2021-05-15 06:40:24
It's not exactly the greatest tooling in that respect if you ask me
2021-05-15 06:41:23
And the libwebp API is not much better: it's very convenient to get the decoded pixels, but to also get the color space they're in, you have to jump through some hoops
2021-05-15 06:43:48
Then again, with the 7.5-bit limitation of lossy webp, it's not really suitable for anything else than sRGB. Even P3 is already a bit of a stretch imo.
2021-05-15 06:46:13
Lossy webp uses TV range YCbCr, not full range like jpeg, so it's basically 7.5-bit and not 8-bit YCbCr, which means effectively in RGB it's 6.5 bits of R and B, 7.5 bits of G (plus chroma subsampling on top of that)
2021-05-15 06:48:02
Plus the minimum quantization (highest quality, what you get at q100 lossy) is not 1 like in jpeg but 4, iirc.
2021-05-15 06:48:27
(maybe that's only for chroma, I don't remember exactly)
2021-05-15 07:12:33
Must be some worst-case behavior of the icc compression
2021-05-15 07:15:55
In jxl we have a custom compression for icc profiles, yes
2021-05-15 07:16:56
Yes
2021-05-15 07:17:22
Annex B of the spec is just about icc compression
Scientia
2021-05-15 07:17:55
the profile is that large?
2021-05-15 07:17:58
interesting
Scientia the profile is that large?
2021-05-15 07:18:26
by "that large" I mean large enough to care about designing a custom algo just for it
_wb_
2021-05-15 07:20:00
They can be quite huge in the case of CMYK. Typical profiles there are between 500 KB and 1 MB.
2021-05-15 07:20:52
For RGB the typical ones are not huge, usually a few kb
2021-05-15 07:21:17
Still large enough to care about compressing them though
2021-05-15 07:26:34
Lossless mode (including jpeg recompression) preserves the exact icc profile. In lossy mode we are a bit more free and replace known icc profiles with an equivalent shorter representation (equivalent in the color space it represents, not the exact icc profile bitstream)
2021-05-15 07:40:27
Yes, P3, Adobe RGB, sRGB etc can be expressed in the enum and use only a couple of bits
2021-05-15 07:41:45
The thing is, there is not just 1 sRGB profile. There are multiple variants, which are very slightly different (numbers are rounded differently, etc)
2021-05-15 07:42:03
In lossy mode we say "close enough" and use the enum anyway
2021-05-15 07:42:15
In lossless mode we don't do that
raysar
_wb_ Yes, P3, Adobe RGB, sRGB etc can be expressed in the enum and use only a couple of bits
2021-05-15 08:01:44
You are not including the bt2020 like P3? Seem to be the future color reference format.
_wb_
2021-05-15 08:08:10
Both DCI P3 and Display P3 can be done in the enum, also rec2020/rec2100 with PQ and HLG
raysar
_wb_ Both DCI P3 and Display P3 can be done in the enum, also rec2020/rec2100 with PQ and HLG
2021-05-15 09:22:59
You think to all πŸ˜‰
2021-05-15 09:29:04
About icc, i do no not take time to do test but as i understand with 32bits fload internal jxl, record jxl in rec 2020 will not reduce precision in color for our 8 and 10bits display? It's only a bit slower decoding for display on srgb? (I know it's bad i can test it :D)
_wb_
2021-05-15 09:39:10
In lossy/XYB, the internal color space is always the same absolute space, and the color space signaled in the header is just a suggestion for a target space to convert to after decoding (but you can also just directly convert to display space and ignore the header space)
2021-05-15 09:40:12
Only in non-XYB mode (lossless or lossless jpeg) does the header space actually matter to interpret the pixel data
tufty
2021-05-15 11:10:45
oss-fuzz has found a buffer overflow in git master libjxl, shall I open an issue? (though it appears as Conditional jump or move depends on uninitialised value(s) in valgrind, mysteriously)
_wb_
2021-05-15 11:14:27
Better safe than sorry, better open an issue
tufty
2021-05-15 11:18:10
ok, issue opened, good luck!
veluca
tufty oss-fuzz has found a buffer overflow in git master libjxl, shall I open an issue? (though it appears as Conditional jump or move depends on uninitialised value(s) in valgrind, mysteriously)
2021-05-15 11:22:47
probably 'cause it reads a value-past-the-end which is of course not initialized
tufty
2021-05-15 11:35:53
yes, though you'd think valgrind would report that as a read beyond end of buffer, wouldn't you?
veluca
2021-05-15 11:37:16
maybe valgrind's malloc slightly overallocates it
spider-mario
raysar You are not including the bt2020 like P3? Seem to be the future color reference format.
2021-05-15 01:15:23
also, even if Rec. 2020 hadn't been included specifically, it still doesn't require that many more bytes to use custom primaries
2021-05-15 01:15:46
it's especially LUT profiles that would be troublesome
2021-05-15 01:16:09
and for images, they're not that common
2021-05-15 01:16:21
(unlike display profiles)
_wb_
2021-05-15 01:18:03
I suppose LUT is used mostly when modeling real things like actual displays and printers
2021-05-15 01:29:03
Not sure, I would expect most scanners to do their own conversion and produce results in an idealized color space, but I don't know
diskorduser
2021-05-15 01:46:57
`cxl 1653x379.png 1653x379.jxl J P E G \/ | /\ |_ e n c o d e r [v0.3.7 | SIMD supported: AVX2,SSE4,Scalar] Read 2400x1080 image, 31.6 MP/s Encoding [Container | VarDCT, d1.000, squirrel | 245-byte Exif], 2 threads. /usr/src/packages/BUILD/libjpeg-xl/src/jpeg-xl/lib/jxl/fields.h:52: JXL_FAILURE: Value 4294967295 too large for 3 bits /usr/src/packages/BUILD/libjpeg-xl/src/jpeg-xl/lib/jxl/fields.cc:563: JXL_RETURN_IF_ERROR code=1: ok_ /usr/src/packages/BUILD/libjpeg-xl/src/jpeg-xl/lib/jxl/fields.cc:720: JXL_RETURN_IF_ERROR code=1: CanEncode(fields, &extension_bits, &total_bits) /usr/src/packages/BUILD/libjpeg-xl/src/jpeg-xl/lib/jxl/enc_file.cc:186: JXL_RETURN_IF_ERROR code=1: WriteImageMetadata(metadata->m, writer, kLayerHeader, aux_out) /usr/src/packages/BUILD/libjpeg-xl/src/jpeg-xl/lib/jxl/enc_file.cc:203: JXL_RETURN_IF_ERROR code=1: WriteHeaders(metadata.get(), &writer, aux_out) Failed to compress to VarDCT.`
veluca
2021-05-15 01:47:44
eh, sounds like a problem πŸ˜› can you share the file in an issue?
2021-05-15 01:47:59
does it fail if you strip exif too?
2021-05-15 01:48:07
(could be that there's an invalid exif orientation)
diskorduser
2021-05-15 01:48:58
I will check. It is a screenshot from the phone.
2021-05-15 01:51:09
It works fine after strip
veluca
2021-05-15 01:51:30
is it on the latest version of jxl?
diskorduser
2021-05-15 01:51:40
The screenshot is in landscape
veluca
2021-05-15 01:51:54
ah, might be that we didn't fix it for *png* input...
2021-05-15 01:51:59
<@!794205442175402004> might know
diskorduser
2021-05-15 01:52:34
No. I am running an aosp custom rom.
veluca is it on the latest version of jxl?
2021-05-15 01:53:00
0.3.7 . 1 month old I think
2021-05-15 01:54:47
portraits screenshots work fine though
2021-05-15 01:57:12
The screenshot looks funny. I will send you in dm.
_wb_
2021-05-15 02:09:48
Should be fixed for all inputs, the exif is parsed later
2021-05-15 02:14:11
That should be the only place that looks at exif
Nova Aurora
2021-05-16 09:27:48
Does anyone else get a 'failed to read image' with this jpeg?
improver
2021-05-16 09:32:45
``` $ cjxl kX1HrJw.jpg kX1HrJw.jpg.jxl J P E G \/ | /\ |_ e n c o d e r [v0.3.7 | SIMD supported: SSE4,Scalar] /home/anon/.cache/yay/libjpeg-xl-git/src/jpeg-xl/lib/jxl/jpeg/enc_jpeg_data.cc:311: JXL_FAILURE: Cannot recompress JPEGs with neither 1 nor 3 channels /home/anon/.cache/yay/libjpeg-xl-git/src/jpeg-xl/lib/extras/codec_exr.cc:155: JXL_FAILURE: OpenEXR failed to parse input /home/anon/.cache/yay/libjpeg-xl-git/src/jpeg-xl/lib/extras/codec.cc:133: JXL_FAILURE: Codecs failed to decode /home/anon/.cache/yay/libjpeg-xl-git/src/jpeg-xl/lib/extras/codec.cc:146: JXL_RETURN_IF_ERROR code=1: SetFromBytes(Span<const uint8_t>(encoded), io, pool, orig_codec) Failed to read image kX1HrJw.jpg. /home/anon/.cache/yay/libjpeg-xl-git/src/jpeg-xl/tools/cjxl_main.cc:68: JXL_RETURN_IF_ERROR code=1: LoadAll(args, &pool, &io, &decode_mps) ``` indeed
2021-05-16 09:33:40
``` $ file kX1HrJw.jpg kX1HrJw.jpg: JPEG image data, Exif standard: [TIFF image data, big-endian, direntries=0], baseline, precision 8, 2941x2469, components 4 ``` interesting
_wb_
2021-05-16 09:55:32
CMYK is not supported for jpeg recompression
Nova Aurora
_wb_ CMYK is not supported for jpeg recompression
2021-05-16 10:31:10
Weird, I didn't even know it was in that colorspace, so you have to convert to png then jxl even when not doing lossless recompression?
2021-05-16 10:32:07
Because it's not loading even if I specify -j for lossy conversion
veluca
2021-05-17 08:18:22
there's many ways you can do lz77
2021-05-17 08:18:31
slower and faster ones πŸ™‚
Robin_Watts
2021-05-17 04:09:27
Hi all, apologies if this is a dumb question, but I'm looking to maybe add jpeg xl support to MuPDF. I can't find any docs for driving libjxl as a simple decoder. Can anyone point me at a FM to R please? πŸ™‚
2021-05-17 04:13:50
doc/api.txt had me excited for a bit, but it's basically empty. Other stuff seems to want to talk about how the coding works, but I don't want that. I want "here's how you call the lib". And yes, if I'm being blind, please feel free to abuse me for that, but only after you tell me where to look πŸ™‚
BlueSwordM
2021-05-17 04:14:07
This is absolutely not a dumb question. However, I am not competent enough to respond to your question πŸ˜„ You will better be served by the devs here πŸ™‚
veluca
Robin_Watts Hi all, apologies if this is a dumb question, but I'm looking to maybe add jpeg xl support to MuPDF. I can't find any docs for driving libjxl as a simple decoder. Can anyone point me at a FM to R please? πŸ™‚
2021-05-17 04:16:10
you can start looking at `examples/decode_oneshot.cc`
Robin_Watts
2021-05-17 04:17:19
Thanks.
2021-05-17 04:19:13
OK, so I need to call this from C. I can make a C -> C++ veneer I guess.
2021-05-17 04:20:46
I also need to ensure that all memory accesses go through my own callbacks, not to malloc/free. Presumably there is a mechanism for that too ?
2021-05-17 04:31:14
Ah, decode.h looks like a C api.
2021-05-17 04:35:52
Ooh, with a lovely mem_mgr thingy.
veluca
2021-05-17 04:52:56
to be honest - it won't be used everywhere
Deleted User
2021-05-18 10:01:06
From what I've seen, `djxl` with `--display_nits=X` and `--tone_map` options performs very crude tone-mapping by simply clamping values. Maybe use something just a little bit more advanced, like Reinhard operator used in JPEG XT for generating backwards-compatible LDR previews (I suggest applying it to the XYB channels instead of RGB for less washed-out look)?
veluca
2021-05-18 10:03:17
I thought we did some tonemapping in PQ that is more than just clamping
2021-05-18 10:03:24
<@!604964375924834314>
spider-mario
2021-05-18 10:03:58
yes, it’s not just clamping
2021-05-18 10:05:13
it’s https://www.itu.int/pub/R-REP-BT.2390-8-2020 pages 23-25
Deleted User
2021-05-18 10:05:33
Probably not for .PFM files as an input
spider-mario
2021-05-18 10:06:18
it should if the .pfm is normalized to at most 1 and --intensity_target set appropriately
2021-05-18 10:08:10
it’s global tone mapping, though
2021-05-18 10:08:14
(same curve applied to all pixels)
_wb_
2021-05-19 09:00:48
<@799692065771749416> we are going to relicense libjxl from Apache 2.0 to BSD 3-clause + separate Apache-style patent grant. Is that ok for you?
Pieter
2021-05-19 09:01:20
Haha, is there any code authored by me still in there?
2021-05-19 09:01:23
Go ahead.
_wb_
2021-05-19 09:01:49
I'm not sure actually, but maybe there are some FLIF remnants somewhere
2021-05-19 09:02:50
Probably everything has been edited or rewritten at some point by now, but I am not sure, and copyright-wise I guess it might still count as a derived work
2021-05-19 09:03:21
So to be sure I'm asking :)
Deleted User
_wb_ <@799692065771749416> we are going to relicense libjxl from Apache 2.0 to BSD 3-clause + separate Apache-style patent grant. Is that ok for you?
2021-05-19 10:13:50
Is this a good thing or not?
_wb_
2021-05-19 10:27:04
It doesn't change much
2021-05-19 10:27:25
Slightly more permissive license
2021-05-19 10:27:54
Depending on which lawyer you ask. Could also be just exactly the same license.
2021-05-19 10:28:59
2021-05-19 10:29:50
We are moving from Apache to BSD, which supposedly makes it compatible with GPLv2
2021-05-19 10:30:27
And with MPL, which might be relevant for firefox?
2021-05-19 10:33:54
FOSS license technicalities get complicated quickly, tl;dr we just want to make sure there are no license issues if you want to use libjxl in anything.
improver
2021-05-19 10:34:31
i dont think it matters with non-invasive licenses
2021-05-19 10:36:25
as in, yes apache2 has patent protection stuff gpl2 doesn't but if you were integrating with gpl2 then that stuff wouldn't be incompatible
2021-05-19 10:36:39
but i don't dislike the move
_wb_
2021-05-19 10:38:48
Yes, likely Apache2 was OK already, but some consider it problematic with gpl2/mpl, so just to be sure we are changing to BSD-3 which is uncontroversially compatible with any other FOSS license
Petr
2021-05-20 06:47:35
When will the change of the license happen?
_wb_
2021-05-20 06:48:22
Soon (tm)
2021-05-20 07:15:07
2021-05-20 07:15:16
big merge request, lol
2021-05-20 07:15:31
2021-05-20 07:18:01
same as before, irrevocable royalty-free with defensive clause (if you start patent trolling, you lose the grant)
2021-05-20 07:21:30
Yes. Currently you can point to the Apache 2.0 license file, which says the same thing, so no need to wait for the explicit PATENTS file...
veluca
2021-05-20 07:25:02
well, technically that only applies to the *code*, not to the format - I guess you can point them to the Type 1 declaration from ISO?
2021-05-20 07:26:28
<@!794205442175402004> I guess
_wb_
2021-05-20 07:28:11
ISOBMFF was never patented and it is in any case old enough to have all unknown patents expired (JPEG 2000 uses it, so it is at least 21 years old, probably older)
2021-05-20 12:54:55
a gif encoder is kind of out of the scope of the project, no?
2021-05-20 12:55:55
sure, feel free to quote me
fab
2021-05-20 12:55:58
honestly you should close the discussion
2021-05-20 12:56:06
you aren't a developer
2021-05-20 12:56:10
or a jxl developer
2021-05-20 12:56:21
why go in devs websites?
_wb_
2021-05-20 12:56:21
who should close what discussion?
2021-05-20 12:57:26
users can open or discuss issues, why not? there's no "dev certificate" needed to participate in FOSS projects πŸ™‚
fab
2021-05-20 12:57:53
i'm joking
_wb_
2021-05-20 12:58:06
yes
fab
2021-05-20 12:58:16
sorry i said wrong thing
_wb_
2021-05-20 12:58:29
one thing we should add (isn't there yet) is APNG output, so there is at least one animated output format
2021-05-20 12:58:42
at the moment djxl will just produce multiple outputs, one for every frame
veluca
2021-05-20 02:08:27
I don't think that's it
2021-05-20 02:08:32
but you can look say here: http://ds.jpeg.org/whitepapers/jpeg-xl-whitepaper.pdf
2021-05-20 02:08:54
The complete JPEG XL reference software is available under a free and open source, royalty-free license. The contributors have also declared to ISO/IEC that according to the Common Patent Policy they are offering a Type 1 Free of Charge patent grant.
2021-05-20 02:11:01
<@!794205442175402004>
_wb_
2021-05-20 02:11:35
Nokia is not involved in BMFF
2021-05-20 02:11:41
they are involved in HEIF
2021-05-20 02:12:23
and no, I wouldn't count ISOBMFF as a significant part of JXL, it's just a container convention that part 2 of the spec happens to follow
2021-05-20 02:14:52
AVIF is based on an AV1 codestream in a HEIF container which is based on MIAF which is based on ISOBMFF JXL is a JXL codestream, optionally wrapped in an ISOBMFF container.
Robin_Watts
2021-05-20 04:54:27
Has anyone got a test suite of jxl images?
2021-05-20 04:54:44
(Or rather, is there a publicly accessible test suite anywhere)
Pieter
Robin_Watts (Or rather, is there a publicly accessible test suite anywhere)
2021-05-20 04:59:12
https://github.com/libjxl/conformance ?
Robin_Watts
Pieter https://github.com/libjxl/conformance ?
2021-05-20 05:00:07
Looks perfect! Thanks. Maybe add that link to the <#822120855449894942> ?
_wb_
2021-05-20 05:17:01
It's far from complete, but it's a start
veluca
2021-05-21 08:25:22
heh, I just replied
improver
2021-05-21 08:41:39
tbh normalized images to use as reference would be nice
2021-05-21 08:42:10
as in, srgb, prerotated, maybe dithered 8bit
2021-05-21 08:43:11
not reference to mechanically compare to but for human viewers to see how stuff is somewhat intended to look
_wb_
2021-05-21 08:57:00
input.jxl is the input, ref.* is the reference for humans
2021-05-21 08:58:33
the reference for machine comparison will be in a different format since we need something that can do 32-bit float, any number of channels, and animation, and such a thing does not exist in a widely-supported human-friendly file format.
2021-05-21 09:04:07
Petr
2021-05-21 09:04:39
If it doesn't exist then jxl is the king and doesn't need to compare to anything… 😜
improver
2021-05-21 09:04:53
png rotation is p fucked in my experience, i think i tried that stuff some time ago but support was.. not good
_wb_
2021-05-21 09:10:50
by default, libjxl handles orientation for you
2021-05-21 09:11:52
so if it's wrong, it's either because you are explicitly asking libjxl _not_ to handle orientation and failing to do it yourself, or it's because you are doing orientation _again_ after libjxl already did it
2021-05-21 09:13:20
looks like in the digiKam case, it's asking libjxl to not handle orientation and then also not doing it itself
2021-05-21 09:13:53
(if it was done twice, you'd see an upside-down bench)
2021-05-21 09:14:31
(unless they messed up the "doing it twice" thing and do the orientation in the opposite direction)
2021-05-21 09:15:42
orientation and color profile handling are things that always tend to cause trouble, so that test image should help to find applications that don't do it correctly
veluca
2021-05-21 10:25:19
nah
_wb_
2021-05-21 10:55:51
I could make one but there's no software that will correctly render it, not even djxl πŸ™‚
2021-05-21 10:56:00
Level 5 does not allow CMYK
2021-05-21 10:57:40
(djxl does not implement color management for 4-channel color profiles, so it will decode the CMY correctly and have the K as an extra channel, but then doesn't really know what to do with those to convert it to an RGB png, for example)
2021-05-21 11:02:17
a lot of viewers also display CMYK JPEGs incorrectly
2021-05-21 11:02:34
e.g. all browsers except Safari, IIRC
improver
2021-05-21 11:05:55
how exactly incorrectly?
tufty
2021-05-21 11:10:27
Hello all, oss-fuzz has found an out of bounds write in libjxl github master I've opened an issue
2021-05-21 11:17:20
Re. CMYK JPG viewing, there are some annoying problems around D50 / D65 white with CMYK JPGs many viewers even ignore embedded profiles (!) the whole business of visually matching an emissive display to ink on reflective paper is a nightmare, and it's very hard to set up a good viewing environment (I spent years on that nonsense, sigh)
_wb_
improver how exactly incorrectly?
2021-05-21 11:22:58
Not doing proper color management, or ignoring K and just rendering CMY as if it were sRGB
2021-05-21 11:26:09
I wonder how relevant CMYK will remain the future, now printers are starting to move to more-than-4-color processes...
2021-05-21 11:27:15
Likely just wide-gamut high-precision RGB, plus maybe some vector stuff in black, is a better approach than using CMYK workflows
tufty
2021-05-21 11:28:23
more-than-CMYK has been around since at least the 90s, I'd be surprised if CMYK went away soon
2021-05-21 11:29:46
friends tell me that sometimes you have to work in CMYK for control over actual ink on paper -- eg. I want no ink here, and I want 100% ink there especially if you use spot colours as well
2021-05-21 11:33:24
the offset press market is a difficult business when I started out I was full of enthusiasm for calibrating everything and getting perfect colour I went on a factory visit to see the press we were working with and there was a man with a bucket of ink and a trowel walking along the top of the machine dropping ink on to rollers where he felt they looked a bit dry calibration goals were scaled back after that field trip hehe
_wb_
2021-05-21 11:58:02
Lol
2021-05-21 11:59:58
Yes, I can see how controlling ink directly can be useful (especially for text, where you want to avoid using multiple inks if possible).