|
Oleksii Matiash
|
2024-09-07 08:36:23
|
I can't get idea of this channel checks. For me it would be logical just to check y and set color
|
|
|
lonjil
|
2024-09-07 08:41:24
|
the prediction tree runs separately for each channel
|
|
2024-09-07 08:42:02
|
so unless you want to perform the exact same action on each channel, the tree must branch on the channel number
|
|
2024-09-07 08:43:40
|
You could just set the color directly if the image used a palette, but that hasn't been implemented for jxl_from_tree yet
|
|
|
Oleksii Matiash
|
|
lonjil
so unless you want to perform the exact same action on each channel, the tree must branch on the channel number
|
|
2024-09-07 08:47:04
|
Could you please explain what if c > 0 if c > 1 does? Documentation says "c: the channel number, where 0=R, 1=G, 2=B, 3=A (if Alpha was enabled in the header)". So for me it reads as 'if channel > red if channel > green set pixel color to' and it is quite confusing
|
|
|
CrushedAsian255
|
2024-09-07 08:48:28
|
```c
if (c > 0) {
if (c > 1) {
return 1; // c == 2
} else {
return 2; // c == 1
}
} else {
return 3; // c == 0
}```
|
|
|
Oleksii Matiash
Could you please explain what if c > 0 if c > 1 does? Documentation says "c: the channel number, where 0=R, 1=G, 2=B, 3=A (if Alpha was enabled in the header)". So for me it reads as 'if channel > red if channel > green set pixel color to' and it is quite confusing
|
|
2024-09-07 08:49:17
|
Remember, each pixel is made of 3/4 channels or sub pixels
|
|
2024-09-07 08:49:30
|
The tree is ran for each channel, not each pixel
|
|
|
lonjil
|
2024-09-07 08:50:48
|
```
if c > 0
x
y
```
means that if the channel is green, blue, or alpha, do x, otherwise (if it's red) do y.
so ```
if c > 0
if c > 1
// channel is bigger than 1, i.e. it's 2
// channel is isn't bigger than 1, but it is bigger than 0, so it's 1
// channel isn't bigger than 0, so it's 0
```
|
|
|
Oleksii Matiash
|
2024-09-07 08:52:14
|
Finally got it, I was confused by if (else) syntax. Thank you!
|
|
|
lonjil
|
2024-09-07 08:52:31
|
glad to be of help
|
|
|
Oleksii Matiash
|
|
CrushedAsian255
More optimised
|
|
2024-09-07 08:57:27
|
Colors are bit different, here are correct. But anyway, thank you all!
|
|
|
spider-mario
|
2024-09-07 08:58:22
|
yeah, it’s maybe not the clearest syntax
|
|
|
CrushedAsian255
|
|
Oleksii Matiash
Colors are bit different, here are correct. But anyway, thank you all!
|
|
2024-09-07 08:58:41
|
let me change the colous
|
|
|
spider-mario
|
2024-09-07 08:58:50
|
I wonder if just having `<` to be able to flip the branches wouldn’t help already
|
|
|
CrushedAsian255
|
2024-09-07 08:58:55
|
also what's the aspect ratio?
|
|
|
spider-mario
I wonder if just having `<` to be able to flip the branches wouldn’t help already
|
|
2024-09-07 08:59:23
|
as in a part of JXL or just `jxl_from_tree`
|
|
|
spider-mario
|
2024-09-07 08:59:34
|
jxl_from_tree, as syntaxic sugar
|
|
|
CrushedAsian255
|
2024-09-07 08:59:47
|
could help, wouldn't be too hard to add i wouldn't think
|
|
|
spider-mario
|
2024-09-07 09:00:32
|
I guess we would just have to be careful about the potential off-by-one when flipping
|
|
2024-09-07 09:01:16
|
i < k is the negation of i >= k, which for integers is i > k - 1
|
|
2024-09-07 09:01:25
|
so we would need to remember that -1
|
|
|
CrushedAsian255
|
2024-09-07 09:01:57
|
maybe also add `>=` and `<=` while we're at it
|
|
|
Oleksii Matiash
Colors are bit different, here are correct. But anyway, thank you all!
|
|
2024-09-07 09:02:21
|
here you go
```
Width 900
Height 600
if y > 299
if c > 0
if c > 1
- Set 0
- Set 215
- Set 255
if c > 0
if c > 1
- Set 184
- Set 87
- Set 0
```
|
|
|
spider-mario
|
2024-09-07 09:02:38
|
speaking of off-by-ones, I think my Swiss flag has them
|
|
|
CrushedAsian255
|
2024-09-07 09:02:51
|
|
|
2024-09-07 09:03:02
|
this is with those pantone colours
|
|
2024-09-07 09:03:18
|
although i think colour spaces are doing something funky
|
|
|
spider-mario
|
2024-09-07 09:04:03
|
it’s probably just the screenshot that’s “wrong” (in the display colorspace but tagged as sRGB)
|
|
|
CrushedAsian255
|
2024-09-07 09:04:11
|
probably
|
|
|
Oleksii Matiash
|
2024-09-07 09:05:52
|
If you are talking about my screenshot - yes, monitor is +/- AdobeRGB, and screenshots looks incorrect
|
|
|
CrushedAsian255
|
|
spider-mario
speaking of off-by-ones, I think my Swiss flag has them
|
|
2024-09-07 09:06:54
|
I think at least “>=“ should be added just for convenience
|
|
2024-09-07 09:07:01
|
As off by ones are really annoying
|
|
2024-09-07 09:07:15
|
My original render had an off by one I think
|
|
|
Oleksii Matiash
|
2024-09-07 09:07:26
|
I'd prefer 'else' if only one change is possible 🙂
|
|
|
CrushedAsian255
also what's the aspect ratio?
|
|
2024-09-07 09:08:21
|
3:2
|
|
2024-09-07 09:15:01
|
Suggestion for all in this channel, let's post sources of your images, if there are no secrets 🙂 It would help newbies a lot
|
|
|
monad
|
2024-09-07 09:16:48
|
the overwhelming majority of these do have sources, usually via a link to the online tool
|
|
|
CrushedAsian255
|
2024-09-07 09:16:55
|
The links the bots post go to the source
|
|
2024-09-07 09:17:36
|
The JXL-art zcode link
|
|
|
Oleksii Matiash
|
2024-09-07 09:17:53
|
Oh, then I shoud be more attentive 🤦♂️
|
|
|
monad
|
|
Oleksii Matiash
I'd prefer 'else' if only one change is possible 🙂
|
|
2024-09-07 09:18:27
|
consider just typing your else, or some other note in a C-style comment block `/* ... */`
|
|
|
CrushedAsian255
|
|
**dogelition**
_“Chromatic Stripes”_
2024
image/jxl
22 bytes
https://jxl-art.lucaversari.it/?zcode=c0nNKUkMSMxJLSlJ5QrPTCnJUDA1NOLySM1MzygBM7l0FfwUdI2MuQA%3D
|
|
2024-09-07 09:23:52
|
How does delta palette work?
|
|
|
lonjil
|
|
monad
consider just typing your else, or some other note in a C-style comment block `/* ... */`
|
|
2024-09-07 09:27:54
|
this is buggy though, doesn't always work
|
|
|
CrushedAsian255
How does delta palette work?
|
|
2024-09-07 09:32:25
|
positive numbers use a regular palette (there is a default one) and negative numbers use deltas that apply to a prediction. So if some delta entry has the value (0,1,-1), then the currect pixel will be whatever the predictor predicted in the red channel, whatever it predicted plus 1 in the green channel, and whatever it predicted minus 1 in the blue channel.
|
|
|
monad
|
2024-09-07 09:38:05
|
hmm, maybe comments are more reliable in the EJS interface then. personally I made my own preprocessor before they were built into jxl_from_tree
|
|
2024-09-07 09:39:26
|
also avoids that annoying tab behavior
|
|
|
CrushedAsian255
|
|
lonjil
positive numbers use a regular palette (there is a default one) and negative numbers use deltas that apply to a prediction. So if some delta entry has the value (0,1,-1), then the currect pixel will be whatever the predictor predicted in the red channel, whatever it predicted plus 1 in the green channel, and whatever it predicted minus 1 in the blue channel.
|
|
2024-09-07 09:47:11
|
not sure what that means, don't negative numbers always subtract?
|
|
|
lonjil
|
2024-09-07 09:47:56
|
if you're using a palette, numbers tell you which palette entry to use
|
|
2024-09-07 09:48:14
|
0 and positive numbers use the regular palette, negative numbers use the delta palette
|
|
|
CrushedAsian255
|
2024-09-07 09:48:28
|
is the delta palette a second palette
|
|
2024-09-07 09:49:21
|
oh, so the normal palette is palletising the pixels, where the delta pallete is palletising the residuals?
|
|
|
lonjil
|
|
CrushedAsian255
|
2024-09-07 09:50:23
|
that makes sense
|
|
2024-09-07 09:50:36
|
but now are there 4 channels?
|
|
|
lonjil
|
2024-09-07 09:50:52
|
there's just one palette channel and just one image channel
|
|
|
CrushedAsian255
|
2024-09-07 09:51:03
|
image channel?
|
|
|
lonjil
|
2024-09-07 09:51:35
|
as in, the channel that holds the image data. it's just one channel when you're using a palette
|
|
|
CrushedAsian255
|
2024-09-07 09:51:40
|
the delta palette is storing deltas to a prediction, how is that prediction stored?
|
|
|
lonjil
as in, the channel that holds the image data. it's just one channel when you're using a palette
|
|
2024-09-07 09:51:48
|
like PNG indexed colour?
|
|
|
lonjil
|
2024-09-07 09:51:53
|
yes
|
|
|
CrushedAsian255
the delta palette is storing deltas to a prediction, how is that prediction stored?
|
|
2024-09-07 09:52:04
|
the prediction isn't stored. it's predicted :p
|
|
|
CrushedAsian255
|
2024-09-07 09:52:18
|
so are there 4 trees?
|
|
|
lonjil
|
|
CrushedAsian255
|
2024-09-07 09:52:38
|
don't you need R,G,B trees then the delta palette index tree?
|
|
|
lonjil
|
2024-09-07 09:52:48
|
there's 1 palette channel, where you probably aren't using trees at all
|
|
2024-09-07 09:53:12
|
and there's 1 image channel, which just has a single number for each pixel that tells you which palette entry to use
|
|
2024-09-07 09:53:24
|
you can use a tree on the second channel
|
|
|
CrushedAsian255
|
2024-09-07 09:53:51
|
for delta are there 2 palettes? the positive (normal pixel data) palette and the negative (delta entry) palette?
|
|
|
lonjil
there's 1 palette channel, where you probably aren't using trees at all
|
|
2024-09-07 09:54:04
|
wouldn't there be 3 palette channels, one for R,G,B?
|
|
|
lonjil
|
2024-09-07 09:54:14
|
the palette channel is 3 tall, and as wide as the number of palette entries. the first row is R, the second row is G, and the third row is B
|
|
|
CrushedAsian255
|
2024-09-07 09:54:14
|
otherwise wouldn't the palette be greyscale?
|
|
2024-09-07 09:54:26
|
oh that makes sense
|
|
|
lonjil
|
|
CrushedAsian255
for delta are there 2 palettes? the positive (normal pixel data) palette and the negative (delta entry) palette?
|
|
2024-09-07 09:54:45
|
delta palette and regular palette are stored in the same channel
|
|
|
CrushedAsian255
|
2024-09-07 09:55:11
|
so they're the same palette being read differently?
|
|
|
lonjil
|
2024-09-07 09:55:56
|
part of the palette is delta entries, and another part is regular entries
|
|
2024-09-07 09:56:13
|
there's some math to map negative numbers to the delta entries and positive numbers to the regular entries
|
|
|
CrushedAsian255
|
|
lonjil
positive numbers use a regular palette (there is a default one) and negative numbers use deltas that apply to a prediction. So if some delta entry has the value (0,1,-1), then the currect pixel will be whatever the predictor predicted in the red channel, whatever it predicted plus 1 in the green channel, and whatever it predicted minus 1 in the blue channel.
|
|
2024-09-07 09:56:15
|
> whatever the predictor predicted in the red channe
what prediction to the red channel though?
|
|
2024-09-07 09:56:37
|
you said there are 2 channels
|
|
|
lonjil
|
2024-09-07 09:56:53
|
you still output 3 color channel though
|
|
|
CrushedAsian255
|
2024-09-07 09:57:08
|
oh, so it's like a running total?
|
|
2024-09-07 09:57:33
|
like if the previous pixel is (30,20,10) and the delta says (1,2,3) then output (31, 22, 13)?
|
|
|
lonjil
|
2024-09-07 09:57:51
|
depends on the predictor
|
|
|
CrushedAsian255
|
2024-09-07 09:57:59
|
what predictor?
|
|
2024-09-07 09:58:14
|
the image channel is storing palette indexes isn't it?
|
|
|
dogelition
|
|
CrushedAsian255
like if the previous pixel is (30,20,10) and the delta says (1,2,3) then output (31, 22, 13)?
|
|
2024-09-07 09:58:50
|
instead of "previous pixel" it would be "predicted pixel", i think?
|
|
|
lonjil
|
2024-09-07 09:58:58
|
when you're using delta palette, there's a fixed predictor that runs on every pixel whose palette index is negative
|
|
|
dogelition
instead of "previous pixel" it would be "predicted pixel", i think?
|
|
2024-09-07 09:59:15
|
yes. and the predictor will use some combination of information from previous pixels.
|
|
|
_wb_
|
2024-09-07 09:59:35
|
in jxl_from_tree you can currently only use the default palette, which has zero defined colors, so positive indices are predefined colors and negative indices are predefined delta palette entries
|
|
|
CrushedAsian255
|
2024-09-07 10:00:34
|
so a delta pixel is
```
output = FixedPredictor() + delta_palette[palette_index]
```
?
|
|
|
_wb_
|
2024-09-07 10:01:17
|
in the jxl bitstream, you can have a non-default palette, and then the first N entries are interpreted as delta palette entries, and the next ones are interpreted as regular palette colors. The number N is signaled as part of the Palette transform info.
|
|
2024-09-07 10:01:51
|
(also the type of predictor to use for the delta entries, the number of channels to apply Palette to, etc)
|
|
|
CrushedAsian255
|
|
_wb_
in the jxl bitstream, you can have a non-default palette, and then the first N entries are interpreted as delta palette entries, and the next ones are interpreted as regular palette colors. The number N is signaled as part of the Palette transform info.
|
|
2024-09-07 10:01:52
|
that makes sense
|
|
|
_wb_
|
2024-09-07 10:02:55
|
the jxl Palette transform is as generic and flexible as we could think of, even with an empty palette you can do lots of things 🙂
|
|
|
|
JXL Art Bot
|
2024-09-07 10:59:47
|
**Dominikhlbg**
_“German flag”_
2024
image/jxl
36 bytes
https://jxl-art.surma.technology/?zcode=c8osSUktKMlQsOAKz0wB0pZmBlweqZnpGSVgJldmmkKlgp2CmYkBl4ICkJMM5ICYIADlGkK5Cgq6CsGpJXBpGN%2FI0JQLhW9qCjPW2Ih8Yw0wDIWKAwA%3D
|
|
|
CrushedAsian255
|
2024-09-07 11:08:32
|
<@736640522042605604>
You can actually optimise it a little bit
|
|
2024-09-07 11:08:38
|
```
Bitdepth 8
Width 960
Height 960
if y > 320
if c > 0
if y > 640
if c > 1
- Set 0
- Set 215
- Set 0
- Set 255
- Set 0
```
|
|
2024-09-07 11:09:01
|
im guessing mine can also be optimised further
|
|
2024-09-07 11:22:02
|
someone should try to make a svg to jxl art converter
|
|
|
monad
|
2024-09-07 11:34:11
|
https://github.com/wwww-wwww/spline
|
|
|
_wb_
|
2024-09-07 11:54:44
|
Would be nice to add support for some solid shapes to that too, in addition to lines. Rectangles are easy to do as a MA tree. Shapes with diagonal lines at 45 degrees are also relatively easy.
|
|
|
|
JXL Art Bot
|
2024-09-07 12:21:27
|
**spider-mario**
_“Swiss Flag (pantone 485C, delta palette)”_
2024
image/jxl
65 bytes
https://jxl-art.surma.technology/?zcode=c8osSUktKMlQsOAKz0wB0pZmBlweqZnpGSVgpktqTkliQGJOaklJqkJmGlelgh2XobkljGkOZOpyBaeWKJgbcXFlpikABRVMzSy5FIAqFCrgHAUFXQWoKhAHKmdsAZGDyRpaWKDwwaqhhsLUQrUCLcZUiiRvCJfHNBy7Y2AOxWUiwrF4TYQzAA%3D%3D
|
|
|
spider-mario
|
2024-09-07 12:22:08
|
oops, the “Prettify” button doesn’t seem to interact well with DeltaPalette
|
|
2024-09-07 12:22:45
|
here it is with correct formatting https://jxl-art.surma.technology/?zcode=c8osSUktKMlQsOAKz0wB0pZmBlweqZnpGSVgpktqTkliQGJOaklJKhdXZppCpYKdgqG5JZeCApRjDuYoKOgqBKeWKJgbgTlQOVMziBxYoAJFAE0DkhpjC4QamCpDCwsMMbhOqGXI-qBGwdyGw0K4OkMUddgtxe1gZE_hswXVY0TYAmcCAA
|
|
|
CrushedAsian255
|
2024-09-07 12:25:51
|
are you just using DeltaPalette for palette instead of specifically delta?
|
|
|
spider-mario
|
2024-09-07 12:25:55
|
yes
|
|
2024-09-07 12:26:06
|
I’m using the implicit default palette
|
|
2024-09-07 12:27:18
|
the red is quite approximate though
|
|
|
CrushedAsian255
|
2024-09-07 12:27:44
|
is there a way to define custom palette using `jxl_from_tree`?
|
|
|
spider-mario
|
2024-09-07 12:27:51
|
it’s supposed to be (218, 41, 28), but it seems to be (191, 63, 0) instead
|
|
2024-09-07 12:28:17
|
I got the palette indices by rebuilding with this:
```patch
diff --git a/lib/jxl/modular/transform/enc_palette.cc b/lib/jxl/modular/transform/enc_palette.cc
index 3392b4f8b..212777c8b 100644
--- a/lib/jxl/modular/transform/enc_palette.cc
+++ b/lib/jxl/modular/transform/enc_palette.cc
@@ -96,6 +96,17 @@ static int QuantizeColorToImplicitPaletteIndex(
}
}
+static bool printed = [] {
+ int red = QuantizeColorToImplicitPaletteIndex(
+ {218, 41, 28}, /*palette_size=*/0, /*bit_depth=*/8,
+ /*high_quality=*/true);
+ int white = QuantizeColorToImplicitPaletteIndex(
+ {255, 255, 255}, /*palette_size=*/0, /*bit_depth=*/8,
+ /*high_quality=*/true);
+ fprintf(stderr, "red = %d, white = %d\n", red, white);
+ return true;
+}();
+
} // namespace palette_internal
int RoundInt(int value, int div) { // symmetric rounding around 0
```
|
|
2024-09-07 12:29:07
|
then, running pretty much any binary (which also happens while building) will print
```
red = 72, white = 188
```
|
|
|
_wb_
|
2024-09-07 12:35:17
|
I did something similar here: https://discord.com/channels/794206087879852103/824000991891554375/1281672949044215850
To find the color, I remembered it was a 4x4x4=64 color cube followed by a 5x5x5=125 color cube, so white is at the end of that and I manually looked for a good red in the second cube. I was actually on the fence about going with 67 or 72 🙂
|
|
|
Meow
|
|
**spider-mario**
_“Swiss Flag (pantone 485C, delta palette)”_
2024
image/jxl
65 bytes
https://jxl-art.surma.technology/?zcode=c8osSUktKMlQsOAKz0wB0pZmBlweqZnpGSVgpktqTkliQGJOaklJqkJmGlelgh2XobkljGkOZOpyBaeWKJgbcXFlpikABRVMzSy5FIAqFCrgHAUFXQWoKhAHKmdsAZGDyRpaWKDwwaqhhsLUQrUCLcZUiiRvCJfHNBy7Y2AOxWUiwrF4TYQzAA%3D%3D
|
|
2024-09-07 02:31:29
|
Even much smaller than the .svg on Wikimedia Commons
|
|
|
spider-mario
|
2024-09-07 02:59:22
|
to be fair, the use of the implicit default palette means that the red is somewhat off
|
|
|
**spider-mario**
_“Swiss Flag”_
2024
image/jxl
102 bytes
https://jxl-art.surma.technology/?zcode=zZIxEgIhDEV7TpELOBNUXLaxsLK38AAuunQWFHp7dxE0gWCpVvBD5v83CTsfBncNI1h19MN09htUe%2BcvY4hX5c9why1oiwogiS6KKE%2BTfIqX1EkCLODgAixtUVjnjvSubXabzU1H%2FG6sUCWKqWKykF4TkNBVj3WbMXUusggRpoEjAtVIaSwUKDHmNXyXhwBoi1IrG1MDrInWhGvgfdgh%2FTg%2FmQ%2F%2FRP8wH5ZVJBS%2BzO3t8QA%3D
|
|
2024-09-07 02:59:48
|
this one has a legal colour
|
|
2024-09-07 03:02:11
|
(the same as on wikipedia, incidentally)
|
|
|
CrushedAsian255
|
2024-09-07 03:03:21
|
They probably took the colour from the Wikipedia SVG code
|
|
|
dogelition
|
|
spider-mario
this one has a legal colour
|
|
2024-09-07 03:22:55
|
i made it smaller by using `HiddenChannel` as a mask https://jxl-art.surma.technology/?zcode=jY-xDsIgEIZ3nuJewARqaWFx0MXRxMHZyCkkpjENMfr2Qgu0JaFx4r7jv_-_2xur8GU1CHIxyr2yoeSI5qHtWBqlsDvoa9fhExgh5g432AElAK489fh2VPHaMcAGzmgd8YGClA2QsAqY1CJr1HEg_DMxZn29Vyujtcc2YNTSKcp_80Ymb9f6ZK18aibbirksP6w0HmKXw8FxWrUUnaQsk5biV_Zfnrmalp_6X1qsfw
|
|
|
CrushedAsian255
|
2024-09-07 03:23:33
|
Basically using a hidden channel to store a 1 bit image?
|
|
|
spider-mario
|
2024-09-07 03:24:02
|
ooh, very neat
|
|
|
CrushedAsian255
|
2024-09-07 03:24:33
|
You could probably store arbitrary bit planar images like that
|
|
|
dogelition
|
|
CrushedAsian255
Basically using a hidden channel to store a 1 bit image?
|
|
2024-09-07 03:24:50
|
yes, i use `255` on the hidden channel where the flag should be white, and on the other channels i check if the previous channel value is `255`, and if it is, set the current channel to 255, otherwise to the red of the flag
|
|
|
CrushedAsian255
|
2024-09-07 03:24:52
|
As long as you can reference back far enough with Prev
|
|
|
dogelition
|
2024-09-07 03:26:45
|
also, curious if anyone can manage to get my austria flag below 41 bytes... i tried a bunch of tricks like this one but couldn't do it
|
|
|
CrushedAsian255
|
2024-09-07 03:26:51
|
Which one?
|
|
|
dogelition
|
2024-09-07 03:26:59
|
https://discord.com/channels/794206087879852103/824000991891554375/1281651168631853202
|
|
2024-09-07 03:27:59
|
feels like there should be some trick there to get it smaller, but idk
|
|
|
lonjil
|
2024-09-07 03:40:16
|
I used 4 hidden channels to have 4 masks to make the flag of Seychelles https://jxl-art.lucaversari.it/?zcode=lZA9C8IwGIRn%2ByveXQr5bl0c7OKkokLnYqMNSJQSRP%2B9adqEgNri9twldwfvvjgCStaqrqUumkpreQWWrJSp5d00kCfbVkltKqNu2j6UqrbuQtiIVJfGALOYqDOcYGl7BsAeiAcaPjEP3Fm7Vj6oj3SCxYLHQjiRwkEawFQMlPMBqAfCPfE8bJC4aWqwTwsPBGe%2FNzChYQTHVVOLfRyFQhLWPkf6G7%2FcjQFS2MAcMKedsP7T%2BbMUSvvUhWZ%2FpzhGoylEvqUyMbrVlY6H3g%3D%3D
|
|
2024-09-07 03:40:23
|
it's definitely a powerful technique
|
|
|
CrushedAsian255
|
|
dogelition
also, curious if anyone can manage to get my austria flag below 41 bytes... i tried a bunch of tricks like this one but couldn't do it
|
|
2024-09-07 03:42:47
|
I saved 1 byte
https://jxl-art.surma.technology/?zcode=c8osSUktKMlQsOAKz0wB0qbmZlweqZnpGSUKxhYmXFyZaQrJCnYKBlwKCkBmQFFqGZBnZADiKyjoKgSnligYmZqCeVClhmAOTNLEDIVraAYxqBKk0Mgcpg_EhRkDNxZqCbo1CFkA
I lowered the image resolution to take advantage of the div8 resolution mode
|
|
|
|
JXL Art Bot
|
2024-09-07 03:46:17
|
**\_wb\_**
_“Flag of Austria, using YCoCg”_
2024
image/jxl
37 bytes
https://jxl-art.surma.technology/?zcode=c8osSUktKMlQsOAKcg5RMOMKz0wB8iwNDLg8UjPTM0oUzIBMrsw0hWQFOwUDLgUFKNMQyFRQ0FUITi1R0DU0MkDiGlpA1VWC1FlagqWgXGMoF6bWzACFa2KAbBBQEgA%3D
|
|
|
_wb_
|
2024-09-07 03:48:37
|
I haven't tried to get the colors exact, but it should be possible. Basically I set the whole image to the right chroma value for the red, and then it's only the luma channel that needs to be adjusted. Using a "brighter than white" value for chroma makes the resulting color clamp to white so the chroma values don't matter (this trick only works for white and black)
|
|
|
CrushedAsian255
|
2024-09-07 03:49:42
|
Forgot RCTs existed lol
|
|
|
dogelition
|
|
_wb_
I haven't tried to get the colors exact, but it should be possible. Basically I set the whole image to the right chroma value for the red, and then it's only the luma channel that needs to be adjusted. Using a "brighter than white" value for chroma makes the resulting color clamp to white so the chroma values don't matter (this trick only works for white and black)
|
|
2024-09-07 04:03:49
|
interesting approach, i just tried a similar "brighter than white" trick using the `N` predictor to add and subtract from the channels, and it *almost* works, but the stripes end up off by 1 pixel
|
|
2024-09-07 04:04:07
|
https://jxl-art.surma.technology/?zcode=c8osSUktKMlQsOAKz0wB0pYGBlweqZnpGSUKZkAmV2aaQqWCnYKhpSWXggKUYwzmKCjoKvgpGIBZUAkjqAREStfI1AyJC-EBVSYDVcK1gTiGcFXBqSUKJmYoXEMzLgTHCOgkAA
|
|
2024-09-07 04:04:50
|
that off-by-1 should be fixable by picking different constants, but that might make it exceed 40 bytes
|
|
2024-09-07 04:16:54
|
nice, your approach indeed worked to get it down to 37 bytes with the correct colors https://jxl-art.surma.technology/?zcode=VYqxDkAwGAb3_ym-F2jyNyhdDCxmJB5AS7sZunh7RSW63eWu88HYIzg0NPYzFC3eRNPMNFi_uwAVkfyGFS2YgIQyIiAw2QAhuf6prMr3O-9P6yclLZJ-r8q1ZKYsXg
|
|
|
|
JXL Art Bot
|
2024-09-07 04:38:41
|
**\_wb\_**
_“Shaving off one more byte by reducing resolution ”_
2024
image/jxl
36 bytes
https://jxl-art.surma.technology/?zcode=c8osSUktKMlQsOAKcg5RMOMKz0wB8ozNDLg8UjPTM0oUjEwMuLgy0xSSFewUDLgUFKBMQyBTQUFXITi1REHX0MAciWtoagJRVwlUZ24JloHyDE0hXJhSM1SusaUlF4okAA%3D%3D
|
|
|
Meow
|
2024-09-07 06:50:16
|
Still possible for the most complicated flags?
|
|
|
yoochan
|
2024-09-07 07:15:15
|
I want to see the flag of the Portugal now ! 😄
|
|
|
jonnyawsom3
|
2024-09-07 09:15:35
|
Should try and do as many flags as we can, then compare the sizes to their SVG/emoji equivalents on the new website ;P
|
|
|
monad
|
|
yoochan
I want to see the flag of the Portugal now ! 😄
|
|
2024-09-07 10:03:25
|
looking forward to your result
|
|
|
Traneptora
|
2024-09-07 10:12:21
|
I wonder what MA tree will be learned if you use the flag of the United States
|
|
|
jonnyawsom3
|
2024-09-07 10:25:56
|
The idea of encoding with cjxl, then viewing the tree and streamlining it is an interesting idea
|
|
2024-09-07 10:26:11
|
Might actually be slower than running e11 though ;P
|
|
|
monad
|
2024-09-07 10:31:05
|
can't do that straightforwardly with libjxl producing non-zero residuals
|
|
|
jonnyawsom3
|
|
lonjil
|
2024-09-07 11:01:52
|
I think the tree for the xor pattern was found via throwing an image at cjxl
|
|
|
CrushedAsian255
|
|
Traneptora
I wonder what MA tree will be learned if you use the flag of the United States
|
|
2024-09-08 12:01:14
|
The stars might have to be done with patches
|
|
|
Traneptora
|
2024-09-08 12:01:48
|
For max efficiency, probably
|
|
|
CrushedAsian255
|
2024-09-08 12:14:23
|
How do you draw a star using JXL art?
|
|
|
lonjil
|
|
CrushedAsian255
How do you draw a star using JXL art?
|
|
2024-09-08 12:31:38
|
<@265247121261854722> figured out a method earlier this year: https://discord.com/channels/794206087879852103/824000991891554375/1208537351278694461
|
|
|
|
JXL Art Bot
|
2024-09-08 07:42:52
|
**dogelition**
_“Identity 3D LUT”_
2024
image/jxl
43 bytes
https://jxl-art.surma.technology/?zcode=c8osSUktKMlQMOMKz0wB0qaGRlweqZnpGSVgJldmmkKygp2CAZeCApRpCGSCORVQcSg3IKAotQxJSEFBVyEcjWeIUF6JohSkH107SIsfBt8CycDg1BKoPJqBQK4fkGtmhFUxzCiYaxByKL4CcsKRDUE1AuEdmDgA
|
|
2024-09-08 08:21:22
|
**\_wb\_**
_“Funky iPhone 16 wallpaper”_
2024
image/jxl
31 bytes
https://jxl-art.lucaversari.it/?zcode=43LKLElJLSjJUDA04grPTAEyTMyNuDxSM9MzShQMDYxMuFxSc0oSAxJzUktKUrm4MtMUwrX9dP3CFewUdE0suHQVHMvSgSIKuoZAdjhYX2qKgrERAA%3D%3D
|
|
|
Meow
|
2024-09-08 08:52:59
|
Melted cloth
|
|
|
lonjil
|
2024-09-08 09:47:01
|
I like how you can keep a similar structure but completely change the colors by changing the number in the if condition
|
|
|
|
JXL Art Bot
|
2024-09-08 10:04:54
|
**\_wb\_**
_“YCoCg visualization”_
2024
image/jxl
55 bytes
https://jxl-art.lucaversari.it/?zcode=Zc0xDoAwCAXQnVNwgSaFSNPJQXcHNfEAWqObQwe9vWhKYuLEC%2FChb0cM0Ox5SUfeMALsK85YI726VP5Bp3AsAZzSkZYhZWSRjyzqX50WnRQsVVksRyakb8N%2BCZFlH5bbbGEK%2Fj8mjkWhAoAb
|
|
2024-09-08 10:10:42
|
**\_wb\_**
_“XYB visualization”_
2024
image/jxl
63 bytes
https://jxl-art.lucaversari.it/?zcode=i4h04uLKTFNIVrBTMASzKoEsAxDDD8jQNTU04NIFMnWNgFRwaomCqaEhEgum1QDMqoBpDQcyIDpBCnUhesIVjJAFYHaB2FC9CLMNzQxgug2NDAwwFVjA5U2ALC4uAA%3D%3D
|
|
2024-09-08 10:14:46
|
**\_wb\_**
_“YCbCr visualization”_
2024
image/jxl
56 bytes
https://jxl-art.lucaversari.it/?zcode=c06KdC7icsosSUktKMlQsOTiykxTSFawUzAEsyqBLAMQww%2FI0DUyNePSBTJ1DYFUcGqJgpGpKRILptWAC67X1NAQxKyAMqFqDQygLFMDTFldU5isLkghF0wFWGk4kGFkagJXAHZQuIIhsgAA
|
|
|
dogelition
|
2024-09-08 10:17:29
|
those are nice
|
|
|
CrushedAsian255
|
2024-09-08 10:19:40
|
very colourful
|
|
|
_wb_
|
2024-09-08 10:57:01
|
You can see how those "same-luma" planes are only roughly the same actual luminosity in YCoCg and YCbCr, while XYB has slices that actually do look like they're constant luminosity.
|
|
2024-09-08 11:07:35
|
(even though the Y of XYB is only based on L+M, not S cones)
|
|
|
CrushedAsian255
|
2024-09-08 11:11:42
|
is it just because S cones are quite weak?
|
|
|
_wb_
|
2024-09-08 12:51:39
|
For jxl, XYB is designed the way it is because the frequency sensitivity for S cones is lower than for L and M cones. While S cones do contribute to overall luminosity (but with a small weight, see e.g. the weights for blue in the various yuv matrices), this is only really true for large areas of color (say, color patches with a diameter of several degrees of visual angle). At higher frequencies (pixel-sized colors), it's basically only L and M cones that do the work.
|
|
|
spider-mario
|
2024-09-08 04:22:38
|
for what it’s worth, here are their unnormalised sensitivities
|
|
2024-09-08 04:24:26
|
|
|
|
jonnyawsom3
|
2024-09-10 05:20:11
|
<@179701849576833024> do you think you could update the website to allow this? https://github.com/libjxl/libjxl/pull/3728
|
|
2024-09-10 05:20:44
|
Or is that a bump to 0.11 when it comes out soon™
|
|
|
|
veluca
|
2024-09-10 05:31:43
|
ping me again when 0.11 is out 😄
|
|
|
jonnyawsom3
|
2024-09-10 05:32:08
|
Will do
|
|
|
_wb_
|
2024-09-11 03:07:29
|
Does anyone feel like implementing this test pattern as a jxl art? https://www.itu.int/dms_pubrec/itu-r/rec/bt/R-REC-BT.2111-2-202012-I!!PDF-E.pdf
(the one for PQ full range, for example — we don't have narrow range in jxl, at least not in the enum colorspaces)
|
|
|
dogelition
|
|
_wb_
Does anyone feel like implementing this test pattern as a jxl art? https://www.itu.int/dms_pubrec/itu-r/rec/bt/R-REC-BT.2111-2-202012-I!!PDF-E.pdf
(the one for PQ full range, for example — we don't have narrow range in jxl, at least not in the enum colorspaces)
|
|
2024-09-11 03:38:25
|
sounds right up my alley... i guess it would have to be done at half the size of the 2K version? (actually that doesn't quite work, d/2 wouldn't be an integer then...)
|
|
|
_wb_
|
2024-09-11 03:41:37
|
half the size (maybe with `Upsample 2`) is easiest but you could also make an image that is actually 2K, it's just a bit annoying that 1920x1080 requires four groups so you'll need some `if g > 21` stuff
|
|
|
dogelition
|
2024-09-11 03:42:11
|
oh, didn't know groups were a thing
|
|
2024-09-11 03:42:26
|
i'll give it a shot later
|
|
|
lonjil
|
2024-09-11 04:16:43
|
I should write a tool that spits out trees for patterns made entirely out of rectangles
|
|
|
_wb_
Does anyone feel like implementing this test pattern as a jxl art? https://www.itu.int/dms_pubrec/itu-r/rec/bt/R-REC-BT.2111-2-202012-I!!PDF-E.pdf
(the one for PQ full range, for example — we don't have narrow range in jxl, at least not in the enum colorspaces)
|
|
2024-09-11 04:24:54
|
huh, right now I wish (delta)palette and hiddenchannel worked at the same time, would make this much easier
|
|
|
|
JXL Art Bot
|
2024-09-11 06:16:09
|
**dogelition**
_“ITU-R BT.2111-2, PQ full range in 2K”_
2024
image/jxl
301 bytes
https://jxl-art.surma.technology/?zcode=rVcxdtswDN1xCl4g74EgIZJLhk6ZsnTIARo38dbBQ3P7WrYkSyRAimo2C5AIEPj4%2BH47v18%2BjU2E8HI6f3xejMWI8ON8eT%2F9GT0IcP5tPsyzIQvGzL%2Fp%2Bvvx5G5Pt%2Be%2F12cXZsNiGnhYTIsxuLVxMUe7Nd8cv64OzMyLwxYOY57Mz9PFcCTVR1h%2BN3nS92VAxKrPOa9kwN7Djvhq9Pn22vnOBxC%2F4PVZd9sj6PROyvodUt5uy6lsN7kktZutK291c0QnlfsOJ6ngczokORd34iS6y%2BvJfgTd53UcoIY1hPbrx9rvmHcDY8o%2FRGhEVWLOtSPZHrcDNUVLFiqxxEjTzQJCK%2FocOc1U9TUCh9IDu6Mh2A14R1NEAbxrTlN5rcJtVX6rMkyDZVpcV%2Be7Gud9T1Yy%2F9U5UOfBRk7VjHROrPGixo3aqEokMjU%2Bf%2FFNxDatCrKArzzMepQASV5hU%2BdVQHqfdDYdmKGfLO9ei%2BTUcibSeCvaKBY6WIlFBuvLqbcE6i0m8sFy8LO5H20pb9qrKS1P3qFEGV0NkrrQVBfVCmPP6OjLTY10XBR1pq18dGwr7j5%2B%2FUG2PorlIayOUhwp8kgVSBWJVBVJDZnUFEo7pFJbLNXlUlUwtcFIuLO5xyHqmKFnh0gC6rBuT6QKt0EWbsn%2Bl3DLBZWWyVZUbWCOoO%2B2bXMEuM9o9hGaKJ4jspenJXKALkDnO0MoLyZNY6P8R4qQQeSY3X%2BviiqVW0raUfmGKvbTsm54d6nLih6fK%2BxbCp1j3XlSdSbkicjOLowPwPwD
|
|
|
dogelition
|
2024-09-11 06:16:20
|
verification of correctness is left as an exercise for the reader
|
|
2024-09-11 06:17:16
|
not sure if there's a better way to handle the bottom row of pixels that fall into the last 2 groups, i just copypasted the tree from the previous tiles
|
|
|
spider-mario
|
2024-09-11 06:23:55
|
any reason not to tag it as PQ?
|
|
|
dogelition
|
2024-09-11 06:24:27
|
not supported on the site yet, i think? https://discord.com/channels/794206087879852103/824000991891554375/1282936525138558988
|
|
|
spider-mario
|
2024-09-11 06:24:50
|
ah, true
|
|
|
dogelition
|
2024-09-11 06:28:28
|
did it locally, here's the file tagged as bt.2100 pq
|
|
|
|
embed
|
2024-09-11 06:31:24
|
https://embed.moe/https://cdn.discordapp.com/attachments/824000991891554375/1283494386898047017/art.jxl?ex=66e332cc&is=66e1e14c&hm=49bb22fc39b27fe6c5084af48e32840539cd005d2b548d3c91909569de6a8085&
|
|
|
Tirr
|
2024-09-11 06:44:40
|
are those weird colors at bottom left and right from tonemapping? it looks correct with proper HDR support (tested with jxl-oxide-wasm on chrome)
|
|
|
dogelition
|
|
Tirr
are those weird colors at bottom left and right from tonemapping? it looks correct with proper HDR support (tested with jxl-oxide-wasm on chrome)
|
|
2024-09-11 06:46:11
|
you mean in the preview here? that's just (wrongly) tagged as sRGB
|
|
2024-09-11 06:46:25
|
though discord does support hdr png files, so one sec
|
|
2024-09-11 06:47:25
|
|
|
|
dogelition
not sure if there's a better way to handle the bottom row of pixels that fall into the last 2 groups, i just copypasted the tree from the previous tiles
|
|
2024-09-11 06:48:57
|
currently thinking that this should be doable by using alpha compositing, putting the bottom bars on the first layer and then making the second layer's last 2 groups fully transparent + making the bottom pixels of the first 2 groups transparent? not sure if that works
|
|
2024-09-11 06:49:51
|
here's the tree without the copypasting for the bottom part, if anyone has a better idea <https://jxl-art.surma.technology/?zcode=tVUxdsMgDN05BRfIewKBgaVDp05dOuQATZp46-ChvX0d2xAHJGLy0s3WBySk__n7_jCcpQoaxNuxP50HqcCDeO2Hw_H7goAQ_Zc8yReplZAyfuvxW8qd_DgOEqbvEfkdkU6H6TcFnIqBFPJwDU3BnzGIDlfBFO5sdxNOgMMcSJBXJTSBnyMIBJRARYLxotbrKq6B3r-g4X-q0tpWcURTqcoaIxpqqlYUu1TLh8YJdqfNz10TLFsbsORQvnCfFbo0bNWQRL7yMGWAIqQ2SBMSDUtIYwLdy5nhttbNgBVUgUa2nUGXY5oRrzzZaJcJZ452aj3QpSylBXuLeYmBUviZ7i-xkA_tXZaRnUGgnoymAVFTqPB5Q4ehRTrclkom9rRnl81sYvKz2RuPX2_I7KMwD8I6ohEQZqJsIKmBgaaGVchp13qsaVdxD_dUmuae7mVBsIFZcE__dUatVFh7qnkyatg43McpiuS7x3vIch_nn0BRGzSH-I7kqAlK3MnK5Fxu60BsqSRWQdAcBO9tt8Mh6B7ZbLy4y-KY0RpaLd460UTo3DOI9kJgBoLgBM1QK8g3RvCUvZVU0aXSpSiPyh2q8KdkN3Zzq8uOPq4raDOFRlk3nlTVBK2I7OwieCXMHw>
|
|
|
TheBigBadBoy - 𝙸𝚛
|
|
dogelition
did it locally, here's the file tagged as bt.2100 pq
|
|
2024-09-11 09:36:52
|
None of the tools I have maps correctly the colors [⠀](https://cdn.discordapp.com/emojis/654081052108652544.webp?size=48&quality=lossless&name=av1_Hmmm)
browser, FFmpeg, decoded PNG using djxl, ...
|
|
2024-09-11 09:38:11
|
even eye of gnome does not show the same art.png you sent <:KekDog:805390049033191445>
|
|
2024-09-11 09:42:00
|
|
|
|
dogelition
|
|
TheBigBadBoy - 𝙸𝚛
None of the tools I have maps correctly the colors [⠀](https://cdn.discordapp.com/emojis/654081052108652544.webp?size=48&quality=lossless&name=av1_Hmmm)
browser, FFmpeg, decoded PNG using djxl, ...
|
|
2024-09-12 04:14:56
|
hm, i just djxl to make the png
to clarify: i ran djxl on the 311 bytes art.jxl file, which is actually tagged as bt.2100 pq
|
|
|
Quackdoc
|
|
TheBigBadBoy - 𝙸𝚛
None of the tools I have maps correctly the colors [⠀](https://cdn.discordapp.com/emojis/654081052108652544.webp?size=48&quality=lossless&name=av1_Hmmm)
browser, FFmpeg, decoded PNG using djxl, ...
|
|
2024-09-12 04:17:57
|
I don't have an HDR device to test anymore since my s9 dedded itself
|
|
|
|
JXL Art Bot
|
2024-09-12 06:58:31
|
**dogelition**
_“ITU-R BT.2111-2 (2K, 10 bit, full range PQ)”_
2024
image/jxl
232 bytes
https://jxl-art.surma.technology/?zcode=rVY9b9wwDN35K%2FQHDqBIypKWDh2KTEGBDpmD5JrcUDRobkj%2Bfe7D0tkWebYP3ez3LD2JfCT9sHvevzqfCeFuu3t53TtPWeDHv8c%2F259%2F3x26DXmB77v98%2Fbt%2BCUC7H67F%2FfNkQfnyjMdni9vfHo7vX8c3jkWoEJd6CpUwchDsMLJj%2BET8XQgcAJXwjeEcxv3a7t3IZHJEbbreib%2FvxMQBZNjFuMEQQQW6Jvq5fbW%2FiwR1BVhuNcZu4j23%2BRJvmOeptuH3KabOGvpDp7bW52IxFq4z3bSAl6OQxpZ6RyySrfX03kEmxPbB2h5DWH%2B89vSzyEsNkZ%2F%2FphgRtXQLLEjHU%2FjgurVsocrWqpSf7OIMKdelHNpVZ%2FH3iID7x6BzE2vwtEmD66tCBrUbe15reG9oGZ4EsPwLJ1leJFsG74LAdb7%2Bcx6JDY9m8myVvJJTXT0WqI7L21iPIF5i94fOGosx3Qx8jjOZ1AmovcOG2QjjG2OOK5KkZaH2RFwNcbmSEFY04FMpdsn18pjG4tua12Ltx8umNR4U%2BF1XA0n2rC%2Bx9rK2CqTSRLMzqSiFkS3UgoRVo2oad0oDRWzNQpQn%2FeEAdQoL%2F4LaKKkVKpap9MqbWq0llxYHOw2prfbH9cVhr7IlF%2B509Wpq%2F9BTPZuwItlvgA%3D
|
|
|
dogelition
|
2024-09-12 06:59:21
|
figured out how to optimize it: using `FramePos`, shift everything up so that the bars on the bottom start where the first row of groups ends
|
|
2024-09-12 06:59:42
|
so then i don't have to duplicate anything
|
|
2024-09-12 07:00:36
|
*maybe* the entire thing can be optimized a bit more by also shifting it to the left, since there is a tiny bit of duplication on the horizontal borders too
|
|
2024-09-12 07:03:46
|
i think the only viable option there would be to split it in the middle of the green bar
|
|
2024-09-12 07:34:14
|
did that, now it's down to 225 bytes [here](https://jxl-art.surma.technology/?zcode=rVY9bxsxDN35K_QHDJAU5ZOWDh2CTkGBDpmDxE08FA1SD8m_r-2e7kMk72yj2-lR0hPJR_Ie9s-H10AlC3zb7V9eD4G4CNy9P_7aff_9J2y2EjZMAl_3h-fd22kvAux_hpfwJTBBCPWbj9_jKp5X5_XHcS2x64EB6hgHaAAzTsERznP4bHg6Glp4MJAyhLAJP3aHkDK7NkZ9rreU7X97AXNybTGK84IkAhfwu-zVe-_-KB2YJ9L0rn_YSNrvKU2-SWKbb-ao8x0xWvlOXafdOhm26pGjnsiKajVmy6jd0Tbx84ieVhDWt9-WvpjSxYnt399lWGF1OGtq2cbzvCB6tkKwwGUy9Z51CGvslbnUVvN56g0y0d4JKFFpD2eXPAStaJrQVw3PmkFVMYol2IiOYIXQE2yiuCBYKguiHOvNshJydEVb2NNWpmxmuiMr01sSnRlicL3oBYJlGudP1QMGUBrS-4AK2Ug0hgg1XXwtR1YiVpv4YpDdoYBwTQ9ymW6fPVc-2zl0W_O6-PrpgabKVY3XP4QkYFf4nNuYO3W0EMPqUKlsqlR6g19dU-E3nQ_twcuYwAzWxeNYOWtUnFlvbbWpWquVM3NqOWY6NLerGK_Tt33Ipb_ypsXxaf8KNHcrcJTMXw)
|
|
2024-09-12 07:36:00
|
properly tagged jxl
|
|
|
Oleksii Matiash
|
|
**dogelition**
_“ITU-R BT.2111-2 (2K, 10 bit, full range PQ)”_
2024
image/jxl
232 bytes
https://jxl-art.surma.technology/?zcode=rVY9b9wwDN35K%2FQHDqBIypKWDh2KTEGBDpmD5JrcUDRobkj%2Bfe7D0tkWebYP3ez3LD2JfCT9sHvevzqfCeFuu3t53TtPWeDHv8c%2F259%2F3x26DXmB77v98%2Fbt%2BCUC7H67F%2FfNkQfnyjMdni9vfHo7vX8c3jkWoEJd6CpUwchDsMLJj%2BET8XQgcAJXwjeEcxv3a7t3IZHJEbbreib%2FvxMQBZNjFuMEQQQW6Jvq5fbW%2FiwR1BVhuNcZu4j23%2BRJvmOeptuH3KabOGvpDp7bW52IxFq4z3bSAl6OQxpZ6RyySrfX03kEmxPbB2h5DWH%2B89vSzyEsNkZ%2F%2FphgRtXQLLEjHU%2FjgurVsocrWqpSf7OIMKdelHNpVZ%2FH3iID7x6BzE2vwtEmD66tCBrUbe15reG9oGZ4EsPwLJ1leJFsG74LAdb7%2Bcx6JDY9m8myVvJJTXT0WqI7L21iPIF5i94fOGosx3Qx8jjOZ1AmovcOG2QjjG2OOK5KkZaH2RFwNcbmSEFY04FMpdsn18pjG4tua12Ltx8umNR4U%2BF1XA0n2rC%2Bx9rK2CqTSRLMzqSiFkS3UgoRVo2oad0oDRWzNQpQn%2FeEAdQoL%2F4LaKKkVKpap9MqbWq0llxYHOw2prfbH9cVhr7IlF%2B509Wpq%2F9BTPZuwItlvgA%3D
|
|
2024-09-12 07:38:07
|
This is because my monitor is not hdr, or it is intended?
|
|
|
dogelition
|
2024-09-12 07:38:23
|
it's intended, this is how the full range pattern is specified
|
|
2024-09-12 07:39:03
|
on the limited range pattern, the very first step is blacker-than-black and the last step is whiter-than-white (i.e. outside of the nominal range)
|
|
|
Oleksii Matiash
|
2024-09-12 07:39:21
|
Thanks
|
|
|
CrushedAsian255
|
|
dogelition
on the limited range pattern, the very first step is blacker-than-black and the last step is whiter-than-white (i.e. outside of the nominal range)
|
|
2024-09-12 07:40:43
|
are they meant to look different even on hdr display?
|
|
|
dogelition
|
2024-09-12 07:41:44
|
for blacker-than-black: no, unless you lift the black level of the display
for whiter-than-white: i *think* not, but i know that they are supposed to be distinguishable in SDR, at least in areas like broadcast monitoring
|
|
|
CrushedAsian255
|
2024-09-12 07:42:15
|
they look identical both in HDR and SDR for me
|
|
|
dogelition
|
2024-09-12 07:42:35
|
i meant not on this image, but whiter-than-white in SDR in general
|
|
|
CrushedAsian255
|
2024-09-12 07:42:55
|
or do you mean in editing software there is meant to be indications?
|
|
|
dogelition
|
2024-09-12 07:45:05
|
if you have an sdr tv/monitor set up in limited range, then values above 235 (the upper limit in 8 bit limited range) should still be distinguishable (i.e. instead of clipping, actually go brighter than the 100% white level)
|
|
2024-09-12 07:45:21
|
but there's not really a point in that for consumer use, i think? just production
|
|
|
CrushedAsian255
|
2024-09-12 07:45:36
|
i think mac display is probably full range though
|
|
2024-09-12 07:45:43
|
even in SDR
|
|
|
dogelition
|
2024-09-12 07:46:22
|
these whiter-than-white values can't even be obtained normally with limited range output, as e.g. your graphics card would map full range 255 to limited range 235
|
|
2024-09-12 07:46:47
|
to actually send those to a display, you have to do weird things like setting the gpu output to full range but then telling the tv/monitor to interpret the signal as limited range
|
|
2024-09-12 07:47:07
|
very niche stuff, again not really something you'd ever want to do as a normal consumer
|
|
2024-09-12 07:47:16
|
in the pc world pretty much everything is full range
|
|
|
CrushedAsian255
|
2024-09-12 07:47:36
|
oh, since limited goes up to 235, is the "white than white" mean signalling 255 to the limited range system?
|
|
|
dogelition
|
2024-09-12 07:47:41
|
and jxl doesn't even support tagging an image as limited range
|
|
|
CrushedAsian255
|
|
dogelition
and jxl doesn't even support tagging an image as limited range
|
|
2024-09-12 07:47:48
|
because limited range should DIE
|
|
|
dogelition
|
|
CrushedAsian255
oh, since limited goes up to 235, is the "white than white" mean signalling 255 to the limited range system?
|
|
2024-09-12 07:47:56
|
iirc 255 is reserved, but everything between 235 and 255 (exclusive) should count
|
|
|
CrushedAsian255
|
2024-09-12 07:48:14
|
isn't 255 just full white?
|
|
2024-09-12 07:48:18
|
why is it reserved?
|
|
|
dogelition
|
2024-09-12 07:48:37
|
reserved in limited range signaling, not full range
|
|
2024-09-12 07:48:41
|
iirc this is in the hdmi specification? one sec
|
|
|
CrushedAsian255
|
|
dogelition
|
2024-09-12 07:49:20
|
|
|
2024-09-12 07:49:31
|
so 0 is also reserved
|
|
2024-09-12 07:49:45
|
don't think anything special would happen if you actually send that to a display? idk though
|
|
|
CrushedAsian255
|
2024-09-12 07:49:53
|
given limited range only allows 220 instead of 256 colours, is it technically 7.78 bit colour?
|
|
|
dogelition
|
2024-09-12 07:50:47
|
pretty much, you're wasting a fractional bit by limiting the nominal range
|
|
|
CrushedAsian255
|
2024-09-12 07:51:23
|
and we still do this?
|
|
|
dogelition
|
|
CrushedAsian255
|
2024-09-12 07:51:32
|
what good reason other than i guess backwards-compatibility?
|
|
2024-09-12 07:51:49
|
https://tenor.com/view/i-guess-memes-meme-gif-17950413
|
|
|
dogelition
|
2024-09-12 07:52:05
|
afaik there is no other reason
|
|
|
CrushedAsian255
|
2024-09-12 07:52:36
|
why couldn't we dump limited range when moving to HDR? it would have been the perfect time!
|
|
|
dogelition
|
2024-09-12 07:53:02
|
to come back to that test pattern: i could make my jxl art use the values specified for limited range, and then you'd see a difference between the 2 white boxes on a normal setup
|
|
2024-09-12 07:53:27
|
but to actually "use" the pattern properly, you'd have to output it from your gpu as full range and then tell the display to interpret it as limited range
|
|
2024-09-12 07:53:37
|
which should bring it back to those 2 boxes not being distinguishable
|
|
|
CrushedAsian255
|
2024-09-12 07:54:16
|
is the point for them to not be distinguishable?
|
|
2024-09-12 07:54:34
|
im guessing the very left box is 0 and the box next to it is 16?
|
|
|
dogelition
|
2024-09-12 07:54:52
|
i think hdr tone mapping should always map a 10k nits signal to the peak of the display, so i don't see what a display could possibly do with a signal above 10k nits (which the last box would be), other than clip it to the same value
|
|
|
CrushedAsian255
|
2024-09-12 07:55:16
|
blow up the monitor?
|
|
|
dogelition
|
|
CrushedAsian255
im guessing the very left box is 0 and the box next to it is 16?
|
|
2024-09-12 07:55:23
|
|
|
2024-09-12 07:55:33
|
|
|
2024-09-12 07:55:45
|
for the 10 bit limited range pq pattern
|
|
|
dogelition
|
|
2024-09-12 08:07:11
|
for completeness: these ranges (for the applicable bit depths) are also defined in bt.709, bt.2020 and bt.2100
|
|
|
Tirr
|
2024-09-12 08:27:07
|
this simple `jxl_from_tree` input:
```
Width 3840
Height 2160
Bitdepth 8
- Set 255
```
compiles to use self-correcting predictor instead of Zero for some reason, and shows completely black image. tested on git head.
```
2024-09-12T08:24:40.769955Z TRACE decode channels{stream_index=22}: jxl_modular::image: Single MA tree node cluster=0 predictor=SelfCorrecting
```
|
|
|
_wb_
|
2024-09-12 08:35:12
|
That's weird
|
|
|
CrushedAsian255
|
2024-09-12 08:35:51
|
where do you get those TRACE logs from?
|
|
|
Tirr
|
|
CrushedAsian255
where do you get those TRACE logs from?
|
|
2024-09-12 08:38:28
|
`jxl-oxide -vv`
|
|
|
CrushedAsian255
|
2024-09-12 08:51:46
|
oh its jxl-oxide not libjxl
|
|
|
spider-mario
|
|
CrushedAsian255
why couldn't we dump limited range when moving to HDR? it would have been the perfect time!
|
|
2024-09-12 09:58:38
|
|
|
|
CrushedAsian255
|
2024-09-12 10:05:54
|
i guess that make sense
|
|
|
_wb_
|
2024-09-12 10:33:47
|
To me it mostly feels like a hack to get away with doing things in gamma-compressed 10/12-bit int that should actually be done in linear float
|
|
|
CrushedAsian255
|
2024-09-12 10:34:22
|
that's what i was thinking as well
|
|
|
spider-mario
|
2024-09-12 10:34:57
|
yeah, I’m not sure I’d go as far as “making sense”
|
|
|
CrushedAsian255
|
2024-09-12 10:38:09
|
it's not the most crazy part about colour management adn digital signals
|
|
|
_wb_
|
2024-09-12 10:39:02
|
Like the sRGB linear segment to me mostly feels like a hack to make sRGB -> linear 16-bit -> sRGB a lossless operation. Without the linear segment you wouldn't be able to do that, and presumably this was important in early color management systems.
|
|
|
Quackdoc
|
|
_wb_
Like the sRGB linear segment to me mostly feels like a hack to make sRGB -> linear 16-bit -> sRGB a lossless operation. Without the linear segment you wouldn't be able to do that, and presumably this was important in early color management systems.
|
|
2024-09-12 11:33:16
|
I would assume so, iirc the official reason was quoted to be "to optimize encoding implementations"
|
|
2024-09-12 11:35:02
|
daniele sira... something quotes the specific reason here. sadly without accsess to the actual srgb spec, i dunno, I do know that the multiple specs that are out there, are contradictory and unreliable https://community.acescentral.com/t/srgb-piece-wise-eotf-vs-pure-gamma/4024
|
|
|
_wb_
|
2024-09-12 11:37:45
|
Both the "limited range" hack and the "transfer function with a linear segment" hack have become pretty much obsolete then, at least for still images, now basically everything (in authoring workflows) is doing things in float anyway...
|
|
|
CrushedAsian255
|
2024-09-12 11:38:29
|
can it store floats?
|
|
|
Quackdoc
|
|
_wb_
Both the "limited range" hack and the "transfer function with a linear segment" hack have become pretty much obsolete then, at least for still images, now basically everything (in authoring workflows) is doing things in float anyway...
|
|
2024-09-12 11:39:35
|
found the post, 66, also coincidentally, a reply by an aces developer talks about this, specificly the reply to the post in question, apparently it's not so simple
> Actually, we do. A lot. Display swapchains are quantized to 8 bits in 95% of the cases. You can request a 10:10:10:2 or a 16:16:16:16 swapchain but the OS is free to return a 8:8:8:8 display surface and pretend.
|
|
2024-09-12 11:39:54
|
I don't know how this would ever fly, but apparently it happens ~~must have not used rust~~
|
|
2024-09-12 11:41:25
|
I can't say I have ever seen this be an issue, perhaps this is just a really specific issue that only has an effect in a specific use, but affects it hard
|
|
|
jonnyawsom3
|
|
Tirr
this simple `jxl_from_tree` input:
```
Width 3840
Height 2160
Bitdepth 8
- Set 255
```
compiles to use self-correcting predictor instead of Zero for some reason, and shows completely black image. tested on git head.
```
2024-09-12T08:24:40.769955Z TRACE decode channels{stream_index=22}: jxl_modular::image: Single MA tree node cluster=0 predictor=SelfCorrecting
```
|
|
2024-09-12 11:53:56
|
Isn't self correcting the default since it's usually the best? Could be that jxl_from_tree simply doesn't override it
|
|
|
CrushedAsian255
|
|
Isn't self correcting the default since it's usually the best? Could be that jxl_from_tree simply doesn't override it
|
|
2024-09-12 11:54:38
|
sure, but the `jxl_from_tree` has `- Set 255`
|
|
|
_wb_
|
2024-09-12 12:04:56
|
yeah that does look like a weird bug
|
|
|
lonjil
|
|
_wb_
I like the way this looks in Thorium
|
|
2024-09-12 09:20:53
|
I don't think I can get this image to render in any way that is close to the intent on my computer. I end up with this, with a harsh discontinuity between the very light red and the very intense red.
|
|
2024-09-12 09:27:13
|
on my ipad it looks like this but brighter
|
|
|
_wb_
|
2024-09-12 09:43:48
|
In Thorium on my macbook it looks as intended. Most other things I tried do weird tone mapping on it.
|
|
|
Traneptora
|
|
lonjil
I don't think I can get this image to render in any way that is close to the intent on my computer. I end up with this, with a harsh discontinuity between the very light red and the very intense red.
|
|
2024-09-13 05:40:19
|
what about in mpv?
|
|
|
TheBigBadBoy - 𝙸𝚛
|
|
Traneptora
what about in mpv?
|
|
2024-09-13 06:38:48
|
|
|
|
Traneptora
|
2024-09-13 06:40:52
|
looks nice
|
|
|
TheBigBadBoy - 𝙸𝚛
|
2024-09-13 06:41:33
|
on SDR screen (idk if that changes anything)
|
|
|
_wb_
|
2024-09-13 07:10:55
|
misinterpreting it in SDR sRGB looks dull but OK-ish, like the above discord preview.
interpreting it correctly in HDR causes weirdness because it uses parts of the Rec2100 PQ space that are way out of gamut and out of luminosity range for any current display, so tone mapping has to be done, and presumably many things are doing that in poor ways
|
|
|
dogelition
|
|
Tirr
this simple `jxl_from_tree` input:
```
Width 3840
Height 2160
Bitdepth 8
- Set 255
```
compiles to use self-correcting predictor instead of Zero for some reason, and shows completely black image. tested on git head.
```
2024-09-12T08:24:40.769955Z TRACE decode channels{stream_index=22}: jxl_modular::image: Single MA tree node cluster=0 predictor=SelfCorrecting
```
|
|
2024-09-13 07:36:41
|
i ran into the same bug now
```
Bitdepth 8
Width 2049
Height 2048
- Set 255
```
this somehow produces a 303 byte file that's only black, increasing the height by 1 makes it go up to 363 bytes (?? except the size actually changes every time i regenerate the jxl)
if they're both ≤ 2048, everything works fine
|
|
|
CrushedAsian255
|
2024-09-13 07:40:45
|
Could be something to do with the group boundaries?
|
|
|
_wb_
|
2024-09-13 07:42:09
|
Please open a GitHub issue for this, I bet something got messed up when we switched to streaming encoding.
|
|
|
dogelition
|
2024-09-13 07:42:27
|
it doesn't seem to be directly tied to the *number* of groups at least, as changing `GroupShift` doesn't change the resolutions it happens at
|
|
|
CrushedAsian255
|
2024-09-13 07:42:34
|
Is there a fuzzer for jxl_from_tree?
|
|
|
dogelition
i ran into the same bug now
```
Bitdepth 8
Width 2049
Height 2048
- Set 255
```
this somehow produces a 303 byte file that's only black, increasing the height by 1 makes it go up to 363 bytes (?? except the size actually changes every time i regenerate the jxl)
if they're both ≤ 2048, everything works fine
|
|
2024-09-13 07:44:23
|
The fact that is acting differently each time you run it makes me think it’s reading bad memory
|
|
2024-09-13 07:44:33
|
As there shouldn’t be any non deterministic aspects
|
|
|
_wb_
|
|
CrushedAsian255
Is there a fuzzer for jxl_from_tree?
|
|
2024-09-13 07:46:19
|
No, it doesn't get tested, isn't considered part of libjxl itself...
|
|
|
lonjil
|
|
Traneptora
what about in mpv?
|
|
2024-09-13 08:23:50
|
here's a screenshot of how it looks on my SDR screen
|
|
|
dogelition
|
|
_wb_
Please open a GitHub issue for this, I bet something got messed up when we switched to streaming encoding.
|
|
2024-09-13 08:40:34
|
done
|
|
2024-09-13 09:53:02
|
anyone know why [this tree](https://jxl-art.surma.technology/?zcode=lZTBDoIwDIbve4q-gAmDgXjx4MkTIfHAA8jE3YwhRt_eQYfdxmB4Yv3_rw0rpSfVt_LR36FkjWr1M01Eyc5Sdfcez0zd4ApHSBiAOXJ9HIO30U1Y10_5siSAHTRexAviPw47FPDzh5xqFhfCTup0RsotZNJSSyM1c1TShaeTk88c8oqAR-4-6JJfLvhEHBaJH5MlKwxRfJUiLo1wRGZRklixgSU630QPw3CRPfA_8W3vYuAtlzRovHMGjH0Kg61_V4TW5gOJ5RlDf2lG0Q3PN3qhtqMz7zDqfjNRdftmLs98JWGBraHDavxFBQvR08KYqpHnLC8dNE4Vt8a4tpitfwE) doesn't compile on the site, but does compile locally? seems to be related to the depth of the big `if` cascade, as removing a few of those makes it work on the site
|
|
2024-09-13 09:53:32
|
(it's supposed to be compiled with width and height of 4096, which is why i need that many)
|
|
2024-09-13 10:30:14
|
[changed it](https://jxl-art.surma.technology/?zcode=dZMxDsIwDEV3n8IXQErSUMrCwMRUVWLoAWhosyEUIbg9aUmVpORP9X-2f5xGPls3mIebuKHeDv6rhG7oYuw4uV9M9s43PrEg5hBKHy7iHXiQXfc0rwQx77jfKFnH-k9WOxts--ee9k_XOm0afYdqkpLAKpWwSHVGI99v-HzU1TiWMIGcKtQAE-VJBfCXyAYmgJM6ggbEC39Z6dLsqgYnHoAz4sgHPQri5SkVcEcPhTjygQ8CuKDCZnjZLlfWVKpel2L1jLlsQb3oM5fcY1lNSvkX) to a balanced tree and that compiles on the site, while the file size remains the same
|
|
2024-09-13 11:09:52
|
it was indeed the fault of streaming encoding, disabling it in a local build made it work
|
|
|
|
embed
|
2024-09-13 11:10:02
|
https://embed.moe/https://cdn.discordapp.com/attachments/824000991891554375/1284108786705109034/art.jxl?ex=66e56f00&is=66e41d80&hm=6a0023568616680ee4cb474a3b100845670c180ce047b54a358fc442f0d6a453&
|
|
|
dogelition
|
2024-09-13 11:10:24
|
contains every 8 bit rgb color exactly once
|
|
|
CrushedAsian255
|
|
dogelition
contains every 8 bit rgb color exactly once
|
|
2024-09-13 11:10:57
|
is this for that AllRGB thing?
|
|
|
dogelition
|
2024-09-13 11:11:09
|
more or less, at least inspired by it
|
|
2024-09-13 11:11:12
|
idk if i'll post it there
|
|
|
CrushedAsian255
|
2024-09-13 11:12:30
|
try to see if you can make a more complicated pattern other than the RGB squares, while still using one of each colour
|
|
2024-09-13 11:12:37
|
im guessing it would probably be way harder
|
|
2024-09-13 11:12:46
|
especially without the ability to use residuals
|
|
|
jonnyawsom3
|
2024-09-13 11:14:11
|
I wondered if someone would do that, next up 16 bit ;P
|
|
|
dogelition
|
|
CrushedAsian255
im guessing it would probably be way harder
|
|
2024-09-13 11:14:38
|
sounds hard, yes
|
|
2024-09-13 11:14:45
|
just having to deal with 16 groups at all is enough of a pain
|
|
|
CrushedAsian255
|
2024-09-13 11:14:51
|
yeah
|
|
2024-09-13 11:15:00
|
jxl art is way easier when staying within 1024x1024
|
|
|
dogelition
|
2024-09-13 11:22:21
|
alternative "smoother" version that looks nicer but is bigger
|
|
|
|
embed
|
2024-09-13 11:22:32
|
https://embed.moe/https://cdn.discordapp.com/attachments/824000991891554375/1284111927865249905/out3.jxl?ex=66e571ed&is=66e4206d&hm=0f417a88ba2b7ea1c46d9a54bbfc17364cb9c0d208b996cc083a01e6e931dfe4&
|
|
|
CrushedAsian255
|
2024-09-13 11:23:29
|
is that sorting by luminance instead of binary counting?
|
|
|
dogelition
|
2024-09-13 11:25:31
|
the difference is how the blue values are arranged (which is the only thing that changes across the groups of 256x256 pixels)
|
|
2024-09-13 11:25:37
|
this image has them incrementing in line-scan order
|
|
2024-09-13 11:25:49
|
which, in theory, is nicer, but requires me to explicitly code higher starting values for the later groups
|
|
2024-09-13 11:35:19
|
whereas in the smaller version, i increment the blue value by 16 between adjacent 256x256 groups, which lets me set the starting values per 1024x1024 group to 0, 1, 2, 3, ..., 15 – those are more efficient to encode
|
|
|
_wb_
|
2024-09-13 11:38:21
|
Perhaps using an RCT could help to make other patterns that are a bit different...
|
|
|
Tirr
|
|
veluca
ping me again when 0.11 is out 😄
|
|
2024-09-13 12:15:29
|
friendly ping 😉
|
|
|
yoochan
|
2024-09-13 12:19:23
|
you didn't forget 😄
|
|
|
|
veluca
|
2024-09-13 12:20:21
|
Indeed you didn't
|
|
|
CrushedAsian255
|
|
dogelition
|
|
veluca
Indeed you didn't
|
|
2024-09-13 12:37:13
|
please also disable streaming encoding, see <https://github.com/libjxl/libjxl/issues/3818>
|
|
|
jonnyawsom3
|
2024-09-13 12:41:52
|
Trust me to be the one person who didn't ping him after it released xD
|
|
|
lonjil
|
|
dogelition
alternative "smoother" version that looks nicer but is bigger
|
|
2024-09-13 01:06:46
|
can you share the tree for this one?
|
|
|
dogelition
|
|
lonjil
can you share the tree for this one?
|
|
2024-09-13 01:14:19
|
https://jxl-art.surma.technology/?zcode=dVPLDsIgELzzFfsDJkCR4sWDJ09NEw_9AIstN2Mao38vrUQeMqfuzO7MwtI9uWW092UmwwY3-q_kyrCzddO8fGPmbnSlI3FGFELhww28Ah9g3z_sM6GIdjQUSMTyd1a66kv5Kun-sNCpaPIKaZKSwDUy4SKrMjby-4JfW13sNgOY4cCrAQpx0DBTPy3qIJCP4ijT6LqXPECFRJnavKWq3UCiri3wbtGIWgmc0MtpgxL1kyJ_-JpoPAYYoUdDPxhnlUXxsNturVit-rcjrMxl6-rBkLnkHnFRA_8B
|
|
2024-09-13 01:14:34
|
(with wrong dimensions so it at least compiles on the site)
|
|
|
lonjil
|
|
_wb_
|
2024-09-13 01:21:37
|
with RCTs that are a multiple of 7, you can permute the R,G,B, so that makes some easy (but somewhat boring) variants.
Perhaps there are other RCTs that could also be used but it will be trickier to still have each rgb888 color exactly once
|
|
|
|
veluca
|
2024-09-13 01:32:25
|
uuuuuuhhh I just noticed https://github.com/veluca93/jxl-art/pull/1
|
|
2024-09-13 01:32:36
|
I assume it was from <@265247121261854722>
|
|
|
Tirr
friendly ping 😉
|
|
2024-09-13 01:34:43
|
`Cannot read properties of undefined (reading 'byteLength')`
|
|
2024-09-13 01:34:44
|
uhm
|
|
|
lonjil
|
|
veluca
uuuuuuhhh I just noticed https://github.com/veluca93/jxl-art/pull/1
|
|
2024-09-13 02:14:29
|
available here https://qon.github.io/jxl-art/
|
|
|
_wb_
|
2024-09-13 02:45:21
|
on my laptop I like @Qon's interface, on my phone I prefer the old one because I use my phone in portrait mode 🙂
|
|
|
|
JXL Art Bot
|
2024-09-13 03:26:05
|
**dogelition**
_“Test”_
2024
image/jxl
111 bytes
https://jxl-art.lucaversari.it/?zcode=dVPLDsIgELzzFfsDJkCR4sWDJ09NEw%2F9AIstN2Mao38vrUQeMqfuzO7MwtI9uWW092UmwwY3%2Bq%2FkyrCzddO8fGPmbnSlI3FGFELhww28Ah9g3z%2FsM6GIdjQUSMTyd1a66kv5Kun%2BsNCpaPIKaZKSwDUy4SKrMjby%2B4JfW13sNgOY4cCrAQpx0DBTPy3qIJCP4ijT6LqXPECFRJnavKWq3UCiri3wbtGIWgmc0MtpgxL1kyJ%2F%2BJpoPAYYoUdDPxhnlUXxsNturVit%2BrcjrMxl6%2BrBkLnkHnFRA%2F8B
|
|
|
|
veluca
|
2024-09-13 03:26:29
|
ok, it seems at least to be working
|
|
2024-09-13 03:28:29
|
so, updated to v0.11 🙂
|
|
|
|
JXL Art Bot
|
2024-09-13 03:41:17
|
**dogelition, tagged by Tirr**
_“ITU-R BT.2111-2 (2K, 10 bit, full range PQ, properly tagged)”_
2024
image/jxl
235 bytes
https://jxl-art.lucaversari.it/?zcode=rVY9c9swDN3xK%2FgHfAeAoCUuHTrkMvXSdMjcS9TEQy69xkPz72s7oj4IQLJ93aT3RD6CeAD0sHvavwTKrcBtt3t%2B2QfiLHDz5%2Bdrd%2Ff2HjZbCRsmgfvukQkx3H2Hr7v9U%2Ff7uAwBdr%2FCc%2FgSmCCE8syH5%2FEtnt5O738P7xKbHhighnGABrDFKTjC7Rw%2BEY8HooYHghQRwib86PYhtexyjHpdz%2BTtfzsBc3K5GMU5QRKBM%2FRd9RK9t3%2BUBswVabrXJzaK9t%2FkKt8ksc43c9T5jhitfKem0WEdia065Ognsm61kK1F6nA0J34e0fMKwvrn16UvpnR2YvvzNy2sqDqaJbVs4%2B28IHq1TLCgZSr1kTUIa%2BpFOZdW83HsDTLx3hHIUXkPZ5s8BO1omsgXD8%2BaQXEximXYiI5hhdAzbKK4YFjKC6Yc681iCTm6ps3seaul1sx0Q1amtyQ6M8TgRtEbBPP0nj9UDxhAqUS%2FBVTIRqIxRKjq4ms5shKx2sQXL9kdCgiX9CBX6frZc%2BGxnUXXNa%2Bzt58uqKpc1Xj5Q0gCdoXPtY25U0YLMawOlaKmSqUn%2FOqaGr%2FqfGgPXsYE5mWdPY5VsEbFmfVWV5uqtVI5s6CW70xfzfUuxsv8bS9y5S%2FcaXF82r8C1d4KHC3zDw%3D%3D
|
|
2024-09-13 04:08:10
|
**dogelition**
_“Every 8 bit color”_
2024
image/jxl
135 bytes
https://jxl-art.lucaversari.it/?zcode=dZNBDsIgEEX3nGIuYAIUsd24cOWqaeKiB7DYsjOGmHp7aaUBKn%2FV%2BW9mPkPJXKwbzNNNVLPeDv6reKPZ1dhxcr%2BY2Qfd6UycEYVQ%2BHAVc%2BBBdt3LvBNEdKB%2Bp4SO9Z%2BsdjHY9y897Z%2FWKm0afYesk5LAKpmwSFVGIz%2Fu%2BHLUzTgSMIGcKtQAE%2BVJOfAXyAYmgJNsQAPihb8sVWl2qcGJJ%2BCMOPJBj4J4eUoJ3NFDIY584IMAzllhM7xs1ysrVqrelmLzjLlsQb3oM5fcY11NlvIv
|
|
|
dogelition
|
2024-09-13 04:08:25
|
nice, can do large images properly now
|
|
2024-09-13 04:18:35
|
<@179701849576833024> suggestion: in the embed, use a markdown link (with some fixed short text) to link to the website, to prevent long links from taking up so much space
|
|
|
jonnyawsom3
|
2024-09-13 04:27:41
|
I don't think the bot has been changed much since the Discord first started, so the markdown probably wasn't even an option back then haha
|
|
|
dogelition
|
2024-09-13 04:28:54
|
would also be nice to have proper high bit depth/hdr embeds, though that's not entirely trivial
|
|
2024-09-13 04:29:10
|
probably easiest to just use the png encoding code from libjxl for that?
|
|
|
|
JXL Art Bot
|
2024-09-13 04:33:34
|
**\_wb\_**
_“Every 8 bit color, in a different order”_
2024
image/jxl
137 bytes
https://jxl-art.lucaversari.it/?zcode=dZNBDsIgEEX3nGIuYAIUsd240I2rplGTHsBi250xxOjtpZUGqPxV57%2BZ%2BQwlcxhtZx52oJK1Y%2Be%2BileanczYD%2FYXn49XkoKx8U432hNnRD4ULpzF23Mvm%2BZpXhEi2lC7UkKH%2Bk9SOxms%2B6ee%2Bk9rFTf1rkOWUYlnhYxYoCqhgW9XfDrqYiwJmEBOBWqAifykHPgLZAMTwElWoAHxzF%2BWKje71ODEHXBGHPmgR0E8P6UE7uihEEc%2B8EEA5yyzGU7W85UVy1UvS7F4hlyyoE60iUvqMa8mi%2FkX
|
|
|
_wb_
|
2024-09-13 05:06:02
|
I'm wondering if there's something like the XOR pattern (https://jxl-art.lucaversari.it/?zcode=c8osSUktKMlQMDTg4uLKTFMI1_ULV7BT0DXkUlAAcv2AfBhXQUFXIVwBxgIqM-ACMYJTc1KTS4DiAA) that could be used to make more interesting-looking all-rgb images
|
|
|
lonjil
|
2024-09-13 05:20:36
|
I feel like getting it to be all-rgb would be really hard
|
|
2024-09-13 05:31:36
|
**Lonnie**
"*Not all-rgb, but looks neat I guess*"
2024
image/jxl
39 bytes
https://jxl-art.lucaversari.it/?zcode=c8osSUktKMlQMDTg4uLKTFNIVrBTMAQxwnX9woFsXUMuBQUg1w_Ih3EVFHQVwhVgLKAyAy4QIzg1JzW5BCgOM8eAPHPcixJTMlPzSoBcCg3QNeICAA
|
|
|
_wb_
|
2024-09-13 05:33:29
|
The xor pattern itself doesn't have the right histogram to be useful, but maybe there are other such patterns that would work
|
|
|
|
veluca
|
|
dogelition
<@179701849576833024> suggestion: in the embed, use a markdown link (with some fixed short text) to link to the website, to prevent long links from taking up so much space
|
|
2024-09-13 05:52:25
|
I'm not touching the embedding code xD
|
|
|
_wb_
|
2024-09-13 08:25:21
|
I wonder if there's a way to slice up YCoCg to make an interesting looking all-rgb image.
|
|
|
|
JXL Art Bot
|
2024-09-13 09:03:05
|
**\_wb\_**
_“Chroma and luma (Rec2100 PQ)”_
2024
image/jxl
55 bytes
https://jxl-art.lucaversari.it/?zcode=i4h04gpKTTYyNDBQCAjk4spMU0hWsFMw4FJQgDINgUwwpxIqDgK6Cn4KuiZwTnBqiYKRgYk5TGkFitJwBVSVukClFhALwnX9woFqdeGW%2BAFFEAIQ3aYIS8OhxoIMyklNLgHKAQA%3D
|
|
2024-09-14 08:43:16
|
**Anonymous**
_“just a test”_
2024
image/jxl
73 bytes
https://jxl-art.surma.technology/?zcode=dZDBDoIwEETvfMXcDUkrFDyZqDF6wkRNejZQoRc0pjH6924bAi3grft2OzO7ALDVplJP02AVUYXTS6vW3Ix%2BtEgcOe%2BuyCL31Hd8sQYXzJUOlATSrgRiFGB9Re0PtQUbkIPycLTYg%2Fbn5l0Xi0JigeVsZ0%2BvPBSy6mnOpuPSCsWhTm8czgfW%2FE%2FLevNhaXeFJPMXLUfCHeLjCDZyIqYRLspQ4HmesjkVwaZppZcz1OCCRTMS49sVdH4xYSQq%2FGUl%2FY0DQbJWum6MqhDzaGyepPZWPw%3D%3D
|
|
2024-09-14 08:52:41
|
**dogelition**
_“link test”_
2024
image/jxl
17 bytes
https://jxl-art.lucaversari.it/?zcode=c8osSUktKMlQsOAKz0wB0oZGFlweqZnpGSVgJpeugp%2BCIRcA
|
|
|
dogelition
|
2024-09-14 08:53:00
|
chrome didn't take my js override for some reason...
|
|
|
|
JXL Art Bot
|
2024-09-14 10:41:15
|
**\_wb\_**
_“we need a way to set modular_16_bit_buffer_sufficient=true so this can be 12 bytes”_
2024
image/jxl
13 bytes
https://jxl-art.lucaversari.it/?zcode=c8osSUktKMlQsOAKz0wB0kamZlweqZnpGSUKhkYWXO6JSflFmcUZXBGRTiDslphckl9UrGBiYGmmYGpoBFbvGuCmYMTFpasQnFqiYMAFAA%3D%3D
|
|
|
|
veluca
|
|
**\_wb\_**
_“we need a way to set modular_16_bit_buffer_sufficient=true so this can be 12 bytes”_
2024
image/jxl
13 bytes
https://jxl-art.lucaversari.it/?zcode=c8osSUktKMlQsOAKz0wB0kamZlweqZnpGSUKhkYWXO6JSflFmcUZXBGRTiDslphckl9UrGBiYGmmYGpoBFbvGuCmYMTFpasQnFqiYMAFAA%3D%3D
|
|
2024-09-14 12:01:05
|
<@794205442175402004> send a PR 😛
|
|
|
Meow
|
|
**\_wb\_**
_“we need a way to set modular_16_bit_buffer_sufficient=true so this can be 12 bytes”_
2024
image/jxl
13 bytes
https://jxl-art.lucaversari.it/?zcode=c8osSUktKMlQsOAKz0wB0kamZlweqZnpGSUKhkYWXO6JSflFmcUZXBGRTiDslphckl9UrGBiYGmmYGpoBFbvGuCmYMTFpasQnFqiYMAFAA%3D%3D
|
|
2024-09-14 12:14:10
|
Resolutionarily small
|
|
|
_wb_
|
2024-09-14 12:17:04
|
https://github.com/libjxl/libjxl/pull/3824
|
|
|
CrushedAsian255
|
|
dogelition
would also be nice to have proper high bit depth/hdr embeds, though that's not entirely trivial
|
|
2024-09-15 10:23:10
|
Where’s the bot code hosted?
|
|
|
dogelition
|
|
CrushedAsian255
Where’s the bot code hosted?
|
|
2024-09-15 10:36:51
|
<https://github.com/veluca93/jxl-art>
everything just runs in the browser, the embed is sent to a discord web hook url
|
|
2024-09-15 10:37:41
|
i couldn't get it to build/run locally though due to some weird nodejs related errors, both on windows and wsl2
|
|
|
CrushedAsian255
|
2024-09-15 10:39:09
|
It probably trying to red the whom
|
|
2024-09-15 10:39:15
|
Secrets
|
|
|
dogelition
|
|
dogelition
anyone know why [this tree](https://jxl-art.surma.technology/?zcode=lZTBDoIwDIbve4q-gAmDgXjx4MkTIfHAA8jE3YwhRt_eQYfdxmB4Yv3_rw0rpSfVt_LR36FkjWr1M01Eyc5Sdfcez0zd4ApHSBiAOXJ9HIO30U1Y10_5siSAHTRexAviPw47FPDzh5xqFhfCTup0RsotZNJSSyM1c1TShaeTk88c8oqAR-4-6JJfLvhEHBaJH5MlKwxRfJUiLo1wRGZRklixgSU630QPw3CRPfA_8W3vYuAtlzRovHMGjH0Kg61_V4TW5gOJ5RlDf2lG0Q3PN3qhtqMz7zDqfjNRdftmLs98JWGBraHDavxFBQvR08KYqpHnLC8dNE4Vt8a4tpitfwE) doesn't compile on the site, but does compile locally? seems to be related to the depth of the big `if` cascade, as removing a few of those makes it work on the site
|
|
2024-09-15 06:50:50
|
seems to be caused by the default stack size being too low, setting `-s TOTAL_STACK=1MB` when linking fixes it
|
|
2024-09-15 06:52:05
|
<@179701849576833024>
|
|
|
|
veluca
|
2024-09-15 06:53:46
|
uh, doesn't even seem that long... can you send a PR? 🙂
|
|
|
dogelition
|
2024-09-15 06:53:46
|
i also wanted to try working on getting libjxl to output an icc-tagged png instead of just pixels, but i couldn't figure out how to enable/link libpng and still have a working build
|
|
|
|
veluca
|
2024-09-15 06:54:08
|
yeah good luck with that xD
|
|
|
dogelition
|
|
veluca
uh, doesn't even seem that long... can you send a PR? 🙂
|
|
2024-09-15 06:54:13
|
the problem is not the length, but the depth
|
|
|
|
veluca
|
2024-09-15 06:54:24
|
yes, I meant deep xD
|
|
|
lonjil
|
2024-09-15 06:57:14
|
the parsing function must be pretty heavy to blow the stack after such a small depth
|
|
|
dogelition
|
2024-09-15 07:05:22
|
actually, after checking again, it does work on <https://jxl-art.lucaversari.it> but not on <https://jxl-art.surma.technology>, so that's interesting...
|
|
2024-09-15 07:05:59
|
i guess something changed on the bump to v0.11? but on my local build from git head it doesn't work without the increased stack size either
|
|
2024-09-15 07:08:40
|
and now my build is back to not working at all for no apparent reason
|
|
|
|
veluca
|
|
dogelition
|
2024-09-15 07:30:48
|
after looking into it a bit more, emscripten reduced the default stack size from 5 MB to 64 KB in 3.1.27, which is a later version than the one used in the repo. not entirely sure why the other site is affected by it then, but it does explain why i had to change it on my local build (since i'm using the latest version)
|
|
2024-09-15 07:32:00
|
i guess the difference could still just be something that changed in v0.11
|
|
|
|
JXL Art Bot
|
2024-09-15 08:30:21
|
**\_wb\_**
_“Minimalism”_
2024
image/jxl
22 bytes
https://jxl-art.lucaversari.it/?zcode=c8osSUktKMlQMORyT0zKL8oszuByDXBTMOLiykxTCNf20%2FULV7BTMOBSUNBVADJ1DcEs96LElMzUvBIFIwA%3D
|
|
2024-09-15 08:32:37
|
**\_wb\_**
_“Bruges Lace”_
2024
image/jxl
24 bytes
https://jxl-art.lucaversari.it/?zcode=c8osSUktKMlQMORyT0zKL8oszuByDXBTMOLiykxTCNf20%2FULV7ADchUUdBWATF1DMMu9KDElMzWvRMEIAA%3D%3D
|
|
2024-09-15 08:45:13
|
**\_wb\_**
_“Checkerboard pattern”_
2024
image/jxl
20 bytes
https://jxl-art.lucaversari.it/?zcode=c8osSUktKMlQMOTiCs9MATGMLLg8UjPTM0rATK7MNIWa8BoFOwUDLgUFXYXg1BIoKxyoBwA%3D
|
|
2024-09-15 08:51:53
|
**\_wb\_**
_“I wonder what is the most interesting thing you can do in 20 bytes or less”_
2024
image/jxl
20 bytes
https://jxl-art.lucaversari.it/?zcode=c8osSUktKMlQsOAKz0wB0kamZlweqZnpGSUKhkYWXO6JSflFmcUZXBGRTiDslphckl9UrGBiYGmmYGpoBFbvGuCmYMTFlZmmEO7uoWCnYMClqxAOFAGRuoZcAA%3D%3D
|
|
|
dogelition
|
2024-09-15 10:51:23
|
finally got png encoding in wasm working, now i just (?) need to change the ui code to display the png instead of a canvas, and in theory hdr images should then work properly
|
|
2024-09-15 11:12:21
|
can confirm that it works, still need to change some things though so that everything works as it should
|
|
2024-09-16 01:36:59
|
<@179701849576833024> i opened a pr
|
|
2024-09-16 01:38:20
|
i tested it using a bot on my own server, so hopefully everything works as it should
|
|
|
CrushedAsian255
|
2024-09-16 02:25:04
|
have you also made the zcode into a markdown link or are you keeping it like it is now?
|
|
|
dogelition
|
2024-09-16 02:26:37
|
did that too
|
|
|
CrushedAsian255
|
2024-09-16 02:26:59
|
nice
|
|
|
**\_wb\_**
_“I wonder what is the most interesting thing you can do in 20 bytes or less”_
2024
image/jxl
20 bytes
https://jxl-art.lucaversari.it/?zcode=c8osSUktKMlQsOAKz0wB0kamZlweqZnpGSUKhkYWXO6JSflFmcUZXBGRTiDslphckl9UrGBiYGmmYGpoBFbvGuCmYMTFlZmmEO7uoWCnYMClqxAOFAGRuoZcAA%3D%3D
|
|
2024-09-16 02:27:30
|
wouldn't
```
Gaborish
XYB
XYBFactors 4096 512 256
EPF 2
``` add more data? or does it allow it to use some default encoding?
|
|
|
_wb_
|
2024-09-16 05:35:55
|
Those are defaults for the restoration filter and xyb quant factor fields
|
|
2024-09-16 05:36:31
|
For the signaling that is. In modular mode the defaults of libjxl are different.
|
|
|
|
veluca
|
|
dogelition
<@179701849576833024> i opened a pr
|
|
2024-09-16 07:23:03
|
trying it now 😄
|
|
|
|
JXL Art Bot
|
2024-09-16 07:25:36
|
**someone**
_“more tests”_
2024
image/jxl
405 bytes
[source tree](https://jxl-art.lucaversari.it/?zcode=7ZdLS8QwEIDv%2BRW5L4G8Jo%2BLIF48ieDB8%2BJWdmEpi4jovzebNm1TTNmYrRRsT%2FP8ppNhWnJ7PO236P6w21X13X5b19URa4QOr%2FgF32CLsHuc8vhWfTDqLBR1uo1VE6s6VlWsQqzKViX4qXrHHKCXmU2GeVcjM8Mvhaey4rDG1cpS%2FbKRwlqT8GTWKMy7Wpna6wxoyX3lNFJaaxqeyhqF0f4wtZhln9ZxzT%2Bugvksua2sPspKTbMTSXGU9zSiUH%2Fxp1o3a92s%2F7xZ11uldVQzj6pkNkvtKauJkkKT5EROHCT6I6ThemX89aoxWh2semCVEKxqYBXBCOF%2B9tXVesAb1yqXzXt8tvaz59l5pBUDDlFAuelKyDwaGdOYBEZVoIlsmjRDHOeGW%2FdRaHH8JxyZwDEe4ZhQQvU4lofbdPKZpYS20KFoLmr0ZtIC87CLhxgfFOGCagDzDQ%3D%3D)
|
|
|
|
veluca
|
2024-09-16 07:25:59
|
seems to work just fine 😄 thanks!
|
|
|
|
JXL Art Bot
|
2024-09-16 08:19:06
|
**dogelition**
_“HDR embed test”_
2024
image/jxl
235 bytes
[source tree](https://jxl-art.lucaversari.it/?zcode=rVY9c9swDN3xK%2FgHfAeAoCUuHTrkMvXSdMjcS9TEQy69xkPz72s7oj4IQLJ93aT3RD6CeAD0sHvavwTKrcBtt3t%2B2QfiLHDz5%2Bdrd%2Ff2HjZbCRsmgfvukQkx3H2Hr7v9U%2Ff7uAwBdr%2FCc%2FgSmCCE8syH5%2FEtnt5O738P7xKbHhighnGABrDFKTjC7Rw%2BEY8HooYHghQRwib86PYhtexyjHpdz%2BTtfzsBc3K5GMU5QRKBM%2FRd9RK9t3%2BUBswVabrXJzaK9t%2FkKt8ksc43c9T5jhitfKem0WEdia065Ognsm61kK1F6nA0J34e0fMKwvrn16UvpnR2YvvzNy2sqDqaJbVs4%2B28IHq1TLCgZSr1kTUIa%2BpFOZdW83HsDTLx3hHIUXkPZ5s8BO1omsgXD8%2BaQXEximXYiI5hhdAzbKK4YFjKC6Yc681iCTm6ps3seaul1sx0Q1amtyQ6M8TgRtEbBPP0nj9UDxhAqUS%2FBVTIRqIxRKjq4ms5shKx2sQXL9kdCgiX9CBX6frZc%2BGxnUXXNa%2Bzt58uqKpc1Xj5Q0gCdoXPtY25U0YLMawOlaKmSqUn%2FOqaGr%2FqfGgPXsYE5mWdPY5VsEbFmfVWV5uqtVI5s6CW70xfzfUuxsv8bS9y5S%2FcaXF82r8C1d4KHC3zDw%3D%3D)
|
|
|
dogelition
|
|
CrushedAsian255
|
2024-09-16 08:19:43
|
works fine on macOS
|
|
2024-09-16 08:19:56
|
iOS get WCG but no HDR
|
|
2024-09-16 08:20:01
|
don't think if it ever did
|
|
|
dogelition
|
|
CrushedAsian255
iOS get WCG but no HDR
|
|
2024-09-16 08:20:13
|
does it work when you tap on the image to expand it?
|
|
|
CrushedAsian255
|
2024-09-16 08:20:30
|
that's what I did, it gets WCG, but not HDR
|
|
|
dogelition
|
2024-09-16 08:20:35
|
oh
|
|
2024-09-16 08:20:36
|
interesting
|
|
2024-09-16 08:20:52
|
seems to be the same on my android phone actually
|
|
2024-09-16 08:21:02
|
or wait
|
|
2024-09-16 08:21:11
|
it's using the embedded icc profile to tonemap it when it's expanded, i think
|
|
|
CrushedAsian255
|
2024-09-16 08:21:12
|
if i donwload the image than it shows HDR in the photos app
|
|
|
dogelition
|
2024-09-16 08:21:33
|
at least the bars along the top look the same as when i open them in firefox on my pc (looking very white)
|
|
|
CrushedAsian255
|
2024-09-16 08:21:49
|
what bars?
|
|
2024-09-16 08:22:00
|
it's all bars
|
|
|
dogelition
|
2024-09-16 08:23:17
|
the ones in the top row, which are the most bright
|
|
|
CrushedAsian255
|
2024-09-16 08:23:30
|
oh those
|
|
|
dogelition
|
2024-09-16 08:23:42
|
this is what it looks like in firefox, for context (tonemapped to narrow gamut SDR by the 3d lut embedded in the icc profile)
|
|
|
Tirr
|
2024-09-16 08:25:49
|
works great on chrome with my phone (which has actual HDR support)
|
|
|
dogelition
|
|
Tirr
|
2024-09-16 08:26:47
|
white 58% bar looks the same to SDR white
|
|
|
CrushedAsian255
|
|
dogelition
this is what it looks like in firefox, for context (tonemapped to narrow gamut SDR by the 3d lut embedded in the icc profile)
|
|
2024-09-16 08:26:52
|
that's what i get on iPhone before clicking on it
|
|
2024-09-16 08:27:12
|
is the bottom white rectangle 58%
|
|
|
Tirr
|
|
dogelition
|
2024-09-16 08:32:21
|
the huge grey bars are 40%, everything else (with some obvious exceptions) is either 58% or 100%
|
|
2024-09-16 08:34:50
|
also, my favorite part of the tree is how the 58% bars are generated from the 100% ones right above by just subtracting from every channel
```
if y > 303
if y > 304
- N 0
- N -430
[...]
```
|
|
|
CrushedAsian255
|
2024-09-16 08:37:16
|
is it 10bit or 12bit?
|
|
|
dogelition
|
2024-09-16 08:37:30
|
10
|
|
2024-09-16 08:38:04
|
|
|
2024-09-16 08:51:36
|
at 2K resolution in 12 bit, the gradient ends up being 2 steps per pixel since there's not that much space
|
|
2024-09-16 08:51:45
|
which kinda defeats the purpose of the higher bit depth
|
|
|
|
JXL Art Bot
|
2024-09-16 10:30:58
|
**Access**
_“Dutch flag (ish, the colors are probaly off)”_
2024
image/jxl
37 bytes
https://jxl-art.surma.technology/?zcode=80jNTM8oUbC0tOQKz0wpyVAwNDAy4XLKLElJLQDyLLi4MtMUkhXsFHQNuRQUgOxKINvY2BjIgXPNzMzAXLAASK0hlKugoKsQnFoCNNMATQTGh%2FCMTE25kLSjSmJTCpMBAA%3D%3D
|
|
|
AccessViolation_
|
2024-09-16 10:31:16
|
that's me!
|
|
|
|
JXL Art Bot
|
2024-09-16 10:47:36
|
**\_wb\_**
_“somewhat more correct Dutch flag”_
2024
image/jxl
33 bytes
[source tree](https://jxl-art.lucaversari.it/?zcode=80jNTM8oUTAzM%2BMKz0wpyVCwtLTkcsosSUktAHIsuFxSc0oSAxJzUktKUrm4MtMUKhXsFIyMDLkUFKAcExNjIEdBQVchOLVEwdgIiWNoYYEsxQUA)
|
|
|
AccessViolation_
|
2024-09-16 10:48:26
|
how
|
|
2024-09-16 10:48:29
|
xD
|
|
|
CrushedAsian255
|
2024-09-16 10:50:14
|
Palette
|
|
|
_wb_
|
2024-09-16 10:51:56
|
Default palette colors was a nice touch, gives you `4*4*4+5*5*5` colors to use even when the palette is the empty set
|
|
|
AccessViolation_
|
2024-09-16 10:52:25
|
👀 nice
|
|
|
CrushedAsian255
|
|
_wb_
Default palette colors was a nice touch, gives you `4*4*4+5*5*5` colors to use even when the palette is the empty set
|
|
2024-09-16 10:54:29
|
Why 444+555 specifically?
|
|
|
|
JXL Art Bot
|
2024-09-16 10:54:49
|
**\_wb\_**
_“Delta palette fun”_
2024
image/jxl
37 bytes
[source tree](https://jxl-art.lucaversari.it/?zcode=TcmxCoMwEAbg%2FZ7if4EMiUdIlg5F0FHo4BzIWQ%2BkiNxg374ROjh%2BfKPoezXEGGnWaityzvRUq7I3JOplszKVTcyESBeceICZyWE4SlX5GJy%2F4tsiBE%2FAH8xdA%2BDwEkMXbvAp3Yt%2B)
|
|
|
AccessViolation_
|
|
CrushedAsian255
Why 444+555 specifically?
|
|
2024-09-16 10:55:07
|
4\*4\*4+5\*5\*5
|
|
2024-09-16 10:55:23
|
I think discord formatting broke their message
|
|
|
_wb_
|
2024-09-16 10:55:37
|
Layout was messed up with the multiplication signs
|
|
|
AccessViolation_
|
|
**\_wb\_**
_“Delta palette fun”_
2024
image/jxl
37 bytes
[source tree](https://jxl-art.lucaversari.it/?zcode=TcmxCoMwEAbg%2FZ7if4EMiUdIlg5F0FHo4BzIWQ%2BkiNxg374ROjh%2BfKPoezXEGGnWaityzvRUq7I3JOplszKVTcyESBeceICZyWE4SlX5GJy%2F4tsiBE%2FAH8xdA%2BDwEkMXbvAp3Yt%2B)
|
|
2024-09-16 10:56:12
|
Lol I love it
|
|
|
Tirr
|
2024-09-16 10:56:46
|
the delta-palette-prism
|
|
|
|
JXL Art Bot
|
2024-09-16 10:56:59
|
**CrushedAsian255**
_“Error: Calibrate printer before continuing”_
2024
image/jxl
42 bytes
[source tree](https://jxl-art.lucaversari.it/?zcode=TcmxCoQwEIThfp9iXiBg4hKSxkIsrjqEK6wF9y6BFBZbeG9%2Fi5xgNfPxP6R%2BiiLGSEvdtCDnTGPVTXZDokmarvPaRFWI6hsHBjDzdVPXkcNzgfO251j5WgnBE%2FAHc28AHF6i6MMNPqV7oh8%3D)
|
|
|
_wb_
|
2024-09-16 10:58:50
|
It's first a cube of 4x4x4 colors that sits inside the RGB cube, followed by a cube of 5x5x5 colors. Those are default palette colors that come after the custom palette colors.
|
|
|
CrushedAsian255
|
2024-09-16 10:59:30
|
so a total of 189
|
|
|
_wb_
|
2024-09-16 11:00:28
|
Negative indices correspond to default delta entries, where -1 means "use the prediction as is" and more negative means "take the prediction and change some or all of the RGB values a bit"
|
|
|
|
JXL Art Bot
|
2024-09-16 11:01:04
|
**CrushedAsian255**
_“Default palette”_
2024
image/jxl
23 bytes
[source tree](https://jxl-art.lucaversari.it/?zcode=80jNTM8oUTC0sOQKz0wpyVAwMjDgcsosSUktAHIsuFxSc0oSAxJzUktKUrky0xQqFewUDLh0FfwUtA2BVHBqiYIBAA%3D%3D)
|
|
|
_wb_
|
2024-09-16 11:01:22
|
Probably we should add some way to change the predictor used for Delta palette (currently it uses the default which is AvgAll iirc)
|
|
|
CrushedAsian255
|
|
_wb_
Negative indices correspond to default delta entries, where -1 means "use the prediction as is" and more negative means "take the prediction and change some or all of the RGB values a bit"
|
|
2024-09-16 11:01:35
|
iirc, the "prediction" you're talking about is a fixed predictor in the header?
|
|
|
_wb_
|
2024-09-16 11:02:03
|
Yeah it is signaled as part of the modular transform info for the Palette transform
|
|
|
|
JXL Art Bot
|
2024-09-16 11:02:56
|
**CrushedAsian255**
_“Shattered palette”_
2024
image/jxl
31 bytes
[source tree](https://jxl-art.lucaversari.it/?zcode=80jNTM8oUTC0sOQKz0wpyVAwMjDgcsosSUktAHIsuFxSc0oSAxJzUktKUrky0xQqFOwUDIFKdBXcixJTMlPzShR0DQ1AMpVAGZC4n4K2IZAKTi1RMAAA)
|
|
|
CrushedAsian255
|
2024-09-16 11:03:01
|
this delta palette is too much fun
|
|
|
|
JXL Art Bot
|
2024-09-16 11:05:34
|
**CrushedAsian255**
_“something”_
2024
image/jxl
42 bytes
[source tree](https://jxl-art.lucaversari.it/?zcode=80jNTM8oUTA1NOIKz0wpyQCznDJLUlILgBwLLpfUnJLEgMSc1JKSVK7MNIUKBTsFI1MDELMSytRVcC9KTMlMzStR0DVB4RnC1SE0GIA0OJalO%2BbkKGgbAdl%2BCtqGINlwuGxwaokCirHahgA%3D)
|
|
|
Jyrki Alakuijala
|
|
_wb_
It's first a cube of 4x4x4 colors that sits inside the RGB cube, followed by a cube of 5x5x5 colors. Those are default palette colors that come after the custom palette colors.
|
|
2024-09-16 11:23:13
|
the 5x5x5 cube is slightly bigger in RGB, the 4x4x4 cube fits perfectly inside it in the 'holes' of the grid
|
|
2024-09-16 11:25:01
|
in my experiments the last predictor is the best for delta palette -- I added it only to get the max performance out of the delta palette
|
|
|
CrushedAsian255
|
2024-09-16 11:25:28
|
0, 0.33, 0.66, 1
-0.16, 0.16, 0.5, 0.83, 1.16
?
|
|
|
Jyrki Alakuijala
|
2024-09-16 11:25:56
|
with two cubes interleaved the expected distance to a palette color is smaller than with a single cube, i.e., color precision is slightly higher
|
|
2024-09-16 11:29:33
|
I anticipate interesting stuff to emerge when delta palette is combined with LZ77ish and context trees
|
|
2024-09-16 11:30:08
|
it should be possible to create context tree sprites
|
|
|
_wb_
|
2024-09-16 11:33:54
|
first cube is 1/8, 3/8, 5/8, 7/8; second cube is 0, 1/4, 2/4, 3/4, 1, if I'm not mistaken
|
|
|
Jyrki Alakuijala
|
2024-09-16 11:35:19
|
yes
|
|
2024-09-16 11:35:52
|
makes me wonder if there is a "geological" name for such interleaved cube crystal structures
|
|
2024-09-16 11:38:23
|
"Body-centered cubic" perhaps
|
|
|
CrushedAsian255
|
2024-09-16 11:38:35
|
yeah
|
|
2024-09-16 11:38:36
|
i think
|
|
2024-09-16 11:38:40
|
it's like an interstitial alloy
|
|
2024-09-16 11:38:43
|
but for colours
|
|
|
Jyrki Alakuijala
|
2024-09-16 11:39:02
|
it is a crystallized thought about color, literally
|
|
2024-09-16 11:39:14
|
I designed it 😄
|
|
2024-09-16 11:40:04
|
initially I had 6x6x6 cube, interleaved with 5x5x5 -- but 5x5x5 with 4x4x4 was better after all from my opinion
|
|
|
CrushedAsian255
|
2024-09-16 11:41:05
|
from performance? or just was nicer?
|
|
|
jonnyawsom3
|
|
Jyrki Alakuijala
in my experiments the last predictor is the best for delta palette -- I added it only to get the max performance out of the delta palette
|
|
2024-09-16 11:41:17
|
You added AvgAll just for delta palette? I'm surprised, but shouldn't be, given what it will be capable of with time. Shame the command is still broken in cjxl
|
|
|
Jyrki Alakuijala
|
2024-09-16 11:47:37
|
average4 -- https://github.com/libjxl/libjxl/blob/main/lib/jxl/modular/options.h#L35
|
|
2024-09-16 11:49:28
|
return (6 * top - 2 * toptop + 7 * left + 1 * leftleft + 1 * toprightright + 3 * topright + 8) / 16;
|
|
2024-09-16 11:52:16
|
I derived the numbers experimentally, with some inspiration from extrapolative interpolation
|
|
2024-09-16 11:52:49
|
this worked the best for pnorm * bpp metric (butteraugli/density)
|
|
|
jonnyawsom3
|
2024-09-16 12:02:32
|
Ahh, so that's why it's called `toptop predictive average` in the cjxl help
|
|
|
_wb_
|
2024-09-16 12:23:03
|
it's the only predictor that goes as far as toptop and toprightright (besides the self-correcting one which indirectly uses that information too)
|
|
|
Tirr
|
2024-09-16 12:26:52
|
ah experiments, that's why the weights look so arbitrary
|
|
|
Jyrki Alakuijala
|
2024-09-16 01:03:58
|
predicting from past samples is quite asymmetric possibly because in x-direction we have samples from both directions, but in y-direction only one direction
|
|
|
AccessViolation_
|
2024-09-16 01:25:37
|
This all goes way over my head but it sounds super interesting nonetheless
|
|
|
|
JXL Art Bot
|
2024-09-16 01:46:42
|
**Access**
_“Stripes of Order in a Sea of Chaotic Clown Vomit”_
2024
image/jxl
26 bytes
[source tree](https://jxl-art.lucaversari.it/?zcode=80jNTM8oUTAzM%2BMKz0wpyVCwtLTkcsosSUktAHIsuFxSc0oSAxJzUktKUrm4dBXcixJTMlPzShR0DY1NzcwsjC25AA%3D%3D)
|
|
|
AccessViolation_
|
2024-09-16 01:49:34
|
I remember seeing a Mastodon bot that generated random computational art like this, I don't think it was JPEG XL but you could probably create a bot that creates random valid JXL files
|
|
|
Tirr
|
2024-09-16 01:59:58
|
~~aka fuzzer inputs~~
|
|
|
_wb_
|
2024-09-16 02:04:54
|
FLIF was designed without any error detection mechanism since my philosophy back then was that no bit should be wasted, so every bitstream that doesn't decode is a bug in the design since it means _something_ is redundant
|
|
2024-09-16 02:05:50
|
so you can in principle just create random FLIF files and see what they decode to
|
|
2024-09-16 02:06:29
|
in JXL there's a little error detection so not everything will be a valid bitstream
|
|
2024-09-16 02:07:39
|
but still, you should be able to take some small jxlart file and randomly flip bits, not everything will decode but some of it will
|
|
|
AccessViolation_
|
2024-09-16 02:08:00
|
That's interesting. I like the approach of WebAssembly, which is not to encode error correction into the file itself but the file must follow a relatively easy to verify structure, and runtimes will always verify a Wasm module before it is run. This allows you to move validation out of the hot code and you only need to care about the happy path, such that invalid Wasm could trigger undefined behavior in your runtime, but since it's validated for correctness prior, that still can't happen
|
|
|
_wb_
|
2024-09-16 02:08:57
|
then you can decode to png and sort by filesize. The very small PNG files will be boring (just solid colors or repetitive patterns), but the larger ones could be interesting 🙂
|
|
|
AccessViolation_
|
2024-09-16 02:15:36
|
I've seen many of your generation loss videos, It'd be cool to see a similar thing where more and more bits are randomly flipped in images in different formats to see what they turn into or what happens over time (maybe ignoring necessary headers because that would probably immediately prevent them from being decoded)
|
|
2024-09-16 02:17:41
|
I might see if I can do something like that at least for JXL, I bet there's already software designed to simulate bit rot on files
|
|
|
_wb_
|
2024-09-16 02:19:23
|
we don't yet have a mode in libjxl to ignore corruption and decode anyway
|
|
2024-09-16 02:19:58
|
in most other codecs you'll have the same problem, they'll refuse to decode when they detect corruption
|
|
2024-09-16 02:20:47
|
but default vardct jxl should behave quite nicely in this way, if you have a decoder that ignores corrupt sections
|
|
|
AccessViolation_
|
2024-09-16 02:20:57
|
Ah so the error correction in JXL extends to the FLIF (FUIF?) part as well?
|
|
2024-09-16 02:22:34
|
Part of me knows it would be a lot cooler if in stead of "this image was missing or corrupted" we got some cool ass corruptions everywhere, modern errors are so boring... but it's probably for the best
|
|
|
_wb_
|
2024-09-16 02:22:39
|
there is no error correction, there is little amount of error detection: at the end of an ANS stream (and there is typically one such stream per section of the bitstream) the final ANS state acts like a CRC
|
|
|
AccessViolation_
|
2024-09-16 02:22:58
|
Gotcha
|
|