|
_wb_
|
2021-03-23 07:26:57
|
This channel is for artistic small jxl files. Please provide the .jxl and a png/jpg for convenience of viewing (since discord does not support jxl... yet).
|
|
2021-03-23 07:28:44
|
If it is a MA-tree-only image created with `jxl_from_tree`, please also share the tree.
|
|
2021-03-23 07:45:13
|
Has anyone tried the jxl_from_tree toy already?
|
|
|
Pieter
|
2021-03-23 07:49:10
|
If you write a https://github.com/sipa/gramtropy grammar for it, we could try randomly generating some of limited size.
|
|
2021-03-23 07:49:53
|
I'll try to find some time.
|
|
|
_wb_
|
2021-03-23 08:01:15
|
Not sure if the typical random tree does anything interesting
|
|
2021-03-23 08:01:32
|
But could generate a bunch of images and sort by png size
|
|
2021-03-23 08:02:09
|
Boring images are small pngs or very large ones (too noise-like to look nice)
|
|
|
Petr
|
2021-03-23 08:06:00
|
OK, I'll start with my first image in the allrgb.com fashion, but never published there. Created in 2014, converted today. I hope it meets the expectation. π
|
|
2021-03-23 08:06:04
|
|
|
|
_wb_
|
2021-03-23 08:11:04
|
Not bad
|
|
2021-03-23 08:12:53
|
But what about a tree-only version of an all-rgb image (or something close to it, the current jxl_from_tree produces only 1024x1024 images)
|
|
|
Petr
|
2021-03-23 08:26:00
|
If I wanted to study the MA-trees, where should I start? π
|
|
|
_wb_
|
2021-03-23 08:26:47
|
in `tools/example_tree.txt`
|
|
2021-03-23 08:26:59
|
|
|
2021-03-23 08:28:49
|
```
if y > 0
if x > 0
if c > 1
if N > 253
- Set 0
- N + 2
if c > 0
if W+N-NW > 253
- Set 0
- AvgW+N + 1
if W > 253
- Set 0
- W + 2
- Set 0
- Set 0
```
|
|
2021-03-23 08:28:57
|
|
|
2021-03-23 08:31:13
|
|
|
2021-03-23 08:31:18
|
```if c > 1
if N > 125
- Set 0
if W > 125
- Set 0
- AvgW+NW + 1
if y > 400
if N > 0
if WGH > 0
if N-NE > 0
- Set 0
- Set 128
if N-NE > 0
- Set 64
- Set 0
if NW-N > 0
if N-NE > -1
- Set 255
- Set 0
if N-NE > -1
- Set 0
- Set 255
if c > 0
if x > 0
if W > 253
- Set 0
if y > 100
if y > 270
- W + 1
if N > 252
- Set 0
- N + 3
- W + 1
- Set 0
if x > 511
- Set 200
- Set 0
```
|
|
2021-03-23 08:31:49
|
|
|
2021-03-23 08:47:31
|
|
|
2021-03-23 08:47:35
|
```if c > 1
if W > 10
- W - 1
- Set 200
if N > 224
- Set 32
if N > 16
if W > 224
- Set 32
if W > 16
- AvgAll + 1
if c > 0
- Set 192
- Set 180
- Set 192
```
|
|
2021-03-23 08:47:44
|
|
|
2021-03-23 09:37:11
|
|
|
2021-03-23 09:37:15
|
```if N > 224
- Set 32
if N > 16
if W > 224
- AvgW+N - 1
if W > 16
- AvgAll + 1
if c > 1
- Set 192
if c > 0
- AvgW+N + 0
- Set 230
- AvgW+N + 1
```
|
|
2021-03-23 09:37:25
|
|
|
|
Master Of Zen
|
2021-03-24 01:09:24
|
It reminds me of 64K demos
|
|
|
Scope
|
2021-03-24 02:00:18
|
64k is a very big for this, I think closer would be 32-256 bytes demos <https://youtu.be/O-WjF_dxdHM?t=1233>
<https://youtu.be/Imquk_3oFf4>
And for example 64k demos:
<https://youtu.be/QhqT0DhV9yE>
<https://youtu.be/UnjIMd3kVf4>
<https://youtu.be/JZ6ZzJeWgpY>
<https://youtu.be/MAnhcUNHRW0>
|
|
|
_wb_
|
2021-03-24 06:15:14
|
The main difference is that for a jxl 'demo', you don't get a compact Turing complete language (machine code) plus whatever platform-specific things that can be just used, but only a restricted, non-Turing complete language (a jxl bitstream).
|
|
|
Scope
|
2021-03-24 01:44:39
|
Yep, that's what I mean, for a demo in 64k this is not a challenge, where people make mini movies and possibilities are not so limited, usually kinds of effects and procedural generation are in competitions with a much smaller size
|
|
|
_wb_
|
2021-03-24 02:07:55
|
```#!/bin/bash
for i in $(seq -3 3); do
for j in $(seq -3 3); do
for k in $(seq -3 3); do
cat > jxlart-$i-$j-$k-tree.txt <<EOF
if W > 200
- Set 10
if W > 20
if WGH > -4
if WGH > 1
- AvgW+N $i
- AvgN+NW $j
- Select $k
if c > 1
- W + 100
if c > 0
- W + 110
- W + 120
EOF
./jxl_from_tree jxlart-$i-$j-$k-tree.txt jxlart-$i-$j-$k.jxl
djxl jxlart-$i-$j-$k.jxl jxlart-$i-$j-$k.png
done
done
done
```
|
|
2021-03-24 02:11:36
|
|
|
2021-03-24 02:11:48
|
|
|
2021-03-24 02:12:02
|
|
|
2021-03-24 02:12:25
|
|
|
2021-03-24 02:12:52
|
|
|
2021-03-24 02:13:49
|
|
|
2021-03-24 02:15:21
|
|
|
2021-03-24 02:17:28
|
|
|
2021-03-24 02:17:53
|
|
|
2021-03-24 02:18:41
|
|
|
2021-03-24 02:19:06
|
|
|
2021-03-24 02:20:34
|
|
|
2021-03-24 02:21:08
|
|
|
2021-03-24 02:21:54
|
|
|
2021-03-24 02:24:03
|
these are all 47-50 byte .jxl files made by the above script (same tree structure, just changing the offsets a bit)
|
|
|
Petr
|
2021-03-24 02:34:30
|
https://tenor.com/view/wow-phenomenal-amazing-great-gif-5981661
|
|
|
_wb_
|
2021-03-24 03:52:18
|
```
if W+N-NW > 130
- Set 0
if N-NE > 20
- Set 254
- W + 1
```
|
|
2021-03-24 03:53:02
|
"Infinite Aquaducts"
|
|
2021-03-24 03:53:10
|
|
|
2021-03-24 03:53:14
|
only 34 bytes
|
|
2021-03-24 03:53:22
|
|
|
|
fab
|
2021-03-24 03:54:25
|
impressive
|
|
|
_wb_
|
2021-03-24 04:26:02
|
```if y > 50
if N > 240
- Set 240
if N > 10
if N-NN > 0
- N + 1
if c > 1
- N - 2
- N - 1
- N + 1
if W > 240
- Set 240
if W > 10
if W-WW > 0
if c > 0
- W + 5
- W + 4
- W - 2
- W + 1
```
|
|
2021-03-24 04:26:13
|
|
|
2021-03-24 04:26:24
|
"Rainbow Plasma"
|
|
2021-03-24 04:26:33
|
|
|
|
Lastrosade
|
2021-03-24 04:31:40
|
This is like a cheap shader coding comp
|
|
2021-03-24 04:31:47
|
I love this
|
|
|
_wb_
|
2021-03-24 05:23:34
|
Anyone else been playing with the jxl_from_tree toy?
|
|
|
Petr
|
2021-03-24 06:19:06
|
This one is similar to some allrgb images. Beautiful!
|
|
|
_wb_
|
2021-03-24 08:54:25
|
```if y > 100
if N > 20
if x > 511
- AvgN+NW - 1
- AvgN+NE - 1
- Set 200
if W > 240
- Set 240
if W > 10
if W-WW > 0
if c > 0
if c > 1
- W + 3
- W + 5
- W + 4
- W - 2
- W + 1
```
|
|
2021-03-24 08:54:35
|
|
|
2021-03-24 08:54:44
|
|
|
|
Jim
|
2021-03-24 11:17:01
|
JXL live on stage
|
|
|
_wb_
|
2021-03-25 01:44:55
|
|
|
2021-03-25 01:45:17
|
```if N-NN > -1
if W > 250
- Set 250
if W > 2
if W-WW > -1
- AvgN+NE + 1
- W - 3
- Set 3
if N > 6
- AvgN+NW - 1
- Set 0
```
|
|
2021-03-25 01:45:26
|
|
|
2021-03-25 01:45:50
|
there's something satisfying about this one
|
|
2021-03-25 01:46:56
|
I can't put my finger on it but it feels like some kind of weird cave full of stalactites
|
|
|
|
Deleted User
|
2021-03-25 03:27:00
|
This one actually looks pretty natural-like
|
|
|
_wb_
|
2021-03-25 04:17:23
|
|
|
2021-03-25 04:17:34
|
```if c > 1
if N > 20
- N - 20
- Set 140
if N-NN > -1
if W > 220
- Set 220
if W > 2
if W-WW > -1
- AvgN+NE + 1
- W - 3
- Set 3
if N > 6
- AvgN+NW - 1
- Set 0
```
|
|
2021-03-25 04:17:39
|
A variation on the above
|
|
2021-03-25 04:17:48
|
|
|
2021-03-25 08:49:33
|
|
|
2021-03-25 08:49:37
|
```if y > 400
if N-NN > 0
- AvgAll + 0
if N > 20
- AvgN+NE - 1
- N + 150
if y > 0
if y > 200
if W > 50
- W - 2
if c > 0
if c > 1
- Set 232
- Set 214
- Set 250
if c > 0
- N - 1
- N + 1
if c > 0
if c > 1
- Set 250
- Set 200
- Set 0
```
|
|
2021-03-25 08:50:22
|
"Sunset over the strawberry fields, forever"
|
|
2021-03-25 08:50:31
|
|
|
|
Scope
|
2021-03-25 08:56:20
|
If this utility had been a little more user friendly, I think Fabian would have reached good results with it by changing a lot of random numbers
|
|
|
_wb_
|
2021-03-25 09:16:35
|
|
|
2021-03-25 09:16:46
|
```if y > 200
if WGH > -240
if WGH > 240
- AvgAll + 0
- Gradient + 0
if W > 120
- W - 110
- W + 110
if y > 20
if N-NN > 0
- AvgAll + 0
if N > 20
- AvgN+NE - 1
- N + 150
if W > 50
- W - 2
if c > 0
if c > 1
- Set 235
- Set 220
- Set 250
```
|
|
2021-03-25 09:16:59
|
|
|
|
|
veluca
|
|
_wb_
|
|
2021-03-25 10:07:50
|
weighted predictor shows its colors, huh? π
|
|
|
Scope
If this utility had been a little more user friendly, I think Fabian would have reached good results with it by changing a lot of random numbers
|
|
2021-03-25 10:08:11
|
what's not very user-friendly about it?
|
|
|
Scope
|
2021-03-25 10:14:42
|
For the casual user it is not very clear how to use this utility, what combinations and what are the limits of values, etc.
|
|
|
|
veluca
|
2021-03-25 11:01:07
|
what would make it clearer?
|
|
2021-03-25 11:01:57
|
about the combination, I'd say that finding out is kinda the point π about the limits - usually 0-255 but depending on the tree you make it might require less than that, I don't think anybody knows π
|
|
|
|
bobadingo
|
2021-03-26 06:28:44
|
I wonder would it be possible to crossbreed these images Puppy Farmer style? (http://www.pouet.net/prod.php?which=59302)
|
|
|
monad
|
2021-03-26 08:07:38
|
IDK what Puppy Farmer style implies, but you could technically swap nodes between trees. Doing it randomly wouldn't be very efficient because you're likely to produce unsupported structures.
|
|
|
_wb_
|
2021-03-26 10:08:18
|
|
|
2021-03-26 10:08:25
|
not really art, but maybe a useful test image
|
|
2021-03-26 10:08:29
|
```if c > 1
if y > 0
if y > 255
if y > 256
if y > 511
if y > 512
if y > 767
if y > 768
- N + 0
- N + 64
- N + 0
- N + 64
- N + 0
- N + 64
- N + 0
if x > 255
if x > 511
if x > 767
- Set 48
- Set 32
- Set 16
- Set 0
if c > 0
if y > 0
if N > 254
- Set 0
- N + 1
- Set 0
if x > 0
if W > 254
- Set 0
- W + 1
- Set 0
- Set 0
```
|
|
2021-03-26 10:08:39
|
|
|
|
spider-mario
|
2021-03-26 11:21:30
|
this looks like 3D LUT templates
|
|
|
|
bobadingo
|
2021-03-26 11:22:25
|
|
|
2021-03-26 11:22:29
|
```
if y > 915
if x > 940
if c > 1
- Set 0
- Set 255
if x > 900
- Set 0
if x > 250
- Set 255
if x > 220
- Set 0
if c > 1
- Set 255
- Set 0
if y > 865
if x > 900
- Set 0
if x > 250
- Set 255
if x > 220
- Set 0
if c > 1
- Set 255
- Set 0
if y > 765
if x > 940
- Set 255
if x > 900
- Set 0
if x > 250
- Set 255
if x > 220
- Set 0
if c > 1
- Set 255
- Set 0
if y > 730
- Set 0
if y > 365
if x > 250
if c > 0
- Set 0
- Set 255
if x > 220
- Set 0
- Set 255
if y > 305
if x > 250
if c > 0
- Set 0
- Set 255
- Set 0
if x > 250
if c > 0
- Set 0
- Set 255
if x > 220
- Set 0
- Set 255
```
|
|
2021-03-26 11:22:36
|
|
|
|
_wb_
|
2021-03-26 12:07:33
|
adding
```
if W > 100
- W - 5
```
at the top of the above
|
|
2021-03-26 12:07:44
|
|
|
2021-03-26 12:07:51
|
|
|
2021-03-26 10:52:19
|
|
|
2021-03-26 10:52:26
|
``` if y > 0
if N > 0
if NW-N > -1
if N-NE > 0
- Set 0
- Set 255
if N-NE > 0
if c > 0
- Set 255
- Set 0
- Set 0
if NW-N > 0
if N-NE > -1
- Set 255
- Set 0
if N-NE > -1
- Set 0
- Set 255
if c > 1
if x > 800
- Set 255
- Set 0
if x > 510
if x > 512
- Set 0
- Set 255
- Set 0
```
|
|
2021-03-26 10:52:39
|
|
|
2021-03-27 10:29:30
|
Ok this one is my favorite so far
|
|
2021-03-27 10:29:40
|
```if y > 0
if N > 0
if y > 600
if c > 1
if N > 30
- N - 10
- N - 1
if x > 511
- AvgN+NW + 0
- AvgN+NE + 0
if NW-N > -1
if N-NE > 0
- Set 0
- N + 0
if N-NE > 0
- N + 0
- Set 0
if NW-N > 0
if N-NE > -1
- NW + 0
- Set 0
if N-NE > -1
- Set 0
if c > 0
if c > 1
- Set 200
- Set 150
- Set 255
if x > 200
if x > 511
if x > 800
- Set 1
if c > 0
- Set 0
- Set 2
- Set 1
- Set 0
```
|
|
2021-03-27 10:30:37
|
|
|
|
|
Deleted User
|
2021-03-27 10:31:28
|
This gives some proper synthwave vibes, especially the lower half
|
|
|
_wb_
|
2021-03-27 10:33:11
|
This piece is called
"EEG at the base of Mount Sierpinski"
|
|
|
Lastrosade
|
2021-03-27 10:56:47
|
Is there a cheat sheet for this tool ?
|
|
|
_wb_
|
2021-03-27 10:59:26
|
tools/example_tree.txt is the cheat sheet
|
|
|
|
Deleted User
|
2021-03-27 11:00:23
|
How can I compile this thing?
```ziemekz@ZiemekLaptop:~/jpeg-xl$ gcc tools/jxl_from_tree.cc -o build/tools/jxl_from_tree
tools/jxl_from_tree.cc:21:10: fatal error: lib/jxl/base/file_io.h: No such file or directory
21 | #include "lib/jxl/base/file_io.h"
| ^~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.```
|
|
|
_wb_
|
2021-03-27 11:00:50
|
It should be compiled together with cjxl and djxl and all the rest
|
|
|
|
Deleted User
|
2021-03-27 11:01:07
|
```ziemekz@ZiemekLaptop:~/jpeg-xl/build/tools$ ls
CMakeFiles box djxl
CTestTestfile.cmake cjxl libcjxltool.a
Makefile cjxl_auto.sh libdjxltool.a
benchmark_xl cmake_install.cmake libjxl_tool.a```
|
|
|
Lastrosade
|
2021-03-27 11:01:20
|
yeah I already found this but idk what all of this means
```
List of properties: c, g, y, x, |N|, |W|, N, W, W-WW-NW+NWW, W+N-NW, W-NW, NW-N, N-NE, N-NN, W-WW, WGH
List of predictors: Set, W, N, AvgW+N, Select, Gradient, Weighted, NE, NW, WW, AvgW+NW, AvgN+NW, AvgN+NE, AvgAll
```
|
|
|
_wb_
|
2021-03-27 11:01:49
|
Just do the usual build process and you should find it in build/tools
|
|
2021-03-27 11:02:21
|
Ah yes what it means is not really documented anywhere except in the code and in the spec
|
|
2021-03-27 11:02:50
|
c is channel (0=R, 1=B, 2=B)
|
|
2021-03-27 11:03:02
|
g is not useful with this tool atm
|
|
|
|
Deleted User
|
|
_wb_
Just do the usual build process and you should find it in build/tools
|
|
2021-03-27 11:03:08
|
I did the same process as usual (the one from GitLab):
```git clone https://gitlab.com/wg1/jpeg-xl.git --recursive
cd jpeg-xl
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF ..
cmake --build . -- -j$(nproc)```
|
|
|
_wb_
|
2021-03-27 11:03:12
|
x and y are pixel coords
|
|
|
Lastrosade
|
|
I did the same process as usual (the one from GitLab):
```git clone https://gitlab.com/wg1/jpeg-xl.git --recursive
cd jpeg-xl
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF ..
cmake --build . -- -j$(nproc)```
|
|
2021-03-27 11:04:00
|
```
git clone https://gitlab.com/wg1/jpeg-xl.git --recursive
cd jpeg-xl
./deps.sh
./ci.sh release
```
|
|
|
_wb_
|
2021-03-27 11:04:41
|
N and W are the values of the pixel above (north) and to the left (west)
|
|
2021-03-27 11:05:21
|
You can only do tests of the form [property] > some_value
|
|
|
|
Deleted User
|
|
Lastrosade
```
git clone https://gitlab.com/wg1/jpeg-xl.git --recursive
cd jpeg-xl
./deps.sh
./ci.sh release
```
|
|
2021-03-27 11:05:53
|
Do I really need to do `./deps.sh` if I `git clone`'d that thing with `--recursive`?
|
|
|
Lastrosade
|
|
Do I really need to do `./deps.sh` if I `git clone`'d that thing with `--recursive`?
|
|
2021-03-27 11:06:07
|
idk I just do it
|
|
|
monad
|
|
|
Deleted User
|
|
Lastrosade
idk I just do it
|
|
2021-03-27 11:06:41
|
> Important: If you downloaded a zip file or tarball from the web interface you
> won't get the needed submodules and the code will not compile. You can download these external dependencies from source running `./deps.sh`.
|
|
|
Lastrosade
|
2021-03-27 11:07:11
|
I think I just cloned it without `--recursive`
|
|
|
monad
|
2021-03-27 11:07:22
|
also, you need to enable dev tools for jxl_from_tree
|
|
|
_wb_
|
2021-03-27 11:07:32
|
Decision nodes are of the form
```
if [property] > value
(THEN BRANCH)
(ELSE BRANCH)
```
|
|
2021-03-27 11:08:32
|
Leaf nodes are of the form
```
- [predictor] +-offset
```
|
|
|
Lastrosade
|
2021-03-27 11:09:48
|
What is the difference between `|N|` and `N` ?
|
|
|
fab
|
|
_wb_
|
|
2021-03-27 11:10:07
|
does it work with 0,3,6
|
|
|
Lastrosade
|
2021-03-27 11:11:27
|
also `WGH` ?
|
|
|
_wb_
|
2021-03-27 11:15:30
|
|N| is abs val of N, which in this case is not useful (it is useful for non-RGB / after RCT / squeeze residuals though)
|
|
|
Lastrosade
|
2021-03-27 11:15:37
|
and this monster `W-WW-NW+NWW`
|
|
2021-03-27 11:16:07
|
West-WestWest-NorthWest+NorthWestWest
|
|
|
_wb_
|
2021-03-27 11:16:44
|
WGH is the signed max-absval-error of the weighted predictor
|
|
|
Lastrosade
West-WestWest-NorthWest+NorthWestWest
|
|
2021-03-27 11:17:32
|
That's basically the error of the gradient predictor for the previous pixel
|
|
|
Lastrosade
|
2021-03-27 11:18:23
|
ok so to resume
List of properties: `c, g, y, x, |N|, |W|, N, W, W-WW-NW+NWW, W+N-NW, W-NW, NW-N, N-NE, N-NN, W-WW, WGH`
List of predictors: `Set, Select, Gradient, Weighted, W, N, NE, NW, WW, AvgW+N, AvgW+NW, AvgN+NW, AvgN+NE, AvgAll`
c is channel (0=R, 1=G, 2=B)
g is not useful with this tool atm
x and y are pixel coords
N and W are the values of the pixel above (north) and to the left (west)
|N| is abs val of N, which in this case is not useful (it is useful for non-RGB / after RCT / squeeze residuals though)
WGH is the signed max-absval-error of the weighted predictor
W-WW-NW+NWW is basically the error of the gradient predictor for the previous pixel
You can only do tests of the form `[property] > some_value`
Decision nodes are of the form
```
if [property] > value
(THEN BRANCH)
(ELSE BRANCH)
```
Leaf nodes are of the form
```
- [predictor] +-offset
```
|
|
2021-03-27 11:18:25
|
Thanks!
|
|
|
monad
|
2021-03-27 11:26:59
|
Wouldn't hurt to pin that for curious others.
|
|
|
_wb_
|
|
|
Deleted User
|
|
monad
also, you need to enable dev tools for jxl_from_tree
|
|
2021-03-27 11:31:15
|
How do I do that?
|
|
|
monad
|
2021-03-27 11:31:51
|
add `-DJPEGXL_ENABLE_DEVTOOLS=ON`
|
|
2021-03-27 11:33:07
|
At least, that's what got it to build in 0.3.5.
|
|
|
_wb_
|
2021-03-27 11:41:49
|
I usually build with `./ci.sh opt`
|
|
2021-03-27 11:42:15
|
I think that enables devtools by default, at least I don't think I had to do anything to enable it
|
|
|
monad
|
|
bobadingo
|
|
2021-03-27 12:09:43
|
```if x > 940
if y > 915
if c > 1 - Set 0
- Set 255
if y > 865 - Set 0
if y > 765 - Set 255
if y > 730 - Set 0
if c > 0 - Set 0
- Set 255
if x > 900
if y > 730 - Set 0
if c > 0 - Set 0
- Set 255
if x > 250
if y > 765 - Set 255
if y > 730 - Set 0
if c > 0 - Set 0
- Set 255
if x > 220 - Set 0
if y > 765
if c > 1 - Set 255
- Set 0
if y > 730 - Set 0
if y > 365 - Set 255
if y > 305 - Set 0
- Set 255```
|
|
2021-03-27 12:09:52
|
88 byte version
|
|
|
|
Deleted User
|
|
monad
add `-DJPEGXL_ENABLE_DEVTOOLS=ON`
|
|
2021-03-27 01:21:39
|
Thanks, it worked perfectly! π
|
|
|
|
bobadingo
|
|
monad
```if x > 940
if y > 915
if c > 1 - Set 0
- Set 255
if y > 865 - Set 0
if y > 765 - Set 255
if y > 730 - Set 0
if c > 0 - Set 0
- Set 255
if x > 900
if y > 730 - Set 0
if c > 0 - Set 0
- Set 255
if x > 250
if y > 765 - Set 255
if y > 730 - Set 0
if c > 0 - Set 0
- Set 255
if x > 220 - Set 0
if y > 765
if c > 1 - Set 255
- Set 0
if y > 730 - Set 0
if y > 365 - Set 255
if y > 305 - Set 0
- Set 255```
|
|
2021-03-27 01:33:55
|
Changing the main traversal direction from vertical to horizontal, good catch.
|
|
|
_wb_
|
2021-03-27 01:50:19
|
```
if y > 0
if N > 0
if y > 600
- AvgN+NE + 0
if NW-N > -1
if N-NE > 0
- Set 0
- N + 0
if N-NE > 0
- N + 0
- Set 0
if NW-N > 0
if N-NE > -1
- NW + 0
- Set 0
if N-NE > -1
- Set 0
if c > 0
if c > 1
- Set 255
- Set 180
- Set 255
if x > 600
- Set 0
if c > 1
- Set 220
- Set 255
```
|
|
|
Lastrosade
|
2021-03-27 01:50:30
|
ok I'm trying to get a hang of this but I feel so dumb, how would I make a gradient
|
|
2021-03-27 01:50:40
|
just a vertical one
|
|
|
_wb_
|
2021-03-27 01:50:56
|
"The Lighthouse of Mt. Sierpinski"
|
|
|
Lastrosade
|
|
_wb_
```
if y > 0
if N > 0
if y > 600
- AvgN+NE + 0
if NW-N > -1
if N-NE > 0
- Set 0
- N + 0
if N-NE > 0
- N + 0
- Set 0
if NW-N > 0
if N-NE > -1
- NW + 0
- Set 0
if N-NE > -1
- Set 0
if c > 0
if c > 1
- Set 255
- Set 180
- Set 255
if x > 600
- Set 0
if c > 1
- Set 220
- Set 255
```
|
|
2021-03-27 01:51:43
|
oh this is nice
|
|
|
|
Deleted User
|
|
_wb_
```
if y > 0
if N > 0
if y > 600
- AvgN+NE + 0
if NW-N > -1
if N-NE > 0
- Set 0
- N + 0
if N-NE > 0
- N + 0
- Set 0
if NW-N > 0
if N-NE > -1
- NW + 0
- Set 0
if N-NE > -1
- Set 0
if c > 0
if c > 1
- Set 255
- Set 180
- Set 255
if x > 600
- Set 0
if c > 1
- Set 220
- Set 255
```
|
|
2021-03-27 01:54:18
|
The bottom part inspired by my LSD dice, eh? π
|
|
|
_wb_
|
|
Lastrosade
|
2021-03-27 01:58:08
|
```
if c > 0
- Set y + 1
- Set 0
```
```
terminate called after throwing an instance of 'std::invalid_argument'
what(): stoi
Aborted (core dumped)
```
|
|
|
improver
|
2021-03-27 01:59:06
|
set only eats integers i guess
|
|
|
_wb_
|
|
Lastrosade
|
2021-03-27 01:59:24
|
in the example there is this
```
if W > 200
- Set 0
- AvgW+NW + 1
```
|
|
2021-03-27 01:59:30
|
omg
|
|
2021-03-27 01:59:33
|
nvm
|
|
|
_wb_
|
2021-03-27 01:59:53
|
It's a bit finicky and tricky
|
|
2021-03-27 02:00:06
|
Have to avoid out-of-range values and stuff
|
|
2021-03-27 02:01:10
|
`Set` is just a fun name for the zero predictor, and the + for positive offsets is optional
|
|
|
Lastrosade
|
2021-03-27 02:02:00
|
ok this compiles but I guess does nothing
```
if c > 1
if N > 255
- N + 1
- Set 0
- Set 0
```
|
|
|
_wb_
|
2021-03-27 02:02:19
|
That gives an instant out of range
|
|
|
Lastrosade
|
2021-03-27 02:02:20
|
oh wait yes it does
|
|
2021-03-27 02:02:26
|
|
|
2021-03-27 02:02:31
|
its a start
|
|
2021-03-27 02:03:15
|
with the last set as 200
|
|
|
_wb_
|
2021-03-27 02:03:25
|
It's a start, now turn it into art
|
|
|
|
veluca
|
2021-03-27 02:04:00
|
we should make some website where people can upload those π and maybe vote too
|
|
|
improver
|
2021-03-27 02:04:25
|
compile to webasm
|
|
|
_wb_
|
2021-03-27 02:05:42
|
Yes. At some point I will also want more features for jxl_from_tree, like multiple groups / adjustable group size / prevchannel properties / doing stuff in XYB / throwing a default squeeze or palette transform into the mix
|
|
|
Scope
|
2021-03-27 02:06:13
|
Something like this https://codepen.io/skal65535/project/full/ZwnQWM (but even better with an online encoder)
|
|
|
|
veluca
|
2021-03-27 02:09:01
|
or an RCT for that matter
|
|
2021-03-27 02:09:42
|
unfortunately my web devving is extremely out of date, I last did something web-based like 7 years ago xD
|
|
|
monad
|
|
bobadingo
Changing the main traversal direction from vertical to horizontal, good catch.
|
|
2021-03-27 02:22:11
|
Well, you can do 88 bytes "vertically" as well. And you can go smaller, I was just being lazy after trying the first one. (edit: got it down just 77 bytes just now)
|
|
|
_wb_
|
2021-03-27 02:22:29
|
Oh and choosing the bit depth would also be nice. 10-bit allows slower gradients, and less than 8-bit allows smaller files because the constants in the tree get shorter
|
|
2021-03-27 02:25:27
|
Anyway even just what is there currently is far from well-explored. It is a big space, and nobody really knows what gems are hidden in it.
|
|
|
Lastrosade
|
2021-03-27 02:29:12
|
I can't decode this one
|
|
|
monad
|
2021-03-27 02:29:31
|
What was the input?
|
|
2021-03-27 02:29:42
|
There are plenty of ways to make invalid input.
|
|
|
Lastrosade
|
2021-03-27 02:29:44
|
```
if c > 0
- Set 0
if c > 1
if x > 200
if y > 200
- Set 200
- Set 0
- Set 0
- Set 200
```
|
|
2021-03-27 02:29:56
|
I feel like I am mentally regressing when using this tool
|
|
|
monad
|
2021-03-27 02:30:06
|
third line
|
|
|
Lastrosade
|
2021-03-27 02:30:25
|
`if c > 1` ?
|
|
2021-03-27 02:30:28
|
if green ?
|
|
|
monad
|
2021-03-27 02:30:59
|
that's the 'else' after checking if c > 0
|
|
|
Lastrosade
|
2021-03-27 02:31:22
|
so uhhh, if red set 0 then if green do stuff
|
|
|
monad
|
2021-03-27 02:32:35
|
looks like you're trying to do stuff on the blue channel rather
|
|
|
Lastrosade
|
2021-03-27 02:33:09
|
I am so confused
|
|
|
monad
|
2021-03-27 02:33:42
|
well, just move line two to the end for now
|
|
2021-03-27 02:33:48
|
then you'll at least have output
|
|
|
Lastrosade
|
2021-03-27 02:34:48
|
oohhhh
|
|
2021-03-27 02:34:51
|
i'm dumb
|
|
2021-03-27 02:34:56
|
omg
|
|
2021-03-27 02:34:57
|
thanks
|
|
2021-03-27 02:35:08
|
for real
|
|
2021-03-27 02:35:54
|
I can do assembly, I was paid to work on old computers to reverse engineer old programs, but this is my limit
|
|
2021-03-27 02:36:02
|
a 2d shader esolang toy
|
|
|
|
Deleted User
|
2021-03-27 02:42:09
|
This is a true masterpiece. Decode it yourself, it's a surprise.
```if y > 825
if x > 525
- Set 255
if x > 500
- Set 0
- Set 255
if y > 800
if x > 845
- Set 255
if x > 655
- Set 0
if x > 525
- Set 255
if x > 500
- Set 0
if x > 345
- Set 255
if x > 320
- Set 0
if x > 180
- Set 255
if x > 155
- Set 0
- Set 255
if y > 525
if x > 680
- Set 255
if x > 655
- Set 0
if x > 525
- Set 255
if x > 500
- Set 0
if x > 345
- Set 255
if x > 320
- Set 0
if x > 180
- Set 255
if x > 155
- Set 0
- Set 255
if y > 500
- Set 0
if y > 185
if x > 845
- Set 255
if x > 820
- Set 0
if x > 680
- Set 255
if x > 655
- Set 0
if x > 525
- Set 255
if x > 500
- Set 0
if x > 180
- Set 255
if x > 155
- Set 0
- Set 255
if x > 525
- Set 255
if x > 500
- Set 0
- Set 255```
|
|
|
Lastrosade
|
2021-03-27 02:44:21
|
I knew it
|
|
|
monad
|
2021-03-27 02:44:51
|
good meme
|
|
|
_wb_
|
2021-03-27 03:08:01
|
I don't know that meme
|
|
|
monad
|
2021-03-27 03:08:15
|
your loss
|
|
|
_wb_
|
2021-03-27 03:08:30
|
|
|
2021-03-27 08:22:37
|
```
if y > 0
if N > 1
if y > 511
- AvgN+NE - 1
if NW-N > -1
if N-NE > 0
- Set 0
- N + 0
if N-NE > 0
- Set 0
- N + 0
if NW-N > 0
if N-NE > -1
if NW-N > 2
- NW - 3
- NW - 1
- Set 0
if N-NE > -1
- Set 0
if c > 0
if c > 1
- Set 250
- Set 240
- Set 255
if x > 511
if x > 512
- Set 0
- Set 255
- Set 0
```
|
|
2021-03-27 08:23:09
|
67 bytes
|
|
2021-03-27 08:23:46
|
"The Sierpinski Instability"
|
|
2021-03-27 08:25:38
|
|
|
|
|
veluca
|
2021-03-27 08:27:17
|
now do that without the `y > 511` π
|
|
2021-03-27 08:27:28
|
(I don't think you can)
|
|
|
_wb_
|
2021-03-27 08:37:33
|
|
|
2021-03-27 08:37:47
|
Then you get something like that
|
|
|
|
Deleted User
|
|
veluca
now do that without the `y > 511` π
|
|
2021-03-27 09:09:48
|
Does JXL support layers that are larger than the image canvas?
|
|
|
_wb_
|
|
|
Deleted User
|
2021-03-27 09:10:39
|
So you could just crop the image without affecting the file size?
|
|
|
_wb_
|
2021-03-27 09:11:18
|
Yes, well it would add maybe 4 bytes to signal that there's a crop
|
|
|
|
veluca
|
|
_wb_
Then you get something like that
|
|
2021-03-27 09:23:40
|
I mean get the same image but without "cheating" and changing trees midway π
|
|
|
_wb_
|
2021-03-27 09:27:20
|
Oh
|
|
2021-03-27 09:30:33
|
It might be possible, for now I am basically just doing an effectively binary cellular automaton and then switch at row 512, but there must be automata with more values that do cooler stuff (without having to use x/y)
|
|
2021-03-28 10:20:42
|
'Ever Given'
2021, Jon Sneyers, image/jxl, 85 bytes
|
|
2021-03-28 10:21:20
|
```
if c > 1
if y > 0
if N > 50
if N > 180
- Set 180
if N-NN > 0
- N + 6
- N - 6
- Set 51
if W > 50
if W > 180
- Set 180
if W-WW > 0
- W + 3
- W - 3
- Set 51
if x > 300
if x > 700
- Set 220
if y > 200
if y > 800
- N + 0
if x > 301
- NW + 0
if y > 400
- Set 50
if c > 0
- Set 180
- Set 30
- Set 50
- Set 220
```
|
|
2021-03-28 10:21:27
|
|
|
|
Master Of Zen
|
|
_wb_
'Ever Given'
2021, Jon Sneyers, image/jxl, 85 bytes
|
|
2021-03-28 10:32:38
|
Can we also have this channel blocked until evergreen is removed? <:whatisthis:672847617796997165>
|
|
|
Jim
|
2021-03-28 11:41:18
|
Ever Given
|
|
|
lithium
|
2021-03-28 01:32:06
|
what organization need take on responsible for evergreen stuck?
|
|
|
Pieter
|
2021-03-28 07:03:38
|
<@794205442175402004> Is there documentation for the jxl-from-tree file format somewhere?
|
|
|
_wb_
|
2021-03-28 07:04:22
|
The pinned message here is the best documentation for now :)
|
|
|
|
veluca
|
2021-03-28 07:05:12
|
(if someone feels like writing something in more detail, I'm not going to stop them... :P)
|
|
|
Pieter
|
2021-03-28 07:07:52
|
How do the image dimensions get decided?
|
|
2021-03-28 07:11:31
|
Ah, fixed 1024x1024 ?
|
|
|
|
veluca
|
2021-03-28 07:11:58
|
yep, at least for now
|
|
|
Pieter
|
2021-03-28 07:12:56
|
What are Set and Select?
|
|
2021-03-28 07:13:09
|
Set is setting it to a constant, I assume?
|
|
|
|
veluca
|
2021-03-28 07:13:15
|
yes
|
|
2021-03-28 07:13:37
|
Select is I think Top or Left depending on some condition I don't fully recall
|
|
|
_wb_
|
2021-03-28 07:33:07
|
Decision nodes are of the form:
if [property] > [value:int]
(THEN BRANCH)
(ELSE BRANCH)
Leaf nodes are of the form;
- [predictor] +-[offset:int]
List of properties:
- c: the channel number (0=R, 1=G, 2=B)
- g: group id, not useful (jxl_from_tree makes a single-group image)
- x, y: coordinates
- |N|, |W| : not useful (only useful after transforms)
- N: pixel above (north)
- W: pixel to the left (west)
- W-WW-NW+NWW: basically the error of the gradient predictor for the pixel on the left
- W+N-NW: value of gradient predictor (before clamping)
- W-NW: left minus topleft, i.e. error of the N predictor for the pixel on the left
- NW-N: topleft minus top, i.e. error of W predictor for the pixel above
- N-NE: top minus topright, i.e. error of W predictor for pixel on top right
- N-NN: top minus toptop, i.e. error of N predictor for pixel above
- W-WW: left minus leftleft, i.e. error of W predictor for the pixel on the left
- WGH: signed max-absval-error of the weighted predictor
List of predictors:
- Set: always predicts zero, so effectively sets the pixel value to [offset]
- W: value of pixel on the left
- N: value of pixel above
- NW: value of topleft pixel
- NE: value of topright pixel
- WW: value of pixel to the left of the pixel on the left
- Select: predictor from lossless WebP
- Gradient: W+N-NW, clamped to min(W,N)..max(W,N)
- Weighted: weighted sum of 4 self-correcting subpredictors based on their past performance (warning: not clamped so can get out of range)
- AvgW+N, AvgW+NW, AvgN+NW, AvgN+NE: average of two pixel values
- AvgAll: weighted sum of various pixels: `(6 * top - 2 * toptop + 7 * left + 1 * leftleft + 1 * toprightright + 3 * topright + 8) / 16`
Edge cases:
If x=y=0, W is set to 0. Otherwise, if x=0, W is set to N.
If y=0, N is set to W.
If x=0 or y=0, NW is set to W.
Similarly, NE and NN fall back to N and WW falls back to W.
|
|
2021-03-28 07:33:18
|
|
|
|
Pieter
Ah, fixed 1024x1024 ?
|
|
2021-03-28 07:38:20
|
1024x1024 is the largest group size for modular, so it is a natural choice. Groups share the tree (but the tree can take group id into account), but they do not look at each other (so can be decoded in parallel), so predictors and properties get their edge cases on the group edges, not only on the image edges.
|
|
|
surma
|
2021-03-28 11:08:59
|
```
if N > 0
- Set 0
- Set 255
```
|
|
2021-03-28 11:09:05
|
Why does this generate a checkerboard?
|
|
2021-03-28 11:09:13
|
Iβd have expected alternating lines
|
|
2021-03-28 11:14:01
|
nvm, just saw the edge case
|
|
2021-03-28 11:14:07
|
> If y=0, N is set to W.
|
|
2021-03-28 11:29:57
|
Okay fine Iβll admit this is _really_ fun
|
|
|
_wb_
|
|
surma
nvm, just saw the edge case
|
|
2021-03-29 05:49:45
|
Yes, the edge cases can really influence the whole image. Easiest way to get rid of them is start with `if x > 0 if y > 0`
|
|
|
Jyrki Alakuijala
|
2021-03-29 08:45:46
|
we can make this twice as much fun by adding the LZ77 -- that would allow 'surgical' insertions of pixels into or creating patterns through a combo of LZ77 and contexts
|
|
2021-03-29 08:46:04
|
and triple as much fun by building this with the palette coding
|
|
2021-03-29 08:46:50
|
We can predict (delta) palette codes through context trees by basing the decisions of the palette index by surrounding palette indices
|
|
2021-03-29 08:47:44
|
this means that it gives a cross-color-channel context and prediction, and we can even have the same color on different indices contributing to different contexts
|
|
2021-03-29 08:49:08
|
I believe it allows things like creating arbitrary sprite graphics, fonts, etc. -- only limited by the maximum palette size (IIRC, 32k colors)
|
|
2021-03-29 08:49:49
|
and from there we can make it four times as much fun by using patches on top of all of this, where the patches file is also synthesized by all these methods
|
|
2021-03-29 08:50:56
|
and finally five times as much fun by composing the image of multiple layers each alpha blended with a (low-frequency coded) mask
|
|
2021-03-29 08:52:26
|
...
|
|
2021-03-29 08:53:39
|
I think the actually useful way to build practical low-bpp images would include color quantization and then building state machines with contexts and replicated pixels in the palette
|
|
|
|
veluca
|
|
Jyrki Alakuijala
I believe it allows things like creating arbitrary sprite graphics, fonts, etc. -- only limited by the maximum palette size (IIRC, 32k colors)
|
|
2021-03-29 09:15:05
|
there is no real limit on palette size π
|
|
2021-03-29 09:16:50
|
but adding a palette might be a lot more complex than it is worth - likely better use of our time to add color transforms, squeeze, and especially previous-channel-properties (which also allow doing fun things with colours)
|
|
2021-03-29 09:17:00
|
LZ77 is also probably a bit more complex...
|
|
|
Jyrki Alakuijala
|
2021-03-29 09:24:02
|
the palette is also coded as an jxl image and can have contexts π ?
|
|
|
superogue
|
|
Scope
64k is a very big for this, I think closer would be 32-256 bytes demos <https://youtu.be/O-WjF_dxdHM?t=1233>
<https://youtu.be/Imquk_3oFf4>
And for example 64k demos:
<https://youtu.be/QhqT0DhV9yE>
<https://youtu.be/UnjIMd3kVf4>
<https://youtu.be/JZ6ZzJeWgpY>
<https://youtu.be/MAnhcUNHRW0>
|
|
2021-03-29 09:24:04
|
i recently made a 32 byte intro -> https://www.pouet.net/prod.php?which=88205
|
|
2021-03-29 09:24:23
|
so a person from the sizecoding community i'm interested to learn more
|
|
2021-03-29 09:25:32
|
For those interested, here are more 128/256 byte intros by myself and my girlfriend (DOS mostly and a few TIC80)
|
|
2021-03-29 09:25:33
|
https://www.pouet.net/groups.php?which=14389
|
|
2021-03-29 09:25:59
|
i'm interested to know if i can do a calculation for a SET command
|
|
|
|
veluca
|
|
Jyrki Alakuijala
the palette is also coded as an jxl image and can have contexts π ?
|
|
2021-03-29 09:26:11
|
yep - but it might be nontrivial to specify how to define it π
|
|
|
superogue
i'm interested to know if i can do a calculation for a SET command
|
|
2021-03-29 09:26:36
|
not for SET, you can just do constants with that. but you can do 'W+1' or things like that
|
|
|
superogue
|
2021-03-29 09:27:21
|
i cannot set a variable correct?
|
|
|
|
veluca
|
2021-03-29 09:27:36
|
nope, no variables
|
|
|
Jyrki Alakuijala
|
|
veluca
yep - but it might be nontrivial to specify how to define it π
|
|
2021-03-29 09:28:26
|
does the palette have to be a one dimensional image (like I did in WebP lossless) -- or is it allowed to be two dimensional?
|
|
|
|
veluca
|
2021-03-29 09:29:32
|
pretty sure it's one-dimensional
|
|
|
superogue
|
2021-03-29 09:31:40
|
``` Set y + 1``` -> is there anywhere i can read up on how much this logic can be stretched? say set x^y for example or x*y
|
|
|
monad
|
2021-03-29 09:32:25
|
you can only add or subtract
|
|
2021-03-29 09:32:31
|
read the pin
|
|
|
superogue
|
2021-03-29 09:32:46
|
sh*t, its going to be hard to do non-sirpinksi like stuff π
|
|
|
monad
|
2021-03-29 09:32:46
|
and y is not a predictor
|
|
|
_wb_
|
|
Jyrki Alakuijala
does the palette have to be a one dimensional image (like I did in WebP lossless) -- or is it allowed to be two dimensional?
|
|
2021-03-29 09:50:07
|
the palette is a nb_colors x nb_channels image, e.g. 100x3 for an RGB palette - but you can also do RGBA palettes, or a CMYKOGV+alpha+depth+temperature palette for that matter, which would be 10 rows high π
|
|
2021-03-29 09:55:06
|
the math you can do is quite limited, but I think there might be ways to get further by using prev-channel properties and/or multi-layer images, which would allow you to use layers as "scratch space" for calculations, and then with blending you can do multiplications and other kinds of less trivial things
|
|
|
superogue
|
2021-03-29 10:13:17
|
really shame no calculations for SET are possible, but i wss thinking along these lines as wel;l by possible storing sinustables with different phases in layers and doing an animated plasma effect
|
|
2021-03-29 10:13:40
|
(it was the only thing i could think of with my limited knowledge of JXL)
|
|
|
_wb_
|
2021-03-29 10:15:00
|
Animation could also be nice, yes. Sadly trees cannot be shared between frames, but if the tree is small enough, it may be ok to re-encode it per frame
|
|
2021-03-29 10:15:34
|
or could also do a hidden huge layer that contains all the frames, and then use Patches to blit parts of it to each frame
|
|
|
superogue
|
2021-03-29 10:16:20
|
I see <@!436097739391107072> jumped onto the server as well, lets see if he can think of a way of doing interesting stuff
|
|
|
_wb_
|
2021-03-29 10:16:51
|
`jxl_from_tree` only gives a small sandbox playground of a single-group 1024x1024 image without any transforms
|
|
2021-03-29 10:17:14
|
a lot more would be possible in a 256-byte jxl bitstream
|
|
|
HellMood
|
2021-03-29 11:02:24
|
Yep, i was curious when i saw some sierpinski in just a few bytes. For Msdos, sierpinski would be 10 bytes, and the dragon fractal 16 bytes (see for example here : https://www.pouet.net/prod.php?which=68474 ) I'm just wondering if the "instruction set" is not too limited for demoish effects π
|
|
2021-03-29 11:04:28
|
Whoops sorry, the sierpinski isn't in there -> https://codegolf.stackexchange.com/questions/6281/draw-a-sierpinski-triangle/95479#95479
|
|
|
_wb_
|
2021-03-29 11:05:15
|
it's certainly a very different "instruction set" compared to the more usual ones
|
|
2021-03-29 11:07:15
|
math is restricted, and there's no looping, just the implicit looping over the image
|
|
2021-03-29 11:08:08
|
but when also using transforms like Squeeze, interesting things can likely be done
|
|
2021-03-29 11:10:12
|
(Squeeze is a modified Haar transform that turns an image into a pyramid, encoding a 'zoomed out' image first, and residuals later - doing cellular automata on that would likely allow interesting fractals)
|
|
|
HellMood
|
2021-03-29 11:22:22
|
How would i go on and create code for this? Is there an online playground to test out things?
|
|
|
Lastrosade
|
2021-03-29 11:24:43
|
```
if x > 1
if W > 254
- Set 200
- W + 1
- Set 0
```
Aha! I did it! a gradient, I have no idea of what going on on the right tho
|
|
|
_wb_
|
|
HellMood
How would i go on and create code for this? Is there an online playground to test out things?
|
|
2021-03-29 11:26:35
|
Online playground: no, unless someone with more frontend skills than me can make an emscripten build of jxl_from_tree and put it online somewhere
|
|
|
HellMood
|
|
_wb_
Online playground: no, unless someone with more frontend skills than me can make an emscripten build of jxl_from_tree and put it online somewhere
|
|
2021-03-29 11:27:08
|
But how do people do it right now?
|
|
|
_wb_
|
2021-03-29 11:27:32
|
Compile and run jxl_from_tree
|
|
2021-03-29 11:32:06
|
```
git clone https://gitlab.com/wg1/jpeg-xl.git --recursive
cd jpeg-xl
./ci.sh opt
cd build/tools
./jxl_from_tree ../../tools/example_tree.txt example.jxl
./djxl example.jxl example.png
```
|
|
2021-03-29 11:32:38
|
Something like that should work (going by memory so there might be a typo here or there)
|
|
|
Scope
|
2021-03-29 11:35:41
|
Compiled version for Windows
|
|
|
_wb_
|
|
Lastrosade
```
if x > 1
if W > 254
- Set 200
- W + 1
- Set 0
```
Aha! I did it! a gradient, I have no idea of what going on on the right tho
|
|
2021-03-29 11:37:42
|
After doing the 0 to 255 gradient, it keeps going from 200 to 255
|
|
|
Lastrosade
|
|
_wb_
|
2021-03-29 11:40:42
|
```
if x > 1
if W > 0
if W > 254
- Set 255
if W-WW > 0
- W + 1
- W - 1
- Set 1
- Set 0
```
|
|
2021-03-29 11:40:48
|
Try something like that
|
|
|
Lastrosade
|
2021-03-29 11:41:23
|
neat
|
|
2021-03-29 11:42:21
|
`if W-WW > 0` that's if W > WW ?
|
|
|
_wb_
|
|
Lastrosade
|
2021-03-29 11:42:48
|
ok cause you describe it as `left minus leftleft, i.e. error of W predictor for the pixel on the left`
|
|
2021-03-29 11:43:08
|
on the left, simple easy explanation, on the right confusing
|
|
|
_wb_
|
2021-03-29 11:43:49
|
Yes, the "i.e." part is probably more confusing than helpful
|
|
|
Lastrosade
|
2021-03-29 11:45:22
|
Just to check, is this right ?
```
if c > 1
bluestuff
if c > 0
greenstuff
redstuff
```
|
|
|
_wb_
|
|
_wb_
'Ever Given'
2021, Jon Sneyers, image/jxl, 85 bytes
|
|
2021-03-29 11:47:02
|
The 'waves' in the B channel are just a vertical oscillating gradient, initialized with a horizontal oscillating gradient.
|
|
|
Lastrosade
Just to check, is this right ?
```
if c > 1
bluestuff
if c > 0
greenstuff
redstuff
```
|
|
2021-03-29 11:47:30
|
Yes
|
|
2021-03-29 11:48:52
|
I sometimes write it as
```
if c > 0
if c > 1
bluestuff
greenstuff
redstuff
```
|
|
|
Lastrosade
|
2021-03-29 11:49:10
|
oh nice
|
|
2021-03-29 11:49:15
|
ok
|
|
|
_wb_
|
2021-03-29 11:49:46
|
The tool doesn't care about indentation or whitespace in general
|
|
|
Lastrosade
|
2021-03-29 11:52:40
|
<:hypers:714771549374251039>
|
|
|
_wb_
|
2021-03-29 12:00:03
|
If you vary the gradient range or speed per channel, it also gives a fun effect since they don't stay in sync then
|
|
|
|
bobadingo
|
|
_wb_
```
git clone https://gitlab.com/wg1/jpeg-xl.git --recursive
cd jpeg-xl
./ci.sh opt
cd build/tools
./jxl_from_tree ../../tools/example_tree.txt example.jxl
./djxl example.jxl example.png
```
|
|
2021-03-29 12:23:47
|
I run it through this Makefile:
```
watch:
while inotifywait -e close_write source.txt; do make build; done
build: source.txt
clear
jxl_from_tree source.txt source.jxl
djxl source.jxl output.png
```
Then I open VSCode, `source.txt` to the left pane, `output.png` to right pane and I have live preview
|
|
|
_wb_
|
2021-03-29 12:30:39
|
Nice!
|
|
2021-03-29 12:30:59
|
Do not forget to share examples if you find a nice tree!
|
|
2021-03-29 12:31:09
|
https://c.tenor.com/I_-KjeRZFggAAAAM/flowers-tree.gif
|
|
|
spider-mario
|
|
bobadingo
I run it through this Makefile:
```
watch:
while inotifywait -e close_write source.txt; do make build; done
build: source.txt
clear
jxl_from_tree source.txt source.jxl
djxl source.jxl output.png
```
Then I open VSCode, `source.txt` to the left pane, `output.png` to right pane and I have live preview
|
|
2021-03-29 01:35:01
|
you could likely also use https://github.com/gittup/tup with a Tupfile like this:
```
: source.txt |> jxl_from_tree %f %o |> source.jxl
: source.jxl |> djxl %f %o |> output.png
```
and then `tup monitor -a -f`
|
|
2021-03-29 02:02:05
|
can also make it work for all .txt in the directory with:
```
: foreach *.txt |> jxl_from_tree %f %o |> %B.jxl {jxls}
: foreach {jxls} |> djxl %f %o |> %B.png
```
|
|
|
HellMood
|
2021-03-29 02:15:28
|
```if y > 768
if c > 1
- N - 1
if c > 0
- Set 0
- N + 1
if y > 513
if c > 1
- N + 1
if c > 0
- N - 1
- Set 0
if y > 258
if c > 1
- Set 0
if c > 0
- Set 255
- N - 1
if y > 3
if c > 1
- Set 0
if c > 0
- N + 1
- Set 255
if c > 0
- Set 0
- Set 255```
Hard to get something going in this language, but here is at least a rainbow in under 64 bytes π I guess the bands are somewhat wrong so i need a small fifth to start with red...
|
|
|
Lastrosade
|
2021-03-29 02:15:49
|
omfg I've been trying to do this for hours
|
|
|
HellMood
|
2021-03-29 02:18:09
|
<@!794205442175402004> thanks for the guide, i built from source (the win7 binary was reported as a virus π ) It doesn't finish to 100% but the build is complete enough to use the tools π
|
|
|
_wb_
|
2021-03-29 03:35:15
|
```
if W > 0
if W > 250
- W - 200
if W-WW > 0
if c > 0
if c > 1
- W + 5
- W + 2
- W + 3
- W - 1
- W + 10
```
|
|
2021-03-29 03:35:26
|
|
|
2021-03-29 03:35:57
|
"African Textile"
|
|
2021-03-29 03:36:05
|
|
|
2021-03-29 04:08:20
|
Here is a variant that makes kind of interesting wavy patterns as you go towards the right
|
|
2021-03-29 04:08:23
|
```
if W > 2
if W > 250
- Set 1
if W-WW > 0
if c > 0
if c > 1
- W + 5
- W + 2
- W + 3
- W - 3
- AvgW+NW + 40
```
|
|
2021-03-29 04:08:33
|
|
|
|
surma
|
2021-03-29 04:12:57
|
Okay, I did a small hack
|
|
2021-03-29 04:12:58
|
https://jxl-art.surma.technology/
|
|
2021-03-29 04:13:21
|
Definitely planning on improving the UX. Iβll probably be able to OSS this in the next week or so and then contributions would be very welcome
|
|
2021-03-29 04:13:32
|
but I thought it might be nicer to not have to rely on the CLI and stuff
|
|
2021-03-29 04:13:44
|
works offline and 100% in the browser π
|
|
|
_wb_
|
2021-03-29 04:16:51
|
Good news everybody! <@!179701849576833024> made an encoder improvement that will trim ~5 bytes off of all of the above π
|
|
|
surma
https://jxl-art.surma.technology/
|
|
2021-03-29 04:17:35
|
Nice!
|
|
2021-03-29 04:17:55
|
We are making good progress in improving the productivity of our procrastination!
|
|
|
surma
|
2021-03-29 04:22:02
|
(Also added a link with βdocumentationβ. Will improve all of that later, but itβs good enough for now :3)
|
|
|
Scope
|
2021-03-29 04:22:42
|
```if W > 0
if W > 250
- W - 170
if W-WW > 0
if c > 0
if c > 1
- W + 2
- W + 2
- W + 7
- W - 1
- W + 40```
|
|
|
monad
|
2021-03-29 04:28:35
|
that last band though
|
|
|
|
veluca
|
|
surma
https://jxl-art.surma.technology/
|
|
2021-03-29 04:41:10
|
think you could make a version of that that has a "gallery" of submissions? π and maybe also an upvote button...
|
|
|
surma
|
2021-03-29 04:43:25
|
<@!179701849576833024> Thatβd require a server side
|
|
2021-03-29 04:43:52
|
also, then we have to think about abuse and stuff. Like, what if people spam-submit JXL art that is just a swastika or genitals or other offensive stuff
|
|
|
|
veluca
|
2021-03-29 04:49:41
|
the server side is less of a problem... the abuse, ugh
|
|
|
_wb_
|
2021-03-29 05:00:54
|
Abuse is annoying. Guess could require google account?
|
|
2021-03-29 05:04:58
|
A static gallery where you can click to copy the tree to make it a starting point for experimentation would already be cool
|
|
|
surma
|
2021-03-29 05:05:40
|
I could at least make it that you can create a sharable link with a specific piece of code preset
|
|
2021-03-29 05:05:57
|
(Currently fleshing out the docs a bit :3)
|
|
|
Scope
|
2021-03-29 05:13:29
|
```if y > 2
if N > 240
- Set 240
if N > 10
if N-NN > 0
- N + 3
if c > 1
- N - 5
- N - 2
- N + 1
if W > 240
- Set 240
if W > 10
if W-WW > 0
if c > 0
- W + 2
- W + 4
- W - 2
- W + 1```
|
|
|
_wb_
|
2021-03-29 05:27:47
|
I wonder to what extent this is just a toy, and to what extent it may actually have practical uses. E.g. for a game that ships a jxl decoder anyway for game graphics, maybe these could be a cheap source of extra textures...
|
|
2021-03-29 05:29:23
|
Or maybe it could be used as a kind of grain synthesis
|
|
|
HellMood
|
2021-03-29 05:32:39
|
i remember coding stuff like this as a kid, but with more options π <@!794205442175402004> how exactly would i use the "squeeze" operator?
```if c > 0
if N > 5
if W > 5
- AvgAll - 1
- W + 200
- N + 200
- Set 0```
|
|
|
_wb_
|
2021-03-29 05:34:42
|
Squeeze is currently not supported by jxl_from_tree, it would need to be implemented in a different way to make that work
|
|
2021-03-29 05:38:53
|
<@179701849576833024> to make global transforms work, it would have to write a Modular image, then undo transforms to get the original image, but also remember the transforms and pass them to enc_modular (or skip the original image completely and somehow directly feed a modular image to the encoder)
|
|
|
|
veluca
|
2021-03-29 05:40:00
|
yup, and then you'd get different channels...
|
|
|
surma
|
2021-03-29 05:40:38
|
Okay, I added a share button
https://jxl-art.surma.technology/
|
|
2021-03-29 05:41:06
|
But also, I wrote a bit more on the βhelpβ page. <@!179701849576833024> <@!794205442175402004> Iβd appreciate a fact-check if you ever get a sec
https://jxl-art.surma.technology/wtf.html
|
|
|
Scope
|
2021-03-29 05:42:05
|
It would also be nice to be able to save the resulting jxl file
|
|
|
HellMood
|
|
surma
Okay, I added a share button
https://jxl-art.surma.technology/
|
|
2021-03-29 05:42:36
|
Very nice, it's very convenient already π . Maybe the image is a *tad* to big.
|
|
|
_wb_
|
|
veluca
yup, and then you'd get different channels...
|
|
2021-03-29 05:42:42
|
Yes, squeeze residuals are many channels to play with. Also RGBA would be easier that way, could also be fun...
|
|
|
surma
|
2021-03-29 05:42:43
|
<@!111445179587624960> omg I planned to add that and completely forgot about it. hang on
|
|
2021-03-29 05:42:53
|
<@!436097739391107072> Itβs 1:1 π original size
|
|
2021-03-29 05:43:11
|
I do wanna add a pinch-zoom, but havenβt really found an easy way
|
|
2021-03-29 05:43:14
|
will do all that a bit later
|
|
|
HellMood
|
|
surma
<@!436097739391107072> Itβs 1:1 π original size
|
|
2021-03-29 05:43:50
|
Fair enough π Still feels huge even in 1440p resolution π
|
|
|
surma
|
2021-03-29 05:45:20
|
You are definitely right ;)
|
|
2021-03-29 05:46:04
|
But I spent a total of ... 40 minutes on this? And most of it went to debugging the C++ tokenizer until I realized I was overthinking it ππ
|
|
|
|
veluca
|
2021-03-29 05:46:36
|
can we add printing the error message from the parser if parsing fails? π
|
|
|
surma
|
2021-03-29 05:46:55
|
<@179701849576833024> yeah wanna do that. It should be visible in the DevTools console
|
|
2021-03-29 05:47:12
|
Just need to rewrite your parser to put those errors somewhere i can grab ^^
|
|
|
|
veluca
|
2021-03-29 05:48:19
|
ah, right, 'cause that's stderr
|
|
2021-03-29 05:48:30
|
you can probably just redefine JXL_FAILURE π
|
|
2021-03-29 05:48:58
|
also, some errors cause bigger failures, i.e.
```
if N > 200
- Set 0
- N + a
```
- result is always-grayed-out "Run"
|
|
|
HellMood
|
2021-03-29 05:53:19
|
I have a few of these "grayed-out runs", too π¦
|
|
|
surma
|
2021-03-29 06:05:13
|
I'll take a look at that later!
|
|
2021-03-29 06:05:31
|
(i guess it's really prudent I get this OSS'd lol)
|
|
|
HellMood
|
2021-03-29 06:06:10
|
```if N > 20
if W > 20
if NW-N > 0
- AvgAll - 1
- N - 3
- W + 180
- N + 180```
π€
|
|
|
_wb_
|
2021-03-29 06:07:30
|
https://jxl-art.surma.technology/?code=CmlmIGMgPiAwCmlmIE4gPiAyNQppZiBXID4gMjUKLSBXZWlnaHRlZCAtIDEKLSBXICsgMTgwCi0gTiArIDE4Ci0gU2V0IDA%3D
|
|
2021-03-29 06:09:01
|
That N + 18 was an accidental backspace that made it a lot better, lol
|
|
|
Scope
|
2021-03-29 06:09:34
|
Also, no one has yet made a JXL logo in an interesting art way <:Thonk:805904896879493180>
|
|
|
HellMood
|
2021-03-29 06:13:32
|
I figured that any picture can be transformed into that tree, but that wouldn't be fun, would it π
|
|
|
|
lvandeve
|
2021-03-29 06:24:10
|
```
if c > 1
if N > 20
if W > 10
- AvgW+NW - 1
- W + 100
- N + 150
if c > 0
if N > 30
if W > 17
- AvgN+NW - 1
- W + 200
- N + 200
if N > 10
if W > 8
- AvgN+NE - 1
- W + 100
- N + 200
```
|
|
2021-03-29 06:24:21
|
|
|
|
HellMood
|
2021-03-29 06:53:07
|
using <@!111445179587624960> trick to invert direction to generate some other colors, but hmm ... i feel a bit too much restricted here π
``` if W > 254
- Set 254
if W > 2
if W-WW > 0
if c > 0
if c > 1
- W + 2
- W + 1
- W + 1
if c > 0
if c > 1
- W - 1
- W - 1
- W - 2
- W + 1```
|
|
|
_wb_
|
2021-03-29 06:53:48
|
https://jxl-art.surma.technology/?code=CmlmIE4gPiAyNQppZiBXID4gNTAKLSBXZWlnaHRlZCAtIDIKaWYgYyA%2BIDAKaWYgYyA%2BIDEKLSBXICsgMTU1Ci0gVyArIDEwMAotIFcgKyAxNjAKLSBXZWlnaHRlZCArIDE%3D
|
|
|
|
lvandeve
|
2021-03-29 06:53:48
|
```
if c > 1
if N > 10
if W+N-NW > 10
- AvgW+NW - 1
- Gradient + 100
- N + 100
if c > 0
if W+N-NW > 10
if W > 10
- AvgW+NW - 1
- W + 100
- Gradient + 100
if N > 10
if W > 10
- AvgN+NW - 1
- W + 100
- N + 100
```
|
|
2021-03-29 06:53:57
|
|
|
|
_wb_
|
2021-03-29 06:54:19
|
```
if N > 25
if W > 50
- Weighted - 2
if c > 0
if c > 1
- W + 155
- W + 100
- W + 160
- Weighted + 1
```
|
|
2021-03-29 06:55:26
|
Hm, a way to share the image easily would be nice
|
|
2021-03-29 06:56:19
|
Weighted predictor is by far the most chaotic one
|
|
|
lvandeve
|
|
2021-03-29 06:58:07
|
Looks like a robotic lizard's scales
|
|
|
Scope
|
|
_wb_
https://jxl-art.surma.technology/?code=CmlmIE4gPiAyNQppZiBXID4gNTAKLSBXZWlnaHRlZCAtIDIKaWYgYyA%2BIDAKaWYgYyA%2BIDEKLSBXICsgMTU1Ci0gVyArIDEwMAotIFcgKyAxNjAKLSBXZWlnaHRlZCArIDE%3D
|
|
2021-03-29 07:03:33
|
https://jxl-art.surma.technology/?code=aWYgTiA%2BIDEwCmlmIFcgPiA1MAotIFdlaWdodGVkIC0gMgppZiBjID4gMAppZiBjID4gMQotIFcgKyAxNTUKLSBXICsgMTQwCi0gVyArIDE2MAotIFdlaWdodGVkICsgNA%3D%3D
|
|
|
|
lvandeve
|
|
_wb_
Weighted predictor is by far the most chaotic one
|
|
2021-03-29 07:04:57
|
but can go out of range, is there a good way to avoid out of ranges, even with random-ish pixel inputs to it?
|
|
2021-03-29 07:05:59
|
the predictors that have a matching property seem to be N, W and Gradient in some form, so for those you can use protective ifs
|
|
|
_wb_
|
2021-03-29 07:06:34
|
Checking for neighbors to be between 50 and 200 or something generally helps to avoid Weighted going out of range
|
|
|
|
lvandeve
|
2021-03-29 07:07:44
|
is there any way out of ranges could be allowed rather than give error?
|
|
|
_wb_
|
2021-03-29 07:07:49
|
But with a different implementation of jxl_from_tree, you could just let it go out of range, modular can do out of range values and the decoder will clamp
|
|
2021-03-29 07:09:06
|
It can currently not be allowed because jxl_from_tree does not hook into the modular image directly, it goes through the normal encode path, only using the fixed tree hook
|
|
|
Scope
https://jxl-art.surma.technology/?code=aWYgTiA%2BIDEwCmlmIFcgPiA1MAotIFdlaWdodGVkIC0gMgppZiBjID4gMAppZiBjID4gMQotIFcgKyAxNTUKLSBXICsgMTQwCi0gVyArIDE2MAotIFdlaWdodGVkICsgNA%3D%3D
|
|
2021-03-29 07:13:05
|
The discord preview does not do justice to the actual image...
|
|
|
Scope
|
2021-03-29 07:13:59
|
Yep, but a full image is fine
|
|
|
_wb_
|
2021-03-29 07:14:22
|
<@228116142185512960> feature request: show jxl filesize
|
|
|
Scope
|
|
Scope
https://jxl-art.surma.technology/?code=aWYgTiA%2BIDEwCmlmIFcgPiA1MAotIFdlaWdodGVkIC0gMgppZiBjID4gMAppZiBjID4gMQotIFcgKyAxNTUKLSBXICsgMTQwCi0gVyArIDE2MAotIFdlaWdodGVkICsgNA%3D%3D
|
|
2021-03-29 07:24:29
|
https://jxl-art.surma.technology/?code=aWYgTiA%2BIDYKaWYgVyA%2BIDU1Ci0gV2VpZ2h0ZWQgLSAyCmlmIGMgPiAwCmlmIGMgPiAxCi0gVyArIDE2MAotIFcgKyAxNjAKLSBXICsgMTYwCi0gV2VpZ2h0ZWQgKyAx
|
|
|
_wb_
|
2021-03-29 07:36:49
|
That looks vaguely like a zoomed in fingerprint
|
|
2021-03-29 08:24:16
|
https://jxl-art.surma.technology/?code=CmlmIGMgPiAxCmlmIE4gPiAyNQppZiBXID4gMjUKLSBXZWlnaHRlZCAtIDEKLSBXICsgMTgwCi0gTiArIDE4CmlmIFcgPiA4CmlmIFcgPiAxMDAKaWYgVyA%2BIDIwMAotIFcgLSAxNQotIEF2Z04rTlcgLSAzCi0gQXZnTitOVyAtIDEKLSBTZXQgMjU1
|
|
2021-03-29 08:24:29
|
```
if c > 1
if N > 25
if W > 25
- Weighted - 1
- W + 180
- N + 18
if W > 8
if W > 100
if W > 200
- W - 15
- AvgN+NW - 3
- AvgN+NW - 1
- Set 255
```
|
|
|
HellMood
|
2021-03-29 08:33:17
|
neat π also cool that i can Check that out right from the sofa now π₯³
|
|
|
_wb_
|
2021-03-29 09:18:45
|
|
|
2021-03-29 09:18:57
|
|
|
|
surma
|
2021-03-29 09:32:33
|
Got back to working on this. Pushed a few quick things because <@!794205442175402004> tweeted about it. So it now shows the file sizes, the perma-disabled βrunβ button is fixed and you can download .jxl and .png π
|
|
|
|
lvandeve
|
2021-03-29 09:35:55
|
|
|
2021-03-29 09:36:06
|
https://jxl-art.surma.technology/?code=aWYgYyA%2BIDEKCmlmIE4gPiAxMAppZiBXID4gMTAKLSBBdmdOK05XIC0gMQotIFcgKyAxMDAKLSBOICsgMTAwCgppZiBjID4gMAoKaWYgTiA%2BIDEwCmlmIFcgPiAxMAotIEF2Z1crTlcgLSAxCi0gVyArIDEwMAotIE4gKyAxMDAKCmlmIE4gPiAxMAppZiBXID4gMTAKLSBBdmdOK05XIC0gMQotIFcgKyA5OQotIE4gKyAxMDA%3D
|
|
|
HellMood
|
2021-03-29 09:50:03
|
I crossposted the new web playground in our size coding communities. I hope it gains some momentum π
|
|
|
|
veluca
|
2021-03-29 09:54:29
|
link? π
|
|
|
HellMood
|
2021-03-29 09:55:59
|
https://www.pouet.net/topic.php?which=12091&page=1#c568691
|
|
2021-03-29 09:56:10
|
https://discord.com/channels/534447164043165696/534447164043165700/826211354510753813
|
|
2021-03-29 09:56:23
|
https://discord.com/channels/787349849808699433/787349849808699436/826211083928862742
|
|
|
|
veluca
|
2021-03-29 09:56:42
|
(those discord links don't work for me)
|
|
|
HellMood
|
2021-03-29 09:57:08
|
Sizecoding invite : https://discord.gg/aSa9xRGR
|
|
2021-03-29 09:58:18
|
Demoscene discord : https://discord.gg/cMv5YUHr
|
|
2021-03-29 09:59:22
|
Having an online interface is *much* more attractive than anything else π
|
|
|
_wb_
|
2021-03-30 05:15:39
|
I never really was in the demoscene, but I was at Wired'98 and I have very good memories of that.
|
|
2021-03-30 05:21:53
|
I was a sysop of a BBS and of course intros and demos were a big thing - and the tracking scene. MP3 didn't exist yet, video codecs were not yet practical, so demos and mods were the only way to share digital audiovisual art.
|
|
|
monad
|
2021-03-30 10:14:51
|
|
|
2021-03-30 10:14:56
|
|
|
2021-03-30 10:15:00
|
|
|
|
_wb_
|
2021-03-30 10:15:40
|
lol that filename
|
|
2021-03-30 10:16:03
|
it looks great
|
|
2021-03-30 10:16:11
|
it's a bit fat, at 214 bytes
|
|
|
monad
|
2021-03-30 10:16:17
|
yep
|
|
2021-03-30 10:16:24
|
lots of little details
|
|
2021-03-30 10:16:36
|
for no reason
|
|
2021-03-30 10:16:52
|
could probably be optimized too
|
|
|
_wb_
|
2021-03-30 10:17:18
|
|
|
2021-03-30 10:17:36
|
new version on dev repo reliably shaves off 4-5 bytes π
|
|
2021-03-30 10:18:26
|
it's a nice composition though
|
|
|
monad
|
2021-03-30 10:18:36
|
thanks
|
|
|
_wb_
|
2021-03-30 10:19:37
|
I particularly like the red in the top right quadrant
|
|
2021-03-30 10:21:23
|
looks like a regular pattern until it collides with the right border and then like a particle accelerator it scatters
|
|
2021-03-30 10:22:20
|
the triangles in different orientations are also nice
|
|
|
HellMood
|
2021-03-30 10:27:23
|
I like the bottom left, it looks 3D-ish with a bit of shading. Sierpinski again, yes, but a good one π
|
|
|
_wb_
|
2021-03-30 10:31:35
|
yes, that part is neat too
|
|
2021-03-30 10:32:13
|
oh lol I hadn't seen the .txt yet
|
|
2021-03-30 10:34:23
|
|
|
2021-03-30 10:34:34
|
that's meta-art
|
|
|
HellMood
|
2021-03-30 11:51:36
|
|
|
2021-03-30 11:51:51
|
175b, sorry if someone has done that before π
|
|
|
|
veluca
|
2021-03-30 11:53:39
|
so one thing that is possible in the bitstream but I didn't wire up in the tree program is to add an extra invisible first channel, and then reference it from other channels... I suspect that it can help creating interesting things π
|
|
|
surma
|
2021-03-30 12:04:50
|
New release!
https://jxl-art.surma.technology/
|
|
2021-03-30 12:05:30
|
- Smaller image that can be zoomed using pinch-zoom gesture/mouse wheel
- UI face lift
- Smaller payload overall (combined everything into one wasm module)
|
|
2021-03-30 12:06:22
|
Also question for the JXL artists in here: If you zoom into an image, do you want:
|
|
2021-03-30 12:06:29
|
a.) Pixelated zooming
|
|
2021-03-30 12:06:43
|
b.) smoothed zooming (~bilinear filtering)
|
|
2021-03-30 12:06:50
|
Vote with thumbs up reaction!
|
|
|
monad
|
|
HellMood
|
|
2021-03-30 12:53:54
|
114 B, and made the squares even
|
|
|
HellMood
|
2021-03-30 12:55:01
|
Just as a proof of concept that *any* image can be done in JXL_Tree π
|
|
|
_wb_
|
|
HellMood
175b, sorry if someone has done that before π
|
|
2021-03-30 12:55:04
|
this one could be made more compact if the tool would let you choose image dimensions and group dimensions. Now it sets group dimension to max (1024x1024) and image dimensions to 1 group, but you could do this one with default group size (256x256) and just have the same simple image in every group
|
|
|
HellMood
|
2021-03-30 12:56:11
|
It's not small either. Just a statement, that *technically* JXL_Tree is unlimited π
|
|
|
_wb_
|
2021-03-30 12:57:39
|
haha well it also is unlimited without any tree π
|
|
|
HellMood
|
2021-03-30 12:58:09
|
Right, i fixed that π
|
|
|
Scope
|
|
HellMood
|
2021-03-30 01:01:21
|
Is that a real compressed Einstein? I wouldnt know before chrome/gimp supports that π
|
|
|
Scope
|
2021-03-30 01:02:18
|
Yep, just checking what the size would be for normal encoding
|
|
2021-03-30 01:04:40
|
<https://squoosh.app/> can also be used for viewing only
|
|
|
HellMood
|
|
Scope
<https://squoosh.app/> can also be used for viewing only
|
|
2021-03-30 01:06:29
|
Ha, neat π
|
|
2021-03-30 01:10:32
|
Well, the huge Einstein one just uses "if" and "Set", and it's a reminder (for myself at least) that there is no limit, i quickly did that in python :
```python
from PIL import Image
im = Image.open('onestone.png')
pix = im.load()
s = ""
dim = 256
for x in range(0,dim-1):
s = s + "if x > "+ str(x*4) + "\n"
for x in range(0,dim):
for y in range(0,dim-1):
s = s + "if y > "+ str(y*4) + "\n"
for y in range(0,dim):
s = s + "- Set " +str(pix[x,255-y]*255) + "\n"
text_file = open("onestone.txt", "w")
text_file.write(s)
text_file.close()```
|
|
2021-03-30 01:16:39
|
Secretly i hoped that the tree compressor will chop a lot of that away (also using just two different colors to help with that), but it didn't. Anyway i wonder how the classic CA and gradient stuff can be combined with explicitly setting image content for results with more freedom π
|
|
|
_wb_
|
|
surma
New release!
https://jxl-art.surma.technology/
|
|
2021-03-30 01:27:04
|
Neat! UI is starting to look fancy π also the intro text in help/wtf is nice
|
|
|
HellMood
Secretly i hoped that the tree compressor will chop a lot of that away (also using just two different colors to help with that), but it didn't. Anyway i wonder how the classic CA and gradient stuff can be combined with explicitly setting image content for results with more freedom π
|
|
2021-03-30 01:29:04
|
Currently no attempt is made to simplify trees β normally they wouldn't be hand-written, but they would get learned from the image data by an algorithm that wouldn't introduce redundant branches in the first place
|
|
|
Scope
|
2021-03-30 02:05:47
|
I wonder what can be done with splines (when they will be supported in the encoder) and how costly they are π€
|
|
|
_wb_
|
2021-03-30 02:23:44
|
|
|
2021-03-30 02:24:13
|
|
|
2021-03-30 02:25:20
|
|
|
2021-03-30 02:25:34
|
|
|
2021-03-30 02:25:44
|
that's all there is to know about splines π
|
|
|
lithium
|
2021-03-30 02:29:07
|
splines feature is implement in jpeg xl 0.3.7?
|
|
|
_wb_
|
2021-03-30 02:30:56
|
the decode side of this has been there since at least 0.1
|
|
2021-03-30 02:31:17
|
the encode side I don't expect anytime soon
|
|
2021-03-30 02:31:29
|
but you could do it manually
|
|
2021-03-30 02:32:15
|
it is not that cheap though
|
|
2021-03-30 02:33:18
|
that's `5*4*32` bits to describe the spline color and thickness
|
|
|
lithium
|
2021-03-30 02:41:57
|
look like splines feature is very suitable some non-photographic image,
I still wait jpeg xl implement some vardct improvement π
(reverse the order of dct size selection to merge instead of split)
|
|
|
surma
|
2021-03-30 03:37:42
|
Another mini update for https://jxl-art.surma.technology/
- Nearest-Neighbor zooming instead of bilinear (thanks for voting!)
- Prettier button to auto-format your code
- Better error reporting (not just βparsing failedβ)
- Share button behaves and auto-copies the URL to clipboard
|
|
|
_wb_
|
2021-03-30 04:36:32
|
Ooh auto-format, that is convenient!
|
|
|
|
lvandeve
|
2021-03-30 04:38:14
|
|
|
2021-03-30 04:38:33
|
https://jxl-art.surma.technology/?code=aWYgYyA%2BIDEKCmlmIE4gPiAxMAppZiBXID4gMTAKLSBBdmdOK05XIC0gMTAKLSBXICsgMjI1Ci0gTiArIDIyNQoKaWYgYyA%2BIDAKCmlmIE4gPiAxMQppZiBXID4gMTEKLSBBdmdOK05XIC0gMTEKLSBXICsgMjI1Ci0gTiArIDIyNQoKaWYgTiA%2BIDEyCmlmIFcgPiAxMgotIEF2Z04rTlcgLSAxMgotIFcgKyAyMjUKLSBOICsgMjI1
|
|
|
Scope
|
|
surma
Another mini update for https://jxl-art.surma.technology/
- Nearest-Neighbor zooming instead of bilinear (thanks for voting!)
- Prettier button to auto-format your code
- Better error reporting (not just βparsing failedβ)
- Share button behaves and auto-copies the URL to clipboard
|
|
2021-03-30 04:41:48
|
It would also be convenient to name the images automatically based on the hash (maybe even in human-readable words like Twitch does, for example: `SplendidRealCatThisIsSparta--9qJDd0tgrUQvvG7`)
|
|
|
Crixis
|
2021-03-30 04:50:27
|
https://jxl-art.surma.technology/?code=aWYgYyA%2BIC0xCiAgaWYgYyA%2BIDAKICAgIGlmIGMgPiAxCiAgICAgIC0gU2V0IDAKICAgICAgaWYgeSA%2BIDUwNAogICAgICAgIGlmIHkgPiA3NjIKICAgICAgICAgIGlmIHkgPiA4OTMKICAgICAgICAgICAgaWYgeSA%2BIDk1OAogICAgICAgICAgICAgIGlmIHkgPiA5OTEKICAgICAgICAgICAgICAgIC0gU2V0IDI1NQogICAgICAgICAgICAgICAgLSBTZXQgMAogICAgICAgICAgICAgIC0gU2V0IDI1NQogICAgICAgICAgICAtIFNldCAwCiAgICAgICAgICAtIFNldCAyNTUKICAgICAgICAtIFNldCAwCiAgICBpZiB4ID4gNTA0CiAgICAgIGlmIHggPiA3NjIKICAgICAgICBpZiB4ID4gODkzCiAgICAgICAgICBpZiB4ID4gOTU4CiAgICAgICAgICAgIGlmIHggPiA5OTEKICAgICAgICAgICAgICAtIFNldCAyNTUKICAgICAgICAgICAgICAtIFNldCAwCiAgICAgICAgICAgIC0gU2V0IDI1NQogICAgICAgICAgLSBTZXQgMAogICAgICAgIC0gU2V0IDI1NQogICAgICAtIFNldCAwCiAgaWYgeSA%2BIDUwNAogICAgaWYgeSA%2BIDc2MgogICAgICBpZiB5ID4gODkzCiAgICAgICAgaWYgeSA%2BIDk1OAogICAgICAgICAgaWYgeSA%2BIDk5MQogICAgICAgICAgICAtIFNldCAyNTUKICAgICAgICAgICAgLSBTZXQgMAogICAgICAgICAgLSBTZXQgMjU1CiAgICAgICAgLSBTZXQgMAogICAgICAtIFNldCAyNTUKICAgIC0gU2V0IDAKLSBTZXQgMjU1
|
|
2021-03-30 04:50:55
|
|
|
|
surma
|
2021-03-30 04:58:53
|
<@!111445179587624960> The noise at the end is the actual code. Youβd need to represent the user code with that human-readable format
|
|