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

other-codecs

_wb_
2024-04-24 06:42:29
Obviously also the early display and storage technology was quite low fidelity anyway, so there was no point in broadcasting a high-fidelity signal that would then be ruined anyway.
JendaLinda
2024-04-24 07:32:18
I have a suspicion that the RGB to YUV formulas were tuned so the RGB color bar test would show as a nice grayscale steps on a black and white screen.
2024-04-24 07:35:12
I think there is no correct way how to extract luma from a color picture. Even different camera technologies have different sensitivity to different wavelengths.
Quackdoc
JendaLinda I think there is no correct way how to extract luma from a color picture. Even different camera technologies have different sensitivity to different wavelengths.
2024-04-24 07:45:28
professional cameras have specifications that detail the photo sensitivity of the sensors
2024-04-24 07:45:35
well in most cases
_wb_
2024-04-24 07:50:36
There is a 'correct' way to extract the luma from a color image, based on the (average) response curves of the cone cells in the HVS. But to actually turn a color image into a grayscale one, you might want to do something different — e.g. take into account that we can see contrasts based on chromacity too, and try to not lose that information (e.g. so you don't just remove red text on a green background when both have a similar luma), or take into account that L,M,S cones are distributed differently in the fovea, causing S to be more relevant for its wide/peripheral/low-frequency contribution and L,M more for their high-frequency contribution (that's what inspired XYB to define luma using only L and M cone responses).
Quackdoc
_wb_ There is a 'correct' way to extract the luma from a color image, based on the (average) response curves of the cone cells in the HVS. But to actually turn a color image into a grayscale one, you might want to do something different — e.g. take into account that we can see contrasts based on chromacity too, and try to not lose that information (e.g. so you don't just remove red text on a green background when both have a similar luma), or take into account that L,M,S cones are distributed differently in the fovea, causing S to be more relevant for its wide/peripheral/low-frequency contribution and L,M more for their high-frequency contribution (that's what inspired XYB to define luma using only L and M cone responses).
2024-04-24 07:53:26
color->grayscale has been the source of many a headache for me lol
190n
2024-04-24 08:02:19
is something weird with the metadata in this png? ffmpeg says `rgba(pc, gbr/unknown/unknown)` (is there alpha or not?), and cjpegli (but only in xyb mode) creates a jpeg that is stretched horizontally and with messed up colors (as if it interpreted rgba data as rgb)
Quackdoc
2024-04-24 08:06:01
there is for sure an alpha channel
_wb_
2024-04-24 08:06:28
there is alpha, and it is trivial (all opaque)
2024-04-24 08:08:19
https://github.com/libjxl/libjxl/issues/2671
190n
2024-04-24 08:08:50
aha, didn't find that, thanks
JendaLinda
2024-04-24 08:33:51
There were several kinds of black and white cameras in use, either film and electronic sensors, vacuum tubes and solid state.
damian101
190n aha, didn't find that, thanks
2024-04-24 11:15:08
oxipng removes unused alpha channels
JendaLinda
2024-04-24 11:30:07
All PNGs should be passed through at least fast optimizer to minimize the used color type because so many programs produce bloated PNGs.
damian101
2024-04-24 03:55:26
For end delivery, definitely...
Meow
JendaLinda All PNGs should be passed through at least fast optimizer to minimize the used color type because so many programs produce bloated PNGs.
2024-04-24 03:56:58
With GIMP you could mean to produce zero-compression PNGs
2024-04-24 03:58:24
The size simply consists of pixels * 3 or 4 with a little information
JendaLinda
Meow With GIMP you could mean to produce zero-compression PNGs
2024-04-24 04:33:50
That's just setting the zlib level to zero, right? You can do that, although I don't know if it has any use other than curiosity.
Meow
2024-04-24 04:34:34
Sure a simple setting of compression level
2024-04-24 04:35:16
Using 0 would result in that size slightly larger than pixels * 3 or 4
2024-04-24 04:36:54
Oh I'm not sure about that 4 as I haven't tested with Alpha channel yet
JendaLinda
2024-04-24 04:39:01
The file must be slightly larger than the raw pixel array. The file structure takes some space as well.
jonnyawsom3
2024-04-24 05:01:44
Especially in PNG with the CRC checks with every chunk
Meow
2024-04-24 05:18:57
With level 0 the one without background even grows 33% larger
2024-04-24 05:21:01
And... nothing
2024-04-24 05:22:15
You can produce a totally bloated PNG without putting in anything
2024-04-24 05:26:44
It becomes 8 KB after optimisation
JendaLinda
2024-04-24 10:07:33
Grayscale and paletted PNG formats are nearly identical, the format of IDAT chunks is the same. Also I think 4bit and 2bit grayscale formats are there mostly for completeness as these are not used very much. Their paletted counterparts do show up occasionally.
Meow
2024-04-25 01:41:48
If you use Safari, do you see glitches on the animated WebP? https://jpegxl.info/test-page/
_wb_
Meow If you use Safari, do you see glitches on the animated WebP? https://jpegxl.info/test-page/
2024-04-25 03:04:00
Yes, it leaves traces of not properly cleared pixels.
2024-04-25 03:04:42
(also the animated jxl is not animated but a still image)
Meow
_wb_ (also the animated jxl is not animated but a still image)
2024-04-25 03:12:34
That JXL works fine on a few Gecko-based browsers like Pale Moon
Nyao-chan
Quackdoc anyone who relies on any LLM for this stuff now, or any time in the near future is an idiot
2024-04-26 08:58:49
Not directly relevant, since I'm not relying, but I've found they are useful for getting "directions". They cover a huge range of topics and can help you tell where to look. In the past I asked a question on stack exchange: https://math.stackexchange.com/questions/4710687/optimizing-cookie-clicker-garden-mutation-layout With chatgpt I can get an answer quicker and if it's wrong, no biggie
DZgas Ж
2024-04-27 04:12:25
interesting SVT-av1 artifacts on full static frame
DZgas Ж interesting SVT-av1 artifacts on full static frame
2024-04-27 04:13:50
2024-04-27 04:14:37
<:AV1:805851461774475316>
Meow
2024-04-27 08:17:54
Why is the sample animation identical to the ones on jpegxl.info? https://w3c.github.io/PNG-spec/Implementation_Report_3e/
2024-04-27 08:18:03
yoochan
DZgas Ж
2024-04-28 09:11:08
The witness! I love this game!
DZgas Ж
2024-04-28 09:12:18
🫶
_wb_
Meow Why is the sample animation identical to the ones on jpegxl.info? https://w3c.github.io/PNG-spec/Implementation_Report_3e/
2024-04-28 01:19:12
It's this one: https://commons.m.wikimedia.org/wiki/File:24-cell-orig.gif
2024-04-28 01:21:23
Except an apng version of it, with full alpha, which you cannot do in gif.
Meow
2024-04-28 01:29:37
Yeah the one on Wikimedia Commons isn't with Alpha
jonnyawsom3
2024-04-28 01:31:26
Makes me want to re-render a version in Blender
Meow
2024-04-28 02:50:31
I can't really understand this 24-cell however
spider-mario
2024-04-28 04:02:56
I have no intention to
2024-04-28 04:06:02
my brain is busy enough with that sleeping beauty paradox
2024-04-28 04:06:26
I'm starting to think that the paradox is that _you_ get less sleep because of it
2024-04-28 04:07:37
but my blog post is taking shape so hopefully not for much longer
2024-04-28 04:13:15
(I have already convinced myself that the argument for 1/3 is bunk, but I want to explain why clearly enough for it to truly be the _coup de grâce_)
yoochan
2024-04-28 04:21:25
Did you tried to simulate the issue with a small code, run it thousands times and get your answer?
spider-mario
2024-04-28 04:47:06
I’m not sure it would solve anything; it’s relatively easy to come up with code that returns either answer (but what’s computed by the “straightforward” way to code the 1/3 answer arguably isn’t a probability)
2024-04-28 04:48:00
(there is a less straightforward way that does compute a probability, but a different one than the one in the problem)
yoochan
2024-04-29 11:32:35
svg2 draft was modified for the last time in 2018, do you think it's dead ? https://www.w3.org/TR/SVG2/
2024-04-29 11:33:54
oh ! no ! my bad, it went to something else and I didn't noticed : https://svgwg.org/svg-next/
spider-mario
2024-04-29 12:48:57
in a nutshell, what are some major differences with SVG 1?
yoochan
2024-04-29 12:58:56
Still trying to understand
Meow
2024-04-29 01:28:08
https://en.wikipedia.org/wiki/SVG#Version_2
2024-04-29 01:28:45
So it's been at the Candidate Recommendation stage for almost 8 years
2024-04-29 01:30:26
Let's see PNG spec 3rd edition or SVG 2 would reach the W3C recommendation stage earlier
gb82
2024-04-29 09:48:30
I still think we need a `.svgb` as a svgz successor with brotli compression
yoochan
2024-04-30 05:16:11
In fact I do serve my static svg as pre-compressed svg.br files for embedding in web pages and it works marvelously
LMP88959
2024-05-02 12:53:31
did i do this right? i just installed mozjpeg
2024-05-02 12:53:51
``` cjpeg -quality 0 -baseline -verbose bike.png > out.jpeg ```
2024-05-02 12:54:26
2024-05-02 12:54:35
47kilobytes
2024-05-02 12:54:47
why does the jpeg file itself have so many zeroes in it though
2024-05-02 12:55:02
zipping the jpeg makes it 30kb
Fox Wizard
2024-05-02 08:03:03
You can use an optimizer like ECT on it for very fast optimization which makes it 10.78KB (23.2%) smaller
yoochan
2024-05-02 08:13:52
so much palette whaou <:KekDog:805390049033191445>
TheBigBadBoy - 𝙸𝚛
Fox Wizard You can use an optimizer like ECT on it for very fast optimization which makes it 10.78KB (23.2%) smaller
2024-05-02 09:53:44
smh I expected you to optimize that file during hours <:KekDog:805390049033191445>
Fox Wizard
TheBigBadBoy - 𝙸𝚛 smh I expected you to optimize that file during hours <:KekDog:805390049033191445>
2024-05-02 10:06:08
I'm afk now, but started jpegultrascan <:KekDog:884736660376535040>
2024-05-02 10:06:21
Might be done by now
TheBigBadBoy - 𝙸𝚛
2024-05-02 10:06:54
btw the update crashing on your machine, is it for all your inputs?
Fox Wizard
2024-05-02 10:08:59
Yup
2024-05-02 10:09:25
Tried it with 10 images and they all caused error spam
2024-05-02 10:14:08
Heh, 1 and 13 were the same size <:KekDog:884736660376535040>
spider-mario
2024-05-02 10:20:56
looks like the graphics of a DOS game
TheBigBadBoy - 𝙸𝚛
Fox Wizard Heh, 1 and 13 were the same size <:KekDog:884736660376535040>
2024-05-02 10:24:15
quite expected for a small picture like that <:KekDog:805390049033191445>
Fox Wizard
2024-05-02 10:25:20
It's funny how it's often the case
2024-05-02 10:25:34
I rarely have cases where 13 is smaller than 3 XD
2024-05-02 10:26:38
I usually just default to using 1 when I optimize many images and 3 when I optimize a few
TheBigBadBoy - 𝙸𝚛
2024-05-02 10:36:13
did you already tried `-b 0` ?
Fox Wizard
2024-05-02 10:43:01
Never tried that <:KekDog:884736660376535040>
LMP88959
Fox Wizard You can use an optimizer like ECT on it for very fast optimization which makes it 10.78KB (23.2%) smaller
2024-05-02 11:25:59
Oh i thought mozjpeg was already doing that optimization considering that’s what they claim on their page + they have an optimize flag
TheBigBadBoy - 𝙸𝚛
LMP88959 Oh i thought mozjpeg was already doing that optimization considering that’s what they claim on their page + they have an optimize flag
2024-05-02 11:34:01
yep, and ECT uses mozjpeg's `jpegtran`, but it does a little more of work to ooptimize the file better
2024-05-02 11:34:53
I don't remember what was the extra optimization steps (better Huffman coding ?), but ECT compresses in most cases better than mozjpeg
LMP88959
2024-05-02 11:38:47
Gotcha, thanks! Ive been curious to see what a few decades of improvement has accomplished for jpeg
JendaLinda
2024-05-02 12:11:53
I t seems that encoding JPEG as progressive does pretty good optimization by default.
jonnyawsom3
LMP88959 Oh i thought mozjpeg was already doing that optimization considering that’s what they claim on their page + they have an optimize flag
2024-05-02 02:14:57
You probably want to remove -baseline from the command
2024-05-02 02:15:09
Because of the message above
LMP88959
2024-05-02 02:15:22
Ohhhhh
2024-05-02 02:15:40
I mustve misinterpreted the description of baseline
2024-05-02 02:17:25
I assumed progressive jpeg creates larger files
2024-05-02 02:17:57
Because usually things that accommodate for something like progressive transmission end up sacrificing something in return
jonnyawsom3
spider-mario looks like the graphics of a DOS game
2024-05-02 02:18:32
I've noticed a resurgence lately of games using quantization on the lighting to achieve similar effects, sometimes at lower render resolution too
JendaLinda
LMP88959 Because usually things that accommodate for something like progressive transmission end up sacrificing something in return
2024-05-02 02:19:00
In jpeg, this apparently works the other way.
LMP88959
2024-05-02 02:19:27
Yeah, pretty interesting
jonnyawsom3
LMP88959 Because usually things that accommodate for something like progressive transmission end up sacrificing something in return
2024-05-02 02:19:27
In this case because progressive is *slightly* newer (I think), it can be smarter with the encoding
LMP88959
2024-05-02 02:21:40
Also... I assume you want the low quality, right?
username
2024-05-02 02:22:07
iirc the data in progressive mode is laid out in such a way where it can be compressed better with the downside being it takes more effort to decode and also won't work in low memory situations since space for the whole image has to be allocated when decoding a progressive JPEG
LMP88959
2024-05-02 02:22:23
Yeah i wanted to see how much better mozjpeg’s worst quality is than whatever GIMP uses for jpeg
Meow
2024-05-02 04:40:50
Jpegli shines when -q is at least 75
2024-05-02 04:41:41
JPEG images below quality 75 are generally crap however
JendaLinda
2024-05-03 07:20:26
Traditional jpeg encoders are kinda dumb, they just cut off preset amount of data, so there was certainly room for improvement.
afed
2024-05-03 08:02:26
<@853026420792360980> still don't fully understand what avtransport is, it's used in ffmpeg as some internal protocol, but can also be a streaming protocol and even has some separate container like e.g. nut (and this container is better/more advanced than nut?) but, still not fully used with all features because not standardized?
Traneptora
2024-05-03 12:12:25
it's a streamable container and protocol
afed
2024-05-03 12:21:29
also, is avtransport container not usable in ffmpeg yet? just through avcat?
JendaLinda
2024-05-03 02:01:24
Is there any requirement that luma and chroma channels should use separate quant tables in jpeg? I've come across some jpegs where the quant tables are two identical copies.
2024-05-03 02:02:42
The jpeg optimizers could reduce them into one. I tried to manually edit the star-of-frame so all channels used the quant table zero and everything seems to work alright.
2024-05-03 02:05:02
ECT removed the now unused quant table as well.
_wb_
2024-05-04 06:37:37
No, there is no such requirement.
JendaLinda
2024-05-04 08:07:07
So having two identical quant tables in the file is unnecessary and the optimizers just don't handle this particular case. Some encoders also put quant tables in separate DQT markers. That's unnecessary as well because one DQT may include multiple tables. ECT will combine multiple DQTs into one.
_wb_
2024-05-04 08:23:39
Yes, I guess some optimizers don't care about such micro-optimizations, but you're right.
DZgas Ж
DZgas Ж SVT-AV1 surpassed AOMENC With this new parameter. I have completely removed the use of CRF now set crf=63 and enable-variance-boost=1:variance-octile=1:variance-boost-strength=2 and use Only variance-boost-strength for quality set 1 low 2 medium 3 high 3 very high
2024-05-04 11:36:28
yep. I made my ffmpeg svt-av1 fork which has overboost and my own feature function. This is all I'm doing because of the developer's fix, the shit https://gitlab.com/AOMediaCodec/SVT-AV1/-/commit/128712bf0aa83e4f680352b87c4b75ac3419364d
2024-05-04 11:37:23
aq 5-9 for overboost and for my func 9-19
2024-05-04 11:52:04
DZgas Ж 670 kbps video. like 360p on twitch ```./ffmpeg -i 1_1927833401.mkv -vf "fps=60,scale=1280:720:flags=lanczos" -c:a libopus -b:a 65k -apply_phase_inv 0 -frame_duration 60 -vbr on -c:v libsvtav1 -crf 63 -g 600 -preset 6 -svtav1-params lookahead=120:tune=2:scm=1:irefresh-type=2:enable-cdef=1:enable-dlf=1:enable-mfmv=1:enable-qm=0:enable-restoration=0:enable-tf=1:enable-tpl-la=1:fast-decode=0:enable-dg=1:startup-mg-size=4:tile-columns=0:tile-rows=0:enable-variance-boost=1:variance-octile=1:variance-boost-strength=2 test-W_1.mkv```
2024-05-04 12:44:59
<:PepeOK:805388754545934396> Unfortunately, that function i did looks worse. therefore, I will leave only the overboost (variance boost = 5-9) of the original function
2024-05-05 07:10:07
jonnyawsom3
2024-05-07 10:24:34
I remember seeing the PR in OBS a few months ago, guess I forgot to follow it because it got merged a while ago https://github.com/derrod/obs-roi-ui
afed
2024-05-07 10:53:41
<:Poggers:805392625934663710> <https://encode.su/threads/4272-New-approach-to-audio-compression> > **New approach to audio compression?** > We are brewing something new: > <https://github.com/google/zimtohrli> is the "butteraugli" for audio > > <https://github.com/google/tabuli> shows the possibility of modeling audio with a sample-to-sample sliding FT, where higher frequencies have wider bands and shorter windows. > > <https://github.com/google/ringli> for our prototype audio compressor. I think it is one of the few that doesn't use the MDCT and aims at higher quality than traditional codecs. In our internal testing we see ~2.3x more compression near the psychoacoustically lossless domain.
JendaLinda
2024-05-07 11:09:34
I'm playing with cjpegli. I've noticed two unusual things. cjpegli uses three quantization tables (jpegs usually have one for luma and one for chroma) and it doesn't write JFIF marker (the main purpose of JFIF is to ensure the color jpeg is YCbCr).
jonnyawsom3
2024-05-07 11:11:41
Probably leftover from when it subsampled the blue in XYB too
2024-05-07 11:11:47
This? https://github.com/libjxl/libjxl/issues/3512
JendaLinda
2024-05-07 11:36:37
I've used the default settings so I suppose it's YCbCr.
2024-05-07 11:41:36
I've came across APP14 marker in RGB encoded jpegs, however cjpegli doesn't seem to support RGB encoding.
TheBigBadBoy - 𝙸𝚛
JendaLinda I've came across APP14 marker in RGB encoded jpegs, however cjpegli doesn't seem to support RGB encoding.
2024-05-07 11:44:27
well, I think you could use it: ``` $ cjpegli -v -v -v -v -h -x key=value, --dec-hints=key=value color_space indicates the ColorEncoding, see Description(); icc_pathname refers to a binary file containing an ICC profile. ```But never understood where is their `Description()` Also, when you use `cjpegli --xyb`, by default it will use the RGB colorspace in addition to the XYB ICC
JendaLinda
2024-05-07 11:48:46
Sorry, my post in not very clear. I meant RGB encoding, where the color transformation is skipped and the RGB channels are encoded directly.
2024-05-07 11:56:33
I see, XYB requires ICC otherwise the image will look wrong. And the third channel is indeed subsampled for some reason.
2024-05-07 12:00:27
In YCbCr encoding, the chroma subsampling is turned off by default.
2024-05-07 12:11:29
Ah I see, the channels in XYB encoded jpeg are tagged RGB, so the decoder will not do the YCbCr-RGB conversion and the ICC presumably does the conversion instead? Sorry I don't really understand the XYB concept but this makes sense.
_wb_
2024-05-07 12:18:51
Yes, that's how it works. But I thought we stopped subsampling B because that creates jpeg files that cannot be recompressed with jxl? Or did that never happen?
JendaLinda
2024-05-07 12:40:53
The last build is still subsampling B but it can be turned off manually.
Meow
2024-05-07 07:02:14
Conversion of greyscale images by major codecs is more bizarre than my expectations. I'll test further
JendaLinda
2024-05-07 08:28:41
I had issues when a supposedly grayscale PNG used a palette of 256 shades of gray. Such png may be treated as RGB color image.
Demiurge
2024-05-08 12:32:14
Shouldn't it be considered a bug that jpegli produces XYB jpegs with chroma subsampling? Worse that it does it by default?
JendaLinda
2024-05-08 06:20:45
Agreed. After all, the default is supposed to be "visually lossless" and it doesn't make sense to subsample just one component anyway.
spider-mario
2024-05-08 07:37:41
in XYB, it kind of does
2024-05-08 07:46:41
JendaLinda
2024-05-08 10:19:16
But it apparently breaks compatibility, jpegs with one subsampled channel cannot be transcoded to JXL. cjpegli uses a separate quantization table fo each channel so tweaking the quantization table for the third channel might be a better solution than the subsampling.
Meow
2024-05-08 11:16:43
Even ordinary greyscale and screentone greyscale can be very different among codecs
2024-05-08 11:24:06
In terms of file size, supposed to be lossless Greyscale: QOI > PNG > HEIC > AVIF > WebP > JXL Greyscale + Alpha: QOI > HEIC > JXL > PNG > AVIF > WebP Screentone: HEIC > QOI > JXL > AVIF > WebP > PNG Screentone + Alpha: HEIC > QOI > AVIF > JXL > PNG > WebP
2024-05-08 11:25:14
Only JXL preserves the Gray colour space from PNG
yoochan
2024-05-08 11:27:16
Interesting for screentone, what are your source images?
Meow
2024-05-08 11:29:21
Hidden for potential anthropomorphobia
2024-05-08 11:30:06
They were initially converted via Clip Studio Paint Ex
2024-05-08 11:33:04
It's a long time technique for printed comics
yoochan
2024-05-08 11:33:51
Thanks! Very very small grain but it is the first time I see some which are not from scanned contents 😅
2024-05-08 11:36:00
At the same time, dots here are sharper than traditional manga screentones
Meow
2024-05-08 11:40:26
I simply used the default settings, number of screen frequency=60 and angle=45
2024-05-08 11:41:21
Possibly printed results could be different
yoochan
2024-05-08 11:43:11
It is some screentone you generate from a greyscale image?
2024-05-08 11:45:11
I didn't know anthropomorphobia was even a thing...
Meow
yoochan It is some screentone you generate from a greyscale image?
2024-05-08 11:52:55
No they were directly converted from the original true-colour image
JendaLinda
2024-05-08 11:58:31
QOI doesn't support grayscale. WebP lossless encodes everything as RGBA but does pretty good job compressing it.
2024-05-08 12:00:11
h265 should support grayscale in theory
2024-05-08 12:01:47
AV1 as well
2024-05-08 12:14:00
Screen tone is interesting. I expected it would be 1 bit per pixel.
jonnyawsom3
JendaLinda But it apparently breaks compatibility, jpegs with one subsampled channel cannot be transcoded to JXL. cjpegli uses a separate quantization table fo each channel so tweaking the quantization table for the third channel might be a better solution than the subsampling.
2024-05-08 12:29:14
It *used* to be fixed actually, not sure when it was reverted https://github.com/libjxl/libjxl/issues/2284
Meow
JendaLinda Screen tone is interesting. I expected it would be 1 bit per pixel.
2024-05-08 12:48:58
With different densities and at least three grey levels, screentone can be filled everywhere
2024-05-08 12:50:51
There used to be jobs for cropping and pasting screentone to comics in the past
JendaLinda QOI doesn't support grayscale. WebP lossless encodes everything as RGBA but does pretty good job compressing it.
2024-05-08 12:52:28
And WebP dumps the original DPI
2024-05-08 12:55:56
The preview panel of Finder on macOS can't handle screentone at all, even PNG
2024-05-08 01:00:27
I even can't be sure about if JXL really has issues with that
2024-05-08 01:02:40
It performs well only with ordinary greyscale but without Alpha
JendaLinda
2024-05-08 01:06:20
Predefined effort settings in JXL have mixed results.
Meow
2024-05-08 01:07:54
I used only `cjxl -d 0` for them
JendaLinda
Meow The preview panel of Finder on macOS can't handle screentone at all, even PNG
2024-05-08 01:10:13
This seems to be an issue with downscaling filter.
Meow
2024-05-08 01:11:33
It even shows an animation initially
_wb_
2024-05-08 01:13:22
it's quite challenging to avoid aliasing/Moiré when downscaling such images
2024-05-08 01:14:50
If I open it in Chrome (well, Thorium) and go through the various zoom levels, this is what I get at one point
Meow
2024-05-08 01:16:00
Yeah it's even difficult to get a proper view
JendaLinda
2024-05-08 01:19:54
This style looks best if downscaled by half, quarter etc.
Meow
JendaLinda This style looks best if downscaled by half, quarter etc.
2024-05-08 01:30:36
25% 50% 75% 100% the best
2024-05-08 01:31:14
Yes downscaling is a big issue
JendaLinda
2024-05-08 01:47:22
Speaking of DPI, JXL doesn't seem to preserve DPI information either. DPI is mostly important for printing so if the images are intended for printing, the DPI information should be preserved.
_wb_
2024-05-08 03:00:34
if you put it in Exif or XMP, it will be preserved
JendaLinda
2024-05-08 03:30:37
It's hard to determine when DPI info is actually important because so many pictures have DPI tags filled with nonsense just for the sake of it.
jonnyawsom3
Meow Even ordinary greyscale and screentone greyscale can be very different among codecs
2024-05-08 03:39:07
I got the screentone JXL down to 590 KB with `-d 0 -e 10 -g 3 -E 3 -I 100` but still worse than PNG and took 4 minutes
Meow
2024-05-08 03:58:08
Still a significant saving from around 2 MB
2024-05-08 04:03:19
So you even added three modular mode options
2024-05-08 04:06:31
Without `-e 10` the file size is even larger
2024-05-08 04:13:49
The same `-d 0 -e 10 -g 3 -E 3 -I 100` too 155 seconds for me
jonnyawsom3
2024-05-08 04:17:27
`-e 9` still does fairly well and faster
Meow
2024-05-08 05:13:54
About 100 KB larger but it took 39 seconds
Demiurge
spider-mario
2024-05-08 05:48:42
this a human eye?
spider-mario
2024-05-08 05:49:08
yes, the cones
Demiurge
JendaLinda But it apparently breaks compatibility, jpegs with one subsampled channel cannot be transcoded to JXL. cjpegli uses a separate quantization table fo each channel so tweaking the quantization table for the third channel might be a better solution than the subsampling.
2024-05-08 05:49:39
specifically, JXL does not support RGB JPEGs with chroma subsampling, only YUV
2024-05-08 05:50:28
and XYB is for some reason stored as an RGB JPEG
spider-mario
2024-05-08 05:51:44
XYB effectively acts as its own “YCbCr-like” transform; you’d arguably not want a further such matrix transform on top
JendaLinda
2024-05-08 06:01:29
That's what I thought. RGB encoded jpegs don't use chroma subsampling at all, it would look worse than YCbCr.
Demiurge
spider-mario XYB effectively acts as its own “YCbCr-like” transform; you’d arguably not want a further such matrix transform on top
2024-05-08 06:05:10
Would it have to be on top?
JendaLinda
2024-05-08 06:11:58
The "RGB encoding" of XYZ is a workaround, so no "RGB<>YCbCr" conversion takes place.
2024-05-08 06:13:57
The jpeg decoder doesn't have to know anything about XYB and the color management does the conversion thanks to the included ICC profile.
Quackdoc
Demiurge specifically, JXL does not support RGB JPEGs with chroma subsampling, only YUV
2024-05-08 06:14:43
is this true? I thought `jpeg_upsampling` needed ycbcr but not `upsampling` or `ec_upsampling`
JendaLinda
2024-05-08 06:18:37
I suppose `upsampling` applies to all three color channels at once.
Quackdoc
2024-05-08 06:24:17
ah I see
Demiurge
2024-05-08 06:42:35
Yeah, it's true. RGB JPEGs are very uncommon and even more uncommon for them to have chroma subsampling
2024-05-08 06:42:41
since it makes no sense normally
2024-05-08 06:43:09
Unless it's not actually RGB
JendaLinda
2024-05-08 07:06:42
Any combination of subsampling can be enforced in jpeg, even subsampled luma rather than chroma, looks pretty funny.
yoochan
Meow It's a long time technique for printed comics
2024-05-08 07:57:59
Speaking of screentone, it's interesting to see that a huge part of the patterns used by mangakas are far from a simple halftones, used as a printing process. Screentone were used as a way to fill large areas very fast, but not always with "halftoned uniform grey" https://b4comics.com/collections/screentone-trame-traditionnelle-manga?ls=en&cache=false clouds/skies/backgrounds and motion lines are very frequent also
Meow
2024-05-08 08:14:23
Softwares can now replace them completely but encoders and viewers can't deal with well
JendaLinda
2024-05-08 08:24:04
Repeating patterns might be an opportunity for using patches in JXL.
Meow
2024-05-09 03:17:38
I would like some explanation about why JXL doesn't perform well on such image
2024-05-09 03:18:05
And why libheif makes a clone
JendaLinda
2024-05-09 04:49:12
Lossless JXL usually works great, however it doesn't like particular types of images and requires tuning compression parameters to achieve good compression. Lossless WebP gives decent results consistently and the slow setting is still pretty fast. The HEIF family is buggy and unreliable, often decodes incorrectly. I don't like it.
2024-05-10 05:43:08
It would be interesting to see the sourc code of Pngout. It has some interesting quirks. Especially Pngout compression is influenced by the encoder that encoded the original png so there may be different results. I was looking for an open source alternative, oxipng looks very promising. Thanks to the zopfli compression it usually gives better results that Pngout. However in some cases, especially flat-colored artwork, Pngout performs better compression.
2024-05-10 05:44:48
Oxipng supports zopfli and libdeflate. Curiously, libdeflate is sometimes better than zopfli.
afed
2024-05-10 05:47:54
<https://github.com/fhanau/Efficient-Compression-Tool>
JendaLinda
2024-05-10 05:52:23
This works great for jpegs. I've tried it on few pngs already optimized with oxipng and couldn't optimize them more. They both use zopfli so I suppose there's not much difference.
2024-05-10 05:52:55
And I like more options available in oxipng.
afed
2024-05-10 06:01:22
oxipng has much less optimization strategies, ect still has the most efficient and comprehensive own and implemented from other optimizers methods and -9 is not the maximum optimization, there are some hidden options (but very slow), though that doesn't mean that certain png's are possible to optimize further after some optimizers
jonnyawsom3
2024-05-10 06:04:18
ECT is, as it says, efficient. Much lower memory usage and time spent compared to oxipng for equal or higher compression
afed
2024-05-10 06:07:29
ect can also be very slow with some settings and spend days, weeks, months on a single png <:KekDog:805390049033191445>
TheBigBadBoy - 𝙸𝚛
2024-05-10 06:14:35
I tried a dozen of optimizers, and ECT is the one that can reach the smallest files (given enough time) for any Deflate data (GZIP, ZIP, PNG)
2024-05-10 06:17:15
the only limitation I saw is the maximal filesize, which is 1.2GB iirc but then just need to use another optimizer, like this one: https://github.com/MrKrzYch00/zopfli (a mod of zopfli) Running `./zopfli --help` prints```Floating point arithmetic precision: 64-bit Maximum supported input file size: 17592186044415MB.```
2024-05-10 06:17:48
but it is beaten quite easily by ECT
jonnyawsom3
2024-05-10 06:24:21
I imagine it would be relatively easy to split the data and run ECT seperately, then combine the results... Somehow....
JendaLinda
2024-05-10 06:30:50
I've tried only ect -9 so far
TheBigBadBoy - 𝙸𝚛
2024-05-10 06:53:02
well `ect -9 --mt-deflate` gives almost always smaller output, even for small files and it is faster <:KekDog:805390049033191445>
JendaLinda
2024-05-10 07:21:06
I will try the advanced options.
2024-05-10 07:32:22
In jpeg optimization in ECT, I discovered a possible improvement. Sometimes I come across jpegs, where luma and chroma use identical quantization tables, so there are two identical copies stored in the file. ECT could compare quantization tables in the file and reduce the duplicates.
2024-05-12 05:28:24
I can manually edit the start-of-frame header so all channels use one copy of the quantization table and ECT will remove the unused copy. Everything seems to work without issues.
jonnyawsom3
2024-05-13 02:53:36
Currently having to 7z all my raw files because for some reason the 'lossless' DNG converter changes the decoded output and always embeds a preview even with the option disabled
2024-05-13 02:55:17
At least it's almost done....
spider-mario
2024-05-13 05:41:49
I must be missing something obvious but how does 7z-ing them solve the problem?
lonjil
2024-05-13 05:43:16
I assume the point of using the lossless converter was to save space
spider-mario
2024-05-13 05:44:29
ah, somehow I assumed that the source raws were not DNGs themselves
jonnyawsom3
2024-05-13 05:52:20
Yeah, it's 529 uncompressed DNG raws that total around 12 GB, I know my phone can read lossless compressed DNGs too, but whenever I try to convert them the colors are shifted and a 200 pixel wide jpeg preview is embedded, so 7z it was...
2024-05-13 05:53:19
Mostly done for redundancy, since I have them on my PC with filesystem compression too, but having them on the phone locally too will be useful if I need them
JendaLinda
2024-05-13 06:45:01
How does 7z compare to Brotli?
username
2024-05-13 07:16:15
more of a question of "How does LZMA2 compare to Brotli?" since 7z is just a container
2024-05-13 07:21:24
funny thing is since 7z is just a container you can use Brotil in a .7z and people have
jonnyawsom3
JendaLinda How does 7z compare to Brotli?
2024-05-13 07:22:06
Original file was 22.5 MB Brotli got 9.24 MB at max compression in 68 seconds 7z is 8.78 MB in 10 seconds (Single file, so not LZMA2's strongsuit either) JXL is 7.42 MB in 3 seconds through the Adobe DNG converter (Although effort settings are ignored, so only 7)
2024-05-13 07:52:53
Also sorry <@98957339243073536> I got distracted doing this :P The DNG converter is a special kind of hell made just for me, almost no documentation, no help command and the order of parameters matter with some being incompatible with no warnings or errors other than "Missing File"
Crite Spranberry
2024-05-14 01:13:34
Hmm, it appears cjpegli quality number for quality number is worse than paint.net jpeg exporter with 4:2:0 However the size of the output is much lower with the same quality number It means I can have a higher or similar apparent quality image with the same or less file size, however I just have to shoot higher with my quality specification
_wb_
2024-05-14 03:14:48
quality scales differ between different software / encoders, e.g. mozjpeg and libjpeg-turbo are also not quite the same
Meow
2024-05-14 03:56:53
Jpegli requires slightly higher
JendaLinda
2024-05-14 07:17:47
Quantization tables in JPEG may optionally use 16 bit constants rather than 8 bit. I wonder why would anybody use 16 bit quantization constants. Quantization constants at 255 are already so strong so the quality is unusable. I see no purpose for higher quantization constants.
LMP88959
2024-05-14 07:24:31
How are the 16 bit constants treated
2024-05-14 07:24:55
I would assume it’s just an expansion of dynamic range to give more precision in the quantization
2024-05-14 07:25:38
I dont think it’s likely the 16 bit values are treated as extensions to the 8 bit quantizers
2024-05-14 07:26:03
E.g i think 65535 maps to 255.0
2024-05-14 07:26:16
But you get finer control over the quant
2024-05-14 07:26:18
<@688076786525143117>
JendaLinda
2024-05-14 07:27:29
It's an extension. Higher values decrease the quality further. The max value is 32767 and this just wipes the image entirely.
LMP88959
2024-05-14 07:27:57
😳lol that’s odd
2024-05-14 07:28:15
Would it possibly not do that if the jpeg had a higher bit depth
JendaLinda
2024-05-14 07:29:41
Perhaps the idea was originally like that.
veluca
LMP88959 I would assume it’s just an expansion of dynamic range to give more precision in the quantization
2024-05-14 07:33:09
you'd *think* so, yeah
LMP88959
2024-05-14 07:34:36
Strange design
lonjil
2024-05-14 08:36:55
12 bit jpeg with 16 bit dct is in the standard afaik
JendaLinda
2024-05-14 08:46:54
In baseline jpeg, quantization tables contain 8 bit constants.
2024-05-14 09:08:06
Now I'm really confused by the 12 bit jpeg thing. There is a bit depth field in the Start-Of-frame marker and it says 8 bits. Even if I take a 16 bit PNG and encode it using cjpegli, it still says 8 bits.
2024-05-14 09:18:54
So my previous testing of supposedly 12 bit jpegs are invalid.
2024-05-14 09:19:24
Both SOF and DQT indicate 8 bits inside jpegs created by cjpegli.
username
2024-05-14 09:21:37
even though 12 bit JPEGs are defined in the official spec pretty much nothing supports them so we are stuck with 8 bit JPEGs because 12 bit ones wouldn't work with software made over the course of decades
2024-05-14 09:23:17
they are incompatible with almost everything because no one thought it was necessary to implement support for them
2024-05-14 09:24:59
that's why jpegli does not do anything related to them
JendaLinda
2024-05-14 09:25:08
That would make sense, but people say jpegs are actually 12 bits.
2024-05-14 09:43:05
So I did another experiment. I took a completely basic grayscale jpeg, decoded it using djpegli to 16 bit PNG a it has indeed more than 256 shades of gray. So these had to come from somewhere.
2024-05-14 09:49:51
This still isn't clear to me how it works exactly, but considering jpeg being 12 bits and observing that 8 bit quant table is enough to completely shred the contents of the image, 16 bit quant table is simply useless and that's my point. 😉
lonjil
JendaLinda That would make sense, but people say jpegs are actually 12 bits.
2024-05-15 02:13:34
8 bit jpegs use 12-bit dct coefficients and 12 bit jpeg uses 16 bit coefficients
JendaLinda
2024-05-15 07:55:59
Ah that makes sense. So it's just overhead to improve precision. I suppose decoders are free to use the full depth of DCT coefficients but most of them didn't do it. Anyway, I think 8 bit quantization tables would be enough for high quality 12 bit jpegs as well. Considering that q=90 the constants are around 20, so for 12 bit, the equivalent would be 80. But I guess they just added the option for those who want to make heavily compressed HDR images.
2024-05-15 09:52:07
Actually I've noticed that cjpegli uses coarser quantization values than cjpeg for chroma, presumably as a choice instead of chroma subsampling. That could actually make use of 16 bit quantization tables.
jonnyawsom3
2024-05-15 11:30:42
It still has chroma subsampling, it just doesn't change based on quality level
JendaLinda
2024-05-15 12:35:20
It's turned off by default.
_wb_
2024-05-15 01:10:53
8-bit jpegs are internally 12-bit, 12-bit jpegs are internally 16-bit. Probably the 16-bit quant tables are only useful for 12-bit jpegs — though I imagine you may want to use high quantization factors for the highest frequencies also for 8-bit jpegs when doing low quality encoding — a factor like 300 or 400 is still meaningful when the coeffs themselves are 12-bit.
JendaLinda
_wb_ 8-bit jpegs are internally 12-bit, 12-bit jpegs are internally 16-bit. Probably the 16-bit quant tables are only useful for 12-bit jpegs — though I imagine you may want to use high quantization factors for the highest frequencies also for 8-bit jpegs when doing low quality encoding — a factor like 300 or 400 is still meaningful when the coeffs themselves are 12-bit.
2024-05-15 01:34:42
Thank you for clarification. djpegli seems to use all 12 internal bits while decoding an "8 bit jpeg" to 16 bit png. I don't see any way to select the "12 bit jpeg" in cjpegli as 16 bit png will encode just into "8 bit jpeg".
_wb_
2024-05-15 01:36:37
yes, jpegli only encodes 8-bit jpeg — 12-bit jpeg is not commonly supported by anything so if you go there, you lose interoperability
2024-05-15 01:37:04
interoperability is the main selling point of jpegli; if you don't care about that, it's better to use jxl instead
JendaLinda
_wb_ yes, jpegli only encodes 8-bit jpeg — 12-bit jpeg is not commonly supported by anything so if you go there, you lose interoperability
2024-05-15 04:44:55
Thank you for explanation. That also explains I could decode jpegs produced by cjpegli with ancient decoders. If both encoder and decoder attempt to use the full 12 bits in 8 bit jpeg, could they reach more precision than 8 bits?
lonjil
2024-05-15 04:50:46
jpegli uses 32-bit floating point math internally
2024-05-15 04:57:06
and I believe libjpeg-turbo uses 16-bit integer math by default actually
JendaLinda
2024-05-15 05:01:06
So in principle it's possible to get higher than 8 bit precision in "8 bit jpeg" if the source is more than 8 bits as well.
lonjil
2024-05-15 05:01:28
it's a bit more complicated than that
2024-05-15 05:01:45
The DCT doesn't result in even precision
2024-05-15 05:02:09
A very noisy 8x8 block will have an effective bit depth that's *lower* than 8 bits.
2024-05-15 05:02:31
While a smooth gradient can have up to 10.5 bits of precision
2024-05-15 05:03:27
12-bit DCT was chosen so that the inherent loss of the DCT wouldn't be *too* bad in any situation. As a side effect it can be better than their goal in other situations.
JendaLinda
2024-05-15 05:03:40
I knew the extra bits gained after decoding a jpeg encoded from 8-bit source are just compression artifacts.
lonjil
2024-05-15 05:04:21
mm
JendaLinda
2024-05-15 05:06:10
One just can't tell if the extra precision is valid or not.
jonnyawsom3
2024-05-15 05:09:03
jpegli tries to make use of that extra precision, since banding is most visible in smooth areas, where the effective bitdepth reaches 10.5
JendaLinda
2024-05-15 05:13:14
Sure it's better to try to use the maximum of the available precision.
2024-05-15 05:20:06
Even the 16 bit quantization tables might be useful in some cases. cjpegli by default uses a few values around 200 in the chroma tables and these could go over 255 in lower quality settings, although 16 bit quantization tables are not compatible with baseline jpeg.
2024-05-17 06:38:56
ECT can save a few bytes in pngs already optimized by oxipng. Although I came across a file that was already perfectly compressed by pngout and ect couldn't improve it. Deflate is simply hit and miss. I'm trying both `--allfilters` and `--allfilters-b` but the latter doesn't seem to do any better. I will continue experimenting.
Fox Wizard
2024-05-17 06:41:47
On what image though? <:thinkies:854271204411572236>
TheBigBadBoy - 𝙸𝚛
2024-05-17 09:03:47
time to blow up our PCs [⠀](https://cdn.discordapp.com/emojis/1194236343220441099.webp?size=48&quality=lossless&name=UwU)
JendaLinda ECT can save a few bytes in pngs already optimized by oxipng. Although I came across a file that was already perfectly compressed by pngout and ect couldn't improve it. Deflate is simply hit and miss. I'm trying both `--allfilters` and `--allfilters-b` but the latter doesn't seem to do any better. I will continue experimenting.
2024-05-17 09:04:54
you know you can use slower compression settings like `-9xxxx` right ? Don't go with `-99999` tho <:KekDog:805390049033191445>
2024-05-17 09:05:10
also, use `--mt-deflate`
JendaLinda
TheBigBadBoy - 𝙸𝚛 also, use `--mt-deflate`
2024-05-17 09:17:27
Didn't know about more 9s, the help suggests just one. --mt-deflate is juts to enable multithreading? oxipng uses multiple threads by default.
TheBigBadBoy - 𝙸𝚛
2024-05-17 09:18:11
yeah --mt-deflate is multithreading, and almost always gives smaller output (than without)
JendaLinda
2024-05-17 09:19:36
Anyway, I don't think it's worth crunching a single image for hours just to save a couple bytes. But I will give it a try juts for fun.
TheBigBadBoy - 𝙸𝚛
2024-05-17 09:22:13
well you could go with simple `-99`, ..., `-90050` they are far from "encoding during hours"
JendaLinda
TheBigBadBoy - 𝙸𝚛 well you could go with simple `-99`, ..., `-90050` they are far from "encoding during hours"
2024-05-17 09:38:11
You mean I'm underestimating?
TheBigBadBoy - 𝙸𝚛
2024-05-17 09:38:57
overestimating [⠀](https://cdn.discordapp.com/emojis/895863009820414004.webp?size=48&quality=lossless&name=av1_thinkies)
JendaLinda
2024-05-17 10:00:16
Just -9 took half an hour.
jonnyawsom3
2024-05-17 10:24:15
With the multithreading it scales almost linearly, and --allfilters-b does add a lot more slowdown in my experience
JendaLinda
2024-05-17 10:37:23
Yay, `-99 --allfilters-b --mt-deflate` have beaten pngout finally.
Fox Wizard
TheBigBadBoy - 𝙸𝚛 you know you can use slower compression settings like `-9xxxx` right ? Don't go with `-99999` tho <:KekDog:805390049033191445>
2024-05-17 11:49:38
Why not? <:KittyLaugh:1126563616343216268>
TheBigBadBoy - 𝙸𝚛
2024-05-17 11:50:02
because **he** does not want to encoding during days <:KekDog:805390049033191445>
2024-05-17 11:50:55
I still need to find what you did to better compress after jpegultrascan [⠀](https://cdn.discordapp.com/emojis/654081052108652544.webp?size=48&quality=lossless&name=av1_Hmmm)
Fox Wizard
2024-05-17 11:51:26
All you need to find out is to donate some pizzas <:KittyPizza:1147750033018605680>
TheBigBadBoy - 𝙸𝚛
2024-05-17 11:51:55
well I can, but you need to go down here lol
2024-05-17 11:52:13
pretty sure it's just Huffman tables
2024-05-17 11:52:23
but then I need to find the right tool
JendaLinda Yay, `-99 --allfilters-b --mt-deflate` have beaten pngout finally.
2024-05-17 11:53:18
why would you even do --allfilters <:KekDog:805390049033191445> that's just a waste of time compared to what you want
Fox Wizard
TheBigBadBoy - 𝙸𝚛 well I can, but you need to go down here lol
2024-05-17 11:54:51
Perhaps someday. Then I do expect one of those XL family pizzas though <:KekDog:884736660376535040>
2024-05-17 11:55:06
~~And the answer to why my jpegs are slightly smaller will disappoint you lmao~~
TheBigBadBoy - 𝙸𝚛
2024-05-17 11:56:12
[⠀](https://cdn.discordapp.com/emojis/890866831047417898.webp?size=48&quality=lossless&name=SadCheems)
jonnyawsom3
2024-05-17 12:18:49
~~JXL Family Pizzas~~
JendaLinda
TheBigBadBoy - 𝙸𝚛 why would you even do --allfilters <:KekDog:805390049033191445> that's just a waste of time compared to what you want
2024-05-17 12:26:07
Because I don't know what I'm doing 😄 I thought allfilters means try all filters, to find the best combination, right? Anyway. Is there any clear explanation, how the level settings -9...99999 works? it seems that different parts of the numbers are assigned to different parameters internally.
TheBigBadBoy - 𝙸𝚛
2024-05-17 12:30:17
yeah allfilters tries all filters obviously, but your saves will be negligible compared to increasing `-9xxxxx` iirc the first number is use for ECT to know which compression "mechanisms" to try and others are number of zopfli (et al.) iterations but I'm not sure
jonnyawsom3
2024-05-17 12:35:47
I think each number corresponds to a different setting inside ECT, based on people changing each digit at a time to get savings rather than just higher number=better
afed
2024-05-17 12:40:26
```-# Select compression level [1-9] (default: 3). For detailed information on performance read Performance.html. Advanced usage: A different syntax may be used to achieve even more compression for deflate compression if time (and efficiency) is not a concern. If the value is above 10000, the blocksplitting-compression cycle is repeated # / 10000 times. If # % 10000 is above 9, level 9 is used and the number of iterations of deflate compression per block is set to # % 10000. If # % 10000 is 9 or below, this number specifies the level. --pal_sort=n Attempt to sort the palette of PNG images. Only has an effect on files where palette may be used. n specifies the number of different strategies tried, the maximum is 120. Multiplies the compression time. --allfilters Try most png filter strategies. Multiplies the compression time. --allfilters-b Try all the filter strategies of allfilters and also the ‘brute force’ genetic filtering, which is even slower. Genetic filtering may be ended by the user, more information on the command line. --allfilters-c Try several png filter strategies. Cheaper than regular allfilters, but still improves compression. --mt-deflate --mt-deflate=n Use several threads to compress png, gzip, and zip files. Multithreading is not used on very small files. If a number is specified, n threads are used, otherwise the number of logical cores is used. May decrease compression ratio. ```
2024-05-17 12:48:59
```fhanau: You could try replacing -10080 with some bigger numbers, e.g. "-20100" or "-30140" or "-50300" or "-60500", although I haven't tested these settings. Note that --mt-deflate may decrease the compression ratio, although this should not happen when using very high settings.``` so there are some balanced values, higher than -9, but not so slow, like: `-20100 -30140 -50300 -60500`, some optimizers use `-30060` as the most optimal one
JendaLinda
afed ```fhanau: You could try replacing -10080 with some bigger numbers, e.g. "-20100" or "-30140" or "-50300" or "-60500", although I haven't tested these settings. Note that --mt-deflate may decrease the compression ratio, although this should not happen when using very high settings.``` so there are some balanced values, higher than -9, but not so slow, like: `-20100 -30140 -50300 -60500`, some optimizers use `-30060` as the most optimal one
2024-05-17 12:53:18
So `-30060` means 3 full cycles of 60 iterations at zlib level 9, if I understand correctly? And `-99` is just 99 iterations at zlib level 9, right?
afed
2024-05-17 12:54:00
seems so
JendaLinda
2024-05-17 12:57:48
Alright. Thank you.
jonnyawsom3
2024-05-17 01:06:36
huh, turns out ECT used to have mp3 support too, but was disabled due to metadata corruption
2024-05-17 01:07:38
It's also 90% if statements for every option https://github.com/fhanau/Efficient-Compression-Tool/blob/master/src/main.cpp
JendaLinda
2024-05-17 01:08:44
Yeah I've tried to read the source but got lost.
2024-05-17 01:25:59
Some people do use `-30060 --allfilters-b --pal_sort=120` together.
afed
2024-05-17 01:31:31
yeah
JendaLinda
2024-05-17 01:43:36
I suppose those heavy settings don't work on jpeg.
2024-05-17 01:56:28
It seems ECT considers only modes 1...5+ in jpeg compression.
2024-05-17 02:01:58
I'm sure that the arrangement of scans and Huffman could be brute forced too.
2024-05-17 02:49:17
So, -99 can be better than -30060
afed
2024-05-17 02:56:25
just -99 probably doesn't work, because it's supposed to be `If the value is above 10000`
TheBigBadBoy - 𝙸𝚛
afed just -99 probably doesn't work, because it's supposed to be `If the value is above 10000`
2024-05-17 03:01:48
-99 does work ```$ ect -9 -gzip --mt-deflate in.gz Processed 1 file Saved 8.16KB out of 8.72MB (0.0914%) $ ect -99 -gzip --mt-deflate in.gz Processed 1 file Saved 27B out of 8.71MB (0.0003%)```, same as -00099, so no blocksplitting-compression cycle repeat
afed
2024-05-17 03:04:10
then maybe `-90099`? or yeah, just -00099
JendaLinda
2024-05-17 03:10:48
Or I could do something like -30100
afed
2024-05-17 03:15:14
seems like higher than 60 there are significant slowdowns without much improvement, so it's not just a random number and also not always higher is better, except for `-99999`
JendaLinda
2024-05-17 03:20:19
-60 couldn't compress the file already optimized by pngout, -99 can.
TheBigBadBoy - 𝙸𝚛
2024-05-17 03:20:58
now, I wonder if going above 9 for blocksplitting-compression cycles would be nice
afed
JendaLinda -60 couldn't compress the file already optimized by pngout, -99 can.
2024-05-17 03:26:17
for some already highly optimized images maybe, but like for typical random images it might not be very optimal or only slightly better with much slower optimization
JendaLinda
2024-05-17 03:26:39
Yeah I suppose -99999 is something like -e 11 in cjxl, you can use it if you want to turn the PC into the space heater.
afed for some already highly optimized images maybe, but like for typical random images it might not be very optimal or only slightly better with much slower optimization
2024-05-17 03:28:12
I've discovered that pngout works the best for flat colored images, where the PNG filter "none" is the optimal filter.
2024-05-17 03:29:42
An these are then hard to compress by anything else.
2024-05-17 03:33:42
PNGs using mixed filters can be usually compressed by oxipng or ect pretty easily.
2024-05-17 06:26:17
According to the documentation, `--mt-deflate` may decrease the compression ratio. Shouldn't it be better to run ECT without multiple threads?
TheBigBadBoy - 𝙸𝚛
2024-05-17 07:08:59
https://tenor.com/view/try-it-and-see-give-it-a-try-try-try-and-see-try-it-yourself-gif-24095805
2024-05-17 07:09:16
But from my tests, --mt-deflate gives almost always a smaller file
2024-05-17 07:09:26
and it's far faster
jonnyawsom3
2024-05-17 07:20:17
If I recall, --mt-deflate tries to guess where block boundaries would be best, and then can multithread based on that as a very nice bonus, but sometimes it won't find any splits and will stay singlethreaded
JendaLinda
2024-05-17 09:12:20
--mt-deflate seems to be indeed slightly better. I don't understand why they tell the opposite in the docs.
2024-05-18 04:17:34
I see, `--mt-deflate` can actually decrease the compression ratio, sometimes it produces a file bigger by 1 byte, that's really significant difference. 😄
Crite Spranberry
2024-05-21 01:26:47
What is the best way to encode a jpeg? It can either be preferably 2160p, but also 1440p or 1080p It needs to be 250KB or less WHat should I use and what settings should I use
2024-05-21 01:27:13
I would prefer lower resolution over weird blocking
username
Crite Spranberry What is the best way to encode a jpeg? It can either be preferably 2160p, but also 1440p or 1080p It needs to be 250KB or less WHat should I use and what settings should I use
2024-05-21 01:28:30
use jpegli which comes with the libjxl binaries: https://artifacts.lucaversari.it/libjxl/libjxl/latest/
2024-05-21 01:28:59
it's `cjpegli`
Crite Spranberry
2024-05-21 01:29:08
I've also heard about mozjpeg
username
2024-05-21 01:29:45
jpegli is intended to surpass mozjpeg
HCrikki
2024-05-21 01:30:23
use XL converter. you can select the desired final size in this app (and downsample/resize first) as well as with the official libjxl's terminal commands for cjpegli
2024-05-21 01:33:21
using distance should be preferable, starting with 0.5 unless you require an exact filesize, try slightly increasing distance values in 0.1-0.2 increments
Crite Spranberry
2024-05-21 03:25:17
Very cool python shit with QT6 awesome
2024-05-21 03:25:40
gotta do the funny
eddie.zato
2024-05-21 03:26:51
`cjpegli` can targeting the size: ``` > cjpegli --target_size=250000 8.png 0.jpg Read 3508x2480 image, 2325205 bytes. Encoding [YUV d1.000 AQ p2 OPT] Compressed to 250164 bytes (0.230 bpp). 3508 x 2480, 15.401 MP/s [15.40, 15.40], , 1 reps, 1 threads. ```
Crite Spranberry
2024-05-21 03:35:23
cursed ass program
2024-05-21 03:35:25
Can't even debug it
JendaLinda
2024-05-21 10:41:00
jpegli uses "RGB jpeg" to store XYB, but is it possile to skip the XYB transform and store RGB diretcly? There are niche use cases, where any color transformation is undesirable. Different quantization tables are also used for each of the XYB channels but "RGB jpegs" usually use the "luma" table for all three channels.
jonnyawsom3
2024-05-21 10:51:03
XYB is opt in, it already doesn't use it by default
lonjil
2024-05-21 10:52:21
but if you don't use XYB, it uses YCbCr
2024-05-21 10:52:32
JendaLinda wants to store RGB
TheBigBadBoy - 𝙸𝚛
2024-05-21 12:19:48
you should be able to use RGB encoding with this arg ``` -x key=value, --dec-hints=key=value color_space indicates the ColorEncoding, see Description(); icc_pathname refers to a binary file containing an ICC profile.```but idk where is that `Description()` <:KekDog:805390049033191445>
JendaLinda
2024-05-21 01:03:45
Will I get RGB with XYB quant tables? 😄
2024-05-21 01:06:07
I think I will be using jpegli only for YCbCr for now.
spider-mario
TheBigBadBoy - 𝙸𝚛 you should be able to use RGB encoding with this arg ``` -x key=value, --dec-hints=key=value color_space indicates the ColorEncoding, see Description(); icc_pathname refers to a binary file containing an ICC profile.```but idk where is that `Description()` <:KekDog:805390049033191445>
2024-05-21 02:15:40
that’s unrelated to RGB vs. YCbCr JPEG, it’s just the colour profile of the de-YCbCr’d-if-needed pixel data
2024-05-21 02:16:11
(sRGB or Display-P3 or ProPhoto or…)
TheBigBadBoy - 𝙸𝚛
2024-05-21 02:16:28
ohhhhh
2024-05-21 02:16:53
[⠀](https://cdn.discordapp.com/emojis/1194236617813147729.gif?size=48&quality=lossless&name=NOTED)
spider-mario
2024-05-21 02:17:34
the format is indeed a bit cryptic but it’s basically a series of 3-character identifiers that specify the type of colourspace (RGB vs. greyscale), the white point, the primaries, the rendering intent and the transfer function
2024-05-21 02:17:46
for example, sRGB with relative rendering intent is `RGB_D65_SRG_Rel_SRG`
2024-05-21 02:18:17
Rec. 2020 + PQ and perceptual rendering intent is `RGB_D65_202_Per_PeQ`
2024-05-21 02:18:41
Display-P3, `RGB_D65_DCI_Rel_SRG`
2024-05-21 02:18:42
etc.
TheBigBadBoy - 𝙸𝚛
2024-05-21 02:21:08
thanks [⠀](https://cdn.discordapp.com/emojis/674256399412363284.webp?size=48&quality=lossless&name=av1_pepelove)
JendaLinda
2024-05-21 03:29:24
I thought this only sets the color profiles but doesn't change the behavior of the encoder. Anyway. XYB requires an ICC profile for decoding. What happens if the source image already uses non standard ICC profile? Will the ICC profiles be somehow merged together? Or can ICC profiles stack on top of each other? Once I came across an image, where there was an error during editing and the ICC profiles had to be applied twice in a row to get the correct colors. This had to be done manually as I didn't find a way to double the strength of the ICC profile.
spider-mario
2024-05-21 03:31:54
if an image with a custom ICC profile is converted to an XYB JPEG, the colours are converted from the colourspace described by that profile to XYB, instead of from sRGB
2024-05-21 03:31:59
it’s nothing fundamentally different
2024-05-21 03:32:34
(although I’m not sure we “scale” XYB to make room for wider gamuts)
JendaLinda
2024-05-21 03:39:01
Ah so the original colors are moved around according to the original ICC profiles already during the conversion to XYB, so the conversion from XYB to RGB doesn't need to take the original ICC profiles into account, right?
spider-mario
2024-05-21 03:42:26
correct
2024-05-21 03:45:10
XYB is absolute and is therefore able to uniquely identify the absolute colours represented by the original pixel data as interpreted using the original ICC profile
JendaLinda
2024-05-21 03:57:48
So there's the advantage of XYB JPEG. Having normalized colors, so no more fiddling with different color profiles. And if something doesn't work correctly, one can tell on the first glance.
_wb_
spider-mario (although I’m not sure we “scale” XYB to make room for wider gamuts)
2024-05-21 05:03:53
Wide gamut just means X and B have a bigger range than what they have when the source is sRGB, just like HDR just means Y has a bigger range than when the source is SDR. More or less.
spider-mario
2024-05-21 05:07:41
right, but for JPEG/ICC, we need to map some specific range of X and B to 0-1, and I have some vague memory of <@179701849576833024> and I doing that for the range spanned by sRGB, but I’m not sure we ever changed the mapping to be dynamic based on source gamut
veluca
2024-05-21 05:08:38
I also have a vague memory of that
_wb_
2024-05-21 07:12:54
Ah, I see. Didn't you just make the range large enough to cover P3 or something? I don't think you need much more for that...
JendaLinda
2024-05-22 04:03:40
People have made animated pixel art movies in gif format that are several minutes in length. Gif apparently can handle animations of hundreds or thousands of frames without problems.
Meow
2024-05-23 03:28:09
https://maskray.me/blog/2024-04-23-when-qoi-meets-xz
yoochan
2024-05-23 08:46:06
can't they compare it to jxl ?
w
2024-05-23 08:51:10
they can only use toy formats
spider-mario
Meow https://maskray.me/blog/2024-04-23-when-qoi-meets-xz
2024-05-23 08:55:01
2024-05-23 08:55:12
(oops, this is larger than I thought)
JendaLinda
2024-05-23 08:58:46
I thought QOI might be useful for embedded system like Arduino or so, but QOI doesn't support low color graphics, so RLE it is.
Meow
spider-mario (oops, this is larger than I thought)
2024-05-23 09:50:52
Yep the results aren't that impressive when comparing to BMP or TIFF
JendaLinda
2024-05-23 01:22:13
I thought PCX might have been a fair comparison.
Meow
2024-05-23 03:31:24
HEIC should be tested as well
JendaLinda
2024-05-23 03:54:19
Alright, here goes HEIC as "near lossless" ` Image 1 20009 bytes Image 2 27925 bytes Image 3 117341 bytes ` No idea what settings Gimp uses.
Meow
2024-05-23 03:56:01
Tested grayscale before and HEIC was the biggest
JendaLinda
2024-05-23 03:57:39
HEIC is completely broken in Winddows 11. It decodes as white rectangle.
2024-05-23 04:17:10
I did some tests with jpegli. Even at distance 0.5 jpegli tends to blur chroma so it has similar effect as choma subsampling. I think at very short distances chroma shouldn't be blurred that much.
lonjil
2024-05-23 05:15:41
Just like libjxl did?
JendaLinda
2024-05-23 05:41:29
I'm not sure but does the typical decrease in color saturation around black lines.
Cool Doggo
Meow https://maskray.me/blog/2024-04-23-when-qoi-meets-xz
2024-05-23 06:19:37
does this not just ruin the point of using qoi in the first place?
Meow
2024-05-23 06:50:34
Better to compare the speeds as well
Demiurge
2024-05-24 01:58:47
QOI is a nice experimental pilot in designing simpler data formats that don't require years of study to understand. Hopefully its shortcomings can one day be addressed in a way that doesn’t make it substantially more complex. Perhaps a qoi2
2024-05-24 01:59:50
There is clearly real demand and value in simplicity
LMP88959
2024-05-24 02:32:28
if anything it is a great way for people to get into compression
2024-05-24 02:32:31
c:
yoochan
2024-05-24 05:13:44
A great toy project... But if a more complex format can compress better and faster, it means simplicity is not the only meaningful criteria
Meow
Demiurge QOI is a nice experimental pilot in designing simpler data formats that don't require years of study to understand. Hopefully its shortcomings can one day be addressed in a way that doesn’t make it substantially more complex. Perhaps a qoi2
2024-05-24 08:18:20
The author clearly announced that version 1.0 is the final
2024-05-24 08:19:01
There have been many forks however
username
2024-05-24 08:33:47
the QOI format supports other colorspaces but the spec only defines sRGB and nothing else which sucks https://qoiformat.org/qoi-specification.pdf
Meow
2024-05-24 09:14:24
GameMaker has implemented QOI for long time
username
2024-05-24 09:16:15
Google Earth Pro has QOI support strangely enough
Meow
username Google Earth Pro has QOI support strangely enough
2024-05-24 09:46:00
For what...?
Demiurge
2024-05-24 09:47:36
I think people want formats that are simple yet good enough. Only time simplicity should be sacrificed is if it leads to significant benefits and it usually doesn't. For example, most of the bitstream features of jpegxl, like spline detection and removal, or detection and separation of an image into multiple layers for more efficient encoding, are probably not going to be used by any actual encoder any time soon because of the work and complexity involved
2024-05-24 09:52:25
Even though theoretically it could improve quality and efficiency of lossy a lot, and layer detection might even benefit lossless encoding by for example detecting and separating solid shapes and gradients
lonjil
2024-05-24 09:53:01
if you want something simple just use png
Demiurge
2024-05-24 09:53:20
I think qoi was made because png isn't simple
lonjil
2024-05-24 09:55:16
it's just throwing bytes into Deflate
Demiurge
2024-05-24 09:55:42
No, That would be farbfeld
2024-05-24 09:55:59
:)
lonjil
2024-05-24 09:56:05
yeah yeah it has headers and a tiny bit of filtering too, big deal
2024-05-24 09:56:39
just use ppm.gz if you want something extra simple
w
2024-05-24 09:57:27
png deflate is already way simpler and better than qoi
2024-05-24 09:57:30
people dont know what they want
Demiurge
2024-05-24 09:58:15
Someone wanted something even simpler but still good enough for their purposes, unfortunately they left some very low hanging fruit on the table probably
2024-05-24 10:03:00
Like for a lossless format it would be nice to store HDR images, floats, and both types of alpha
username
Meow For what...?
2024-05-24 10:04:41
for exporting in the "movie maker", QOI was added in version 7.3.6 https://support.google.com/earth/answer/40901
3DJ
2024-05-24 10:04:53
Anyone know how to get the ffmpeg encoder commands used in a video? Like I wanna replicate the encoding from one video to apply it to another file
yoochan
2024-05-24 10:41:02
the question is unclear ... what did you tried ?
2024-05-24 10:41:39
(and this discord have users and fans of ffmpeg but we are more versed into still images)
w
2024-05-24 10:42:30
real answer is you can only do that if the person tagged the video with the commands
2024-05-24 10:42:36
so you just look at the tags
Demiurge
2024-05-24 11:27:25
the settings are not automatically stored in the tags anywhere at least for most codecs
2024-05-24 11:27:33
Afaik
Meow
username for exporting in the "movie maker", QOI was added in version 7.3.6 https://support.google.com/earth/answer/40901
2024-05-24 12:07:34
Uh I didn't know this so-called "Movie Maker" either
damian101
Demiurge Someone wanted something even simpler but still good enough for their purposes, unfortunately they left some very low hanging fruit on the table probably
2024-05-24 03:22:28
Does it internally convert to YCoCg-R for lossless compression? Because that's usually some very cheap compression gain...
JendaLinda
2024-05-24 06:03:13
Nothing beats RLE in simplicity.
TheBigBadBoy - 𝙸𝚛
2024-05-26 12:28:35
<@219525188818042881> by any chance, do you know a Webp optimizer other than cwebp ? I don't even know if lossy-webp files can be losslessly recompressed [⠀](https://cdn.discordapp.com/emojis/654081052108652544.webp?size=48&quality=lossless&name=av1_Hmmm)
Fox Wizard
TheBigBadBoy - 𝙸𝚛 <@219525188818042881> by any chance, do you know a Webp optimizer other than cwebp ? I don't even know if lossy-webp files can be losslessly recompressed [⠀](https://cdn.discordapp.com/emojis/654081052108652544.webp?size=48&quality=lossless&name=av1_Hmmm)
2024-05-26 01:44:20
No sadly. I never really use WebP
2024-05-26 01:46:04
Pingo claims it can optimize it, but haven't tried it yet
TheBigBadBoy - 𝙸𝚛
2024-05-26 01:51:51
oh, gonna try it thx
Fox Wizard Pingo claims it can optimize it, but haven't tried it yet
2024-05-26 03:14:29
only thing it can is to convert PNG (perhaps others?) to Webp <:kekw:808717074305122316>
Fox Wizard
TheBigBadBoy - 𝙸𝚛 only thing it can is to convert PNG (perhaps others?) to Webp <:kekw:808717074305122316>
2024-05-26 03:20:57
Should also be able to optimize lossless webp
2024-05-26 03:22:08
Or well, may or may not result in smaller files than cwebp. Might try if it's any better when I'm home <:KekDog:884736660376535040>
2024-05-26 03:22:39
~~I would be disappointed if it's much worse than cwebp lmao~~
TheBigBadBoy - 𝙸𝚛
Fox Wizard Should also be able to optimize lossless webp
2024-05-26 03:24:07
well at least on my end it keeps crashing for webp input
2024-05-26 03:24:30
but perhaps bc of wine/linux
Fox Wizard
2024-05-26 03:24:34
Lmao
2024-05-26 03:25:08
Wouldn't be that surprised if it only supports png and jpg input
2024-05-26 03:29:54
Oh hey, I'm pretty close to your freezer where your pizzas are
TheBigBadBoy - 𝙸𝚛
2024-05-26 03:36:46
[⠀](https://cdn.discordapp.com/emojis/853492103145324554.webp?size=48&quality=lossless&name=woag)
JendaLinda
2024-05-27 02:38:44
Why do people still use Windows icons in bitmap format? PNG icons are supported since Windows Vista. It would make sense if the programs ran on Windows XP as well.
2024-05-27 02:40:46
In Gimp, it's just a matter of a checkbox.
username
2024-05-27 02:45:55
most programs and tools only output Windows XP compatible .ico files and the people making .ico files don't know the history or features of them and just see ico files as a collection of multiple images in different sizes and nothing else and I've also seen instances where people don't even know that
2024-05-27 02:48:51
Windows XP compatible in the sense that only the higher resolution sizes that aren't supported by XP are PNG while everything else is bitmap although I have seen some cases where every size is bitmap but that's pretty rare
2024-05-27 02:50:00
also I would highly recommend these tools when doing work with pre-existing ico files: https://github.com/jtippet/IcoTools
JendaLinda
2024-05-27 02:50:22
I don't know what software people use for drawing icons. It's apparently two decades behind.
2024-05-27 02:51:06
Discord is one example where all icon sizes are in bitmap format.
username
2024-05-27 02:51:32
GIMP is one of the only existing pieces of software that allows deciding what is and isn't a PNG
2024-05-27 02:52:05
even programs dedicated to icons don't support making lower sizes PNG
2024-05-27 02:52:45
it's a suprsisingly rare feature for software that allows creation of ico files
2024-05-27 02:55:33
also Discord is a beacon for everything not to do when making software
2024-05-27 02:57:34
so I'm not surprised they somehow managed to make a horrible ico file that's worse then what almost every single piece of software outputs
2024-05-27 02:58:33
kinda like how they somehow managed to break one of the core fundamentals of Chromium's/Electron's architecture
2024-05-27 02:59:19
and also how every single time you open Discord it wastes disk writes re-creating the same PNG files
JendaLinda
username also I would highly recommend these tools when doing work with pre-existing ico files: https://github.com/jtippet/IcoTools
2024-05-27 03:01:50
This looks great. I was making some icons some time ago and I had to write my own tool to pack the pngs into ico.
2024-05-27 03:03:57
Gimp could make png icons but there were not thoroughly optimized.
Demonik
username kinda like how they somehow managed to break one of the core fundamentals of Chromium's/Electron's architecture
2024-05-28 03:21:02
what exactly? while I hate electron I need more things to hate about discord
username
Demonik what exactly? while I hate electron I need more things to hate about discord
2024-05-28 03:27:12
one of Chromium's main design points is it's multi-process architecture and one of it's core intentions/benefits is stability where if one of the non-main processes crashes or goes down then it can just be restarted without taking down the whole application however Discord somehow manages to break this, Go to pretty much any Chromium based browser or Electron based app and try killing the GPU process and watch as they all recover just fine meanwhile with Discord the entire thing goes down.
2024-05-28 03:28:58
Discord is one of the worst pieces of software yet it's on a very **very** very large amount of people's computers and is used every single day
2024-05-28 03:32:36
the total combined amount of computer resources that have been wasted with all of Discord's incompetence must be astronomical
Demonik
username Discord is one of the worst pieces of software yet it's on a very **very** very large amount of people's computers and is used every single day
2024-05-28 03:42:16
that I can agree with
2024-05-28 03:43:12
although I would say that applies to nearly every piece of electron based software (except Code), but discord manages to stand out even amongst them
username
2024-05-28 03:44:13
yeah Discord goes above and beyond to not just be Electron levels of bad but somehow even worse
Demonik
username the total combined amount of computer resources that have been wasted with all of Discord's incompetence must be astronomical
2024-05-28 03:44:16
I just recently got a new PC and it's incredible for me to see discord use more CPU AND GPU than Doom Eternal at maxed settings with raytracing <:facepalm:884892069225717840>
spider-mario
2024-05-28 03:45:02
odd, I’ve never observed anything like that
2024-05-28 03:45:30
I don’t use its video streaming features much, though
username
2024-05-28 03:48:22
one of the other bad things about Discord is that every single time it updates Windows considers it a different program meaning that stuff like data usage and tray preferences get a new/different entry or reset
Demonik
2024-05-28 03:48:43
ah, yeah, I also have to add it to VPN every time as well
2024-05-28 03:48:55
because it just creates new folder for every update
2024-05-28 03:49:19
even worse it sometimes moves between ProgramData and AppData between updates randomly
2024-05-28 03:49:31
for no apparent reason
username
Demonik because it just creates new folder for every update
2024-05-28 03:50:50
I think Chromium based browsers have a similar update procedure yet don't have the same problem(s)
2024-05-28 03:51:24
there's probably some extra steps that they do that Discord just flat out doesn't
2024-05-28 03:52:45
this is awful.....
JendaLinda
username one of the other bad things about Discord is that every single time it updates Windows considers it a different program meaning that stuff like data usage and tray preferences get a new/different entry or reset
2024-05-29 07:43:32
Ah so that's why Discord icon in system tray is still moving to hidden icons. Discord was also disguised as Github updater in the startup program list, at some point.
Demiurge
2024-05-30 05:56:27
Um... Hot take but personally I think if you're foolish enough to think it's a good idea to "install" discord in the first place you kinda deserve what you have coming to ya...
2024-05-30 05:57:43
I can't believe so many of you apparently didn't see anything wrong with doing so.
2024-05-30 05:58:58
You should just have 1 browser window for all of your electron-based apps.
Quackdoc
2024-05-30 05:59:13
well at least dissent is comming eventually
2024-05-30 05:59:17
its mostly usable
JendaLinda
2024-05-30 07:59:27
Have you heard about JPEG Quant Smooth? It does pretty good job cleaning non-photo images that were "accidentally" saved as jpegs.