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

_wb_
veluca how did you flip it? exif?
2021-04-06 05:04:53
I compiled a jxl_from_tree that sets orientation to 3 :)
2021-04-06 05:06:42
Could expose that too, it can be nice to change orientation
Pieter
2021-04-06 05:49:59
Is it possible to transpose (mirror around x=y axis) a jxl_from_tree description?
2021-04-06 05:50:23
just swapping x with y, and N with W
_wb_
2021-04-06 05:53:56
Not completely
2021-04-06 05:54:23
e.g. NE can be used but not SW
2021-04-06 05:55:54
In some cases it can be done, but not in general
2021-04-06 05:56:28
But you can do it via orientation
2021-04-06 05:56:44
Transpose the whole image, that is
2021-04-06 05:57:03
All the 8 orientations
2021-04-06 05:59:41
Pieter
2021-04-06 06:00:09
NE would remain NE under transposition
2021-04-06 06:00:22
Oh, no.
2021-04-06 06:00:29
I'm confusing east with west.
_wb_
2021-04-06 06:01:18
NW remains, and gradient predictor is unchanged because N+W-NW = W+N-NW
2021-04-06 06:01:56
But NE changes, and so does the Weighted predictor
2021-04-06 06:02:23
Also for some reason we made WW a predictor but not NN
Master Of Zen
2021-04-06 01:51:19
<@!794205442175402004> Can I ask you for something at least 7800x3300? Will be interesting see end result BPP)
_wb_
2021-04-06 02:17:03
that is a specific resolution, lol
2021-04-06 02:17:24
``` RCT 21 Height 1024 Width 1024 Orientation 4 Alpha if y > 350 if WGH > 0 - AvgN+NE + 1 - AvgN+NE - 1 if c > 2 - Set 255 if W-NW > -1 if NW-N > -1 if N > 254 if c > 0 - Set -255 - Set 0 - W + 1 - NW + 0 - Select + 1 ```
2021-04-06 02:17:29
adding alpha support
2021-04-06 02:17:43
2021-04-06 02:17:55
2021-04-06 02:26:06
2021-04-06 02:26:16
2021-04-06 02:33:25
Also adding support for bitdepths that are not the default 8
2021-04-06 02:34:09
as well as reinterpreting the integers as floating point with a given number of exponent bits
2021-04-06 02:34:13
``` RCT 0 Height 1024 Width 1024 Orientation 1 Bitdepth 11 FloatExpBits 6 if y > 0 - N + 1 - Set 0 ```
2021-04-06 02:34:24
2021-04-06 02:34:32
2021-04-06 02:35:35
11-bit means actually 10-bit because the first bit is the sign bit, and the first 6 bits are treated as a floating point exponent so the last 4 are the mantissa
2021-04-06 02:35:57
this allows representing nonlinear gradients more easily
2021-04-06 03:11:43
for example
2021-04-06 03:11:52
```RCT 0 Height 1024 Width 1024 Orientation 4 /* Bitdepth 10 FloatExpBits 4 */ if y > 350 if WGH > 0 - AvgN+NE + 1 - AvgN+NE - 1 if W-NW > -1 if NW-N > -1 if N > 254 - Set 0 - W + 1 - NW + 0 - Select + 1 ```
2021-04-06 03:12:01
2021-04-06 03:12:12
2021-04-06 03:12:35
add the Bitdepth 10, FloatExpBits 4 that was commented out, and you get
2021-04-06 03:12:44
2021-04-06 03:12:52
2021-04-06 03:13:39
basically this gives a global poor mans gamma adjustment, kind of
Scope
2021-04-06 03:16:39
How costly would it be to add animation, especially with the possibility of setting a delay between frames?
_wb_
2021-04-06 03:17:30
costly in bytes or in effort to add that to jxl_from_tree ?
Scope
2021-04-06 03:17:49
In bytes
_wb_
2021-04-06 03:19:52
well I think N frames are basically N times 1 frame, roughly speaking
2021-04-06 03:20:37
the global image header can be saved, but that's not a lot (and the frameheader gets slightly larger too in case of animation)
2021-04-06 03:22:17
so you could do an animated version of the burning chessboard where the y threshold where the burning starts moves down in every frame, but you'd basically have to re-encode the tree for every frame (trees cannot be shared between frames)
2021-04-06 03:22:46
let's say you could do 20 frames in 1 KB or so
2021-04-06 03:23:22
could probably make a pretty nifty animated fire in a few KB
2021-04-06 03:24:07
but making this convenient in jxl_from_tree is not so easy, that will require quite a bit of code plumbing
Scope
2021-04-06 03:24:50
So roughly the same as combining multiple groups into one image? Because I think with animations it would be possible to do interesting things too, for example looped in 2-5 frames with size less than 256 bytes
_wb_
2021-04-06 03:25:46
yes, a few looping frames should easily fit in 256 bytes if the frames themselves are like 50 bytes
Crixis
2021-04-06 03:26:22
I want to just encode the difference from the previous tree <:kekw:808717074305122316>
_wb_
2021-04-06 03:26:22
it would just require jxl_from_tree to take multiple files as input or something, one per frame
Deleted User
2021-04-06 03:26:53
By the way it seems like fire, clouds and other natural-looking gradients can be easily encoded in Modular... What do you think of removing those artificially from the image (cloud removal would be easier, because sky is uniform) and overlaying transparent cheaply-encoded Modular layer?
2021-04-06 03:28:49
Of course it'd be done at lower bpp, because at higher qualities it'd be easier to just encode everything with VarDCT.
_wb_
2021-04-06 03:28:50
you could cheat and encode all frames in one big invisible multi-group larger-than-canvas frame, where each group represents a frame, and then blit the actual frames from it using patches... but signaling these dummy frames with patches will have some overhead
2021-04-06 03:30:03
removing clouds and replacing them with similar-looking artificially generated clouds is a cool idea but likely very hard to implement, both the extraction step and the 'find a modular image that produces something similar' step
2021-04-06 03:30:38
that's the kind of thing an AI-MozGuetzli-JXL from 2035 might do
Deleted User
2021-04-06 03:31:37
Maybe something slightly different (and a bit easier), like encoding the lowest frequencies with VarDCT (so no removing clouds entirely) and overlay the high-frequency Modular gradient?
_wb_
2021-04-06 03:37:19
maybe a library of texture patterns (clouds, grass, brick walls, ...) could be collected, and an AI-based encoder could detect and extract regions that can be represented (with low fidelity but high appeal) using such a pattern blended over the LF, but it's a very hard problem...
2021-04-06 03:37:55
for now, let's just explore it for the sake of the art ๐Ÿ™‚
Scope
2021-04-06 03:42:18
For automatic encoding this is a difficult challenge, but for some kind of handmade art to get the smallest image size (as created for demoparty) it is possible
_wb_
2021-04-06 04:02:59
``` RCT 5 Alpha if c > 0 if c > 2 if Prev > 50 - Set 255 if y > 0 - AvgW+N - 1 - Set 255 if PrevAbsErr > 3 - Set 255 if W > 20 - AvgW+N - 10 - Set 0 if N-NN > -1 if W > 238 - Set 238 if W > 2 if W-WW > -1 - AvgN+NE + 1 - W - 3 - Set 3 if N > 6 - AvgN+NW - 1 - Set 0 ```
2021-04-06 04:03:27
2021-04-06 04:03:36
2021-04-06 04:04:02
this one you can blend against whatever background
veluca
_wb_ maybe a library of texture patterns (clouds, grass, brick walls, ...) could be collected, and an AI-based encoder could detect and extract regions that can be represented (with low fidelity but high appeal) using such a pattern blended over the LF, but it's a very hard problem...
2021-04-06 04:20:45
that's actually the last thing I was doing during my internship (adding pattern generation to patches), but I decided to drop it in the end ๐Ÿ˜„
_wb_
2021-04-06 05:10:31
Master Of Zen <@!794205442175402004> Can I ask you for something at least 7800x3300? Will be interesting see end result BPP)
2021-04-06 05:11:07
the above jxl is 10240x10240
veluca
2021-04-06 05:11:33
I guess it's hard to make a png of it? ๐Ÿ˜›
_wb_
2021-04-06 05:12:05
the png is too big to fit on discord
veluca
2021-04-06 05:12:26
weird though, it's fairly repetitive
2021-04-06 05:12:35
can you make one with something more interesting? ๐Ÿ˜›
Deleted User
2021-04-06 05:23:56
My WSL2 ran out of RAM and crashed while trying to decode this thing...
Master Of Zen
_wb_ the above jxl is 10240x10240
2021-04-06 05:29:22
thanks, I'm thinking to get myself a new wallpaper) or tile for wallpaper
_wb_ that is a specific resolution, lol
2021-04-06 05:30:55
I could have went full fabian and asked for 7725x3282 ))
surma
2021-04-06 06:03:12
Btw, I open-sourced the web app. PRs welcome ๐Ÿ™‚
2021-04-06 06:03:13
https://github.com/surma/jxl-art
fab
2021-04-06 06:04:57
starred
Master Of Zen
_wb_ the above jxl is 10240x10240
2021-04-06 06:27:49
that's `9.91821289e-7` BPP <a:cooldoge:730176920162926793>
2021-04-06 06:28:16
You know it's getting in cool zone when you start using notation)
Pieter
2021-04-06 06:29:44
Soooo... it should be easy to update it now to the new and more advanved jxl_from_tree?
veluca
2021-04-06 07:46:35
after we opensource it... ๐Ÿ˜›
Pieter
2021-04-06 07:48:22
Oh.
_wb_
2021-04-06 07:54:02
2021-04-06 07:54:32
2021-04-06 07:55:08
8192 x 5120
Pieter
2021-04-06 07:55:48
Is the orientation flag (the 8 different ways) per group or for the whole image?
_wb_
2021-04-06 07:56:08
whole image
2021-04-06 07:56:12
sadly
2021-04-06 07:56:35
not even per frame
2021-04-06 07:56:58
the above image needs to be seen at 1:1 to appreciate it
2021-04-06 07:57:28
I wasted way too much time on getting the flames to kind of tile nicely despite the group boundaries
2021-04-06 07:58:26
the sierpinskis at the bottom are kind of cool imo
2021-04-06 07:59:43
it's of course still a pretty repetitive image
Pieter
2021-04-06 08:03:13
I liked the ones that looked less symmetrical, actually.
_wb_
2021-04-06 08:03:42
I really liked this one.
_wb_
2021-04-06 08:07:31
And this one.
monad
2021-04-06 08:12:21
When Discord starts embedding JPEG XL, this channel is going to look funny.
Deleted User
Pieter I really liked this one.
2021-04-06 08:14:10
Agree. The second one you've mentioned is also good and "modern"-looking, but the first one is IMHO the pinnacle of this channel.
_wb_
2021-04-06 09:09:27
``` RCT 4 Width 3072 Height 4096 Orientation 6 Bitdepth 10 if g > 29 if y > 340 if x > 0 if x > 1121 - N - 1 if WGH > 0 - AvgN+NW + 0 - AvgN+NW - 5 - Set 0 if W-NW > -1 if NW-N > -1 if N > 1021 if c > 0 - Set -1024 - Set 0 if y > 0 - W + 2 if x > 0 - W + 2 - Set 0 - NW + 0 - Select + 2 if W-NW > -1 if NW-N > -1 if N > 1021 if c > 0 if g > 22 - Set -1024 if c > 1 - Set -1024 - Set 0 - Set 0 if y > 0 if g > 24 - W + 2 - W + 1 if x > 0 if g > 24 if g > 26 - W + 2 - W + 1 - W + 2 - Set 0 if g > 25 if g > 27 - NW + 0 - NW - 1 - NW + 0 if g > 21 - Select + 2 - Select + 1 ```
2021-04-06 09:09:38
2021-04-06 09:09:51
Pieter I really liked this one.
2021-04-06 09:31:55
ok here's a variant on that theme
2021-04-06 09:32:00
``` RCT 1 Width 1024 Height 1024 Bitdepth 8 if y > 0 if y > 511 if WGH > 0 - NW + 1 - NW - 1 if WGH > 0 - AvgN+NE + 1 - AvgN+NE - 2 if W > -400 if c > 1 - W - 4 - W - 5 - Set 500 ```
2021-04-06 09:32:09
2021-04-06 09:32:17
2021-04-06 09:50:49
```RCT 4 Orientation 1 Bitdepth 10 if W-NW > -1 if NW-N > -1 if N > 1021 if c > 0 - Set 1024 - Set 0 if y > 0 - W + 1 if x > 0 - W + 2 if c > 0 - Set -1024 - Set 0 - NW + 0 - Select + 2 ```
2021-04-06 09:50:59
2021-04-06 09:51:05
"Xorpinski"
2021-04-06 09:51:21
(I like jxl files that are exactly 42 bytes)
2021-04-06 09:51:29
Deleted User
2021-04-06 09:57:49
The Answer to Life, the Universe, and Everything โค๏ธ
_wb_
2021-04-06 10:40:56
This one is more for gradient enthusiasts, while the "original" one is definitely for "cloud" lovers. They're still both nice, though, but each in their own way.
NeRd
2021-04-07 03:42:12
These look amazing, have the changes that allow these images to be made been merged into jxl_from_tree? I'd really love to play with the new features!
2021-04-07 03:46:29
Also, for some reason, I get "Failed to write decoded image." when trying to decode xorpinski-p.jxl: ``` djxl xorpinski-p.jxl xorpinski-p.png Read 42 compressed bytes [v0.3.7 | SIMD supported: AVX2,SSE4] WARNING: failed to pin thread 2. WARNING: failed to pin thread 1. WARNING: failed to pin thread 3. WARNING: failed to pin thread 0. Decoded to pixels. Failed to write decoded image. ```
2021-04-07 03:47:31
bigchessboard3-p.jxl also fails: ``` djxl bigchessboard3-p.jxl bigchessboard3-p.png Read 138 compressed bytes [v0.3.7 | SIMD supported: AVX2,SSE4] WARNING: failed to pin thread 0. WARNING: failed to pin thread 2. WARNING: failed to pin thread 1. WARNING: failed to pin thread 3. Decoded to pixels. Failed to write decoded image. ```
2021-04-07 03:48:33
art31-p.jxl is fine, here's the output for reference: ``` djxl art31-p.jxl art31-p.png Read 44 compressed bytes [v0.3.7 | SIMD supported: AVX2,SSE4] WARNING: failed to pin thread 0. WARNING: failed to pin thread 3. WARNING: failed to pin thread 1. WARNING: failed to pin thread 2. Decoded to pixels. Done. 1024 x 1024, 4.21 MP/s [4.21, 4.21], 1 reps, 4 threads. Allocations: 244 (max bytes in use: 5.042558E+07) ```
2021-04-07 03:50:16
Actually it looks like a bunch of art files fail to decode, no clue why. I won't continue spamming this channel any further with the same failure messages.
_wb_
2021-04-07 05:33:48
I am making some of them in 10-bit lately
2021-04-07 05:34:45
You'll have to add `--bits_per_sample 8` to your djxl command
2021-04-07 05:34:52
(or 16)
2021-04-07 05:35:34
PNG cannot do 10 and it just fails instead of automatically saving as 8 or 16 bit instead
2021-04-07 05:35:46
(will be fixed at the next sync)
Pieter
2021-04-07 06:53:26
For lossless compression, does the encoder detect that a 16-bit PNG e.g. is only using 10 bits?
_wb_
2021-04-07 07:33:07
It does channel palette in that case
2021-04-07 10:04:55
``` Width 1024 Height 1024 CbYCr Bitdepth 10 Orientation 3 if c > 0 if c > 1 if x > 0 - W - 1 - Set 500 if y > 0 if WGH > 0 - AvgN+NE + 5 - AvgN+NW - 7 if W > -1000 - W - 18 - Set 700 if y > 0 - N + 1 - Set -500 ```
2021-04-07 10:05:04
2021-04-07 10:05:13
"The Smoke Machine"
2021-04-07 10:05:21
Deleted User
2021-04-07 12:44:44
HOLY SHIT
2021-04-07 12:45:04
I NEED TO SEE A 16:9 WIDESCREEN VERSION OF THIS
_wb_
2021-04-07 12:59:58
2021-04-07 01:00:25
``` Width 1024 Height 1024 CbYCr Bitdepth 10 Orientation 6 if c > 0 if c > 1 if y > 800 if N-NN > 0 - N + 0 - N + 1 - Set -80 if x > 500 if x > 501 if y > 0 if WGH > 0 - NW + 3 - AvgN+NE - 5 - W + 1 - Set -200 if WGH > 0 - Gradient + 6 - AvgN+NE - 5 if x > 0 - W - 1 - Set 511 ```
2021-04-07 01:00:59
"The Abstract Hills of Super-Jixel-Land"
2021-04-07 01:01:07
2021-04-07 01:09:50
this is too much fun
2021-04-07 01:10:10
I need to prepare for the upcoming JPEG meeting instead of making these
2021-04-07 01:10:23
it's addicting though
2021-04-07 06:34:26
this feels cool
Jim
2021-04-07 06:50:57
๐Ÿšญ
_wb_
2021-04-07 07:26:55
``` RCT 1 Bitdepth 10 if c > 1 if y > 0 - N - 1 - Set 500 if y > 0 if WGH > -10 if WGH > 0 if WGH > 10 - AvgN+NE + 3 - NE + 300 - NE - 200 - AvgN+NW - 3 if c > 0 - Set 500 if W > 1200 - Set -200 - W + 9 ```
2021-04-07 07:27:05
2021-04-07 07:27:40
"A Perfectly Normal Cave Wall In Hell"
2021-04-07 07:27:51
2021-04-07 07:28:16
some previous sketches of this:
2021-04-07 07:28:26
2021-04-07 07:28:34
2021-04-07 07:28:43
2021-04-07 07:28:53
2021-04-07 07:29:02
2021-04-07 07:29:10
2021-04-07 07:31:53
This trick of selecting on `WGH` and basically throwing off the weighted predictor by kicking it in the nuts whenever its subpredictors are getting good is just great for creating randomish textures of different kinds
2021-04-07 07:58:45
http://sneyers.info/jxl/art/
2021-04-07 07:59:10
simple test page
improver
2021-04-07 08:05:57
displays on chromium snapshot :>
_wb_
2021-04-07 08:14:47
All seem to render fine, including when there's alpha or if it's 10-bit
Pieter
2021-04-07 08:54:37
Apparently ML-based codecs aren't entirely crazy: https://opensource.googleblog.com/2021/04/lyra-enabling-voice-calls-for-next-billion-users.html
2021-04-07 08:55:45
Still waiting for JPEG-XL2 which uses an ML model for the predictor, and produces cat pictures with empty data stream.
improver
2021-04-07 10:15:13
i suspect that doing actual cat pictures in jxl-art way wouldn't b that hard if patches were involved
2021-04-07 10:17:35
make fur texture, then other features, use them as patches to make up whole images
_wb_ http://sneyers.info/jxl/art/
2021-04-07 10:34:39
should make server properly give `Content-Type` of `image/jxl`, as right now "Open image in new tab" saves instead of actually opening it
raysar
2021-04-07 11:47:00
1600 bytes, who can do more? ๐Ÿ˜„
2021-04-07 11:48:16
i need to force modular because it use vardct, it's not smart ^^
monad
2021-04-08 07:23:44
Just use `-s 9` instead of `-s 8`?
Crixis
2021-04-08 08:10:39
-s 9 -E 3
_wb_
2021-04-08 08:11:17
who can make the coolest JXL logo in jxl art ?
Crixis
2021-04-08 08:14:18
s 9 E 3 I 1 g 3
_wb_
2021-04-08 08:54:33
``` Width 1000 Height 1000 Bitdepth 8 RCT 1 if y > 420 if x > 500 if WGH > 0 - AvgN+NW + 2 - AvgN+NW - 2 if WGH > 0 - AvgN+NE + 2 - AvgN+NE - 2 if c > 1 if y > 0 - N - 1 - Set 300 if c > 0 if y > 0 - N + 1 - Set -500 if y > 0 if y > 220 if x > 499 if x > 500 - NW + 0 if y > 280 if N > -100 - N - 10 - Set 0 if N > 300 - Set 200 - N + 10 - NE + 0 if x > 500 - NE + 0 - NW + 0 if W > -100 if W > 300 - Set 200 if x > 960 - W + 10 if x > 822 - W - 10 if x > 628 - W + 10 if x > 340 - W - 10 if x > 175 - W + 10 if x > 0 - W - 10 - Set 255 - Set 0 ```
2021-04-08 08:54:42
JXL logo
2021-04-08 08:54:53
2021-04-08 08:55:03
2021-04-08 08:56:19
hmm one of the offsets isn't right
2021-04-08 09:03:33
tweaked it a bit
2021-04-08 09:03:41
2021-04-08 09:03:50
2021-04-08 10:43:59
This is a single standalone 4 kb HTML file: http://sneyers.info/jxl/art/
raysar
Crixis s 9 E 3 I 1 g 3
2021-04-08 11:29:30
i reduce the size and format 287bytes, i'm smaller than a 0 pixel avif :p i'm happy :p
fab
2021-04-08 11:38:53
for %i in (C:\Users\User\Documents\m\*.png) do cjxl "%i" "%i.jxl" -I 0.344 -X 8.21 -P 1 -Q 25.6 -m -s 9 --num_threads=2
2021-04-08 11:39:02
2021-04-08 11:42:36
2021-04-08 11:43:21
2021-04-08 11:44:44
the second is lossless
2021-04-08 11:46:24
2021-04-08 11:47:56
this is not jpeg xl art i made it with paint
2021-04-08 11:48:17
i don't know how raysar drew the cat
2021-04-08 12:01:32
but i think this is a bug not a cat
raysar
2021-04-08 12:29:51
it's a pixel cat, not a coded cat ๐Ÿ˜„ but the result is the same ^^
2021-04-08 12:50:57
162 bytes, cat with 3 colors
Crixis
2021-04-08 12:52:32
it is so small!
raysar
2021-04-08 01:10:11
102bytes cat in white and black
2021-04-08 01:10:57
i need to to go sub 100bytes !
Crixis
2021-04-08 01:15:46
remove jxl conteiner?
2021-04-08 01:16:18
if there is one
raysar
2021-04-08 01:19:38
i don't know
2021-04-08 01:20:14
the smallest cat in the web 60 bytes (16*16px) ๐Ÿ˜„
_wb_
2021-04-08 01:24:40
Crixis
_wb_
2021-04-08 01:26:32
this crash wic
_wb_
2021-04-08 01:27:13
it's a 1-bit image, probably the application isn't dealing well with that
2021-04-08 01:27:24
<:logo:829708783336816671>
2021-04-08 01:27:48
the emoji version is a lossy JPEG, the lossless PNG was too large
raysar
_wb_
2021-04-08 01:51:17
how you do that? ^^
_wb_
2021-04-08 01:53:21
`-q 100 -s 9 -v -P 0 --override_bitdepth 1`
raysar
2021-04-08 01:57:54
ok ty, in modular i don't understant what are lossy option, -palette can't fixe max number of colors?
_wb_
2021-04-08 01:59:27
there are few lossy options in modular, only -Q and --lossy_palette
raysar
2021-04-08 02:01:11
ok
2021-04-08 02:01:39
nyancat symplifed 252bytes -q 100 -s 9 -v -P 0 --override_bitdepth 2
Crixis
raysar nyancat symplifed 252bytes -q 100 -s 9 -v -P 0 --override_bitdepth 2
2021-04-08 02:20:22
Wic fail also on this
raysar
2021-04-08 02:20:53
xnviewmp read it correctly.
_wb_
2021-04-08 06:38:56
simple version of the logo:
2021-04-08 06:38:59
``` Width 900 Height 450 Bitdepth 1 RCT 0 if c > 0 if y > 0 if y > 225 if x > 448 if x > 449 - NW + 0 if y > 300 - Set 0 - Set 1 - NE + 0 if x > 449 - NE + 0 - NW + 0 if x > 898 - Set 1 if x > 749 - Set 0 if x > 599 - Set 1 if x > 299 - Set 0 if x > 149 - Set 1 if x > 0 - Set 0 - Set 1 - Set 0 ```
2021-04-08 06:39:07
2021-04-08 06:39:14
2021-04-08 06:40:06
simplicity also has its elegance
2021-04-08 06:49:14
fancy version:
2021-04-08 06:49:18
``` Width 1000 Height 1000 Bitdepth 8 RCT 1 if y > 400 if x > 500 if WGH > 0 - AvgN+NW + 2 - AvgN+NW - 2 if WGH > 0 - AvgN+NE + 2 - AvgN+NE - 2 if c > 1 if y > 0 if N > -10 - N - 1 - N + 0 - Set 300 if c > 0 if y > 0 - N + 1 - Set -510 if y > 0 if y > 220 if x > 499 if x > 500 - NW + 0 if y > 280 if N > -100 - N - 10 - Set 0 if N > 300 - Set 200 - N + 10 - NE + 0 if x > 500 - NE + 0 - NW + 0 if W > -100 if W > 300 - Set 200 if x > 960 - W + 10 if x > 800 - W - 10 if x > 628 - W + 10 if x > 340 - W - 10 if x > 175 - W + 10 if x > 0 - W - 10 - Set 255 - Set 0 ```
spider-mario
2021-04-09 04:13:36
come to think of it, maybe there is a niche for splines in jxl-art
Scope
2021-04-09 04:15:29
Yep https://discord.com/channels/794206087879852103/824000991891554375/826457184539508786
_wb_
2021-04-09 04:17:09
Yes, please update jxl_from_tree to add some spline description syntax :)
2021-04-09 04:18:01
This is a lot of fun, but also somewhat useful to produce test bitstreams
raysar
2021-04-09 07:36:13
xnviewMP don't decode well this image :/
Crixis
2021-04-09 07:36:39
<#805007255061790730>
raysar
2021-04-09 07:37:43
it's important to find where is the problem, all decoder need to be perfect for all type of jxl.
_wb_
2021-04-09 07:45:05
Interesting. I suppose it's a clamping issue?
veluca
2021-04-09 07:53:44
it probably ends up ignoring the bitdepth
_wb_
2021-04-09 08:19:59
``` RCT 1 if c > 0 if c > 1 - Set 50 if y > 200 if y > 800 - N 0 - N + 1 - Set -300 if y > 0 if y > 500 if x > 509 if x > 510 - AvgN+NW 0 - AvgN+NW - 1 - AvgN+NE 0 if x > 510 - AvgN+NE + 0 - AvgN+NW + 0 if W > 580 - W - 2 if W-WW > -1 - W + 3 if W > -370 - W - 3 - W + 0 - Set 0 ```
2021-04-09 08:20:03
Another jxl logo
2021-04-09 08:20:10
2021-04-09 08:20:19
VEG
_wb_
2021-04-09 09:28:58
Relly nice, much cleaner than <:Xjxl:822166843313225758>
raysar
2021-04-09 10:22:30
we are nearly to a good logo :p
spider-mario
2021-04-09 11:04:00
I was wondering if that logo was accidentally HDR, and I think it is
2021-04-09 11:04:18
we donโ€™t intrinsically clip when decoding
_wb_
2021-04-10 06:20:36
I indeed used out of bounds values, which I guess is the same as HDR if it's above 255 in 8-bit sRGB
2021-04-10 06:21:33
Values go from -370 to 580
2021-04-10 06:21:41
Instead of 0 to 255
2021-04-11 12:14:30
/wraHOh/aCAmCCYAHAewAEYAALQASzhCpsOyYX6dloe+uCwRfCRSkHGgyjiAu8Ly1CtXlBscgv+I bqAMMgCShAMA
2021-04-11 12:15:12
(I don't know how to upload a jxl on mobile discord, I am on my phone, this is the base64 encoded version)
2021-04-11 12:15:34
"Smoke on the water, fire in the sky"
2021-04-11 12:18:40
https://twitter.com/jonsneyers/status/1381219800299491328?s=19
2021-04-11 12:19:29
```Bitdepth 8 Orientation 7 RCT 1 if y > 0 if x > 500 if c > 0 if c > 1 - Set -150 if x > 501 - W + 1 - Set 0 if WGH > 5 - AvgN+NE + 3 - AvgN+NE - 3 if c > 0 if c > 1 - Set 10 - Set -100 if WGH > 0 - AvgN+NW + 1 - AvgN+NE - 1 if W > 150 - Set 50 - W + 4 ```
2021-04-11 12:20:01
But I also hacked jxl_from_tree to crop 100 pixels on the top (right after orientation)
2021-04-11 12:38:00
(another thing to expose: frame offsets. Very practical to hide ugly initialization rows or columns)
2021-04-11 12:38:37
(but on my phone taking a bath now and hacking it in Termux was already painful enough)
Deleted User
_wb_ (but on my phone taking a bath now and hacking it in Termux was already painful enough)
2021-04-11 12:50:17
Show this message to anyone from a century ago. Living in 2077 be like:
_wb_
2021-04-11 01:39:37
Without the frame offset cropping stuff, it looks like this:
2021-04-11 01:39:41
2021-04-11 02:18:20
``` Orientation 3 RCT 15 if WGH > -7 if WGH > 6 - AvgN+NE + 1 - N + 30 - AvgN+NE - 1 ```
2021-04-11 02:18:49
"Ice Cavern"
2021-04-11 02:19:10
2021-04-11 03:11:44
2021-04-11 03:13:33
For some reason, people are suddenly liking 'The Smoke Machine' and following me on twitter
veluca
2021-04-11 03:14:04
hah
2021-04-11 03:14:19
I really didn't expect this when I wrote that tree thingy xD
_wb_
2021-04-11 03:25:20
Branching on the weighted predictor MA property and using an offset depending on its value is great for natural-looking art
2021-04-11 03:26:26
It's also almost a symbol of the collaboration: WP was by Alexander Rhatushnyak, MA trees by me, and integrating them and allowing predictors per node and offsets is by Luca
Scientia
2021-04-11 03:27:42
i'm somewhat interested in what use this could have in game textures, especially inorganic textures
2021-04-11 03:28:04
a game using this for some inorganic textures would be neat
_wb_
2021-04-11 04:59:43
```Width 1000 Height 500 Bitdepth 8 RCT 1 if c > 1 if WGH > 0 - AvgN+NW + 1 - AvgN+NW - 1 if y > 0 if y > 249 if x > 498 if x > 499 - NW + 0 - N - 2 - NE + 0 if x > 499 - NE + 0 - NW + 0 if x > 938 - W + 6 if x > 749 - W - 2 if x > 499 - W + 2 if x > 249 - W - 2 if x > 60 - W + 2 if x > 0 - W - 6 - Set 255 - Set 0 ```
2021-04-11 04:59:47
Yet another logo
2021-04-11 05:00:19
/wqYfxAJCAYBAOwASzhDdMN03Tlqxgcmu4FdmEe+PKrLJV+ueVlSnnblmtehwwIyKde8BYyJFMqR l0n5cSkUsoPjjyThAAA=
2021-04-11 05:00:43
2021-04-11 05:51:14
```Bitdepth 9 Orientation 1 RCT 1 if c > 1 - Set -200 if c > 0 if y > 0 - N +1 - Set 0 if N > 600 if y > 250 if y > 500 if y > 750 - NW - 200 - NW - 800 - NW - 3000 - NW - 400 if WGH > -36 if WGH > 35 - AvgN+NW + 1 - AvgN+NE + 250 - AvgN+NE - 2 ```
2021-04-11 05:51:38
"Tissue Sample #1337"
2021-04-11 05:52:03
65 bytes
2021-04-11 05:52:08
2021-04-11 08:46:44
I gained over 60 twitter followers today because of the jxl art I am tweeting
2021-04-11 08:49:28
Still a few orders of magnitude fewer followers than <@799692065771749416> ๐Ÿ˜…
Fox Wizard
2021-04-11 08:49:49
<:Stonks:806137886726553651>
Pieter
2021-04-11 08:50:12
<@794205442175402004> I don't want to know how many of them are bots.
_wb_
2021-04-11 08:51:21
Why would bots follow you?
Pieter
2021-04-11 08:52:57
You should ask them.
2021-04-11 08:53:13
Lots of usernames don't look very real.
_wb_
2021-04-11 08:54:32
Pieter
2021-04-11 08:56:35
Updated 6 years, 1 month ago?
_wb_
2021-04-11 08:57:14
That cannot be right, or did you already have that many followers back then?
Pieter
2021-04-11 08:59:14
No, certainly not.
2021-04-11 08:59:31
Only reached 2^16 recently.
VEG
_wb_ For some reason, people are suddenly liking 'The Smoke Machine' and following me on twitter
2021-04-11 09:24:17
I guess it is because of this retweet (more than 200K followers): https://veg.by/z/2021-04-12-00-23-47-4c573293.jpg
Scientia
2021-04-12 02:26:55
also just asking, how does one compile jxl_from_tree?
2021-04-12 02:27:40
i've tried `clang -I/mnt/ScientiaStor/Software/Source/Visual/jpeg-xl tools/jxl_from_tree.cc` and `gcc -I/mnt/ScientiaStor/Software/Source/Visual/jpeg-xl tools/jxl_from_tree.cc`
2021-04-12 02:27:58
but i must be missing something because it has errors
2021-04-12 02:48:21
nah i think i got it
2021-04-12 02:52:28
having this issue now, this is the same issue i've had with the online tool too, which is strange since i assumed it would work
Scope
2021-04-12 02:57:29
The online tool is the same as the git, only the private dev version has new features
Scientia
2021-04-12 03:30:03
Ohhh
2021-04-12 03:30:07
) :
2021-04-12 03:30:17
Hope these get pushed to the git
190n
2021-04-12 06:06:36
public git repo when
_wb_
2021-04-12 07:20:03
At next sync
2021-04-12 07:20:13
``` Bitdepth 10 Orientation 1 RCT 1 if c > 0 if y > 0 - N + 1 - Set -500 if W > -1000 - Weighted -10 - Set 2000 ```
2021-04-12 07:20:32
"Alien Art"
2021-04-12 07:20:40
36 bytes
2021-04-12 07:21:09
/wr6H0GRCAYBAGAASzgkunkeVbaSBu95EXDn0e7ABz2ShAMA
2021-04-12 07:21:33
2021-04-12 05:41:57
What's the signalling cost for noise? Might be interesting to add some noise to jxl art
raysar
2021-04-12 05:43:18
noise?
_wb_
2021-04-12 05:45:19
Noise generation. Can probably signal some rather extreme and weird noise that could be artistic, but I forgot how much it costs to signal
2021-04-12 05:46:43
It's a lookup table of noise intensity for X and B depending on Y, right? Or I suppose channel 0 and 2 depending on channel 1
2021-04-12 05:49:41
The table is signalled as uncompressed half-floats though, right? So not super cheap, something like 32 bytes or so
raysar
2021-04-12 06:10:26
Your jxl art use the modular decoding? Is there noise generation in it?
2021-04-12 06:10:46
Deleted User
raysar Your jxl art use the modular decoding? Is there noise generation in it?
2021-04-12 06:42:13
Yes, it's all Modular exclusively. Modular generates MA tree and encodes only the difference between the value predicted from that tree and the actual pixel value. You want this difference to be the smallest for best compression. JXL Art assumes that the difference between tree's prediction and "actual" value is exactly 0 so you're seeing only predicted values.
veluca
_wb_ What's the signalling cost for noise? Might be interesting to add some noise to jxl art
2021-04-12 07:05:10
16 bytes, more or less
raysar
Yes, it's all Modular exclusively. Modular generates MA tree and encodes only the difference between the value predicted from that tree and the actual pixel value. You want this difference to be the smallest for best compression. JXL Art assumes that the difference between tree's prediction and "actual" value is exactly 0 so you're seeing only predicted values.
2021-04-12 07:07:29
Thank you, that's clear ๐Ÿ™‚
Pieter
2021-04-12 07:09:23
_now wonders about a hypothetical JPEG-XL2 that has a jxl\_from\_tree like language to encode predictors for DCT coefficients._
veluca
2021-04-12 07:14:40
I actually thought about doing it
2021-04-12 07:14:47
and tried it
2021-04-12 07:15:04
it was basically the same as the current context model though
2021-04-12 07:17:03
which means either our ctx model is very good, or our tree learning heuristic is very bad xD
2021-04-12 07:17:43
although I did use (in my PhD thesis) a jxl_from_tree-like language to compress graphs ๐Ÿ˜›
Pieter
2021-04-12 07:17:57
how are the DCT coefficients encoded in JPEG-XL, actually?
Deleted User
Pieter how are the DCT coefficients encoded in JPEG-XL, actually?
2021-04-12 07:21:11
IIRC Modular encodes DC (1:8 scale) coeffs
veluca
2021-04-12 07:22:33
DC, yes
2021-04-12 07:22:49
DCT, just ANS (or huffman) + context model
_wb_
2021-04-12 07:27:45
The ctx model for AC does have some degrees of freedom though
2021-04-12 07:28:20
Not full MA, but there is some expressivity there
2021-04-12 07:31:31
AC coeffs are encoded roughly as follows: first the number of nonzero coeffs is encoded, with its own ctx model
2021-04-12 07:32:41
Then coeffs are encoded, with a ctx that can depend on amongst others the coeff index, nb of nonzeroes left, DC values
2021-04-12 07:34:05
Once the last nonzero coeff is encoded the decoder will know that and starts with the next block
Pieter
2021-04-12 07:56:48
And DC is encoded as modular?
_wb_
2021-04-12 08:05:56
Yes
Pieter
2021-04-12 08:06:14
With any restrictions on features or so?
_wb_
2021-04-12 08:06:20
So you could do a jxl art in DC and get it 8x upsampled
2021-04-12 08:06:36
No restrictions, but the encoder doesn't do fancy stuff
2021-04-12 08:07:09
So there are specialized decoder codepaths that are faster if the encoder was tame
Pieter
2021-04-12 08:07:26
VarDCT means that the DCT areas can be variable size, right? How is the "DC image" to be encoded with modular determined then?
_wb_
2021-04-12 08:08:08
DC image is always 1:8
2021-04-12 08:08:24
Bigger blocks also have low freq AC in the DC image
Pieter
2021-04-12 08:08:52
I'm confused
_wb_
2021-04-12 08:10:26
We do fancy math, e.g. a 16x8 block has two 'DC' coeffs
Pieter
2021-04-12 08:21:49
Interesting.
veluca
Pieter Interesting.
2021-04-12 08:33:51
that was *a tad* tricky to get to work right...
Pieter
2021-04-12 08:35:36
I can imagine something like taking the 2 "DC" coefficients, then using their average as actual 16x8 DC, and their difference as 8,8 AC coefficient, and then consuming all other AC coefficients from the decoder.
_wb_
2021-04-12 08:36:36
yes, you'd take the DC and the coeff that does lowest freq horiz, translate them to two "DC" coeffs
2021-04-12 09:23:33
``` Bitdepth 10 Orientation 3 RCT 1 if c > 1 - Set -200 if c > 0 if y > 0 - N -1 - Set 500 if y > 400 if WGH > 0 - AvgN+NW 80 - AvgN+NW -80 if W > -1000 - Weighted -5 - Set 2000 ```
2021-04-12 09:23:52
"Self-assembling Alien Art"
2021-04-12 09:24:30
`/wr6H1FQTAgGAQCQAEs4JJp3vWxBBeeRkvKCFAUXPRs03vN6A0JvPlh24IMeScIBAA==`
2021-04-12 09:24:57
Scope
2021-04-12 09:29:14
`data:image/jxl;base64,/wr6H1FQTAgGAQCQAEs4JJp3vWxBBeeRkvKCFAUXPRs03vN6A0JvPlh24IMeScIBAA==`
_wb_
2021-04-12 09:29:29
That would be fun to animate, with that y coord just changing every frame
Pieter
2021-04-12 09:30:18
would it be very hard to add a time variable to the language?
2021-04-12 09:31:10
just encode everything as a single frame, with separate group(s) for every timeslot, and then use sections to extract frames from it?
_wb_
2021-04-12 09:31:59
Probably not really, but probably easier to have something that takes multiple trees as input and does one frame per tree (and then a simple bash script can produce the input files)
Pieter
2021-04-12 09:32:34
oh, right, you have separate MA trees per frame?
_wb_
2021-04-12 09:33:41
You can even have separate ones per group, but we just tend to use the global one since group id is a property you can split on
Pieter
2021-04-12 09:56:40
what is the difference between having a separate MA tree per group, and permitting a global tree with groupsplits are at the top?
_wb_
2021-04-13 05:47:58
Global tree is more efficient since the trees tend to be similar between groups so there is less signaling overhead with a global tree
Pieter
2021-04-13 06:01:14
So what is the use for per-group trees, as those can be emulated by a global tree with group-based splits at the top?
_wb_
2021-04-13 06:09:44
Probably no use, current encoder does not do it
2021-04-13 06:10:27
But I guess it _could_ be more efficient sometimes
2021-04-13 06:11:04
Like if all groups except one use tree A while group 57 uses tree B
2021-04-13 06:12:12
Then with a global tree you'd have to do ``` if g > 57 Subtree A if g > 56 Subtree B Subtree A ```
2021-04-13 06:13:02
If tree A is a big one, signalling it twice is not so good
Pieter
2021-04-13 06:14:31
Ah you can have both a global one and per-group ones, I see.
2021-04-13 06:14:58
That's equivalent more or less to allowing "if g == C" branches, but only at the top level of the tree.
_wb_
2021-04-13 06:16:46
Yes
2021-04-13 07:24:58
``` RCT 1 if c > 0 if W+N-NW > 1200 - Set -1200 - Weighted 30 - Set 0 ```
2021-04-13 07:25:27
/wr6HwGRCAYBAEwASzhE5i3dQXEaWAD7CupzJAkHAA==
2021-04-13 07:26:06
2021-04-13 07:28:42
``` Bitdepth 10 Orientation 1 RCT 1 if c > 0 if W+N-NW > 1200 - Set -1200 - Weighted 30 if N > -400 - Weighted - 1 - Set 1100 ```
2021-04-13 07:29:13
/wr6H0GRCAYBAGQASzhE3C1PyMeqYMn/kX4F8TjiQDGBJOEAAA==
2021-04-13 07:30:54
"The Glitchy Dunes of Cyberia"
2021-04-13 07:31:21
2021-04-13 08:11:53
The weighted predictor is fun. And we're only scratching the surface here: this is all just the **default** weighted predictor. Custom weights could be signalled to get whole families of different weighted predictors...
2021-04-13 08:13:58
<@179701849576833024> what does WGH mean? It's the weighted predictor max-amplitude subpredictor error, so I know what the W means but not the G and H...
veluca
2021-04-13 08:15:41
WeiGHted ๐Ÿคฃ
VEG
2021-04-13 08:28:30
<@!794205442175402004> you could try to sell a picture like this https://twitter.com/jonsneyers/status/1379158649478713349 as an NFT token ๐Ÿ™‚ Who knows, maybe the technical background behind this picture will make somebody interested, and it will collect loads of money for further development of the codec.
Scope
2021-04-13 09:43:12
In my opinion, the NFT is a quite shady hype thing, which is more likely to bring a bad reputation to Jpeg XL than give something positive and useful (except for money from someone who then also wants to make money on it when reselling it at a higher price later)
_wb_
2021-04-13 10:10:41
If it's done without energy-burning proof-of-work, I don't mind NFT as a method for selling art. Of course it's overhyped and silly, but in that sense it is not different from traditional, reputable art auctions.
2021-04-13 10:11:53
We don't need money to develop jxl, afaik. I have a job at Cloudinary, the others have a job at Google, we get paid sufficiently already :)
Scope
2021-04-13 10:27:26
The point is that this is not a sale of some unique thing with all the rights to obtain and collect as in the real world, it's just a sale of a unique hash that works only on a particular platform, which is associated with some thing
2021-04-13 10:34:09
It's like selling a unique Eiffel Tower in some computer game and only in this game it will be the only and unique or for example a soccer player from some team, but their owner will be only in this computer game (as long as it will exist)
2021-04-13 10:46:53
Also, most big and high-profile NFT sales are advertisements for various services related to the NFT promotion or charity (when the buyer does not care what to buy), the rest in the hope of reselling it at a profit
_wb_
2021-04-13 10:48:53
``` RCT 1 if N > -200 if W > 0 - NE -1 if c > 0 - AvgN+NW -1 - AvgW+N - 1 - Set 400 ```
2021-04-13 10:49:09
"Stairway to Heaven"
2021-04-13 10:49:35
/wr6HwGRCAYBAFQASzhC3O09qH6PCzxI9BB2wQyShAMA
2021-04-13 10:49:59
Scope
2021-04-13 10:54:42
+ `data:image/jxl;base64,` like `data:image/jxl;base64,/wr6HwGRCAYBAFQASzhC3O09qH6PCzxI9BB2wQyShAMA` and it will be convenient to view when copying directly in the browser address bar
_wb_
2021-04-13 10:56:30
Right. Doing that on twitter now
2021-04-13 10:57:10
I have no clue where those stairs are coming from at the bottom
Scope
2021-04-13 10:59:23
<https://github.com/mathiasbynens/small/issues/114> https://twitter.com/mathias/status/1381889698226917376
_wb_
2021-04-13 07:40:06
data:image/jxl;base64,/wqaGeh/oEgIBgEAFAELgItlK8bI1pigmwgqcJDEAINY63n4j32HzZAbSvhPopdjbEKq0wxZNOG/ /9cG6Ofan39symrgv4bOyKH2HwEm+ZMkHAA=
2021-04-13 07:40:49
``` Height 820 Bitdepth 10 Orientation 1 RCT 1 if c > 1 - Set 100 if c > 0 if y > 0 - N + 2 - Set -1000 if y > 0 if x > 1022 if y > 200 if y > 620 - Set 0 - Set 1023 - Set 0 if x > 0 if y > 410 if x > 509 if x > 510 - NW + 0 if y > 510 - Set 0 - N 0 - NE + 0 if x > 510 - NE + 0 - NW + 0 if y > 200 if y > 620 - Set 0 - Set 1023 - Set 0 if x > 822 - Set 1023 if x > 199 - Set 0 - Set 1023 ```
2021-04-13 07:40:55
Yet another logo
2021-04-13 07:41:00
_wb_
2021-04-13 07:42:59
Similar to this one, but the X is going all the way here
2021-04-14 06:20:38
```RCT 1 Squeeze if c > 31 - Set 0 if W+N-NW > 100 - Set -200 - Weighted 7 ```
2021-04-14 06:21:27
data:image/jxl;base64,/wr6HwGRCAYBAFAASzhBvO15IutBdUj+EWONJGEBgAA=
2021-04-14 06:22:47
"Alien Message"
2021-04-14 06:22:52
2021-04-14 06:38:56
``` RCT 1 if PrevErr > 0 - Set 0 if W+N-NW > -500 - Weighted -1 - Set 300 ```
2021-04-14 06:40:29
data:image/jxl;base64,/wr6HwGRCAYBAEgASzhC5i390BNw2nk1MCxIEg4A
2021-04-14 06:42:04
More Alien Art
2021-04-14 06:42:09
190n
2021-04-14 06:42:58
with all these data urls i think you are winning the discord message encode challenge that i had proposed in the av1 server
_wb_
2021-04-14 06:46:45
What was that challenge?
190n
2021-04-14 06:48:10
i proposed it here https://discord.com/channels/587033243702788123/612960210570575900/823425406475436032
2021-04-14 06:48:42
a couple small avif encodes starting here https://discord.com/channels/587033243702788123/610740411723546635/823475615650152471
_wb_
2021-04-14 06:53:27
Ah, I see. Yes the avif header overhead is kind of silly
190n
2021-04-14 06:55:36
yeah i used avif since i had heard it was better than jxl for small images, but i didn't realize there would be so much overhead. and this was before chromium had jxl support which defeated the purpose of making them data urls
_wb_
2021-04-14 09:19:40
``` RCT 1 if c > 0 if c > 1 if W > 200 - Set 0 - Weighted 13 if Prev > 50 if Prev > 70 if Prev > 100 if Prev > 120 - Set 0 - Set -400 - Set 0 - Set 400 - Set 0 if W > -80 - AvgW+NW - 1 - Set 320 ```
2021-04-14 09:19:59
"Alien Architecture"
2021-04-14 09:20:50
data:image/jxl;base64,/wr6HwGRCAYBAKAASzgiOnfKLyl1NObT+JCRR2oVLCCAa5TIMEBkkCxIIgMHgP2IJOEAAA==
2021-04-14 09:20:59
2021-04-14 03:18:34
data:image/jxl;base64,/wr6HwGRCAYBAGwASzhCtjlvwCvy9NvFPsJhYfCVLD2mQW1IEg4A
2021-04-14 03:19:13
``` RCT 1 if c > 0 if c > 1 - Set -200 - Set 300 if N > -350 if W > 101 - AvgAll - 1 - Weighted - 3 - Set 250 ```
2021-04-14 03:20:00
"Cupid's Factory" ๐Ÿ’˜๐Ÿญ
2021-04-14 03:20:13
Petr
_wb_
2021-04-14 04:01:39
Cool, girls will go nuts. ๐Ÿ˜„
Master Of Zen
_wb_
2021-04-14 05:52:05
overhead of sending this over internet is equivalent of having large box for wedding ring
_wb_
2021-04-14 06:31:43
data:image/jxl;base64,/wr6H7FATAgGAQBcAEs4QrztoTB2LKCxxwE8epRBK0gSDnAC
2021-04-14 06:32:16
``` Orientation 6 RCT 21 if PPrev > 150 - Set 0 if W > -100 if WGH > 0 - Weighted - 1 - AvgW+NW - 1 - Set 500 ```
2021-04-14 06:32:31
"Alien Farmland"
2021-04-14 06:32:53
2021-04-14 07:45:52
data:image/jxl;base64,/wr6H0GRCAYBAIAASzhEtjntAcQjNd/5QVtY4uMOCZx/VOD8460xBknCAVw=
2021-04-14 07:46:21
``` Bitdepth 10 Orientation 1 RCT 15 if c > 0 if c > 1 if x > 0 - W -1 - Set 511 if y > 0 - N -1 - Set 511 if N > -500 if WGH > 10 - AvgN+NW -2 - Weighted -1 - Set 1500 ```
2021-04-14 07:48:31
Not sure if it should be oriented like that
2021-04-14 07:48:49
2021-04-14 07:49:08
This has something curtainy
2021-04-14 07:49:26
But upside down it maybe is more interesting
2021-04-14 07:50:53
2021-04-14 07:51:31
Now it looks like huge flames behind mountain silhouettes
2021-04-14 07:52:32
2021-04-14 07:53:26
Very different image depending on orientation imo
2021-04-14 07:53:34
๐Ÿค”
2021-04-14 07:54:12
Going for orientation 3
2021-04-14 07:54:48
data:image/jxl;base64,/wr6H1FQTAgGAQCAAEs4RLY57QHEIzXf+UFbWOLjDgmcf1Tg/OOtMQZJwgFc
2021-04-14 07:55:07
"Alien Bushfires"
Petr
_wb_ Now it looks like huge flames behind mountain silhouettes
2021-04-15 02:10:08
Polar lights?
_wb_
2021-04-15 05:16:36
Yes, that too
2021-04-15 09:40:37
data:image/jxl;base64,/wr6F9NATAgmAP0jgAUwAgDwAEs4Ijp3nmrJz1LyQwg0i74M3nhg1CzrimbRawsWEGYNholRckCz 6JtVL0aI05gFhgX3wINQBZ8FScIBAA==
2021-04-15 09:41:18
``` 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 ```
2021-04-15 09:43:01
"Unusually Cloudy Desert Sunset, Part 1"
2021-04-15 09:43:36
veluca
_wb_
2021-04-15 09:46:00
ok, that's pretty surprisingly realistic...
_wb_
2021-04-15 09:46:49
data:image/jxl;base64,/wr6H9FATAgGAQDwAEs4Ijp3nmrJz1LyQwg0i74M3nhg1CzrimbRawsWEGYNholRckCz6JtVL0aI 05gFhgX3wINQBZ8FScIBAA==
2021-04-15 09:47:00
Same code as above but no crop
2021-04-15 09:49:01
"Unusually Cloudy Desert Sunset, Part 2: Aliens' Earth Simulator Revealed"
2021-04-15 09:49:28
veluca
2021-04-15 09:49:37
(I don't see the crop in the code above)
_wb_
2021-04-15 09:50:05
Yes I haven't made syntax for it yet, just manually recompile it with hardcoded cropping, lol
veluca
2021-04-15 09:50:11
ah ๐Ÿ˜„
2021-04-15 09:52:07
I have some old version of the gtk plugin that breaks badly on this image btw xD
_wb_
2021-04-15 09:53:24
Clamping is kind of important for these images, I am heavily using out-of-bounds values
2021-04-15 09:53:43
Orientation might also be broken in old versions
veluca
2021-04-15 09:55:05
I think this might be using the wrong stride
2021-04-15 09:55:13
(or maybe it is indeed orientation)
_wb_
2021-04-15 10:24:32
The hint of pyramids at the horizon is pretty cool imo
improver
2021-04-15 01:13:31
could one make that larger
2021-04-15 01:14:07
or not with current tooling
_wb_
2021-04-15 01:18:49
Group size is limited to 1024x1024 so that kind of limits what you can do in a valid bitstream
veluca
2021-04-15 01:31:52
well, we could upsample it, I guess xD
_wb_
2021-04-15 01:37:09
Can also spent bits or use clever tricks to do multi-group jxl art without boundary issues
2021-04-15 07:47:07
data:image/jxl;base64,/wr6GOjgaCgmCGa/6BcBPIARAFwBAABAAAQAC4CjbVuVYsvIULAKAFEIv2JAFLEYRfEOYRxhfoAI qQEkn3W4b+piqIveY/kkD/3RLwdjfIAzC3y7o1EcCMmEF3p0TTmhiefnYhxhi+cHWiQzAGkgSTgA AwM=
2021-04-15 07:47:56
``` Bitdepth 10 Orientation 7 Width 2048 RCT 1 /* Chroma */ if c > 0 if c > 1 if g > 21 - Set -50 if x > 40 if W-WW > -1 - W -1 - W 0 - Set 300 if g > 21 if x > 0 - W - 2 - Set 1000 if x > 400 - W + 2 - Set -900 /* Luma */ if y > 80 /* Sky and mountains */ if g > 21 if x > 0 if WGH > 3 - AvgN+NW + 5 if NW-N > -500 - AvgN+NE - 5 - NW + 1 /* extend mountain */ /* init mountains */ if N > -6000 - N - 20 - Set -1000 /* Sea */ if x > 1015 - W -100 if WGH > 1 - AvgN+NW +2 - AvgN+NE -2 /* Randomness */ if W > -50 - Weighted -5 if g > 21 - Set 1400 - Set 500 ```
fab
2021-04-15 07:47:58
how to read those where you copy those codes
2021-04-15 07:48:04
base64 etc
_wb_
2021-04-15 07:48:22
Copy paste it into address bar of chrome canary
2021-04-15 07:49:25
"Tropical Island Sunset"
2021-04-15 07:49:29
fab
2021-04-15 07:51:40
add in sneyers info art
_wb_
2021-04-15 07:52:49
Yes, I will eventually add the nicest ones there
2021-04-15 07:53:03
Tired of sunsets now
raysar
_wb_
2021-04-15 08:32:25
crash on xnviewMP nomacs and imagemagick ^^
_wb_
2021-04-15 08:35:55
Probably the orientation bug
2021-04-15 08:36:20
Will fix itself once they sync to latest
Pieter
2021-04-16 12:14:46
How do you enable jxl on chromium canary?
2021-04-16 12:14:54
Or is it only in chrome?
2021-04-16 12:20:23
Ah, found the flags. The snap "edge" build of chromium 91 doesn't have it yet, apparently.
Scope
2021-04-16 12:30:21
https://discord.com/channels/794206087879852103/803574970180829194/830826479662530610
Petr
_wb_
2021-04-16 05:13:32
Wow, this is probably the best piece of jxl-art I've seen! This is what makes you famous. ๐Ÿ™‚ ๐Ÿ‘
_wb_
2021-04-16 02:06:07
Not very arty but just seeing what I can do on my phone:
2021-04-16 02:06:20
33 megapixel image
2021-04-16 02:07:07
data:image/jxl;base64,/wr6/+j/YSUSCAYBAPgAAABAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARA AARAAARAAAQASzhEnMMyvSSHiov5vzh+DQsA0sXcfy0eVCdY/iMggniY/T/RAPs/ohHmf6Ih/v9E YyAaZACABSAsAJAkHAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw==
2021-04-16 02:07:56
160 bytes, but looks like it would be less when gzipped/brotli'd
2021-04-16 02:10:45
0.000038 bits per pixel
2021-04-16 02:15:13
A low quality (-quality 30) jpeg version of this is 2 megabyte or 0.5 bpp
HellMood
_wb_ data:image/jxl;base64,/wr6GOjgaCgmCGa/6BcBPIARAFwBAABAAAQAC4CjbVuVYsvIULAKAFEIv2JAFLEYRfEOYRxhfoAI qQEkn3W4b+piqIveY/kkD/3RLwdjfIAzC3y7o1EcCMmEF3p0TTmhiefnYhxhi+cHWiQzAGkgSTgA AwM=
2021-04-16 04:12:22
how would i download this as JXL? The links seems messed up, what i get can't be opened with Squoosh for example
Pieter
HellMood how would i download this as JXL? The links seems messed up, what i get can't be opened with Squoosh for example
2021-04-16 04:13:21
2021-04-16 04:13:38
(i used the command-line `base64` tool)
HellMood
Pieter
2021-04-16 04:14:02
https://squoosh.app/editor isnt able to load that ๐Ÿ˜ฆ
spider-mario
2021-04-16 04:14:30
iirc, it needs an orientation fix that is in the internal jxl codebase
2021-04-16 04:14:38
should soon be reflected in the public repo
HellMood
2021-04-16 04:16:01
I'll wait then. I think that sunset image is another milestone in jxl art. Deserves spreading in demoscene~ish circles. But i want to give people something they can check themselves easily ๐Ÿ™‚
Pieter
2021-04-16 04:16:02
It works in `djxl`, but the orientation is wrong, and it fails to decode to png (it can decode to jpg).
Deleted User
2021-04-16 04:20:13
Works perfectly with Chrome Canary ๐Ÿ˜ƒ
HellMood
2021-04-16 04:20:37
Okay, shared the twitter post for that image ๐Ÿ˜„ I like how google reverse search is like "did you mean sunset", that's a compliment ๐Ÿ™‚
_wb_
2021-04-16 04:45:50
Orientation handling was buggy until recently, for a long time we never produced oriented images so the bug went unnoticed
2021-04-16 04:48:09
data:image/jxl;base64,/wr6X0GRCAYBAGABAABAAARAAARAAARAAARAAAuAEwxViFIjH9lELZ3Ufp4qDghEeo47DNXGDzXJP7UaI5Jt18/+KCPuG+gvG8HVsCb9g8N8MntOyShnZTPR+qMdvoeP7/pZhK7tX9T7g/28HnhlSxIO4AIDAwMDAwMDAwM=
2021-04-16 04:48:49
``` Bitdepth 10 Width 3072 Height 3072 Orientation 1 RCT 15 if c > 0 if c > 1 if g > 21 if g > 22 if g > 23 if g > 24 if g > 25 if g > 26 if g > 27 if g > 28 - Set -127 - Set 383 - Set -255 - Set -511 - Set 0 - Set 511 - Set 255 - Set -383 - Set 127 if y > 0 - N -1 - Set 511 if N > -500 if WGH > 10 if g > 21 if g > 22 if g > 23 if g > 24 if g > 25 if g > 26 if g > 27 if g > 28 - AvgN+NW -1 - AvgAll -2 - AvgW+N -2 - AvgN+NW -2 - AvgAll -1 - AvgW+NW -2 - AvgW+NW -1 - AvgW+N -1 - AvgN+NE -1 - Weighted -1 - Set 1500 ```
2021-04-16 04:49:24
"Flame generation study"
2021-04-16 04:49:30
2021-04-16 04:55:51
Or maybe again better oriented if I call it flames
2021-04-16 04:56:58
data:image/jxl;base64,/wr6X1FQTAgGAQBgAQAAQAAEQAAEQAAEQAAEQAALgBMMVYhSIx/ZRC2d1H6eKg4IRHqOOwzVxg81yT+1GiOSbdfP/igj7hvoLxvB1bAm/YPDfDJ7TskoZ2Uz0fqjHb6Hj+/6WYSu7V/U+4P9vB54ZUsSDuACAwMDAwMDAwMD
fab
2021-04-16 05:08:17
i'm converting to webp2
_wb_
2021-04-16 08:10:36
``` Bitdepth 10 Width 1024 Height 1024 Orientation 1 RCT 1 if c > 1 if x > 0 - W -1 - Set 511 if c > 0 if W > -1500 - Weighted -100 - Set 2500 if N > -800 if WGH > 10 - AvgW+N -2 - Weighted -1 - Set 1300 ```
2021-04-16 08:11:24
data:image/jxl;base64,/wr6H0GRCAYBAJAASzglcne/WQlSGiGB45+Fd7v+/qjdR/iIw8AQD0WoFW2QJBwA
2021-04-16 08:11:48
"Inside the Flying Spaghetti Monster"
2021-04-16 08:12:17