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

Traneptora
2024-02-08 09:21:51
what about BitDepth 1?
Qon
2024-02-08 09:21:52
I want to color the star, so I can add it to the american flag. But I need to clamp the values with some blend mode or something because the values are too crazy to modify by just adding some extra values
lonjil
2024-02-08 09:22:20
maybe there should be an option in jxl_from_tree for the level thing
Qon
Traneptora what about BitDepth 1?
2024-02-08 09:22:25
I can't add color then. But it seems I can't do it either anyways D: I wonder if I can solve that as well...
Traneptora
2024-02-08 09:22:25
perhaps
Qon
lonjil maybe there should be an option in jxl_from_tree for the level thing
2024-02-08 09:22:42
"the level thing" ?
lonjil
2024-02-08 09:22:49
> in either case it's still strictly speaking noncompliant because it goes above 16-bit buffer sizes > which you can't do without level10
Traneptora
Qon I can't add color then. But it seems I can't do it either anyways D: I wonder if I can solve that as well...
2024-02-08 09:22:54
why can't you add color anyway?
Qon
lonjil > in either case it's still strictly speaking noncompliant because it goes above 16-bit buffer sizes > which you can't do without level10
2024-02-08 09:23:16
What is "level 10"?
Traneptora
2024-02-08 09:23:51
codestreams are defined to be level 5 or level 10 level 5 codestreams have some restrictions that aren't applied to level 10 for example, `modular_16bit_buffers` header flag must be set to true in level5 codestreams
Qon
Traneptora why can't you add color anyway?
2024-02-08 09:25:18
The blacks are way below 0, and vary a lot for each pixel. So I can't just do blend kAdd and add color, I will max out in each color channel or not even reach 0. And I can't really read the value. And re-calculating it isn't really possible since it's made from many layers.
Traneptora
2024-02-08 09:26:13
I just meant, why can't you just do the same thing you did to get black/white but with other channels
2024-02-08 09:26:36
for example, if you do the white/black thing but for the red channel only, it becomes red/black
Qon
2024-02-08 09:28:36
The technique relies on the pixel output being clamped, while the values before rendering are not. So I can only really do colors available with Bitdepth 1.
2024-02-08 09:30:03
White isn't 255, it's different values in the 100k~ range. And blacks are in the deep negative
Traneptora for example, if you do the white/black thing but for the red channel only, it becomes red/black
2024-02-08 09:30:44
That is possible, yes
2024-02-08 09:31:46
I want #032d61 though
lonjil
2024-02-08 09:32:56
If I understand correctly, trying to use this technique without putting all values outside the available range gives you non-smooth edges like this:
Qon
2024-02-08 09:33:03
Yep
lonjil
2024-02-08 09:34:57
I think you could do this out of range thing with only the alpha channel, then you could set any color your want inside the star, at least.
Qon
2024-02-08 09:35:59
Hmm, sounds reasonable.
2024-02-08 09:36:31
But I would be able to set both colors freely then, by blending with correct math
2024-02-08 09:36:52
I think.
lonjil I think you could do this out of range thing with only the alpha channel, then you could set any color your want inside the star, at least.
2024-02-08 09:48:26
First attempts failed. Maybe I'm doing it wrong? I was setting alpha to only 0 or 255 before.
lonjil
2024-02-08 09:51:16
hm
Qon
2024-02-08 09:51:26
Since red channel is first I might be able to use that (with Prev) and clamp green and blue. Then I can multiply 0 away red if I don't want it. So either max or 0 red, and any values for green and blue?
2024-02-08 09:52:29
The blue in american flag is almost no red (3/255).
veluca
2024-02-08 10:09:53
would using a palette help?
2024-02-08 10:10:36
not that you can do it in jxl_from_tree (IIRC), but you could make a palette that makes 0 and 1 be black and white and you wouldn't have the gradient issue
Qon
2024-02-08 10:17:26
I do want white on the white stripes of the flag though
veluca
2024-02-08 10:18:10
would that be an issue with palettes?
lonjil
2024-02-08 10:23:13
<@265247121261854722> if don't mind, could you explain to me how to get an arbitrary angle that doesn't go thru 0,0? It's easy to make a diagonal that starts wherever (see image below), but I don't understand how to make it go at another angle.
Qon
lonjil <@265247121261854722> if don't mind, could you explain to me how to get an arbitrary angle that doesn't go thru 0,0? It's easy to make a diagonal that starts wherever (see image below), but I don't understand how to make it go at another angle.
2024-02-08 10:30:11
```javascript let p = [] p[0] = {x: 768+Math.floor(Math.random()*50), y: 400+Math.floor(Math.random()*50)} p[1] = {x: 200+Math.floor(Math.random()*50), y: 200+Math.floor(Math.random()*50)} function line(p0, p1, under = false, region) { let k = (p1.y - p0.y) / (p1.x - p0.x) // y = kx + m // y - kx = m let m = p0.y - k * p0.x // console.log({k, m}) let flip = under ? -1 : 1 let y_add = Math.round(flip * -1 * 25600) let x_add = Math.round(flip * k * 25600) let min_y = region.min_y ?? 0 let min_x = region.min_x ?? 0 let s = `if y > ${min_y} if c > 2 if Prev > 254 - Set 255 - Set 0 - N + ${y_add} if x > ${min_x} - W + ${x_add} - Set ${Math.round(flip * m * 25600) + min_x * x_add + min_y * y_add}` return s } function tree_of_region(region, fail_value = 0) { let start = [] let end = [] if (region.max_x != undefined) { start.push(`if x > ${region.max_x}\n - Set ${fail_value}`) } if (region.min_x != undefined) { start.push(`if x > ${region.min_x - 1}`) end.push(` - Set ${fail_value}`) } if (region.max_y != undefined) { start.push(`if y > ${region.max_y}\n - Set ${fail_value}`) } if (region.min_y != undefined) { start.push(`if y > ${region.min_y - 1}`) end.push(` - Set ${fail_value}`) } start = start.join('\n') end = end.join('\n') return [start, end] } let s = `Alpha\n\n` let frames = [] frames.push(`NotLast if c > 2 - Set 255 - Set 0`) frames.push(tree_of_region({}).toSpliced(1, 0, line(p[0], p[1], false, {})).join('\n')) let region_from_pos = p => ({min_x: p.x - 25, min_y: p.y - 25, max_x: p.x, max_y: p.y}) let red = `if c > 2 - Set 255 if c > 0 - Set 0 - Set 255` for (let v of p) frames.push(tree_of_region(region_from_pos(v)).toSpliced(1, 0, red).join('\n')) s += frames.slice(0, -1).join('\n\nNotLast\n') + '\n\n' + frames.slice(-1)[0] console.log(s) ```
JXL Art Bot
2024-02-08 10:30:52
**Qon** _“Line through points”_ 2024 image/jxl 132 bytes https://jxl-art.surma.technology/?zcode=xVDLCsIwELzvV%2BxdCtvNo%2BlF8C5F8OC5SEVBULSI%2Fr1Jm5qkRK%2Fedmd2hpldna%2FHFppLv27vPcDpgHtcIgNigduuR1bqM1Ny97J3ZLlIMiybW%2Fdwu5IDkhqFnWCcG1xgwUqT93p6W8ftLFfruoYgE5pNWXKSxEkqwxBbT7DSUy6XVwqTCRHokj0wq5UvEp1RBM3Nv4nTP4yzj81C5NowVXEbFvSrDZP8c5s3
lonjil
2024-02-08 10:32:57
thank you :)
Qon
2024-02-08 10:33:07
`y_add` and `x_add` control how the pixel values change with position
lonjil
2024-02-08 10:33:16
this handles lines that intersect the left and top borders of the image?
Qon
2024-02-08 10:33:47
It is based on linear equation, it does `y = kx + m`
lonjil
2024-02-08 10:33:55
ah
Qon
2024-02-08 10:34:33
If you do `x = ky + m` then you can get vertical lines as well
2024-02-08 10:35:17
basically swapping `x_add` and `y_add` and maybe something more
2024-02-08 10:36:06
But you can easily do `y = m` vertical lines with `if x > m` so it's not really needed
2024-02-08 10:37:11
I considered doing `x = ky + m` when k is very large though, but I didn't need it for the star, the precision I got was enough anyways.
2024-02-08 10:39:44
Surma website doesn't always report errors, sometimes the image just doesn't change. So that's why I randomize coordinates a bit so that I know if the image has loaded or if I got an error.
lonjil
2024-02-08 10:40:32
ahh!
Qon
2024-02-08 10:43:11
And it doesn't make sense to have a horizontal split for code and output, displays are twice as wide as they are high and code is taller than wide. And image is square and doesn't even need 50% of a vertical split. And the code editor should be Ace, not a basic textarea... I'm considering PR'ing the website or making my own D:
lonjil
2024-02-08 10:46:41
honestly all this stuff makes my head spin
Qon
lonjil this handles lines that intersect the left and top borders of the image?
2024-02-08 10:46:43
Did you run the javascript code?
lonjil
2024-02-08 10:46:56
not yet
2024-02-08 10:47:01
brb
Qon
Qon And it doesn't make sense to have a horizontal split for code and output, displays are twice as wide as they are high and code is taller than wide. And image is square and doesn't even need 50% of a vertical split. And the code editor should be Ace, not a basic textarea... I'm considering PR'ing the website or making my own D:
2024-02-08 10:49:32
Also, the in browser editor would be better if it could also run JS and then run the output, so I don't have to run the JS outside browser and paste output tree description into surma. Because why would I write jxl trees when I can write js that writes jxl trees? :D
lonjil honestly all this stuff makes my head spin
2024-02-08 11:00:16
I can explain the confusing parts of the code if you ask. Though it's time to sleep so I'll answer when I can
lonjil
2024-02-08 11:04:45
I shall sleep soon too
jonnyawsom3
2024-02-09 01:30:00
A different kind of 'JXL Art', but my friend <@129256926088396800> made me a convention badge with my obsession in mind (Safety pin embedded in the back)
Torvid
2024-02-09 01:30:09
<3 <:JXL:805850130203934781>
_wb_
2024-02-09 06:41:04
Wow nice!
monad
2024-02-09 07:00:02
good job
TheBigBadBoy - 𝙸𝚛
**Qon** _“BW Star”_ 2024 image/jxl 410 bytes https://jxl-art.surma.technology/?zcode=zZVLT8MwDMfv%2BRS%2Bo0h5OskFaZy3CYkD54kWgag2BB2Cb0%2B6PvJoVXpBa0%2F5O67tn%2By6m%2Br95UD2p3p7%2BKwJeX2GJ7gFQQAoPJQ1CK2HM0v8vr2f5tzfevHjhdTGi%2BDcnLurVlxkH34w3H%2BUX43tkqh%2F4uSpjZGg93ADVGiMwrdVicjp0TsZa5GkcSSziLNogsQ51wbJMkQ6wagYWsFwxCYlm2LThl%2BBbQEatygzNGoVWmmXoyU4Pen1muWYy4gEMmeFSzqwcCgHthhlGmSMkUJkPcnqb6uP2tE1QxgtjeLz%2B%2BHfqwzf%2FXhuukK5cU6ZuZWGTq5mbNCpfJFNzI3LN9IUWih%2FldOjHIbpuavKY7E7FSW87c7VHz8l2ojojU1REBLcfgE%3D
2024-02-09 10:55:44
Recompressed with `-d 1 -e 9`, cjxl v0.9.2 41b8cdab did not appreciate that <:KekDog:805390049033191445>
_wb_
2024-02-09 11:18:51
Wait what are we seeing here?
2024-02-09 11:19:01
That looks pretty cool
Traneptora
_wb_ Also I keep being amazed at how our flag is just the French flag with the blue channel removed.
2024-02-09 11:19:38
_wb_
**\_wb\_** _“Drapeau Franco-Belge”_ 2023 image/jxl 35 bytes https://jxl-art.surma.technology/?zcode=C89MKclQMLQ04vJIzUzPKFEwNLLgcsosSUktAIqbc4UWFCfmFuSkKphwcWWmKVQo2AFVmHMpKAA5yUCOAZCpoKCrEJxagsI2NDBAKDIESwA5lXAdIHV%2BUAlU%2FVBbzIxR5CCWIqsFAA%3D%3D
2024-02-09 11:23:32
See also this conversation from almost a year ago
Qon
TheBigBadBoy - 𝙸𝚛 Recompressed with `-d 1 -e 9`, cjxl v0.9.2 41b8cdab did not appreciate that <:KekDog:805390049033191445>
2024-02-10 08:33:12
There are some techniques that can be used to keep the numbers down. Maybe using numbers > 16 bits is the reason. I'm not sure why it happens there though, not where I expected issues.
2024-02-11 12:36:20
The values for each step for the equation fields (arbitrarily angled cuts) are multiplied by 256 and 100 (25600) (should probably have been 255 * 100) to get steps that "jump over" the gradient of values 1-254 and get sharp lines like in Bitdepth 1. And the 100 for increased line precision, the k value means one direction gets smaller or larger steps. For slight slopes k != 0 but close to 0, there's a risk of getting a bit of gradient/fuzzy border. (25600 is just a big and small enough arbitrary constant)
2024-02-11 12:43:34
Lower `Bitdepth` means I can use a smaller multiplier. But if I do an `if` on the `N` value and just jump to 255 or 0 instead of landing in the middle then I can reduce the constant by a lot. It would eliminate the need to accommodate the Bitdepth with the constant factor, it would instead just be a constant added/subtracted from the "starting" value ({x: 0, y: 0} when cut is over entire picture).
2024-02-11 12:52:52
I thought about doing an `x = ky + m` equation instead when the `k` values for the `y = kx + m` equation are unreasonable might help as well? Though the values either have to grow fast in one direction, horizontal/vertical and slow in the other, when the line is close to horizontal and vertical in angle. So it might not actually help...
2024-02-11 01:09:19
But near vertical and horizontal lines take up a very small portion of the image along one axis, the tree can be adjusted to only calculate the `field` where a given `x` or `y` value has both black and white sides. And the top left corner starting value can then be adjusted together with the equation to get smaller numbers without moving the cut. With a max image size of 1024x1024, the distance of moving from one corner to the other is 2^11. But a cut in bottom left corner will occupy a small section on the x and y axis, so in reality worst case is a distance more like 2^10. Extreme `k` values need a higher constant factor, but also reduce the impacted range on the x or y axis which kind of cancels out.
2024-02-11 01:15:08
Since Bitdepth 8 is a constant of just 8 bits, and image needs 10 bits for coordinates we would need probably only need ~10 bits ( 2^8 + 2^10 ≈ 2^10) instead of the ~27ish bits I would guess I used for the star.
spider-mario
2024-02-11 08:12:52
```console $ wget 'https://upload.wikimedia.org/wikipedia/en/c/c3/Flag_of_France.svg' $ convert Flag_of_France.svg -channel blue -fx 0 Flag_of_Belgium.png ```
2024-02-11 08:13:05
there’s a bit of green in that blue band, so it doesn’t work 100%
2024-02-11 08:14:10
oh, but that’s the old flag
2024-02-11 08:14:20
with the new one, it works very well indeed:
2024-02-11 08:14:31
(https://en.wikipedia.org/wiki/File:Flag_of_France_(2020%E2%80%93present).svg )
Pieter
2024-02-16 08:56:23
The proportions are incorrect! The Belgian flag has aspect ratio 13:15
spider-mario
2024-02-16 09:14:03
apparently, > The national flag of Belgium was based on the French flag and even though it has an official ratio of 13:15 the unofficial 2:3 ratio is more commonly flown.
2024-02-16 09:14:26
(https://flagmakers.co.uk/media/4fef4erl/flag-of-belgium-%c3%b4%c3%a7%c3%b4-a-brief-history-download.pdf)
_wb_
2024-02-16 11:25:26
13:15 is a very ugly and weird aspect ratio, who came up with that?
spider-mario
2024-02-16 12:26:29
Swiss is 1:1
2024-02-16 12:26:39
any deviation and you risk an “Aazeig isch dusse!!” on /r/BUENZLI
2024-02-16 12:27:24
(example: https://www.reddit.com/r/BUENZLI/comments/18bj2d4/aazeig_isch_dusse/)
Traneptora
2024-02-16 05:11:07
the Ohio flag isn't even a rectangle
2024-02-16 05:11:09
2024-02-16 05:11:22
this would be an interesting JXL art challenge <:heh:853085949667704883>
Moritz Firsching
2024-02-16 09:14:35
I was always fond of the aspect ratio of the flag of nepal: https://oeis.org/A230582 https://en.wikipedia.org/wiki/Flag_of_Nepal "the least root of 243356742235044x^4 - 1325568548812608x^3 + 2700899847521244x^2 - 2439951444086880x + 824634725389225" nice
lonjil
2024-02-16 09:16:59
could we make nepal's flag using jxl_from_tree, I wonder
Moritz Firsching
2024-02-16 09:16:59
Ohio looks also like the coordinates of the corners of the flag are at most algebraic
2024-02-16 09:24:38
<!-- 8*tan(arctan(16/8)/2)-1 v --> is in the comment of the svg of the Ohio flag on wikipedia, Eisenmann's drawing looks interesting
Traneptora
Moritz Firsching I was always fond of the aspect ratio of the flag of nepal: https://oeis.org/A230582 https://en.wikipedia.org/wiki/Flag_of_Nepal "the least root of 243356742235044x^4 - 1325568548812608x^3 + 2700899847521244x^2 - 2439951444086880x + 824634725389225" nice
2024-02-16 09:42:44
this is a great fun fact. TIL
Qon
Traneptora
2024-02-17 11:43:52
I can make the straight line segment shapes, but since jxl_from_tree language doesn't have layer referencing it's not possible to do (but JPEG XL has I think, so the language needs an update I guess) alpha masking to do shapes with alpha and non-BW slanted lines are sometimes tricky or impossible depending on the shape. And some shapes are impossible to do in a resolution independent way with the techniques I created for the star. It doesn't do arbitrary triangles, instead it can make axis aligned rectangles with an arbitrary cut which may be some triangle. In particular, I can make the outside of the 5 point star with this class of triangles but not the inside (the 2 legs pointing down at an angle).
veluca
2024-02-17 11:47:38
wdym layer referencing?
Qon
2024-02-17 11:47:55
I can't think of a way to make circles, except as polygons.
veluca wdym layer referencing?
2024-02-17 11:55:22
Rendering to a layer that isn't shown directly in final image, but can be used to influence later layers. I can do `if Prev > 0`, but that is only on previous color channel (which is also visible), I can't reference or test a completely different previous layer, only render on top of it.
veluca
2024-02-17 11:57:28
yeah you can achieve that with a combination of RCTs and previous channel properties in the bitstream but I guess jxl-from-tree doesn't expose it
Qon
2024-02-17 12:01:03
``` RCT 0: Reversible Color Transform. 0 is no transform, i.e. RGB. 1 is YCoCg. Higher numbers can be used. ```
2024-02-17 12:01:29
What does "higher numbers can be used" mean?
veluca
2024-02-17 12:04:37
there's something like 42 RCTs
2024-02-17 12:04:48
some of which only swap channels around
Qon
2024-02-17 12:04:53
And does jxl support larger color gamut spaces, HSL, oklab, oklch?
veluca
2024-02-17 12:05:06
it supports ICC profiles so yes
lonjil
veluca yeah you can achieve that with a combination of RCTs and previous channel properties in the bitstream but I guess jxl-from-tree doesn't expose it
2024-02-17 12:05:08
I believe Qon wants to access previous *frames*, rather than previous channels. Is this something that can actually be done?
veluca
lonjil I believe Qon wants to access previous *frames*, rather than previous channels. Is this something that can actually be done?
2024-02-17 12:05:17
nope
2024-02-17 12:05:38
but you can add an extra channel that is not rendered in any way, and do your hidden stuff there
2024-02-17 12:05:51
moving it before color channels with RCTs
lonjil
2024-02-17 12:05:55
ah!
Qon
veluca but you can add an extra channel that is not rendered in any way, and do your hidden stuff there
2024-02-17 12:09:19
The wtf doesn't explain how to do that though.
2024-02-17 12:11:01
Is there some example of this tech being used?
veluca
2024-02-17 12:11:06
I don't think anything implements that
Qon
veluca there's something like 42 RCTs
2024-02-17 12:12:10
Are these in the code somewhere?
veluca
2024-02-17 12:12:46
https://github.com/libjxl/libjxl/blob/main/lib/jxl/modular/transform/enc_rct.cc#L19
Tirr
2024-02-17 12:13:41
there's 6x7 RCTs, where high 6 being permutation and low 7 describing how to mix channels
Qon
2024-02-17 12:14:09
ok ty
veluca but you can add an extra channel that is not rendered in any way, and do your hidden stuff there
2024-02-17 12:15:19
What about adding channels?
veluca
2024-02-17 12:16:11
not sure if jxl_from_tree can do it...
lonjil
2024-02-17 12:16:13
I can't find anything in the spec about having extra channels, except for with palette or squeeze
Qon
veluca https://github.com/libjxl/libjxl/blob/main/lib/jxl/modular/transform/enc_rct.cc#L19
2024-02-17 12:23:27
> :22 `// 6 corresponds to YCoCg.` > wtf: `1 is YCoCg.`
veluca
lonjil I can't find anything in the spec about having extra channels, except for with palette or squeeze
2024-02-17 12:23:55
wdym?
2024-02-17 12:24:08
I'm making a patch to jxl_from_tree to show the idea, one sec...
lonjil
2024-02-17 12:25:29
adding an extra channel that isn't rendered. I see some stuff about extra channels but none of it seems like it could be used for this. I must be missing something.
veluca
2024-02-17 12:26:11
there's kOptional
lonjil
2024-02-17 12:27:03
aha!, thanks
2024-02-17 12:27:41
right, I was looking at completely the wrong stuff
veluca
2024-02-17 12:37:57
2024-02-17 12:38:15
``` RCT 0 HiddenChannel Bitdepth 10 if c > 0 if c > 1 if c > 2 if PPPrev > 433 - Set 309 - Set 581 if PPrev > 333 - Set 491 - Set 769 if Prev > 133 - Set 978 - Set 398 if x > 0 - W + 1 - Set 0 ```
2024-02-17 12:39:40
code: https://github.com/libjxl/libjxl/pull/3295
lonjil
2024-02-17 12:40:07
very cool
veluca
2024-02-17 12:40:39
in case you are wondering, the "Set" values were obtained by randomly mashing digits 😛
lonjil
2024-02-17 12:41:11
lol
2024-02-17 12:42:10
I might have a crack at trying to fix the multi frame issue in jxl_from_tree I reported last week. I've been dealing with a sinus infection almost since then so haven't been in the mood for code.
2024-02-17 12:42:34
Then I'll be able to implement patches support
Qon
veluca ``` RCT 0 HiddenChannel Bitdepth 10 if c > 0 if c > 1 if c > 2 if PPPrev > 433 - Set 309 - Set 581 if PPrev > 333 - Set 491 - Set 769 if Prev > 133 - Set 978 - Set 398 if x > 0 - W + 1 - Set 0 ```
2024-02-17 01:01:58
So 1 hidden channel? More would be cool if JPEG XL supports that. 1 hidden makes color easy. 3 hidden would make arbitrary triangles in arbitrary colors possible. Would need `PPPPPPrev` for that though xD, the syntax design is a bit inflexible
veluca
2024-02-17 01:02:39
I could do that...
2024-02-17 01:03:00
Also probably there's a better way than adding Ps to go further back xD
2024-02-17 01:03:57
How about Prev(1/2/3/4/5/6)?
lonjil
2024-02-17 01:05:13
oh, does the format itself support that? I figured jxl_from_tree exposed at least all tree stuff. That would be quite useful. Would `HideenChannel 1/2/3/4` for adding a larger number also be possible?
veluca
2024-02-17 01:05:26
Should be yeah
Qon
2024-02-17 01:05:31
That is an improvement at least. Not sure why it is relative channel indexing instead of absolute though
veluca
2024-02-17 01:05:57
there's a limit on how further back you can go, though... don't remember what the limit is
lonjil
2024-02-17 01:06:05
before you said that, I had a silly idea: doing multiple frames, and using RCTs to mix which channel is first on each frame, so that you can do R, G, and B separately each having access to a hidden channel. Then kAdding them together.
veluca
veluca there's a limit on how further back you can go, though... don't remember what the limit is
2024-02-17 01:09:42
ok, apparently 30 or so channels, that ought to be enough
Qon
2024-02-17 01:11:21
enough for what? absolute reference syntax?
veluca
2024-02-17 01:11:36
no, but for being able to go back as much as you want 😛
Qon
veluca no, but for being able to go back as much as you want 😛
2024-02-17 01:13:01
With more hidden channels I can compose more in a single frame. Elastic demand, I want all I can get and more q:
veluca
2024-02-17 01:13:58
I'm making it go up to 8 hidden channels, and Prev6
Qon
2024-02-17 01:16:25
Why Prev6 and not Prev11: so you can ref first hidden channel in alpha? and why 8 hidden specifically? Though I'm happy we are getting more and more readable syntax
veluca
2024-02-17 01:17:23
I guess I could go up to 11 sure
2024-02-17 01:17:30
as for 8... it's a number 😛
Qon
veluca as for 8... it's a number 😛
2024-02-17 01:18:12
It certainly is <:KekDog:805390049033191445>
veluca
2024-02-17 01:19:21
it seems enough to me for now 😛
2024-02-17 01:50:53
2024-02-17 01:51:04
``` RCT 0 HiddenChannel 8 Bitdepth 10 if c > 7 if c > 8 if c > 9 if Prev10 > 433 - Set 309 - Set 581 if Prev2 > 333 - Set 491 - Set 769 if Prev1 > 133 - Set 978 - Set 398 if c > 4 if y > 0 - N + 1 - Set 0 if x > 0 - W + 1 - Set 0 ```
2024-02-17 01:51:38
of course there's way better ways of getting specifically that image
lonjil
2024-02-17 01:52:07
hooray
Qon
2024-02-17 01:52:36
Should be enough for reducing the .jxl size by a lot for the 5 point star, I can now (when it is committed+approved+added to surma) do it in a single layer and don't even have to make individual triangles for features.
veluca ``` RCT 0 HiddenChannel 8 Bitdepth 10 if c > 7 if c > 8 if c > 9 if Prev10 > 433 - Set 309 - Set 581 if Prev2 > 333 - Set 491 - Set 769 if Prev1 > 133 - Set 978 - Set 398 if c > 4 if y > 0 - N + 1 - Set 0 if x > 0 - W + 1 - Set 0 ```
2024-02-17 01:54:43
nice! <:BlobYay:806132268186861619>
veluca
Qon Should be enough for reducing the .jxl size by a lot for the 5 point star, I can now (when it is committed+approved+added to surma) do it in a single layer and don't even have to make individual triangles for features.
2024-02-17 01:57:28
trying to bring up my own version 😛
2024-02-17 01:59:19
not sure I can get `publish` to work though
JXL Art Bot
2024-02-17 03:29:23
**Fake Mondrian** _“Test”_ 2024 image/jxl 103 bytes https://jxl-art.lucaversari.it/?zcode=bY6xCsIwFEX3fMXdRXjPRJMsDnZxElHBWUykgVJEgujfG2obTXV753IOya46gMQ6OOfbqj61rW9gxCpE56%2BxBpMQ4YIzltAC6E%2BTzgy2gw63N39nSpuSsl%2BBKfY%2BQpIdLXPDZTlLofwJleXRohdWfD%2BYMs7ZW7HaFCyt%2BfxeDfUzAWVvgwm4qGgQH4V4%2FCO%2BAA%3D%3D
veluca
2024-02-17 03:29:30
seems to work 😄
Qon Should be enough for reducing the .jxl size by a lot for the 5 point star, I can now (when it is committed+approved+added to surma) do it in a single layer and don't even have to make individual triangles for features.
2024-02-17 03:29:57
https://jxl-art.lucaversari.it/ now I request to see something amazing! 😛
lonjil
2024-02-17 03:31:43
hooray
Qon
veluca https://jxl-art.lucaversari.it/ now I request to see something amazing! 😛
2024-02-17 03:32:24
I'm on it!
JXL Art Bot
2024-02-17 04:07:07
**\_wb\_** _“Something mildly amazing”_ 2024 image/jxl 40 bytes https://jxl-art.lucaversari.it/?zcode=TYwxCoAwEAT7e8V%2B4CARbS200EpEhdRiTgxIEAm%2B30sh2M3AMFO7wFAfvJfYHmuMcsJSE5KXKx2whijs2FBrpTDe8iiXBTG6e%2FVBYtL%2BJ1zlzvHgtGNLgOqg%2FinAcPhIM0MZZjlly68X
Traneptora
2024-02-17 04:12:11
nice
JXL Art Bot
2024-02-17 04:40:53
**Lonnie** _“Flag of Seychelles”_ 2024 image/jxl 133 bytes https://jxl-art.lucaversari.it/?zcode=lZA9C8IwGIRn%2ByveXQr5bl0c7OKkokLnYqMNSJQSRP%2B9adqEgNri9twldwfvvjgCStaqrqUumkpreQWWrJSp5d00kCfbVkltKqNu2j6UqrbuQtiIVJfGALOYqDOcYGl7BsAeiAcaPjEP3Fm7Vj6oj3SCxYLHQjiRwkEawFQMlPMBqAfCPfE8bJC4aWqwTwsPBGe%2FNzChYQTHVVOLfRyFQhLWPkf6G7%2FcjQFS2MAcMKedsP7T%2BbMUSvvUhWZ%2FpzhGoylEvqUyMbrVlY6H3g%3D%3D
lonjil
2024-02-17 04:41:19
The lack of AA along the edges is sad, but otherwise I am very pleased with this.
Traneptora
2024-02-17 04:56:39
noice
veluca
2024-02-17 05:05:48
I just managed to make it blurrier xD
lonjil
2024-02-17 05:06:55
haha. btw, here is how it looked like when I messed the channels up.
veluca I just managed to make it blurrier xD
2024-02-17 05:07:17
what did you do to do that?
veluca
2024-02-17 05:07:37
enabled EPF and set the sigma to 10000
lonjil
2024-02-17 05:07:42
ahh
veluca
2024-02-17 05:07:46
I don't think you can do that from jxl_from_tree
Traneptora
2024-02-17 05:18:27
what if you just enabled gab
2024-02-17 05:18:30
would that effectively antialias
veluca
2024-02-17 05:25:55
a bit, but not enough
lonjil
2024-02-17 05:35:22
too bad you can't tell jxl to render it at 4096x4096 and then downsample it 😄
veluca
2024-02-17 05:39:54
another funny trick could be to render 4 frames off by 1 pixel, and then blend them together xD
jonnyawsom3
lonjil too bad you can't tell jxl to render it at 4096x4096 and then downsample it 😄
2024-02-17 05:49:45
Could tell JXL that it's already downsampled and then apply 2x upsampling
w
2024-02-17 05:54:31
gab should be renamed to fab
veluca
Could tell JXL that it's already downsampled and then apply 2x upsampling
2024-02-17 05:57:35
I tried, doesn't really work 😦
Lucas Chollet
w gab should be renamed to fab
2024-02-17 06:48:00
And maximum verbosity should be set to default
_wb_
2024-02-17 07:40:52
Default fancy upsampling doesn't look very blurry, so it's not very good at hiding the jaggies here
lonjil
2024-02-17 07:47:50
can you opt in to not fancy blurry as heck upsampling?
_wb_
2024-02-17 07:53:19
You can do custom upsampling, not in jxl_from_tree though
2024-02-17 07:53:30
And it comes with some signaling cost
Qon
veluca https://jxl-art.lucaversari.it/ now I request to see something amazing! 😛
2024-02-17 07:59:33
How do I use `HiddenChannel` with multiple frames? Do I add the header before each frame I want hidden channels for or is it same for all frames?
lonjil
2024-02-17 08:00:12
this version of jxl_from_tree doesn't work with multiple frames anyway
veluca
2024-02-17 08:00:13
oh
2024-02-17 08:00:18
fair
lonjil
2024-02-17 08:00:21
see this bug: https://github.com/libjxl/libjxl/issues/3264
veluca
Qon How do I use `HiddenChannel` with multiple frames? Do I add the header before each frame I want hidden channels for or is it same for all frames?
2024-02-17 08:00:23
also, you don't
2024-02-17 08:01:08
ah no, you do, it's the same for all channels
Qon
veluca ah no, you do, it's the same for all channels
2024-02-17 08:01:24
*frames?
veluca
2024-02-17 08:01:43
yup, sorry...
lonjil see this bug: https://github.com/libjxl/libjxl/issues/3264
2024-02-17 08:01:54
mhhh that can't be too hard to fix though... lemme try
2024-02-17 08:06:22
yeah it wasn't 😄
lonjil
2024-02-17 08:08:08
Hooray
veluca
Qon How do I use `HiddenChannel` with multiple frames? Do I add the header before each frame I want hidden channels for or is it same for all frames?
2024-02-17 08:09:30
I *think* you can re-set HiddenChannel between frames, setting it to a different value or even 0, and it should work
Qon
veluca I *think* you can re-set HiddenChannel between frames, setting it to a different value or even 0, and it should work
2024-02-17 08:10:42
Ok good. Is it live on your site as well?
veluca
2024-02-17 08:10:45
also, I just pushed a version with multiframe fixed
2024-02-17 08:11:12
lemme see if it's actually true
2024-02-17 08:11:26
yup
2024-02-17 08:11:31
you might need to reload
lonjil
2024-02-17 08:11:57
yup hooray
veluca
2024-02-17 08:12:02
``` Bitdepth 1 RCT 0 NotLast Alpha HiddenChannel 1 if c > 2 - Set 1 if c > 1 - Set 1 - Set 0 HiddenChannel 0 if c > 2 - Set 1 if c > 0 - Set 0 - Set 1 ```
2024-02-17 08:12:11
and this does what you'd expect it to do
2024-02-17 08:13:15
(I think you still get the optional channels, but not first)
jonnyawsom3
2024-02-17 08:25:33
<@179701849576833024> I assume the trees are meant to be deterministic, right? xD Surma's site and your fork
veluca
2024-02-17 08:25:55
😭
2024-02-17 08:26:04
I assume they don't make the same jxl file?
jonnyawsom3
2024-02-17 08:26:11
1 byte difference
veluca
2024-02-17 08:26:14
I guess there's some different default somewhere
1 byte difference
2024-02-17 08:26:22
that's good
jonnyawsom3
2024-02-17 08:26:39
It's just the default tree when you first open each site
2024-02-17 08:26:56
``` Bitdepth 8 Orientation 7 RCT 1 if y > 150 if c > 0 - N 0 if x > 500 if WGH > 5 - AvgN+NW + 2 - AvgN+NE - 2 if x > 470 - AvgW+NW -2 if WGH > 0 - AvgN+NW +1 - AvgN+NE - 1 if y > 136 if c > 0 if c > 1 if x > 500 - Set -20 - Set 40 if x > 501 - W - 1 - Set 150 if x > 500 - N + 5 - N - 15 if W > -50 - Weighted -1 - Set 320 ```
veluca
2024-02-17 08:27:07
yeah
2024-02-17 08:27:13
RCT 1 -> RCT 6
2024-02-17 08:27:16
not sure what changed
Qon
veluca RCT 1 -> RCT 6
2024-02-17 08:28:56
I asked about that a few hours ago
2024-02-17 08:28:59
https://discord.com/channels/794206087879852103/824000991891554375/1208388240642674758
jonnyawsom3
2024-02-17 08:29:51
Yeah, going to 6 on your site fixes it, on Surma's it made a nice traffic light themed version
lonjil
2024-02-17 08:30:16
I think that mapping changed at some point. The Surma site hasn't been updated in a long time, maybe since before that changed.
veluca
2024-02-17 08:30:18
lemme update the default on my site
2024-02-17 08:31:05
done
lonjil
2024-02-17 08:32:16
IIRC a long time ago, how RCT works in jxl_from_tree was changed.
2024-02-17 08:38:23
hmm, looks like surma's site should have that change.
_wb_
2024-02-17 08:45:45
Yeah RCT numbering changed
veluca
lonjil hmm, looks like surma's site should have that change.
2024-02-17 08:45:55
apparently it doesn't 😛
lonjil
2024-02-17 08:49:09
rip
_wb_
2024-02-17 08:49:59
Yeah it never ended up getting updated on surma's site
2024-02-17 08:52:00
Old numbering followed some old FUIF convention where 0 is RGB, 1 is YCoCg, and then the real jxl rcts which were added later started at 2, so everything was shifted by 2. That was removed at some point because it was not matching the spec and a bit silly, but yeah you have to adjust the values
Qon
veluca and this does what you'd expect it to do
2024-02-17 09:18:57
Setting `HiddenChannel` multiple times doesn't work for me. I have the same amount of channels as the first (when I only set it for the first frame) on all frames. If I set it to the same value on each frame it breaks.
veluca
2024-02-17 09:19:49
mhhh
2024-02-17 09:20:10
you're right, it doesn't do what I thought it would
2024-02-17 09:20:29
not sure how easy it is to fix though
Qon
2024-02-17 09:20:29
Also, prettyfy makes HiddenChannel jump into the tree in a weird way I thinbk
veluca
2024-02-17 09:20:45
I have absolutely no idea how Prettify is supposed to work
Qon
2024-02-17 09:21:14
I'm sure it shouldn't turn valid code into invalid code though
2024-02-17 09:21:46
🤔 😛
veluca
2024-02-17 09:22:37
... yeeeah
2024-02-17 09:22:47
someday I'll RIIR the whole thing
2024-02-17 09:22:48
xD
JXL Art Bot
2024-02-17 10:15:58
**Qon** _“Colored octagram {8/3}”_ 2024 image/jxl 396 bytes https://jxl-art.lucaversari.it/?zcode=7ZhPa8MgGMbv%2BRTeS0CNRr0Mxi47jDLYYefSZrRQurGVsXz7aVYlmlfTbf0LUgrxeaPPz9dXW7xdvy1nxf1qsWg2d8vZZtOskSymr9uH2ce2KFYvaI5uEMEFQiV6araIcq6fd7rSjzZQs66xi8iuYWNE%2BE1JvJH18%2BN780mIFrAdpVOwU5ymepITpSc6WQSyC9SDgGUL1V0HDnSIdXGdGNgp3s3P8V7Ql4A3QnFwNzjylyXP2ft%2Fmk4GCOkH3P65Fq68Fo6w7Geez1A99m9g3gR5E1z8JjhdxV%2Fg1EPtHP%2BU8ymRT4l8SlzTKXHmM%2BEqMjR6w6FE%2FIaD9fJsoiIYtOrn3LxQ%2B%2FluB6kp0RRNEMGUhUvwBV5ePOu3WfCydS85VZWkvqWhGJxlLTg2SBJl%2BaEpARrHo5igdehtgACLNmIRgUpgWTDKRLzYCOX6A5S3wasgszZqNtVfEDEJOYLp6rTCBKsaIjKoFDZtE6YJ3BHg1JL3mRWvJMcwWXcdGLNuk9ZJ8FH0%2BO4J8TlRREXTM094jExhj0nsMQ07kWjheHuQUjms81%2FxTk7KS6gQpt6%2FAQ%3D%3D
Qon
2024-02-17 10:17:46
So colors works now that we have hidden channels. And I can easily use numbers that aren't super crazy. And with 8 channels I can have shapes defined with 8 lines.
2024-02-17 10:21:57
Each pair of points with index `i` and `(i + 3) % points` defines a line, which splits the image in 2 regions. 8 lines in 8 hidden channels. Each line splits the channel into 2 regions, non-positive and positive. If a point is positive in at least 6 out of the 8 hidden regions then it is "inside" the star.
2024-02-17 10:26:47
My code generates the region counting test, so I can make any star {p/q} where p = 5 to 8 and with any valid q by just adjusting the p and q values and the region inclusion number.
2024-02-17 10:27:48
It can also fairly easily be colored differently for each region.
lonjil
2024-02-17 10:30:03
very cool
JXL Art Bot
2024-02-17 10:33:23
**Qon** _“Regions shown heptagram {7/3}”_ 2024 image/jxl 453 bytes https://jxl-art.lucaversari.it/?zcode=7ZdLS8QwEIDv%2BRW5L4G8HxdBvHiQRfDgubiVXViqaBH992bbJm2KKRuzlYLd0zy%2FyWSYLbk%2Bvu4LcHvY7crqZl9UVXmECmxf6rvivQYIPpQ1pEIAcHiGT%2FAKGgDtzyr3b%2BUHwdaCgddNqOpQVaEqQ1WEKu%2FU%2FgReJiYa1rhamWh6LjyWFYa1rk7m8peNZNaahEezRmGNq5OxucyAltxXSiO5tabhsaxRGO4vU7FZ9mkd1%2FzjypjPkttK6iOv1DQ7khRGNZ5WZPIvvlTrZq2b9Z8363KrtI5q5lHlzGapPSU1kVNokhzJCYNYf4XYPa9087xqjUY5qxpYuXBWObAyZxTuffbla23hxrZKeXuOz85%2B8jxaDzdswEFSYKp9CZ5GQ2Ma4YJg6Wgsmcb1EEeppsb%2BKXQ4%2BhMOTeAIDXCESSZ7HEnDbbx8YkmmjPAonIoanYwbQRrY2UMMLwpRhpUQ%2Bhs%3D
CrushedAsian255
2024-02-17 10:34:14
Someone should try to make a svg to jpegxl converter
lonjil
2024-02-17 10:34:52
already exists
JXL Art Bot
2024-02-17 10:35:28
**Qon** _“heptagram {7/2}”_ 2024 image/jxl 274 bytes https://jxl-art.lucaversari.it/?zcode=tZM9T8MwEIZ3%2F4rbK0tn%2B%2Fy1IKEuDKhCYmCOaFArVQHRCMG%2FxzRxarcGxVCiDHnfyz33Eed697Jp2M12vW675abpunYHlq2e%2B9tm3zMO920PUmvGtk%2FwCFfgGYQriLvX9k1gcJBN2ufS5dLm0uRSj3IomQToLHDs6ix7Vk4h%2F5tmqnEF9Lyx%2F1SpUPVXu79YE4WGLnE2%2FqW%2F4%2FN4xN3hiA%2B2t9G1iUvTuyZxVTR1%2FEc%2BpkZXsACBkoYh3kf%2FK%2FIQIphQuERyiJFFdSwOQjqd4Axp8hRpqkTjP9CIHKWDS01SmoiT1TivEpoQCrWeRhV1tMUJzUgd7gjDalg%2BKVfKOnFY3NyveLJ5biyixU8%3D
lonjil
CrushedAsian255 Someone should try to make a svg to jpegxl converter
2024-02-17 10:35:46
<https://github.com/wwww-wwww/spline>
**Qon** _“Regions shown heptagram {7/3}”_ 2024 image/jxl 453 bytes https://jxl-art.lucaversari.it/?zcode=7ZdLS8QwEIDv%2BRW5L4G8HxdBvHiQRfDgubiVXViqaBH992bbJm2KKRuzlYLd0zy%2FyWSYLbk%2Bvu4LcHvY7crqZl9UVXmECmxf6rvivQYIPpQ1pEIAcHiGT%2FAKGgDtzyr3b%2BUHwdaCgddNqOpQVaEqQ1WEKu%2FU%2FgReJiYa1rhamWh6LjyWFYa1rk7m8peNZNaahEezRmGNq5OxucyAltxXSiO5tabhsaxRGO4vU7FZ9mkd1%2FzjypjPkttK6iOv1DQ7khRGNZ5WZPIvvlTrZq2b9Z8363KrtI5q5lHlzGapPSU1kVNokhzJCYNYf4XYPa9087xqjUY5qxpYuXBWObAyZxTuffbla23hxrZKeXuOz85%2B8jxaDzdswEFSYKp9CZ5GQ2Ma4YJg6Wgsmcb1EEeppsb%2BKXQ4%2BhMOTeAIDXCESSZ7HEnDbbx8YkmmjPAonIoanYwbQRrY2UMMLwpRhpUQ%2Bhs%3D
2024-02-17 10:36:15
I noticed that this one also has a {7/2} hidden inside of it.
Qon
lonjil I noticed that this one also has a {7/2} hidden inside of it.
2024-02-17 10:37:28
Yeah, and {7/1} :D
lonjil
2024-02-17 10:37:43
^_^
Qon
lonjil <https://github.com/wwww-wwww/spline>
2024-02-17 10:38:46
what does it actually do then?
2024-02-17 10:39:38
Using splines for everything? What techniques does it use to match shapes? Is it exact?
lonjil
2024-02-17 10:39:48
very not exact
2024-02-17 10:40:02
it just turns svg splines into jxl splines
2024-02-17 10:40:11
things like shape filling are ignored
jonnyawsom3
2024-02-17 10:40:18
https://grass.moe/splines/
2024-02-17 10:40:26
There's an explanation there
lonjil
2024-02-17 10:41:17
here is an example of its output
Qon
2024-02-17 10:43:12
What was the source svg?
2024-02-17 10:43:35
and what are the sizes of svg and jxl?
lonjil
2024-02-17 10:44:26
I don't have that on me, I'll post it here in a few minutes if I find it
2024-02-17 10:44:58
But it's an image that Jon has used a few times when presenting about JXL.
jonnyawsom3
2024-02-17 10:45:49
Bottom of the page <https://jpegxl.info/> https://jpegxl.info/jxl-architecture.svg
2024-02-17 10:46:26
Generally the JXL is a lot smaller, I seem to recall 30% of the original, but also missing all solid colours
lonjil
2024-02-17 10:48:01
The SVG size is also like, uncompressed XML
2024-02-17 10:48:13
Gzip can shrink it a good bit
Qon
2024-02-17 11:09:04
<@179701849576833024> > R is undefined Would be nice with actual error messages. Also sometimes I get > e is undefined and sometimes I get no error message even though it doesn't work, so it looks like it maybe worked but gave same result as before if there is already a previous generation left over. And sometimes it doesn't work, but when I reload the page and try again it works. Seems like `e is undefined` is sticky and sometimes requires a page reload for the page to work again or it will just say that even for valid code.
veluca
2024-02-17 11:10:02
yep, I noticed that
2024-02-17 11:10:07
I have no idea what's up with it
2024-02-17 11:10:27
and tbh I am not familiar enough with the JS code (or with JS in general) to truly have a shot at fixing it
veluca someday I'll RIIR the whole thing
2024-02-17 11:10:43
hence this 😛
2024-02-17 11:10:57
but if someone wants to - and is able to - PRs are welcome...
Qon
veluca hence this 😛
2024-02-17 11:17:57
Rust can be compiled to js and run in the browser or?
veluca
2024-02-17 11:18:45
yup
Qon
2024-02-17 11:19:37
Maybe I should learn Rust someday then :o
veluca
2024-02-17 11:19:42
well, to wasm, not to JS
2024-02-17 11:19:48
but effectively the same
jonnyawsom3
2024-02-18 12:02:15
Well, then you need JS to run the WASM ;P
lonjil
2024-02-18 12:15:32
what does the `(x1)` in the leaf nodes mean?
jonnyawsom3
2024-02-18 01:20:14
Seems like an end point?
veluca
2024-02-18 01:32:05
it's a multiplier for the residual
2024-02-18 01:32:16
doesn't really matter for jxl art, since all residuals are 0
lonjil
2024-02-18 01:32:27
ah
veluca
2024-02-18 01:33:41
it's pretty much only used for modular lossy
_wb_
2024-02-18 07:14:27
It's a way to quantize things, which we're currently only using in a simple way (same quantizer for everything) but in principle it could be useful to do adaptive quantization where the weights aren't signaled explicitly but derived from the tree.
JXL Art Bot
2024-02-18 12:00:32
**Qon** _“heptagram {7/3} and CA rule 110”_ 2024 image/jxl 753 bytes https://jxl-art.lucaversari.it/?zcode=7VrLSgMxFN3nK7IvgbzmtRFEBBcyCC66LnakhVJFi%2BjfO3VmYh6ddjIDFfV0d5Pcc5OT%2B8ikudw8rxbkZr1cVtur1WK7rTY0J%2BXT7nbxuiPrR%2FpAL6jghNY%2FRu%2BrHZVJYkmceINq6e6lehOibtq3dDJ35cIVc1fMXFG3Yt8UzMB0pF4Sq9eMLc24vTBne5mJr4amiZXXZkgI50LG6nQt36ZDFDMZ31AIG610eKuwA2ffAY9yMBmvBAqGJWJEN6Ib0f1XizV8C74FCiaEV9RHDWopaimCHbUUvgXfAgXTPkQRbXA1UAAKpiScSf9Q4DCPwzyCH4d5%2BBZ8CxTgMA9XAwWg4HfexCP%2FwPNAASgABWOU2teghf0YVJ1Ioa1ObuvIYToZOWg%2BtaFGpXtv6o0FQYL5BR0i6AhufZRrYwqU9J7ZHtEIdHuW%2BsOz6plGFNTQe7Z%2FsPJhSx1p49QDbNB%2BHtpH8TzZuJeKTdX5MIglnVHBuSmF71ZSn9d9OpdW%2FmapSrjWHZ6OxWM%2BntAi46YmqBF4KsvtAiNloTMDKA8BsqOAQibKAhRKiUwaBkUPoKWRStWN5rHmZ755natEkrgdcxlhskasKfkE
Qon
2024-02-18 12:01:17
Could be half the size if I had 1 more hidden channel available, I think.
_wb_
2024-02-18 12:59:33
I like these recent evolutions.
Qon
_wb_ I like these recent evolutions.
2024-02-18 01:02:17
Which ones are included in "these recent evolutions"?
_wb_
2024-02-18 01:03:10
Everything that uses the hidden channel trick
Qon
2024-02-18 01:03:26
It's so useful!
Tirr
2024-02-18 01:16:52
jxl-oxide gave me this, not sure what's happening
_wb_
2024-02-18 01:17:50
That also looks interesting, now the question is what's happening
Qon
2024-02-18 01:18:09
Glitch art :)
_wb_
2024-02-18 01:23:10
Well either the bitstream is not conformant to the spec (int16 overflow or bug in jxl_from_tree that causes it to write something bad), or there's a bug in libjxl, or there's a bug in jxl-oxide.
Tirr
2024-02-18 01:23:35
wait, maybe I'll force i32 buffer
lonjil
2024-02-18 01:23:35
these do tend to go over the int16 limit
Tirr
2024-02-18 01:24:02
it's not conformant if that's the case
Qon
2024-02-18 01:24:03
I'm using like 21 bits I think
lonjil
2024-02-18 01:24:22
would probably be useful to be able to tell jxl_from_tree to do the appropriate things to allow int32
_wb_
2024-02-18 01:24:54
Yeah, wrap it in a container and add a jxll box saying it's level 10
Tirr
2024-02-18 01:24:57
ok that fixed it
lonjil
_wb_ Yeah, wrap it in a container and add a jxll box saying it's level 10
2024-02-18 01:25:11
wonder how many bytes that adds
Qon
2024-02-18 01:25:21
size of image is 1024, multiplier for precision is 1000. So I get ~(10+10) bit numbers
_wb_
2024-02-18 01:25:28
Something like 50 bytes iirc
lonjil
2024-02-18 01:25:44
rip
Tirr
2024-02-18 01:25:57
and... i32 buffer was faster than i16 buffer
2024-02-18 01:26:00
what's happening here
Qon
lonjil rip
2024-02-18 01:26:28
50 bytes is like 10% of the image
lonjil
2024-02-18 01:27:18
yeah but even much smaller images like the Seychelles flag go above int16
_wb_
2024-02-18 01:27:19
Well I guess the main thing jxl_from_tree should do is signal in the codestream that modular 16 bit is not enough
2024-02-18 01:27:44
That would not add any size iirc
2024-02-18 01:28:43
This is not allowed in Level 5 and naked codestream is implicitly level 5, but that's probably where jxl-oxide is looking to figure out what buffer type to use
Tirr
2024-02-18 01:29:24
yeah it just uses modular_16bit_buffers
_wb_
2024-02-18 01:30:24
So it would still be non-conformant but it would render correctly in any decoder, since any sane decoder will look at the codestream fields.
jonnyawsom3
2024-02-18 01:31:26
Non-conforming yet functional is where all the fun happens
_wb_
2024-02-18 01:33:24
JXL Art Bot
2024-02-18 01:35:09
**Qon** _“swedish heptagram {7/3} with precision 50 and CA rule 110 snow, 256x256”_ 2024 image/jxl 751 bytes https://jxl-art.lucaversari.it/?zcode=7VtNS8QwEL3nV%2FS%2BBJp%2BJO1FUBH2IEXwsOfFVltY1kWL6L%2B3rW3IR3dtWlhR3546SeZN8jKZSbPppsrr0gtiTtZF9VTW3eNVVefFoSlPyOXuUG7JusrzYn9dbvf7YteUZs%2F17fa1JtWj9%2BBdeMwnXvOj3n3RAsSd1NelnTBUMi7UykSv9Lkm%2B8Qw0Eh3L8UbY01RWzLIvi6nupjootDFqBfN7g9dkA35TL3YVe%2BrbSbbtcKGtjJlPT9tEc1uZBMbTod01VHmsDdto8jOmIZsWGel8anCDJx9BgzKwaS7EiiYFoixurG6sbr%2FarKGb8G3QMGC5eX0UoNcilyKxY5cCt%2BCb4GCZS%2BiWG1wNVAACpYEnEX%2FUGAzj808Fj828%2FAt%2BBYowGYergYKQMHvPIlH%2FIHngQJQAArmKGlXSvsQGpohlIzqJKpOYOr40biW0K6dWsH6iBZXtWblA2Ns%2FfVYYg3AqmBWhXUsFOo2lkAFxj3cExqW7pGh%2FnCvjnTDCWrqQdw%2FGPm0oc608d0NbdB%2BHtpn8bzY%2BPDUx1yZlj4kYuatvFhmynclem%2BamkAN3lSkkQzfkRsUNaCYEGKACp2hAi3DJH4ssYIxLHoCi4dE%2FfCCp6n8nOIIlNJeJJJa383wSjfMWUfs5GnRCKBBEjYMfAI%3D
Qon
2024-02-18 01:35:38
I think that is small and imprecise enough that it fits in 16 bits
Eugene Vert
2024-02-18 01:36:50
jxl-oxide:
Qon
2024-02-18 01:38:22
Not exactly the same
2024-02-18 01:40:08
I could reduce dimensions and precision slightly more though. But I like high res and precise more than following some 16-bit rule 😈
_wb_
2024-02-18 01:40:32
I guess we need a debug thing that decodes in int32 and keeps track of the actual range of decoded numbers so we can see if it will overflow int16 or not
Tirr
2024-02-18 01:40:50
jxl-oxide with forced i32
2024-02-18 01:41:03
so... it overflowed
_wb_
2024-02-18 01:41:17
But I guess only a bit
Qon
2024-02-18 01:41:59
Yeah I reduce the numbers little by little until I saw constants slightly below 2^15
_wb_
2024-02-18 01:45:21
Let's just make jxl_from_tree set modular_16bit to false. That's technically not allowed in a naked codestream but I don't really like how we defined that anyway. It would make more sense to me to let the implicit level be determined by the codestream header (image header and first frame header), instead of just being 5.
Qon
2024-02-18 01:46:06
The precision constant has less and less visible visual effect as it grows, but with the CA rule on top we get some chaotic behavior that can drastically change a lot of pixels from just a single pixel changing on the star :D
Tirr
2024-02-18 01:46:36
butterfly effect in practice
lonjil
_wb_ Let's just make jxl_from_tree set modular_16bit to false. That's technically not allowed in a naked codestream but I don't really like how we defined that anyway. It would make more sense to me to let the implicit level be determined by the codestream header (image header and first frame header), instead of just being 5.
2024-02-18 01:46:39
would anyone object if you changed it in the next version of the spec? 😄
_wb_
2024-02-18 01:47:47
So in some future edition of 18181-2, I think we should revisit how the implicit profile/level is defined. I would prefer to define it so that whatever can be derived from the image header and first frame header defines what the implicit profile/level is.
2024-02-18 01:48:19
Technically having that many hidden extra channels is also not allowed in level 5 btw
Tirr
2024-02-18 01:48:42
num_extra <= 4, yeah
_wb_
2024-02-18 01:48:45
It's at most 4 extra channels beyond the 3 color channels iirc
2024-02-18 01:49:03
So in principle a strict decoder could also choke on that
2024-02-18 01:50:43
But I think we should allow it, the spirit of the level box is that it allows a decoder to tell early if it can decode or not, and some info might be hidden far away in the 100th frame or something...
2024-02-18 01:51:44
Anything the image header or the header of the first frame says can still allow a decoder to fail fast if it doesn't support it.
2024-02-18 01:55:19
(in any case software decoders will likely just support all levels, so it's a bit academic, until we have hardware decoders and a hardware profile which will be much more limited but they'll make sure to explicitly signal their profile/level and the container overhead doesn't matter for those use cases)
JXL Art Bot
2024-02-18 03:49:50
**Qon** _“Bug report: non-deterministic output. And I don't understand where the gradient is coming from”_ 2024 image/jxl 106 bytes https://jxl-art.lucaversari.it/?zcode=lZHfCsIgFMbvfYrzAsJ0f9hVUBHsIiToYtcjrQljjZKot88tNZ1dNMGL73z%2BvnPUWnLVAs0LVAl5aRUQWqKNVFwMul6idTe0Daok56Lftk3fiw4IYle1b%2B4KyTOcYAUpAr0wHIXSUfmkjEUnYc3Et8gP66vCbC0ON%2FHIdGE86LfSFjPlj6jxqLGNH0uY7dyReNR4iCWMd2HTOk5xw8wbxbELoeCZzSulbgafixjiM%2FQ%2FJvEZMmPsJQLq5b6M6Z1Z%2Fumxtd4kIAv0Bg%3D%3D
Qon
2024-02-18 03:50:55
<@179701849576833024> if I press `Run` over and over without chaing the code the colors change. Also, I don't understand at all where the gradient is coming from since I only ever set values in non-hidden channels to 0 or 255.
2024-02-18 03:53:49
<@853026420792360980> The pattern above generates a section of the turing machine pattern for rule 110. The full pattern would require a bit more repetitions, but it seems to be actually possible to generate the pattern without explicitly encoding it bit by bit.
Traneptora
Qon <@853026420792360980> The pattern above generates a section of the turing machine pattern for rule 110. The full pattern would require a bit more repetitions, but it seems to be actually possible to generate the pattern without explicitly encoding it bit by bit.
2024-02-18 03:56:32
yea, jon mentioned a way to do the repeating pattern that I didnt' realize could be done
veluca
Qon <@179701849576833024> if I press `Run` over and over without chaing the code the colors change. Also, I don't understand at all where the gradient is coming from since I only ever set values in non-hidden channels to 0 or 255.
2024-02-18 03:56:32
Wtf...
2024-02-18 03:56:35
Will check later
2024-02-18 03:57:16
Can also bump up the hidden channel limit
Qon
Traneptora yea, jon mentioned a way to do the repeating pattern that I didnt' realize could be done
2024-02-18 04:00:09
I invented arbitrarily angled lines after I made my CA jxl art, so at that time I didn't know that this specific technique was a possibility, I was thinking about some way more complex way to generate the pattern.
veluca Can also bump up the hidden channel limit
2024-02-18 04:00:29
YES! xD
jonnyawsom3
2024-02-18 04:14:33
Surprised Qon doesn't have the JXL Artist role yet
Qon
Surprised Qon doesn't have the JXL Artist role yet
2024-02-18 04:19:25
I'm new here, only 2 weeks~. Also, I have only invented a few jxl-art techniques thought to be impossible so far <:KekDog:805390049033191445> I need to do more to catch up
_wb_
Qon <@179701849576833024> if I press `Run` over and over without chaing the code the colors change. Also, I don't understand at all where the gradient is coming from since I only ever set values in non-hidden channels to 0 or 255.
2024-02-18 04:36:42
I know this bug. Didn't know it wasn't fixed yet. Add RCT 0 and it goes away. Otherwise it ends up selecting an RCT based on uninitialized memory 🙂
jonnyawsom3
2024-02-18 04:39:59
I was going to say, it only seemed to have a few colors in the random results
JXL Art Bot
2024-02-18 04:40:44
**Qon** _“Turing machine pattern parts for rule 110”_ 2024 image/jxl 103 bytes https://jxl-art.lucaversari.it/?zcode=lZHRCoIwFIbvz1OcFxg4U%2FEqKAm8CIkKvJZcbSAmNaLevmluba6LHOziP%2F%2B%2B%2F5xt%2B%2ByIAZSilhzDOIGciQuXSMMU1kLWrFP1FFZNxyvIRV2zNuNV27IGKRRXua3uEsQZT7jEBaBaBA9Mqqh4UKMVDkKbgW3RH9ZXudlK7G7sEalCf9BupaxiLH9ESXpNdHxfIsXGHPFH9YeYw1gXHlv7KWaYaSM%2FdibkPPP4Sgszg815DLWZ8D8msBk6YfQlHOplvqxQO9L802JLtalDJvAG
Qon
2024-02-18 04:41:04
`RCT 0` fixed it!
Tirr
2024-02-18 04:41:36
so maybe it was `RCT undefined` without that
2024-02-18 04:41:55
but uh why gradients
Qon
Tirr but uh why gradients
2024-02-18 04:42:44
I think there's also a bug with RCT and HiddenChannel
2024-02-18 04:43:06
RCT mixes in the HiddenChannel instead of just doing ops on RGB
_wb_
2024-02-18 04:44:31
<@179701849576833024> I guess the normal RCT needs to get an offset in the channels it operates on, currently it acts on the HiddenChannels...
Tirr
_wb_ I know this bug. Didn't know it wasn't fixed yet. Add RCT 0 and it goes away. Otherwise it ends up selecting an RCT based on uninitialized memory 🙂
2024-02-18 04:44:31
ah I didn't see this message
2024-02-18 04:44:46
so it's deadly undefined thing
veluca
Qon RCT mixes in the HiddenChannel instead of just doing ops on RGB
2024-02-18 04:55:59
I thought I avoided that
2024-02-18 04:56:38
Hidden channels have higher indexes than RGB channels, and I apply RTCs before I move the hidden channels in the front
Qon
Surprised Qon doesn't have the JXL Artist role yet
2024-02-18 04:56:43
I'm an jxl-artist now! :D
veluca
_wb_ I know this bug. Didn't know it wasn't fixed yet. Add RCT 0 and it goes away. Otherwise it ends up selecting an RCT based on uninitialized memory 🙂
2024-02-18 04:57:23
Do we just RTC 0 by default?
Qon
veluca Do we just RTC 0 by default?
2024-02-18 04:58:05
That's what the wtf says
2024-02-18 04:58:18
So that was my assumption
veluca
2024-02-18 04:58:21
But it doesn't really happen huh?
2024-02-18 04:58:27
Well, easy to fix I guess
_wb_
veluca Do we just RTC 0 by default?
2024-02-18 05:02:47
We should, but I guess we don't atm
spider-mario
2024-02-18 05:03:54
I keep reading RCT as randomised controlled trial
lonjil
2024-02-18 05:08:12
An oddity I ran into. I have this on a hidden channel: ``` if y > 0 - N + 8947849 - Set 8947849 ``` This should simply make each pixel on that channel have the value `8947849*(y+1)`. Then I can do this in a color channel: ``` if Prev3 > [8947849 times N] - Set 255 - Set 0 ``` which should make the Set 0 happen for the first N rows. And this is true for values of N from 0 to 22. But when I try 23, the Set 255 happens at y=15. Above 23, the row at which the switch happens does go up, just slower than N. E.g. N=96 makes the switch happen at y=66.
2024-02-18 05:12:28
I know that the channel values on each row are going up as they should, because they overflow exactly where they're supposed to.
2024-02-18 05:13:27
here is the full image code if someone else wants to have a look: https://jxl-art.lucaversari.it/?zcode=RY7BCsIwEETv-xVzrpSmbYLJRdBeehJRwbM1axsoRWoU_HtNWuntzVuGnWN1hqCd85YfvoOm2lnLQ9Vdh4F75HRxNnghqGbXdh5SCyJ3xw0bLJT_oSDKEjT9i5FkQR5Gfpfb5vm7aaWNKZWQlOLEHoVSM4nYakfmIdQmmYtJj2wXqSbXxZnzi0-cAqTYYwVt5FpLE3NozPkL
veluca
2024-02-18 05:13:29
in the meantime, - I fixed RCT 0 - added up to 16 hidden channels - fixed the 16-bit buffer thing
lonjil
2024-02-18 05:13:39
hooray
2024-02-18 05:16:09
if the increment constant is 1, my code works flawlessly, but otoh I don't get the overflow in the middle of the image like I want. So there is something odd that happens with large numbers, even well below the point of overflow
veluca
Qon RCT mixes in the HiddenChannel instead of just doing ops on RGB
2024-02-18 05:18:04
do you have some way to reproduce that?
Qon
veluca do you have some way to reproduce that?
2024-02-18 05:23:07
I sent you a picture
**Qon** _“Bug report: non-deterministic output. And I don't understand where the gradient is coming from”_ 2024 image/jxl 106 bytes https://jxl-art.lucaversari.it/?zcode=lZHfCsIgFMbvfYrzAsJ0f9hVUBHsIiToYtcjrQljjZKot88tNZ1dNMGL73z%2BvnPUWnLVAs0LVAl5aRUQWqKNVFwMul6idTe0Daok56Lftk3fiw4IYle1b%2B4KyTOcYAUpAr0wHIXSUfmkjEUnYc3Et8gP66vCbC0ON%2FHIdGE86LfSFjPlj6jxqLGNH0uY7dyReNR4iCWMd2HTOk5xw8wbxbELoeCZzSulbgafixjiM%2FQ%2FJvEZMmPsJQLq5b6M6Z1Z%2Fumxtd4kIAv0Bg%3D%3D
2024-02-18 05:23:16
this one
veluca
2024-02-18 05:23:38
that one is fine now 😉
Qon
2024-02-18 05:23:39
It was a guess, I didn't say I know it is the case
veluca
2024-02-18 05:23:49
ah ok 🙂
Qon
2024-02-18 05:24:15
I published a picture but it hasn't appeared here :o
lonjil
lonjil An oddity I ran into. I have this on a hidden channel: ``` if y > 0 - N + 8947849 - Set 8947849 ``` This should simply make each pixel on that channel have the value `8947849*(y+1)`. Then I can do this in a color channel: ``` if Prev3 > [8947849 times N] - Set 255 - Set 0 ``` which should make the Set 0 happen for the first N rows. And this is true for values of N from 0 to 22. But when I try 23, the Set 255 happens at y=15. Above 23, the row at which the switch happens does go up, just slower than N. E.g. N=96 makes the switch happen at y=66.
2024-02-18 05:24:17
with `8947849 * 119`, the if is true at y=66, but with `8947849 * 120`, it happens at y=120 instead. I'm very confused.
Qon
2024-02-18 05:25:04
Testing 16 channels xD
2024-02-18 05:25:16
It's {15/7}
2024-02-18 05:26:00
It's like 8kb as .jxl, I will use some channels now to reduce the size instead of maximizing polygon count
Qon Testing 16 channels xD
2024-02-18 05:28:41
It looks amazing if I may say so myself <:BlobYay:806132268186861619>
lonjil
2024-02-18 05:28:53
that does look very cool
2024-02-18 05:29:38
Qon, have you ever had issues like what I'm experiencing, when using huge values that overflow?
2024-02-18 05:29:55
I'm trying to use overflow to create mirror-symmetry
Qon
2024-02-18 05:35:49
What is the issue?
2024-02-18 05:36:02
It has symmetries
2024-02-18 05:36:08
and it is green and blue
lonjil
2024-02-18 05:36:58
the problem is that I can't get it to shift from green to blue where I want it to
Qon
2024-02-18 05:38:48
Where do you want it to shift?
lonjil
2024-02-18 05:39:11
at y=96
Qon
2024-02-18 05:40:40
Not what I tried to create but looks cool
lonjil
2024-02-18 05:40:50
neato
Qon
2024-02-18 05:41:46
> /* blue */ Wait we DO have comments in jxl trees?!?!?
lonjil
2024-02-18 05:42:47
only on the website
2024-02-18 05:43:00
it removes them before feeding the text to jxl_from_tree
Qon
lonjil at y=96
2024-02-18 05:52:14
https://jxl-art.lucaversari.it/?zcode=RY6xCsIwGIT3_yluroSkMZU6KGiXTiIqOKv5bQIlSK2Cb2_TVrsd3x13dyhOULT1reVH65BT6a3lULhLCFwjpbO3kStFJfvKtTC5IvJ33LDGpNKf0EQywbV-MRIZ4b7h93xzfcaQMejMFYYqqSGwXMScwJFb6CwblepbqoY5THaqBtywnWA2MNffHic__TV07TvMumtRxazQRsUD4r-fyC8
lonjil
2024-02-18 05:53:29
oooh! smart
_wb_
lonjil it removes them before feeding the text to jxl_from_tree
2024-02-18 06:15:56
Nah, jxl_from_tree also allows that.
lonjil
2024-02-18 06:16:58
oh ok
JXL Art Bot
2024-02-18 08:29:10
**\_wb\_** _“Flag of Sweden, kind of, using default palette colors”_ 2024 image/jxl 50 bytes https://jxl-art.lucaversari.it/?zcode=C3IOUTDgcsosSUktKMlQsOBySc0pSQxIzEktKUnlCs9MAQkaGHB5pGamZ5QomAKZXJlpCpUKdgqGlpZcCgpQjhGYA%2BZWwOWQBIzgAgoKugrBqSUKxmZoAoamXFjkkeTQzMYwGc1cFFPhcgA%3D
_wb_
2024-02-18 08:30:11
Using colors from the default palette can save some bytes
JXL Art Bot
2024-02-18 08:37:34
**\_wb\_** _“The default palette. First 4x4x4 colors (0-63), then 5x5x5 colors (64-188)”_ 2024 image/jxl 35 bytes https://jxl-art.lucaversari.it/?zcode=XYuxDkAwFEX39xX3ByQtKiYDBqMg6SzpQxOD4Q38vUaQsJ1zc25XDVBUenG8yYKcal5lbMeVRZisd2HUsaGG%2FbwIkpjITzhQQBsCAu%2BBVUAggoW%2BqWdBlv6LW7LksqdTr33%2Fik4%3D
_wb_
2024-02-18 08:39:32
These colors are available if you use palette colors outside the palette, in particular if you do a zero-color palette.
Qon
2024-02-18 08:42:03
How would `DeltaPalette` interact with `Alpha` and `HiddenChannel`?
_wb_
2024-02-18 08:46:32
No idea, probably poorly but it may be doing something useful by sheer luck
2024-02-18 08:47:04
We might need to fix how these interactions work
lonjil
2024-02-18 08:50:17
now do DeltaPalette, Alpha, HiddenChannel, and Squeeze at the same time...
2024-02-18 08:52:33
there's a lot of options in jxl_from_tree that I've never seen anyone use
2024-02-18 08:55:38
hm. wouldn't be too hard to add regular palette mode to jxl_from_tree, right? Then, if I understand correctly, you just need to add whatever colors you want to the palette channel, and you can use them very cheaply in the rest of the image. would save on space if you need to use the same colors multiple times in a tree.
Qon
2024-02-18 09:05:23
Binary search in modular arithmetic is breaking my brain <:SadOrange:806131742636507177>
2024-02-18 09:06:16
Too tired and there's so many weird cases to keep track of
_wb_
lonjil hm. wouldn't be too hard to add regular palette mode to jxl_from_tree, right? Then, if I understand correctly, you just need to add whatever colors you want to the palette channel, and you can use them very cheaply in the rest of the image. would save on space if you need to use the same colors multiple times in a tree.
2024-02-18 09:15:38
Yes, maybe DeltaPalette should take some options (nb of colors and nb of delta entries, currently it just does 0 for both) and then you can have custom palettes and delta entries, which should allow cool stuff.
lonjil
2024-02-18 09:16:19
I haven't the faintest idea how this delta stuff works. Guess I should read the spec.
_wb_
2024-02-18 09:16:27
(e.g. just generating a nice palette via some tree and using it to recolor grayscale jxl art)
2024-02-18 09:16:59
Delta entries are palette colors that are not an absolute color, but an offset w.r.t. a predicted color.
2024-02-18 09:17:37
DeltaPalette also has as a parameter which predictor it is relative to
2024-02-18 09:20:00
So you can e.g. have DeltaPalette with the AvgW+N predictor, and then the 'palette color' (0,1,-1) will use that predictor for Red, the predictor plus 1 for Green, and the predictor minus 1 for Blue.
2024-02-18 09:20:45
There are also default delta entries in the default palette, they are at the negative indices.
2024-02-18 09:21:49
So e.g. palette index -1 means delta entry (0,0,0), i.e. just use the DeltaPalette predictor in all channels with no changes.
2024-02-18 09:22:45
It's funky stuff that allows you to get nice gradients while being in a palette mode too
lonjil
2024-02-18 09:23:11
Aha, cool beans. So if I have a prediction tree, and that tree predicts the number -1, that effectively means using whatever predictor DeltaPalette is set to
_wb_
2024-02-18 09:24:58
Yes
lonjil
2024-02-18 09:25:04
very cool
_wb_
2024-02-18 09:25:22
I dunno what it is set to by default, maybe that weird AvgAll thing
lonjil
2024-02-18 09:25:29
I'm looking at the code for jxl_from_tree, seems like setting the deltapalette predictor isn't exposed at the moment
_wb_
2024-02-18 09:26:01
Yeah nothing is exposed, it should be easy to add that though
lonjil
2024-02-18 09:26:23
I'm gonna have a lot of fun with this
2024-02-18 09:27:00
here's a question, is the "Gradient" predictor so named because it's good at making gradients? 😄
_wb_
2024-02-18 09:31:14
Yes, it predicts linear gradients in any direction perfectly if the bit depth is precise enough to not have the integer rounding causing issues.
2024-02-18 09:32:08
It's just N+W-NW (with clamping that doesn't trigger in gradient situations)
JXL Art Bot
2024-02-18 09:54:36
**Lonnie** _“I definitely have a clue what I'm doing”_ 2024 image/jxl 33 bytes https://jxl-art.lucaversari.it/?zcode=C3IOUTDgcsosSUktKMlQsOAKz0wB0kamZlweqZnpGSVgJldmmkKlgp2CoQGXggKQXQFjKyjoKrgXJaZkpuaVKOgaoosY4VNuBDcWJKWr4KegbQRhhSvomgIA
2024-02-18 10:36:16
**Lonnie** _“Look at this very sensible thing that makes a lot of sense”_ 2024 image/jxl 36 bytes https://jxl-art.lucaversari.it/?zcode=C3IOUTDgcsosSUktKMlQsOAKz0wB0kamZlweqZnpGSVgpktqTkliQGJOaklJKhdXZppCpYKdgqEBl4ICkF0BYyso6Cq4FyWmZKbmlSjoGqKLGOFTbgQ3FiSlq%2BCnoG0EYYUr6JoCAA%3D%3D
Qon
**Lonnie** _“Look at this very sensible thing that makes a lot of sense”_ 2024 image/jxl 36 bytes https://jxl-art.lucaversari.it/?zcode=C3IOUTDgcsosSUktKMlQsOAKz0wB0kamZlweqZnpGSVgpktqTkliQGJOaklJKhdXZppCpYKdgqEBl4ICkF0BYyso6Cq4FyWmZKbmlSjoGqKLGOFTbgQ3FiSlq%2BCnoG0EYYUr6JoCAA%3D%3D
2024-02-18 10:56:34
Yes, very gradient <:KekDog:805390049033191445>
lonjil
2024-02-19 12:11:04
I love trying to figure out a large code base in a language I've barely used.
JXL Art Bot
2024-02-19 03:46:21
**Tirr** _“Gradient, 45 deg”_ 2024 image/jxl 28 bytes https://jxl-art.lucaversari.it/?zcode=C3IOUTDgcsosSUktKMlQsOQKz0wB0kamZlweqZnpGSVgJldmmkKlgh1QpYICkFkBZeoquBclpmSm5pVAueEKuoZccAW6Cn4KhkAyOBVsCgA%3D
2024-02-19 03:50:23
**Tirr** _“Gradient, idk 63 deg or something”_ 2024 image/jxl 30 bytes https://jxl-art.lucaversari.it/?zcode=C3IOUTDgcsosSUktKMlQMDTgCs9MATKMTM24PFIz0zNKFEwNjbi4MtMUKhXsgEoVFIDMCihTV8G9KDElMzWvBMoNV9A15IIr0FXwUzACksGpYFMA
2024-02-19 05:37:36
**Tirr** _“XYB colored gradient”_ 2024 image/jxl 45 bytes https://jxl-art.lucaversari.it/?zcode=TY0xC8IwEIX3%2BxVvEwqhJqWhk0M61CmDCm1HMdFmESk36L%2F3CFE63eN7991Ns6NTf8GeXOIQX7ygozEFmaa1dIzpsTBabYjSHTccZLMETXUFt0NVk8I5chYETRvUiCdozki8Tz4ASHyXqDCs15Dik3%2BNV95LqUxu%2FSZo%2BosKI5rypbP2Cw%3D%3D
2024-02-19 09:48:41
**Tirr** _“Sun in the sky”_ 2024 image/jxl 78 bytes https://jxl-art.surma.technology/?zcode=i4h04gpyDlEw4HLKLElJLSjJUDA04ArPTAEzjEy4PFIz0zNKIGyu4IKczLxULiMFA0ogl6GRBYUmWBhQaICpIcWeAIYIkGFoYGimYMHlmpcCDRyuzDSFZAU7oAoFBSjTEMjUVQhOLVEwMjWAs3UtDbggLEsDAwA%3D
Tirr
2024-02-19 09:49:39
<@179701849576833024> splines don't work on your fork; maybe something is wrong in recent version of jxl_from_tree
veluca
2024-02-19 09:50:11
Totally possible
2024-02-19 09:50:20
It's not like it's tested or anything 😛
_wb_
Tirr <@179701849576833024> splines don't work on your fork; maybe something is wrong in recent version of jxl_from_tree
2024-02-19 10:24:54
Take into account that spline area is limited in level 5 and current libjxl does check that (while the old surma libjxl didn't)
Tirr
**_wb_** _“Shalom, Salam”_ 2023 image/jxl 203 bytes https://jxl-art.surma.technology/?zcode=pVRNT%2BMwEL37V8wZqYtn%2FBHnwgGExAmtlpU4F5pCpNIgEQn49ziuE2J7QpGqHpx5L%2FPGM%2FOay7bfNK%2F9M2jx7%2Bo%2FSHHfbnyEkrS4adqn5%2F7wLM7P4G%2Bzfmzg7fPlodvB2bm4e921%2B0asSMJJP7HCkxXkH3OihD4xv9I1aOlPg%2BF05GOlhLMEBinEpkbPS7B%2BorbCEFvlAj%2FEw%2Fu5zvD%2BeFpSU%2F5wGsR4%2BnxrwLjan9rryoJ3SgfeKcPyY53r%2FSYudtj5Vffy0O7XfdvtodtC%2F97Bdrd%2Behv2327hEy586wDxcdADmEJb2xDOgCoCE1RVOEEzkGbgBDvCBJ4RlBEAK7i9DncrMj58BtZ1QQXyMXa0SCJLDvXumh7Uj6wTyxxXlO2BAWNTpGvBSaM5JpEBUU95mx3pPxZA8Ysx8hMqu08uMwvisknK1FUkMXcVGVm6igxyrlJkeFcpspyr7pddVUr9sIRFOQYcF2yk%2BKUp2cUc8fiyhXmLFhfNgPHWMn2nmEaSNgUx%2B4DPL5B1cKAoiVCPX6fwCZoMYOZGqqxLjVTT9x%2B0uCYzaWbG7HS5uaYTTapllbIqRYVc%2FVt5Uv0C
2024-02-19 10:26:00
this didn't work either
_wb_
2024-02-19 10:26:44
Very fat splines like that are likely not valid level 5 so won't get decoded
Tirr
2024-02-19 10:30:13
yeah, fair
_wb_
2024-02-19 10:30:22
Oh but it just doesn't pass them, it seems
Tirr
2024-02-19 10:30:32
that's what I was thinking
2024-02-19 10:30:53
splines don't appear at all
2024-02-19 10:31:10
even short ones
_wb_
2024-02-19 10:31:55
Yep
JXL Art Bot
2024-02-19 10:32:35
**\_wb\_** _“Spline doesn't get passed”_ 2024 image/jxl 14 bytes https://jxl-art.lucaversari.it/?zcode=4wpyDlEw4HLKLElJLSjJULDgCs9MAdJGpmZcHqmZ6RklYCZXcEFOZl4ql6GCASVwyOvnAhFGpgbAQDHgcs1LgQYLl65CcGoJUAoA
Tirr
2024-02-19 10:33:30
14 bytes, that's definitely without spline
JXL Art Bot
2024-02-19 10:33:45
**\_wb\_** _“Spline does get passed ”_ 2024 image/jxl 49 bytes https://jxl-art.surma.technology/?zcode=4wpyDlEw4HLKLElJLSjJULDgCs9MAdJGpmZcHqmZ6RklYCZXcEFOZl4ql6GCASVwyOvnAhFGpgbAQDHgcs1LgQYLl65CcGoJUAoA
_wb_
2024-02-19 10:34:35
Yeah something must have been missed when refactoring the enc params passing
veluca
2024-02-19 10:41:27
<@794205442175402004> can you look into it?
_wb_
2024-02-19 10:50:23
Sure
JXL Art Bot
2024-02-19 08:48:59
**Jon ;)** _“Splines are fixed!”_ 2024 image/jxl 36 bytes https://jxl-art.lucaversari.it/?zcode=4wpyDlEw4HLKLElJLSjJULDgCs9MAdJGpmZcHqmZ6RklYCZXcEFOZl4ql6GCASVwyOvnAhFGpgbAQDHgcs1LgQYLl65CcGoJUAoA
lonjil
2024-02-19 08:50:19
hooray
2024-02-19 08:50:41
meanwhile im still staring at the palette code trying to figure out how to make it do what I want it to
Qon
2024-02-20 12:37:58
<@179701849576833024> Please please please please fix the web tool so its error handling doesn't make it seem like it was designed by an evil genius doing his best at torturing developers. - There's sometimes no indication of errors, it just doesn't update the image. - The error message, if it appears, doesn't tell me what went wrong or what line caused the error. - Sometimes when it fails on input, the webpage is locked in a corrupted state and will fail for valid code. This means I have to reload the page before every Run to make sure there is no previous runs silently interfering with my run. - New fun bug!!: I just spent a lot of time debugging my working code because it sometimes fails valid code with comments included! The submitted message fails with the comments, but produces an image if you just remove the comments! So now I can't actually have comments in my jxltrees to make them even slightly readable and debuggable.
JXL Art Bot
2024-02-20 12:48:10
**Qon** _“Red {13/6} with white CA rule 110. Naive brute force region checking.”_ 2024 image/jxl 2648 bytes https://jxl-art.lucaversari.it/?zcode=7dxLb9tGEAfwuz4F7wEBLh8idSnQBgVyKIyiLeCzESu1gMANWqFov30pR5T5EANRlmTX%2FuWU9XpnlzPzn9eO95f3v0XJ7Hp1u76LQpLmsw%2FL1e9366%2F%2F%2F2G1vl1%2BqWeq2fefv9zdzD6sbm%2BX9%2B%2Fvbu7vl5%2BjUMyu%2Flj%2FdPPXerb6FH2MvotCOYvqf3H063IdpUXxMGrm5g%2BjZjbpzBV75h5HPfL16Oc%2Fl38X9U82v9nebTuV75lqiHWP01vQPcHj8u45t4uyAxfl7UVpb1HDpeGyrL0sdL4ofP3Uqx2tzeA63ozjsGXe5kfx1Y%2B7X3ncJPTGyeQVobfpkEI8tkmf5KQlDWvSDmsaOTTjtDcOvXHSHS%2B6w6o7LLvD%2BT45DLUxjOliayIbm0jHJoZK8Mio3vle1qmK7qkuu3ne3fwse%2FRU8Cmk%2Btr7jRWDtSPKShneojKMSB%2Fbz8v2ET6%2FgS8f%2BdRnPtXIMSaRGhA9LEhgd9ldbGd32d1T2d3DDC2ogRqoPRFqh2GLzF%2BTzA8T8mv88sM%2B9cg9BrsdVXKUTcgmsF2Iw93JJkAN1GQTZC6bkE0clz7warwaC8erkTmv9iK92lFuDNRADdSmQu0obGH7U9l%2BFJ%2BfvPngGCfph3Y54XIC2%2BWWgh%2BXE6AGaso4ZC63lOS4nODVWDhejcx5NZcToAZqoOZywuXEJf9SQjYhm%2BDuZBNkLsSRTYAaqMkmsP0tZhOnSB%2FYXXaXAWB32d3LBriU4ZUowymkf8JTDfuhz%2FFetP5o%2FdHYriAtctcfDWqg5u6HzBVGJGU6Gng1Fo5XI3NeTUcDqIEaqLlZc5miP1o2wd3JJshciCObkE2AGqjJJmQT%2BqPZXXaX3cV2%2FdGUQX%2F0c%2FRHn6EfWglSCVKspgRJ5uJzJUhQAzWpMLYrQbK77C4DwO6yu0qQlEEJ8nwlRzGDmIG9EjNwE2IGyvAKY4YzBAl0l%2B5eRHfPoKxnOe6wV6C%2FnbfVtDR4W00nifTZ22qgBmqatlQnVSdll95W49VYOF6NzHk1Xk0rMqiBmuttt0LeVpNNyCZkE2QuxOFrZROgBmqyCWz3h43sLrvLALC77K4%2FUqAM3lZTglSCFKspQZK5%2BFwJEtRADdSkwrIfJUh2l91ld9ldJUjKoATpbTUxg5hBzIDtYgbKIGbwthrd9bba%2F%2FFttQu8paZ3QO%2BAhEnvAJlLkvUOgBqoqUdhu94BdpfdZQDYXXbXPQBlUEvVOyBmEDOIGbgJMQNlEDPoHaC7egdecO%2FA%2BXsFBO4Cd4ZX4M7fCdwpg8Cd7tJdgfvLr7DDIAzC4PM6vjN%2FR%2FO%2FepuP9RZhQ%2Flh0393G15F76KQpHkz8892ZjN3vZnLq2w73NCKQyjzdF7uSCbTSRZZ2aZYposwnzcEFyP02ivyIm1%2BvZq6fdzfPpSLNNuxqJxOr8ehLM%2FnVWjozafTq%2FKkaNHLa%2FakedYQLPYRjL9JMC2TpEUwTcpFqIqGYD6d4CJpczAkZZIvqoZedsQBa3k%2B0itrbQi77033k0uL%2BZh6zdvSCCEvk923hqlne9f%2F1jxU1U5Zkv3kipCOoikr2qKIsxpL6YOyHA6fnn7EeRaKKixm%2FwE%3D
2024-02-20 12:48:34
**Qon** _“Red {13/6} with white CA rule 110. Made to test how much I could reduce previous size this image at 2648 bytes.”_ 2024 image/jxl 443 bytes https://jxl-art.lucaversari.it/?zcode=nVVNb9swDL37V%2BheCBAp6usyYA0K9FAEwzYg52BxZwNFGrRG0f772oklS4q9Vc4pNPUeHymK%2FLn5zUS1aw9dw0AgVfd1%2B7fpLv9v2%2B5Qn3qPrb4%2FnZp9dd8eDvVx0%2ByPx%2FqJgaq2z93D%2FrWr2kf2h31jYCrW%2Fzj7VXcMlTpb3qfPlveKxKdmfJOV0ffWj5f6TfVfhpNxtNFFMy5PlsrJAKmCCZ7qHEHyiyCKQZiBfJWuYTKGQZIRXFLdBq7B2PHB5jAWb%2FjEt3fhyBQEMlsUIyALes3Al4LklEUQXxpMSuPvIbuWrE1GU6emSbK9zneKgv89Oan2GCjHUAbxVKKAKsO6FcrTKuG8KLtekynXpFekIdI8IMsLFhJT6xOjcpWyHOLmdeN63Xah71Yw5pM2TIuPMMS27OayYkbPezQVd4OPrIzGIgcwhNoESlFOqWS8nLhBB1p7QrfAFyNIoT9uS8PzPDwYhzKUyJTzZRWSRNqGAanL%2BSyJeBFRXx4k6QnVHCH%2FJyEakew5YRzYsN2onNCJuIIgjCBnPZ9cIVBhxGf6boCQL87TodJL7aXj2wAgI6ZNXqrtJs%2BVwNrQLGKeTk1b8eo1SRVfBZf9W8Jzs3z9%2BWT9wUmCsuCqTw%3D%3D
Qon
Qon Testing 16 channels xD
2024-02-20 12:52:46
The {15/7} at 8kB made before should also be like 500B with this new code, which is an even better improvement. New code uses one more hidden layer for composition though so it can't generate stars with 15 vertices, I don't have enough hidden layers :(
Qon It's like 8kb as .jxl, I will use some channels now to reduce the size instead of maximizing polygon count
2024-02-20 12:53:37
So I achieved my goal at least.
_wb_ Nah, jxl_from_tree also allows that.
2024-02-20 12:55:17
The comment bug is in jxl_from_tree then I guess
JXL Art Bot
2024-02-20 01:51:25
**Tirr** _“Sun in the sky (smaller)”_ 2024 image/jxl 73 bytes https://jxl-art.lucaversari.it/?zcode=pZBNCsIwEIX37xTvAoHJoKXduKgoLsUK6lJMtAGtRXN%2FTH%2FwAmFg%2BBYzH7x3vtQ4rI8U1CE638eWVnAKbgRdYOfDo40Tbz%2FXl9%2B%2FvzS6LMYFNP0zdB5KyRlYLTMNpWQKhkyZIVJJHDQJhFoINp2bC0K488ZVuiJntAkNGx%2FTj%2FzZVIKJKpEf
Tirr
2024-02-20 01:53:13
well this is still not within Level 5 limits
JXL Art Bot
2024-02-20 02:58:50
**Tirr** _“Sun within the Level 5 limits”_ 2024 image/jxl 61 bytes https://jxl-art.lucaversari.it/?zcode=i4h04gpyDlEw4HLKLElJLSjJUDA04ArPTAEyTA2NuDxSM9MzSsBMruCCnMy8VC4jBQNKIJehkQWFJlgYUOoEM0pNAAYIkDY1NFAw4nLNS4EGDVdmmkKygh1QXkEByjQEMnUVglNLFIxMDeBsXUsDLgjL0sAAAA%3D%3D
_wb_
2024-02-20 06:30:43
We should add a way to set the colorspace of jxl art to a HDR space. Currently it uses the default, which is sRGB.
Qon
_wb_ We should add a way to set the colorspace of jxl art to a HDR space. Currently it uses the default, which is sRGB.
2024-02-20 07:06:28
If possible: oklab, oklch & HSL color spaces would be nice to use in jxl art, if it could be configured per layer. So that nice gradients can me made in a fitting colorspace instead of sRGB or rgb at all.
jonnyawsom3
Qon If possible: oklab, oklch & HSL color spaces would be nice to use in jxl art, if it could be configured per layer. So that nice gradients can me made in a fitting colorspace instead of sRGB or rgb at all.
2024-02-20 07:20:38
I mean XYB is a modified oklab if that's close enough
_wb_
2024-02-20 07:25:39
I meant the image header colorspace enum, which has things like Rec2100 PQ or HLG. So it will be displayed in actual HDR instead of being clipped to SDR white.
2024-02-20 07:26:30
For nice gradients, XYB should work, or even just YCoCg (which is RCT 6 in the new numbering).
Tirr
**Tirr** _“XYB colored gradient”_ 2024 image/jxl 45 bytes https://jxl-art.lucaversari.it/?zcode=TY0xC8IwEIX3%2BxVvEwqhJqWhk0M61CmDCm1HMdFmESk36L%2F3CFE63eN7991Ns6NTf8GeXOIQX7ygozEFmaa1dIzpsTBabYjSHTccZLMETXUFt0NVk8I5chYETRvUiCdozki8Tz4ASHyXqDCs15Dik3%2BNV95LqUxu%2FSZo%2BosKI5rypbP2Cw%3D%3D
2024-02-20 07:36:36
this is a gradient in XYB color space, changing only Y
JXL Art Bot
2024-02-20 07:54:34
**Tirr** _“Changing everything in XYB”_ 2024 image/jxl 52 bytes https://jxl-art.lucaversari.it/?zcode=i4h04gpyDlEw4HLKLElJLSjJULDgCs9MAdJGpmZcHqmZ6RklCqaGRlxcmWkKyQp2QJVQhiEXl76WgpO6gpY%2BSKgSLKegAGRWQJm6Cu5FiSmZqXklMBk%2FXT8%2FuKQfnDbkguvSVQhX0DUEUsGpJUAnGIAtiSDeEpBxumjmGaEZF4lqHMQFECXmBgYA
Tirr
2024-02-20 08:30:43
seems like Alpha cannot be used with XYB
CrushedAsian255
Tirr well this is still not within Level 5 limits
2024-02-20 09:08:42
What are these “levels”?
JXL Art Bot
2024-02-20 09:08:48
**Tirr** _“Various colors”_ 2024 image/jxl 44 bytes https://jxl-art.lucaversari.it/?zcode=i4h04gpyDlEw4HLKLElJLSjJULDgCs9MAdKmhkZcHqmZ6RklYCZXZppCsoIdUCWUYcjFpa%2Bl4KSuoKUPEqoEy%2BkquBclpmSm5pUA5YGiFVDRcCBXVyE4tURBF2wYUGcEuk4%2FBV0cegzAGiKxaoCoMDQ2MAAA
jonnyawsom3
2024-02-20 09:11:11
Reminds me of when I was trying to make an image of all 16bit colors, then realised it would be ludicrously large
Tirr
CrushedAsian255 What are these “levels”?
2024-02-20 09:13:27
there are profiles (currently only Main profile) and levels defined in the spec which limits size and/or features, and they are mainly to provide sane resource bounds for decoders e.g. limiting cpu and memory usage.
2024-02-20 09:16:07
Level 5 is sufficient for web images, whereas Level 10 has quite loose limits which can be used in authoring workflows
**Tirr** _“Various colors”_ 2024 image/jxl 44 bytes https://jxl-art.lucaversari.it/?zcode=i4h04gpyDlEw4HLKLElJLSjJULDgCs9MAdKmhkZcHqmZ6RklYCZXZppCsoIdUCWUYcjFpa%2Bl4KSuoKUPEqoEy%2BkquBclpmSm5pUA5YGiFVDRcCBXVyE4tURBF2wYUGcEuk4%2FBV0cegzAGiKxaoCoMDQ2MAAA
2024-02-20 09:18:02
XYB gradients are quite fun to play with
veluca
Tirr seems like Alpha cannot be used with XYB
2024-02-20 09:21:47
uhhhhm
CrushedAsian255
Tirr Level 5 is sufficient for web images, whereas Level 10 has quite loose limits which can be used in authoring workflows
2024-02-20 11:30:22
Is this list avalubale somewhere
jonnyawsom3
2024-02-20 11:34:51
Wait, huh? It says Level 5 supports any channel except `kBlack`, I would've assumed you'd want that for CMYK image viewing, although it is fair to assume it's only meant for authoring software
CrushedAsian255 Is this list avalubale somewhere
2024-02-20 11:36:55
This good enough?