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

on-topic

Whatever else

_wb_
Pieter It seems by default cjxl and djxl statically link libjxl, so that's no issue. In other libraries you sometimes see libtool trickery, where the produced "binary" is really a shell script that sets LD loading path correctly to find the libs, and then invokes the real binary.
2021-05-09 04:37:20
Worse: they do not use the library api at all yet. They predate the library...
veluca
2021-05-09 07:10:03
Of course I use it from the compiled sources 🀣
diskorduser
2021-05-09 02:43:12
`>cxl cmpk.jpg 16A.jxl -j -d 0.5 -s 7 [v0.3.7 | SIMD supported: AVX2,SSE4,Scalar] Read 3456x4608 image, 27.2 MP/s Encoding [Container | VarDCT, d0.500, squirrel | 402-byte Exif], 2 threads. Compressed to 1571659 bytes (0.790 bpp). 3456 x 4608, 2.54 MP/s [2.54, 2.54], 1 reps, 2 threads.`
2021-05-09 02:43:40
`>identify -verbose 16A.jxl | ag Format Format: JXL (JPEG XL Lossless JPEG1 Recompression) `
2021-05-09 02:43:54
Possible imagemagick bug?
_wb_
2021-05-09 02:49:29
It might confuse "uses container" with "is losslessly recompressed jpeg", which is not the same thing
spider-mario
2021-05-09 02:58:35
ah, right, I have noticed that bug in GNU file as well
2021-05-09 02:58:39
but wasn’t sure how to report it
2021-05-09 02:58:54
someone, somewhere, must have assumed that the container was only for losslessly-recompressed JPEGs
2021-05-09 02:59:18
we might have miscommunicated somewhere
_wb_
2021-05-09 03:29:31
Lossless-recompressed jpeg implies container, but not the other way around
2021-05-09 03:30:11
Need to check for a `jbrd` box in the isobmf if you want to make that distinction...
2021-05-09 03:30:54
(not sure if it is a distinction really worth making)
2021-05-10 05:07:43
I don't think the api gives that info atm. The api is still evolving.
2021-05-10 08:24:50
Yes
2021-05-10 08:26:20
And also the `file` magic should be updated
2021-05-10 08:30:33
Ah that is ok
2021-05-10 09:02:47
πŸ‘
2021-05-10 01:58:54
https://drafts.csswg.org/mediaqueries-5/#prefers-reduced-motion
2021-05-10 01:59:42
<@!710762823986446367> do you think it would make sense to interpret `prefers-reduced-motion` to also avoid progressive repaints?
2021-05-10 02:01:47
I'm searching for a way to have nice progressive loading by default, while still allowing those who really don't like progressive loading to have a way to disable it, ideally without introducing new user preference flags (since I understand that chrome devs don't like adding those)
Jake Archibald
2021-05-10 02:03:36
<@794205442175402004> My gut feeling is no, but it might depend on how many passes there are. Even with reduced motion, you'd still have motion if it was required to make sense of the page. It's mostly for prevent unnecessary transitions, and I don't think JXL's progressive rendering is particularly obtrusive
_wb_
2021-05-10 02:04:03
I think some basic progression (1 fast preview, followed by eventually the final image) is actually "less motion" than the flash that happens when an image instantly appears out of nowhere.
2021-05-10 02:06:45
But several repaints might be more obtrusive because with many repaints the image would (subtly but noticeably) change several times while loading, possibly in weird middle-out ways (progressive passes can be re-ordered in e.g. a spiral shape in jxl)
Jake Archibald
2021-05-10 02:06:53
<@!794205442175402004> it might depend on whether the switch is more distracting than the progression JXL would use otherwise
_wb_
2021-05-10 02:10:23
I think two-step progression (e.g. DC followed by final image, or blurhash followed by final image, or avif preview followed by final image) is uncontroversially less distracting than "blank spot followed by final image"
Jake Archibald
2021-05-10 02:11:08
agreed
_wb_
2021-05-10 02:11:51
But many-step progression (e.g. a JPEG with 10 scans like what mozjpeg produces) is somewhat more controversial: the image keeps changing subtly and you don't know when it is done loading
2021-05-10 02:12:49
In JXL we can always do two-step progression but we can also optionally do many-step progression.
2021-05-10 02:14:30
Perhaps it would make sense to do only the first step (which would be an upscaled 1:8 image) and then wait for the final image in case `prefers-reduced-motion=true`, but show more intermediate results (assuming the connection is slow enough to do that in the first place) in the default case of `prefers-reduced-motion=false`?
Jake Archibald
2021-05-10 02:16:18
<@!794205442175402004> might be good to reach out to someone who works with a11y stuff, like https://twitter.com/rob_dodson. If JXL is made to be 2-pass for this reason, seems like we should do it for JPEG too
_wb_
2021-05-10 02:21:15
For JPEG already some stuff happened in that respect: the "green martian" effect from showing DC with YCb with Cr still missing is no longer something that can happen.
2021-05-10 02:22:17
There is no way to do the AC of a progressive JPEG in a single pass though, you have to use at least 3 passes after the DC (one for each component).
Jake Archibald <@!794205442175402004> might be good to reach out to someone who works with a11y stuff, like https://twitter.com/rob_dodson. If JXL is made to be 2-pass for this reason, seems like we should do it for JPEG too
2021-05-10 02:28:50
Rob doesn't have his twitter DMs open, so I'd have to reach out via public tweet which I don't really like to do. Could you ping him and ask him to dm me? (or to join this discord, even better πŸ˜€ )
Jake Archibald
2021-05-10 02:29:51
<@!794205442175402004> what's your twitter handle again?
_wb_
2021-05-10 02:32:50
yes that's me
2021-05-10 02:33:13
here's a discord link if you want to get him here: https://discord.gg/DqkQgDRTFu
nmkd
2021-05-10 02:33:21
that's where we are
2021-05-10 02:33:40
oh nvm
2021-05-10 02:33:43
that's what you meant
_wb_
2021-05-10 02:34:03
😁
bobdod
2021-05-10 02:41:36
πŸ‘‹
2021-05-10 02:42:03
Oh haha I still have my shadowrun character profile for discord. This is Rob. Let me change that πŸ˜…
_wb_
2021-05-10 02:42:47
Hi Rob!
_wb_ https://drafts.csswg.org/mediaqueries-5/#prefers-reduced-motion
2021-05-10 02:43:54
we had a little discussion here about the possible connection between `prefers-reduced-motion` and progressive rendering of images
2021-05-10 02:44:55
your thoughts on this would be very welcome πŸ™‚
bobdod
2021-05-10 02:47:28
oh ok, taking a look now
2021-05-10 02:48:30
<@!794205442175402004> for progressive repaints I'm assuming it sort of paints in a bit pixelated, then paints in again with higher resolution, and so on until the picture is at its final resolution?
2021-05-10 02:48:46
or is it more like a choppy partial painting where the top third paints in, then the middle, then the bottom
_wb_
2021-05-10 02:49:59
well it's not really pixelated, more blurry
2021-05-10 02:50:14
but yes, the first thing
2021-05-10 02:50:46
the choppy partial painting is not progressive but sequential or incremental rendering
2021-05-10 02:51:04
which is also something that may or may not have a connection with `prefers-reduced-motion`
veluca
2021-05-10 02:52:18
(for that matter, a JPEG XL image might even do choppy partial painting in a weirder order, like middle -> bottom -> top)
2021-05-10 02:52:55
(it's an encode-time decision)
bobdod
2021-05-10 02:56:02
hm it's an interesting question.. I don't know enough about vestibular disorders to know what kinds of screen actions can be triggering for folks, with the exception of things like parallax... Let me send a quick email to some Chrome a11y folks I work with to see if they know who we could ask.
2021-05-10 02:59:59
do y'all happen to have a video of what the progressive loading looks like?
veluca
2021-05-10 03:02:59
something like this? https://www.youtube.com/watch?v=inQxEBn831w
2021-05-10 03:03:24
(you can assume that the "black squares" part will be skipped in a browser)
paperboyo
2021-05-10 03:04:02
For mozJPEG, this article is my favourite: https://cloudinary.com/blog/progressive_jpegs_and_green_martians (look for _Here is a comparison of an image encoded with MozJPEG as a nonprogressive JPEG_). So: it may look different.
_wb_
2021-05-10 03:07:05
these videos are "slow motion" simulations of what could be done on a very slow connection when the browser is doing a lot of repaints when new data arrives - in reality browsers will not do that many repaints
bobdod
2021-05-10 03:08:40
ok great, thank you! I'm sending this over with the note about the slow motion bit
Crixis
2021-05-10 06:15:02
gthumb have a strange bug with jxl
2021-05-10 06:15:23
view very low definition
2021-05-10 06:15:35
2021-05-10 06:15:45
eog
2021-05-10 06:16:39
fab
2021-05-10 06:20:06
2021-05-10 06:20:07
monospace legible font
veluca
fab
2021-05-10 06:26:43
got strong Mattino vibes here xD
2021-05-10 06:28:33
(well, Ungaretti in general, I guess)
bobdod
2021-05-10 10:13:21
<@794205442175402004> here is the feedback I got from the chrome a11y team. ``` I'd need to understand more about why users don't like progressive loading. prefers-reduced-motion would have a lot more impact than that (though I'm not sure how well supported it is). It's also not obvious to me that that's how I'd stop progressive loading, if that were my goal as a user. I'm trying to think about what the settings UX would look like, and I'm coming up with something pretty confusing. ``` And another teammate chimed in: ``` I don't feel like an expert on this at all, but my initial thoughts are that it might be very one-directional. People who already have prefers-reduced-motion *might* benefit from avoiding progressive repainting. Most likely they'd be fine with it, even if progressive painting didn't bother them. However, people who dislike progressive painting aren't as likely to be happy with enabling "prefers reduced motion" since it makes a bunch of other changes too, like eliminating smooth scrolling. This is tough - it is a challenge to add another setting, and I also worry that this setting could be yet another way to fingerprint users. ```
_wb_
2021-05-11 05:10:13
Fingerprinting: valid concern, and would be a reason not to expose this preference in any (easily) observable way: e.g. don't add a http header that asks servers to send a progressive or non-progressive image, don't make it something that can be queried in css or js, just make the progressive rendering of images have more or less repaints.
2021-05-11 05:12:51
The one-directional aspect of it I agree with: if you are fine with motion in general but you just dislike progressive loading, you'd have to "kill a mosquito with a bazooka"...
2021-05-11 05:16:05
Why users don't like progressive loading is a good question. I think the vast majority of users **do** like progressive loading (90% or more). But apparently there are some who don't like it, and I don't really know their reasons.
190n
2021-05-11 05:19:15
afaik the only way to read pixels from an image is to draw it to a canvas and read image data from there. that api might already be disabled if the browser is trying hard to resist fingerprinting. otherwise they could probably make it so that (if this is not already the case) drawing an image to the canvas will only draw anything if the image has been fully downloaded and decoded
2021-05-11 05:19:26
i should try this out actually
_wb_
2021-05-11 05:21:47
Two reasons why people might not like it: (but I am mostly just hypothesizing here) - the image goes from blurry to sharp in a series of updates, which adds cognitive load because the screen is updating more, but also because they first thought there was a blurry image there but then it turns out to be a sharp image - not knowing when the image is actually fully loaded (do I see all detail now? Or is it still loading?) can be uncomfortable
2021-05-11 05:26:15
The first reason could be alleviated by doing fewer repaints. The second reason could be alleviated by showing progress of loading in an additional way, e.g. by having the option to overlay a non-obtrusive little progress bar on images that haven't fully loaded yet. (For sequentially loading images, this isn't needed because the image itself **is** a kind of progress bar, but for progressively loading images it is less obvious what the loading status is)
2021-05-11 05:30:39
Both are possible, but it makes more sense to me as a browser-wide preference than as a page specific design choice.
190n
190n i should try this out actually
2021-05-11 06:30:56
ok so i tested with a progressive jpeg and throttled network. if you draw an image on a canvas it only draws anything if the image is fully loaded
2021-05-11 06:31:34
i can't think of any other ways you could access a partial image, unless you are decoding it yourself in wasm or something (but then you decide whether to decode it progressively)
2021-05-11 06:36:01
just firefox
2021-05-11 06:38:48
chromium is the same
2021-05-11 06:39:59
and epiphany (based on webkit)
_wb_
2021-05-11 07:11:43
Yes, I don't think there is a fingerprinting issue
2021-05-11 07:14:11
<@!356568358407241729> feel free to send back my comments to the chrome a11y folks, or to invite them here πŸ™‚
paperboyo
_wb_ The first reason could be alleviated by doing fewer repaints. The second reason could be alleviated by showing progress of loading in an additional way, e.g. by having the option to overlay a non-obtrusive little progress bar on images that haven't fully loaded yet. (For sequentially loading images, this isn't needed because the image itself **is** a kind of progress bar, but for progressively loading images it is less obvious what the loading status is)
2021-05-11 08:23:04
_showing progress of loading in an additional way_ Isn’t the usual Stop navigation cross button in the address bar (that changes to Reload page) already in every browser not enough to indicate that the page is still loading? Adding per-image loading indicator would increase visual noise and would come with its own 77 problems IMHO.
_wb_
2021-05-11 08:29:33
For me it is enough, but for people who say they don't like it that they don't like progressive because it is hard to tell when an image is done loading, it might not be enough to have a global "page is loaded" indicator but they may want it per-image. In any case I agree that it does add visual noise and it should certainly not be something to do by default, but only as an optional browser ui/ux preference... just to give those who prefer incremental over progressive because incremental has a 'built-in' per-image progress bar that they're missing in the progressive case. I would do it as a small, 50% transparent overlay at the top or bottom of the image, so it doesn't add too much visual noise.
Crixis
_wb_ For me it is enough, but for people who say they don't like it that they don't like progressive because it is hard to tell when an image is done loading, it might not be enough to have a global "page is loaded" indicator but they may want it per-image. In any case I agree that it does add visual noise and it should certainly not be something to do by default, but only as an optional browser ui/ux preference... just to give those who prefer incremental over progressive because incremental has a 'built-in' per-image progress bar that they're missing in the progressive case. I would do it as a small, 50% transparent overlay at the top or bottom of the image, so it doesn't add too much visual noise.
2021-05-11 08:36:57
seem an over-complicate solution
_wb_
2021-05-11 08:38:51
I guess that depends on how strongly people feel about the problem.
2021-05-11 08:40:28
If they feel strongly enough about it to make it a reason to not do progressive rendering for anyone, then I'd rather have an over-complicated solution than to just say "too bad, let's not do progressive rendering at all".
Crixis
2021-05-11 02:19:48
This problem can be similiar to patch finding problem? https://en.wikipedia.org/wiki/Longest_repeated_substring_problem
2021-05-11 02:20:35
seem O(n)
veluca
2021-05-11 03:36:17
heh, I didn't know that problem - but unfortunately a suffix tree is inherently a 1d data structure, not going to help for patches...
Crixis
veluca heh, I didn't know that problem - but unfortunately a suffix tree is inherently a 1d data structure, not going to help for patches...
2021-05-11 03:43:36
https://link.springer.com/referenceworkentry/10.1007/978-0-387-30162-4_442, help?
raysar
_wb_ For me it is enough, but for people who say they don't like it that they don't like progressive because it is hard to tell when an image is done loading, it might not be enough to have a global "page is loaded" indicator but they may want it per-image. In any case I agree that it does add visual noise and it should certainly not be something to do by default, but only as an optional browser ui/ux preference... just to give those who prefer incremental over progressive because incremental has a 'built-in' per-image progress bar that they're missing in the progressive case. I would do it as a small, 50% transparent overlay at the top or bottom of the image, so it doesn't add too much visual noise.
2021-05-11 03:45:02
That the same for me, even for lightroom. A cool solution is the decoder add information on partial decoded picture, like a 2px green frame, or something like that ^^
veluca
2021-05-11 03:45:07
not with those complexities πŸ˜„ also it's useful to find "similar enough" patches, not just exactly equal patches
Crixis
2021-05-11 03:45:29
damn
veluca
2021-05-11 03:47:54
there are probably some reasonable ways to do it
2021-05-11 03:48:53
I think with hash tables we can do better than what we do now
2021-05-11 03:49:06
... for detecting *similar* patches
2021-05-11 03:49:16
for detecting *text-like* patches, that's another story
raysar
_wb_ For me it is enough, but for people who say they don't like it that they don't like progressive because it is hard to tell when an image is done loading, it might not be enough to have a global "page is loaded" indicator but they may want it per-image. In any case I agree that it does add visual noise and it should certainly not be something to do by default, but only as an optional browser ui/ux preference... just to give those who prefer incremental over progressive because incremental has a 'built-in' per-image progress bar that they're missing in the progressive case. I would do it as a small, 50% transparent overlay at the top or bottom of the image, so it doesn't add too much visual noise.
2021-05-11 03:51:03
Other solution is the partial decoding was pixelated with no blur, only display 1:8 1:4 and 1:1 so there are no ambiguity about partial decoding ^^
_wb_
veluca for detecting *text-like* patches, that's another story
2021-05-11 04:11:33
For detecting regions suitable for encoding with modular patches, a heuristic that works like this can be useful: Compute residuals of some modular predictor (gradient or select would likely work well), bucketing it into three classes: equal to zero (A), non-zero but lowish amplitude (B), and high amplitude (C). Then if in some part of the image you have mostly A and some C but little B, it is likely good to segment that part into a modular frame (and investigate it for repetitive stuff).
Scientia
2021-05-12 02:08:51
From what I know patches can be modular, lossy modular, and vardct. A lossless image by definition should use lossless modular patches. Also a jpeg lossless transcode can't use patches because it's supposed to be able to reconstruct the original jpg
2021-05-12 02:09:29
Maybe jpeg lossless compression could use patches but I don't think it can without making it not reconstruct identically
BlueSwordM
2021-05-12 02:18:20
It might be that the computation was being done, but not applied.
2021-05-12 02:18:32
This might give a free efficiency boost, particularly in some type of content.
Pieter
Scientia Maybe jpeg lossless compression could use patches but I don't think it can without making it not reconstruct identically
2021-05-12 02:19:00
No, patches are after DCT decoding... you can't output DCT coefficients if patches are to be applied afterwards.
Scientia
2021-05-12 02:20:42
Oh
Pieter
2021-05-12 02:25:33
(this is based on my high-level understanding, I don't know the actual details)
2021-05-12 02:26:21
I guess patches inside the DC part of VarDCT could work... unsure.
monad
2021-05-12 04:57:07
0.4 may be the next release, given: https://discord.com/channels/794206087879852103/804324493420920833/840310585719652392
_wb_
2021-05-12 05:05:37
It was still doing some of the work, for nothing. It might get a bit slower now if it actually finds patches, not sure.
2021-05-12 05:13:28
Q1: Yes. At least for up to 16-bit. For higher bitdepth we are disabling patches in lossless mode because our implementation is working on floats at that point and we run into the problem that A+B-B != A can happen in floating point arithmetic (not a bitstream issue, just an implementation limitation). Q2: Right. The old JPEG doesn't have patches so when losslessly recompressing it, we cannot use patches.
Pieter
2021-05-12 05:20:45
<@794205442175402004> What about patches in the DC component?
2021-05-12 05:20:59
Or are those restricted to full-frame end results?
_wb_
2021-05-12 05:23:05
You could do it with a DC frame, I suppose
2021-05-12 05:23:48
Not with the default "DC is part of the frame data" approach though
2021-05-12 05:24:57
The current encoder is not trying to find patches in DC frames (also not in the spritesheet frames created for Patches)
Deleted User
_wb_ The current encoder is not trying to find patches in DC frames (also not in the spritesheet frames created for Patches)
2021-05-12 06:56:28
> The current encoder is not trying to find patches [...] ([...] in the spritesheet frames created for Patches) That'd be "patch-ception", right?
2021-05-12 07:19:42
<@!794205442175402004> apparently SSIMULACRA uses L\*a\*b\* color space. Do you think it'd give better results if it was rewritten to use XYB instead?
_wb_
2021-05-12 07:23:43
Maybe. Or maybe XYB for the high-res scale, Lab for the lower res scales.
> The current encoder is not trying to find patches [...] ([...] in the spritesheet frames created for Patches) That'd be "patch-ception", right?
2021-05-12 07:25:11
Patch-ception is possible, bitstream-wise, but the current encoder doesn't go there (and it is likely very hard to do that in a useful way)
veluca
_wb_ Patch-ception is possible, bitstream-wise, but the current encoder doesn't go there (and it is likely very hard to do that in a useful way)
2021-05-12 07:56:08
it can be useful for colored text: you encode black and white letters in a first patch frame, use alpha blended patches to color it in the second patch frame, and then paint them on the main image
_wb_
2021-05-12 09:10:01
Yes, or to make letters from letter segments or common words from letters, if that ends up being cheaper to signal
bobdod
_wb_ The one-directional aspect of it I agree with: if you are fine with motion in general but you just dislike progressive loading, you'd have to "kill a mosquito with a bazooka"...
2021-05-12 03:42:17
My hunch is that this may be the strongest argument against making it part of prefers-reduced-motion. As a user and as a developer I think I'd be surprised that choosing this option (which I normally associate with transitions/animations) would affect the way images render.
_wb_
2021-05-12 03:48:11
I don't disagree. I suppose the question is: how severe is the problem that some people seem to have with progressive rendering, and does it justify adding a user preference setting to choose between two (or more) rendering behaviors?
bobdod
_wb_ I don't disagree. I suppose the question is: how severe is the problem that some people seem to have with progressive rendering, and does it justify adding a user preference setting to choose between two (or more) rendering behaviors?
2021-05-12 03:55:16
yeah that's a good question... How have users previously reported not liking it? I'm trying to sort of brainstorm a way of getting this feedback from folks.
_wb_
2021-05-12 03:55:16
I am personally fine with just always rendering images as progressively as possible (within reason - I don't need more than 2 repaints per second or something).
2021-05-12 03:57:39
I don't know many people who don't like progressive rendering. I know Pascal Massimino doesn't like it.
2021-05-12 04:03:13
As far as I know, it is a topic that pops up every once in a while, but there's not really a lot of data available on actual user preferences
bobdod
2021-05-12 04:04:10
I pinged the Chrome a11y folks to ask if they know of any sort of standards associated group that can help determine if a feature has potential accessibility issues. I guess I'd be most interested in seeing if something may affect someone because of a possible disability, versus them not liking something because they have a strong stylistic opinion.
2021-05-12 04:06:07
If it turns out that progressive rendering really does bother someone because they have a vestibular disorder then that would further the case that it should be gated by prefers-reduced-motion.
_wb_
2021-05-12 04:06:55
Yes, that makes sense.
bobdod
2021-05-12 04:08:29
Y'all might also try doing a survey of some kind? Or creating an open discussion thread on GitHub. I've done that in the past when we had open questions related to specs. We'd create a thread and put the word out on twitter to ask for feedback.
_wb_
2021-05-12 04:10:55
It would certainly be interesting to know how people think about it - both in terms of stylistic preference and in terms of actual a11y issues.
2021-05-12 04:14:14
Progression does of course also bring a11y benefits, in particular for people with poor or unreliable network conditions
spider-mario
paperboyo _showing progress of loading in an additional way_ Isn’t the usual Stop navigation cross button in the address bar (that changes to Reload page) already in every browser not enough to indicate that the page is still loading? Adding per-image loading indicator would increase visual noise and would come with its own 77 problems IMHO.
2021-05-12 05:28:20
there would be ways to reduce the visual noise, for example the indicator could appear on images of at least a certain size, after at least a few seconds of loading, and with a smooth fade-in / fade-out animation instead of abruptly
_wb_
2021-05-12 05:39:11
Some older discussions on progressive loading: https://github.com/WICG/largest-contentful-paint/issues/68
diskorduser
2021-05-13 06:44:24
png and jxl are in same size. Is it a imagemagick bug? (The Input is a 16bit PNG)
_wb_
2021-05-13 06:56:34
Is the jxl actually a jxl?
2021-05-13 06:57:48
(I think if you have an imagemagick without jxl support, it might produce png files if you give it an "unknown" output extension)
2021-05-13 08:02:10
Strange coincidence then that the sizes are so close. I would expect a q95 jxl to be much smaller than a png... Does cjxl have the same behavior?
diskorduser
2021-05-13 08:05:40
File is 27mb. From file manager properties panel.
_wb_ (I think if you have an imagemagick without jxl support, it might produce png files if you give it an "unknown" output extension)
2021-05-13 08:09:47
Yeah. Your are right. It is outputting a PNG file. That's why file size is huge.
_wb_
2021-05-13 08:16:14
Not really, at least not as a valid jxl bitstream
2021-05-13 08:16:27
What are the first few bytes of the file?
2021-05-13 08:17:10
`hexdump bla.jxl | head` or something would be useful
diskorduser
2021-05-13 08:20:02
Sorry. It was my fault. Recently I updated my arch. It replaced the imagemagick compiled with jxl with Arch's non jxl imagemagick.
_wb_
2021-05-13 08:23:42
ff0a is a jxl codestream
2021-05-13 08:24:22
So I guess just a coincidence that the sizes are so close
diskorduser
2021-05-13 08:35:25
got another problem.
2021-05-13 08:36:28
no. all file sizes are same. 171kb , different quality
2021-05-13 08:38:45
The imagemagick is from https://build.opensuse.org/package/binaries/home:user5664536:linux/imagemagick/Arch
2021-05-13 08:40:19
😦
Eugene Vert
2021-05-13 08:43:54
Maybe related https://gitlab.com/wg1/jpeg-xl/-/issues/179
_wb_
2021-05-13 08:51:42
Probably that code predates most of the libjxl encode api. We should improve the encode api and update ImageMagick/Gimp/... integrations...
Dirk
2021-05-13 09:36:03
Was already reading `cjxl.cc` to figure out how the quality option works there.
veluca
2021-05-13 09:36:54
if you're using the C API then cjxl won't tell you much
2021-05-13 09:38:05
the relevant API function IIRC is `JxlEncoderOptionsSetDistance`
Dirk
2021-05-13 09:38:13
It does and it doesn't πŸ˜‹ It at least tells me that we should probably call `JxlEncoderOptionsSetDistance`
veluca
2021-05-13 09:38:47
yup
Dirk
2021-05-13 09:43:37
But it does look like we don't have access to `quality_pair` that we probably also need to set when the quality is `100`
_wb_
2021-05-13 09:44:33
That one is for lossy modular
Dirk
2021-05-13 09:44:50
`if (quality < 7 || quality == 100 || params.modular_mode)` ?
veluca
2021-05-13 09:45:12
there's a SetLossless for that
Dirk
2021-05-13 09:45:33
We are using that but I was wondering if we should also set the quality_pair
_wb_
2021-05-13 09:47:18
Yes, currently it uses lossy modular only if you do really low quality
Dirk
2021-05-13 09:50:04
We call `JxlEncoderOptionsSetLossless` when the `-quality` is set to `100`. That is not sufficient?
veluca
2021-05-13 09:51:34
no no, that is sufficient
2021-05-13 09:51:55
you only need SetLossless for q=100 or SetDistance for q < 100
2021-05-13 10:07:23
I don't think so, there's something like `JxlEncoderStoreJpegFrame` but I have no idea if IM can even get a JPEG frame at that point (<@693227044061839360>)
Dirk
2021-05-13 10:09:51
It looks we are are talking about two different things. Storing a jpeg lossless in a jxl container and storing image data lossless.
veluca
2021-05-13 10:10:25
yep, two completely separate things, agree
Dirk
2021-05-13 10:11:09
We cannot do the first one because we decode the jpeg and store it in our internal pixel storage. If you want that it would be better to use JXL tooling instead.
2021-05-13 10:14:01
This is now not possible indeed. And in theory we could do this with an "image attribute" to store the raw jpeg data but I really wonder if we should add that to ImageMagick.
veluca
2021-05-13 10:15:01
yeah, it does seem somewhat out of scope to me
Dirk
2021-05-13 10:21:58
Not saying we will never do that but it feels like an edge case to me. And our normal process is to decode the file to pixels first. And that will mean that we don't have the original data after the image has been read. This would mean you would need to "attach" the original data to a bogus image and then encode it. That feels super hacky and probably not something we would add. Attaching the original JPEG data to the image when we decode it could be an option. But also something that we will not likely add very soon.
2021-05-13 10:34:18
Done, and also just added support for setting the Butteraugli distance using `-quality`.
_wb_
2021-05-13 10:36:31
I agree that IM objects are pixel data, not jpeg bitstreams. Maybe a special case could be added somehow for direct `convert foo.jpg foo.jxl` and back, but it would have to bypass the normal IM pipeline and of course cannot do any manipulation.
2021-05-14 06:32:42
libjxl is the name of the library
2021-05-14 06:33:01
So it would be a logical name for a package
2021-05-14 06:33:30
libjxl, libjxl-dev, libjxl-debug, jxl-tools
2021-05-14 06:34:38
I think that would be the most expected package names, at least for me
2021-05-14 06:48:32
The official name of the codec is also "JPEG XL", so with a space, not "JPEG-XL"...
2021-05-14 06:51:43
For the reference implementation, we go for "jxl" everywhere, since spaces are inconvenient. libjxl, cjxl, djxl, .jxl
raysar
2021-05-14 07:30:46
Seach engine also dislike two letter word.
spider-mario
_wb_ For the reference implementation, we go for "jxl" everywhere, since spaces are inconvenient. libjxl, cjxl, djxl, .jxl
2021-05-14 08:45:02
maybe the one exception to this is `benchmark_xl`
_wb_
2021-05-14 08:51:02
Yes, but it doesn't only benchmark jxl, you can also compare with webp/avif/jpeg with it, so maybe it's an extra-large benchmark tool? πŸ˜…
2021-05-16 07:24:49
https://www.reddit.com/r/compression/comments/ndule0/best_compression_method_to_store_files_on_a/
Scientia
2021-05-16 10:01:49
Avif could do it
2021-05-16 10:02:07
I think it's better suited
2021-05-16 10:02:27
Because of course if you are aiming to fit images into a floppy disk
2021-05-16 10:02:41
Lower quality is acceptable
improver
2021-05-16 10:16:50
if only AVIF headers wouldn't take kilobytes on their own
2021-05-16 10:18:29
though in some cases it could probably still come out as better trade-off so Β―\\\_(ツ)\_\/Β―
BlueSwordM
improver if only AVIF headers wouldn't take kilobytes on their own
2021-05-17 12:50:53
I mean, to be fair, it can easily be made smaller from 300 bytes down to 150-188b.
190n
2021-05-17 12:56:09
how?
2021-05-17 01:07:52
i used a usb floppy drive once to copy some stuff off floppies, must have been 7-10 years ago but suppose it would still work on anything with a type-a port
improver if only AVIF headers wouldn't take kilobytes on their own
2021-05-17 01:08:43
depending on how much of the avif header is fixed, maybe they could see space savings from zipping up a bunch of avifs
Scientia
2021-05-17 01:14:17
avifz
2021-05-17 01:14:23
<:monkaMega:809252622900789269>
2021-05-17 01:16:57
I assume?
BlueSwordM
190n how?
2021-05-17 01:20:29
Well, cavif-rs only has an 188b header, even on larger images.
190n
2021-05-17 01:21:14
ah interesting
improver
2021-05-17 03:11:45
nice to hear tbh
_wb_
BlueSwordM Well, cavif-rs only has an 188b header, even on larger images.
2021-05-17 05:08:58
Does it produce spec-compliant avif files, or just files that happen to decode?
2021-05-17 11:32:55
That is an application-level choice, I suppose.
fab
2021-05-17 11:33:59
you're talking about an animated jxl?
_wb_
2021-05-17 11:34:54
I think it would be reasonable for a viewer to display it as an animation but also have an option to go through the frames and e.g. extract a single frame
2021-05-17 11:36:00
but it depends on the scope of the viewer, e.g. probably a browser shouldn't have that functionality (or at least not when showing it in the img tag)
2021-05-17 11:37:19
It might also make sense to present it in a multi-page way, like how a PDF is shown
2021-05-17 11:40:58
It would be good to have some convention on when to interpret it as animation (so autoplay makes sense) and when to interpret it as a multi-page thing (so manual page flipping makes sense, or even showing the pages vertically with a scrollbar). This is not something that the spec specifies, it's a bit out of scope since it's more about presentation than about decoding.
Deleted User
_wb_ but it depends on the scope of the viewer, e.g. probably a browser shouldn't have that functionality (or at least not when showing it in the img tag)
2021-05-17 04:17:55
How would a browser even access multiple pages in one file? Would you need html commands to trigger a change of pages? Or could you access them like: `src="/image.jxl#2"`?
_wb_
2021-05-17 04:19:08
I dunno, I was thinking about how a PDF gets shown
Deleted User
2021-05-17 04:23:26
Or like multipage TIFFs are shown
2021-05-17 04:24:04
How are they shown?
2021-05-17 04:27:16
Also, who is going to decide about that? Are you talking to the Chrome and Firefox devs and recommend how things should be handled or is this something every browser will do differently?
2021-05-17 04:31:50
This is a multipage TIFF, first converted from GIF to individual PNG frames with `ffmpeg` and then merged into TIFF with ImageMagick's `convert`.
2021-05-17 04:32:33
Which browser are you using?
Nova Aurora
2021-05-17 04:33:31
I can't even open it in my firefox
Deleted User
2021-05-17 04:35:14
Windows opens TIFFs by default in older Windows Photo Gallery and it looks like this:
Or like multipage TIFFs are shown
2021-05-17 04:35:22
So you mean how multipage TIFFs are shown in general, not in browser: Understood.
Nova Aurora
2021-05-17 04:35:36
Okular sees it as a multipage file, but qview, the viewer I use, doesn't acknowledge the extra pages
190n
2021-05-17 04:36:01
eog:
2021-05-17 04:36:26
in document viewer:
Nova Aurora
190n in document viewer:
2021-05-17 04:36:59
<:kde:821845105518444625>nome
2021-05-17 04:37:31
Which distro?
190n
2021-05-17 04:38:13
arch
2021-05-17 04:38:28
eog and evince v40.1
Nova Aurora
2021-05-17 04:39:24
I've got arch
2021-05-17 04:39:49
The only problem I have is that it's networking is always cludgy trying to install
bobdod
2021-05-17 05:08:24
<@!794205442175402004> I spoke with the Chrome folks and they mentioned that there's something called the APA which is connected to the w3c. I'm not very familiar with them, but I think they usually review specs for possible accessibility issues. I'm not sure how this aligns with their work since this is more of an implementation question rather than a spec question. But one can file a spec review here: https://github.com/w3c/a11y-request/issues
_wb_
2021-05-17 05:11:18
Cool, that is interesting. Not sure if there's something for them to review, like you say. But might be good to ask their opinions, maybe.
diskorduser
2021-05-17 05:39:07
magick ref.tif -profile icc/ProPh.icc -resize 300x -profile icc/sRGB_v4_ICC_preference_displayclass.icc temp.jxl
2021-05-17 05:39:11
magick ref.tif -profile icc/ProPh.icc -resize 300x -profile icc/sRGB_v4_ICC_preference_displayclass.icc temp.jpg
2021-05-17 05:39:51
jxl colors look washed out
2021-05-17 05:41:09
_wb_
2021-05-17 05:43:47
Hm, wonder where the issue is. What happens if you first make a png and use cjxl on that?
diskorduser
_wb_ Hm, wonder where the issue is. What happens if you first make a png and use cjxl on that?
2021-05-17 05:45:43
It looks fine. png -> jxl with cjxl
_wb_
2021-05-17 05:46:10
And if you do png -> jxl with magick?
diskorduser
2021-05-17 05:47:08
washed out colors.
2021-05-17 05:50:01
magick ref.tif -profile icc/ProPh.icc -resize 300x -profile icc/sRGB_v4_ICC_preference_displayclass.icc temp.png
2021-05-17 05:50:25
magick temp.png pngtojxl.jxl
2021-05-17 05:51:44
I am using gwenview with this patch. https://invent.kde.org/novomeskyd/gwenview/-/commit/c0c613bf665e827f912f4a9c71384469b3ba3f7e
_wb_
2021-05-17 05:56:43
Hm, what if you do lossless jxl?
diskorduser
2021-05-17 05:57:17
Is -quality 100 on imagemagick lossless?
_wb_
2021-05-17 05:57:23
I think so
diskorduser
2021-05-17 05:57:51
JXL_ASSERT: !fp [1] 26515 illegal hardware instruction (core dumped) magick temp.png -quality 100 pngtojxl.jxl
improver
2021-05-17 05:58:07
lol nice
Nova Aurora
2021-05-17 05:58:17
Could we get the png?
diskorduser
2021-05-17 05:58:26
ok
2021-05-17 05:58:56
_wb_
2021-05-17 05:59:35
Hm I remember that assert, but I don't remember if or how it was fixed
improver
2021-05-17 06:00:24
``` % cjxl -q 100 temp.png temp.png.jxl J P E G \/ | /\ |_ e n c o d e r [v0.3.7 | SIMD supported: AVX2] Read 300x400 image, 13.0 MP/s Encoding [Modular, lossless, squirrel], 6 threads. Compressed to 476525 bytes (31.768 bpp). 300 x 400, 0.36 MP/s [0.36, 0.36], 1 reps, 6 threads. ``` this worked okay. do i need color profile too to trigger, or is that different ver?
diskorduser
2021-05-17 06:00:25
I don't understand. the png has both srgb and prophoto icc. πŸ€”
improver ``` % cjxl -q 100 temp.png temp.png.jxl J P E G \/ | /\ |_ e n c o d e r [v0.3.7 | SIMD supported: AVX2] Read 300x400 image, 13.0 MP/s Encoding [Modular, lossless, squirrel], 6 threads. Compressed to 476525 bytes (31.768 bpp). 300 x 400, 0.36 MP/s [0.36, 0.36], 1 reps, 6 threads. ``` this worked okay. do i need color profile too to trigger, or is that different ver?
2021-05-17 06:01:50
the error happens on imagemagick. not on cjxl
_wb_
2021-05-17 06:02:13
Icc takes precedence then
2021-05-17 06:02:39
Or you mean it has two icc profiles?
diskorduser
2021-05-17 06:03:28
I see both srgb in colorspace and prophoto in magick identify
2021-05-17 06:05:02
`identify -verbose temp.png | ag colorspace Colorspace: sRGB exif:ColorSpace: 65535 identify -verbose temp.png | ag prophoto icc:description: ProPhoto RGB`
_wb_
2021-05-17 06:05:51
Exif colorspace? πŸ€”
2021-05-17 06:06:12
What does the result of cjxl --strip look like?
diskorduser
2021-05-17 06:06:21
`identify -verbose temp.png | ag exif exif:ApertureValue: 1.851999 exif:ColorSpace: 65535`
2021-05-17 06:07:17
Imagemagick is too confusing. I should stick to cjxl then.
_wb_
2021-05-17 06:07:32
Things are really complicated when there is both an ICC profile and Exif saying stuff about the color interpretation too
2021-05-17 06:07:57
cjxl by default preserves the exif, while magick might strip it atm
diskorduser
2021-05-17 06:13:35
It still looks washed out even with `>magick ref.tif -profile icc/ProPh.icc -resize 300x -profile icc/sRGB_v4_ICC_preference_displayclass.icc -strip temp.png >magick temp.png pngtojxl.jxl`
improver
2021-05-17 06:15:36
can imagemagick in its current state even do jxl color profile stuff?
_wb_
2021-05-17 06:18:37
<@693227044061839360> is the expert on that
paperboyo
diskorduser I see both srgb in colorspace and prophoto in magick identify
2021-05-17 11:05:52
My poor-man’s understanding: > Colorspace: sRGB This is meaningless and doesn’t say anything beyond that the image is RGB (ie. not CMYK). It [may indicate](https://imagemagick.org/script/command-line-options.php#colorspace) a way IM is nterpreting the default, uncalibrated, images and in which colour space it performs operations (?) if you don’t explicitly convert to intermediary space, or it may not. It changed one day, before it said just `RGB` (around the time IM started to be serious about colour management). > exif:ColorSpace: 65535 This is Exif DCF saying _Uncalibrated_. So, basically, not sRGB. Together with [InteropIndex](https://exiftool.org/TagNames/EXIF.html) it may well mean AdobeRGB (the only two colourspaces Exif can indicate via DCF are sRGB and AdobeRGB). Proper ICC colour profile should always take precedence over any of this (just like it should with PNG colour metadata, not sure, but hopefully, how it should also take precedence over new fancy AVIF or JXL colour metadata). Itβ€˜s the responsibility of any good software always reconcile all the colour metadata and never leave any redundant or, worse still, conflicting bits in. Don’t think I have met such software yet, though 😜 .
2021-05-17 11:07:34
TL;DR: only that bit matters: > icc:description: ProPhoto RGB
diskorduser
paperboyo TL;DR: only that bit matters: > icc:description: ProPhoto RGB
2021-05-18 05:49:24
colors looks dull even after using strip on imagemagick. It is very confusing 😣
Eugene Vert
2021-05-18 10:02:29
For many transcoded jxl images in GIMP (w/ and w/o icc_profile), i'm getting `GIMP-Error: JPEG XL image plug-in could not open image` after `JXL_RETURN_IF_ERROR(DecodeFile(dparams, compressed, &io, &pool));` in `file-jxl-load.cc:LoadJpegXlImage`
2021-05-18 10:05:08
And opening some lossy/lossles jxl images gives blank canvas
2021-05-18 10:26:18
Some examples https://drive.google.com/file/d/1T5X-Cp02JaC50jdKrGhUSIrAJIdHGj8X/view
_wb_
2021-05-18 10:35:50
oops wrong channel
2021-05-18 10:40:30
the SC 29 secretariat is in Japan
2021-05-18 10:40:44
how do you delete attached files from discord?
2021-05-18 10:42:53
it would be really bad for ISO's paywall if people could just download that from here
2021-05-18 10:44:35
got wifi trouble bbl
2021-05-18 10:49:39
Wifi is back
2021-05-18 10:50:24
Well we have a private discord channel for these things
fab
2021-05-18 10:53:27
delete the message
_wb_
2021-05-18 10:54:07
On my phone on 4G now
2021-05-18 10:54:38
How do you delete messages on the phone app for discord?
2021-05-18 10:56:24
How do I check if the link no longer works if I do that?
2021-05-18 10:56:59
Can someone put the link here so I can test after I delete?
2021-05-18 10:57:36
Thanks. Deleted the message
fab
2021-05-18 10:57:36
2021-05-18 10:57:52
still accesible
_wb_
2021-05-18 11:00:15
Really?
2021-05-18 11:02:17
Well we did what we could
2021-05-18 11:05:18
Yes, committee draft is public
2021-05-18 11:05:25
But indeed outdated
2021-05-18 11:09:07
What is the link again? Maybe I can ask Discord to take it offline...
Eugene Vert
2021-05-18 11:17:03
Maybe delete the mentions of this?
_wb_
2021-05-18 11:18:22
yes, I just need to find a way to ask Discord to take https://cdn.discordapp.com/attachments/794206087879852106/844161270164881428/ISO_IEC_FDIS_18181-1.pdf offline
2021-05-18 11:18:55
the link no longer works, it seems
2021-05-18 11:20:46
I get this if I click it:
2021-05-18 11:20:47
<Error> <Code>AccessDenied</Code> <Message>Access denied.</Message> <Details>Anonymous caller does not have storage.objects.get access to the Google Cloud Storage object.</Details> </Error>
2021-05-18 11:21:31
so I think we're good
fab
2021-05-18 11:23:53
firefox still work
_wb_
2021-05-18 11:26:39
that means 1 to 7
2021-05-18 11:26:45
[ is included, ( is not included
2021-05-18 11:33:18
that's the same thing
Crixis
_wb_ yes, I just need to find a way to ask Discord to take https://cdn.discordapp.com/attachments/794206087879852106/844161270164881428/ISO_IEC_FDIS_18181-1.pdf offline
2021-05-18 11:33:34
I can't download
improver
2021-05-18 11:52:43
tfw missed standard leak :<
Crixis
improver tfw missed standard leak :<
2021-05-18 11:54:29
Also I, i'm so sad
veluca
2021-05-18 12:58:10
#mathematicians πŸ˜›
improver
2021-05-18 01:01:49
`)` vs `]` in loop usually means `< maxval` vs `<= maxval`
veluca
2021-05-18 01:02:39
it's a standard mathematical notation
2021-05-18 01:03:01
`(a, b)` -> a and b excluded
2021-05-18 01:03:08
`[a, b]` -> a and b included
2021-05-18 01:03:21
`(a, b]` -> a excluded, b included
2021-05-18 01:03:23
and so on...
2021-05-18 01:03:41
some horrible, horrible people write it `]a, b[` instead of `(a, b)`
improver
2021-05-18 01:03:52
w-what
veluca
2021-05-18 01:04:15
https://en.wikipedia.org/wiki/Interval_(mathematics)#Notations_for_intervals
spider-mario
veluca some horrible, horrible people write it `]a, b[` instead of `(a, b)`
2021-05-18 02:33:30
that’s the notation we use in France
2021-05-18 02:33:39
I had never heard of the () notation before emigrating
Crixis
2021-05-18 02:34:11
in italy all two are in use
2021-05-18 02:34:42
[a,b[ = [a,b)
veluca
spider-mario that’s the notation we use in France
2021-05-18 02:41:15
as I said, horrible people πŸ˜›
spider-mario
2021-05-18 02:41:46
I should add that we use ; as the separator rather than ,
2021-05-18 02:41:50
since , is already the decimal separator
2021-05-18 02:41:52
:p
2021-05-18 02:42:08
]1,5β€―; 4,5[
Eugene Vert
2021-05-18 03:32:17
Oh, there are issues on gitlab already https://gitlab.com/wg1/jpeg-xl/-/issues/234 https://gitlab.com/wg1/jpeg-xl/-/issues/186
diskorduser
2021-05-18 05:04:44
Is it okay to open a GitHub issue on imagemagick jxl related bugs ? is it too early?
_wb_
2021-05-18 05:24:59
I dunno, I guess it doesn't hurt?
diskorduser
2021-05-18 05:53:19
I found that It doesn't properly convert any 16bit PNG to jxl.
Dirk
improver can imagemagick in its current state even do jxl color profile stuff?
2021-05-18 07:38:40
We read the ICC profile of the image. We don't write color profiles at the moment.
improver
2021-05-18 07:40:48
so would work okay if transform to srgb happened i guess
Dirk
2021-05-18 07:41:48
I have seen that assert before and we had that issue with an older version of the jpeg-xl library. Haven't seen it afterwards
2021-05-18 07:42:08
<@!260412131034267649> If you transform to sRGB it should work.
2021-05-18 07:44:39
Not sure what you mean here. Maybe open a discussion on GitHub with a bit more info and the versions of ImageMagick and jpeg-xl that you are using?
diskorduser Is it okay to open a GitHub issue on imagemagick jxl related bugs ? is it too early?
2021-05-18 07:45:18
You can open issues on GitHub or start a discussion if you have a question about ImageMagick and jxl.
Deleted User
_wb_ Well we have a private discord channel for these things
2021-05-19 03:53:22
Private Discord channel just for JPEG XL core devs?
spider-mario I had never heard of the () notation before emigrating
2021-05-19 03:57:35
In higher education in Poland we use [a, b) "international" notation, but below college/uni, in primary and secondary schools we use <a, b). We also use a comma as a separator despite it being used for decimals too, so I personally use semicolon as a separator instead and keep commas just for decimals.
Pieter
2021-05-19 04:03:40
At school we used [a,b[. At university it was [a,b) I think.
_wb_
Private Discord channel just for JPEG XL core devs?
2021-05-19 04:46:11
Yes. There's also a gitlab-dev channel btw
Dirk
2021-05-19 05:21:14
I am unable top open your `temp.png` file it looks like your 1mb zst file only contains a 0.5mb png (using 7-zip 19.0). And the other one is not a bug but an unsupported feature. Currently we only support writing 8 or 32 bit jxl files. And because the input file is 16 bit it will be "upgraded" to 32 bit. We will probably add support for `JXL_TYPE_UINT16` in the future but I don't know when that will happen.
2021-05-19 05:32:35
I can reproduce your assert issue. I don't know what is causing this though. It does seem to be related to the bit depth. Doing a convert with `logo:` (8-bit) does not reproduce the problem. Can your produce the issue the cjxl if you force it to use 32-bit instead of 16-bit? I suspect that this is a problem in the encoder.
2021-05-19 05:36:28
Do you also get an assert error when you do -q 100 (lossless)? Or is -q 99 lossless?
2021-05-19 05:51:55
Could you open up an issue on GitHub <@456226577798135808> ? This will probably take a lot more time to investigate why there is a difference between `cjxl` and ImageMagick.
_wb_
2021-05-19 05:52:12
There are some weird things in how jxl deals with 32-bit
2021-05-19 05:52:22
It can do lossless 32-bit float
Dirk
2021-05-19 05:53:00
And it also looks like we have a problem with 32-bit alpha because it looks like the alpha channel is a half float then? There is no 32-bit alpha support <@!794205442175402004> ?
_wb_
2021-05-19 05:53:26
There is
2021-05-19 05:53:37
Internally everything is a 32-bit float
Dirk
2021-05-19 05:53:45
``` switch (info->alpha_bits) { case 0: break; case 32: case 16: enc->metadata.m.SetAlphaBits(16); break;```
_wb_
2021-05-19 05:54:26
Hm, is that in the api?
Dirk
2021-05-19 05:54:33
`JxlEncoderSetBasicInfo`
_wb_
2021-05-19 05:55:14
That doesn't seem right
Dirk
2021-05-19 05:55:16
Probably not causing the problem here because this `temp.png` file has no alpha.
_wb_
2021-05-19 05:55:56
Still
2021-05-19 05:56:57
<@768090355546587137> can you take a look at the alpha encode api? Looks like it doesn't support 32-bit alpha
2021-05-19 05:58:53
But what causes that assert is attempting to do XYB and lossless float at the same time, iirc
2021-05-19 05:59:22
When doing lossless float, it shouldn't do any color conversion because that is not going to be lossless
2021-05-19 06:00:14
Might be some logic in cjxl that needs to migrate to the encode api, or something
diskorduser
2021-05-19 07:10:14
It looks like jxl gimp plugin doesn't support exporting 32 bit jxl.
Petr
2021-05-19 07:19:18
Don't you have "forbidden" characters in the path? https://gitlab.com/wg1/jpeg-xl/-/issues/184
lvandeve
_wb_ <@768090355546587137> can you take a look at the alpha encode api? Looks like it doesn't support 32-bit alpha
2021-05-19 11:33:28
This could be reported as a bug?
diskorduser
2021-05-19 06:21:23
I think this
2021-05-19 06:22:07
Intent
2021-05-19 06:27:20
probably a gwenview bug. those png display fine on photoshop.
Deleted User
2021-05-19 06:37:09
Or maybe something bitdepth-related? It doesn't matter in VarDCT, but it's crucial in Modular.
diskorduser
2021-05-19 06:50:03
both are 8 bit pngs
Dirk
2021-05-20 01:37:56
The next version of ImageMagick will support reading and writing 16-bit jxl images. This can be used as a work around for the assert that you had with the "32-bit" `temp.png` file <@456226577798135808>. I think we need to wait for the jpeg-xl team for proper 32 bit support.
2021-05-20 02:13:06
This also "solves" https://github.com/ImageMagick/ImageMagick/issues/3699.
fab
2021-05-20 02:24:36
https://www.reshade.net/
2021-05-20 02:24:48
Do not know if is original reshade this
2021-05-20 02:25:04
it claims to be really free
spider-mario
2021-05-20 02:28:20
FYI `convert temp.png temp.icc` can also be used for extracting ICC profiles
diskorduser
fab https://www.reshade.net/
2021-05-21 05:30:51
You can get better results with esrgan or with topaz ai
190n
2021-05-21 10:33:11
this came up briefly in another server... jxl's additional (beyond color/alpha) channels could be used for steganography no?
2021-05-21 10:33:57
either hiding arbitrary data encoded into the channel values, or having another image there encoded with jxl. like if channels 5/6/7 produced an image when interpreted as r/g/b.
_wb_
2021-05-21 10:53:48
Sure
2021-05-21 10:55:34
Can hide extra images or whatever in any codec if you want. JPEG has markers for arbitrary stuff, PNG can add arbitrary chunks, etc
Pieter
2021-05-21 10:58:53
Or just concatenate to the file.
_wb_
2021-05-21 11:01:29
That works too
veluca
2021-05-21 11:02:30
there's a lot more subtle ways to do steganography by the way πŸ˜›
190n
2021-05-22 12:53:09
if you're decoding to a format that only supports the standard color channels i assume djxl would just ignore any other channels
improver
2021-05-22 01:14:16
iirc one can specify whether extra channel can be ignored or must be processed
_wb_
2021-05-22 05:57:50
Some extra channels have render impact, like alpha and spot colors
2021-05-22 05:58:14
Others don't, like selection masks, depth, temperature
2021-05-22 06:04:59
For types of extra channels that we now don't know yet, we have 1) defined generic channel types "unknown but optional, feel free to ignore" and "unknown and non-optional, don't just ignore this", and 2) also channels can optionally have arbitrary channel names, which can be used to describe the channel semantics using some convention
fab
2021-05-22 01:28:56
https://distill.pub/
diskorduser
2021-05-22 01:47:03
What's that fabian
fab
2021-05-22 02:14:58
it was in video discord av1
_wb_
2021-05-23 06:07:34
The viewer doesn't do animation at all, we need to fix that I guess
2021-05-23 06:08:24
Icos4D tests for a bug that was only very recently fixed
2021-05-23 06:09:18
I wonder what's up with the grayscale one...
BlueSwordM
2021-05-23 06:16:52
Can you link to all the files?
_wb_
2021-05-23 06:24:38
Could be it doesn't handle grayscale color management or something
2021-05-23 08:42:29
No, ISOBMFF does not itself support cropping/layering/rotation etc
2021-05-23 08:42:40
HEIF supports that
2021-05-23 08:43:03
JXL is not HEIF based, so you cannot crop at the container level
2021-05-23 08:43:51
(you can crop etc at the bitstream level though, but that requires modifying the codestream, harder to do for external applications)
2021-05-23 08:46:12
ISOBMFF is a generic box container format that defines a few boxes like `ftyp`
2021-05-23 08:47:22
JXL and JPEG 2000 extend ISOBMFF by defining new boxes to contain j2k/jxl codestream payloads
2021-05-23 08:48:14
HEIF extends ISOBMFF by defining boxes for cropping, grids, rotation, layers, etc
2021-05-23 08:48:37
Yes, jbrd, jxlc, jxlp, etc
2021-05-23 08:49:08
If you use the HEIF-specific boxes, theoretically Nokia could sue you
2021-05-23 08:50:38
I personally don't think their patents are valid, I would argue prior art: image editors have containers like XCF or PSD that can do layers, cropping etc for decades, so I don't see much novelty in HEIF.
2021-05-23 08:51:02
But IANAL and afaik their patents have not yet been tested in court.
veluca
2021-05-23 08:51:21
but! JXL doesn't need nor use those boxes for anything
2021-05-23 08:51:36
and I believe exiv2 wouldn't either
_wb_
2021-05-23 08:52:24
JXL is not based on HEIF so it doesn't have those boxes, decoders should ignore them if anyone adds them for some bizarre reason
2021-05-23 08:52:47
Exiv2 may or may not want to look at those boxes in the case of heic/avif
veluca
2021-05-23 08:53:53
anyway, ISOBMFF is too old to be still covered by patents (if it ever was) AFAIU, having been published in 2000
_wb_
2021-05-23 08:53:56
If they want to give information on how many images there are in a sequence, how many layers, orientation/crop info, etc, then they will have to look at those boxes
2021-05-23 08:54:19
Yes, ISOBMFF itself is certainly OK
2021-05-23 08:54:53
The HEIF extension of it could be risky until 2035
2021-05-23 01:35:00
What issue is this?
veluca
2021-05-23 01:42:17
it's pretty amazing how patents cause problems to things that are entirely not covered by the actual subject of the patent
improver
2021-05-23 01:43:08
nobody likes lawyers
_wb_
2021-05-23 02:05:47
Well I can understand how you might want to avoid parsing heif even if you're only going to touch the boxes that are from isobmff and not from the heif spec...
2021-05-23 02:07:03
But jp2 (the original kind, not the part 16 "j2k in heif" one, which is also a thing for some reason) and jxl have nothing to do with heif.
2021-05-23 02:14:49
Well at least for HEIC, adoption does seem to be limited to the Apple ecosystem, but I think that's mostly because of the heavily patent-encumbered h265 payload, not so much because the lightly and questionably patent-encumbered container.
2021-05-23 02:20:37
For AVIF, I have been saying since 2017 that I don't think it's a good idea to use the heif container for a format that aims to be royalty-free, but my concerns were typically ignored or shrugged off. There's a widespread "folklore" wisdom that "containers cannot be patented" so everything "should be fine". This may be true, but it still has to be tested in court, and not everyone can afford to take that risk, since how the system works is that when they sue for bogus patent infringement, _possibly_ you can get the patent invalidated and 'win', but _certainly_ you're going to have to pay a lot of money to lawyers.
fab
2021-05-23 02:22:55
can you send 100e3c7e jpeg xl for windows?
2021-05-23 02:22:58
send it
2021-05-23 02:23:15
i new to do -d 4.56 -s 9 new heuristics
2021-05-23 02:23:50
cjxl only i need
_wb_
2021-05-23 02:26:03
That low quality? Is that even doing VarDCT?
2021-05-23 02:26:16
If it's modular, new heuristics will not affect it
fab
2021-05-23 02:27:30
ah i meant -d
diskorduser
2021-05-23 02:28:36
Still d 4 is lower quality..
fab
2021-05-23 02:29:04
the photo is good quality is 16 mpx
2021-05-23 02:30:11
i need to look as few a possible on all screens
diskorduser
2021-05-23 02:30:47
Just stick to d1 to d2? No?
BlueSwordM
2021-05-23 03:03:14
The 1st file can be decoded just fine here strangely enough.
_wb_
2021-05-23 03:07:20
the bug should be fixed in latest github libjxl
diskorduser
2021-05-23 05:50:20
Help. Compiling jxl in termux
veluca
2021-05-23 06:05:18
pass `-DJPEGXL_ENABLE_SJPEG=Off` πŸ™‚
diskorduser
2021-05-23 06:10:05
Thanks veluca
2021-05-23 06:10:36
Why does my phone compiles faster than my laptop lol
veluca
2021-05-23 06:14:56
same for me really (well, depends on the laptop) xD perhaps some things are easier on the phone...
2021-05-23 06:15:10
like, less optimization is done, or register allocation is easier
_wb_
2021-05-23 06:18:21
Does register allocation become harder or easier if more registers are available?
diskorduser
2021-05-23 06:28:29
Compiling with March armv8.2-a mtune cortex-a76. It should do optimizations. Right?
190n
2021-05-23 06:31:11
it should do some but maybe more if you have -O3 in there
veluca
2021-05-23 06:36:23
maybe not as many optimizations are implemented for arm as for x86 πŸ™‚
2021-05-23 06:36:50
and as for register allocation - it's certainly easier if you have an orthogonal ISA I think
2021-05-23 06:37:03
and not things like "shifts counts need to be in the cl register"
Pieter
_wb_ Does register allocation become harder or easier if more registers are available?
2021-05-23 06:56:13
do you mean in terms of absolute performance compared to fewer registers (more is obviously better) or in terms of proximity to optimal?
2021-05-23 06:57:12
register allocation in my limited (and several years old) experience is often the one reason why compiled code may be slower than handwritten assembly (special instructions/vectorization being another of course)
2021-05-23 06:58:04
at least a few years ago gcc would emit far more spills to memory than needed in some cases
_wb_
2021-05-23 06:58:43
more and less constrained registers are of course better, but does the problem of finding the best possible allocation become easier or harder with more registers?
2021-05-23 07:00:59
it's an NP-hard problem, right?
2021-05-23 07:01:18
yeah you can reduce graph coloring to it
veluca
2021-05-23 07:04:58
I think most things compilers do are NP-hard problems πŸ˜„ some are even Turing-complete, of course...
Pieter
2021-05-23 08:03:48
not that it matters, they don't need to find the optimal solution
2021-05-23 08:03:57
just an acceptable one
_wb_
2021-05-23 08:10:26
sure, optimal is not really needed - getting close to optimal is nice though
veluca
2021-05-23 08:20:43
I wonder how many problems there are APX-hard --- I think graph coloring is...
diskorduser
2021-05-25 02:16:20
πŸ€”
Scope
2021-05-25 09:37:06
https://www.theverge.com/2021/5/24/22451607/google-photos-high-quality-storage-saver-tool-free-space-blurry-screenshots
Scientia
2021-05-25 01:45:24
users wouldn't see this
2021-05-25 01:45:38
20% = about what lossless jpeg recompression saves
2021-05-25 01:46:00
so they could use it and decompress a jpeg to the user transparently
2021-05-25 01:46:07
without much effort
veluca
2021-05-25 01:46:55
by the way - how much interest would there be in a plugin for nginx that transcodes your JPEGs on the fly to JXL? πŸ˜„
Kleis Auke
veluca by the way - how much interest would there be in a plugin for nginx that transcodes your JPEGs on the fly to JXL? πŸ˜„
2021-05-25 01:59:39
I'm interested. It reminds me of my pet project (<https://github.com/weserv/images>), which should soon support JPEG XL load/save.
veluca
2021-05-25 02:01:16
I *almost* had it working during the weekend but then I found out our API has some problems for it
paperboyo
veluca by the way - how much interest would there be in a plugin for nginx that transcodes your JPEGs on the fly to JXL? πŸ˜„
2021-05-25 02:31:36
We are using http://nginx.org/en/docs/http/ngx_http_image_filter_module.html. It uses LibGD, which recently got AVIF. But it doesn’t understand colour management πŸ€¦β€β™‚οΈ (https://github.com/libgd/libgd/issues/136).
veluca
2021-05-25 02:33:18
to transcode a JPEG you first need to parse it πŸ˜„
paperboyo We are using http://nginx.org/en/docs/http/ngx_http_image_filter_module.html. It uses LibGD, which recently got AVIF. But it doesn’t understand colour management πŸ€¦β€β™‚οΈ (https://github.com/libgd/libgd/issues/136).
2021-05-25 02:33:34
this would be for lossless recompression though
lithium
paperboyo We are using http://nginx.org/en/docs/http/ngx_http_image_filter_module.html. It uses LibGD, which recently got AVIF. But it doesn’t understand colour management πŸ€¦β€β™‚οΈ (https://github.com/libgd/libgd/issues/136).
2021-05-25 02:43:14
If direct use libavif(--cicp 2/2/6), icc profile can keep on compressed avif image. ```https://github.com/AOMediaCodec/libavif```
Scope
2021-05-25 02:45:53
JXL to Jpeg transcoding can also be useful for browsers that don't support JXL, for cases when high quality source images is no longer exist or when Jpegs are uploaded by users, to save space as Lepton does: https://dropbox.tech/infrastructure/lepton-image-compression-saving-22-losslessly-from-images-at-15mbs
veluca
2021-05-25 02:48:17
yeah but this would be in the other direction πŸ™‚
2021-05-25 02:48:40
for the situation where you have a website and you don't want to think too much about it πŸ˜›
2021-05-25 02:48:54
IIRC less dense but faster
2021-05-25 02:49:17
and probably a few more features like progression, since AFAIU Lepton is intended to be a storage format only
_wb_
2021-05-25 02:51:42
lepton is anti-progressive, it predicts DC from AC...
lithium
2021-05-25 02:57:46
use paq8px πŸ™‚
diskorduser
2021-05-26 05:01:59
Is it possible to build a static jxl binary? If yes, how?
2021-05-26 05:02:11
On Linux
veluca
2021-05-26 05:02:14
there's a flag in cmake somewhere
2021-05-26 05:04:51
it might be the default cmake flag even
Jim
2021-05-26 05:07:32
Not default on Windows. Maybe it is on Linux?
diskorduser
2021-05-26 05:08:49
this?
veluca
2021-05-26 05:15:18
ah, probably
2021-05-26 05:15:54
by "default cmake flag" I meant that maybe there is a flag in CMake that makes everything static, but apparently not πŸ˜„ or at least it's not the one we use
diskorduser
2021-05-26 05:23:28
[` 79%] Built target jxl_enc-obj [ 79%] Linking CXX static library libjxl.a [ 79%] Built target jxl-static [ 80%] Building CXX object examples/CMakeFiles/encode_oneshot.dir/encode_oneshot.cc.o [ 80%] Building CXX object tools/box/CMakeFiles/box.dir/box.cc.o [ 80%] Building C object examples/CMakeFiles/jxlinfo.dir/jxlinfo.c.o [ 80%] Building CXX object lib/CMakeFiles/jxl_extras-static.dir/extras/codec.cc.o [ 80%] Linking CXX executable jxlinfo /usr/bin/ld: attempted static link of dynamic object `/usr/lib/libtcmalloc_minimal.so' collect2: error: ld returned 1 exit status make[2]: *** [examples/CMakeFiles/jxlinfo.dir/build.make:104: examples/jxlinfo] Error 1 make[1]: *** [CMakeFiles/Makefile2:939: examples/CMakeFiles/jxlinfo.dir/all] Error 2 make[1]: *** Waiting for unfinished jobs.... [ 81%] Building CXX object lib/CMakeFiles/jxl_extras-static.dir/extras/codec_jpg.cc.o [ 81%] Linking CXX executable encode_oneshot /usr/bin/ld: attempted static link of dynamic object `/usr/lib/libtcmalloc_minimal.so' collect2: error: ld returned 1 exit status make[2]: *** [examples/CMakeFiles/encode_oneshot.dir/build.make:105: examples/encode_oneshot] Error 1 make[1]: *** [CMakeFiles/Makefile2:908: examples/CMakeFiles/encode_oneshot.dir/all] Error 2`
veluca
2021-05-26 05:24:56
ahhhh... `-DJPEGXL_ENABLE_TCMALLOC=Off`
diskorduser
2021-05-26 05:24:58
Just testing that flag
veluca
2021-05-26 05:24:58
I think
diskorduser
2021-05-26 05:28:38
`[ 93%] Linking CXX executable djxl /usr/bin/ld: attempted static link of dynamic object `/usr/lib/libgif.so' collect2: error: ld returned 1 exit status make[2]: *** [tools/CMakeFiles/djxl.dir/build.make:136: tools/djxl] Error 1 make[1]: *** [CMakeFiles/Makefile2:1044: tools/CMakeFiles/djxl.dir/all] Error 2 make[1]: *** Waiting for unfinished jobs.... [100%] Linking CXX executable benchmark_xl /usr/bin/ld: attempted static link of dynamic object `/usr/lib/libjpeg.so' collect2: error: ld returned 1 exit status`
2021-05-26 05:28:50
I am doing everything wrong ha ha
_wb_
2021-05-26 05:30:07
Why is djxl linking libgif? I don't think we do gif output... πŸ€”
Scope
2021-05-26 05:30:51
For decoding?
_wb_
2021-05-26 05:31:25
cjxl needs to decode gif as an input, but djxl shouldn't need it
Scope
2021-05-26 05:38:09
Have the encoder/decoder and benchmark already been separated from the shared unnecessary code?
_wb_
2021-05-26 05:40:26
In the library, mostly yes, I think
2021-05-26 05:41:04
In the tools probably not really