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-art

JXL Art Bot
2025-07-06 04:07:38
**\_wb\_** _“A selection of Occam's razors”_ 2025 image/jxl 31 bytes [source tree](https://jxl-art.lucaversari.it/?zcode=c8osSUktKMlQsOAKcg5RMDTm4uLKTFMI1%2FbT9QtXsFMw4FJQQOYbmZoCRRQUdBX8XBV0Lc2hnODUnNTkEgVDLhDHsSwdqD5cwZwLAA%3D%3D)
CrushedAsian255
**\_wb\_** _“A selection of Occam's razors”_ 2025 image/jxl 31 bytes [source tree](https://jxl-art.lucaversari.it/?zcode=c8osSUktKMlQsOAKcg5RMDTm4uLKTFMI1%2FbT9QtXsFMw4FJQQOYbmZoCRRQUdBX8XBV0Lc2hnODUnNTkEgVDLhDHsSwdqD5cwZwLAA%3D%3D)
2025-07-06 04:54:45
Nice title
JXL Art Bot
2025-07-07 09:44:35
**\_wb\_** _“Alien Muscle Tissue Sample”_ 2025 image/jxl 37 bytes [source tree](https://jxl-art.lucaversari.it/?zcode=c8osSUktKMlQsOAKcg5RMDLn4spMUwgoSi1TsFMwNDHgUlDQVXAsSw%2FX9gtX0DUEcoHSQI4ukGunAJJGFTEyNQWLQbU55uQAdQFNhYkFp%2BakJpcAbYMrAZtsaMkFAA%3D%3D)
2025-07-07 08:27:37
**\_wb\_** _“Entropie Émergente (Étude nº 241)”_ 2025 image/jxl 28 bytes [source tree](https://jxl-art.lucaversari.it/?zcode=c8osSUktKMlQMDTgcknNKUkMSMxJLSlJ5eLKTFMI1%2FbT9QtXsFMw4NJV8HNV0DUyMQSyHMvSgTIKhlwKCgpcAA%3D%3D)
2025-07-28 10:26:06
**dogelition** _“ITU-R BT.2111-3 (2K, 10 bit, full range PQ)”_ 2025 image/jxl 234 bytes [source tree](https://jxl-art.lucaversari.it/?zcode=rVaxctswDN3xFfwB3wEgaIlLhgy9TLm0HTL3EiXxkGsu8ZD8fW2XlCUBsGRfNvGBJAi8B0D3m8ftS6DcCtx0m%2BeXbSDOAj%2Fe%2F7x2d38%2FwmotYcUkcL3ZPnZv%2B70Iv7oHJsRw9xNg8xSew1VgghDqN%2B%2B%2Bj6t4WB3Wn7u1xKYAPdQw9lAPtjgEj3A7hg%2BGh51hCvcGUoYQVuF3tw2pZdfGqM8VS15%2F2wuYk2uLMTkvSJJggX%2FXe41eHEuUFswTaZiv%2F9jRadmTZcw3SZzyzRw13xGjxXdqGh3W3rCWxsr3QU9kZbUaW8uow9E28XlEJ5OUYX77ZfTF5MpDRVje32SY8er4rNSyjbfjgijeMsEJX6anElmDYHmPoD3n2mq%2B9r1BBr1mD%2BSotIejS%2B5HDyicoTpEo2ZQVYxiCTaiI1gh9ASbKJ4QrBKRXW%2Bm%2FpCjK9rMnrZashtAQxbTaxLNDDG4URSBYB7m%2BUv1gB6UidPbgApZCWfNEU26%2BBxHFhGzTfxkkt2hgHBOD3I9XT57zny2c%2Biy5rX4%2BuGBSZWrGi8cDmU9rvCxb2Pu1NFCDLNDpf6PqFIxnuELf9L5lC7rz0gCM1mLx7EK1qg4s96m1aZqrVYO5kU5c8TiZWxWxXievhfIbOE0RFhwswKPCvgH)
dogelition
2025-07-28 10:26:30
they updated the standard to change the position of the gradient, and the colors are quantized differently
2025-07-28 10:26:44
+ i found an optimization to save 1 byte
dogelition
2025-07-28 04:35:17
don't know if it was an android or chrome update, but this is actually fixed now on my device (poco f7 pro)
JXL Art Bot
2025-07-28 09:09:30
**\_wb\_** _“Stairs mutating”_ 2025 image/jxl 29 bytes [source tree](https://jxl-art.lucaversari.it/?zcode=c8osSUktKMlQsOAKcg5RMDTm4spMUwjX9tP1C1ewUzAyNeVSUNBVCFfQNTK1BDMdy9KB0uEKhlwA)
2025-08-03 02:07:42
**\_wb\_** _“Entropie Émergente (Étude nº -225)”_ 2025 image/jxl 31 bytes [source tree](https://jxl-art.lucaversari.it/?zcode=c8osSUktKMlQsOBySc0pSQxIzEktKUnl4spMUwjXDQ%2FX9QvX9gsPV7BTMOBSUAAJavsBxaB8BQVdheDUnNTkEgVdIyNTqIh7UWJKZmpeCVgJEteQCwA%3D)
2025-08-11 02:17:33
**eis** _“broken prism”_ 2025 image/jxl 33 bytes [source tree](https://jxl-art.lucaversari.it/?zcode=c0nNKUkMSMxJLSlJ5eLKTFPwC9f1U7BT0DXkUlAAcsPdPYA8AyBHQUFXIVzB0MgCyvZT0DUyNeUCMR3L0sO1%2FUByAA%3D%3D)
2025-08-11 02:17:54
**eis** _“broken prism”_ 2025 image/jxl 33 bytes [source tree](https://jxl-art.lucaversari.it/?zcode=c0nNKUkMSMxJLSlJ5eLKTFPwC9f1U7BT0DXkUlAAcsPdPYA8AyBHQUFXIVzB0MgCyvZT0DUyNeUCMR3L0sO1%2FUByAA%3D%3D)
2025-08-11 03:33:32
**eis** _“the smiling face”_ 2025 image/jxl 116 bytes [source tree](https://jxl-art.lucaversari.it/?zcode=zZFNC8IwDIbv%2BRW5yyDp%2BrWLICp4ElFhZ8G6DcbwUPz9dvELL166gy0lKWlfkuddhT6edqc%2BxBhgvzyihbo7xxaZlIZN6Jo2PnI4XPtuCIBpKSLM2qLiJlEpJ1HhPBEmKL3G1zGsANbD%2BYlsenTlHxmQj85qEmxj%2FIHuMzRTTsNjlmXDW4Xzm8mnx5aEnFKJoEvRe7SVwdIodIpQs0WX6toTOiOEUzRgtJa7JS916x7vnbLy31Uket6IM1%2BudBesZ9tiW%2BNc5ijwEOIzW9yaVMOC7w%3D%3D)
monad
2025-08-14 07:53:53
that'll teach me not to check this channel before sleep
Sirox 𒅌
2025-08-29 11:21:06
_wb_
2025-08-29 12:34:20
ok then
JXL Art Bot
2025-08-29 12:34:27
**\_wb\_** _“The Snake”_ 2025 image/jxl 110 bytes [source tree](https://jxl-art.lucaversari.it/?zcode=rZJNC8IwDIbv%2BRW5j0r3Ud3Jgyh6GsIOPQ8bXaGUIfn%2FmM4N6nm2hCd5C2%2FTjzMFHu5DIGYC6x2PWGqt4Ub%2BNfI3P3l2NM0rANBPwUcClKE3TSV2yaX6i8u2XhaTdlMzqtwZqLS4GQ2tUPKZErO%2BshYeMkpAnbER7jNKQJPRCE1O2a8xGev0UJfolrcC%2F0SrrFWdLTpr8YjpuEksOtGWGlFhT4EenC51Va7vwXmK8hXgpzQf)
2025-09-07 02:13:06
**\_wb\_** _“More Delta Palette Abstract Stuff”_ 2025 image/jxl 32 bytes [source tree](https://jxl-art.lucaversari.it/?zcode=c0nNKUkMSMxJLSlJ5XLKLElJLSjJULDg4spMUwjXDQ%2FX9QvX9gsPV7BTMOBSUAAJavsBxaB8BQVdBfeixJTM1LwSBV1DIEAXBAkgcY0A)
jonnyawsom3
2025-09-07 02:14:48
Delta palette my beloved
lonjil
2025-09-07 04:55:17
what the heck
Haley from hai!touch Studios
2025-09-12 10:21:13
The page is erroring out on Firefox *and* Chromium Android
A homosapien
2025-09-12 10:32:04
Which one?
Haley from hai!touch Studios
A homosapien Which one?
2025-09-12 10:37:18
https://jxl-art.lucaversari.it
JXL Art Bot
2025-09-12 10:38:20
**Haley Halcyon** _“Baby’s First Sierpiński Triangle”_ 2025 image/jxl 28 bytes [source tree](https://jxl-art.lucaversari.it/?zcode=C89MKclQMDQwMuHySM1MzyiBsJ0yS1JSC0AyXFyZaQoVCnYKBlwKCkBmJZQJ5viF6%2FrB%2BQoKugrBqUADoDyEvC5MCKbEAI0PtIWLC1UaKgEA)
2025-09-12 11:03:30
**Haley Halcyon** _“Randomized: Laser Slopes”_ 2025 image/jxl 136 bytes [source tree](https://jxl-art.lucaversari.it/?zcode=bVOxasMwEN31FdqNwDpJjrQUDA3NZAIdNKeJmgQ8pSa0kI%2Fv6ezYkuLNvJPv3bv37j30w2F%2F6MMwBOavp%2BHCwTRsF67ny0Cf7PrN97dwb79%2Btrcbf%2BOy0YzziEZ4wmCDGKFeeI%2BIkM4SNIJVJ7oRbtQEj4WPHaHWzCjngn8GJM%2BQ9n7uKmxRSbVhC0yIMwvTwz%2BwISiTsiD5Nk5ZQ8HSh%2BPABTQlVdv3OJSs0yZHGlTq5O3CB2nnqQmKjspkVqEN0SqkyQqkBsW8wOP8XWSpm6IWf%2FLkVTjxClaqs8ba5YMn7gHY1elxt6DK6fdTGKIC%2BaLAR4c3K8JwEXaOCHE%2BdY5uC%2BtYsbtKajUmrcOV4T8Onh1oG3o1YKB06lqSUW1WEyWkgXw1v%2Fi6sG0aUkpXwNTAGZatYI7okgOYfE1nhToJbkdnJFnOKE2WwT98pBQrMuNKa7NzVe4lgHR02q6551bM26IVpgw4nSLLYxHp0ut8XhJoKD2J8m0hRDS5Qz7uFnP7Dw%3D%3D)
2025-09-12 12:52:21
**Haley Halcyon** _“Waterfall Brushes”_ 2025 image/jxl 38 bytes [source tree](https://jxl-art.lucaversari.it/?zcode=c0nNKUkMSMxJLSlJ5QrPTCnJUDA0MDLh8kjNTM8ogbCdMktSUguAMhZcXJlpChUKdgoGXAoKQGYllAnm%2BAE5piZgnoKCrkJwaglUDiIbrgtSAJMHqXAvSkzJTM0rUdA2hosiVOoilIIUh4MdlJqioGuMXRxqCMJiCMvI1JQLAA%3D%3D)
ignaloidas
2025-10-19 02:00:53
Is there a reference somewhere on how Squeeze makes extra channels (and groups? idk how else to explain what I'm seeing)? Just guessing doesn't seem to work for me
CrushedAsian255
ignaloidas Is there a reference somewhere on how Squeeze makes extra channels (and groups? idk how else to explain what I'm seeing)? Just guessing doesn't seem to work for me
2025-10-19 08:05:55
Well there is the official specification but it’s a bit hard to read if you’re not already familiar with image compression systems
2025-10-19 08:06:10
Free versions of it are floating around this Discord
jonnyawsom3
ignaloidas Is there a reference somewhere on how Squeeze makes extra channels (and groups? idk how else to explain what I'm seeing)? Just guessing doesn't seem to work for me
2025-10-19 08:33:34
If you want a technical breakdown, there's a paper explaining all the features of JXL https://arxiv.org/abs/2506.05987v2 Specifically for JXL art, I'm not entirely sure how it works...
ignaloidas
2025-10-19 08:36:36
yeah, I was asking more on how it works for jxl art, seems like there's little control for squeeze in the current tool even if the standard allows for more flexibility (e.g. squeeze levels always go down to 8x8, even if I don't need/want them to do that)
2025-10-19 08:37:39
I guess time to read the specs and see how hard it is to make a tool myself to construct the MA trees and header
Inner Hollow
2025-10-19 08:42:47
i am dumb i can grasp the logic behind the logic tree but i still need a video tutorial
2025-10-19 08:42:51
is there a video tutorial
JXL Art Bot
2025-10-19 09:55:32
**PetrKDN** _“View from Space”_ 2025 image/jxl 35 bytes [source tree](https://jxl-art.lucaversari.it/?zcode=c8osSUktKMlQsOBySc0pSQxIzEktKUnl4spMUwjX9tP1C1ewUzDg0lXwc1XQtYQAIM%2BxLB0oqwDmKSgocAEA)
𝖇𝖔𝖇𝖔𝖇𝖔
2025-10-20 04:50:45
Where is this bot getting its art from
2025-10-20 04:51:01
Can anyone showcase their art here too
2025-10-20 04:51:04
?
jonnyawsom3
2025-10-20 05:10:17
When people submit their art on the website, the bot posts it here
2025-10-20 05:11:47
If it's regular art instead of made with MA trees, probably fine to post in <#803950138795622455> or <#806898911091753051>
monad
𝖇𝖔𝖇𝖔𝖇𝖔 Where is this bot getting its art from
2025-10-20 09:35:18
click the "source tree" link
𝖇𝖔𝖇𝖔𝖇𝖔
2025-10-20 10:58:40
Ah alr thx for the info
Inner Hollow
𝖇𝖔𝖇𝖔𝖇𝖔 Where is this bot getting its art from
2025-10-20 07:57:35
i learned that if you press publish on the art site a bot publishes it here
2025-10-20 08:02:51
whats the easiest way to make seemingly random noise image?
2025-10-20 08:05:06
wait what
2025-10-20 08:05:16
every time i press run without changing anything it changes the image
2025-10-20 08:05:21
im stupid
2025-10-20 08:05:25
what am i doing wrong
jonnyawsom3
Inner Hollow whats the easiest way to make seemingly random noise image?
2025-10-20 08:05:56
https://discord.com/channels/794206087879852103/824000991891554375/1365778611570741372
Inner Hollow every time i press run without changing anything it changes the image
2025-10-20 08:06:26
Can you press the share button and paste the link here?
Inner Hollow
Can you press the share button and paste the link here?
2025-10-20 08:06:47
https://jxl-art.lucaversari.it/?zcode=dVDLCsIwELznK_ZeAkmfngQV0VMEFXKWGttcqkgQ_Xt32_QRqrfZYWdmZ9fWXc3D1bBgh6c1jbs4e2-gYMfNGXLG7A0-sAQZMwDEJWKBEICD8gjpN9KZ6MaW0Ls9UZ6g7dWrUpHSEEE8Y7eI4lFMbmkhwjVNYj5qh5BxL4iRP2jKkV2RtlSS9wXKiZEf5TQqLNh5nozDg-ZcKubK8Brt7wh1MhPsbyC9Owoeqsgk6wto3OeDAUYYW9XOXIFLNg1J2oO_
2025-10-20 08:06:54
im still learning tho
2025-10-20 08:07:06
so i could totally be missing something
jonnyawsom3
2025-10-20 08:08:41
It fails to decode for me ```JPEG XL decoder v0.12.0 6efa0f5a [_AVX2_] {Clang 20.1.8} Failed to decode image DecompressJxlToPackedPixelFile failed```
Inner Hollow
2025-10-20 08:08:50
huh
It fails to decode for me ```JPEG XL decoder v0.12.0 6efa0f5a [_AVX2_] {Clang 20.1.8} Failed to decode image DecompressJxlToPackedPixelFile failed```
2025-10-20 08:11:20
jonnyawsom3
2025-10-20 08:13:03
Oh, it's a noise texture? It's just black for me with a few random pixels every time I press run
Inner Hollow
2025-10-20 08:13:58
hm thats odd
2025-10-20 08:14:17
shouldnt... the.. thing work the same on every device..?
TheBigBadBoy - 𝙸𝚛
2025-10-20 08:47:35
I have the same as jonnyasom2
2025-10-20 08:47:45
maybe try to delete cache?
JXL Art Bot
2025-10-21 01:57:59
**Jonnyawsom3** _“All RCTs (No-Channel-Permutation)”_ 2025 image/jxl 894 bytes [source tree](https://jxl-art.lucaversari.it/?zcode=7ZS%2FTsMwEMb3ewq%2FAJLtuE66ILUwMKCoAqTMFQ2tB1pUDIK3xwmBxME34fGbcved7%2FO%2F%2BLc6uuetd6cjXb%2Bd%2B0AoKSWtnd%2B1L%2F4gKmrcLny1NBXdtG5%2F8N%2Fx3dWDkFSf%2FO321RO5J%2FEoLoMixBCqEPbJx6AP6WZzbt8nkhAXopllahz%2BGQ3t%2BuftXUv9J1d22rQPHbqaDBm0Qk%2B0UTWROuqLmd5Ndd%2F2J8JWJONVMB1qadlKerXcDIrzMZKrFDbtpZdsh%2BYqqfPWJrUDzc1aMt4ld0SlZpy4m7MVV0ivlPNnb5M7noox4i6N%2B8EkJR5KSOt%2B14ZSo3%2FfCM1r0XMNSRO5xB7jQ%2F3RafUvnCjgBDgBToCTPDjRwAlwApwAJ3lwUgAnwAlwApzkwYkBToAT4AQ4yYOTBXACnAAnwEkenFjgBDgBToCTPDgpgRFgBBgBRr4A)
jonnyawsom3
2025-10-21 01:59:52
embed
2025-10-21 01:59:56
https://embed.moe/auto.gif?q=https%3A%2F%2Fcdn.discordapp.com%2Fattachments%2F824000991891554375%2F1430012686086967346%2FRCTs.jxl%3Fex%3D68f83a98%26is%3D68f6e918%26hm%3D7d64339e7b96916e02936b946e6be5e2ee9b9571d57d2fc7fd2dae1f7d3297b5%26
jonnyawsom3
2025-10-21 02:01:10
The JXL plays at 1 fps, so sorry about the epilepsy from the bot
2025-10-21 02:05:25
embed
2025-10-21 02:05:29
https://embed.moe/auto.gif?q=https%3A%2F%2Fcdn.discordapp.com%2Fattachments%2F824000991891554375%2F1430014080449511495%2FPhoton_Noise_Frame_Seed_Demo.jxl%3Fex%3D68f83be5%26is%3D68f6ea65%26hm%3Db1d691ca47dc463287c1e49f4f8f133a15edd3fa64bec48568652749073a5e2a%26
jonnyawsom3
2025-10-21 02:05:49
Discord previews strike again
_wb_
Inner Hollow https://jxl-art.lucaversari.it/?zcode=dVDLCsIwELznK_ZeAkmfngQV0VMEFXKWGttcqkgQ_Xt32_QRqrfZYWdmZ9fWXc3D1bBgh6c1jbs4e2-gYMfNGXLG7A0-sAQZMwDEJWKBEICD8gjpN9KZ6MaW0Ls9UZ6g7dWrUpHSEEE8Y7eI4lFMbmkhwjVNYj5qh5BxL4iRP2jKkV2RtlSS9wXKiZEf5TQqLNh5nozDg-ZcKubK8Brt7wh1MhPsbyC9Owoeqsgk6wto3OeDAUYYW9XOXIFLNg1J2oO_
2025-10-21 08:09:50
it's a malformed tree, it misbehaves when you do that. you have ``` if y > 12 [then something] [else] if y > 136 ```
2025-10-21 08:10:52
the `y > 136` is not an allowed test in the branch that has y <= 12, since it will always be false. Only tests are allowed that can still split the remaining range.
2025-10-21 08:11:19
I'm not sure what exactly happens in this case but I think it just writes a bad jxl that the decoder will refuse to decode
Magnap
2025-11-10 09:01:57
I'm not entirely sure which channel this would fit in, but I think the best fit here: is there a tool to extract the MA tree from a Modular JXL? Or just setting all the residuals to 0? Essentially converting an arbitrary JXL into its underlying JXL art I know that the prediction models that the MA trees describe are autoregressive, so the resulting images probably wouldn't be all that interesting-looking without the residuals to guide the prediction process in the right direction I tried looking at the various crates, but I didn't spot a way to manipulate the bitstream in this way
AccessViolation_
Magnap I'm not entirely sure which channel this would fit in, but I think the best fit here: is there a tool to extract the MA tree from a Modular JXL? Or just setting all the residuals to 0? Essentially converting an arbitrary JXL into its underlying JXL art I know that the prediction models that the MA trees describe are autoregressive, so the resulting images probably wouldn't be all that interesting-looking without the residuals to guide the prediction process in the right direction I tried looking at the various crates, but I didn't spot a way to manipulate the bitstream in this way
2025-11-10 09:33:34
I don't know if we have a tool for that, but we do have the code for generating these: [The JPEG XL Image Coding System](https://arxiv.org/pdf/2506.05987#subsubsection.5.2.3)
2025-11-10 09:34:34
so this does give you the MA tree as well
Magnap
2025-11-10 09:41:53
Ah that's cool 😄 figure 26 is (cooler than) the sort of thing I had mind, but for arbitrary trees
veluca
2025-11-10 09:42:17
that's in the encoder IIRC though
2025-11-10 09:42:48
(not that it'd be too hard to do that in the decoder too, with some code change)
AccessViolation_
2025-11-10 09:42:53
you could potentially try altering the code to replace all would be residuals with 0 at encode time, though prediction error is a property which itself can be used as a decision node in MA trees, so there might be side effects that mess everything up depending on how you do this
2025-11-10 09:43:37
iirc the images in figure 26 are entirely created using the jxl art tool
Magnap Ah that's cool 😄 figure 26 is (cooler than) the sort of thing I had mind, but for arbitrary trees
2025-11-10 09:49:50
I was messing around with the code used for generating Figure 27 some more here https://discord.com/channels/794206087879852103/1346574799396147220
2025-11-10 10:06:46
I thought there were more examples there, I think I posted a handful in some channel instead
Magnap
AccessViolation_ you could potentially try altering the code to replace all would be residuals with 0 at encode time, though prediction error is a property which itself can be used as a decision node in MA trees, so there might be side effects that mess everything up depending on how you do this
2025-11-10 10:40:15
Oh yeah, that's a second level of autoregression kinda
jonnyawsom3
AccessViolation_ so this does give you the MA tree as well
2025-11-10 03:13:47
Kinda. It gives you the tree in a formatted graph file, so you can't edit it or use it for another en/decode
AccessViolation_
2025-11-10 03:14:50
yeah that's what I meant ^^
jonnyawsom3
2025-11-10 03:17:56
MA tree saving/loading has been brought up a few times as something for the API. It'd be nice if it was formatted to match jxl_from_tree, then we could do such editing with existing tools
pshufb
2025-11-20 09:48:45
my algorithm for creating this sucks but it's supposed to resemble the mona lisa 🤷‍♂️ https://jxl-art.surma.technology/?zcode=lVixkt02DOzfV7zekxkCBEmwcRE3rp3M5APii32diyt8f5_TkwVQwg7N6ziSKIDAYrHgP89fX77fqfHt89Pzt-8vdy719ufzy9enH2_P9fbl09_3dLs9_3d_vX-8U27b8ufbUtUelnwsOZEtmbflv9sHtz_ufz293D9wOR6l41HOtrJfk3_nW2vcWo6VuFWSuLWHrVKPVc3h-xxNVXvZybws1SKg6Z1nrdFqC9-X0X74v8T_X46wexnTIDmaaseqFdua35lBiV7maErUTsUOFjGrnksQJY5RevMyIEj4WBWQ3xR9sn-UuhKuamfWNR_FfgaQEv1hOQd8B1m34-Vj1Zq97upV2OIhIlxaP1ZEMUo1noLYwkQ11hnFOmODFQ_eiac9WZ56zBPPKkLD9yVik5IlirJa-KItLzDfS5aEX0W0ew82J2DYUE6SV44mFqoqnlPDsVhFN1nzvrr30YEOXC7FMwmqQMMO9TOSYRMAg2MB5Tac-zhiRC2lCNsNelY5kXEksncfEGzstkNvT6mhMAMU9kk3UF7i5TypftRtPMJ5JZisZ1w9oFOtUZW2ROM8a05TGvfwWUxJZIl385l3HwCKzb-kGfYY1Fc8X6EzdTw0TLQUC7N5ISFepQlJFavkavVByRVE9kpn_wDUAQC1V4GWpRbUzj_brDaHS_JGwtnFQ1npC11H1lmJkPk-xAUQh0Rb1ZpWi2lviIidTKitMGczGgSqritgWudNclG8M-IumtM7NYjMlDCqxTaRs6h45JKw3ZZXL-DVrBOzCCeRN5UGB8zUoPxoSbuPJb2i1ax-u6w04mxolnLmpKFQtoegSbZYp-RjCml2eBBodgBcagzJbLzVaAmYtXijjI2tRF-1XhTh5qq2s_LYnvV-yd_pzwqEWHaxqemsXn8Hmy1WplFAKclMJhq_gFYqQGDm887HYdOKmp7ycetTMQ3ELwD-AEzHIC2dSs4M-eD-NfocRXDMdAfCs_BFRj4ybSLPGZIvCmXnSkBgMus4uax5Vb0W8gq5uRr2iRjM0mBsl34ecH83KzQ-w2QvK51oUikTd2tbKfVm3N2XilDNSV2SJx7v4i2ehhuTY-XCb5jQqKBZABSRS2sC2pqAuKbanIlohbt6H8XEMTQYZEvyA_jdSYnactAf7o34azT_gExTc_B3BmFCw6CfmSuwkmZT1mYwbAFjzuksXuYgLQRcZO893JfaW_JDJQORGsSy5aVfJcb2WsoSjPt5Kr_AC2SneHaaGfP7OFBt4C9SJhqn0IRCuov3BDINpkcSnt0UyOwWphhh-RVsXSoqkkEWORmUlRmg5QgLb2II_jwrMjDhDzKgXQa3vXWByDJgJ53Z7XWOaWMYMASgrLRB8doYDvgBmOXhmgykT9c4kS55fChnGzHBaNIBo9fhXhTcdMk0ZsO9rywNouU8Tf40wno138_oAtOvAzn5dR1qRjQ7LYF7vY7uYGnGk6DTe79zSeuNyhdg2Mm61oWdfhjcJCuoDO6Xm-TX07U2iLyCzPvFF9W6pHr6ufgetmKqKrhDzKMkjrlF49cQIGcR0OQzKgMFUyOYfjqgVtJptwejBTnhoXsYjcjtFaC-OmXJZMabXwSWlQGg-bTV1yQQD0t3E4WH5i0SSS6ejnduD4ghNKwMjAZ2aAxfHy72_wc if you run it through libjxl w/effort 9 it does better 🫢 (edit: as in, libjxl does better. again, the algorithm kind of sucks 😔 )
_wb_
2025-11-21 07:38:27
we should add a way to jxl-art to specify the residuals per node (say, as a list of numbers followed by another list of numbers that gets repeated as long as needed), instead of only allowing infinitely repeating zeroes in all nodes (which would be `[], [0]`). That would make it a lot more expressive, since you'd no longer have to rely purely on the predictor offset like it is now.
pshufb
_wb_ we should add a way to jxl-art to specify the residuals per node (say, as a list of numbers followed by another list of numbers that gets repeated as long as needed), instead of only allowing infinitely repeating zeroes in all nodes (which would be `[], [0]`). That would make it a lot more expressive, since you'd no longer have to rely purely on the predictor offset like it is now.
2025-11-21 05:30:34
that would be wonderful!
itszn
_wb_ we should add a way to jxl-art to specify the residuals per node (say, as a list of numbers followed by another list of numbers that gets repeated as long as needed), instead of only allowing infinitely repeating zeroes in all nodes (which would be `[], [0]`). That would make it a lot more expressive, since you'd no longer have to rely purely on the predictor offset like it is now.
2025-11-25 04:04:53
My current project is semi related to this (setting residuals)... more to come... 🤔
2025-11-25 05:45:13
My script finally finished.... May I present the first ever JXL hashquine! This JXL image displays its own MD5 hash! ```bash $ md5sum jxl-hashquine.jxl c0dec000ec179f9af04ef4d7ee0c6c59 jxl-hashquine.jxl ```
2025-11-25 05:49:50
I'll do a technical writeup of this at some point but whew it involved so many hacks to get working
AccessViolation_
2025-11-25 05:59:04
woah!
2025-11-25 05:59:05
impressive
veluca
2025-11-25 06:00:43
I imagine having the md5 start with 'c0dec000' was for extra flexing
itszn
veluca I imagine having the md5 start with 'c0dec000' was for extra flexing
2025-11-25 09:38:00
To be honest that was the easiest part. You can brute force 32bit prefixes of md5s in about 5 min on a laptop
veluca
2025-11-25 09:38:29
yep, that makes sense
2025-11-25 09:38:48
did you do patch copying + arbitrary bytes in the red part for changing md5?
itszn
veluca did you do patch copying + arbitrary bytes in the red part for changing md5?
2025-11-25 09:42:36
Yes I modified jxl_from_tree to allow arbitrary error bytes to be supplied, but I also had to do a bunch of messing with the encoder and compression settings, such as crafting a specific Huffman tree that allowed me to replace arbitrary bytes in the file after encoding
veluca
2025-11-25 09:43:03
ahhh nice trick
2025-11-25 09:43:50
I am guessing you could have gotten the same result possibly more easily by adding a 8-bit huffman code for a patch frame that never actually got used
lonjil
2025-11-25 09:44:00
now to nerdsnipe someone into improving jxl_from_tree by a lot by announcing a "smallest jxl hashquine challenge"
itszn
2025-11-25 09:46:13
You can certainly make it a lot smaller, most of the size comes from the lack of compression. I think if you change up the Huffman tree you probably can trivially reduce the size by at least a factor of 8. Could also do it in fewer frames, but the prediction tree complexity was growing so I decided to split it into 32 frames
lonjil
2025-11-29 02:54:05
is it just me or does the publish button not work?
2025-11-29 02:55:38
**Lonnie** "*Flag of Cornwall* 2025 image/jxl 42 bytes [source tree](<https://jxl-art.lucaversari.it/?zcode=C89MKclQMDQwMODySM1MzyhRMAMynTJLUlILQBJcXJlpChUKdgqmJpZcCgpATiWQYwzmKCjoKgSnligYgNlQKSOoFEzSEIVnADEDZKAJihmGyGYYo5lhAOVhWIFuCVwDAA>)
JXL Art Bot
2025-11-29 03:59:43
**\_wb\_** _“Cornwall flag”_ 2025 image/jxl 42 bytes [source tree](https://jxl-art.lucaversari.it/?zcode=c8osSUktKMlQMOQKz0wB0QYGBlweqZnpGSUKZkAmV2aaQoWCnYKJiQGXggKUY2oG4oC5lUCukQmECxcwNoMJKCjoKgSnliig8w25MGURMmjmYpiKaiayiTAZLgA%3D)
_wb_
2025-11-29 04:00:12
oh lol I didn't see this was already done
Meow
2025-11-29 04:11:47
For reference the SVG file size on Wikimedia Commons is 359 bytes https://commons.wikimedia.org/wiki/File:Saint_Piran%27s_Flag.svg
TheBigBadBoy - 𝙸𝚛
2025-11-29 04:16:23
or 277B once optimized <:KekDog:805390049033191445>
AccessViolation_
2025-11-29 04:31:31
compressed to 184 bytes with `brotli --best`
2025-11-29 04:32:28
zstd compresses it down to 200 with the best compression. I assume brotli's advantage here is that it has a spec-defined dictionary trained on SVGs among other things
TheBigBadBoy - 𝙸𝚛
2025-11-29 04:36:07
199B with gzip
AccessViolation_
2025-11-29 04:36:19
since zstd supports signaling custom dictionaries, I wonder if at some point the web standard will define zstd dictionaries per IANA media types. so one for `image/jxl` trained on a large corpus to compress a lof of the header away, certain ICC profiles which are duplicated a lot etc.
2025-11-29 04:37:12
same philosophy of brotli, except brotli to my knowledge has a single dictionary trained on a bunch of data
2025-11-29 04:37:41
hmm I wonder if I can download that training data and derive a zstd dictionary from it, and see how it compares
TheBigBadBoy - 𝙸𝚛
2025-11-29 04:37:51
but the post here https://discord.com/channels/794206087879852103/794206087879852106/1444335869778464958 claims the SVG is 186B, trying to find it online but can't