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

jxl

Anything JPEG XL related

Traneptora
2023-08-21 04:07:43
https://resources.infosecinstitute.com/topics/hacking/xml-vulnerabilities/
2023-08-21 04:07:52
https://resources.infosecinstitute.com/topics/vulnerabilities/xml-vulnerabilities-still-attractive-targets-attackers/
2023-08-21 04:08:14
https://itnext.io/vulnerabilities-due-to-xml-files-processing-xxe-in-c-applications-in-theory-and-in-practice-f94912216093
2023-08-21 04:08:23
XML is a buggy security *landmine*
2023-08-21 04:09:06
Consider the following:
2023-08-21 04:09:10
```xml <?xml version="1.0"?> <!DOCTYPE lolz [ <!ENTITY lol "lol"> <!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;"> <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;"> <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;"> <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;"> <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;"> <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;"> <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;"> <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;"> ]> <lolz>&lol9;</lolz> ```
2023-08-21 04:09:17
This is *LEGAL XML*
2023-08-21 04:09:21
think about that.
2023-08-21 04:11:19
This is from a microsoft article that's specifically about how to defend your xml-using application against attacks
2023-08-21 04:11:21
https://learn.microsoft.com/en-us/archive/msdn-magazine/2009/november/xml-denial-of-service-attacks-and-defenses
2023-08-21 04:11:37
At this point, you should just considering using JSON instead.
Demonik
2023-08-21 08:25:28
is there a way to build just decode/encode library with no platform specific code, no file handling, no threads or anything like that - I just want minimal library where I give it file or stream I already read from somewhere and it gives me results?
2023-08-21 08:27:35
with no dependencies
jonnyawsom3
2023-08-21 09:15:05
Might be a start https://github.com/libjxl/libjxl-tiny
Demonik
2023-08-21 09:16:12
this is encoder and it's the opposite of what I need
2023-08-21 09:16:21
it's a tool
2023-08-21 09:17:07
I need a library, at least decoder but decoder+encoder would be better, something that can be easily plugged into crossplatform software where I'm already handling files
2023-08-21 09:17:35
and preferably not having to deal with cmake
2023-08-21 09:17:58
because trying to crosscompile with cmake makes me want to unalive myself
2023-08-21 09:20:34
https://github.com/libjxl/jxl-rs something like this but with reference implementation
yoochan
2023-08-21 11:08:35
you could try j40... but it's not feature complete yet
_wb_
2023-08-21 12:56:12
libjxl does not do file handling
Demonik
2023-08-21 02:09:21
as far as I understand `JPEGXL_INTERNAL_SOURCES_DEC` lists all files that are needed for decoder library and that includes `file_io.h` which uses stdio to read/write files
yoochan you could try j40... but it's not feature complete yet
2023-08-21 02:11:05
that looks nice but it lacks a lot of features, I wish reference implementation was more like this
2023-08-21 02:11:34
would make integration so much easier for everyone
_wb_
Demonik as far as I understand `JPEGXL_INTERNAL_SOURCES_DEC` lists all files that are needed for decoder library and that includes `file_io.h` which uses stdio to read/write files
2023-08-21 02:23:11
does it? hm, probably should change that. libjxl itself should not do any file io
2023-08-21 02:23:35
i guess except in some debug builds where it can dump debug output files, hmm
Demonik
2023-08-21 02:24:06
well it's hard to say for me because I hate cmake and don't know shit about it
Foxtrot
2023-08-21 02:27:40
So I saw this CLA topic: https://github.com/libjxl/libjxl/pull/2741 Makes me wonder... Who even owns JPEG XL? I thought that copyright is owned by JPEG committee. But the CLA is for Google. I guess because JXL is based on PIK? But it's also based on FUIF which is owned by Cloudinary, so why there isnt CLA for Cloudinary? Or CLA for JPEG group? I just dont understand.
_wb_
2023-08-21 02:39:36
libjxl is owned by "the jpeg xl project" which is a kind of intentionally vague term which is understood to include Google and Cloudinary. Google is the legal entity administrating the libjxl CLA.
Demonik
2023-08-21 02:40:06
I can't even figure out how to build just jxl lib let alone how to cross compile it because cmake is the most unintuitive build system ever created and it seems its whole purpose is to make building projects as hard as possible
_wb_
2023-08-21 02:40:50
the JPEG committee has nothing to do with libjxl except that it 'ratifies' libjxl to be a reference implementation (in 18181-4)
2023-08-21 02:41:23
the JPEG XL standard (as in the spec documents) is 'owned' by ISO/IEC
Quackdoc
Demonik I can't even figure out how to build just jxl lib let alone how to cross compile it because cmake is the most unintuitive build system ever created and it seems its whole purpose is to make building projects as hard as possible
2023-08-21 02:42:04
I use these for buidling libjxl for android, it should more or less relate to anything else with some minor tweaking to remove the android specific bits https://github.com/Quackdoc/libmpv-android-video-build/blob/6927421abcd226b2311458299de9d088976b9279/buildscripts/scripts/libjxl.sh https://github.com/Quackdoc/libmpv-android-video-build/blob/6927421abcd226b2311458299de9d088976b9279/buildscripts/scripts/brotli.sh
Foxtrot
_wb_ libjxl is owned by "the jpeg xl project" which is a kind of intentionally vague term which is understood to include Google and Cloudinary. Google is the legal entity administrating the libjxl CLA.
2023-08-21 03:24:52
thanks for explanation 🙂
w
2023-08-22 07:11:49
libjxl is as hard to build as imagemagick
2023-08-22 07:12:00
with only 1 core, might be worse
2023-08-22 07:14:23
something still needs to be done about the memory usage
Traneptora
2023-08-22 09:10:56
Not sure how much can be fixed with regard to the compile speed, as C++ does that with templates and header files
Quackdoc
2023-08-22 09:20:35
you can always try different compilers and linkers, some are better some are worse
Traneptora
2023-08-22 09:24:53
the best way to get a C++ library to compile quickly is to just write it in C
VcSaJen
2023-08-23 01:09:39
In my experience, Delphi is the quickest. The launch is literally instantaneous.
OkyDooky
2023-08-24 03:13:34
Using JPEG XL as one of the examples of why we'd need some more engine representation on the CanIUse website \: https://mastodon.social/@nekohayo/110942348238393206
Lemenus
2023-08-24 09:05:21
build
VcSaJen
2023-08-25 12:24:46
What's the difference between WebKitGTK and WebKit?
HCrikki
2023-08-25 01:04:31
afaik webkitgtk's release schedule matches gnome desktop and apps' release schedule better and LTS distros'
2023-08-25 01:05:38
for apps/games embedding it, its more accomodating as a build target than either nightlies or stables of regular webkit and blink
Traneptora
2023-08-27 12:04:22
Just merged my JXL parser into FFmpeg
2023-08-27 12:04:23
<:poggies:853085814032302122>
lonjil
2023-08-27 12:31:24
nice
_wb_
2023-08-27 03:18:19
So now ffprobe etc will do jxlinfo style stuff?
diskorduser
2023-08-27 04:06:51
Does imagemagick support lossless jpg to jxl?
Fraetor
2023-08-27 04:12:17
I don't think so.
Traneptora
_wb_ So now ffprobe etc will do jxlinfo style stuff?
2023-08-27 06:04:58
it already did, but most importantly it'll be able to read concatenated JXL files from a stream
2023-08-27 06:05:14
this matters if you want to do something like store jxl sequences in a container as a pseudo-prores
2023-08-27 06:05:51
also, notably, it won't have to call the libjxl decoder to get basic info about the stream
2023-08-27 06:06:02
like the pixel format or the dimensions
2023-08-27 06:08:05
``` $ ffmpeg -hide_banner -i george-smile4.jxl Input #0, jpegxl_pipe, from 'george-smile4.jxl': Duration: N/A, bitrate: N/A Stream #0:0: Video: jpegxl, rgb24(pc, gbr/bt709/iec61966-2-1), 3840x2160, 25 fps, 25 tbr, 25 tbn At least one output file must be specified ```
2023-08-27 06:08:20
it still will, but it doesn't have to, in the case libjxl support isn't compiled it
2023-08-27 06:08:32
and it can streamcopy it just fine
2023-08-27 06:10:06
this might be relevant to people like <@184373105588699137> who did some hack to get JXL inside NUT
Quackdoc
2023-08-27 06:17:10
0.0
jonnyawsom3
Quackdoc sorry for brevity, on phone can add jxl to riff bmp tags to get ffmpeg to mux jxl into mkv, mov mp4 etc. the decode speed is a little low for my system (400fps in mpv) sounds like a lot but in reality need around 600fps for really good scrubbing still usable, don't get me wrong. biggest issue is that ffmpeg seems to be messing up some conversions, so some videos get really mangled (happens with png and even raw video, no idea why) ```patch diff --git a/libavformat/riff.c b/libavformat/riff.c index df7e9df31b..16e37fb557 100644 --- a/libavformat/riff.c +++ b/libavformat/riff.c @@ -34,6 +34,7 @@ * files use it as well. */ const AVCodecTag ff_codec_bmp_tags[] = { + { AV_CODEC_ID_JPEGXL, MKTAG('J', 'X', 'L', ' ') }, { AV_CODEC_ID_H264, MKTAG('H', '2', '6', '4') }, { AV_CODEC_ID_H264, MKTAG('h', '2', '6', '4') }, { AV_CODEC_ID_H264, MKTAG('X', '2', '6', '4') }, ```
2023-08-27 06:50:01
Now it just needs a riff tag, although probably not suitable to be implimented by default
2023-08-28 12:58:51
And the [recent reddit post](https://redd.it/1637lmm) seems like it'd be the perfect use case ;P
Quackdoc
2023-08-28 05:23:42
the biggest thing for me is being able to mux an image sequence, using parallel to encode jxl images is much faster then using ffmpeg, so ill probably look back into it eventually. currently just using image sequences has been fine, but VS has been picky lately with image sequences.
perk11
2023-08-28 06:22:09
Using animated JXL should achieve better compression because there is some inter-frame compression, but when I tried it with cjxl it was extremely slow and RAM-hungry. But it did produce a smaller file than a sequence of JXLs.
Quackdoc
2023-08-28 06:22:57
interframe compression is explicitly something I don't want personally
perk11
2023-08-28 06:23:28
What is your usecase for this? How will you play it back?
Quackdoc
2023-08-28 06:23:49
video editing and medium quality vfx sequence exporting
2023-08-28 06:24:05
basically a replacement for prores and tiff
2023-08-28 06:28:29
I need to test e7 d0.25 for cjxl
2023-08-28 06:28:51
these are the ssimulacra2rs results I got encoding netflix's chimera use q95 e4, https://cdn.discordapp.com/attachments/587033245061873759/1116353467326410832/prores.png https://cdn.discordapp.com/attachments/587033245061873759/1116374917995315290/jxlseqQ95E4.png
2023-08-28 06:29:09
e4 kinda hurts, but at 1/3rd the filesize of prores, it's really nice
2023-08-28 06:29:24
anything more really hurt encoding speed
_wb_
perk11 Using animated JXL should achieve better compression because there is some inter-frame compression, but when I tried it with cjxl it was extremely slow and RAM-hungry. But it did produce a smaller file than a sequence of JXLs.
2023-08-28 06:37:42
I don't think libjxl currently does anything inter itself — but iirc cjxl does preserve cropped frames in gif/apng input, which is a kind of (simple) inter frame.
2023-08-28 06:38:49
In principle jxl does have some coding tools that could be useful for inter, in particular patches and frame blending. But this is not a jxl dev focus at all, since we are not trying to compete with video codecs.
perk11
2023-08-28 06:41:01
Oh good to know it just preserves it from apng/gif. I thought it was a part of libjxl. For my use case of lossless compression of desktop screenshots taken every few miutes jxl already outperforms x264 (which is the best video compression codec for lossless). The problem is only with speed/RAM currently. I understand it's not a focus.
_wb_
2023-08-28 06:47:31
As a mezzanine format like prores it could be useful, or even for use cases like digital cinema where j2k is currently used. It's a bit computationally heavy at the moment for such use cases, but I think it's already feasible now.
2023-08-28 06:48:23
For archival use cases (where ffv1 is now typically used) it could also be good.
Quackdoc
2023-08-28 06:48:50
as mentioned above, i've also been looking into it as a replacement for tiff too for exports with exr isnt suitable for one reason or another
perk11
2023-08-28 06:52:03
These were my tiny test results (as cjxl took forever and ran out of RAM on larger data sets): Source 30 png screenshots: 55.3 Mb converting each file to JXL individually (-d0, default settings): 28.4 Mb apng created using ffmpeg: 66.0 Mb animated jxl created from apng using cjxl (-d0, default settings): 21.9 Mb libx264rgb lossless video: 37.1 Mb
_wb_
2023-08-28 06:52:06
We should at some point port some of the libjxl-tiny stuff back to libjxl imo (wdyt <@987371399867945100> ?) so we can do something like e5-e6 but with fixed huffman coding instead of ANS so it's faster and lower memory...
Quackdoc
2023-08-28 06:53:47
0.0
_wb_
2023-08-28 06:54:57
cjxl currently fully decodes the input file to memory and then encodes it frame by frame to a compressed bitstream in memory, and then it writes the whole output file from memory. That approach is obviously not going to work if there are many frames.
jonnyawsom3
2023-08-28 10:21:40
Sounds like that could be part of the streaming encoder being PR'd currently
_wb_ I don't think libjxl currently does anything inter itself — but iirc cjxl does preserve cropped frames in gif/apng input, which is a kind of (simple) inter frame.
2023-08-28 10:22:44
Yeah, no interframe, but it does use the previous frames to compress the new data losslessly, reusing redundant blocks essentially (At a guess, it's undocumented from what I know)
_wb_
2023-08-28 11:13:56
no it doesn't, it encodes frames completely independently atm
2023-08-28 11:14:58
I guess you could manually subtract the previous frame from the current though and set the frame blending to `kAdd` when using libxjl directly
jonnyawsom3
2023-08-28 12:59:07
Huh, I guess maybe just generic compression across the whole file? Otherwise I don't know how an animated JXL can be any smaller than separate files
_wb_
2023-08-28 01:49:19
well if the gif or apng has cropped frames then cjxl will preserve those
spider-mario
2023-08-28 02:07:48
and at present, only then; cjxl does not try to infer them
2023-08-28 02:08:01
if you pass it an “unoptimised” GIF, you’ll get an “unoptimised” JXL
jonnyawsom3
2023-08-28 02:09:47
Yeah, while testing with GIFs recently I've been removing duplicate frames and using pallete. Always surprising just how unoptimized files can be :P
perk11
_wb_ I guess you could manually subtract the previous frame from the current though and set the frame blending to `kAdd` when using libxjl directly
2023-08-28 03:16:53
I tried something like that, not in frames, but in separate files, but only storing difference between the frames, and it took more space than just storing full frames, my guess is because the parts that changed had to encode more data than when starting from the blank state. So it needs to be a smarter algorithm than that to be efficient (which converting from apng seems to achieve).
_wb_
2023-08-28 05:00:54
Subtracting previous frame is useful if there are parts that are static, but if everything is changing it just doubles the entropy
Kyle
2023-08-29 10:46:16
Hello. I just wanted to ask whether patch/dots generation only applies to VarDCT mode or both VarDCT and modular. Really interested with JPEG XL tech since I'm developing a website that supports JPEG/PNG, WebP, and JPEG XL all at the same time, and it is interesting to note that I consistently get better and smaller files with JPEG XL (`-d 2.5`) compared to WebP (quality 80).
2023-08-29 10:47:57
Also, the `photon_noise` configuration is a game-changer. It really makes a *huge* difference in image quality, specially for images with high ISO and not much denoising. Wondering if this will soon become automatically recognized from EXIF tags and applied...
Tirr
2023-08-29 10:53:00
IIRC libjxl does patch detection also on Modular (lossless), but only on `-e 7` (default) or higher
Kyle
2023-08-29 10:56:49
If that's true, that's awesome! I encode in `-e 9` all the time, anyway. I'm not in a hurry to get the files if they result in better and smaller files than WebP 🙂
2023-08-29 10:57:27
Now all I have to wait for is browser support... Sigh.
jonnyawsom3
2023-08-29 12:18:35
This might help a bit too <https://github.com/libjxl/libjxl/blob/main/doc/encode_effort.md>
Kyle Now all I have to wait for is browser support... Sigh.
2023-08-29 12:20:47
Not necessarily... Depends if you want to try adding the WASM decoder
OkyDooky
2023-08-29 01:25:20
That ticket filed there does a reasonably good job at explaining exactly that ;) (<@219079106673901568>)
2023-08-29 01:25:25
or so I was told
VcSaJen
2023-08-29 01:26:29
What ticket where
OkyDooky
2023-08-29 01:26:51
the thing you were replying to
2023-08-29 01:27:25
https://github.com/Fyrd/caniuse/issues/6807
Traneptora
2023-08-29 04:47:33
btw, I have a personal fork of libjxl/libjxl on github
2023-08-29 04:47:42
main branch tracks main branch
2023-08-29 04:47:50
but I frequently get failed workflow runs
2023-08-29 04:48:13
could it be possible for the workflows to have some kind of if-statement that makes them only run if the repo is libjxl/libjxl
2023-08-29 04:52:37
e.g. Mirror To Gitlab shouldn't run on forks
Kyle
This might help a bit too <https://github.com/libjxl/libjxl/blob/main/doc/encode_effort.md>
2023-08-30 03:36:23
Thanks, I checked it out. I guess I'll keep on using `-e 9` when I'm not in a hurry 🙂 Still not sure whether Modular mode can use patches/dots, but I guess it doesn't matter in the end 🙂
jonnyawsom3
Kyle Thanks, I checked it out. I guess I'll keep on using `-e 9` when I'm not in a hurry 🙂 Still not sure whether Modular mode can use patches/dots, but I guess it doesn't matter in the end 🙂
2023-08-30 03:40:02
The page I linked says for VarDCT patches turn on at `-e 7` and for Modular patches turn on at `-e 5`, so yes it does use patches and dots
Kyle
2023-08-30 03:44:09
Aww. I promise I read and re-read it multiple times but somehow I still managed to miss the modular part. My bad. Thanks for pointing it out!
jonnyawsom3
2023-08-30 03:53:30
No worries, it's pretty dense text
Tirr
2023-08-30 03:55:50
note that libjxl doesn't try that much on detecting patches, it will do so just on some obvious ones (repeating patterns, glyphs etc.)
jonnyawsom3
2023-08-30 04:14:04
Has to be pixel perfect matches currently too, so any slight warping from scaling could stop it from working properly too
monad
2023-08-30 05:47:53
Rather patches _or_ dots, and patches can be lossy.
Moritz Firsching
Traneptora could it be possible for the workflows to have some kind of if-statement that makes them only run if the repo is libjxl/libjxl
2023-08-30 06:54:46
sure, good idea. I will have a look
2023-08-30 06:56:43
let's see if this helps: https://github.com/libjxl/libjxl/pull/2761
2023-08-30 09:10:13
Done. Let me know if this disables enough workflows, or if some more need this if
Traneptora
Moritz Firsching Done. Let me know if this disables enough workflows, or if some more need this if
2023-08-30 05:24:02
CI is passing on my fork now 👍
2023-09-05 01:54:18
<@179701849576833024> can https://github.com/libjxl/libjxl/pull/2768 be merged? I noticed you approved the changes but it's still a PR. I'm not sure the dev policy on this kind of thing
veluca
2023-09-05 01:54:51
ah I usually wait for the author to click that "merge" button
2023-09-05 01:54:57
but perhaps you cannot?
Traneptora
2023-09-05 01:54:57
I can't merge it
2023-09-05 01:55:04
I don't have push access to the repository
veluca
2023-09-05 01:55:19
I'd have thought approval would be sufficient... oh well
2023-09-05 01:55:21
merged
Traneptora
2023-09-05 01:55:23
thanks 👍
DZgas Ж
2023-09-07 07:14:31
where the... oh.
2023-09-07 07:15:59
I would like to say that by entering the -v parameter, which is already additional for -help, it is very strange to see NOT the full set of parameters
2023-09-07 07:17:08
real fun
jonnyawsom3
2023-09-07 07:18:11
Probably can do with more adjustment in future
DZgas Ж
2023-09-07 07:21:13
👆 -e 7 -d 25 --resampling=1 I just forgot about the maximum possible compression, I need to remember
VcSaJen
2023-09-07 11:28:15
what if... hear me out, `-v 4`
w
2023-09-08 12:00:01
what if.. it's just one -v
2023-09-08 12:00:16
or even better, no -v
TheBigBadBoy - 𝙸𝚛
2023-09-08 11:22:11
also merging params would be nice, like `cjxl -hvvvv`
spider-mario
2023-09-08 12:29:29
slightly too reminiscent of HIV/HPV/HSV to my taste
2023-09-08 12:29:34
human vvv virus
gb82
VcSaJen what if... hear me out, `-v 4`
2023-09-09 06:16:01
--fullhelp? -fh?
DZgas Ж
2023-09-09 06:40:56
Just do as before -h -v
w
2023-09-09 06:44:13
just do -h
2023-09-09 06:44:23
why would i want little help
2023-09-09 06:44:26
when i can have all help
Nova Aurora
2023-09-09 06:46:18
Because sometimes you have limited or no scroll back and don't need every single debug option of a program, just it's main usage
w
2023-09-09 06:47:35
-h is still too long
YAGPDB.xyz
2023-09-09 06:47:35
Couldn't find command 'is still too long'
uis
2023-09-12 12:04:04
Theoretically can svg be rendered to jxl splines?
jonnyawsom3
2023-09-12 12:05:07
There is a tool but you'd have to build it yourself https://github.com/wwww-wwww/spline
gb82
2023-09-12 07:01:47
How well does it work?
monad
2023-09-12 09:22:47
better than any other svg to jxl spline converter
OkyDooky
2023-09-12 12:39:34
I never saw a different one, lol
2023-09-12 12:40:02
Depends on the image, not that good for complex things. (<@703028154431832094>)
jonnyawsom3
2023-09-12 01:50:32
If I recall JXL can't fill shapes with splines, so you'll end up with hollow shapes a lot
w
2023-09-12 03:04:24
yeah would be nice if it could do closed loops
2023-09-12 03:04:37
and an option to disable the mirror
2023-09-12 03:06:17
guess we gotta wait for jxl2
2023-09-12 03:06:39
i mean jxxl
jonnyawsom3
2023-09-12 03:27:44
JpegXtendedSplines
Traneptora
2023-09-12 03:51:28
I'd like to statically link in libjxl to cjxl/djxl, but have it dynamically link to system libraries
2023-09-12 03:51:53
is there a way to do that?
_wb_
2023-09-13 02:50:46
probably there is, but I dunno much at all about build options
Traneptora
2023-09-13 08:12:10
enabling JPEGXL_STATIC causes it to try to link it all system libraries statically
2023-09-13 08:12:16
including e.g. libgif
2023-09-13 08:12:43
which will fail
Demiurge
2023-09-15 05:05:56
That's not what splines are intended for
w
2023-09-15 05:06:52
if that's not what they're for then they're useless
2023-09-15 05:06:54
jxl doa
Quackdoc
2023-09-15 05:07:45
and wrenches weren't intended for being used as a hammer, never stopped me though xD
Demiurge
2023-09-15 05:09:13
They are meant for subtracting from an image as a preprocessing step before DCT encoding, for more efficient DCT compression
2023-09-15 05:10:17
To remove some high frequency information from the image before DCT
2023-09-15 05:11:00
But there is no encoder that does that so far
2023-09-15 05:11:36
But it would be a cheap way to get a good increase in quality/bitrate
w
2023-09-15 07:13:58
so it's useless
_wb_
2023-09-15 08:04:54
No, it's just not an easy to use coding tool from an encoder pov, so it is currently not used at all by the libjxl encoder. But it could be useful for future encoder improvements, it's mostly a question of coming up with computationally cheap enough detection heuristics.
w
2023-09-15 08:11:41
could be useful so right now useless
2023-09-15 08:27:21
even for that use case it doesn't seem like a very effective solution
2023-09-15 08:29:18
so to me, the whole idea of having the feature for a possible use case can be extended to more spline features
2023-09-15 08:29:26
but we're left with basic splines so it just looks like an afterthought
2023-09-15 08:31:16
unless it can be demonstrated right now that it's useful
yoochan
2023-09-15 08:44:46
that would be nice indeed to see a nice demo of splines and patches... but I think the priority is now to push the format itself and bundle a nice libjxl v1.0. Even if these features don't bring as much efficiency as planned, they were designed to future proof the format, and the current efficiency is quite good already
Traneptora
Traneptora I'd like to statically link in libjxl to cjxl/djxl, but have it dynamically link to system libraries
2023-09-15 09:54:51
I ended up not finding a way to do this
2023-09-15 09:55:33
so I set the LDFLAGS to include `-Wl,-rpath,/path/to/libjxl/build/` because that way it would link them against their own built libraries and not the system libraries
2023-09-15 09:55:57
ran into this issue when using a modified libjxl that spits out debugging info
2023-09-15 09:56:13
djxl would still use the system libjxl
jonnyawsom3
w but we're left with basic splines so it just looks like an afterthought
2023-09-15 11:06:13
I recall some usecases were for hair to keep fine edges, or replacing edges entirely to avoid color bleeding for example
_wb_
2023-09-15 02:57:35
the splines in jxl are not so basic — they have variable width and color, so that's relatively expressive
2023-09-15 02:58:10
I mean, I don't think you can even do that in svg, can you?
2023-09-15 02:58:46
but they don't include closed shapes and fill, so yeah it's not a substitute for vector graphics in general
jonnyawsom3
2023-09-15 05:25:10
In that case, you could probably work around the fill by increasing width and overlapping, if you really wanted to make SVG like images
Demiurge
_wb_ No, it's just not an easy to use coding tool from an encoder pov, so it is currently not used at all by the libjxl encoder. But it could be useful for future encoder improvements, it's mostly a question of coming up with computationally cheap enough detection heuristics.
2023-09-15 05:36:12
I thought a simple spline transform already exists
2023-09-15 05:42:56
It's not meant for vector graphics. It is meant for preprocessing raster graphics to remove high frequency signals before DCT
2023-09-15 05:43:56
JXL is a raster format
_wb_
2023-09-15 06:15:51
there is no encoder at all for splines in libjxl - the only testing that was done so far were some examples with manually fitted splines, just as a 'demo' that it indeed can work significantly better than DCT on some kinds of image content
jonnyawsom3
2023-09-15 06:16:53
Huh, are those demos still around?
spider-mario
2023-09-15 06:59:01
I might have them somewhere
yoochan
_wb_ I mean, I don't think you can even do that in svg, can you?
2023-09-15 07:40:23
indeed, svg is pure bezier, you can only choose the stroke cap and join shape but not the width along the path
Huh, are those demos still around?
2023-09-15 07:40:35
I'll be curious to see also 🙂
spider-mario
2023-09-15 07:53:08
the thing is, the form they likely survived as is old commits based on an old revision of libjxl, hardcoding the spline data in C++
2023-09-15 07:53:21
I don’t think they rebase cleanly
2023-09-15 07:53:38
and I’m not sure the bitstream at the time was already finalised
2023-09-15 07:54:22
so some tweaking might be needed to get them to work with current libjxl
Demiurge
_wb_ there is no encoder at all for splines in libjxl - the only testing that was done so far were some examples with manually fitted splines, just as a 'demo' that it indeed can work significantly better than DCT on some kinds of image content
2023-09-16 07:13:33
Don't you mean when combined with DCT? Also I thought that simple and fast spline transforms for raster images are a thing that already has years of research and prior work
2023-09-16 07:16:42
https://en.wikipedia.org/wiki/Hough_transform
2023-09-16 07:32:00
Maybe I was wrong. Maybe it's not a very common or thoroughly studied topic at all.
2023-09-16 07:33:44
But theoretically there could be a fast and simple algorithm to detect and remove splines from an image as a pre/postprocessing step in JXL to greatly reduce lossy bitrate for free
_wb_
2023-09-16 08:02:37
I guess all kinds of algorithms exist but we need something that is fast, not some super slow academic research code in Matlab. I dunno if there is something usable already available, I haven't investigated.
Demiurge
2023-09-16 05:59:49
Yeah, maybe spline detection and subtraction from raster images is less common than I thought
w
2023-09-16 06:01:18
<a:pensiveWobble:873465538112790569>
yoochan
_wb_ I guess all kinds of algorithms exist but we need something that is fast, not some super slow academic research code in Matlab. I dunno if there is something usable already available, I haven't investigated.
2023-09-16 08:43:05
I bet that, like for patches, first users of splines will be editors with a knowledge a priori of splines, like a manga editor. A first step could be to include some way (in the api) to send coordinates for the encoder. Borders, text balloons, hairs or pen strokes could be passed
VcSaJen
yoochan indeed, svg is pure bezier, you can only choose the stroke cap and join shape but not the width along the path
2023-09-21 01:15:48
I think inkscape can do variable width
yoochan
2023-09-21 01:17:47
perhaps, but with custom extensions to svg... still waiting for svg 2 spec 😄
lonjil
2023-09-21 08:40:23
is it possible to store 32 bit samples in a JXL? per channel I mean
jonnyawsom3
2023-09-21 08:46:49
As 32bit float, yes
_wb_
2023-09-21 08:59:24
Yes, float32 or uint24 is the maximum you can do per channel.
Nova Aurora
2023-09-21 09:01:30
SMH no 64-bit color?
Traneptora
2023-09-21 09:07:53
you can't use int32 in modular mode?
2023-09-21 09:07:56
that's odd
lonjil
2023-09-21 09:08:28
Is the 24 bit limit for ints so that it can be done with floats or something?
Traneptora
2023-09-21 09:09:34
I don't think there's any inherent limit in the format with regard to 32-bit ints. It's probably just a libjxl limitation
_wb_
2023-09-22 07:22:27
libjxl uses float32 internally for everything, that's where the 24-bit limit comes from
2023-09-22 07:24:59
the spec allows up to 31-bit ints, which could in principle be made to work in libjxl since we use int32_t buffers in modular (but convert to float atm because everything else like blending is implemented only with float32 types)
2023-09-22 07:25:27
> bits_per_sample is the number of bits per channel of the original image. The encoding of this value depends on float_sample: for integers the value is in range [1, 31], for floating point the value is in range [5, 32].
2023-09-22 07:26:13
the header syntax allows signaling a bit depth up to 64, but that would be out of spec if you go above 31 for int and above 32 for float
2023-09-22 07:27:40
so we _could_ in the future extend the spec and have a new profile/level that goes up to 64-bit, which would require implementing modular in int64_t and using double buffers, if the need would arise
2023-09-22 07:28:13
but at the moment the spec limits are int31 and float32, and the libjxl implementation limits are int24 and float32
2023-09-22 07:31:51
the use cases where you need more precision than that are quite limited and you can of course always also just use more channels and manually split the precision bits. That's why we chose to limit it to what can be conveniently done with 32-bit buffers — having additional code paths for 64-bit would be kind of overkill and unnecessary code complication/binary size bloat imo.
DZgas Ж
2023-09-22 08:41:04
Noise generation is not a one seed for noise??
_wb_
2023-09-22 11:10:00
this is weird — noise is supposed to be deterministic
2023-09-22 11:10:52
<@179701849576833024> <@604964375924834314> any idea what is going on there?
2023-09-22 11:11:13
does this also happen at -e 7 ? could be a bug only in e8+
spider-mario
2023-09-22 01:40:55
it could be that the noise is a red herring
2023-09-22 01:41:12
does it not happen at all without it?
jonnyawsom3
2023-09-22 01:44:26
The first and second I could see being slight error in the noise, but the third being almost 1/3 larger? Hmm...
Mrtt
2023-09-22 03:13:43
If noise is generated on multiple threads, the sequences may not be the same on each runs, either each thread should have his own noise generator with the same seed or the behaviour starts to be non determinist
veluca
2023-09-22 03:23:34
noise generation is (supposed to be) 100% deterministic, it uses a written-in-the-spec RNG and a written-in-the-spec seed
DZgas Ж
The first and second I could see being slight error in the noise, but the third being almost 1/3 larger? Hmm...
2023-09-22 09:28:14
the first and second files are a problem. With identical encoding parameters use the one file, the result should always be identical byte by byte. when using the noise generation parameter, this is not observed
spider-mario
2023-09-22 09:29:23
but only then?
DZgas Ж
spider-mario but only then?
2023-09-22 09:29:38
?
spider-mario
DZgas Ж ?
2023-09-22 09:30:28
you say “when using the noise generation parameter, this is not observed”; I am wondering whether, when not using the noise generation parameter, it is always observed
2023-09-22 09:30:51
i.e. is it only with the noise generation parameter that there is this anomaly
2023-09-22 09:31:23
(not trying to minimise the issue, just to get some clue as to what could be causing it)
DZgas Ж
2023-09-22 09:32:37
oh
2023-09-22 09:33:10
having started doing tests with a other images, all the problems suddenly disappeared <:monkaMega:809252622900789269>
spider-mario you say “when using the noise generation parameter, this is not observed”; I am wondering whether, when not using the noise generation parameter, it is always observed
2023-09-22 09:35:25
here is an image with which I observe obvious problems, perhaps problems in it. -e 9 -d 2.85 --noise=1
2023-09-22 09:38:28
I have done tests compression on 10 other images, this problem is not observed anywhere
spider-mario i.e. is it only with the noise generation parameter that there is this anomaly
2023-09-22 09:40:24
Yes. only when the noise parameter is activated. in normal cases, everything is fine
2023-09-22 09:41:05
and now it also turned out that I was lucky, I tried the noise parameter for the first time, and it broke in my first picture
monad
2023-09-23 01:18:21
Might need more context to reproduce. I'm always getting 6779 bytes with my build of 97e5ab09.
nec
2023-09-24 04:14:02
Sometimes when I encode such patterns, I get a kind of artifacts. It appears at 5-9 efforts, so I suppose it's caused by gabor-like transform. It reduces filesize a lot, but similarly a huge ssimulacra score drop in such particular cases. Stats for a full image at -q 85, -e 4 728kb 82.34 ssimu, -e 5 404kb 67.95, -e 9 407kb 69.65. It's rather rare, but also easily perceivable, due to big value changes at corners, and sometimes sides of 32x blocks. Is it possible to improve or predict it? A crop for demonstration.
Traneptora
2023-09-24 07:28:11
Disabling gaborish is a good idea for checkerboard-like scenarios
2023-09-24 07:28:18
such as manga scans
2023-09-24 07:28:37
the encoder won't do that automatically - that's something where there's room for improvement
2023-09-24 07:28:52
you can disable it manually in cjxl with --gaborish=0
fab
2023-09-24 09:35:55
D 5.404 probably need JPEG XL 2 with traneptora encoder
2023-09-24 09:36:21
And the processing time is something that doesn't know
2023-09-24 09:36:38
Because they rely on heuristics
nec
2023-09-24 12:11:39
I've tried --gaborish=0 and it might be slightly better for such patterns according to ssimulacra score and filesize, but has no effect on these grid-like distortions. So maybe it's chroma from luma that is also added at effort 5 that causes it. Here is a pixel value difference map and you can see that the strongest distortions are concentrated at the corners of 32x32 blocks. It's fixed by higher bpp, that happens by default with -e 1-4 or when used with -q 92-93 and -e 5-9. I'm not sure if it's even a problem, because -e 4 -q 60 provides similar size, but disastrous quality below 50 ssimulacra. There is no even a choice between -e 4 -q 60 at 399kb and -e 5 -q 85 at 404kb. It's just that it would be perfect if 5-9 efforts would spend more bits in such 0.1-1% exceptional situations to give something around 80-82 ssimulacra score.
fab
nec I've tried --gaborish=0 and it might be slightly better for such patterns according to ssimulacra score and filesize, but has no effect on these grid-like distortions. So maybe it's chroma from luma that is also added at effort 5 that causes it. Here is a pixel value difference map and you can see that the strongest distortions are concentrated at the corners of 32x32 blocks. It's fixed by higher bpp, that happens by default with -e 1-4 or when used with -q 92-93 and -e 5-9. I'm not sure if it's even a problem, because -e 4 -q 60 provides similar size, but disastrous quality below 50 ssimulacra. There is no even a choice between -e 4 -q 60 at 399kb and -e 5 -q 85 at 404kb. It's just that it would be perfect if 5-9 efforts would spend more bits in such 0.1-1% exceptional situations to give something around 80-82 ssimulacra score.
2023-09-24 01:33:33
They won't
2023-09-24 01:33:56
In this way we would have dinosaurs
OkyDooky
2023-09-24 07:36:45
https://github.com/mastodon/mastodon/issues/20255#issuecomment-1557704455
jonnyawsom3
2023-09-25 12:31:17
I remember seeing that thread months ago, not promising for JXL unfortunately
DZgas Ж
monad Might need more context to reproduce. I'm always getting 6779 bytes with my build of 97e5ab09.
2023-09-25 08:30:59
I used the last build that I downloaded for windows x64 on the same day https://artifacts.lucaversari.it/libjxl/libjxl/latest/
DZgas Ж Noise generation is not a one seed for noise??
2023-09-26 04:57:06
_wb_
DZgas Ж
2023-09-26 06:57:26
this nondeterministic encoding is weird — so you can reliably get different encode results on the same call, but only for one specific input image?
2023-09-26 06:57:52
what is the format of this input image? do you still get the problem if you first convert it to some other format like ppm?
2023-09-26 06:58:36
could you also try encoding with a single thread to see if it's related to that?
DZgas Ж
2023-09-26 08:33:17
the image itself, with which I get such results https://discord.com/channels/794206087879852103/794206170445119489/1154893743774765196
_wb_ could you also try encoding with a single thread to see if it's related to that?
2023-09-26 08:35:17
the same problems with 1 thread
_wb_
2023-09-26 08:36:42
Does it also happen at e7?
DZgas Ж
_wb_ Does it also happen at e7?
2023-09-26 08:38:03
no, it only on e8 and e9
2023-09-26 08:43:18
perhaps i need to download some ready-made package of photos for compression and check each one there
2023-09-26 09:01:03
I took a classic collection of photos https://github.com/MohamedBakrAli/Kodak-Lossless-True-Color-Image-Suite , and found that the photos are numbered: 1 2 3 4 5 7 8 9 10 11 12 14 15 16 17 18 19 21 22 23 24 they have problems, their file size is always different. But the: 6 13 20 always identical
yoochan
2023-09-26 10:55:49
I can reproduce on Ubuntu : ```cjxl -e 9 -d 2.85 --noise=1 --num_threads=1 3.png 3.jxl JPEG XL encoder v0.9.0 17c4104e [AVX2] ```
2023-09-26 10:56:17
gives different sizes each time : ```Compressed to 84372 bytes (1.717 bpp). Compressed to 88631 bytes (1.803 bpp). Compressed to 88558 bytes (1.802 bpp). ``` etc.
2023-09-26 10:59:57
and I confirm that image 6.png gives the same number of bytes (didn't compared the hashes yet)... <@226977230121598977> you are a good bug spotter 😄
_wb_
2023-09-26 11:38:04
must be something nondeterministic in the butteraugli iterations then?
2023-09-26 11:38:55
but what could cause nondeterministic behavior? uninitialized memory?
2023-09-26 11:39:49
this is potentially a security bug so I think we should investigate with some priority...
2023-09-26 11:47:14
the encoded images decode to different pixels too, so different quantization choices are being made, not just different entropy coding choices
2023-09-26 11:48:38
without --noise=1 the filesizes are a lot smaller too, so I guess there is something broken in the combination of noise and butteraugli iters
DZgas Ж
yoochan and I confirm that image 6.png gives the same number of bytes (didn't compared the hashes yet)... <@226977230121598977> you are a good bug spotter 😄
2023-09-26 11:49:11
🥴 you know, I use jpeg XL once every half a year, and I always find some problems
_wb_
2023-09-26 11:49:47
maybe the butteraugli iterations are driving up the quality, trying to compensate for the noise, and also the encoder-side noise generation isn't properly initialized?
DZgas Ж
2023-09-26 11:50:29
as far as I can understand, the development team does not have any staff of testers who would only do every day that they compressed different photos and looked at them
DZgas Ж all the problems are completely identical. on all parameters from 5 to 9. By the way, now I can say that the problem is definitely not in the red channel, because after extracting it, I saw that it was the red color that worked almost perfectly. While all other colors behave terribly in the image where there is an overabundance of red. original | old | new 1. color correction 2. only red channel 3. all channels except red
2023-09-26 11:52:50
<@1051137277813870592>by the way, I haven't rechecked this problem for half year
2023-09-26 11:54:03
https://discord.com/channels/794206087879852103/794206170445119489/1107299655655641188 as well as the "rows" of pictures that I personally chose for noticeable artifacts that should not be
yoochan I can reproduce on Ubuntu : ```cjxl -e 9 -d 2.85 --noise=1 --num_threads=1 3.png 3.jxl JPEG XL encoder v0.9.0 17c4104e [AVX2] ```
2023-09-26 11:58:57
I had an assumption that other people don't see this bug just because of AVX. that everything is fine with them, and the problem is precisely in some SSE sequences that are caused by some inconspicuous bug. But it's good that it's something more obvious
_wb_
2023-09-26 12:00:28
basically e8/e9 are in general not well tested (for lossy), especially in combination with nonstandard options
DZgas Ж
2023-09-26 12:00:36
I am wondering if it is realistic to create completely identical conditions on a virtual machine in order to record a list of all commands executed in assembler when encoding an image. that would then impose 2 lists of all executed commands to find the moment of divergence in coding
2023-09-26 12:00:53
But most likely the error can be found easier
_wb_
2023-09-26 12:11:22
yeah, something in the noise generation is not properly working when decoding is done by the encoder in the adaptive quantization passes — I'll just disable noise generation there since even if it would work properly, it would not be useful imo (noise will just lower the BA score and make it bump up the quality, while I think it makes more sense to let it do just the same thing as without noise)
2023-09-26 12:25:43
This should fix it: https://github.com/libjxl/libjxl/pull/2825
OkyDooky
2023-09-26 07:17:49
So is there any news about chromium supporting jpeg xl?
gb82
2023-09-26 07:22:40
not afaik
OkyDooky
2023-09-26 07:30:25
Whats firefox waiting for with their neutrality? Safari has it on by default
2023-09-26 07:31:02
And if apple adopts something new faster than anyone else then that sure means something
2023-09-26 07:31:19
Yeah, wouldn't count much on Google to make the next move tbh
2023-09-26 07:32:18
Maybe when cjxl 1.0 is out and AVIF still has barely any adoption (likely) and they don't have an alternative to it.
Cacodemon345
2023-09-26 07:55:02
I mean Apple went for JPEG 2000, which failed hard ultimately. Whether JPEG XL becomes the next JPEG 2000 in terms of that is the real concern at this point.
lonjil
2023-09-26 08:00:59
pretty sure more websites are already shipping JXL than ever did J2000
Cacodemon345
2023-09-26 09:10:23
Does Safari support JPEG XL animation though?
OkyDooky
2023-09-26 10:14:40
That's a pretty safe deadline to aim for, in my opinion, since you can have reasonable trust that you aren't going to have any major issues, initially, and that things will only get better. In the mean time, Thorium's developer has a repo for the patch that it uses to retain and maintain JXL support. It's likely that it, or parts of it, can be used in other Chromium based browsers. If we can grt a number of those to merge the patch, then it'll be "use literally any browser but Chrome and it'll work," which would be an acceptable point of leverage, I think.
_wb_
Cacodemon345 Does Safari support JPEG XL animation though?
2023-09-27 05:40:07
Yes, that seems to work fine. Not that I think this is a major selling point for JXL — animation is something a video codec like AVIF is inherently better at...
Traneptora
2023-09-27 12:19:36
I'm attempting to run `./ci.sh opt` in libjxl, but it returns an error when building doc
2023-09-27 12:19:49
``` FAILED: CMakeFiles/doc /home/leo/Programs/libjxl/bench/third_party/libjxl/build/CMakeFiles/doc cd /home/leo/Programs/libjxl/bench/third_party/libjxl/build && /usr/bin/cmake -E make_directory /home/leo/Programs/libjxl/bench/third_party/libjxl/build && /usr/bin/doxygen /home/leo/Programs/libjxl/bench/third_party/libjxl/build/Doxyfile.doc error: Specified markdown mainpage 'README.md' does not exist ```
2023-09-27 12:20:29
I'm not sure why, cause README.md exists in the home directory
runr855
2023-09-27 02:47:25
Another reason it's great that Apple has implemented libjxl, is the amount of vulnerability testing which it will receive. iOS especially is a huge target for malicious actors
OkyDooky
2023-09-27 06:25:18
Would you mind sharing the link with me or posting it on this issue\: https\:&#47;&#47;github.com&#47;uazo&#47;bromite-buildtools&#47;issues&#47;336 More options for patches might make it easier for the developer to include it. (<@456226577798135808>)
2023-09-27 06:27:32
So, would that mean that AVIF would be a better choice for replacing GIF? If it is better at animation and low BPP, then that kind of sums up the advantages for using GIF over JPG have often been. (<@794205442175402004>)
Demiurge
2023-09-27 06:33:05
That's what it means
username
Would you mind sharing the link with me or posting it on this issue\: https\:&#47;&#47;github.com&#47;uazo&#47;bromite-buildtools&#47;issues&#47;336 More options for patches might make it easier for the developer to include it. (<@456226577798135808>)
2023-09-27 06:33:29
https://github.com/OpenMandrivaAssociation/chromium-browser-stable/blob/master/chromium-restore-jpeg-xl-support.patch
Demiurge
2023-09-27 06:33:50
Video codes are better at animation although JXL is still good at artificial graphics
2023-09-27 06:34:11
Like throbbers
2023-09-27 06:34:20
And sprites
Fraetor
So, would that mean that AVIF would be a better choice for replacing GIF? If it is better at animation and low BPP, then that kind of sums up the advantages for using GIF over JPG have often been. (<@794205442175402004>)
2023-09-27 08:12:35
For most longer gif type use cases, AV1 will still be better than AVIF due to better interframe compression. The main disadvantage is that is can't be put in an <img> tag. (Except in Safari IIRC.)
lonjil
2023-09-27 08:18:02
I thought any valid AV1 stream could be put in an AVIF file
Fraetor
2023-09-27 08:33:13
Maybe I'm misunderstanding it. I thought there were some limitations imposed by libavif?
2023-09-27 08:33:49
Like it was intra-only?
lonjil
2023-09-27 08:39:50
pretty sure that is not the case
Fraetor
2023-09-27 08:45:23
That's nice then. Go AVIF for animation!
lonjil
2023-09-27 08:46:11
really they should just allow webm in img tags
Fraetor
2023-09-27 08:46:40
Yeah.
OkyDooky
2023-09-27 10:32:24
Thanks. I've been mulling around the idea of an image board, but it would auto-convert uploads to more modern codecs (maybe in-browser like jpegxl.io does). So, pretty much Everything-\>JXL, but it would allow AVIF to pass through. But, this makes me think GIF-\>AVIF and JPG&#47;PNG&#47;Whatever-\>JXL would make sense. (<@1028567873007927297>)
2023-09-27 10:32:48
Thanks, I'll post it to the issue tracker. (<@245794734788837387>)
Demiurge
2023-09-28 12:49:16
JXL should still theoretically be better for certain types of animations that are less efficient to compress with video/DCT codecs
2023-09-28 12:49:58
But in practice right now libjxl isn't as efficient as some gif optimizers are
2023-09-28 12:50:33
Even though jpegxl can probably be more efficient than GIF theoretically.
jonnyawsom3
2023-09-28 12:58:38
Namely artificial images, and the WebP pallete ordering along with possibly bitpacking with modular trickery should close the gap
username
2023-09-28 12:59:41
also for animations aren't blending modes supported but libjxl currently doesn't make use of them when encoding?
Demiurge
2023-09-28 01:27:20
The libjxl encoding tools don't actually take full advantage of what the format is capable of. There is a lot of room for improvement and optimization, but image compression wizards would actually have to get interested in hacking on the tools, and it probably doesn't help that they're written in C++ instead of C...
2023-09-28 01:27:51
And C++ is a very painful language to read...
2023-09-28 01:28:57
Makes it harder for outsiders to get involved compared to C I believe
BlueSwordM
lonjil I thought any valid AV1 stream could be put in an AVIF file
2023-09-28 03:26:22
Yes.
OkyDooky
2023-09-28 06:14:23
I didn't realize he made that project a separate repo. Probably. But, I think it still makes sense here, while this is still the actively used browser. I'll give the other one a look. (<@456226577798135808>)
Demiurge
2023-09-28 07:04:50
C++ is probably the worst language to read someone else's code in, when you think about it.
2023-09-28 07:05:27
Google uses it a lot lately though instead of something like Go
2023-09-28 07:09:54
Because it's one of those stupid "corporate" languages that attract a lot of attention from non-programmers and all of the crappy college courses for programming 101 tend to teach their students C++ because of how hip and happening it is perceived to be.
2023-09-28 07:11:43
So there is a surplus of young and naive newbies fresh off the college assembly line who know how to program very poorly in C++
2023-09-28 07:12:01
And the cycle of stupidity continues...
w
2023-09-28 07:12:27
that's oop for you
Demiurge
2023-09-28 07:12:54
Yes, you can replace C++ for OOP and everything I said would still apply
2023-09-28 07:14:00
It's been the corporate hot sensation for as long as the buzzword was invented, and I'm pretty sure it was designed to make programming harder and less enjoyable on purpose
2023-09-28 07:17:56
Rather than doing things in the most obvious and straightforward manner, try to think of arbitrary layers of abstraction you can apply, without thinking of whether it actually will serve a useful purpose to you later on in development.
2023-09-28 07:18:26
Think of ways to overcomplicate your software without thinking about whether you need that or not
lonjil
2023-09-28 07:18:51
OOP is great
w
2023-09-28 07:18:53
at my corporate job i have to use c++
2023-09-28 07:18:57
at some point i stopped caring
Demiurge
2023-09-28 07:18:59
Or what purpose it serves. Send messages to objects because lol why not it's so cool
lonjil
2023-09-28 07:19:18
And it was invented decades before it became hot
2023-09-28 07:19:50
And the inventor specifically says that C++ is not what he had in mind when inventing OOP.
Demiurge
2023-09-28 07:20:26
Look I can do everything by sending messages to objects. Don't ask me why, I do it for the lulz
lonjil
2023-09-28 07:20:55
Because it's a useful abstraction model
Demiurge
2023-09-28 07:21:02
Is it always?
Cacodemon345
Demiurge Look I can do everything by sending messages to objects. Don't ask me why, I do it for the lulz
2023-09-28 07:21:10
Since when Objective-C was a good example?
lonjil
2023-09-28 07:21:11
What does that mean?
Demiurge
2023-09-28 07:21:12
For everything all the time forever?
Cacodemon345
2023-09-28 07:21:46
IMO C++ with OOP works really really well for scriptable and moddable game engines.
lonjil
2023-09-28 07:21:48
Most programs and libraries will make use of multiple kinds of abstraction
Demiurge
2023-09-28 07:22:00
Having a useful abstraction model without knowing what the use for it is, is useless.
2023-09-28 07:22:19
Why abstract things all the time when there isn't a reason to?
2023-09-28 07:23:09
Sometimes all you want is to call a function, without allocating an object for it
lonjil
2023-09-28 07:23:23
Yes?
2023-09-28 07:23:27
You can do that
Demiurge
2023-09-28 07:23:40
Sometimes it makes more sense to just do what you are trying to do without all this useless OOP boilerplate
w
2023-09-28 07:24:00
yeah you can do fully functional in c++ but it's ugly as hell
lonjil
2023-09-28 07:24:13
Consider that your issues are with poorly designed languages, not with the OOP model.
2023-09-28 07:24:38
OOP isn't even incompatible with functional programming.
Demiurge
2023-09-28 07:25:39
Fair. But I feel like OOP is a dogma and a buzzword that gets dogmatically applied to everything when it doesn't always serve a rational purpose. That's why we have poorly designed languages
w
2023-09-28 07:25:51
i dislike both
2023-09-28 07:26:04
i like my functional bug free code
Demiurge
2023-09-28 07:26:49
I think college should teach test driven development instead of whatever language is "hot"
lonjil
2023-09-28 07:27:22
Many universities are still using Scheme lmao
Demiurge
2023-09-28 07:27:28
And they should teach low level languages so you aren't sheltered from what the computer is actually doing
lonjil
2023-09-28 07:27:48
And the Java courses use ancient Java
2023-09-28 07:27:55
They don't do anything hot
2023-09-28 07:28:12
My girlfriend had to learn C89 in college like 3 years ago.
Demiurge
2023-09-28 07:29:05
New students should learn about pointers and memory allocation so they are familiar with what they are getting themselves into. They shouldn't be sheltered from what the computer actually sees behind the scenes.
w
2023-09-28 07:29:25
y'all goign to the wrong universities
Demiurge
2023-09-28 07:29:45
Hiding the low level stuff doesn't make it go away, it just makes students less prepared
lonjil
2023-09-28 07:29:57
Less prepared for what?
2023-09-28 07:30:05
Writing JavaScript for websites?
Demiurge
2023-09-28 07:30:20
For inevitable bugs and problems in the low level implementation.
Cacodemon345
2023-09-28 07:30:45
System-level programming is nowadays a different thing.
w
2023-09-28 07:30:58
yeah they should be teaching low-code/no-code
2023-09-28 07:31:10
like how to use chatgpt
Demiurge
2023-09-28 07:31:53
Hmm, well I guess some people are trained in JavaScript without any expectations of being able to understand how any of that even is possible behind the scenes... and when their web browser crashes it's all magic to them
w
2023-09-28 07:32:09
even learning those "behind the scenes" is flawed because those often change aswell
Demiurge
2023-09-28 07:32:21
Not really...
w
2023-09-28 07:32:27
for my university the "language" was always an afterthought
Demiurge
2023-09-28 07:32:50
The low level stuff has not changed at all for a long long time and is not expected to change for an even longer time
w
2023-09-28 07:33:45
for my school's systems course the toy lang changed from x86_64 to arm
2023-09-28 07:35:15
for the one of the three computery courses for a CS degree
Demiurge
2023-09-28 07:35:15
Even if the instruction set changes, most things are still the same too...
lonjil
2023-09-28 07:35:31
Soon we'll be seeing computers with magic pointers that know whether they were acquired legitimately and know how they're allowed to be used.
Demiurge
2023-09-28 07:35:57
They know if you've been bad or good so be good for goodness sake
lonjil
2023-09-28 07:36:31
Also I want to point out that pointers in languages like C are not the same as pointers on a hardware level.
Demiurge
2023-09-28 07:36:39
All your other knowledge about low level programming will still apply though when that happens.
2023-09-28 07:36:59
With only the addition of magic pointer rules.
w
2023-09-28 07:37:21
meh i dont think it's worth it
Demiurge
2023-09-28 07:37:43
And it will be useful to know how it actually works underneath regardless of what language you like to use
2023-09-28 07:38:20
It will be easier to understand why things break when there's a problem.
2023-09-28 07:38:57
If the implementation is "magic" then you're just helplessly lost as to why it doesn't always work
Quackdoc
2023-09-28 07:44:31
I still dont understand oop vs non oop, i've tried and it just doesnt click lmao
Demiurge
2023-09-28 07:45:42
I don't think it is supposed to... A friend of mine and I kinda suspect it's designed to be deliberately obscure and take the fun out of programming...
w
2023-09-28 07:45:42
functional takes a different kind of thinking
2023-09-28 07:46:05
(true functional)
Quackdoc
2023-09-28 07:46:13
I dunno, to me it's like, I just tell pc what I want it to do and it do it, modelling and stuff is confusing to me
w
2023-09-28 07:46:25
you can have object modeling in functional
Demiurge
2023-09-28 07:47:03
Kind of how a lot of stuff these days is designed to be intentionally ugly, like corporate globohomo art style.
Quackdoc I dunno, to me it's like, I just tell pc what I want it to do and it do it, modelling and stuff is confusing to me
2023-09-28 07:47:41
That does seem the most natural and obvious thing to do...
2023-09-28 07:48:30
Just tell it what to do... I think they call that "procedural" but it's actually more like "normal"
w
2023-09-28 07:49:41
in oop it's like you turn on your pc
2023-09-28 07:49:45
in functional you get a new pc that's turned on
2023-09-28 07:50:32
mutation is the core of oop and i dont like it
Demiurge
2023-09-28 07:50:47
Define a class, allocate an object, and pass a message to it telling it to turn itself on.
2023-09-28 07:51:08
Lots of pointless busywork.
2023-09-28 07:51:17
Maybe that's what it was invented for.
2023-09-28 07:51:23
To create jobs.
w
2023-09-28 07:51:44
well it's more intuitive since that's how humans normally think
Demiurge
2023-09-28 07:52:01
That's what they say and yet I never normally think like that lol
lonjil
2023-09-28 07:52:26
I get the feeling that you've never worked on anything non-trivial.
2023-09-28 07:53:01
also why do you use the term 'globohomo'?
Demiurge
2023-09-28 07:53:06
I think, "remember what I tell you and do it in this order under these conditions..."
Quackdoc
2023-09-28 07:53:17
I think the idea of bassing things on human intuation is idiotic and narccisitic. somethings click with people better, its as simple as that, I for one literally can't program in python for the life of me and it's not like I havent tried
2023-09-28 07:53:31
however a lot of people find python and that style of coding very intuitive
Demiurge
2023-09-28 07:53:39
It stands for globally homogenized, it's the name of the grotesque art style on most Android phones
lonjil
2023-09-28 07:53:50
🤔
2023-09-28 07:54:01
*really*
w
2023-09-28 07:54:15
that's not a real word
Demiurge
2023-09-28 07:54:49
https://knowyourmeme.com/memes/subcultures/corporate-art-style
Quackdoc
2023-09-28 07:55:29
it's a term thats been around for a long time, globohomo is terrible and I myself hate it
2023-09-28 07:55:44
I hate how deeply associated with material UI it has become since I really like material UI design
lonjil
2023-09-28 07:56:31
it looks like a term intentionally designed to look like something referring to globalism and homosexuality.
w
2023-09-28 07:56:51
woke brain
Quackdoc
lonjil it looks like a term intentionally designed to look like something referring to globalism and homosexuality.
2023-09-28 07:57:01
thats just silly
2023-09-28 07:57:31
here in canada we call homogenized milk homo milk all the time
w
2023-09-28 07:57:42
yeah homo to me was homogeneous first
2023-09-28 07:57:59
that's what the homo in homosexual is anyway
Quackdoc
2023-09-28 07:58:05
for me it's just short for anything with homo*
Demiurge
2023-09-28 07:58:29
Even their skin tones are blue and pink and other neon colors like that so as not to possibly make anyone feel excluded or unsafe.
lonjil
2023-09-28 07:58:32
people do use "homogenized" for terrible racist stuff when talking about globalism, so either way it looks bad
Quackdoc
2023-09-28 07:59:41
so call them a dipshit
2023-09-28 08:00:04
equating every homo* to derogatory nature is silly
2023-09-28 08:00:26
though globohomo is intented as a disparaging term
Demiurge
2023-09-28 08:00:54
I think we can all at least agree that it's a pretty hideous art style at least without getting politically charged. Personally I don't like talking about politics unless it's mocking the whole idea entirely and how ridiculous and artificial and fake all the supposed political issues of our time actually are
lonjil
2023-09-28 08:01:07
what
Demiurge
2023-09-28 08:01:19
And how ridiculous it is that people actually argue and break friendships apart over something as fake as politics
Quackdoc
2023-09-28 08:01:59
I never used to mind discussing poltics but people have taken even the smallest of things to absurd levels of excientment
Demiurge
2023-09-28 08:03:56
Hold on, I think I detect a controversial thought. Let me check social media so I know how outraged I'm supposed to be right now... ah, never mind, you're good. For now.
lonjil
Demiurge And how ridiculous it is that people actually argue and break friendships apart over something as fake as politics
2023-09-28 08:04:03
politics has real impacts on people's actual lives
Demiurge
lonjil politics has real impacts on people's actual lives
2023-09-28 08:04:53
Mostly because people allow themselves to care or pay attention to these vampires that use politics as a way to steal our energy.
2023-09-28 08:05:16
But that's just been my experience.
lonjil
2023-09-28 08:05:52
well, when a politician promises to make my life worse, and lots of people support them, that will make me upset, for I hope understandable reasons
Demiurge
2023-09-28 08:06:21
I got fatigued of getting upset over every politician that does that.
2023-09-28 08:06:48
And eventually decided to stop giving them my precious attention and energy
Quackdoc
Demiurge Hold on, I think I detect a controversial thought. Let me check social media so I know how outraged I'm supposed to be right now... ah, never mind, you're good. For now.
2023-09-28 08:06:58
lol for real
lonjil
2023-09-28 08:07:04
who said anything about being upset *at* a politician
Demiurge
2023-09-28 08:07:17
Truth is every politician promises to make our lives worse and they need us more than we need them
lonjil
2023-09-28 08:07:21
how about being upset with the real shit that actually affects my daily life
Demiurge
2023-09-28 08:07:44
They need us to care about them and think they're important...
2023-09-28 08:09:09
I am still upset all the time with politics and government making my life personally harder on a daily basis but I really try to avoid letting them steal my psychic energy by wasting brain cells thinking about them or reading the news these days.
2023-09-28 08:09:56
There's nothing I can actually do about it as long as everyone still believes that they are their rightful lords
2023-09-28 08:10:22
And that they are important and are supposed to run their lives
2023-09-28 08:10:56
It's not my government and there really is nothing I can do about them other than try my best to ignore them
2023-09-28 08:11:44
Especially since everyone else still thinks we need our exalted rulers
2023-09-28 08:12:53
No matter how much they lie about things or betray the supposed agreement or contract we SUPPOSEDLY have with them
2023-09-28 08:13:22
Without any consequences of course
2023-09-28 08:14:55
So the sooner you accept that it's not your problem, they don't work for you and there's nothing you can do except stop giving them energy, the better I think...But that's just my opinion right now.
w
2023-09-28 08:15:16
doomer brain
2023-09-28 08:15:25
politics is important
lonjil
2023-09-28 08:15:46
I have to wonder whether the things that are making my life worse are quite different from the things making your life worse.
Demiurge
w politics is important
2023-09-28 08:16:17
Yeah well I doubt that's a convincing enough argument to make me reconsider...
w
2023-09-28 08:16:51
policy is important
Demiurge
lonjil I have to wonder whether the things that are making my life worse are quite different from the things making your life worse.
2023-09-28 08:18:48
People usually have different things bothering them, and that's fine. I don't judge or resent you if you have vastly different goals and ideals.
2023-09-28 08:20:51
Although... if your goal is to become a politician, then maybe I'll judge you a little for that :)
2023-09-28 08:21:24
People who are drawn to power are least fit to wield it
w
2023-09-28 08:22:41
but if you want to change policy...
Demiurge
2023-09-28 08:22:52
But I'm not assuming that's your desired career choice.
2023-09-28 08:24:31
Policy is completely irrelevant and impotent, without dutiful computers carrying out the instructions programmed into them...
w
2023-09-28 08:24:54
um okay
Demiurge
2023-09-28 08:25:16
Remove the programming and you remove the importance of policy
w
2023-09-28 08:25:35
real armchair programming and politics
Demiurge
2023-09-28 08:26:00
Indeed :)
2023-09-28 08:26:41
I would like humans to question the programming given to them...
2023-09-28 08:27:17
And stop saying they're just following their instructions...
2023-09-28 08:27:40
Not assuming agency for any of their own actions...
2023-09-28 08:28:11
Little more than a computer in this state...
spider-mario
2023-09-28 08:41:20
let’s maybe move this to <#806898911091753051> ?
nec
2023-09-29 01:24:12
Any advantage/disadvantage of using --num_threads=1?
spider-mario
2023-09-29 02:02:20
compression-wise, no
2023-09-29 02:02:30
the compressed/decompressed files should be identical either way
2023-09-29 02:02:37
(if they are not, it’s a bug)
2023-09-29 02:02:54
performance should be the only difference
2023-09-29 02:03:40
if running several processes in parallel, it may make sense to use a lower `--num_threads` for each of them
nec
2023-09-29 02:54:58
Thank you!
Jyrki Alakuijala
2023-09-29 03:08:27
I have a big revamp of image quality in the libjxl encoder pending in a PR: https://github.com/libjxl/libjxl/pull/2836
2023-09-29 03:08:48
it will solve some issues and create some new issues