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

Me
2025-01-23 06:20:06
and complexity for what goes over the radio is a really big enemy to reliability/safety/mission success
AccessViolation_
2025-01-23 06:20:21
my only experience with creating a progressive *lossless* file was that it became much larger, but I don't know how it works for modular lossy
2025-01-23 06:20:34
And also that was a long time ago
Me
2025-01-23 06:20:50
does the API let me micromanage layers/compression strategy?
2025-01-23 06:21:33
because if i could do 1:64 with modular with squeeze and then 1:8 modular with squeeze and then varDCT, that sounds like what i want
2025-01-23 06:21:46
Ideally the 1:8 would benefit in some way from the bytes that came before as part of the 1:64, but that's optional
2025-01-23 06:24:00
it looks like it may.
jonnyawsom3
2025-01-23 06:45:18
I just had a simple idea... What if we used modular lossy instead? It should have all the progressiveness of DC 1 but for the entire image with different artifacts to VarDCT
2025-01-23 06:47:47
Something like `cjxl -d 1.5 -m 1 -j 0 -p -g 0 --group_order 1 -x strip=all bluemarb.jpg Test.jxl`
Traneptora
2025-01-23 07:02:49
Can we close https://github.com/libjxl/libjxl/issues/2193
2025-01-23 07:03:03
it was fixed by #2444 over a year ago
Making groups bigger did that, I imagine smaller might corrupt it too, but <@526322998521888768> could try adding `-g 0` and see what happens
2025-01-23 07:04:44
VarDCT has fixed group size, and the LF image uses the same group size as the frame
2025-01-23 07:04:58
you'd need to use an LF frame to have a different group size for it
veluca maybe we should rename that flag, the amount of people that get confused by it is a bit high
2025-01-23 07:11:26
in FFmpeg I have the option exposed as `-disable_xyb`
2025-01-23 07:11:47
er, actually `-xyb` but it defaults to 1
2025-01-23 07:12:05
I'm planning on exposing more library options to the encoder wrapper, btw
2025-01-23 07:12:17
currently I have `-effort` `-distance` `-modular` and `-xyb` exposed
2025-01-23 07:12:39
which default to `7`, `1.0`, `0`, and `1` respectively
2025-01-23 07:12:48
modular just *forces* modular
2025-01-23 07:12:51
it still sets modular for lossless
Tirr iirc `uses_original_profile` shouldn't be set to true when doing lossy
2025-01-23 07:18:59
It could be but it's usually not recommended. If you have a very strange ICC profile and you *need* the pxiel data in that space and lcms2 can't put it in that space that's your only option but otherwise I agree
jonnyawsom3
Traneptora Can we close https://github.com/libjxl/libjxl/issues/2193
2025-01-23 08:35:08
Just got home, but done. And my first issue closed with my recently gained permissions
Me
2025-01-23 10:19:44
<@853026420792360980> Hey-- all very helpful. I don't have a great understanding of JXL. Do you know if I have a modular on top of another modular subsampled at a different resolution, if encoding the second modular derives any benefit from the prior data?
2025-01-23 10:20:16
that is, if i have a /64 subsampled and then a /16 subsampled, does the /16 end up smaller than just a /16 on its own would be
2025-01-23 10:20:38
Just trying to figure out the search space of things to try
Traneptora
Me <@853026420792360980> Hey-- all very helpful. I don't have a great understanding of JXL. Do you know if I have a modular on top of another modular subsampled at a different resolution, if encoding the second modular derives any benefit from the prior data?
2025-01-23 10:21:40
are you doing lossy or lossless? if lossy your best bet is to stick to VarDCT
2025-01-23 10:23:16
if doing lossless, this won't save much as most of the entropy is in the lower-order bits
2025-01-23 10:24:03
if you have an approximation image, and then you take the difference between the original and the approximation and attempt to encode that difference losslessly, my experience has been that it's generally going to give you the same file size as if you had just encoded the original losslessly without the bells and whistles
2025-01-23 10:24:11
or not literally identical but very close
2025-01-23 10:24:49
the reason you might want to do that is to make things progressive, but if that's the case, there's a `--progressive` encode option, which enables the Squeeze Transform
2025-01-23 10:26:17
Squeeze is a wavelet-like transform (using haar wavelets) that splits one channel into two channels that are each half the width of the other one. the first channel containing effectively a downsampled version of the image, and the second channel containing the residuals that can be used to construct it
2025-01-23 10:26:37
I say width but it can be done horizontally or vertically
Me
2025-01-23 10:26:46
I'm doing lossy. I really want to get an image file that the first 1 or 2K does something useful, the next 8K makes it somewhat better, and so on
Traneptora
2025-01-23 10:27:07
Ideally that's how VarDCT works, but if you want it to be hyper progressive your best bet is probably to use a preview frame
Me
2025-01-23 10:27:18
I've been playing with -progressive-dc=2 which does really well on the first thing (first 1 or 2k does something useful, with that modular image)... but the follow on VarDCT makes the image much worse for tens of kilobyes before it gets better
Traneptora
2025-01-23 10:27:32
What distance setting are you using?
2025-01-23 10:27:43
Progressive DC is sort of what you want
Me
2025-01-23 10:27:50
https://discord.com/channels/794206087879852103/804324493420920833/1331734464522616912
2025-01-23 10:29:15
I have a couple of settings above. --progressive-dc=2 starts off better until about 6-7k in. Then when we're at 40k of dc=1, it's WAY better than 80k of dc=2, despite the additional frame at the beginning of DC=2 only being 5 kilobytes
2025-01-23 10:29:53
the application is for downlink image data from a student designed satellite. we'll get 72 kilobytes of data per pass over our school at best, and a lot of the pictures we'll take will be garbage
Traneptora
2025-01-23 10:30:27
what happens if you use lossy modular? how does that end up working?
Me
2025-01-23 10:30:30
so being able to send the first 4k of everytihng, then more incrementally, has a lot of value (instead of having to have special purpose resizing)
Traneptora
2025-01-23 10:30:32
you won't get as good ratios
2025-01-23 10:30:36
but you'll get it to be squeezed
2025-01-23 10:31:34
can you post or link bluemarb.jpg just so I can work with the same image you are?
Me
2025-01-23 10:36:20
https://lyle.org/~mlyle/bluemarb.jpg
2025-01-23 10:36:39
Yes, thank you --- So I tried -m1
2025-01-23 10:36:51
what I noticed was, I got a very usable first readout, but the image didn't improve between having 1k and having 64k of it
2025-01-23 10:37:40
I'm doing like ``` cjxl -v -v -q 85 -m 1 --lossless_jpeg=0 --container=1 --progressive --progressive_dc=2 --group_order=1 -x strip=exif,xmp,jumbf bluemarb.jpg trial.jxl dd if=trial.jxl bs=1024 count=64 | ~/jxl-oxide -o t64k.png - ```
2025-01-23 10:38:56
bluemarb.jpg is ... a way better image than we expect for many reasons, but the resolution, contrast, subject matter, is similar
2025-01-23 10:47:08
Also doing things like this to assess ``` for ((i=1; i<=760; i=i+8)); do j=`printf "%05d\n" $i` dd if=trial.jxl of=test.jxl bs=1024 count="$i" && ~/jxl-oxide test.jxl -o "out/$j.png" done ```
jonnyawsom3
Me what I noticed was, I got a very usable first readout, but the image didn't improve between having 1k and having 64k of it
2025-01-23 10:54:56
Interesting, this is 4K and 8K for me `cjxl -v -v -q 85 -m 1 -j 0 -p --group_order=1 -x strip=all bluemarb.jpg trial.jxl`
2025-01-23 10:55:17
`--progressive_dc` doesn't do anything for lossy modular
CrushedAsian255
2025-01-23 11:02:57
Use JXL-oxide —with-offsets -I to check the order of the groups
jonnyawsom3
2025-01-23 11:06:19
We're not even reaching groups, this is LfGlobal
CrushedAsian255
2025-01-23 11:07:03
Oh, that small?
Me
2025-01-23 11:18:29
8k there is pretty nice. It just bums me that progressive_dc=2 is better for really small cuts
2025-01-23 11:18:41
That's 2k
2025-01-23 11:21:13
I am going to play with getting a really downsampled modular in and then proceeding to a similar sequence to progressive_dc=1 afterwards through the API
2025-01-23 11:21:21
This here is 768 bytes
jonnyawsom3
2025-01-23 11:47:41
I suppose another thing to consider is, does getting tiny previews matter if you can't tell what's in them?
Me
2025-01-24 02:22:58
there's not too much around. There's whether the satellite in the frame is illuminated, and whether a planet is taking up a lot of the frame 😉
2025-01-24 02:23:10
Our pointing may not be too great, so we may have to rely upon luck to get the planet in frame
Traneptora
Me what I noticed was, I got a very usable first readout, but the image didn't improve between having 1k and having 64k of it
2025-01-24 02:33:15
what happens if you decode it with jxl oxide
jonnyawsom3
2025-01-24 02:33:52
That is with oxide, djxl doesn't output anything due to LQIP decoding being disabled
Traneptora
2025-01-24 02:34:02
ah okay
AccessViolation_
2025-01-24 05:06:23
should cjxl prevent you from overwriting the file it's using as input unless explicitly allowed with a flag? I can see the virtue of not needing to provide an `--overwrite` flag if you just want to change some encoder settings and then output a file of the same name again, but it's fairly easy to accidentally type `cjxl image.png image.png` and forget to change the extension, replacing the original
2025-01-24 05:11:42
Especially if happens to be your only copy and the encoding is lossy, that might be a bad mistake
Demiurge
2025-01-24 05:23:46
Yeah most tools will not overwrite an existing output file
2025-01-24 05:24:11
You need -f usually
2025-01-24 05:24:29
Might be nice
2025-01-24 05:24:52
But I have tons of complaints with how cjxl/djxl tools work
2025-01-24 05:26:10
Very janky and quirky and unique and unconventional in many ways
2025-01-24 05:26:33
Not following normal conventions and standards for command line utilities
AccessViolation_
2025-01-24 05:26:57
Even if we keep the idea to overwrite output files by default, I don't think it should overwrite the *input* files by default
Demiurge
2025-01-24 05:27:01
cjpegli is super duper buggy too
AccessViolation_ Even if we keep the idea to overwrite output files by default, I don't think it should overwrite the *input* files by default
2025-01-24 05:27:51
Yeah that's a whole new level of weird
2025-01-24 05:28:38
Almost any other program will complain if you try that and require very different command syntax to overwrite input file
2025-01-24 05:29:23
jpegtran will do it
Me
2025-01-24 06:53:41
i've never seen a help command take -v before 😉
Demiurge
2025-01-24 07:02:09
That is another cherry on top to add to how ridiculous and weird the tools are
jonnyawsom3
Me i've never seen a help command take -v before 😉
2025-01-24 07:06:33
Just wait until you try `cjxl -h -v -v -v -v -v -v`
spider-mario
2025-01-24 07:43:08
for a long time, gcc would happily overwrite the input if you wrote `gcc foo.c -o foo.c`
2025-01-24 07:43:13
but it seems they’ve finally changed it
2025-01-24 07:43:29
```console gcc.exe: fatal error: input file 'foo.c' is the same as output file compilation terminated. ```
2025-01-24 07:43:47
oops, clang still does it
Me
2025-01-24 07:43:59
I have bad memories of having done that
spider-mario
2025-01-24 07:44:05
```console $ file foo.c foo.c: PE32+ executable for MS Windows 5.02 (console), x86-64, 19 sections ```
Me
2025-01-24 07:44:28
Early on in my computing journey, I wrote an disk duplicator program in assembly, and on my third test overwrote the source
2025-01-24 07:44:46
Which is another fun way to fail
spider-mario
2025-01-24 07:46:28
I once wrote a find/replace program in Delphi, but because of the design of Delphi’s folder selection dialog, I accidentally picked the directory one level above the test directory I had prepared, which was my desktop with most of my files in it
2025-01-24 07:46:41
and my program was still buggy and would only write the first line of each file
jonnyawsom3
2025-01-24 07:50:45
I remember I forgot to add a dash in a batch script I wrote, so it opened around 1500+ instances of the Microsoft Photos app, and I had Task Manager set to not be on top because of earlier stuff... Took around 10 minutes of clicking to close them all
AccessViolation_
2025-01-24 09:20:21
You all were playing with fire, I barely trust myself with the `rm` command
spider-mario
2025-01-24 09:28:48
I thought I was safe with my test directory
2025-01-24 09:28:56
turns out, you really need to double-click it, not just click it
2025-01-24 09:29:14
otherwise the selection remains on the previous directory
2025-01-24 09:30:35
(with the folder selection box from either Delphi 7 or Delphi 2006, don’t remember for sure)
AccessViolation_
2025-01-24 09:36:00
I should add a check to my programs so they can't do IO outside of their working directory
spider-mario
2025-01-24 09:38:30
2007 was another era, for sure
2025-01-24 09:39:34
(can’t find the find/replace program or its code – it might have been lost to the incident)
2025-01-24 09:39:52
(maybe that’s for the best)
2025-01-24 09:41:21
oh, never mind, I found a binary
2025-01-24 09:44:33
yup, exactly as I remember it: a single click doesn’t change the selection, only a double click does
2025-01-24 09:44:56
also, by clicking “OK”, I ran the buggy program on that folder and thereby destroyed the files in it
Demiurge
AccessViolation_ I should add a check to my programs so they can't do IO outside of their working directory
2025-01-24 09:56:04
It's called unveil
monad
Me i've never seen a help command take -v before 😉
2025-01-24 11:33:32
Short help and long help come up elsewhere, but the c/djxl granularity is certainly next-level.
AccessViolation_ You all were playing with fire, I barely trust myself with the `rm` command
2025-01-24 11:34:55
I deleted /usr/bin once because of a rogue space
Demiurge
monad Short help and long help come up elsewhere, but the c/djxl granularity is certainly next-level.
2025-01-25 12:03:23
I don't like this excessive level of granularity at all
_wb_
2025-01-25 08:00:45
Maybe it would be better to do it the ffmpeg or git way, with help screens per topic. The full list of every cjxl option is inconveniently long. The goal of multiple levels was to put the most needed options in easier reach, but I don't think it's very convenient either.
A homosapien
2025-01-25 08:16:31
So it would kinda be like `cjxl vardct --help` or `cjxl -h modular`
Tirr
2025-01-25 08:19:54
`cjxl -h modular` would be ffmpeg style
Demiurge
2025-01-25 09:28:20
I don't like that either
2025-01-25 09:28:39
Just have a short help and long help
2025-01-25 09:29:14
Anything else is just excessive. cjxl is not so complex that it needs more than that.
2025-01-25 09:30:14
The long help can have options grouped into the 4 existing categories
2025-01-25 09:30:26
The short help can be a very basic summary
2025-01-25 09:30:54
It would be nice if there was a single-letter form of each option
2025-01-25 09:31:31
The argument parser is not smart enough to recognize multiple flags in 1 argument like most standard utilities
2025-01-25 09:32:47
Isn't there a good conventional posix-style argument parser helper library to assist with this?
2025-01-25 09:34:59
getopt is the standard, there are freely licensed portable versions available
2025-01-25 09:35:23
And if you prefer something more sophisticated than getopt I'm sure it exists
2025-01-25 09:35:51
There's no reason for it to be so quirky and weird like it is currently
2025-01-25 09:37:19
But the biggest issue with cjxl and co is... the code and extra dependencies need to be separate from the rest of the library, so people who don't need cjxl/djxl and only need the library don't need to pull in all these extra dependencies and code
2025-01-25 09:38:58
Also cjpegli always falsely says d1.0 no matter what you set the quality to. And --xyb still isn't 444
2025-01-25 09:41:00
The tool code is much messier and dependency heavy compared to the library code and really needs to be more separate...
RaveSteel
2025-01-25 11:37:18
Is it intentional that noise synthesis does not work at e1 lossless? I haven't tested at which point it actually kicks in
CrushedAsian255
2025-01-25 11:48:56
does noise synthesis ever work with lossless?
RaveSteel
2025-01-26 12:00:46
It worked at e7
CrushedAsian255
2025-01-26 12:45:02
Wouldn’t it make it no longer lossless?
2025-01-26 12:45:17
Or do you mean specifying adding extra noise on top of the lossless image?
RaveSteel
2025-01-26 12:47:26
Well, it would be lossless if the noise were to be added as a layer upon encoding, which sadly doesn't happen. I wanted to see if it did, but found that noise would not be added if encoding with -d 0 and -e 1
AccessViolation_
2025-01-26 01:01:38
Afaik the point of noise synthesis is that the noise isn't stored in the image itself but synthesized by the decoder. So there is no reason why the original data couldn't be lossless, the pixel data doesn't change
2025-01-26 01:01:58
As in it's still there in the image, it does change in the final rendering
RaveSteel
2025-01-26 01:02:11
Except there is currently no way to remove the noise, as far as I know
AccessViolation_
2025-01-26 01:03:24
If you manually altered the JXL to make it so it no longer specify that it should do noise synthesis you could probably get the original image data back
RaveSteel Except there is currently no way to remove the noise, as far as I know
2025-01-26 01:04:04
Ah right, yeah
RaveSteel
2025-01-26 01:04:29
Optimally, the noise would be put into its own layer, if that is viable
2025-01-26 01:04:53
I tested exporting an image with 4 layers in Krita, the noise gets applied to all layers
AccessViolation_
2025-01-26 01:05:09
Ahh you can't specify the layer the noise is applied to? That's kind of a shame
RaveSteel
2025-01-26 01:05:22
Maybe it is possible, but not implemented? I have no idea
AccessViolation_
2025-01-26 01:06:04
If it's a thing you could probably even use another layer as a mask for it to selectively apply it or in even in different amounts
2025-01-26 01:07:06
as in multiply the noise layer with the mask layer, and then add that layer to your image
2025-01-26 01:07:50
I think I brought this up before actually, and I seem to remember one of the devs saying it wasn't possible
RaveSteel
2025-01-26 01:10:04
Hm, that's unfortunate
2025-01-26 01:11:04
Specifying a layer the noise is applied to would be fine, while generating the noise in a new layer seems to be the best option
2025-01-26 01:11:15
Even better if the noise can be removed seamlessly
AccessViolation_
AccessViolation_ I think I brought this up before actually, and I seem to remember one of the devs saying it wasn't possible
2025-01-26 01:12:06
https://discord.com/channels/794206087879852103/803645746661425173/864474180657741842 nvm I guess
2025-01-26 01:14:16
I do actually still think I was told noise masking wasn't possible? But I don't remember which specific question I asked
2025-01-26 01:16:28
Ahh found it
2025-01-26 01:16:30
https://discord.com/channels/794206087879852103/794206170445119489/1291097159889846334
RaveSteel
2025-01-26 01:18:33
Hm, alright. I assume it's not really simple to implement?
2025-01-26 01:21:53
I wouldn't know, I am not a programmer
AccessViolation_
2025-01-26 01:25:52
I assume the way it's implemented (the noise level being local-image-brightness modulated and all) reflects now cameras work, so I think an encoder would have to do relatively little to make the noise match the image noise. Something that's probably much harder for the encoder is denoising the source image (which removes a lot of high-frequency data making it compress better) since if you don't do that right you end up removing the wrong details or smoothing out surfaces that have slight textures, mistaking that for noise. Manually selectively applying noise is probably relatively easy. You just create your mask that defines where you want your noise to be and tell the encoder to do the rest, following the steps in Jon's message. I assume libjxl's API is expressive enough to tell it to do this but I've never looked at it so I wouldn't know
jonnyawsom3
RaveSteel Is it intentional that noise synthesis does not work at e1 lossless? I haven't tested at which point it actually kicks in
2025-01-26 09:35:45
I've brought up 'lossless noise' a few times in the past, letting you get the original back with a decoder flag from those pesky artists always adding it to everything. Unfortunately, it's only in XYB space https://discord.com/channels/794206087879852103/803574970180829194/1303410607965606060
RaveSteel
2025-01-26 12:28:11
Follow up question I forgot to ask yesterday: Is it intentional that cjxl flattens layers together?
I've brought up 'lossless noise' a few times in the past, letting you get the original back with a decoder flag from those pesky artists always adding it to everything. Unfortunately, it's only in XYB space https://discord.com/channels/794206087879852103/803574970180829194/1303410607965606060
2025-01-26 12:29:43
In the near future using noise filters in whatever software artists are using will keep being mandatory if noise is to be included in the final result. Sad, but we'll see if this changes at some point
2025-01-26 12:30:02
Maybe we'll also have more control over noise in libjxl by then
_wb_
2025-01-26 12:41:43
I guess we do need an option for djxl to disable coalescing and return individual layers.
RaveSteel
2025-01-26 12:44:35
In my case, I was reencoding a Krita exported JXL with layers losslessly, but the layers were mashed together after the encode, as displayed by jxlinfo
2025-01-26 12:44:54
So it is pretty much a lossy operation
_wb_
2025-01-26 02:59:15
oh, the jxl to jxl is applying coalescing? that's no good, at least not as a default
RaveSteel
2025-01-26 03:06:19
I was looking if I had missed an option to disable coalescing layers, but there is none
2025-01-26 03:08:24
`gradient_test_crt_layers_e9.jxl` has layers, as seen here ``` JPEG XL file format container (ISO/IEC 18181-2) JPEG XL image, 1920x1200, (possibly) lossless, 16-bit RGB+Alpha Color space: 9080-byte ICC profile, CMM type: "lcms", color space: "RGB ", rendering intent: 0 layer: full image size, name: "Background" layer: full image size, name: "Malebene 1 (eingefügt)" ``` Reencoding the image then shows ``` JPEG XL file format container (ISO/IEC 18181-2) JPEG XL image, 1920x1200, (possibly) lossless, 16-bit RGB+Alpha Color space: 9080-byte ICC profile, CMM type: "lcms", color space: "RGB ", rendering intent: 0 ``` The layers have been flattened together
2025-01-26 03:10:20
Should I open an Issue?
_wb_
2025-01-26 06:35:36
Yes please. We need a djxl option to decode without coalescing, and a cjxl option to take jxl input without coalescing (which should probably be the default).
AccessViolation_
RaveSteel `gradient_test_crt_layers_e9.jxl` has layers, as seen here ``` JPEG XL file format container (ISO/IEC 18181-2) JPEG XL image, 1920x1200, (possibly) lossless, 16-bit RGB+Alpha Color space: 9080-byte ICC profile, CMM type: "lcms", color space: "RGB ", rendering intent: 0 layer: full image size, name: "Background" layer: full image size, name: "Malebene 1 (eingefügt)" ``` Reencoding the image then shows ``` JPEG XL file format container (ISO/IEC 18181-2) JPEG XL image, 1920x1200, (possibly) lossless, 16-bit RGB+Alpha Color space: 9080-byte ICC profile, CMM type: "lcms", color space: "RGB ", rendering intent: 0 ``` The layers have been flattened together
2025-01-26 07:47:03
Ohh I was so confused about this increasing the file size significantly after increasing the effort for one of my "subtract out the repeating pattern" tests
Laserhosen
Demiurge getopt is the standard, there are freely licensed portable versions available
2025-01-26 07:56:26
Since discovering https://github.com/skeeto/optparse I've never considered using anything else for C/C++. Maybe that could replace the tools' home-made option parsing?
2025-01-26 07:56:40
Google might be funny about public domain code though...🤔
Demiurge
2025-01-26 09:18:07
I would strongly advise to stick with getopt just because it's common and standardized and less likely to have... unforeseen consequences.
2025-01-26 09:24:34
It's possible that another library is nice but getopt is pretty well known and understood
2025-01-26 09:30:39
If getopt is too simple and limiting then your command line tool is too complex...
_wb_
2025-01-26 10:51:56
Feel free to make a pull request to switch the tools to getopt.
Laserhosen
2025-01-26 11:30:51
I might try that. Being an include-only library I don't think it gets much simpler than optparse while still supporting long options. Is there a better implementation we should be using?
2025-01-26 11:33:43
That's portable and non-GPL?
CrushedAsian255
2025-01-26 11:33:55
is it MIT/BSD?
Laserhosen
2025-01-26 11:34:06
optparse is public domain
2025-01-27 07:19:04
<@794205442175402004>, before I spend any time on it, can you confirm whether code released under the Unlicence is OK to integrate into libjxl? https://github.com/skeeto/optparse?tab=Unlicense-1-ov-file#readme
_wb_
2025-01-27 07:31:12
Uh, I guess so. I guess you'll make a derived work that you license under the libjxl license (BSD), or rather according to the CLA.
Quackdoc
2025-01-27 10:15:35
unlicense has historically been problematic for inclusion on many things and is widely considered incompatible with gpl
2025-01-27 10:16:51
if libjxl wants to remain (l)GPL compatible, the answer will be no, author will need to add an MIT/BSD etc licence
Demiurge
2025-01-27 11:27:38
The best license is the MGPL https://zapatopi.net/mindguard/mgpl.html
Quackdoc if libjxl wants to remain (l)GPL compatible, the answer will be no, author will need to add an MIT/BSD etc licence
2025-01-27 11:39:59
Huh?? Unlicense is a Public Domain dedication that permanently waives all copyprivilege
2025-01-27 11:40:43
It's compatible with literally any other license
Quackdoc
Demiurge Huh?? Unlicense is a Public Domain dedication that permanently waives all copyprivilege
2025-01-27 11:41:05
unlicence is public domain which not all countries recognize
2025-01-27 11:41:29
this has caused headaches for me before when doing contract work, the OSI won't even touch public domain software now
2025-01-27 11:41:42
or rather, exclusively public domain software
Demiurge
2025-01-27 11:41:45
It doesn't prevent you from relicensing it under some other dumb license
2025-01-27 11:43:39
And if you live in a country that doesn't recognize public domain, then why would your country recognize the non existent and voluntarily-waived legal privileges of someone who isn't even a citizen of your country?
Quackdoc
2025-01-27 11:43:42
it becomes spotty territory because such software is considered "not licenced" in which case, the end user can't do so
Demiurge And if you live in a country that doesn't recognize public domain, then why would your country recognize the non existent and voluntarily-waived legal privileges of someone who isn't even a citizen of your country?
2025-01-27 11:44:35
don't ask me, but the crux of the matter is, corporations will reject it because it's effectively nuclear. you can't re-licence yourself unless you get permission to
Demiurge
2025-01-27 11:44:45
And who doesn't have those privileges in their home country, where they legally waived them all
Quackdoc
2025-01-27 11:45:34
https://web.archive.org/web/20150607123451/http://projects.opensource.org/pipermail/license-review/2012-January/000047.html
2025-01-27 11:46:02
it has caused legal issues in the past, and will likely do so in the future, therefor it gets avoided and is not considered gpl compatible
2025-01-27 11:46:57
the context which more directly relates https://groups.google.com/g/unlicense/c/G6pzAFtgrx0/m/9TCxE-je2qMJ
Demiurge
2025-01-27 11:47:15
It's not nuclear and any corporation that thinks it is, is so stupid it doesn't deserve to exist. If I waive my legal privileges in my home country, and my own home country does not think I have them any more, then German companies should not be afraid of that
2025-01-27 11:47:28
Even if Germany doesn't recognize public domain
Quackdoc
Demiurge It's not nuclear and any corporation that thinks it is, is so stupid it doesn't deserve to exist. If I waive my legal privileges in my home country, and my own home country does not think I have them any more, then German companies should not be afraid of that
2025-01-27 11:48:05
no, because fundamentally we live in a world of many countries, and anyone who thinks they know every countries laws regarding this is a fool. public domain software **has** caused issues in the past
2025-01-27 11:48:08
it's not a matter of if
2025-01-27 11:48:24
**The point is that such things have done serious harm to developers when they've not behaved as expected in court.**
2025-01-27 11:48:33
is an exact quote
Demiurge
2025-01-27 11:49:41
If my own home country recognizes I legally waived all privileges and authority over something, then why would a foreign country that I'm not even a citizen of try to defend and protect my work
2025-01-27 11:50:16
What a ridiculous argument. Any corporation that thinks like this deserves to fail
2025-01-27 11:53:41
Google might have a policy against public domain software...
2025-01-27 11:54:24
Google does deserve to fail and die for a variety of reasons but unfortunately they are one of the stewards of the libjxl project...
2025-01-27 11:55:31
Can't someone just take a PD work and relicense it under an MIT license?
Laserhosen I might try that. Being an include-only library I don't think it gets much simpler than optparse while still supporting long options. Is there a better implementation we should be using?
2025-01-28 12:02:19
If you're really thinking about this then I recommend you consider using getopt, since it's very similar to optparse, and it's the most common and most "battle-tested" method of command line option parsing.
2025-01-28 12:03:09
And it's pretty easy to find a standards compliant freely licensed getopt for every platform
2025-01-28 12:06:38
There's also getopt_long for long options...
2025-01-28 12:07:27
But personally I prefer single letter switches and parameters... less typing, more ergonomic.
2025-01-28 12:08:05
It would be nice if long options were not needed...
Quackdoc
2025-01-28 12:13:48
sure it might be stupid, but laws have never been about being sane or not
2025-01-28 12:14:29
whether it makes sense or not doesn't matter, what matter is if it is that way or not, and sadly, it is
Quackdoc https://web.archive.org/web/20150607123451/http://projects.opensource.org/pipermail/license-review/2012-January/000047.html
2025-01-28 12:16:07
this in general is a good thread to read
Demiurge
2025-01-28 12:56:46
Not really, it's more just corporate idiocy
2025-01-28 12:57:41
Corporations and government constantly compete for who's the most harmfully stupid
2025-01-28 12:58:27
There is no justifiable reason for any corporation to worry about something so idiotic
2025-01-28 12:59:23
And use that as grounds for not accepting freely given work from a foreigner
Quackdoc
2025-01-28 12:59:52
>no justifiable reason getting in legal trouble isn't a justifable reason?
Demiurge
2025-01-28 01:01:11
How could you get in legal trouble for using a work that was freely given by a foreigner who voluntarily waived all of their legal privileges over it in their own home country?
2025-01-28 01:01:50
It's a bizarre and deranged thing to worry about
Quackdoc
2025-01-28 01:01:56
again, **it has already happened**
2025-01-28 01:02:12
> > The point is that such things have done serious harm to developers when > they've not behaved as expected in court. Thus, naïvely propagating one > could be considered to be in the category of irresponsible acts that can > damage others. In general I suggest that such things be discussed as a > list of goals rather than an actual license prototype constructed by a > non-legal-professional. > > Thanks > > Bruce
Demiurge
2025-01-28 01:04:41
...How?
Quackdoc
2025-01-28 01:07:52
because law is a very complicated topic and happens not only on a per country basis, but also something that has issues on sub levels such as states in america or provinces in canada
2025-01-28 01:07:59
even rhel doesn't want to allow CC0 anymore
2025-01-28 01:08:21
https://lists.fedoraproject.org/archives/list/legal@lists.fedoraproject.org/thread/RRYM3CLYJYW64VSQIXY6IF3TCDZGS6LM/
2025-01-28 01:08:48
ahh this one might specifically be a fedora one, hard to tell with them
2025-01-28 01:09:10
but yes, in general, public domain only projects are no bueno
Demiurge
2025-01-28 01:09:46
Are you claiming that in the past, someone released something under public domain waiver, and some German tried to use it, and the foreigner went to a German court and was awarded damages for infringing on a work they already waived their control of?
Quackdoc
2025-01-28 01:12:39
german? no. I don't know who, nor do I care who, bruce perens, has worked on a lot of legal stuff, from HP, source labs, etc. He is well versed in the many instantiates of the various laws. and has first hand knowledge of *someone* having the issue (the threads in question is now lost I believe)
2025-01-28 01:13:30
but thats the thing, *everyone* dives in head first, this is also an issue with ffmpeg's GPL builds. They are only gpl valid in *some* countries that don't practice patent law like I believe france?
2025-01-28 01:14:02
but many projects need to consider a great many countries when it comes to legality. which is why, public domain software is not considered GPL
Demiurge
2025-01-28 01:14:03
And the German court awarded damages for infringing on privileges that are not even recognized in the foreigner's home country? I'm using Germany as an example because that's the only country I have heard of that supposedly doesn't recognize "public domain"
2025-01-28 01:15:44
It seems like an absolutely deranged thing to be worried about or to use as justification for not accepting free and unencumbered work
Quackdoc
2025-01-28 01:17:32
in the end, it will cause friction, when the easy alternative is to simply use something with an actual licence like MIT or BSD
Demiurge
2025-01-28 01:20:13
Every country has their own copyright laws and certain trade agreements stipulate that member nations recognize and protect the copyrighted works from other member nations as part of the crooked trade agreement. But if a work is not copyrighted in its country of origin then there is no reason why a foreign country would recognize and protect the copyright of a foreign country that doesn't exist in that country.
2025-01-28 01:22:11
So if an American waives all their privileges with a PD waiver, there is no copyright. Their government doesn't recognize it and the German copyright law doesn't apply here or mean anything.
2025-01-28 01:22:42
And Germans should be able to use it too because it wasn't made in Germany.
2025-01-28 01:23:12
They would just have to relicense any of their German-made changes under a German-compatible license
Quackdoc
2025-01-28 01:23:36
I mean, you can say whatever you want, it won't change anything, public domain software has given companies issues in the past, and because of this, lots of people will avoid it, this can, and will cause issues with libjxl adoption if it becomes part of libjxl in a way that is not easy to disable
2025-01-28 01:24:09
I don't agree with this, but it's the shitty thing we have to deal with
Demiurge
Quackdoc I mean, you can say whatever you want, it won't change anything, public domain software has given companies issues in the past, and because of this, lots of people will avoid it, this can, and will cause issues with libjxl adoption if it becomes part of libjxl in a way that is not easy to disable
2025-01-28 01:25:04
Well, first of all, the cjxl/djxl tools really ought to be carved out into a separate build system and source tree
Quackdoc
2025-01-28 01:26:25
I agree, that would solve that issue really quickly
Demiurge
2025-01-28 01:26:25
The libjxl code does not need to be mixed up with the dependency-ridden cjxl/djxl utilities
spider-mario
Demiurge And if you live in a country that doesn't recognize public domain, then why would your country recognize the non existent and voluntarily-waived legal privileges of someone who isn't even a citizen of your country?
2025-01-28 08:07:25
I imagine that https://en.wikipedia.org/wiki/Berne_Convention probably has something to do with it
2025-01-28 08:08:19
> Foreign authors are given the same rights and privileges to copyrighted material as domestic authors in any country that ratified the convention.
Demiurge Every country has their own copyright laws and certain trade agreements stipulate that member nations recognize and protect the copyrighted works from other member nations as part of the crooked trade agreement. But if a work is not copyrighted in its country of origin then there is no reason why a foreign country would recognize and protect the copyright of a foreign country that doesn't exist in that country.
2025-01-28 08:12:49
if the phrasing is that authoring the work anywhere gives you copyright in each ratifying country then it doesn't necessarily follow that renouncing it in one country applies to all
2025-01-28 08:15:39
anyway, CC0 is probably safer https://creativecommons.org/publicdomain/zero/1.0/legalcode.en
Quackdoc
spider-mario anyway, CC0 is probably safer https://creativecommons.org/publicdomain/zero/1.0/legalcode.en
2025-01-28 08:24:45
fedora doesn't allow cc0 for code any more, just "content" (pictures and stuff) https://docs.fedoraproject.org/en-US/legal/allowed-licenses/ so legally, maybe safer? but adoption wise, for sure worse
AccessViolation_
2025-01-28 10:17:30
I had an idea to simplify patch detection for things like emulator screenshots and tiled pixel art. How hard would it be to implement something like a `--patch_grid_tile_size` that takes a height,width (or just a size for a power-of-two square if that's easier), and a `--patch_grid_offset`, which tells the encoder to do patch detection just on the whole tiles in the grid?
lonjil
Quackdoc https://lists.fedoraproject.org/archives/list/legal@lists.fedoraproject.org/thread/RRYM3CLYJYW64VSQIXY6IF3TCDZGS6LM/
2025-01-28 12:27:54
So they don't allow PD because that's not a thing in most countries, but right here in this thread we see RHEL assuming that US law applies everywhere: they assume that any license without any explicit statements about parents, implicitly has a patent grant. This is true in the US (there's a court case setting precedent). But AFAIK it's not true anywhere else. They say that any license that doesn't grant patents isn't a FOSS license, but that would mean that e.g. the MIT license isn't a FOSS license as soon as you leave the US.
Demiurge
2025-01-28 12:52:02
Red Hat is known for being a dumb corporate entity run by lawyers
2025-01-28 12:52:27
Most copyright licenses are patent agnostic
2025-01-28 12:52:48
A patent license can always be granted in a separate document if required
Quackdoc
lonjil So they don't allow PD because that's not a thing in most countries, but right here in this thread we see RHEL assuming that US law applies everywhere: they assume that any license without any explicit statements about parents, implicitly has a patent grant. This is true in the US (there's a court case setting precedent). But AFAIK it's not true anywhere else. They say that any license that doesn't grant patents isn't a FOSS license, but that would mean that e.g. the MIT license isn't a FOSS license as soon as you leave the US.
2025-01-28 12:52:54
I disagree with this, MIT and BSD etc implicitly grant a patent licence, as if they didn't it would just be an outright lie
Demiurge
2025-01-28 12:53:01
Usually in a file called `PATENTS`
Quackdoc
2025-01-28 12:53:52
dealing with software without restrictions strongly implies the right to use/distribute etc the technology in said software
lonjil
Quackdoc I disagree with this, MIT and BSD etc implicitly grant a patent licence, as if they didn't it would just be an outright lie
2025-01-28 12:54:27
That has only been tested under US law. Copyright licenses can't do all sorts of non-copyright stuff, and shouldn't be assumed to unless proven otherwise.
Quackdoc
2025-01-28 12:54:37
I would argue that if you do not have a right to grant patent usage, using the MIT/BSD licence is just fraudulent
Demiurge
2025-01-28 12:54:40
Doesn't matter if you agree or not. All that matters is what your idiotic lawyer overlords say
Quackdoc
2025-01-28 12:55:03
thankfully, organizations that do deal with international law like the OSI largely find these safe
Demiurge
2025-01-28 12:55:15
We have given lawyers license to run the whole world
lonjil
2025-01-28 12:55:22
"strongly implies" is not good enough! A public domain grant also strongly implies that anyone should be allowed to do anything even if the actual concept doesn't exist in law, but it wasn't good enough.
Demiurge
2025-01-28 12:55:22
Because it makes us feel safe
Quackdoc
2025-01-28 12:55:27
obviously they can't deal with every single country, but they do deal with a large amount of them
lonjil "strongly implies" is not good enough! A public domain grant also strongly implies that anyone should be allowed to do anything even if the actual concept doesn't exist in law, but it wasn't good enough.
2025-01-28 12:55:34
thats not true though
2025-01-28 12:55:44
public domain grant implies public domain.
2025-01-28 12:56:41
MIT/BSD explicitly state "you can use/distribute the software without restrictions" public domain licences explicitly state "this software is public domain"
lonjil
2025-01-28 12:56:56
It's pretty obvious what someone means when they do it.
Quackdoc
2025-01-28 12:57:09
it doesn't matter because what is explicitly said
Demiurge
2025-01-28 12:57:09
We have to do whatever the lawyers say because apparently that's the rules now. Safety above freedom and common sense, that's everyone's implicit priorities.
lonjil
2025-01-28 12:57:18
And again, copyright licenses literally cannot do anything about patents!
Quackdoc
2025-01-28 12:57:39
when you explicitly say "you can use/distribute the software without restrictions" that means "you can use/distribute the software without restrictions" if you need an additional patent licence, then the statement is simply untrue
lonjil
2025-01-28 12:58:01
They have to be general contracts to be able to deal with non-copyright stuff.
Demiurge
2025-01-28 12:58:56
You're trying to use logic and common sense in a world where lawyers keep us safe
lonjil
2025-01-28 12:59:06
Though of course lately the American free software community has been more open to the idea that software licenses should be considered contracts. For a long time they always argued that they aren't contracts.
Quackdoc
lonjil And again, copyright licenses literally cannot do anything about patents!
2025-01-28 12:59:46
well, thankfully, almost every single major entity that deals with copyright and patent law in the foss world disagrees with this sentiment
lonjil
2025-01-28 12:59:56
Wrong
2025-01-28 01:00:18
I've only ever seen them cite that one America court case
2025-01-28 01:00:33
I've never seen evidence presented about law in other countries.
Quackdoc
2025-01-28 01:00:34
ok and?
lonjil I've never seen evidence presented about law in other countries.
2025-01-28 01:00:41
that doesn't matter
lonjil
2025-01-28 01:00:58
You're saying we don't need evidence regarding the law in other countries?
2025-01-28 01:01:06
We only need to care about US law?
Demiurge
2025-01-28 01:01:20
The entire world has clearly shown that we collectively care about safety more than logic and freedom and common sense, so there's no point in trying to make sense or resist, just obey the lawyers. They're in charge now.
Quackdoc
lonjil We only need to care about US law?
2025-01-28 01:01:31
no, I am saying I only need to care about what the lawyers of said country reccomends
2025-01-28 01:01:59
and pretty much every lawyer dealing with this, regardless of country, can't seem to find major issue with it, which is why international groups like the OSI give it the A-OK
lonjil
2025-01-28 01:02:05
IME, European lawyers disagree with American free software orgs all the time.
Quackdoc
2025-01-28 01:02:26
not that OSI is the only group dealing with international law, but I have yet to see any group massively disagree
lonjil
2025-01-28 01:02:46
For example, the GPL is probably equivalent to the LGPL in the EU. But do orgs like the OSI ever talk about that? Not in my experience.
Quackdoc
2025-01-28 01:03:10
how so?
lonjil
2025-01-28 01:03:31
Wdym?
Quackdoc
2025-01-28 01:03:50
how is GPL equivalent to LGPL in the EU?
_wb_
2025-01-28 01:04:10
the reference software HM for HEVC (https://github.com/listenlink/HM/tree/master) is BSD licensed
2025-01-28 01:04:22
but that doesn't mean that it's not heavily patent encumbered too
lonjil
2025-01-28 01:04:34
I don't remember the argument because it's been a few years since I read it, but I trust EU lawyers when it comes to EU law.
Quackdoc
_wb_ the reference software HM for HEVC (https://github.com/listenlink/HM/tree/master) is BSD licensed
2025-01-28 01:04:40
yes, this is one of the things I strongly disagree with, FFMPEG does this crap too
2025-01-28 01:05:08
ffmpeg's GPL builds are by definition not gpl unless you are in a country that does not respect patent licences
_wb_
2025-01-28 01:06:06
GPL v2 and BSD are copyright licenses only. GPL v3 and Apache 2 are licenses that combine a copyright license and a patent license.
2025-01-28 01:06:19
at least that's how I understand things
Demiurge
2025-01-28 01:06:25
Only US and Japan that I know of, recognize software patents
lonjil
2025-01-28 01:06:28
Another fun one I remember is how US orgs continued to insist that the GPL is not a contract, over and over and over, and when you said that in France, it is considered a contract, they just dismiss it as irrelevant.
Quackdoc
_wb_ GPL v2 and BSD are copyright licenses only. GPL v3 and Apache 2 are licenses that combine a copyright license and a patent license.
2025-01-28 01:07:38
gplv2's patent usage is a gray situation but most people I have talked with find that it adequately covers patent usage, not that it matters though because ffmpeg will still let you violate gplv3 without complaining
Demiurge
Quackdoc ffmpeg's GPL builds are by definition not gpl unless you are in a country that does not respect patent licences
2025-01-28 01:08:31
Software patents are not a thing in most of the world
Quackdoc
Demiurge Only US and Japan that I know of, recognize software patents
2025-01-28 01:08:36
Canada does, and some european countries do, I don't know them off the top of my head
lonjil
2025-01-28 01:08:47
Building FFMPEG isn't a violation no matter how fucked and conflicted the licenses are.
Quackdoc
2025-01-28 01:09:13
UK has software patents too but they do a bit weird iirc
_wb_
2025-01-28 01:09:23
I am not a lawyer but I would assume that a license that talks about copyright and distribution but does not mention the word "patent" at all, should not be considered to be a license that implicitly grants any patent rights.
Quackdoc
lonjil Building FFMPEG isn't a violation no matter how fucked and conflicted the licenses are.
2025-01-28 01:09:25
that's simply not true?
2025-01-28 01:09:36
well unless you mean for personal use
lonjil
2025-01-28 01:09:50
That's why I said building, not distributing
Demiurge
2025-01-28 01:10:00
I think the reason us lawyers say a copyright license is not a contract is the same reason clicking "I agree" to iTunes terms and conditions isn't a contract either.
Quackdoc
_wb_ I am not a lawyer but I would assume that a license that talks about copyright and distribution but does not mention the word "patent" at all, should not be considered to be a license that implicitly grants any patent rights.
2025-01-28 01:10:46
as far as I know, at least with the companies I worked with, licences that grant "usage without restrictions" imply that you can use the software without restriction, hence a patent grant
Demiurge
2025-01-28 01:10:47
You're waiving your "rights" (privileges) under copyright law
Quackdoc
2025-01-28 01:11:33
that being said, there are programs which, to them wrongfully grant said patents, which can be sticky
2025-01-28 01:12:02
that being said, from what I have heard, the penalties from that are mostly "just stop using said tech then"
Demiurge
2025-01-28 01:12:30
It's a waiver, not a contract
2025-01-28 01:13:19
And you can't implicitly bind someone else to a contract so easily without having anything in writing
_wb_
2025-01-28 01:13:22
BSD says nothing about "usage without restrictions".
Demiurge
2025-01-28 01:13:28
You can only waive your own "rights"
_wb_
2025-01-28 01:14:01
MIT says: Copyright (c) <year> <copyright holders> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software
2025-01-28 01:14:26
"to deal in" suggests distribution/selling, not using, but I'm not a native speaker
Quackdoc
2025-01-28 01:14:34
I am referring to a classification of licences
Demiurge
2025-01-28 01:14:44
Calling them rights is also a misnomer since copyright law is about protection of trade and not about rights at all. It actually is designed to stomp on your rights by definition
Quackdoc
_wb_ "to deal in" suggests distribution/selling, not using, but I'm not a native speaker
2025-01-28 01:15:14
the including part qualifies the "to deal with" part
_wb_
2025-01-28 01:15:34
ah the right to use is mentioned there
2025-01-28 01:16:17
still I don't see how it necessarily grants any patent rights
Quackdoc
2025-01-28 01:16:57
the thought process is that one would not be able to use said software without patent rights, therefor if the licence does not grant them, the licence is simply wrong
Demiurge
2025-01-28 01:17:08
Anyone receiving this software can use it "without restriction or limitation"
_wb_
2025-01-28 01:17:22
as far as copyright goes
Demiurge
2025-01-28 01:17:53
It actually is agnostic about "permissions"
2025-01-28 01:18:04
It doesn't say it's limited to copyright
_wb_
2025-01-28 01:18:19
but if I write an implementation of something company X has patents on, me giving everyone permission to use my thing does not magically also cause company X to grant patent rights to everyone
Quackdoc
2025-01-28 01:18:29
this is where it becomes a gray area, but because the licence does not explicitly limit itself to copyright, one could reasonably assume that patent licence would be granted as well which is a large part of how general stuff goes
Demiurge
2025-01-28 01:18:32
It says "Permission is hereby granted, without restrictions or limitations"
Quackdoc
_wb_ but if I write an implementation of something company X has patents on, me giving everyone permission to use my thing does not magically also cause company X to grant patent rights to everyone
2025-01-28 01:18:48
then you would simply not be in the right by licenceing it as MIT
_wb_
2025-01-28 01:19:14
why not? as far as I'm concerned everyone can use it
2025-01-28 01:19:29
but I may not be the only one you need permission from
Quackdoc
2025-01-28 01:19:53
only if they have a licence to do so, since you don't have the right to grant permissions for said patent, implying, which in this case is being done, is wrongful
2025-01-28 01:20:11
I believe one could use the BSD licence here, but not the MIT licence
2025-01-28 01:20:18
tho, I havent read BSD in a while
_wb_
2025-01-28 01:20:48
Copyright (c) the JPEG XL Project Authors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
Demiurge
2025-01-28 01:21:40
What's the point of arguing about this anyways? None of this matters. Unless you are part of the unholy priesthood of lawyers, nothing we say about common sense matters.
_wb_
2025-01-28 01:22:12
yes, lawyers will always find ways to make things more complicated than they are
Demiurge
2025-01-28 01:23:35
It's pretty clear that lawyers are in charge of everything because that's what collectively makes us feel safe apparently and nothing we can say will ever matter until we all collectively decide to stop putting lawyers in charge of everything.
lonjil
2025-01-28 01:24:35
Lawyers aren't in charge of anything
Demiurge
2025-01-28 01:25:07
But that would mean we would have to stop caring about politicians, and I don't see that happening, because it's the world's favorite drama on TV
lonjil Lawyers aren't in charge of anything
2025-01-28 01:28:48
They literally write our laws and tell everyone on the planet what to do, especially big corporations like Google.
monad
2025-01-28 01:29:46
I had an idea to simplify patch
_wb_
2025-01-28 01:29:49
Basically either you want others to be able to use your stuff or you want them to pay you, either via copyright or via patent license fees. If you want people to be able to use it, give it some FOSS copyright license and make it royalty-free with an explicit patent grant. For libjxl we have a LICENSE file containing the copyright license and a PATENTS file containing a patent grant; you could also use something like Apache 2.0 that does both at the same time. If you don't want people to be able to use it without paying you, fine with me but then please make it clear what exactly you want: under what conditions do you need to pay and how much.
lonjil
2025-01-28 01:30:16
<@184373105588699137> I find it interesting that Fedora does package some public domain software despite the apparent legal problems.
Demiurge
2025-01-28 01:32:37
All of our laws are written nowadays by corporate lawyers hired by and representing huge business interests like Google and P&G and Monsanto and whoever else has friends in high places.
lonjil
2025-01-28 01:33:14
No
Demiurge
2025-01-28 01:33:43
Most "elected officials" have a background in law too
lonjil
2025-01-28 01:33:53
Most laws in the US are written by congressional staffers (people who work for the representatives and senators)
Demiurge Most "elected officials" have a background in law too
2025-01-28 01:34:33
Knowing how the law works might be useful when working with the law? :p
Demiurge
lonjil Most laws in the US are written by congressional staffers (people who work for the representatives and senators)
2025-01-28 01:35:48
Those staffers just take whatever gets handed to them verbatim by their ~~Owners~~ I mean ~~lobbyists~~ I mean ~~financial supporters~~ I mean patriotic entrepreneurs!
lonjil
2025-01-28 01:36:02
No
Demiurge
2025-01-28 01:38:35
All of our healthcare laws are written by lawyers working for major hospitals and insurance companies with the most money and influence like Kaiser Permanente. All of our agriculture laws are written by the wealthiest biotech companies making GMO corn and soy.
2025-01-28 01:39:01
It's like this with every field and industry that has money
2025-01-28 01:39:56
Wherever there's lots of money there's always some sort of special arrangement
2025-01-28 01:45:45
Government has always had the goal and purpose of consolidating wealth and power for those that already have it. It was never benign and never "yours" and never existed for any other reason except to pacify those it takes from.
2025-01-28 01:46:19
This has never changed in over 10,000 years
2025-01-28 01:47:52
But I'm getting off topic 😅
2025-01-28 01:48:23
Point is corporate lawyers rule the world and keep everyone safe just like we wanted :)
2025-01-28 01:48:34
Just like everyone wants and agreed to
Quackdoc
lonjil <@184373105588699137> I find it interesting that Fedora does package some public domain software despite the apparent legal problems.
2025-01-28 01:49:31
I think its mostly they haven't gone indepth into it
2025-01-28 01:49:48
cc0 was the only "major offender" afaik
Demiurge
2025-01-28 01:50:16
Well as a former fedora user I am deeply offended
lonjil
2025-01-28 01:50:21
Do you know if it's possible to search the package database by license?
Quackdoc
2025-01-28 01:50:24
and its important to remeber that it's "public domain only" software
lonjil Do you know if it's possible to search the package database by license?
2025-01-28 01:50:30
I think so, but I can't remeber
Demiurge Well as a former fedora user I am deeply offended
2025-01-28 01:50:44
>former same
Demiurge
2025-01-28 01:51:09
How dare they conveniently distribute cc0 software for me
2025-01-28 01:51:47
I'm surprised they haven't been sued by the non existent copyright holder
lonjil
2025-01-28 01:52:58
I just looked up SBCL, since I know it's public domain (that's the most popular common lisp implementation). (Also, if you look it up and see "AND BSD-3" that's just a small number of files derived from code released by Xerox under that license, the vast majority of the code is PD only.)
2025-01-28 01:57:44
In practice it seems like every company and distro will make exceptions and allow legally questionable software if it's important enough.
2025-01-28 01:58:33
E.g. Google I believe has a policy against PD software, but they both use and contribute to SBCL (and yes, all their contributions are PD only)
Demiurge
2025-01-28 01:59:31
Good. Their grip is weakening :)
2025-01-28 02:00:36
https://tenor.com/view/palpatine-smile-creepy-creepy-smile-smirk-gif-24584761
Quackdoc
Demiurge I'm surprised they haven't been sued by the non existent copyright holder
2025-01-28 02:12:54
to be fair, I thought the same thing about RHEL with the video accelerated codecs in mesa, but talking with one of the devs on phoronix and it was more or less implied that it actually did become an issue.
2025-01-28 02:13:12
it just wasn't made public because it's often easier to just comply
2025-01-28 02:13:23
https://tenor.com/view/tell-me-what-to-do-and-i-will-obey-beavis-what-do-i-do-i-will-follow-your-commands-whatever-you-say-gif-17564903546237075113
Demiurge
2025-01-28 02:18:41
Submit. Comply. Obey...
Laserhosen Since discovering https://github.com/skeeto/optparse I've never considered using anything else for C/C++. Maybe that could replace the tools' home-made option parsing?
2025-01-28 04:23:30
https://azrael.digipen.edu/~mmead/www/Courses/CS180/getopt.html Found a good guide... It's a very similar API compared to optparse, and musl libc has a very simple and MIT licensed implementation that can be used on inferior joke platforms like Microsoft
AccessViolation_
2025-01-28 04:39:00
Does libjxl output a single palette referenced by multiple frames if the colors of one frame are a subset of the colors in another frame?
Demiurge
2025-01-28 04:43:09
Afaik libjxl has absolutely no intraframe logic of any kind
AccessViolation_
2025-01-28 04:43:45
Dang
2025-01-28 04:44:24
Is sharing one palette between multiple frames possible in the format?
2025-01-28 04:44:44
layers, i mean, btw
Demiurge
2025-01-28 04:47:02
The format itself is capable of just about anything. libjxl is just not a very sophisticated coder and doesn't use all the format features
2025-01-28 04:47:38
It's just good enough to be usable as a proof of concept and to introduce the world to a taste of what's possible 😂
2025-01-28 04:49:11
As the format gains more attention more sophisticated jxl encoders are expected, specialized for multi frame pixel art animations for example, or existing gif tools can be modified to output jxl instead of gif
AccessViolation_
2025-01-28 04:53:50
I'm not degrading it to a proof of concept given how good it already is, some of its tuning was ported to other formats even, but yeah in terms of uncommon features that's fair
Demiurge
2025-01-28 05:31:11
I expect vardct could be improved by another 20% savings at transparent bitrates just from improving the psycho-rdo tuning and fixing the blurring and color desaturation problems, even more savings if spline detection is added... lossless and animation could be improved by a gargantuan factor if there was more specialized optimization for common low bit depth color modes.
2025-01-28 05:37:16
The current state of the encoder is like a basic proof of concept to demonstrate some of the strengths of the format and novel techniques, in a preliminary context, lacking major features like splines, and before it's undergone the same level of tuning as other lossy image tools like x264
2025-01-28 05:38:35
As a DCT image codec it's already extremely strong and competitive. But it could go much much farther.
2025-01-28 05:38:58
And it's capable of far more than just dct
2025-01-28 05:39:33
It's actually very similar to djvu...
_wb_
AccessViolation_ Is sharing one palette between multiple frames possible in the format?
2025-01-28 05:54:32
No, frames are independent. Though you could cheat by making a large invisible frame that uses a palette, and then patch it into visible frames.
AccessViolation_
2025-01-28 05:56:34
Correction, I meant layers, not frames (I don't know if they're different or if it's just a terminology change depending on if it's an animated jxl)
Demiurge
2025-01-28 05:58:55
Can the same palette not be referenced multiple times by its offset or something?
AccessViolation_
2025-01-28 06:00:38
Hmm I suppose palettes are very little data anyway so it probably doesn't matter in most cases
2025-01-28 06:01:11
if art uses a palette it usually doesn't have more than like 15 colors
_wb_
2025-01-28 07:05:07
Everything is frames in jxl. Layers are zero-duration frames. Pages are max-duration frames. Animation frames are any-other-duration frames.
AccessViolation_
2025-01-28 07:10:19
Oh, I didn't even know JXL did pages. That explains why I've seen people wanting to use it as a format for storing whole comics
Demiurge
2025-01-28 07:29:55
There needs to be some clarification regarding animations and pages mixed and whether the animations can loop or not iirc
Laserhosen
Demiurge https://azrael.digipen.edu/~mmead/www/Courses/CS180/getopt.html Found a good guide... It's a very similar API compared to optparse, and musl libc has a very simple and MIT licensed implementation that can be used on inferior joke platforms like Microsoft
2025-01-28 09:25:47
Yeah, that musl implementation could work if I de-Unix it slightly.
Demiurge
2025-01-28 09:28:36
The musl code is so clean and simple 😻
2025-01-28 09:30:02
You're looking for include/getopt.h, misc/getopt.c and misc/getopt_long.c
2025-01-28 09:30:46
There's nothing unixy in there afaict
2025-01-28 09:31:09
It's just super clean.
Laserhosen
2025-01-28 09:34:25
Well there's unistd.h for a start 🙂 - at least there is if I go straight to the source. I've seen a couple of other repos with just the cleaned-up musl getopt, but they seem to be old and missing a recent bug fix or two
2025-01-28 09:34:28
https://git.musl-libc.org/cgit/musl/tree/src/misc/getopt.c
Demiurge
2025-01-28 09:38:33
Windows users do not need unistd.h at all.
2025-01-28 09:39:20
Windows users can use getopt.h instead of unistd.h
2025-01-28 09:39:32
That file only includes getopt interface definitions.
2025-01-28 09:40:52
For people who aren't using a crayon OS, unistd.h is the standard header where getopt is defined.
2025-01-28 09:42:32
You only need include/getopt.h and misc/getopt.c and optionally misc/getopt_long.c if you want to support --long-options that are a pain in the ass to type
2025-01-28 09:43:26
You can also modify the musl code to accept slash `/` instead of dash `-` for options, since that's conventional on crayonOS
2025-01-28 09:44:31
in addition to, not instead of.
2025-01-28 10:46:49
https://git.musl-libc.org/cgit/musl/tree/src/misc/getopt.c someone would have to try compiling this on windows and remove anything that isn't defined on that platform or that doesn't serve any purpose there. Alternatively I think there is a posix like toolchain available that could provide missing interfaces on that platform without borrowing code from musl
2025-01-28 10:47:36
The main thing is just adapting the tools to use the getopt interface without introducing any bugs
Laserhosen
Demiurge https://git.musl-libc.org/cgit/musl/tree/src/misc/getopt.c someone would have to try compiling this on windows and remove anything that isn't defined on that platform or that doesn't serve any purpose there. Alternatively I think there is a posix like toolchain available that could provide missing interfaces on that platform without borrowing code from musl
2025-01-28 11:06:07
That's what I meant by de-Unixing. I was going to avoid making any incompatible changes to the CLI, so we would of course need to support long options, even if we supplement them with new single-letter options for faster typing.
Demiurge
Laserhosen That's what I meant by de-Unixing. I was going to avoid making any incompatible changes to the CLI, so we would of course need to support long options, even if we supplement them with new single-letter options for faster typing.
2025-01-29 12:06:38
Yeah, taking a closer look at getopt.c there are a few things that need to be tweaked for windows to be happy.
CrushedAsian255
2025-01-29 12:07:33
CrayonOS?
Demiurge
2025-01-29 12:07:36
Mostly just deleting a few lines
CrushedAsian255 CrayonOS?
2025-01-29 12:08:40
Yeah, windows and other joke systems made with crayons and elmer's paste
novomesk
2025-01-30 01:24:26
When encoding a JXL file via libjxl, is it OK to add metadata Exif,xml via JxlEncoderAddBox even before calling JxlEncoderSetBasicInfo ? Just curious.
_wb_
2025-01-30 06:10:30
Good question. I guess it should be ok?
Traneptora
_wb_ Everything is frames in jxl. Layers are zero-duration frames. Pages are max-duration frames. Animation frames are any-other-duration frames.
2025-01-30 07:35:17
I thought pages were frames with negative duration
2025-01-30 07:35:32
but they didn't have to be -1
2025-01-30 07:35:36
(signed int32)
_wb_
2025-01-30 07:37:34
Spec says only 0xffffffff means page break
2025-01-30 07:37:57
Duration is unsigned
Traneptora
2025-01-30 07:38:47
ye I was using signed for convenience
2025-01-30 07:38:57
by negative I mean >= 0x80 00 00 00
_wb_
2025-01-30 07:39:41
In practice, durations over 2^31 ticks are gonna be very long unless you have an insanely short tick
2025-01-30 07:42:09
So in a viewer you'd want to manually navigate between the frames anyway, which is kind of the same thing as page navigation.
Traneptora
2025-01-30 07:48:24
I guess
2025-01-30 07:48:50
I just don't *really* understand the value of saving a whole set of comic pages as an "animated" jxl file instead of using a pre-established format like CBZ
2025-01-30 07:48:59
which is just a `.zip` with images as files
2025-01-30 07:49:22
considering zip has a page index for fast seeking I imagine that would be preferable, or if there's say a page that's bigger than the others cause it's a double
_wb_
2025-01-30 08:16:17
I guess the value could be that it would also work in generic image viewers or web browsers (kinda, you'd probably just see only the first page), while something like cbz mostly only works in comic book viewers
2025-01-30 08:16:56
For fast seeking you could add a jxli box in principle
2025-01-30 08:20:22
Pages with different sizes are I guess both nice to have and a bit inconvenient since it is not well-defined how to display them relative to one another, so you might get behavior where the scale suddenly changes or you unexpectedly need to scroll. In jxl you can still have frame content of different sizes but the canvas has constant size.
2025-01-30 08:22:56
Anyway, compression-wise, an advantage of putting pages in a single jxl is that an encoder can take patches from previous pages. E.g. for static headers/footers or elements that appear on several pages, that could be a big compression gain.
AccessViolation_
_wb_ Anyway, compression-wise, an advantage of putting pages in a single jxl is that an encoder can take patches from previous pages. E.g. for static headers/footers or elements that appear on several pages, that could be a big compression gain.
2025-01-30 08:30:56
Could you extend this to say, patch copying the whole previous page to kAdd-blend it onto the next one? Like for a simple format for making use of redundancy between burst photos, where the current photo is encoded as the residuals of the current photo minus the previous one
_wb_
2025-01-30 08:32:35
Yes that's what kAdd blending was meant for in the first place
AccessViolation_
2025-01-30 08:41:14
Ooo. Time for me to take some burst shots and do some benchmarks
2025-01-30 08:45:00
Actually I'll have to see if I can do that in Krita, it can do blend modes on layers but it doesn't give you control over patches I don't think...
RaveSteel
2025-01-30 08:48:08
apropos layers, I opened the issue regarding cjxl's coalescing of layers in JXL-JXL conversions
2025-01-30 08:48:09
https://github.com/libjxl/libjxl/issues/4097
_wb_
2025-01-30 08:54:10
The encoder in libjxl does not try to do anything regarding inter frame, it just encodes what you give it. You could manually set the frame blend mode to kAdd though (and subtract the previous frame before encoding).
2025-01-30 08:57:20
When doing lossless that could work. For lossy, you would need to use patches to do the adding in XYB...
AccessViolation_
_wb_ The encoder in libjxl does not try to do anything regarding inter frame, it just encodes what you give it. You could manually set the frame blend mode to kAdd though (and subtract the previous frame before encoding).
2025-01-30 09:08:57
That's what I'd been doing in Krita for my image decomposition experiments. I didn't immediately see how I could make a chain of frames referencing each other. mostly the layer dock is just confusing to me I think. I'll figure it out
2025-01-30 09:09:41
Probably start with the base image and then add consecutive residual layers above it in 'add' mode
2025-01-30 09:11:37
Sounds like a bit of work to do every time, especially creating those residual frames is in their own process too. I should look into if this can be scripted
2025-01-30 09:12:39
A 'create compressed burst stack' script for Krita would probably be useful to some
2025-01-30 09:16:31
You could probably even store exposure-bracketed shots efficiently by creating kReferenceOnly frames that are just a single-value multiplier from one frame to the next, to equalize the exposure before taking the subtraction residuals
spider-mario
_wb_ I guess the value could be that it would also work in generic image viewers or web browsers (kinda, you'd probably just see only the first page), while something like cbz mostly only works in comic book viewers
2025-01-30 09:16:56
who would send a whole comic just to display the first page on a webpage, though
AccessViolation_
2025-01-30 09:43:26
find a way to terminate the stream early, though that'd be pretty cursed
_wb_
spider-mario who would send a whole comic just to display the first page on a webpage, though
2025-01-30 10:31:13
Maybe if the rest can be shown via a js viewer, or if browsers implement native page navigation?
jonnyawsom3
AccessViolation_ find a way to terminate the stream early, though that'd be pretty cursed
2025-01-31 03:41:10
HTTP 206 Partial Content
juliobbv
Traneptora I just don't *really* understand the value of saving a whole set of comic pages as an "animated" jxl file instead of using a pre-established format like CBZ
2025-01-31 05:34:30
there are some image viewers (like MacOS's Preview), that actually open animated files as multi-frame static images (as in, you can manually select frames)
2025-01-31 05:36:38
something like this
2025-01-31 05:37:13
I actually don't know if Preview supports opening animated **jxl** files this way though
2025-01-31 05:37:46
(it doesn't, just tried 😦)
Demiurge
2025-01-31 07:38:19
Animated JXL support is not yet in place
2025-01-31 07:38:29
But I would wager it's likely to come
CrushedAsian255
2025-01-31 08:25:20
It would be good for things like burst photo
RaveSteel
2025-01-31 08:43:21
Moreso for the camera apps by certain manufacturers who allow for capturing a burst series directly into a GIF
AccessViolation_
2025-01-31 08:43:41
ew
RaveSteel
2025-01-31 08:43:45
Yes
2025-01-31 08:43:47
lol
2025-01-31 08:43:54
It's horrible
2025-01-31 08:44:02
But at least it could be JXL
2025-01-31 08:44:13
would make it leagues better
AccessViolation_
2025-01-31 08:44:14
That's what I'm experimenting with today actually
2025-01-31 08:44:48
If you read up a bit, I wanted to store burst images as the difference between the previous frame and the current one
2025-01-31 08:44:57
If I can get Krita to do what I want that is :)
RaveSteel
2025-01-31 08:45:49
Sounds good if you're able to get it working
2025-01-31 08:46:15
I checked, the created GIF in Samsung's camera app will be 480x640 and have 5 whole FPS
AccessViolation_
2025-01-31 08:48:41
Another thing you might be able to do do with JXL's basic interframe coding is store exposure bracketed bursts by also multiplying by an invisible layer that's a frame with one value, to normalize for the exposure before taking the difference
2025-01-31 08:49:33
Not entirely sure if that's possible in Krita since multiplying something by the max value of a pixel appears to be a no-op
2025-01-31 08:50:55
If it's not possible in general you'd have to start at the darkest shot and use division instead, to get the brighter shots down to the exposure of the previous one
2025-01-31 08:52:22
But that shifts the problem of multiplying by something greater than 1 to the decoding step, so idk. I'm just going to start with normal bursts and see about exposure bracketing later
A homosapien
RaveSteel I checked, the created GIF in Samsung's camera app will be 480x640 and have 5 whole FPS
2025-01-31 09:14:09
why are we still living in the 90's... <:PepeHands:808829977608323112>
CrushedAsian255
2025-01-31 12:30:28
no APNG support? 😭
_Broken s̸y̴m̴m̵̿e̴͌͆t̸r̵̉̿y̴͆͠
2025-01-31 06:18:15
I got a few questions about the libjxl .. well lib. I'm currently working on making a backup of my drawing folder, and in there are quiet a few scans. Now they all are scanned in lossless (`.tif`), and currently are stored as `.png `(some rgb, some gray). - My question revolves mainly around the following line from the repo: > Note: This release is for evaluation purposes and may contain bugs I assume this only applies to the newer features being implemented, and less so to the general *encoding* / *decoding* in *lossless* / *lossy* quality, right? Like it would be safe to use, for the task of lossless encoding, right? - My second question would be a bit less on-topic, but still is fairly important. How "vulnerable" is `.jxl` encoding? Like when the *body* and/or *header* is damaged, how well can parts of it still be recovered? I sadly do not know how other formats like `.png, .jpg, .tif (LZMA and None)` them self hold up regarding that, but it would interesting to know, if you guys know anything about that? -# I ask this out of interest, less to skip the 1-2-3 principle, which I just can't full-fill financially. -# I yet have to read in to testing such things as redundancy and recover-ability myself, but not enough time and I do not know apportion resources for that yet, since I want to do "realistic" and varied tests. - And my last question is as follows: Since I'm going to convert multiple images by command, -# better said using python tkinter filedialog to select files and running the cjxl.exe a bunch of time with popen or the alike, is the command correct for lossless encoding? : `cjxl.exe sample.png sample_jxl.jxl -d 0.0 -e 10` Thank you for you time -# and also the Jxl implementation btw
Laserhosen
2025-01-31 07:26:52
1. will depend on what level of risk you're comfortable with. There *have* been bugs that make the lossless encoding not fully lossless. Personally I trust it enough that I've converted practically every PNG I have into lossless JXL - I use a conversion script that verifies the result by decoding back to PNG and comparing the pixel values to the original. Note that converting PNG to JXL with cjxl will discard any metadata other than Exif and XMP.
2025-01-31 07:30:32
2. Others might give a more detailed answer, but bit-rot is probably more damaging to JXL than PNG in general just because of its density. There has been discussion of an option for djxl for attempting to decode broken inputs, but it hasn't been implemented yet.
2025-01-31 07:33:51
3. Yeah, the command looks fine if you have the patience for -e 10.
Demiurge
_Broken s̸y̴m̴m̵̿e̴͌͆t̸r̵̉̿y̴͆͠ I got a few questions about the libjxl .. well lib. I'm currently working on making a backup of my drawing folder, and in there are quiet a few scans. Now they all are scanned in lossless (`.tif`), and currently are stored as `.png `(some rgb, some gray). - My question revolves mainly around the following line from the repo: > Note: This release is for evaluation purposes and may contain bugs I assume this only applies to the newer features being implemented, and less so to the general *encoding* / *decoding* in *lossless* / *lossy* quality, right? Like it would be safe to use, for the task of lossless encoding, right? - My second question would be a bit less on-topic, but still is fairly important. How "vulnerable" is `.jxl` encoding? Like when the *body* and/or *header* is damaged, how well can parts of it still be recovered? I sadly do not know how other formats like `.png, .jpg, .tif (LZMA and None)` them self hold up regarding that, but it would interesting to know, if you guys know anything about that? -# I ask this out of interest, less to skip the 1-2-3 principle, which I just can't full-fill financially. -# I yet have to read in to testing such things as redundancy and recover-ability myself, but not enough time and I do not know apportion resources for that yet, since I want to do "realistic" and varied tests. - And my last question is as follows: Since I'm going to convert multiple images by command, -# better said using python tkinter filedialog to select files and running the cjxl.exe a bunch of time with popen or the alike, is the command correct for lossless encoding? : `cjxl.exe sample.png sample_jxl.jxl -d 0.0 -e 10` Thank you for you time -# and also the Jxl implementation btw
2025-01-31 07:35:46
point 1: no, the lossy and lossless encoders in libjxl can contain bugs too. libjxl does NOT do any final sanity-check on the encoder output to ensure lossless output is truly reversible, or to ensure lossy output does not have any regions with extreme and unexpected levels of distortion and loss. You have to test this yourself to make sure there are no serious problems with the output point 2: the header is extremely compact and bit packed, the image is divided into regional chunks, but someone more familiar with the bitstream would have to say whether it's possible to scan for signatures and magic numbers and partially recover parts of the image that way. If the toc is damaged it's possible you might end up with image chunks you have to manually re-order in the right place like a jigsaw puzzle? point 3: effort 10 is really not recommended. I would recommend effort 1 or 2 for maximum speed, effort 7 (default) for 98% the compression of e10 at much improved speed, and I would not recommend anything above e7 unless you are insane in the membrane.
2025-01-31 07:37:04
That last 2% increases your wait time by 200x
2025-01-31 07:37:21
That's a bad trade
Laserhosen
2025-01-31 07:41:42
If you're going for maximum compression, you might want to add `--compress_boxes=1` `--brotli_effort=11` to compress the metadata more. There are other options worth playing with too (-I, -E, -g)... plenty of discussion of these to be found in <#840831132009365514>.
2025-01-31 07:44:47
Just don't be tempted by the "forbidden" effort level...
AccessViolation_
2025-01-31 07:55:45
surprised compress boxes isn't default 🤔 edit: seems like it is from a quick test