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

benchmarks

lonjil
2024-03-07 12:37:44
one time I used an implementation of NIST's recommended randomness tester, on a 1GiB randomly generated file
2024-03-07 12:38:05
OOM-killer saved me after it ate up all my 80 GiB of swap
afed
2024-03-07 12:38:23
btw, it's still <#803645746661425173>
CrushedAsian255
2024-03-07 12:38:26
lol
Quackdoc
2024-03-07 12:38:31
ill run `paru -Syu` and it saves me a lot
CrushedAsian255
2024-03-07 12:38:43
does mac have an oom killer?
lonjil
2024-03-07 12:38:57
i have no idea
2024-03-07 12:39:04
probably not?
CrushedAsian255
2024-03-07 12:39:34
what happens when oom then? i usually have enough swap
lonjil
2024-03-07 12:40:10
linux is like the only OS on which asking the OS for RAM never returns an error, so it needs a way to recover from overcommitment gone wrong
Traneptora
CrushedAsian255 `DeBrujinSequence[2,1000000000]`
2024-03-07 12:40:46
this is one of those times when `Alt + .` comes in handy
2024-03-07 12:41:04
tells the MathKernel to abort the operation
lonjil
2024-03-07 12:41:31
on other OSs, applications may choose to abort if malloc returns an error, or they may choose to try to turn off safely if possible
CrushedAsian255
2024-03-07 12:42:30
like what happens if i run this ```cpp int main() { char* array[1024]; // lazy allocation for (int x = 0; x < 1024; x++) { array[x] = (char*) malloc(10000000000); // 10GB } for (int x = 0; x < 1024; x++) { for(int y = 0; y < 10000000000; y++) { array[x][y] = 69; } } } ```
Traneptora
2024-03-07 12:42:45
for example, if allocations fail in mpv, it just aborts
2024-03-07 12:42:58
since the assumptions are that a video player can't operate under conditions of low memory
CrushedAsian255
Traneptora since the assumptions are that a video player can't operate under conditions of low memory
2024-03-07 12:43:18
and aborting wouldn't break something too badly
Traneptora
2024-03-07 12:43:23
in ffmpeg it returns ENOMEM and it's up to the caller what they want to do about it
lonjil
CrushedAsian255 like what happens if i run this ```cpp int main() { char* array[1024]; // lazy allocation for (int x = 0; x < 1024; x++) { array[x] = (char*) malloc(10000000000); // 10GB } for (int x = 0; x < 1024; x++) { for(int y = 0; y < 10000000000; y++) { array[x][y] = 69; } } } ```
2024-03-07 12:43:41
probably segfault or something when you try to use the null pointer returned from malloc
CrushedAsian255
lonjil probably segfault or something when you try to use the null pointer returned from malloc
2024-03-07 12:44:01
no but it doesn't actually allocate the 10GB, it's like a Sparse file
lonjil
2024-03-07 12:44:14
btw, returning to the earlier topic, for some reason I find this so funny a thing to read about a desktop-sized system: > 1024-bit octa-channel LPDDR5-6400
CrushedAsian255 no but it doesn't actually allocate the 10GB, it's like a Sparse file
2024-03-07 12:44:32
on Linux, yes. Not necessarily on other OSs.
Traneptora
CrushedAsian255 like what happens if i run this ```cpp int main() { char* array[1024]; // lazy allocation for (int x = 0; x < 1024; x++) { array[x] = (char*) malloc(10000000000); // 10GB } for (int x = 0; x < 1024; x++) { for(int y = 0; y < 10000000000; y++) { array[x][y] = 69; } } } ```
2024-03-07 12:44:48
it's likely the compiler will optimize the second loop to a memset but regardless of that, malloc returns NULL on allocation failure, and attempting to dereference NULL will segfault your process
CrushedAsian255
lonjil on Linux, yes. Not necessarily on other OSs.
2024-03-07 12:45:04
mac it does as well
Traneptora
2024-03-07 12:45:07
as bob beck once put it, "if you try to `strdup(NULL)` it goes BANG!"
lonjil
2024-03-07 12:45:20
even if it's sparse, there isn't necessarily overcommit
CrushedAsian255
2024-03-07 12:45:34
hang on lemme test
afed
afed btw, it's still <#803645746661425173>
2024-03-07 12:45:58
some offtopic is fine, but it's too much, would be harder to find some old comparisons and etc
CrushedAsian255
2024-03-07 12:46:12
let's move to <#806898911091753051> then
lonjil
2024-03-07 12:46:44
for posterity, convo continued here: https://discord.com/channels/794206087879852103/806898911091753051/1215098216454955122
monad
2024-03-07 12:04:12
For the love of Jon.
fab
2024-03-07 01:33:26
2024-03-07 01:33:35
New compression results
_wb_
monad For the love of Jon.
2024-03-07 04:04:02
interesting to see that breakdown by category β€” so it's mostly pixel art, text, icons/ui stuff where webp is still doing great and jxl is lagging behind... If you could send me a set of originals, I may want to take a look at some point at trying to improve some heuristics
yoochan
monad For the love of Jon.
2024-03-07 05:04:36
Amazing! Do you classify manually?
fab
_wb_ interesting to see that breakdown by category β€” so it's mostly pixel art, text, icons/ui stuff where webp is still doing great and jxl is lagging behind... If you could send me a set of originals, I may want to take a look at some point at trying to improve some heuristics
2024-03-07 05:24:53
HDblog uses jpg
2024-03-07 05:25:26
Webp is used for exp photos in the 100 kb - 200 kv range
monad
yoochan Amazing! Do you classify manually?
2024-03-07 07:29:28
Yes, it is based on my judgement. I tag based on the primary composition of the image, but can also add tags for deviations, i.e. a screenshot of a video frame is film, one with some playback ui overlaid is film-ui. You could say all game screens are ui, but I didn't because it's very different content than typical app/web ui.
yoochan
2024-03-07 08:03:39
Amazing
jonnyawsom3
2024-03-08 12:52:37
``` wintime -- cjxl --disable_output -d 0 -e 1 OpenTTD.png JPEG XL encoder v0.10.1 5f67ebc [AVX2,SSE2] Encoding [Modular, lossless, effort: 1] Compressed to 784618.7 kB (5.195 bpp). 49121 x 24598, 153.367 MP/s [153.37, 153.37], 1 reps, 16 threads. PageFaultCount: 2810494 PeakWorkingSetSize: 6.833 GiB QuotaPeakPagedPoolUsage: 35.24 KiB QuotaPeakNonPagedPoolUsage: 67.06 KiB PeakPagefileUsage: 11.01 GiB Creation time 2024/03/08 00:44:28.366 Exit time 2024/03/08 00:44:46.819 Wall time: 0 days, 00:00:18.453 (18.45 seconds) User time: 0 days, 00:00:03.609 (3.61 seconds) Kernel time: 0 days, 00:00:49.609 (49.61 seconds) ``` An 80 MB, 8bit (Stored as 24bit) PNG. I'm surprised it used so much memory, seeing as even raw 24bit is under 4 GB
veluca
2024-03-08 01:10:58
I don't remember for sure what djxl uses before writing the PNG, but it's probably floats
jonnyawsom3
2024-03-08 01:16:20
This is cjxl
2024-03-08 01:19:50
``` wintime -- cjxl --disable_output -d 0 -e 1 Minimap.png JPEG XL encoder v0.10.1 5f67ebc [AVX2,SSE2] Encoding [Modular, lossless, effort: 1] Compressed to 566.5 kB (0.135 bpp). 8192 x 4096, 198.380 MP/s [198.38, 198.38], 1 reps, 16 threads. PageFaultCount: 52984 PeakWorkingSetSize: 196.5 MiB QuotaPeakPagedPoolUsage: 35.24 KiB QuotaPeakNonPagedPoolUsage: 8.492 KiB PeakPagefileUsage: 194.2 MiB Creation time 2024/03/08 01:17:27.999 Exit time 2024/03/08 01:17:28.362 Wall time: 0 days, 00:00:00.362 (0.36 seconds) User time: 0 days, 00:00:00.046 (0.05 seconds) Kernel time: 0 days, 00:00:01.015 (1.02 seconds) ``` A 8192 x 4069, 4bit file (Again stored as a 24bit PNG)
Orum
2024-03-08 01:27:11
what if you use ppm and --streaming_input/output?
jonnyawsom3
2024-03-08 01:27:15
49121 x 24598 in raw 24bit is just under 4GB In 8bit (which is what the image actually is) it's just over 1GB So something is using up an extra 7GB or more with the streaming on, unless I've made a mistake
Orum
2024-03-08 01:28:13
but neither of those has streaming on?
jonnyawsom3
2024-03-08 01:29:51
Streaming encoding is always on unless at e10
Orum
2024-03-08 01:30:19
that's what I thought but apparently not
jonnyawsom3
2024-03-08 02:06:53
I forgot that streaming input effects the density too, more secrets to learn....
2024-03-08 02:08:10
Shame PPM doesn't have 8bit, so I'll have to make a 4GB intermediate file out of a 80MB PNG to do it (And then probably end up with a worse result than just optimizing the PNG because of sprites and tiles)
Orum
2024-03-08 02:11:39
also streaming input only works with ppm/pgm
jonnyawsom3
2024-03-08 02:11:59
Yeah which is why I'm dreading the 4GB PPM
Orum
2024-03-08 02:12:02
you can pipe into cjxl, right?
2024-03-08 02:15:04
<:YEP:808828808127971399> you can: `convert foo.png PPM:- | cjxl - bar.jxl`
2024-03-08 02:15:34
didn't test it with --streaming_input though, but it will probably work
2024-03-08 02:16:53
oh no, it doesn't <:AngryCry:805396146322145301> `PNM decoding failed.`
2024-03-08 02:17:34
weird, I would think streaming_input would work with streams, but I guess not <:KekDog:805390049033191445>
2024-03-08 02:20:18
how big is the actual png?
jonnyawsom3
``` wintime -- cjxl --disable_output -d 0 -e 1 OpenTTD.png JPEG XL encoder v0.10.1 5f67ebc [AVX2,SSE2] Encoding [Modular, lossless, effort: 1] Compressed to 784618.7 kB (5.195 bpp). 49121 x 24598, 153.367 MP/s [153.37, 153.37], 1 reps, 16 threads. PageFaultCount: 2810494 PeakWorkingSetSize: 6.833 GiB QuotaPeakPagedPoolUsage: 35.24 KiB QuotaPeakNonPagedPoolUsage: 67.06 KiB PeakPagefileUsage: 11.01 GiB Creation time 2024/03/08 00:44:28.366 Exit time 2024/03/08 00:44:46.819 Wall time: 0 days, 00:00:18.453 (18.45 seconds) User time: 0 days, 00:00:03.609 (3.61 seconds) Kernel time: 0 days, 00:00:49.609 (49.61 seconds) ``` An 80 MB, 8bit (Stored as 24bit) PNG. I'm surprised it used so much memory, seeing as even raw 24bit is under 4 GB
2024-03-08 02:26:55
> 49121 x 24598
2024-03-08 02:27:38
Ironically this was meant to be a 'small scale' test of this one 1572353 x 786777
Orum
2024-03-08 02:29:57
I mean big as in file size...
jonnyawsom3
2024-03-08 02:30:56
> An 80 MB, 8bit (Stored as 24bit) PNG
Orum
2024-03-08 02:31:04
ah okay, so not too bad
jonnyawsom3
2024-03-08 02:31:37
The data itself is in 8KB chunks like I said before, so could be a lot smaller. Already 98% compression ratio
Orum
2024-03-08 02:32:06
did you do the massive res one yet?
jonnyawsom3
2024-03-08 02:35:03
No, I've only got 60GB free and that in raw would be 20GB alone, hence trying the smaller one first
2024-03-08 10:28:01
Turns out I made a slight miscalculation
2024-03-08 10:28:29
The full size image would be over 1TB in 8bit raw
CrushedAsian255
2024-03-08 11:30:42
3TB if 24bpp
HCrikki
2024-03-09 12:13:30
phoronix test suite updated its encoder and decoder benchmark to 0.10.1 (had 0.7.0 before) in case anyone wanna contribute
lonjil
2024-03-09 12:15:14
just in time for 0.10.2
afed
2024-03-09 12:18:27
avx512 would also be interesting for these tests, but most likely it's disabled by default though, mostly for lossless e1, which is not tested
HCrikki
2024-03-09 12:19:10
can anyone look if its parameters are alright? wondering if its going for the newer recommended defaults/efforts, modular streaming and more than 1 thread
afed
2024-03-09 12:25:26
https://github.com/phoronix-test-suite/test-profiles/issues/186
2024-03-09 12:30:56
it might be a good idea to add the most balanced efforts for lossy and lossless and maybe even lossless e1 with like 50 reps
2024-03-09 12:40:53
ah, it's not accepted https://github.com/phoronix-test-suite/test-profiles/pull/187
2024-03-09 12:45:11
weird profiles, q90 or q80 doesn't make much sense for speed tests, same as lossy for png or jpeg and there is no other efforts
HCrikki
2024-03-09 12:49:03
shouldnt encoding from a jpg source use the lossless reconvertible path? wondering as i see some conversion/export features in apps (like xnviewmp) doing full recompressions instead of going for almost instant compressions from jpg with guaranteed lower filesize
2024-03-09 12:50:15
well for pts its still very early in the 1.6.0 cycle so maybe that could change?
jonnyawsom3
2024-03-09 12:50:38
Jpeg recompression has to be explicitly asked for when using the library rather than just cjxl
afed
2024-03-09 12:55:56
except q100, it's the same lossy compression even for jpeg if I remember correctly
_wb_
2024-03-09 08:11:30
The library API works on pixel buffers (or byte buffers), not on filenames.
Traneptora
2024-03-09 10:11:16
yea, to pass a jpeg or png you need to bring your own decoder for that
2024-03-09 10:11:31
and then pass the pixels
TheBigBadBoy - π™Έπš›
2024-03-15 09:47:41
hello there I was curious about JPEG benchmark with differents encoders, like this one: https://github.com/google-research/google-research/tree/master/mucped23 https://raw.githubusercontent.com/google-research/google-research/master/mucped23/jpegli_study_elo_plots.png I read other benchmarks too on the same subject, and we can clearly see jpegli winning in all of them. But I come across some JPG "in-codec" optimizers (JPG input β†’ smaller JPG output with matching checksum) that don't touch the metadata nor ICC So I was **really really really** curious to see if by using this kind of optimizer as a post-operation (aka running it on each output of the different JPG encoders) would **change the ranking order** Therefore I'm asking if anyone still has some JPGs from a benchmark result, and would be willing to share (as I can run these optimizers - and they might take some time)
_wb_
2024-03-15 09:59:24
Mostly to optimize losslessly within JPEG, what you can do is try different progressive scripts, and optimize Huffman tables (and use arithmetic coding, if you're ok with going outside the de facto standard)
2024-03-15 10:00:40
Jpegli mostly does that already by default - not as exhaustively as default mozjpeg though, so with mozjpegtran you might be able to get some additional small savings
yoochan
2024-03-15 10:11:06
ELO score ? like in chess ?
2024-03-15 10:11:39
apparently...
Orum
2024-03-15 10:12:23
Electric Light Orchestra
TheBigBadBoy - π™Έπš›
_wb_ Jpegli mostly does that already by default - not as exhaustively as default mozjpeg though, so with mozjpegtran you might be able to get some additional small savings
2024-03-15 10:40:53
oh, that's good to know. Perhaps why jpegli is winning is because it does better progressive scripts (?) for example with simple `cjpegli in.png out.jpg` `out.jpg` is 559 436 bytes optimized with ECT: 557 771 bytes optimized with jpegtran (mozjpg): 557 955 bytes ultra brute force scripts: 556 942 bytes ECT and jpegtran were almost done instantly, and the 3rd one took 545 seconds with 16 threads Effectively I've seen much more gain size with other encoders than cjpegli using the 3rd optimizer
afed
2024-03-15 10:44:05
so it's a 0.4% difference for ultra brute force
_wb_
2024-03-15 10:44:37
well jpegli seems to use this script: ``` Start Of Scan: 3 components Component 1: dc=0 ac=0 Component 2: dc=1 ac=1 Component 3: dc=1 ac=2 Ss=0, Se=0, Ah=0, Al=0 Start Of Scan: 1 components Component 1: dc=0 ac=0 Ss=1, Se=2, Ah=0, Al=0 Start Of Scan: 1 components Component 2: dc=1 ac=1 Ss=1, Se=2, Ah=0, Al=0 Start Of Scan: 1 components Component 3: dc=1 ac=2 Ss=1, Se=2, Ah=0, Al=0 Start Of Scan: 1 components Component 1: dc=0 ac=3 Ss=3, Se=63, Ah=0, Al=2 Start Of Scan: 1 components Component 2: dc=1 ac=1 Ss=3, Se=63, Ah=0, Al=2 Start Of Scan: 1 components Component 3: dc=1 ac=1 Ss=3, Se=63, Ah=0, Al=2 ``` which I guess boils down to first the 1:8 image, then then the 1:4 image, then the rest.
2024-03-15 10:44:57
well not quite, some of the data for 1:4 is missing
2024-03-15 10:47:52
but you get the basic horizontal and vertical gradient in each block with that first AC pass
2024-03-15 10:51:24
(above are the first 7 passes, there are some more after that to get the least significant bits right) ``` Define Huffman Table 0x10 0 2 2 1 2 5 4 3 0 3 1 1 0 0 0 0 Start Of Scan: 1 components Component 1: dc=0 ac=0 Ss=3, Se=63, Ah=2, Al=1 Define Huffman Table 0x11 0 1 3 1 8 2 2 2 2 3 1 0 0 0 0 0 Start Of Scan: 1 components Component 2: dc=1 ac=1 Ss=3, Se=63, Ah=2, Al=1 Start Of Scan: 1 components Component 3: dc=1 ac=1 Ss=3, Se=63, Ah=2, Al=1 Define Huffman Table 0x12 0 1 3 3 2 6 2 3 0 3 1 0 0 0 0 0 Start Of Scan: 1 components Component 1: dc=0 ac=2 Ss=3, Se=63, Ah=1, Al=0 Start Of Scan: 1 components Component 2: dc=1 ac=1 Ss=3, Se=63, Ah=1, Al=0 Define Huffman Table 0x13 0 1 3 2 4 4 6 3 1 1 0 0 0 0 0 0 Start Of Scan: 1 components Component 3: dc=1 ac=3 Ss=3, Se=63, Ah=1, Al=0 ```
TheBigBadBoy - π™Έπš›
2024-03-15 10:54:39
https://cdn.discordapp.com/emojis/872898333239279666.png?quality=lossless&size=48
afed so it's a 0.4% difference for ultra brute force
2024-03-15 10:57:49
and definitely I've seen many files getting 10% reduction with the scripts brute force so definitely cjpegli is good at that
afed
2024-03-15 10:58:37
maybe e10/e11 will be also useful for jpegli, though the difference is small just for optimization but maybe in the future use some other slower modes and more accurate butteraugli
TheBigBadBoy - π™Έπš› and definitely I've seen many files getting 10% reduction with the scripts brute force so definitely cjpegli is good at that
2024-03-15 11:11:27
for mozjpeg the difference should also be small, unless there is some large unused or stripped metadata
veluca
yoochan ELO score ? like in chess ?
2024-03-15 12:15:22
blame me for that πŸ˜› it's something people are familiar with πŸ˜›
yoochan
2024-03-15 12:22:38
it make sense for side to side evaluation
veluca
2024-03-15 12:23:21
this is not actually side-by-side, it's in-place with original on the side... but yes
TheBigBadBoy - π™Έπš›
afed maybe e10/e11 will be also useful for jpegli, though the difference is small just for optimization but maybe in the future use some other slower modes and more accurate butteraugli
2024-03-15 02:17:19
wait, there are efforts in `cjpegli` ?
afed
TheBigBadBoy - π™Έπš› wait, there are efforts in `cjpegli` ?
2024-03-15 02:29:50
not directly, but different settings can give different speed and quality (at least in benchmark_xl), so it's not a bad idea to have efforts it just takes effort and time to bring different settings into efforts <:KekDog:805390049033191445>
TheBigBadBoy - π™Έπš›
2024-03-15 02:44:22
I'll do my own benchmark I'll try `jpegli`, `jpeg` "vanilla", `mozjpeg` and `guetzli` any recommendation for more JPG encoders ? And what about the metric for comparing images quality ?
afed
2024-03-15 02:57:14
sjpeg probably about metrics comparisons, like this one https://canary.discord.com/channels/794206087879852103/1020724883241574472/1020755005386534963 there were others i also did some, but i found visual comparisons more useful, though more time consuming if it's not just a few images
_wb_
2024-03-15 03:06:05
"jpegli seq" means sequential, `cjpegli -p 0` "unopt" means no huffman optimization (`--fixed_code`)
2024-03-15 03:07:27
so you basically could make 3 effort settings based on that, but I kind of doubt it matters. It's pretty fast anyway.
2024-03-15 03:08:17
It rarely seems a good idea to sacrifice ~10% compression just to make it go from a blink of the eye to half a blink of the eye
Traneptora
2024-03-15 03:12:54
does jpegli make progressive jpegs or baseline jpegs?
_wb_
2024-03-15 03:13:01
progressive by default
Traneptora
2024-03-15 03:13:18
how does jpegli achieve faster decompression speed than libjpeg-turbo?
_wb_
2024-03-15 03:13:22
you need to add `-p 0` to disable progressive and do sequential/baseline jpeg
Traneptora
2024-03-15 03:13:57
for baseline that is
_wb_
2024-03-15 03:14:17
oh these numbers are for multi-threaded, I guess libjpeg-turbo doesn't try to use threads
Traneptora
2024-03-15 03:14:24
ah, that would make sense then
_wb_
2024-03-15 03:14:31
in single-threaded it should be more similar I suppose
Traneptora
2024-03-15 03:14:35
since I'd expect libjpeg-turbo to be the fastest implementation by design
2024-03-15 03:14:52
since it focuses on speed above pretty much all else
_wb_
2024-03-15 03:15:47
exactly β€” though it is based on manual SIMD code I think, while jpegli is using highway, so probably for some platforms, jpegli will be faster πŸ™‚
2024-03-15 03:15:58
(platforms for which libjpeg-turbo doesn't have good SIMD yet)
Traneptora
2024-03-15 03:16:01
yea, I'm guessing this is on x86 though?
_wb_
2024-03-15 03:16:13
it's actually on my laptop, an M3
2024-03-15 03:16:14
so ARM/NEON
Traneptora
2024-03-15 03:16:22
that might make a difference then
2024-03-15 03:16:31
why is progressive jpeg so much slower than baseline, btw? I assume since it's slower across the board the algorithm itself is slower
_wb_
2024-03-15 03:17:03
I do think libjpeg-turbo has good NEON code paths though, it's probably the main platform where you want to optimize speed since so many phones are ARM
afed
2024-03-15 03:17:24
yeah, it makes less sense for jpeg because it's already fast, but some sort of bruteforce mode so that no additional optimizers are needed at all I think would be useful and for slower efforts add like more butteraugli iterations as in libjxl or something like that, so that fast modes would just be like extras, because it's possible and to be like lubjpeg-turbo if someone needs it
_wb_
Traneptora why is progressive jpeg so much slower than baseline, btw? I assume since it's slower across the board the algorithm itself is slower
2024-03-15 03:19:28
progressive is slower both encode and decode because it inherently has worse memory locality and just more entropy-coded symbols to process (though it does give better compression, since basically you can do "poor man's context modeling" by switching up the huffman codes between scans)
Traneptora
2024-03-15 03:20:10
ah, right, I suppose going in raster order would make simd much easier
afed
afed yeah, it makes less sense for jpeg because it's already fast, but some sort of bruteforce mode so that no additional optimizers are needed at all I think would be useful and for slower efforts add like more butteraugli iterations as in libjxl or something like that, so that fast modes would just be like extras, because it's possible and to be like lubjpeg-turbo if someone needs it
2024-03-15 03:22:08
and finally integrate jpegli into jxl, e.g. with some compilation option, maybe even with some advanced use cases than the usual libjpeg api <:YEP:808828808127971399> maybe even with some compatible cli encoding options if the output image will be jpeg
_wb_
2024-03-15 03:46:32
i'm dreaming about some kind of "libjpeglixl" that is a wrapper that implements _both_ the libjpeg api and the libjxl api, and magically allows you to decode both jxl and jpeg via either api. Most of what is needed for something like that we already have.
Traneptora
_wb_ i'm dreaming about some kind of "libjpeglixl" that is a wrapper that implements _both_ the libjpeg api and the libjxl api, and magically allows you to decode both jxl and jpeg via either api. Most of what is needed for something like that we already have.
2024-03-15 03:49:17
ideally you should be able to just pass a JPEG to libjxl and decode it, and it will switch code paths based on whether it starts with 0xFFD8 or not
2024-03-15 03:49:21
in theory, that makes the most sense to me
2024-03-15 03:49:43
as libjxl contains all the code needed to decode a jpeg, you just first have to encode it to a JXL via AddJPEGFrame or whatever
2024-03-15 03:49:49
and then decode the JXL
_wb_
2024-03-15 03:57:43
yeah well we could make a shortcut and not actually do the JXL entropy coding/decoding and just read the jpeg and then render it
2024-03-15 03:59:19
the trickier thing is allowing to decode jxl images via the jpeg api β€” I suppose something sensible has to be done in case the image has alpha or is an animation
fab
2024-03-15 04:28:54
2024-03-15 04:29:15
Veluca i've attempted a custom jpg encoder for tgcom24
Traneptora
_wb_ the trickier thing is allowing to decode jxl images via the jpeg api β€” I suppose something sensible has to be done in case the image has alpha or is an animation
2024-03-15 04:56:30
I don't think this is necessary, if you can decode both via the libjxl api
_wb_
2024-03-15 05:00:14
well it could be nice to use it as a drop-in replacement for libjpeg-turbo and automatically get some amount of jxl support even in applications that haven't updated (and maybe never will)
Traneptora
2024-03-15 05:25:17
not sure that will actually work though, will it?
2024-03-15 05:25:34
many applications that support jpg and also png probably either check filename or initial bytes
2024-03-15 05:25:39
to know which decoder to use
2024-03-15 05:25:50
so they probably won't actually support jxl even if the interface does
_wb_
2024-03-16 01:41:04
Good point, they might give up before even trying...
JendaLinda
2024-03-16 10:17:32
I've seen an application which detects JPEG by searching for JFIF and EXIF and thus doesn't support bare JIF.
Snafuh
2024-03-17 10:59:21
The libvips Windows binaries can now be build with jpegli as drop in replacement for mozjpeg/libjpeg-turbo. My first test were quite dissapointing though. jpegli was slightly slower and produces much larger (30%) images than the mozjpeg path. I guess this is because some defaults which are different between mozjpeg and jpegli. Setting 'interlace'true in libvips produces 50% smaller image with jpegli. mozjpeg shrinks only a bit. Interlaced jpegli is smaller than mozjpeg, baseline mozjpeg is smaller. Are there optimal settings for jpegli when replacing mozjpeg? I might to a comparison table with all the libvips settings if I find the time later tonight
sklwmp
2024-03-17 11:02:19
jpegli and mozjpeg both produce progressive (interlaced) jpeg by default i believe (https://discord.com/channels/794206087879852103/805176455658733570/1216404497409249380) so that's one option to set
Snafuh
2024-03-17 11:31:06
Interesting. I'll probably have to check which defaults libvips uses. It seems to produce non-interlaced with no parameters. The subsampling mode makes a difference as well. The big differences seem to come from the libvips defaults, not jpegli vs mozjpeg itself. So it's more of a specific tools implementation. I'll do some testing either way though. Many people might interact with an encoder through something like libvips or imagemagick. If the defaults produce worse results with jpegli, it might give a wrong impression what it's capable of
lonjil
2024-03-17 11:34:23
30% larger, but how is the quality? Perhaps it's defaulting to a higher quality level.
Snafuh
2024-03-17 12:09:07
Visibly there was no real difference. Decreasing Quality to match mozjpeg size resulted in notable worse quality for jpegli. I think it's down to chroma-subsampling. It's in auto mode per default in libvips and might behave differently between jpegli and libvips. So my mozjpeg images might have used 4:2:0 and jpegli 4:4:4. I'll try to create a table with different settings and results
spider-mario
2024-03-17 12:10:04
maybe mozjpeg defaults to optimising huffman tables and jpegli doesn’t (or only in progressive mode), or something like that?
2024-03-17 12:10:05
if there’s a switch for that, might be worth trying
Snafuh
2024-03-17 01:15:23
Ok, at higher qualities (higher than default 75) jpegli is 10% smaller. Subsampling and mozjpegs auto mode was also mentioned in other benchmarks. Jpegli need an explicit input for subsampling, Mozjpeg does make reasonable assumptions based on the Quality levels
_wb_
2024-03-17 02:43:23
You cannot assume that mozjpeg q80 = libjpeg-turbo q80 = jpegli q80. Quality scales are not quite the same.
afed
2024-03-17 02:48:07
there is a simulation for the same size as libjpeg in benchmark, but that doesn't mean the default Q's are the same https://github.com/libjxl/libjxl/pull/2146
Snafuh
2024-03-17 02:48:50
jpegli ignores the libvips subsampling option and always used 4:4:4. With explicitly set options jpegli produces smaller files than mozjpeg with the same options, as expected. Yeah, ofc. Quality scales do differ. I was just confused by the big difference with default options at Q75.
afed
2024-03-17 02:51:29
for jpegli cli it should be automatic for lower qualities if I'm not mistaken
lonjil
2024-03-17 02:51:36
I think most of jpegli's benefits are mostly in the Q75+ range anyhow
afed
2024-03-17 02:53:49
yeah, and the Q scaling will always be different, it shouldn't be the same, it's not some metric with a consistent quality
lonjil
2024-03-17 02:57:56
I mean, in terms of like libjpeg-turbo
afed
2024-03-17 03:01:19
yeah, I just mean that quality close to libjpeg Q75 for jpegli can be reached at other values and about Q in general
2024-03-17 03:02:21
and needs the same size comparison, not the same Q
2024-03-17 03:07:04
and yeah, jpegli still needs improvements for lower qualities and some blockiness fixes, but from what I understand it's not going to happen anytime soon and there are other priorities for now
Traneptora
Snafuh Ok, at higher qualities (higher than default 75) jpegli is 10% smaller. Subsampling and mozjpegs auto mode was also mentioned in other benchmarks. Jpegli need an explicit input for subsampling, Mozjpeg does make reasonable assumptions based on the Quality levels
2024-03-17 10:15:37
jpegli excels at higher qualities. mozjpeg has always been better at lower qualities
2024-03-17 10:16:15
low-quality JPEGs to me aren't particularly useful so I like jpegli, but if you regularly serve mid or low-quality JPEGs then mozjpeg should be better
jonnyawsom3
2024-03-18 03:28:36
Decided to try and replicate this, but I'm not sure how to reduce the colors using the delta pallete, unless I'm meant to preprocess it somehow? https://fixupx.com/jyzg/status/1329067794995011585?s=20
2024-03-18 03:29:18
https://x.com/jyzg/status/1329078139700428813?s=20 https://x.com/jyzg/status/1329105633417768970?s=20
2024-03-18 03:29:39
Oh that's fun, the embed is interpreting emojis
2024-03-18 03:36:14
Ah, that'll be why, removing `--modular_palette_colors=0 --modular_lossy_palette` results in an identical output file with cjxl, so either I'm doing something wrong or cjxl is
2024-03-18 03:36:49
Here's what I've been trying `cjxl -P 0 -m 1 --modular_palette_colors=0 --modular_lossy_palette Test.png Test.jxl -d 0.6 -e 10`
_wb_
2024-03-18 04:49:43
could be that it is broken, it hasn't been worked on or benchmarked for a while...
jonnyawsom3
2024-03-18 04:58:27
Between this and the extra channel decoding, it seems I'm finding all the lost bits of code haha
_wb_
2024-03-18 05:26:43
The encoder side of everything palette related (both lossless and lossy/delta) could use some improvements. It's mostly naive/unoptimized code, and in the case of delta palette, the code is more of a "proof of concept" and apparently broken at the moment... feel free to open an issue about this, it should at least do something
lonjil
2024-03-18 05:27:57
<@532010383041363969> do you happen to still have the palette JXL file from that test?
jonnyawsom3
2024-03-18 06:01:00
https://github.com/libjxl/libjxl/issues/3433
Jyrki Alakuijala
lonjil <@532010383041363969> do you happen to still have the palette JXL file from that test?
2024-03-19 09:08:44
no
jonnyawsom3
https://github.com/libjxl/libjxl/issues/3433
2024-03-20 11:40:52
Huh, so there is actually a roundtrip test for it, but it never actually verified the feature worked at all https://github.com/libjxl/libjxl/pull/622
_wb_
2024-03-20 05:43:11
well it does test that it is smaller than lossless and quite high quality
spider-mario
2024-03-20 05:53:32
so is it that we somehow manage that without the delta palette?
jonnyawsom3
2024-03-20 06:23:31
I wonder if the density improvements over the years have simply made it hit the target anyway
_wb_
2024-03-20 09:07:27
Could also be a cjxl bug...
2024-03-20 09:07:44
The test tests libjxl, not cjxl
jonnyawsom3
2024-03-20 09:22:36
Ah, good point
TheBigBadBoy - π™Έπš›
2024-03-21 10:06:34
started my benchmark, should be finished by the end of the w-e
2024-03-21 10:06:51
guetzli is so mem-hugry lol
2024-03-22 10:22:12
How can I have the bpp of the image ? Is `filesize / (height * width)` good enough (even if it takes the header size) ?
Orum
2024-03-22 10:24:05
the header *should* be included as it's required to decode the image
spider-mario
2024-03-22 10:24:20
(if the filesize is in bytes, don’t forget to multiply by 8)
Orum
2024-03-22 10:25:06
about the only thing that can be removed is EXIF unrelated to decoding/displaying the image (but really that should be stripped off well in advance of tests of the encoder)
TheBigBadBoy - π™Έπš›
2024-03-22 10:30:26
nice thanks
2024-03-22 10:31:18
yeah when I said header I meant metadata let's just hope encoders don't add metadata when input doesn't have any
Traneptora
TheBigBadBoy - π™Έπš› yeah when I said header I meant metadata let's just hope encoders don't add metadata when input doesn't have any
2024-03-22 01:53:09
do keep in mind jxls always have color metadata
2024-03-22 01:53:25
so it must assume sRGB or something if the input has no metadata in that regard
Orum
2024-03-22 02:06:17
though I think you can override that with flags to cjxl?
2024-03-22 02:07:37
ah <:YEP:808828808127971399> ``` -x key=value, --dec-hints=key=value This is useful for 'raw' formats like PPM that cannot store colorspace information```
Traneptora
Orum though I think you can override that with flags to cjxl?
2024-03-22 03:21:19
that is correct
fab
2024-03-22 08:26:17
jonnyawsom3
2024-03-22 08:26:44
What
TheBigBadBoy - π™Έπš›
2024-03-22 08:33:17
I guess this is enough <:KekDog:805390049033191445> jpegli (420 422 440 444), mozjpeg, jpeg-turbo, guetzli each with many steps for quality and standalone + "instantaneous" optimization + script bruteforcing
2024-03-22 08:33:24
I wonder how many days it'll run
2024-03-22 08:33:27
<:kekw:808717074305122316>
fab
TheBigBadBoy - π™Έπš› I guess this is enough <:KekDog:805390049033191445> jpegli (420 422 440 444), mozjpeg, jpeg-turbo, guetzli each with many steps for quality and standalone + "instantaneous" optimization + script bruteforcing
2024-03-22 09:22:43
hdblog has jpegs. and also webpp thumbnails
damian101
2024-03-23 09:15:16
what's this about ``` The installer exited with a non-zero exit status. ERROR: /usr/bin/ld: /usr/lib/libavif.so: undefined reference to `svt_av1_enc_init_handle' LOG: ~/.phoronix-test-suite/installed-tests/pts/jpegxl-1.6.0/install-failed.log ``` trying to install in phoronix test suite
Traneptora
2024-03-23 11:30:22
looks like you don't have svt-av1 installed or there's some issue with that
damian101
2024-03-23 11:59:29
but I do...
2024-03-23 11:59:49
also why libjxl want svt-av1, lol
spider-mario
2024-03-23 12:16:07
the benchmarking tool can link to libavif to evaluate avif
fab
2024-03-23 12:23:20
Likely dday uses aurora visiolarum
2024-03-23 12:23:48
The encodes autoupdates so is not public available perhaps
2024-03-23 12:24:13
Devs don't know if is Cloudinaryy
TheBigBadBoy - π™Έπš›
TheBigBadBoy - π™Έπš› I guess this is enough <:KekDog:805390049033191445> jpegli (420 422 440 444), mozjpeg, jpeg-turbo, guetzli each with many steps for quality and standalone + "instantaneous" optimization + script bruteforcing
2024-03-23 04:52:21
ETA: 2d15h
2024-03-23 04:52:22
<:CatSmile:805382488293244929>
2024-03-23 04:52:51
and that is I let it run without interruptions so it'll take even more time lol
damian101
spider-mario the benchmarking tool can link to libavif to evaluate avif
2024-03-23 07:28:35
was just an ffmpeg-related error I think which was broken due to incompatible svt-av1-psy version
fab
2024-03-26 08:07:10
Avif quality 100
2024-03-26 08:09:28
JPEG XL is becoming like av2 january
Nyao-chan
2024-03-26 09:50:24
managed to get 8949 B (0.001 bpp) lossless on a 10k file I know it's an easy one to encode, but that is crazy
fab
2024-03-26 09:52:21
webp vs jxl
TheBigBadBoy - π™Έπš›
2024-03-26 11:42:50
## JPG encoders + optimizers benchmark - cjpegli v0.10.2 e1489592 [AVX2,SSE4,SSE2] - guetzli 1.0.1-4 (Arch extra repo) - libjpeg-turbo version 3.0.2 (build 20240125) - mozjpeg version 4.1.5 (build 20240322) Github link with script and all the graphs: https://github.com/T-3B/compresssion_benchmarks/tree/main/JPG%20(encoders%20%2B%20optimizers) **The graphs were made by <@548366727663321098>, a huge thank to him** ### Conclusions "Unfortunately" optimizing the JPG does not change the encoder to choose for the best ratio bpp/ssim2. I've seen much higher size reduction for JPGs found on the Internet (up to 10%), but it is quite small with this benchmark. It is quite safe to say "**always use `cjpegli` 420 for BPP < 1** (surprisingly followed really close by mozjpeg), **otherwise `cjpegli` 444**", jpeg-turbo indeed is fast but who can *not* bear sub-second encode time with cjpegli... There a little exception here: the konosuba is quite an unusual image with lots of colors (and difficult to compress). For that one, the winner is `cjpegli` once again but with 444 as chroma subsampling. I love that one. **ECT optimization is definitely worth it**, as it is almost instantaneous.\ Scans bruteforcing (`jpegultrascan.pl`) is only for people (like me) worrying about maximum compression at the cost of really slow speed - note that since it's bruteforcing, it can be done using several threads. Here are some graphs (many more on the GitHub link):
2024-03-27 10:14:17
and this comparison was done without any ICC profile so if you add XYB JPG to this benchmark, I think cjpegli will just destroy anything else <:KekDog:805390049033191445>
fab
2024-03-27 11:18:31
2024-03-27 11:18:32
Which encoders do you prefer?
2024-03-27 11:18:37
Dzgas
TheBigBadBoy - π™Έπš›
2024-03-27 11:41:07
I got pinged ?
yoochan
2024-03-27 11:41:59
I did ! my mistake ! I deleted the post πŸ˜„
2024-03-27 11:42:19
I missread something in the page you posted
TheBigBadBoy - π™Έπš›
2024-03-27 12:32:50
no problem haha
fab
2024-03-27 12:49:11
2024-03-27 12:49:18
I managed to improve libjxl
2024-03-27 12:50:05
Jon Is still tuningg
Traneptora
2024-03-27 01:08:34
a good idea in general is to ignore fab because he just says random things without context or elaboration
yoochan
2024-03-27 02:33:47
fab was not kicked abruptly because he is neurodiverse and this community favors inclusion and tolerate noise. I guess he passes by highs and lows which makes its contributions more or less nonsensical depending on the day
w
2024-03-27 02:50:32
neurodiversity should NOT be normalized
2024-03-27 02:52:16
and I think the fab is something else entirely
yoochan
Traneptora a good idea in general is to ignore fab because he just says random things without context or elaboration
2024-03-27 03:08:42
he left and deleted his messages ?
Traneptora
2024-03-27 03:14:17
Β―\_(ツ)_/Β―
2024-03-27 03:14:19
idk
Nyao-chan
2024-03-27 03:14:26
confirmed or speculated neuro diverse?
w
2024-03-27 03:15:33
just say AUTISM
Traneptora
Nyao-chan confirmed or speculated neuro diverse?
2024-03-27 03:15:46
he has said in the past that he is autistic, so confirmed if we take his word for it
w
2024-03-27 03:16:07
imo he's just ITALIAN
Nyao-chan
2024-03-27 03:16:33
huh. I had seen speculations before and Luca said not to do it and was wondering
Traneptora
2024-03-27 03:20:09
Nyao-chan
TheBigBadBoy - π™Έπš› ## JPG encoders + optimizers benchmark - cjpegli v0.10.2 e1489592 [AVX2,SSE4,SSE2] - guetzli 1.0.1-4 (Arch extra repo) - libjpeg-turbo version 3.0.2 (build 20240125) - mozjpeg version 4.1.5 (build 20240322) Github link with script and all the graphs: https://github.com/T-3B/compresssion_benchmarks/tree/main/JPG%20(encoders%20%2B%20optimizers) **The graphs were made by <@548366727663321098>, a huge thank to him** ### Conclusions "Unfortunately" optimizing the JPG does not change the encoder to choose for the best ratio bpp/ssim2. I've seen much higher size reduction for JPGs found on the Internet (up to 10%), but it is quite small with this benchmark. It is quite safe to say "**always use `cjpegli` 420 for BPP < 1** (surprisingly followed really close by mozjpeg), **otherwise `cjpegli` 444**", jpeg-turbo indeed is fast but who can *not* bear sub-second encode time with cjpegli... There a little exception here: the konosuba is quite an unusual image with lots of colors (and difficult to compress). For that one, the winner is `cjpegli` once again but with 444 as chroma subsampling. I love that one. **ECT optimization is definitely worth it**, as it is almost instantaneous.\ Scans bruteforcing (`jpegultrascan.pl`) is only for people (like me) worrying about maximum compression at the cost of really slow speed - note that since it's bruteforcing, it can be done using several threads. Here are some graphs (many more on the GitHub link):
2024-03-27 03:22:13
do you know what program is used for those graphs?
TheBigBadBoy - π™Έπš›
2024-03-27 03:23:27
as I said all these graphs were done by <@548366727663321098>, and myself I don't know which tools he uses (and want to know too) <:KekDog:805390049033191445>
Orum
2024-03-27 03:24:29
R and ggplot2
Nyao-chan
2024-03-27 03:28:17
I should have realised by that sideways legend...
veluca
w imo he's just ITALIAN
2024-03-27 03:50:49
πŸ‘€
fab
w neurodiversity should NOT be normalized
2024-03-27 06:55:12
I'm not open to normalize my neurodiversity to minors, in any way. I prefer being to do what I want and the normal people just straight die
2024-03-27 06:55:28
Autistic will never get along neurotypicals
2024-03-27 06:55:45
They agne different interest and different autism
2024-03-27 06:55:57
And also a different version of brain
2024-03-27 06:57:07
I prefer fanpage.com and medical doctors to Juzt die than to cure my medical conditions
2024-03-27 06:57:12
I love being alone
2024-03-27 06:57:31
And phil other People that's is what give me an interest
2024-03-27 06:57:44
And spoiling people on intense internet whatever is that
2024-03-27 06:58:00
I do not cure about That rules that exists in the reality
2024-03-27 06:58:32
I'm autistic and you deserve to be with me and serve me with respect
2024-03-27 06:59:50
Gemini is my slave According to my mental brain
2024-03-27 07:02:46
In my brain there is a single opinion, to tell other people to f::: themselves
Fox Wizard
2024-03-27 07:05:07
Wot lmao
fab
2024-03-27 07:19:56
20:18
2024-03-27 07:20:22
2024-03-27 07:25:29
Now JPEG X/ beating all codecs by mos score 0,561 great
2024-03-27 07:27:40
The lower presets are improving
2024-03-27 09:50:50
Comparison now JPEG XL
jonnyawsom3
2024-03-27 09:52:18
Are you... Re-encoding the encoding comparison? xD
DZgas Π–
fab Which encoders do you prefer?
2024-03-28 12:20:01
MozJpeg ``` cjpeg.exe -baseline -notrellis -sample 1x1 -quality 90 -tune-psnr -quant-table 1 IN.png > OUT.jpeg ``` this is the most frequent thing I use in 2024. sometimes sample 2x2
fab
DZgas Π– MozJpeg ``` cjpeg.exe -baseline -notrellis -sample 1x1 -quality 90 -tune-psnr -quant-table 1 IN.png > OUT.jpeg ``` this is the most frequent thing I use in 2024. sometimes sample 2x2
2024-03-28 08:22:40
JPEG XL now is giving usable results as avif q43 comparable
2024-03-28 08:22:52
Because i fixed the errors
2024-03-28 08:23:23
I didn't denoise disgruibe or something touch the image or the profile
2024-03-28 08:23:59
Just the Devs AOmedia that improved the software,
2024-03-28 08:41:07
2024-03-28 08:57:20
They are casual i'm using datas of people who live Jarre where's it live
2024-03-28 08:57:44
Thomas people don't know aboutAI compression
2024-03-28 08:57:55
Improvement to rtc 11 and effort 1 JPEG XL
2024-03-28 09:03:00
Tuned on bigger dataset
2024-03-28 09:14:23
10:14Rome
2024-03-28 09:15:22
2024-03-28 11:24:49
Avif vs jxl irish and romanian singerz
2024-03-28 11:42:04
After stealing her data
2024-03-28 11:42:31
The right is how really looks on youtube
2024-03-28 12:17:36
Complete
2024-03-28 12:18:36
2024-03-28 12:24:43
Nothing crashed i finished my review work
2024-03-28 12:25:11
Is now 50% better;
2024-03-28 01:20:45
I don't think is anymore accessible
2024-03-28 01:58:49
The App is smart i made a screenshot then closed the tab with edge canary and Jon refreshed the tab
2024-03-28 06:18:00
DZgas Π–
w just say AUTISM
2024-03-29 08:43:21
based
fab
2024-03-29 09:09:16
0,250bpp screenshots now approaches Transparency
2024-03-29 04:36:11
Metrics correlate more
2024-03-30 05:22:35
I denoised everything was possible
2024-03-30 05:23:26
2024-03-30 05:39:50
jonnyawsom3
2024-03-30 07:56:42
An extremely unscientific and limited test of FFMPEG speed for WebP vs JXL
2024-03-30 07:58:02
Run on a single image, a single time (Although I ran each command around 3 times separately without logging), with whatever defaults FFMPEG has set unless written above
2024-03-30 07:59:17
Also, FFMPEG still has effort 9 as the highest, although not necessarily the worst considering the memory and speed penalty...
Orum
2024-03-30 08:26:12
yeah, you really need streaming input (and possibly output?) and several cores to let JXL stretch its legs for lossless
jonnyawsom3
2024-03-30 08:32:02
All things considered, I thought those were rather good results. Smaller and faster in every case, only getting better as effort went up
Quackdoc
Orum yeah, you really need streaming input (and possibly output?) and several cores to let JXL stretch its legs for lossless
2024-03-30 08:34:41
one thread parallel encode supremacy
2024-03-30 08:34:59
thankfully with the new memory efficency stuff you can run a lot of parallel encodes
Orum
2024-03-30 09:15:33
it's still using a lot more mem than a single encode with multiple threads
monad
2024-04-01 03:43:59
if i were to run a bunch of encodes for two weeks what would you want to see
jonnyawsom3
2024-04-01 03:49:50
We've been trying to decide on new default settings, so knowing the best effort or parameters for size/speed across a wide test suite would be perfect for that
HCrikki
2024-04-01 04:05:51
perhaps nightly builds could have some capability to tally/share gain summaries, with cpu/ram info and optionally the source image if its just 1/few not too large ?
2024-04-01 04:07:09
might be out of scope for libjxl though and more suitable from 3rdparty to implement in their own utilities but itd only help set their own defaults
fab
monad if i were to run a bunch of encodes for two weeks what would you want to see
2024-04-01 08:06:34
Kitchen objects because in that category i have difficulty to get good vmaf
2024-04-01 08:06:56
I renounced to do the encoding
2024-04-01 08:36:02
Jxl is good but avif was a very fast development,
2024-04-03 03:22:40
2024-04-03 03:22:55
Spidermario how to make this encode better is e8 q11
2024-04-03 03:24:30
I optimized this encode for dell’Msi Pro MP241X
2024-04-03 03:24:37
And I have a Samsung rs580
2024-04-03 03:58:12
I improved loudness normalization in Facebook
eddie.zato
eddie.zato Generation loss is still fun <:CatSmile:805382488293244929>
2024-04-04 07:13:42
Another round <:CatSmile:805382488293244929>
veluca
2024-04-04 08:10:30
very interesting effect from gaborish....
monad
2024-04-04 08:58:00
hopefully humanity can adapt to become more creative when reposts are destroyed so quickly
lonjil
2024-04-04 09:26:49
maybe we shouldn't constantly recompress stuff
monad
2024-04-04 09:29:08
why not
fab
fab
2024-04-04 10:37:48
keep in mind that her hands are heavily photoshopped and jxl in q10 enhances stuff and is poor at metrics even in the eyes
2024-04-04 10:38:17
because i've never Seen the original horrible stuff
lonjil maybe we shouldn't constantly recompress stuff
2024-04-04 10:38:35
that's basically what lonnie is saying
2024-04-04 10:39:26
as an autistic person i can't differientate between different av01 comp1essed hands
2024-04-04 10:39:43
because i'm racist
fab Metrics correlate more
2024-04-04 10:40:19
hee's was better
Fox Wizard
fab because i'm racist
2024-04-04 11:04:37
What lmao
fab
2024-04-04 11:13:39
Gemini was updated today to be temperature 1-2.8 because the reality musicians want money as income
_wb_
2024-04-04 07:26:30
Looks like jpegli zeroes AC quite quickly. And inv_gaborish(gaborish) should probably be made closer to the identity function.
yoochan
2024-04-04 07:44:08
when this video was made, gaborish filter was not yet implemented ? https://www.youtube.com/watch?v=FtSWpw7zNkI or is it a regression ?
fab
_wb_ Looks like jpegli zeroes AC quite quickly. And inv_gaborish(gaborish) should probably be made closer to the identity function.
2024-04-04 07:57:26
how is now? https://jon-cld.s3.amazonaws.com/test/distorted/225284/jxl-225b6884-pdc0-e6-q10.png
2024-04-04 07:58:10
i did while taking meds, so i didn't considered the video use;
_wb_
yoochan when this video was made, gaborish filter was not yet implemented ? https://www.youtube.com/watch?v=FtSWpw7zNkI or is it a regression ?
2024-04-05 05:32:16
It was, but the encoder side gaborish has been changed since then, I suspect causing a regression in terms of generation loss.
monad
2024-04-05 08:31:40
yoochan
_wb_ It was, but the encoder side gaborish has been changed since then, I suspect causing a regression in terms of generation loss.
2024-04-05 08:49:11
should I open a PR ?
fab
2024-04-05 08:49:24
I think so
2024-04-05 08:49:53
But let's just Jyrki work
2024-04-05 08:50:41
My encoder have terrible generation loss
2024-04-05 08:50:49
This is an example for fb
2024-04-05 08:51:13
Because I optimize only for shareability
2024-04-05 08:51:24
Not for the true image quality that matters
2024-04-05 08:52:15
Jxl latest is this https://artifacts.lucaversari.it/libjxl/libjxl/latest/ but i think is alpha
2024-04-05 08:53:48
On desktop I get a different encoder with blur qualities
eddie.zato Another round <:CatSmile:805382488293244929>
2024-04-05 10:13:22
In this example the foot changes a lot
2024-04-05 10:13:36
Too much use of motion vector
fab how is now? https://jon-cld.s3.amazonaws.com/test/distorted/225284/jxl-225b6884-pdc0-e6-q10.png
2024-04-05 10:13:56
This is first fix for epf#1
TheBigBadBoy - π™Έπš›
TheBigBadBoy - π™Έπš› ## JPG encoders + optimizers benchmark - cjpegli v0.10.2 e1489592 [AVX2,SSE4,SSE2] - guetzli 1.0.1-4 (Arch extra repo) - libjpeg-turbo version 3.0.2 (build 20240125) - mozjpeg version 4.1.5 (build 20240322) Github link with script and all the graphs: https://github.com/T-3B/compresssion_benchmarks/tree/main/JPG%20(encoders%20%2B%20optimizers) **The graphs were made by <@548366727663321098>, a huge thank to him** ### Conclusions "Unfortunately" optimizing the JPG does not change the encoder to choose for the best ratio bpp/ssim2. I've seen much higher size reduction for JPGs found on the Internet (up to 10%), but it is quite small with this benchmark. It is quite safe to say "**always use `cjpegli` 420 for BPP < 1** (surprisingly followed really close by mozjpeg), **otherwise `cjpegli` 444**", jpeg-turbo indeed is fast but who can *not* bear sub-second encode time with cjpegli... There a little exception here: the konosuba is quite an unusual image with lots of colors (and difficult to compress). For that one, the winner is `cjpegli` once again but with 444 as chroma subsampling. I love that one. **ECT optimization is definitely worth it**, as it is almost instantaneous.\ Scans bruteforcing (`jpegultrascan.pl`) is only for people (like me) worrying about maximum compression at the cost of really slow speed - note that since it's bruteforcing, it can be done using several threads. Here are some graphs (many more on the GitHub link):
2024-04-05 11:32:29
I wonder if optimizing the JPG file before lossless recompression with `cjxl` change something in the JXL output πŸ€”
Fox Wizard
2024-04-05 11:32:43
1 way to find outℒ️
TheBigBadBoy - π™Έπš›
2024-04-05 11:33:01
yep
2024-04-05 11:33:21
it's been 10 minutes my CPU is optimizing a JPG file <:KekDog:805390049033191445>
Fox Wizard
2024-04-05 11:34:06
Somehow I've never gone hyper autism optimization mode on jpg files <:KekDog:884736660376535040>
2024-04-05 11:34:18
~~Maybe I should start doing that and shave off a few bytes at most~~
TheBigBadBoy - π™Έπš›
2024-04-05 11:35:10
well `ect -9 -strip -progressive` already does a great job (even better than mozjpeg's `jpegtran`)
2024-04-05 11:35:11
and is faster than 0.5 second
Fox Wizard ~~Maybe I should start doing that and shave off a few bytes at most~~
2024-04-05 11:37:33
benchmark with several JPG optimizers (not ultrascan tho) https://encode.su/threads/3987-Jpeg-Optimizer-testing
2024-04-05 11:38:06
and the slow-as-fuck bruteforcer: https://encode.su/threads/2489-jpegultrascan-an-exhaustive-JPEG-scan-optimizer
2024-04-05 11:38:41
which, for smallest output, should be used with `-b 13 -t 16 -s -i`
2024-04-05 11:39:44
well, there are also ``` -j Strip APP0 segment for 18-byte savings (generates non-compliant JPEG that may be incompatible with some software) -a Use arithmetic coding (unsupported by most software; jpegtran support required) ```But I don't want to break my image πŸ™‚
Fox Wizard
2024-04-05 11:40:22
If I want to break compatibility for max compression then I'll just go with arithmetic coding on jpeg which should be about 7% smaller <:KekDog:884736660376535040>
2024-04-05 11:40:43
Oh wait, that's an option there XD
TheBigBadBoy - π™Έπš›
2024-04-05 11:40:43
but it indeed provides you the best JPG compression
2024-04-05 11:40:59
yeah so you can do arithmetic encoding and bruteforce scans
fab
2024-04-05 11:41:18
I requests your review
Fox Wizard
2024-04-05 11:41:23
Gotta try the mega slow thing on this image <:thinkies:854271204411572236>
fab
2024-04-05 11:41:25
https://jon-cld.s3.amazonaws.com/test/ahall_of_fshame_SSIMULACRA_2_modelD.html
2024-04-05 11:41:36
Yes Fox try reviewing
TheBigBadBoy - π™Έπš›
Fox Wizard Gotta try the mega slow thing on this image <:thinkies:854271204411572236>
2024-04-05 11:41:38
you, or me ? <:KekDog:805390049033191445>
fab
yoochan should I open a PR ?
2024-04-05 11:41:41
2024-04-05 11:41:45
You have a very awesome eyes
Fox Wizard
TheBigBadBoy - π™Έπš› you, or me ? <:KekDog:805390049033191445>
2024-04-05 11:42:16
You ~~since I'm too lazy to figure out how to use jpegultrascan atm~~
TheBigBadBoy - π™Έπš›
2024-04-05 11:42:29
πŸ•
Fox Wizard
2024-04-05 11:42:43
Maybe somedayℒ️
TheBigBadBoy - π™Έπš›
2024-04-05 11:43:13
fine I'll do it you still owe me a pizza <:KekDog:805390049033191445>
Fox Wizard
fab Yes Fox try reviewing
2024-04-05 11:43:17
Reviewing what exactly?
TheBigBadBoy - π™Έπš› fine I'll do it you still owe me a pizza <:KekDog:805390049033191445>
2024-04-05 11:43:33
Sure, I'll deduct that from the pizzas you owe me <:KekDog:884736660376535040>
TheBigBadBoy - π™Έπš›
2024-04-05 11:50:01
lol ``` 376261 Folder.jpg 361274 Folder_ultrascan.jpg 306466 Folder.jxl 306602 Folder_ultrascan.jxl ```Optimized JPG for this specific image gave a bigger JXL
2024-04-05 11:51:30
is there a way to "unoptimize" JPG ? I mean to have a bigger JPG file, still lossless
Fox Wizard
2024-04-05 11:52:51
There probably is if there's an option to force an output even if the image is bigger I guess
2024-04-05 11:53:05
What image did you optimize though? <:thinkies:854271204411572236>
TheBigBadBoy - π™Έπš›
2024-04-05 11:54:15
Fox Wizard
2024-04-05 11:54:24
Not even the fox image I sent smh
TheBigBadBoy - π™Έπš›
2024-04-05 11:54:46
that the one's I was optimizing before your sent yours lmao
2024-04-05 11:55:06
I started your encode with both arith and non-arith
Oleksii Matiash
TheBigBadBoy - π™Έπš› is there a way to "unoptimize" JPG ? I mean to have a bigger JPG file, still lossless
2024-04-05 11:55:51
jpegtran without any switch?
yoochan
2024-04-05 11:56:01
pixel art with 8x8 pixels per pixel could fit nice in a jpeg !
2024-04-05 11:56:26
1 pixel per block exactly, would it beat png ? I'll test
TheBigBadBoy - π™Έπš›
Oleksii Matiash jpegtran without any switch?
2024-04-05 11:58:06
nope, since it still optimizes by default but using jpegtran with `-revert` seems to do the job thanks
Oleksii Matiash
TheBigBadBoy - π™Έπš› nope, since it still optimizes by default but using jpegtran with `-revert` seems to do the job thanks
2024-04-05 12:06:46
It is because I had some ancient jpegtran version. It does not have -revert switch, and does reverting by default
TheBigBadBoy - π™Έπš›
2024-04-05 12:10:04
But I really expected cjxl to give a smaller JXL "JPG-recompressed" if the input was smaller shouldn't it be the case?
fab
2024-04-05 12:12:26
2024-04-05 12:12:37
Great now the colors aren't dead
2024-04-05 12:12:51
E7 14:13
Oleksii Matiash
TheBigBadBoy - π™Έπš› But I really expected cjxl to give a smaller JXL "JPG-recompressed" if the input was smaller shouldn't it be the case?
2024-04-05 12:13:42
No, because this optimization is about using huffman with higher effort. And jxl decompresses to coefficients, so that existing compression does not matter. As far as I understand
fab
2024-04-05 12:18:59
Is from 0.7.0 and up that jxl had this problem
TheBigBadBoy - π™Έπš› lol ``` 376261 Folder.jpg 361274 Folder_ultrascan.jpg 306466 Folder.jxl 306602 Folder_ultrascan.jxl ```Optimized JPG for this specific image gave a bigger JXL
2024-04-05 12:19:50
Is there some problem on this images?
2024-04-05 12:20:12
Id say to not change anything from
TheBigBadBoy - π™Έπš›
fab Is there some problem on this images?
2024-04-05 12:21:15
it's just that smaller JPG does not mean it'll be a smaller JXL
fab
2024-04-05 12:28:57
2022 and 2023 2024 specs are a bit different in the requirements the last isn't standardized
2024-04-05 12:29:25
It includes 3 documents
TheBigBadBoy - π™Έπš›
2024-04-05 12:37:57
<@219525188818042881> ``` 1140555 GHVfbX5a0AAdJsJ.jpg 0s 1129229 GHVfbX5a0AAdJsJopt.jpg 36m38s 8 threads 1043474 GHVfbX5a0AAdJsJopt_arith.jpg 39m46 8 threads ```You still can win 18 bytes by removing the APP0 segment, but that would result in a non-conformant JPG
2024-04-05 12:38:20
πŸ•
Fox Wizard
2024-04-05 12:46:19
Hm, nice difference. Maybe I should start wasting a lot of electricity on optimizing jpegs <:KekDog:884736660376535040>
jonnyawsom3
TheBigBadBoy - π™Έπš› But I really expected cjxl to give a smaller JXL "JPG-recompressed" if the input was smaller shouldn't it be the case?
2024-04-05 12:46:23
Usually yes, but I expect the brute forcing is causing data that JXL doesn't handle as well
Fox Wizard If I want to break compatibility for max compression then I'll just go with arithmetic coding on jpeg which should be about 7% smaller <:KekDog:884736660376535040>
2024-04-05 12:47:41
And one of the 'steps' of the JXL transcoding is using arithmetic actually, one of the reasons they don't transcode along with being so rare
Fox Wizard
2024-04-05 12:48:32
I know :p
jonnyawsom3
2024-04-05 12:48:52
:<
Fox Wizard
TheBigBadBoy - π™Έπš› <@219525188818042881> ``` 1140555 GHVfbX5a0AAdJsJ.jpg 0s 1129229 GHVfbX5a0AAdJsJopt.jpg 36m38s 8 threads 1043474 GHVfbX5a0AAdJsJopt_arith.jpg 39m46 8 threads ```You still can win 18 bytes by removing the APP0 segment, but that would result in a non-conformant JPG
2024-04-05 12:49:03
The arithmetic one could be made a little smaller <:thinkies:854271204411572236>
2024-04-05 12:49:24
yoochan
2024-04-05 12:50:02
https://issues.chromium.org/issues/41288624#comment16 arithmetic coding not supported in blink who would have guessed... The argument is similar to the one given for jxl
Fox Wizard
2024-04-05 12:50:04
Oh wait, that's added metadata that got removed <:KekDog:884736660376535040>
TheBigBadBoy - π™Έπš›
Fox Wizard Oh wait, that's added metadata that got removed <:KekDog:884736660376535040>
2024-04-05 12:51:33
wait, even changing the extension in Discord and it still adds metadata ?
Fox Wizard
2024-04-05 12:51:52
Don't think so
2024-04-05 12:52:02
But it had 6 bytes of metadata <:thinkies:854271204411572236>
jonnyawsom3
Fox Wizard Hm, nice difference. Maybe I should start wasting a lot of electricity on optimizing jpegs <:KekDog:884736660376535040>
2024-04-05 12:52:18
I was running tests on an 8k image at 4am last night (as you do), and by the end I realised I'd spent 20 minutes and all my RAM to save 5% after already shaving off 40% in 12 seconds
Fox Wizard
2024-04-05 12:52:48
Totally worth itℒ️
jonnyawsom3
2024-04-05 12:52:51
Actually that reminds me...
Fox Wizard
2024-04-05 12:53:49
I mean... I sent 2040 fox images in a random Discord server and almost all of them are around 4k res and all are optimized <:KekDog:884736660376535040>
2024-04-05 12:55:13
Oh wait, 2040 messages with I think 8 images on average per message, so about 16320 images XD
TheBigBadBoy - π™Έπš›
Fox Wizard But it had 6 bytes of metadata <:thinkies:854271204411572236>
2024-04-05 12:56:56
then both ECT and jpegtran does not know about that none could shrink these "6 bytes of metadata"
jonnyawsom3
2024-04-05 12:57:39
I remember a few months ago I was bored and curious (a dangerous combo), so I set the quality to nothing and cranked the effort to max. I fit 800 artworks into under 1.5MB... And some were still recognisable!
TheBigBadBoy - π™Έπš›
Fox Wizard
2024-04-05 12:58:22
I ran it you say to me what you used
2024-04-05 12:58:33
😁
Fox Wizard
TheBigBadBoy - π™Έπš› I ran it you say to me what you used
2024-04-05 01:05:32
jhead ``-du``
2024-04-05 01:06:29
Or ``-purejpg`` which is a combination of params including ``-du``
2024-04-05 01:13:07
Does that earn me 1 more pizza point? <:KittyDrink:1126563386482770012>
2024-04-05 01:16:44
Or do I have to steal them from your freezer when I'm in Maastricht or Aachen again since that's very close to where your freezer is located <:KittyUwU:1147753612529913938>
TheBigBadBoy - π™Έπš›
2024-04-05 01:16:45
yeah Ig, thank you <:KekDog:805390049033191445> but didn't I earn a pizza point for FLACCID and 1 for JPG ultrascan ?
Fox Wizard
2024-04-05 01:17:01
FLACCID doesn't work lmao
TheBigBadBoy - π™Έπš›
2024-04-05 01:17:38
I got told the dev the issue, it's fixed now
Fox Wizard
2024-04-05 01:17:42
But yes, 1 pizza point for jpg ultrascan, but haven't I earned about 10 pizza points by now? <:thinkies:854271204411572236>
TheBigBadBoy - π™Έπš›
TheBigBadBoy - π™Έπš› I got told the dev the issue, it's fixed now
2024-04-05 01:17:49
cfr. awcy server
Fox Wizard But yes, 1 pizza point for jpg ultrascan, but haven't I earned about 10 pizza points by now? <:thinkies:854271204411572236>
2024-04-05 01:18:40
how lol but yeah ofc if you can find my house come and I'll buy some pizzas for both of us there's a pizzeria just 100m away <:KekDog:805390049033191445>
Fox Wizard
2024-04-05 01:19:02
Are you sure you want me to find your house? <:KekDog:884736660376535040>
TheBigBadBoy - π™Έπš›
2024-04-05 01:19:35
don't you live in my walls ? <:KekDog:805390049033191445>
2024-04-05 01:20:21
and tbh I think you already know the village I'm in finding the house shouldn't be that difficult :trollhq:
Fox Wizard
2024-04-05 01:21:43
That's probably true <:KekDog:884736660376535040>
2024-04-05 01:53:37
Heh, haven't found out where you live, but found out other things XD
TheBigBadBoy - π™Έπš›
2024-04-05 01:55:31
wdym other things lol
2024-04-05 02:00:45
😳
Fox Wizard
2024-04-05 02:01:09
Oh wait, I accidentally revealed your name lmao
2024-04-05 02:01:22
~~Now the message magically self destructedℒ️~~
TheBigBadBoy - π™Έπš›
2024-04-05 02:01:42
bwahaha like you didn't noticed <:kekw:808717074305122316>
Fox Wizard
2024-04-05 02:01:51
Somehow I didn't <:KekDog:884736660376535040>
2024-04-05 02:02:27
But at least it's very easy to find anyways, so guess it doesn't matter
2024-04-05 02:04:04
And lol, totally forgot about the 2021 flooding. Was pretty close to where you were at the time ~~nice youtube vid~~
TheBigBadBoy - π™Έπš›
Fox Wizard But at least it's very easy to find anyways, so guess it doesn't matter
2024-04-05 02:04:33
yeah, just go to my description and you got my full name in my GitHub repo
Fox Wizard And lol, totally forgot about the 2021 flooding. Was pretty close to where you were at the time ~~nice youtube vid~~
2024-04-05 02:04:42
<:kekw:808717074305122316><:kekw:808717074305122316><:kekw:808717074305122316><:kekw:808717074305122316>
2024-04-05 02:05:01
totally forgot about it
fab
2024-04-05 02:05:13
Unfortunately lacks even the color gamut fixes https://artifacts.lucaversari.it/libjxl/libjxl/latest/
2024-04-05 02:05:24
See us tomorrow
Fox Wizard
2024-04-05 02:05:46
Yes, I was somewhere far uphill, so didn't see much water. Mostly just heard non stop sirens for 3 days
fab
2024-04-05 02:05:56
I think i will try, should i do on this build
TheBigBadBoy - π™Έπš›
2024-04-05 02:06:42
not even my videoℒ️
fab
2024-04-05 02:07:56
Better than av2
Fox Wizard
2024-04-05 02:09:19
<:KekDog:884736660376535040>
2024-04-05 02:19:32
Why 100 Euros? <:thinkies:854271204411572236>
jonnyawsom3
2024-04-05 02:40:04
I would've assumed lowering thread count with `-g 3` would easily lower memory to below the default, but it seems like it allocates almost the same regardless of threads Single Thread `-g 3` ```wintime -- cjxl --disable_output -d 0 "C:\Users\jonat\Pictures\Resonite\2024-03-30 03.52.09.png" --num_threads=0 -e 3 -g 3 JPEG XL encoder v0.10.2 e148959 [AVX2,SSE2] Encoding [Modular, lossless, effort: 3] Compressed to 8052.5 kB including container (7.767 bpp). 3840 x 2160, 4.169 MP/s [4.17, 4.17], , 1 reps, 0 threads. PageFaultCount: 233678 PeakWorkingSetSize: 352 MiB QuotaPeakPagedPoolUsage: 34.8 KiB QuotaPeakNonPagedPoolUsage: 10.75 KiB PeakPagefileUsage: 424.7 MiB Creation time 2024/04/05 15:36:33.605 Exit time 2024/04/05 15:36:35.808 Wall time: 0 days, 00:00:02.203 (2.20 seconds) User time: 0 days, 00:00:00.218 (0.22 seconds) Kernel time: 0 days, 00:00:01.984 (1.98 seconds)``` 8 Thread Default ```wintime -- cjxl --disable_output -d 0 "C:\Users\jonat\Pictures\Resonite\2024-03-30 03.52.09.png" --num_threads=8 -e 3 JPEG XL encoder v0.10.2 e148959 [AVX2,SSE2] Encoding [Modular, lossless, effort: 3] Compressed to 8052.7 kB including container (7.767 bpp). 3840 x 2160, 18.442 MP/s [18.44, 18.44], , 1 reps, 8 threads. PageFaultCount: 182085 PeakWorkingSetSize: 215.2 MiB QuotaPeakPagedPoolUsage: 35.05 KiB QuotaPeakNonPagedPoolUsage: 17.26 KiB PeakPagefileUsage: 255.5 MiB Creation time 2024/04/05 15:36:45.221 Exit time 2024/04/05 15:36:45.888 Wall time: 0 days, 00:00:00.666 (0.67 seconds) User time: 0 days, 00:00:00.875 (0.88 seconds) Kernel time: 0 days, 00:00:02.515 (2.52 seconds)```
afed
eddie.zato Another round <:CatSmile:805382488293244929>
2024-04-05 04:29:20
even noticeable for jxl, probably because mozjpeg uses aq/trellis differently so the high frequencies are gone pretty quickly need new photon noise api extension for jpegli <:KekDog:805390049033191445> https://github.com/libjxl/libjxl/issues/3461
fab
2024-04-05 04:44:33
I fixed aurora and jpegli on dday and Hdblog
2024-04-05 04:45:01
Provided the encoders are that of the page hall of shame and aren't customized for theirs page
2024-04-05 04:45:15
Still I like denoise
2024-04-05 04:45:24
But not de,noiser
2024-04-05 04:45:56
Denoise meaning like the game of crimson the one you discovered swatches on fb
2024-04-05 04:46:09
2024-04-05 04:46:18
HDblog refused that pill of g......
2024-04-05 04:46:34
Is a professional site tjeu are right
2024-04-05 04:46:52
Photography teams can get Their format
2024-04-05 04:48:18
2024-04-05 04:48:46
Those distorfionz aren't acceptable for enthusiast Photographers but are acceptable for web uaage
yoochan
Fox Wizard And lol, totally forgot about the 2021 flooding. Was pretty close to where you were at the time ~~nice youtube vid~~
2024-04-05 05:19:44
Which flooding? En France?
Fox Wizard
2024-04-05 05:22:24
This one
yoochan
2024-04-05 05:25:52
Looks huge!
Fox Wizard
2024-04-05 05:26:18
It was, 243 deaths and 54 billion Euros in damage
fab
2024-04-05 06:02:42
Mediaset helped me to do jpeg xl compression
TheBigBadBoy - π™Έπš›
2024-04-05 07:29:39
we had fucking army boats in our streets to evacuate people <:KekDog:805390049033191445>
2024-04-05 07:30:52
smh the only part of the map where there are boat and helicopter 'icons'
fab
2024-04-05 09:07:18
2024-04-05 09:07:22
My mother completed the jxl comparison
2024-04-05 09:07:31
All not only 3 images
Fox Wizard
2024-04-05 10:44:33
A true jxl momℒ️
fab
2024-04-06 07:22:13
2024-04-06 07:22:20
2024-04-06 07:23:05
Is too tuned on my taste please wb change everything for aomedua
Nova Aurora
fab My mother completed the jxl comparison
2024-04-06 07:27:37
What were the results?
fab
2024-04-06 08:20:59
Nova Aurora What were the results?
2024-04-06 08:22:21
More sharpness in Windows and stairz
2024-04-06 08:22:55
In every single piece of image, anyway not bar
Fox Wizard
TheBigBadBoy - π™Έπš› <@219525188818042881> ``` 1140555 GHVfbX5a0AAdJsJ.jpg 0s 1129229 GHVfbX5a0AAdJsJopt.jpg 36m38s 8 threads 1043474 GHVfbX5a0AAdJsJopt_arith.jpg 39m46 8 threads ```You still can win 18 bytes by removing the APP0 segment, but that would result in a non-conformant JPG
2024-04-07 02:06:37
Now it's smaller <:KekDog:884736660376535040>
2024-04-07 02:08:45
Only 92 bytes though
TheBigBadBoy - π™Έπš›
2024-04-07 02:12:08
so it's with something else than `jpegultrascan` ?
2024-04-07 02:12:32
just when I thought the war was over <:KekDog:805390049033191445>
Fox Wizard
2024-04-07 02:12:46
Nope <:KekDog:884736660376535040>
TheBigBadBoy - π™Έπš›
2024-04-07 02:13:21
you're answering the first question ?
Fox Wizard
2024-04-07 02:13:38
Both
TheBigBadBoy - π™Έπš›
2024-04-07 02:13:45
nice then
2024-04-07 02:14:17
because I can just bruteforce settings to find what you used x)