|
spider-mario
|
2025-05-09 11:06:19
|
well, not on its own, it seems
|
|
2025-05-09 11:06:37
|
but maybe now it will be better adjustable
|
|
2025-05-09 11:30:23
|
yees, it aligns very well now
|
|
2025-05-09 11:32:13
|
(that might make it sound like more thorough testing than it is)
|
|
|
spider-mario
at the cost of disturbing existing users of the flag (by a constant factor, though, so easily adjusted)
|
|
2025-05-09 11:38:50
|
“by a constant factor” was a brain fart – there might not be a direct correspondence
|
|
|
JesusGod-Pope666.Info
|
2025-05-10 06:32:59
|
I don't think this command exist: --ignore-gain-map
|
|
2025-05-10 06:33:04
|
don't seem it is legit.
|
|
|
TheBigBadBoy - 𝙸𝚛
|
|
A homosapien
Here ya go, I used this model: https://openmodeldb.info/models/1x-Bendel-Halftone
With this software: https://github.com/chaiNNer-org/chaiNNer
|
|
2025-05-10 07:17:37
|
it indeed works quite well
unfortunately it is not keeping all the details
|
|
2025-05-10 07:18:06
|
here it is loosing some grass
|
|
2025-05-10 07:18:26
|
the complete scan for reference (should have sent it earlier...)
|
|
2025-05-10 08:05:37
|
so I searched for quite some time, at first I did not know this was called halftone <:KekDog:805390049033191445>
seems like `descreen` filter from G'MIC-Qt for GIMP is quite nice, got me that:
|
|
2025-05-10 08:06:10
|
not completely removed, but keeps all the details
|
|
2025-05-10 08:10:48
|
I can't say which one I prefer between 1x-Bendel-Halftone and descreen lol
|
|
|
A homosapien
|
2025-05-10 09:22:39
|
Run the descreen result through an anime AI upscaler, it retains the small details while removing the noise
|
|
2025-05-10 09:25:43
|
Here is an example
|
|
|
JesusGod-Pope666.Info
|
2025-05-10 01:32:49
|
Processing completed: Screenshot 2014-09-13 15.36.38.png [202/]
Processing the image: *.webp [203/]
ERROR: unrecognized option --ignore-gain-map
|
|
|
𝕰𝖒𝖗𝖊
|
|
JesusGod-Pope666.Info
Processing completed: Screenshot 2014-09-13 15.36.38.png [202/]
Processing the image: *.webp [203/]
ERROR: unrecognized option --ignore-gain-map
|
|
2025-05-10 01:39:12
|
AFAIK, webp does not support gain maps. Maybe that's why
|
|
|
Jyrki Alakuijala
|
|
Oh, so JXL had the noise first and it was ported to AVIF?
|
|
2025-05-10 01:48:16
|
https://arxiv.org/pdf/1803.09165 this work was done before AVIF format was scratched up, of course AV1 was thinking about noise before this, but imho, they parameterized other things that are interesting for image compression
|
|
|
spider-mario
no, the spectrum is whatever https://github.com/libjxl/libjxl/blob/77cd542df9714955e35e4b1515682da651157cc7/lib/jxl/dec_noise.cc generates, and it’s mostly achromatic
|
|
2025-05-10 01:52:00
|
I chose to keep the noise achromatic even though physical processes tend to create more R-G axis noise than luma -- this was by observing how photographers introduce noise into their creations, there were no youtube videos of how to add r-g or b-y noise, only luma, and there were quite a few videos on how to get rid of any chromacity noise, and the golden standard to create 'noisy' real looking photos was to add luma noise only and to complete remove chroma noise
|
|
2025-05-10 01:52:43
|
or, iirc, there is a tiny bit of chromacity in the noise synthesis according to "my good taste" at that time
|
|
2025-05-10 01:53:24
|
I didn't want to parameterize it as I am not a great friend of believing into super complex configurable systems -- better to build a simple system that 'just works'
|
|
2025-05-10 01:53:47
|
if people need something complex they can still store it into an image or create an additional layer having those properties and blend it in ...
|
|
2025-05-10 01:55:02
|
a photographer friend (who was a global-level fashion photographer ~10 years ago) used a stock image of a 256x256 tile that they used to create a credible grain noise pattern -- they had obtained it by photographing an empty film
|
|
|
jonnyawsom3
|
|
Jyrki Alakuijala
https://arxiv.org/pdf/1803.09165 this work was done before AVIF format was scratched up, of course AV1 was thinking about noise before this, but imho, they parameterized other things that are interesting for image compression
|
|
2025-05-10 02:22:13
|
A good read. Is that what `--noise 1` does in cjxl?
|
|
|
RaveSteel
|
2025-05-10 03:48:24
|
I think that flag only works if you specify photon noise too?
|
|
|
spider-mario
|
2025-05-10 03:54:39
|
nah, it predates photon noise
|
|
|
jonnyawsom3
|
2025-05-10 04:30:56
|
Did a quick test encode, definitely more chroma noise in the original and larger 'chunks' for lack of a better term, but not bad.
Original, `-d 3`, `-d 3 --noise 1`
|
|
|
JesusGod-Pope666.Info
|
2025-05-10 08:11:26
|
I think I sorted it:
|
|
2025-05-10 08:11:29
|
for i in *.{png,jpg,jpeg,webp}; do ((current++)); echo "Processing the image: ${i} [$current/$total]";
avifenc -a tune=iq -q 60 -d "10" -y "444" -s "0" "${i}" "new_${i%.*}.avif";
echo "Processing completed: ${i} [$current/$total]"; done
|
|
2025-05-10 08:12:58
|
for i in *.{png,jpg,jpeg,webp}; do ((current++)); echo "Processing the image: ${i} [$current/$total]";
avifenc -a tune=iq -q 60 -d "10" -y "444" -s "0" --ignore-xmp --ignore-exif "${i}" "new_${i%.*}.avif";
echo "Processing completed: ${i} [$current/$total]"; done
|
|
2025-05-10 08:17:15
|
It seems to work now, with all pictures.
|
|
2025-05-10 08:17:34
|
In one folder.
|
|
2025-05-10 08:17:46
|
Now I guess I have to find out the subfolder thing and run it.
|
|
2025-05-10 08:18:05
|
tune=iq don't really know about the different settings.
|
|
2025-05-10 08:18:16
|
But I guess it is less.......
|
|
2025-05-10 08:18:24
|
of an issue maybe.
|
|
2025-05-10 08:29:17
|
hmmmmm
|
|
|
AccessViolation_
|
|
Jyrki Alakuijala
I chose to keep the noise achromatic even though physical processes tend to create more R-G axis noise than luma -- this was by observing how photographers introduce noise into their creations, there were no youtube videos of how to add r-g or b-y noise, only luma, and there were quite a few videos on how to get rid of any chromacity noise, and the golden standard to create 'noisy' real looking photos was to add luma noise only and to complete remove chroma noise
|
|
2025-05-10 09:53:43
|
when noise reduction is set to 'low' on my canon mirrorless, it doesn't seem to 'reduce' noise, instead it replaces RGB noise with luma noise. the higher noise reduction settings do start attempting to remove the noise.
I can get behind your decision, personally I'm a big fan of luma noise, it can add so much to the atmosphere of an image. I don't like how RGB noise looks at all
|
|
2025-05-10 09:56:52
|
hence also my message that started off this topic; viewing an image at a scaled down size causes the averaging filter remove the noise, changing the vibe of the image. I want to see if I can extract the luma noise and have the image viewer apply just the noise at a constant scale regardless of the scale of the image itself, so that no matter how small the image is, it'll always look the intended level of noisy
|
|
2025-05-10 10:03:43
|
I live for images like this
https://cdn.discordapp.com/attachments/151482247424376832/1335584728757043220/otdzarzwtrc41.png?ex=68209535&is=681f43b5&hm=2255d07344857bb77a362d85851244cc7118228f5cdc4a75f3ff429e366c011f&
|
|
|
jonnyawsom3
|
|
AccessViolation_
when noise reduction is set to 'low' on my canon mirrorless, it doesn't seem to 'reduce' noise, instead it replaces RGB noise with luma noise. the higher noise reduction settings do start attempting to remove the noise.
I can get behind your decision, personally I'm a big fan of luma noise, it can add so much to the atmosphere of an image. I don't like how RGB noise looks at all
|
|
2025-05-10 10:07:23
|
I just realised, *technically* you can still get Chroma noise
|
|
2025-05-10 10:07:33
|
Set way too high for this image, but just to demo
|
|
2025-05-10 10:08:23
|
Lossless disables XYB, but the noise is still encoded as XYB, causing RB noise. Could probably be done for lossy using a dummy lossless layer but I don't have the tools for it
|
|
|
AccessViolation_
|
2025-05-10 10:08:59
|
<:galaxybrain:821831336372338729>
|
|
2025-05-10 10:12:05
|
hmm I wonder if you could create rgb noise in jxl by putting a copy of the r,g,b channels from an image into individual layers, then applying luma noise to those, then patching those back on to the original image
|
|
2025-05-10 10:13:35
|
maybe with the right combination of blend modes. it'd be very hacky though
|
|
|
jonnyawsom3
|
2025-05-10 10:16:51
|
Also, vaguely related. <@207980494892040194> I stumbled across this https://discord.com/channels/794206087879852103/804324493420920833/1192234113223102535
Combined with this https://kampidh.com/whyjxl, maybe the real blue noise is the dithering we made along the way
|
|
|
AccessViolation_
hmm I wonder if you could create rgb noise in jxl by putting a copy of the r,g,b channels from an image into individual layers, then applying luma noise to those, then patching those back on to the original image
|
|
2025-05-10 10:17:35
|
Depending on the parameters, we might still be able to make some chroma noise https://discord.com/channels/794206087879852103/794206087879852106/1370760471140896771
|
|
|
AccessViolation_
|
2025-05-10 10:25:33
|
thinking of nefarious possibilities like creating an image viewer that intentionally falsely assumes every jpeg xl image is requesting a lot of noise to be added
|
|
2025-05-10 10:27:32
|
ooo, anti AI training measure! add a bunch of noise to the jxl images present on your website, but use a custom Wasm based decoder to render them that ignores the noise parameter completely. when the images are scraped and eventually decoded, they'll get the variants with the noise and it might not be immediately obvious that they can ignore the noise parameter to get the original back
|
|
2025-05-10 10:41:42
|
wait, JXL's noise is fixed-pattern right? so two images will have identical noise patterns where they overlap? if true that makes it so much better
|
|
2025-05-10 10:43:07
|
because I think in AI model training, the noise would usually just average out to nothing in the end, but if every JXL image that's protected this way has the same noise pattern they're going to "constructively interfere" and actually be captured in the image generation model
|
|
|
jonnyawsom3
|
2025-05-10 10:43:26
|
I've wanted a djxl option to ignore noise for quite a while. Wanted to explore lossless encoding without needing an entire second image/frame for the clean version. Though the XYB noise means it's a bit... Messy
|
|
|
AccessViolation_
wait, JXL's noise is fixed-pattern right? so two images will have identical noise patterns where they overlap? if true that makes it so much better
|
|
2025-05-10 10:44:55
|
It uses a LUT to modulate the noise, the current default is to mimic Luma photon noise
|
|
|
AccessViolation_
|
2025-05-10 10:45:52
|
but the base difference between the noise in this pixel and the next is based on a fixed-seed SRNG no?
|
|
|
jonnyawsom3
|
2025-05-10 11:12:05
|
You gave me an idea :P
```Width 1024
Height 1024
XYB
Noise 0.99 0.99 0.99 0.99 0.99 0.99 0.99 0.99
if g > 0
- Set 0
- Set 0```
|
|
|
|
embed
|
|
You gave me an idea :P
```Width 1024
Height 1024
XYB
Noise 0.99 0.99 0.99 0.99 0.99 0.99 0.99 0.99
if g > 0
- Set 0
- Set 0```
|
|
2025-05-10 11:12:10
|
https://embed.moe/https://cdn.discordapp.com/attachments/794206087879852106/1370901237792378882/art.jxl?ex=68212ec5&is=681fdd45&hm=3c786218b5fafbb0281901cdf5f3b6edc956f95289392920ef12e8c953e05e66&
|
|
|
jonnyawsom3
|
2025-05-10 11:12:26
|
I forgot you can use noise in JXL art
|
|
|
JesusGod-Pope666.Info
|
2025-05-11 08:00:21
|
Seems this might work for multiple folders - although only for png files at the moment, have to figure out to fix multiple without it breaking - but it seems like it is working:
find . -name "*.png" | parallel avifenc -a tune=iq -q 60 -d 10 -y 444 -s 0 --ignore-xmp --ignore-exif {} {.}.avif;
|
|
2025-05-11 08:15:00
|
|
|
2025-05-11 12:03:08
|
Is there a way to have it choose multiple picture formats?
|
|
2025-05-11 12:03:18
|
find . -name "*.jpg" | parallel avifenc -a tune=iq -q 60 -d 10 -y 444 -s 0 --ignore-xmp --ignore-exif {} {.}.avif;
|
|
2025-05-11 12:03:40
|
and an input and output folder with the subfolders.
|
|
2025-05-11 12:05:45
|
darkijah<@892795132531838997>-USBSSD:~/downloads/images/D--Book images$ find . -name "*.jpg,jpeg,png,webp" | parallel avifenc -a tune=iq -q 60 -d 10 -y 444 -s 0 --ignore-xmp --ignore-exif {} {.}.avif;
darkijah<@892795132531838997>-USBSSD:~/downloads/images/D--Book images$ find . -name *.{png,jpg,jpeg,webp} | parallel avifenc -a tune=iq -q 60 -d 10 -y 444 -s 0 --ignore-xmp --ignore-exif {} {.}.avif;
find: paths must precede expression: `Frontpage1845.jpg'
find: possible unquoted pattern after predicate `-name'?
darkijah<@892795132531838997>-USBSSD:~/downloads/images/D--Book images$ find . -name *.{png,jpg,jpeg,webp}; | parallel avifenc -a tune=iq -q 60 -d 10 -y 444 -s 0 --ignore-xmp --ignore-exif {} {.}.avif;
bash: syntax error near unexpected token `|'
darkijah<@892795132531838997>-USBSSD:~/downloads/images/D--Book images$ find . -name "*.{png,jpg,jpeg,webp}" | parallel avifenc -a tune=iq -q 60 -d 10 -y 444 -s 0 --ignore-xmp --ignore-exif {} {.}.avif;
darkijah<@892795132531838997>-USBSSD:~/downloads/images/D--Book images$
|
|
2025-05-11 12:06:17
|
I don't know
|
|
2025-05-11 12:34:05
|
lets try this: find . \( -iname "*.png" -o -iname "*.webp" -o -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.bmp" \) \
| parallel avifenc -a tune=iq -q 60 -d 10 -y 444 -s 0 --ignore-xmp --ignore-exif {} {.}.avif
|
|
2025-05-11 12:34:25
|
althouigh tried to make an input output thing but did not work.
|
|
2025-05-11 02:57:41
|
darkijah<@892795132531838997>-USBSSD:~/downloads/images/M--Images/webp$ for i in *.webp; do ((current++)); echo "Processing the image: ${i} [$current/$total]";
avifenc -a tune=iq -q 60 -d 10 -y 444 -s 0 --ignore-xmp --ignore-exif "${i}" "new_${i%.*}.avif";
echo "Processing completed: ${i} [$current/$total]"; done
Processing the image: 037bfe49-5b6b-4f1e-b319-1ff37f039b90.webp [1/]
Unrecognized file format for input file: 037bfe49-5b6b-4f1e-b319-1ff37f039b90.webp
Cannot read input file: 037bfe49-5b6b-4f1e-b319-1ff37f039b90.webp
Processing completed: 037bfe49-5b6b-4f1e-b319-1ff37f039b90.webp [1/]
Processing the image: 04-19-05.webp [2/]
Unrecognized file format for input file: 04-19-05.webp
Cannot read input file: 04-19-05.webp
Processing completed: 04-19-05.webp [2/]
Processing the image: 0c4th5s2y0g71.webp [3/]
Unrecognized file format for input file: 0c4th5s2y0g71.webp
Cannot read input file: 0c4th5s2y0g71.webp
Processing completed: 0c4th5s2y0g71.webp [3/]
Processing the image: 16228.webp [4/]
Unrecognized file format for input file: 16228.webp
|
|
2025-05-11 02:58:00
|
It seems to have issues with webp file formates?
|
|
2025-05-11 03:03:23
|
darkijah<@892795132531838997>-USBSSD:~/downloads/test/New Folder$ avifenc -q 60 "The world councils by Ian Paysley.webp" output.avif
Unrecognized file format for input file: The world councils by Ian Paysley.webp
Cannot read input file: The world councils by Ian Paysley.webp
|
|
2025-05-11 03:03:48
|
It can't do webp files???
|
|
2025-05-11 03:08:20
|
Is this buld not made with webp support?
|
|
2025-05-11 03:08:26
|
build
|
|
2025-05-11 03:15:27
|
Hoew retarded is that..... if it does not support webp
|
|
2025-05-11 03:22:35
|
It literally heals some of the jpg damage
|
|
2025-05-11 03:22:54
|
|
|
2025-05-11 03:23:04
|
|
|
2025-05-11 03:23:38
|
Much of the jpeg noise is gone.
|
|
2025-05-11 03:34:13
|
So is there a way to combile it with webp support?
|
|
|
RaveSteel
|
2025-05-11 04:09:26
|
No, supporting webp would require coding effort on your part
|
|
|
JesusGod-Pope666.Info
|
2025-05-11 04:34:49
|
sucks
|
|
2025-05-11 04:35:26
|
how can a so popular format not be supported.
|
|
2025-05-11 04:35:35
|
is png not lossless?
|
|
2025-05-11 04:36:37
|
for i in *.webp; do
((current++));
echo "Processing the image: ${i} [$current/$total]";
dwebp "${i}" -o "new_${i%.*}.png" -lossless;
echo "Processing completed: ${i} [$current/$total]";
done
I thought it was lossless by default
|
|
2025-05-11 04:37:19
|
darkijah<@892795132531838997>-USBSSD:~/downloads/test/New Folder$ for i in *.webp; do ((current++)); echo "Processing the image: ${i} [$current/$total]";
dwebp "${i}" -o "new_${i%.*}.png";
echo "Processing completed: ${i} [$current/$total]"; done
Processing the image: H264-VP9-AV1-Quality.webp [3/]
Decoded H264-VP9-AV1-Quality.webp. Dimensions: 1000 x 438 . Format: lossy. Now saving...
Saved file new_H264-VP9-AV1-Quality.png
Processing completed: H264-VP9-AV1-Quality.webp [3/]
Processing the image: The world councils by Ian Paysley.webp [4/]
Decoded The world councils by Ian Paysley.webp. Dimensions: 300 x 420 . Format: lossy. Now saving...
Saved file new_The world councils by Ian Paysley.png
Processing completed: The world councils by Ian Paysley.webp [4/]
|
|
|
RaveSteel
|
2025-05-11 04:47:34
|
PNG is in 99.99% of cases lossless, yes
|
|
|
JesusGod-Pope666.Info
|
2025-05-11 04:51:13
|
for i in *.webp; do
((current++));
echo "Processing the image: ${i} [$current/$total]";
convert "${i}" -quality 100 "new_${i%.*}.png"; # Enforcing lossless conversion (100 quality)
echo "Processing completed: ${i} [$current/$total]";
done
|
|
2025-05-11 04:51:54
|
ahh I guess it is the webp that is lossy.
|
|
2025-05-11 05:22:24
|
how do I maximised compression of png?
|
|
|
CrushedAsian255
|
|
JesusGod-Pope666.Info
how do I maximised compression of png?
|
|
2025-05-11 05:22:45
|
oxipng -o max
|
|
|
JesusGod-Pope666.Info
|
2025-05-11 05:23:51
|
with what app?
|
|
|
CrushedAsian255
oxipng -o max
|
|
2025-05-11 05:24:23
|
a little example would be nice.
|
|
|
CrushedAsian255
|
|
JesusGod-Pope666.Info
with what app?
|
|
2025-05-11 05:24:40
|
https://github.com/shssoichiro/oxipng
|
|
2025-05-11 05:24:44
|
It’s a command line tool
|
|
|
JesusGod-Pope666.Info
|
2025-05-11 05:29:44
|
Yea I kinda guessed that.
|
|
2025-05-11 05:30:50
|
the AVIF is 6KB better then the webp.... although not sure about the difference in the quality. Most likely not noticeble at all.
|
|
|
spider-mario
|
2025-05-11 05:43:17
|
FYI your console output will be better formatted (and retain its `*`) if you write it as (let’s hope I don’t mess up the nesting):
```markdown
```console
for i in *.webp; do
((current++));
echo "Processing the image: ${i} [$current/$total]";
convert "${i}" -quality 100 "new_${i%.*}.png"; # Enforcing lossless conversion (100 quality)
echo "Processing completed: ${i} [$current/$total]";
done
```
```
|
|
2025-05-11 05:43:45
|
well, I tried
|
|
2025-05-11 05:44:06
|
the final triplet of ` should have been inside the block
|
|
2025-05-11 05:44:34
|
you can use `bash` for pure bash code or `console` when it’s a mixture of prompts, commands and program output
|
|
2025-05-11 05:44:59
|
this example with `bash` looks like this:
```bash
for i in *.webp; do
((current++));
echo "Processing the image: ${i} [$current/$total]";
convert "${i}" -quality 100 "new_${i%.*}.png"; # Enforcing lossless conversion (100 quality)
echo "Processing completed: ${i} [$current/$total]";
done
```
|
|
|
JesusGod-Pope666.Info
|
2025-05-11 06:03:16
|
*Processing the image: 01-01111TEXT.bmp [13/]
Unrecognized file format for input file: 01-01111TEXT.bmp
Cannot read input file: 01-01111TEXT.bmp
Processing completed: 01-01111TEXT.bmp [13/]
Processing the image: 01-1111TEXT.bmp [14/]
Unrecognized file format for input file: 01-1111TEXT.bmp
Cannot read input file: 01-1111TEXT.bmp
Processing completed: 01-1111TEXT.bmp [14/]
Processing the image: 01 - text.bmp [15/]
Unrecognized file format for input file: 01 - text.bmp
Cannot read input file: 01 - text.bmp
Processing completed: 01 - text.bmp [15/]
*
|
|
2025-05-11 06:22:29
|
compile this and that and what not.
|
|
|
Fab
|
2025-05-11 06:27:01
|
https://www.vanityfair.it/article/elmira-35-anni-mamma-avvocato-non-ho-mai-smesso-del-tutto-di-lavorare-mi-hanno-detto-che-ero-pazza-fatto-per-non-andare-fuori-di-testa
|
|
|
JesusGod-Pope666.Info
|
2025-05-11 07:09:21
|
|
|
2025-05-11 07:13:22
|
stinking linux. Always always and more always
|
|
2025-05-11 07:14:10
|
|
|
2025-05-11 07:42:53
|
What is this memory thing..... that seems a lot.
|
|
2025-05-11 07:43:05
|
|
|
2025-05-11 07:43:34
|
Size in memory
|
|
2025-05-11 07:43:40
|
300 mb
|
|
|
jonnyawsom3
|
2025-05-11 08:04:50
|
Compressed images still have to be decompressed before they can be viewed, so they require Width x Height x Bitdepth (Total, not per channel)
|
|
|
gb82
|
2025-05-11 11:39:44
|
<@794205442175402004> how does Cloudinary resize images? I’ve seen NN resizing stuff but I don’t know if any of it is used in practice
|
|
2025-05-11 11:39:50
|
Like: https://github.com/Fivefold/SRCNN
|
|
|
_wb_
|
2025-05-12 05:48:01
|
We use a few different ones, all classic ones for downscaling (mostly just Lanczos or Mitchell, though we also have a fancier detail-preserving downscale method). For upscaling we have some AI stuff but I don't know any details.
|
|
|
Meow
|
2025-05-12 06:07:37
|
I don't know if there's any image hosting service offering upscaling
|
|
|
gb82
|
|
_wb_
We use a few different ones, all classic ones for downscaling (mostly just Lanczos or Mitchell, though we also have a fancier detail-preserving downscale method). For upscaling we have some AI stuff but I don't know any details.
|
|
2025-05-12 06:41:27
|
any of the downscales proprietary?
|
|
|
_wb_
|
|
gb82
any of the downscales proprietary?
|
|
2025-05-12 06:50:01
|
I implemented two downscalers for Cloudinary that are not (or not yet?) open sourced, one is just Mitchell in linear RGB with some post-sharpening so you could do something pretty similar with imagemagick, the other is a fancier detail-preserving method.
|
|
|
gb82
|
2025-05-12 06:50:23
|
both seem very cool, that's interesting!
|
|
|
spider-mario
|
|
gb82
<@794205442175402004> how does Cloudinary resize images? I’ve seen NN resizing stuff but I don’t know if any of it is used in practice
|
|
2025-05-12 08:37:49
|
“neural” would be less ambiguous than “NN” which for resizing could mean “nearest neighbour”
|
|
|
JesusGod-Pope666.Info
|
2025-05-12 08:53:55
|
why is it saying that the AVIF images are 16 bit and the originals are 8 bit?
|
|
2025-05-12 08:54:03
|
Like I thought I did 10 bit.....
|
|
2025-05-12 08:54:11
|
Like this is a mess of confusion.
|
|
2025-05-12 08:55:35
|
|
|
2025-05-12 08:55:57
|
Like first one says 8 bit and the next says 16 bit
|
|
|
A homosapien
|
2025-05-12 08:57:26
|
That's the canvas, the 10 bit image is displayed on a 16-bit canvas
|
|
|
JesusGod-Pope666.Info
|
2025-05-12 09:01:53
|
aha.....
|
|
2025-05-12 09:02:07
|
so even if I did 8 bit the AVIF would 16bit canvas.
|
|
2025-05-12 09:02:35
|
so whether 8 10 or 12 it would show it as 16 bit canvas
|
|
2025-05-12 09:02:45
|
|
|
2025-05-12 09:03:09
|
By the way, 3 different images and yet each of them take the same size in the memory - apparently.
|
|
2025-05-12 09:03:26
|
303.1MB
|
|
2025-05-12 09:04:02
|
I guess it is as it is.... the images are bigger then the usual images I have in resolution so..... But still surprised it would take so much - maybe it is only when it is in Gimp.
|
|
2025-05-12 09:04:11
|
like if it stores it in the RAM that is a lot.
|
|
2025-05-12 09:05:09
|
oh well... we sure use a lot of RAM these days overall.
|
|
2025-05-12 09:05:46
|
In ever thought I would use 24GB of RAM, but lo and behold....
|
|
2025-05-12 09:08:09
|
|
|
|
damian101
|
|
_wb_
I implemented two downscalers for Cloudinary that are not (or not yet?) open sourced, one is just Mitchell in linear RGB with some post-sharpening so you could do something pretty similar with imagemagick, the other is a fancier detail-preserving method.
|
|
2025-05-12 09:36:08
|
If you are willing to provide a source image and target resolution(s), I'd love to demonstrate my own fancy detail-preserving downscaling method, which I think works extremely well. I wonder if it's a similar approach...
|
|
|
JesusGod-Pope666.Info
|
2025-05-12 10:50:44
|
Some sizes test from the originals to AVIF
|
|
2025-05-12 10:59:47
|
https://www.youtube.com/watch?v=R2ZWzaNCEVU
|
|
2025-05-12 11:08:18
|
my biggest concern was the size of the files but 8 bit and 10 bit with the things I have on, the 10 bit are the smaller ones.
|
|
2025-05-12 11:11:39
|
So the canvas is able to do 16 bit but the highest is 12 bit for avif and av1 and we can't even comprehend the many colors in 12 bit if used..... am I getting this correct?
|
|
|
damian101
|
|
JesusGod-Pope666.Info
my biggest concern was the size of the files but 8 bit and 10 bit with the things I have on, the 10 bit are the smaller ones.
|
|
2025-05-12 11:21:18
|
Yes, 8-bit all-intra aomenc has some special optimizations that tend to produce larger files. 10- and 12-bit AVIF should be very similar in size, though...
|
|
|
JesusGod-Pope666.Info
|
|
Yes, 8-bit all-intra aomenc has some special optimizations that tend to produce larger files. 10- and 12-bit AVIF should be very similar in size, though...
|
|
2025-05-12 11:21:57
|
Ahhh, okay - yea well I absolutely want the smallest files and getting the positive things of 10 bit as well then.
|
|
2025-05-12 11:22:29
|
I have not tried 12 bit to check what I get, but I did note bigger files at 8 bit which I was surprised about.
|
|
|
damian101
|
|
JesusGod-Pope666.Info
Ahhh, okay - yea well I absolutely want the smallest files and getting the positive things of 10 bit as well then.
|
|
2025-05-12 11:23:43
|
Well, you want efficiency, size or quality is regulated through the user parameter.
But 10-bit is more efficient for lossy encoding.
|
|
|
JesusGod-Pope666.Info
|
2025-05-12 11:24:44
|
Yea I am doing lossy encoding.
|
|
2025-05-12 11:25:03
|
Like 1/10 of the original sources for a lot of files. very good.
|
|
2025-05-12 11:25:23
|
I did go from 50 to 60 as there was some square box issues.
|
|
2025-05-12 11:25:42
|
I think 60 quality takes care of them all, at least not seen any as for yet.
|
|
2025-05-12 11:27:39
|
What would you gain with 12 bit encoding, anything at all?..... Like if you are going from jpeg which apparently is 8 bit to 12 bit probably would do nothing I guess..... I have not checked any loading times yet.
|
|
|
damian101
|
|
JesusGod-Pope666.Info
So the canvas is able to do 16 bit but the highest is 12 bit for avif and av1 and we can't even comprehend the many colors in 12 bit if used..... am I getting this correct?
|
|
2025-05-12 11:29:35
|
Undithered 10-bit still produces some very subtle banding, which 12-bit would prevent.
However, considering you're probably doing some substantially lossy encoding, those extremely subtle banding artifacts probably aren't very relevant.
More importantly, most image viewers don't dither, and most people only have 8-bit screens, in which case all benefits of 12-bit encoding are practically eliminated anyway.
What is relevant, however, is that 10-bit AVIF is easier to decode than 12-bit AVIF.
|
|
|
JesusGod-Pope666.Info
Like 1/10 of the original sources for a lot of files. very good.
|
|
2025-05-12 11:29:58
|
Definitely use 10-bit then.
|
|
|
JesusGod-Pope666.Info
|
2025-05-12 11:31:03
|
Hmmm yea okay. Would be interesting to see if 12 bit would make any bigger loading time overall on the website..... But yea 10 But seems to be the way.
|
|
|
damian101
|
|
JesusGod-Pope666.Info
What would you gain with 12 bit encoding, anything at all?..... Like if you are going from jpeg which apparently is 8 bit to 12 bit probably would do nothing I guess..... I have not checked any loading times yet.
|
|
2025-05-12 11:31:05
|
Minimally better preservation of smooth gradients. And only perceptible if your image viewer dithers or you're viewing on a high bit depth monitor.
|
|
|
JesusGod-Pope666.Info
|
2025-05-12 11:31:40
|
Yea okay.... Probably not going to happen.
|
|
|
damian101
|
2025-05-12 11:32:51
|
Web browsers don't dither high bit depth images to 8-bit. So, yeah, 10-bit is the way to go here. Or 8-bit for maximum compatibility I guess.
|
|
|
JesusGod-Pope666.Info
|
2025-05-12 11:32:58
|
Many of the screenshots is low quality material as well.... Overall....
But just for fun I would like to test the 12 bit for the website. If any decoding difference can be felt.
|
|
2025-05-12 11:34:03
|
I could do 85 Q but for my website.... I don't think it is even needed.
|
|
2025-05-12 11:34:36
|
Like rather have some faster speed bandwidth then higher quality.
|
|
|
damian101
|
2025-05-12 11:34:40
|
Wait, what settings do you use?
Just wanna see if those could be improved.
|
|
|
JesusGod-Pope666.Info
|
2025-05-12 11:35:00
|
Here is my latest upload: http://jesusgod-pope666.info/images.php
|
|
|
Wait, what settings do you use?
Just wanna see if those could be improved.
|
|
2025-05-12 11:35:41
|
If you can wait 5 minutes, I am on the Pope throne at the moment 🙂
|
|
2025-05-12 11:37:06
|
I am still looking into making an input output folder thing like I have working for subtitles app terminal thing.
|
|
2025-05-12 11:41:23
|
find . \( -iname "*.png" -o -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.bmp" \) \
| parallel avifenc -a tune=iq -q 60 -d 10 -y 444 -s 0 --ignore-xmp --ignore-exif {} {.}.avif
|
|
2025-05-12 11:41:44
|
I don't think bmp is supported so probably going to take that off.
|
|
2025-05-12 11:42:50
|
---
|
|
2025-05-12 11:43:09
|
for i in *.{png,jpg,jpeg,bmp}; do ((current++)); echo "Processing the image: ${i} [$current/$total]";
avifenc -a tune=iq -q 60 -d 10 -y 444 -s 0 --ignore-xmp --ignore-exif "${i}" "new_${i%.*}.avif";
echo "Processing completed: ${i} [$current/$total]"; done
|
|
2025-05-12 11:43:20
|
again bmp should probably be removed.
|
|
2025-05-12 11:43:38
|
no idea why avifenc would not support standard images, kinda sucks.
|
|
2025-05-12 11:43:44
|
like webp and bmp
|
|
|
Wait, what settings do you use?
Just wanna see if those could be improved.
|
|
2025-05-12 11:45:13
|
avifenc -a tune=iq -q 60 -d 10 -y 444 -s 0 --ignore-xmp --ignore-exif "${i}" "new_${i%.}.avif"
|
|
2025-05-12 12:06:52
|
anyone know how to search for specific files like in windows *.avif - how you do it in linux in thunder filemanager.
|
|
|
damian101
|
|
JesusGod-Pope666.Info
avifenc -a tune=iq -q 60 -d 10 -y 444 -s 0 --ignore-xmp --ignore-exif "${i}" "new_${i%.}.avif"
|
|
2025-05-12 12:10:21
|
Looks good, but you might want to consider using -s 1 as it's much faster but performs pretty much the same at good quality.
Also, you might want to use `-y 420 --sharpyuv` instead of -y 444. Will probably give mixed results regarding efficiency, but will make decoding twice as fast.
|
|
|
JesusGod-Pope666.Info
|
2025-05-12 12:11:05
|
Not sure about that.... someone said to use 444. And it seems to be the full flavour...... Although as I understand it makes files smaller.
|
|
2025-05-12 12:11:36
|
Speed is lessor of concern but I have not tried 1 compared to 0.... I could check that out.
|
|
2025-05-12 12:11:48
|
My computer is already so slow so it takes forever 😛
|
|
2025-05-12 12:12:02
|
1 is just faster in encoding correct?
|
|
2025-05-12 12:12:08
|
not decoding.
|
|
|
damian101
|
|
JesusGod-Pope666.Info
1 is just faster in encoding correct?
|
|
2025-05-12 12:12:11
|
right
|
|
|
JesusGod-Pope666.Info
|
2025-05-12 12:12:19
|
rogher.
|
|
2025-05-12 12:12:23
|
what is sharpyuv?
|
|
|
damian101
|
|
JesusGod-Pope666.Info
what is sharpyuv?
|
|
2025-05-12 12:13:25
|
It performs better chroma subsampling, scaling in linear RGB instead of doing that directly on the chroma planes.
|
|
2025-05-12 12:14:30
|
Resulting in 4:2:0 subsampling that looks much closer to 4:4:4 than you would normally get.
|
|
|
JesusGod-Pope666.Info
|
2025-05-12 12:19:38
|
okay, dunno.... hard to know all the different stats.
|
|
2025-05-12 12:23:33
|
I'll try the speed of -1 and see how it goes and the output.
|
|
|
Looks good, but you might want to consider using -s 1 as it's much faster but performs pretty much the same at good quality.
Also, you might want to use `-y 420 --sharpyuv` instead of -y 444. Will probably give mixed results regarding efficiency, but will make decoding twice as fast.
|
|
2025-05-12 12:27:36
|
I am not sure the decoding is the issue overall, it seems to go pretty quick on those levels.
|
|
2025-05-12 12:28:18
|
Overall on my website the biggest issue seems to be getting the data down - the decoding seems to go pretty speedely after it has downloaded the 200 images.
|
|
2025-05-12 12:28:58
|
and I am running slow devices.... but overall as far as I can see it is the data stream that is the issue, how much it has to download.
|
|
2025-05-12 12:29:55
|
for i in *.{png,jpg,jpeg,bmp}; do ((current++)); echo "Processing the image: ${i} [$current/$total]";
avifenc -a tune=iq -q 60 -d 10 -y 420 --sharpyuv -s 1 --ignore-xmp --ignore-exif "${i}" "new_${i%.*}.avif";
echo "Processing completed: ${i} [$current/$total]"; done
So this would be closer to what you would want?
|
|
2025-05-12 12:31:05
|
I don't know.... I did see something about 444 and it seemed to be better on getting the right colors.
|
|
2025-05-12 12:31:17
|
does sharpquv work on all levels
|
|
|
damian101
|
|
JesusGod-Pope666.Info
Overall on my website the biggest issue seems to be getting the data down - the decoding seems to go pretty speedely after it has downloaded the 200 images.
|
|
2025-05-12 12:34:11
|
sure, but that of course very much depends on the decoding hardware
|
|
|
JesusGod-Pope666.Info
|
2025-05-12 12:34:33
|
yea but i am on really low hardware, and it still seems pretty good.
|
|
|
damian101
|
|
JesusGod-Pope666.Info
I don't know.... I did see something about 444 and it seemed to be better on getting the right colors.
|
|
2025-05-12 12:40:30
|
Chroma subsampling can reduce raw image data to half with minimal loss (on natural images at least), before the actual AVIF encoding is done. And sharpyuv performs significantly better chroma subsampling.
Thing is, AV1 is primarily optimized for 4:2:0 chroma subsampling, so lossy 4:4:4 encoding is often less efficient, although tune iq mitigates a lot of that.
|
|
|
_wb_
|
|
If you are willing to provide a source image and target resolution(s), I'd love to demonstrate my own fancy detail-preserving downscaling method, which I think works extremely well. I wonder if it's a similar approach...
|
|
2025-05-12 12:48:59
|
these type of images are good test images for detail-preserving downscaling.
|
|
2025-05-12 12:49:06
|
https://upload.wikimedia.org/wikipedia/commons/6/60/Thrift_Store_Express_Jeans.jpg
|
|
2025-05-12 12:49:37
|
this is what my method does with it: https://res.cloudinary.com/jon/image/fetch/w_300,f_png,q_100/https://upload.wikimedia.org/wikipedia/commons/6/60/Thrift_Store_Express_Jeans.jpg
|
|
2025-05-12 12:49:48
|
(when downscaling to 300 px wide)
|
|
2025-05-12 12:50:40
|
compared to simple lanczos downscaling, which produces something like this: https://res.cloudinary.com/demo/image/fetch/w_300,f_png,q_100/https://upload.wikimedia.org/wikipedia/commons/6/60/Thrift_Store_Express_Jeans.jpg
|
|
|
JesusGod-Pope666.Info
|
2025-05-12 02:22:19
|
Not sure I need downscaling as it is for now.
|
|
|
Chroma subsampling can reduce raw image data to half with minimal loss (on natural images at least), before the actual AVIF encoding is done. And sharpyuv performs significantly better chroma subsampling.
Thing is, AV1 is primarily optimized for 4:2:0 chroma subsampling, so lossy 4:4:4 encoding is often less efficient, although tune iq mitigates a lot of that.
|
|
2025-05-12 02:22:58
|
chroma subsampling is what is used by standard and what I am using at the moment?
|
|
|
damian101
|
|
JesusGod-Pope666.Info
chroma subsampling is what is used by standard and what I am using at the moment?
|
|
2025-05-12 02:28:40
|
Since you specified `-y 444`, there is no chroma subsampling. Which is great for some types of images, or near-transparent target quality, but for your usecase, `-y 420 --sharpyuv` (4:2:0 subsampling means half resolution on the chroma planes) will probably perform slightly better overall, with the benefit of better decoding speed.
|
|
2025-05-12 02:29:10
|
Not sure what the default is with avifenc.
|
|
|
RaveSteel
|
2025-05-12 02:31:03
|
```
-y,--yuv FORMAT : Output format, one of 'auto' (default), 444, 422, 420 or 400. Ignored for y4m or stdin (y4m format is retained)
For JPEG, auto honors the JPEG's internal format, if possible. For grayscale PNG, auto defaults to 400. For all other cases, auto defaults to 444
```
|
|
|
JesusGod-Pope666.Info
|
|
Since you specified `-y 444`, there is no chroma subsampling. Which is great for some types of images, or near-transparent target quality, but for your usecase, `-y 420 --sharpyuv` (4:2:0 subsampling means half resolution on the chroma planes) will probably perform slightly better overall, with the benefit of better decoding speed.
|
|
2025-05-12 02:33:08
|
Going to make a test folder run. going to take some hours on my computer. but it is producing something at the moment.
|
|
|
damian101
|
|
_wb_
this is what my method does with it: https://res.cloudinary.com/jon/image/fetch/w_300,f_png,q_100/https://upload.wikimedia.org/wikipedia/commons/6/60/Thrift_Store_Express_Jeans.jpg
|
|
2025-05-12 04:12:22
|
here's mine:
|
|
2025-05-12 04:29:33
|
I really liked this one for testing downscaling
|
|
2025-05-12 04:44:31
|
half-resolution version
|
|
|
AccessViolation_
|
|
_wb_
this is what my method does with it: https://res.cloudinary.com/jon/image/fetch/w_300,f_png,q_100/https://upload.wikimedia.org/wikipedia/commons/6/60/Thrift_Store_Express_Jeans.jpg
|
|
2025-05-12 05:42:55
|
ooo, is that at all similar to this? I was thinking about this earlier
https://discord.com/channels/794206087879852103/794206087879852106/1370349223173951518
|
|
2025-05-12 05:43:24
|
the goal, for context https://cdn.discordapp.com/attachments/794206087879852106/1370338905995608114/image.png?ex=6823178e&is=6821c60e&hm=e2408b1cdbe29795e14f30f7ef9f983390a1e83e521bed335bad79d1611e1986&
|
|
|
_wb_
|
2025-05-12 06:15:20
|
My method basically attempts to preserve not just the average pixel value of each region that gets downscaled into a single pixel, but also the local stdev. Or at least it goes in that direction. So noise doesn't get smoothed out but gets preserved, kind of.
|
|
|
damian101
|
2025-05-12 07:02:46
|
My method is more fidelity-targeted. Butteraugli tends to like it more than anything else I know of. Also very sharp while staying pretty much artifact-free... <:Perfect:991312615194234981>
|
|
2025-05-12 07:03:58
|
The process involves a lot of Gaussian blurs and the nyquist theorem.
|
|
|
AccessViolation_
|
|
My method is more fidelity-targeted. Butteraugli tends to like it more than anything else I know of. Also very sharp while staying pretty much artifact-free... <:Perfect:991312615194234981>
|
|
2025-05-12 07:13:10
|
how do you benchmark this using butteraugli? I assume it doens't have a mode to test specifically this. how do you generate the downscaled ground truth reference?
|
|
2025-05-12 07:13:21
|
or am I misunderstanding how butteraugli works
|
|
|
damian101
|
|
AccessViolation_
how do you benchmark this using butteraugli? I assume it doens't have a mode to test specifically this. how do you generate the downscaled ground truth reference?
|
|
2025-05-12 07:13:48
|
Point upscale to original resolution. Of course only works properly with 1/n scale factors.
|
|
2025-05-12 07:16:07
|
For other scale factors I guess you could do Point upscale to a common multiple of both resolutions for comparison. 😅
|
|
2025-05-12 07:20:13
|
Other upscaling methods would also work, of course, but it would warp things in ways that doesn't reflect the actual viewing experience anymore, so Butteraugli score might not be representative there.
|
|
|
AccessViolation_
|
2025-05-12 07:21:40
|
interesting!
|
|
2025-05-12 07:23:15
|
thinking about it, this is sort of the opposite of what AMD FSR (the non-ai one) tries to do. take an image and upscale it using some contrast and...something else, not entirely sure how it works
|
|
2025-05-12 07:24:42
|
I wonder if FSR is simple enough that it can use used as an upsampling mode in JXL. or maybe a simplified version of it?
|
|
|
A homosapien
|
|
_wb_
this is what my method does with it: https://res.cloudinary.com/jon/image/fetch/w_300,f_png,q_100/https://upload.wikimedia.org/wikipedia/commons/6/60/Thrift_Store_Express_Jeans.jpg
|
|
2025-05-12 08:18:33
|
Looks like the "pop" filter in google photos
|
|
2025-05-12 08:18:48
|
Looks quite visually appealing not gonna lie
|
|
|
juliobbv
|
|
_wb_
this is what my method does with it: https://res.cloudinary.com/jon/image/fetch/w_300,f_png,q_100/https://upload.wikimedia.org/wikipedia/commons/6/60/Thrift_Store_Express_Jeans.jpg
|
|
2025-05-12 08:25:55
|
interesting! have you tried downscaling stills with film grain? does it make the film grain bigger to preserve variance?
|
|
2025-05-12 08:26:30
|
I see that the denim texture features become "coarser" after downscale
|
|
|
Mine18
|
|
AccessViolation_
I wonder if FSR is simple enough that it can use used as an upsampling mode in JXL. or maybe a simplified version of it?
|
|
2025-05-12 08:40:31
|
FSR 1 is a tuned Lanczos, why not use Lanczos?
|
|
|
_wb_
|
|
juliobbv
interesting! have you tried downscaling stills with film grain? does it make the film grain bigger to preserve variance?
|
|
2025-05-12 08:43:10
|
It preserves local variance so something like a sky with photon noise will downscale to something that still looks like a sky with photon noise, instead of a smoothed out version of the sky. Whether that is a good thing or a bad thing of course depends on your needs/expectations.
|
|
|
juliobbv
|
|
_wb_
It preserves local variance so something like a sky with photon noise will downscale to something that still looks like a sky with photon noise, instead of a smoothed out version of the sky. Whether that is a good thing or a bad thing of course depends on your needs/expectations.
|
|
2025-05-12 08:47:37
|
this makes sense, thanks
|
|
|
_wb_
|
2025-05-12 08:49:54
|
It's of course physically incorrect in a way, since it is equivalent to making the size photon noise a lot larger in terms of original image dimension pixel area. But then again it often does work to better convey the real texture
|
|
|
juliobbv
|
2025-05-12 08:50:42
|
indeed, there's a tradeoff between feature size and energy preservation
|
|
2025-05-12 08:51:17
|
the reason this caught my attention is because surprisingly, a similar phenomenon happens in video encoding with film grain retention
|
|
|
_wb_
|
2025-05-12 08:51:46
|
It's a bit like how NN resampling can look sharper than better downsampling methods — except with NN you will often get aliasing issues and you're just throwing away lots of data. My method avoids aliasing better and does use all data.
|
|
|
juliobbv
|
2025-05-12 08:51:49
|
it's overall better to make the film grain appear "bigger" as you approach the lower bitrate end in order to preserve overall energy, instead of fully collapsing it into flat blocks due to too harsh quantization into the high frequency coeff area
|
|
|
_wb_
|
2025-05-12 08:58:40
|
It's the trade-off between pretending you keep the camera where it is and the resulting photo as it is and just increase the viewing distance (that's what usual downscaling does), and pretending the camera is further away so the photo is different and the region of interest becomes smaller so you crop it — then things like film grain and photon noise (and maybe also some of the texture of the actual scene) will be different than in the case of just going further away from the image.
|
|
2025-05-12 08:59:09
|
I think
|
|
|
juliobbv
|
2025-05-12 09:00:51
|
yeah, I can follow the train of thought here
|
|
|
lonjil
|
2025-05-12 09:01:47
|
I hope you can open source your fancier detail preserving downscaler at some point!
|
|
|
juliobbv
|
2025-05-12 09:02:25
|
that said, for more extreme downscaling (>2x), I can see value on ramping down the strength on variance preservation
|
|
2025-05-12 09:02:45
|
otherwise, the resulting textures could end up being too far removed from the original
|
|
|
_wb_
|
2025-05-12 10:27:16
|
Yes, there's a balance there. Best is to mix both approaches a bit.
|
|
|
Jyrki Alakuijala
|
|
_wb_
My method basically attempts to preserve not just the average pixel value of each region that gets downscaled into a single pixel, but also the local stdev. Or at least it goes in that direction. So noise doesn't get smoothed out but gets preserved, kind of.
|
|
2025-05-13 10:43:43
|
if it lifts the noise from very high frequency to a lower frequency it can have semantic interpretability difference such as the thickness of thread in the cotton, or roughness for touch interpretation differences -- if I had an estore I'd just benchmark what works best (and monitoring both sales and returns)
|
|
|
Fab
|
2025-05-13 10:52:24
|
Let's ironize my autism
|
|
2025-05-13 10:52:26
|
https://www.tuttobiciweb.it/article/2025/05/13/1747124327/ciclismo-dipendenza-bradley-wiggins-tour-de-france
|
|
|
_wb_
|
|
Jyrki Alakuijala
if it lifts the noise from very high frequency to a lower frequency it can have semantic interpretability difference such as the thickness of thread in the cotton, or roughness for touch interpretation differences -- if I had an estore I'd just benchmark what works best (and monitoring both sales and returns)
|
|
2025-05-13 11:23:09
|
The main thing it is trying to do is avoid the smoothing you usually get when downscaling, where any texture just becomes flat. There's no way to get around the problem that there just aren't enough pixels to preserve the original image, but some of the 'feel' can be preserved better by preserving local variance. The goal is to convey already in the product gallery page with all the thumbnails some of the texture of the full resolution image (that is on the product page you get if you click on one of the thumbnails).
|
|
2025-05-13 11:30:15
|
E.g. it's not unusual for some fabrics to have some texture or print pattern that is high-contrast high-frequency, and a normal downscale (say a 10x downscale that reduces a 10 Mpx image to a 0.1 Mpx thumbnail) would just completely remove that and replace it with some average color (where the average can be quite wrong if you don't do it in linear space, but that's another issue). Keeping some of that variance is 'wrong' (and can introduce problems like Moiré) but it can semantically feel more right than the usual smooth downscale.
|
|
|
Fab
|
2025-05-13 12:06:26
|
I prefer vp9 and av1. Jxl stuff I don't like why sorry you think I abolish the SW but is not that intention
|
|
2025-05-13 12:41:40
|
Unfortunately Krisna Rapana and my cousin started new activity both 5 6 yrers ago
|
|
2025-05-13 12:42:04
|
So YouTube is having a confusion
|
|
2025-05-13 12:42:33
|
Luckily me and other ocd people developed the best subliminals ever
|
|
2025-05-13 12:43:03
|
And libjxl now looks amazing
|
|
|
pekaro
|
2025-05-13 06:52:05
|
Hi! I have a question regarding jpegxl lossless mode: in modular transform the used wavelet is (a+b)/2 for the low pass with ceil/floor depending whether a or b is larger. What about high pass coeff and how you would decode this wavelet backwards? I can't reason this out because I'm trying a high pass filter bank with formula of (a-b) however I cannot reproduce the tree this way
|
|
2025-05-13 06:54:22
|
I'm ignoring the tendency term for now
|
|
|
_wb_
|
2025-05-13 07:45:32
|
high pass is just a-b (- tendency term)
|
|
2025-05-13 07:48:55
|
reconstruction is just a = (a+b)/2 + (a-b)/2, b = a - (a-b)
|
|
|
pekaro
|
2025-05-13 08:17:52
|
Tendency term is a form of lifting scheme for the wavelet right? It will lower the entropy of encoded wavelet tree comparing to a tree without it
|
|
|
_wb_
|
2025-05-13 08:28:59
|
The reconstruction is lossless even though there are two integer divisions by two going on there.
- if a+b is even, then a-b is also even so the divisions are exact so there is no issue.
- if a+b is odd, then a-b is also odd. If a>b then the rounding up of the (a+b)/2 term compensates for the rounding down of the (a-b)/2 term. Otherwise a<b (they cannot be equal or a+b would be even), and then (a-b) is negative so (a-b)/2 rounds up while (a+b)/2 is rounded down,
|
|
2025-05-13 08:32:24
|
And yes, the tendency is basically applying a linear interpolation prediction to the (a-b) residuals, made nonlinear by conditioning it on local monotonicity. This helps to lower the entropy in the lossless case, but most of all it makes it possible to use it in a lossy way by quantizing the highest frequencies. Without the tendency term you would get a blocky mess if you simply quantize...
|
|
2025-05-13 08:34:35
|
|
|
2025-05-13 08:34:45
|
Crop of an image compressed to 0.4 bpp using the Squeeze transform with quantization of the residuals. From
left to right: 1) no tendency term at all, 2) an unconditional linear interpolation tendency term, 3) the nonlinear tendency
term used in JPEG XL, 4) original image, for reference.
|
|
2025-05-13 08:38:18
|
no tendency term produces obvious blocking/pixelation.
tendency term that is just simple linear interpolation produces obvious ringing.
tendency term as it is in Squeeze better balances the artifacts: the condition helps to avoid ringing, the interpolation helps to avoid blocking.
|
|
|
pekaro
|
2025-05-13 08:40:34
|
thanks for the explanation! this clears a lot
|
|
2025-05-13 09:12:40
|
also by any chance, are there any measurements for lossless encoding bpp with and without tendency term?
|
|
|
_wb_
|
2025-05-13 09:42:16
|
Haven't tried that in many years; in general lossless bpp is usually lowest when not doing squeeze at all and encoding non-progressively. Should be easy enough to try it out though, just hack a libjxl where the function computing the tendency term returns 0 instead...
|
|
|
gb82
|
|
_wb_
this is what my method does with it: https://res.cloudinary.com/jon/image/fetch/w_300,f_png,q_100/https://upload.wikimedia.org/wikipedia/commons/6/60/Thrift_Store_Express_Jeans.jpg
|
|
2025-05-13 11:19:01
|
very interesting, this indeed looks like a good test image
|
|
|
Meow
|
2025-05-14 03:17:52
|
Yeah this `https://res.cloudinary.com/jon/image/fetch/w_300,f_png,q_100/` is a universal converter for any link!
|
|
2025-05-14 03:21:13
|
Pitiful that JPEG 2000 and JPEG XR aren't available but BMP (losing Alpha however) is available
|
|
2025-05-14 03:25:00
|
||https://res.cloudinary.com/jon/image/fetch/w_300,f_png,q_100/https://upload.wikimedia.org/wikipedia/commons/3/3f/GPT_Test_Plugsuit_High-Exposure_Type.png||
|
|
|
AccessViolation_
|
2025-05-16 12:39:36
|
good use for photon noise synthesis. these noise patterns come as large PNGs. if they were JXL they could've been really small
|
|
|
RaveSteel
|
2025-05-16 12:40:53
|
To be fair, they only weigh in at around 10kb
|
|
2025-05-16 12:42:21
|
The rust foundation SVG is actually much larger than the PNG noise files lmao
|
|
|
AccessViolation_
|
2025-05-16 12:42:56
|
It's not a lot but it adds up. depending on how many requests they serve
|
|
|
RaveSteel
|
2025-05-16 12:43:25
|
True, but the SVG is actually 20 times larger than the noise PNG
|
|
2025-05-16 12:43:35
|
crazy
|
|
|
AccessViolation_
|
2025-05-16 12:44:30
|
that's surprising
|
|
|
RaveSteel
|
2025-05-16 12:45:01
|
Actually massive
|
|
|
username
|
2025-05-16 12:59:10
|
the SVGs are sent to browsers as Brotli compressed although even with the size reduction from that the SVG logo still ends up being larger then the noise PNGs lol
|
|
2025-05-16 12:59:48
|
actually wtf the noise "PNGs" are being sent over to my browser as WebP 🤷
|
|
2025-05-16 01:00:21
|
they aren't even PNG files
|
|
|
CrushedAsian255
|
|
username
they aren't even PNG files
|
|
2025-05-16 01:03:38
|
Probably cdn behaviour
|
|
2025-05-16 01:03:46
|
Try spoofing your accept header
|
|
|
damian101
|
2025-05-17 08:16:02
|
I need to know something:
Why is center-position 1/2-factor scaling not the same for Bilinear and Box? I never understood that.
|
|
2025-05-17 08:19:02
|
Like, shouldn't Bilinear simply deliver the average of the four neighbouring values in this case? Just like Box?
|
|
2025-05-17 08:28:42
|
When downscaling a 4x4 checkerboard image
```
1.0 0.0 1.0 0.0
0.0 1.0 0.0 1.0
1.0 0.0 1.0 0.0
0.0 1.0 0.0 1.0
```
with Bilinear I would expect output values to be
```
0.5 0.5
0.5 0.5
```
But that is not the case for some reason. Top-left and bottom-right were of a visibly different shade than the other two. And the output was even visibly different between bilinear implementations (imagemagick, zimg).
This all makes no sense to me.
|
|
|
_wb_
|
2025-05-17 02:10:26
|
Implementation details tend to be different for these things, especially in how they deal with the edges. Duplicating vs mirroring vs zeroing the edges makes a big difference, for example.
|
|
|
damian101
|
|
_wb_
Implementation details tend to be different for these things, especially in how they deal with the edges. Duplicating vs mirroring vs zeroing the edges makes a big difference, for example.
|
|
2025-05-17 08:19:48
|
Yes, I also thought of edges. But, I don't see how edges are relevant in this specific case with bilinear. Isn't every new value here the result of only four original values?
|
|
|
_wb_
|
2025-05-17 08:23:50
|
I would think so, but I am not sure how exactly ImageMagick etc implement it.
|
|
2025-05-17 08:25:51
|
What do you get when downscaling a larger checkerboard?
|
|
2025-05-17 08:32:58
|
I bet it has something to do with edges. If you duplicate at the edges you get
```
1 1 0 1 0 0
1 1 0 1 0 0
0 0 1 0 1 1
1 1 0 1 0 0
0 0 1 0 1 1
0 0 1 0 1 1
```
which could result in the downscaled image getting higher values in the top left/bottom right pixels than in the two other pixels...
|
|
|
damian101
|
2025-05-17 08:38:28
|
Hmm, but I don't see why those extra values would influence anything with bilinear...
|
|
2025-05-17 08:42:42
|
ok, looks like I cannot reproduce with a larger checkerboard image, huh
|
|
|
_wb_
|
|
Hmm, but I don't see why those extra values would influence anything with bilinear...
|
|
2025-05-17 08:43:15
|
They shouldn't, but I wouldn't be surprised if they somehow do, if there is no special case for exactly 2x downscaling but it's all a general code path for arbitrary factors
|
|
|
damian101
|
2025-05-17 08:44:36
|
Either way, I still don't understand how Box downscaling looks so much better than bilinear downscaling for 1/2 scaling. The way I understand both scaling methods, output should be identical.
|
|
2025-05-17 08:45:23
|
https://usage.imagemagick.org/filter/#box
|
|
2025-05-17 08:53:20
|
Box and Triangle/Bilinear are the mathematically simplest of all scaling methods after nearest neighbour, so I want to understand at least those properly 💀
|
|
|
_wb_
|
2025-05-17 08:56:45
|
Yeah it's a good question. Maybe it can boil down to different conceptions of pixels: do their values correspond to the center of a small square, or to uniformly spaced sampling positions on a grid where the top left pixel is at the top left corner and the bottom right pixel is at the bottom right corner?
|
|
2025-05-17 08:57:51
|
The first interpretation makes the most sense to me and is how all image editors etc present images, but I think the second interpretation is also used
|
|
|
damian101
|
2025-05-17 09:05:17
|
Yes, I always assumed the first case.
|
|
2025-05-17 09:08:51
|
But, how I understand it, both box and bilinear should produce a simple average for every 2x2 pixels when doing 1/2 resolution downscaling... Assuming target sample position is in the center, which it normally is for scaling.
|
|
2025-05-17 09:09:40
|
However, in practice, bilinear and box look very different for this scenario.
|
|
2025-05-17 09:09:58
|
Box is the sharper one
|
|
2025-05-17 09:10:02
|
scaled in linear light
|
|
2025-05-17 09:11:01
|
`-colorspace RGB -filter Triangle -resize 50% -colorspace sRGB -dither FloydSteinberg -depth 8`
`-colorspace RGB -filter Box -resize 50% -colorspace sRGB -dither FloydSteinberg -depth 8`
|
|
2025-05-17 09:11:11
|
imagemagick
|
|
2025-05-17 09:21:57
|
I'm starting to think it can only be the sample position...
|
|
|
`-colorspace RGB -filter Triangle -resize 50% -colorspace sRGB -dither FloydSteinberg -depth 8`
`-colorspace RGB -filter Box -resize 50% -colorspace sRGB -dither FloydSteinberg -depth 8`
|
|
2025-05-17 09:26:40
|
`-distort Resize 50%` performs better than `-resize 50%` <:Thinkies:987903667388710962>
|
|
2025-05-17 09:31:31
|
I think I have enough of imagemagick for now...
|
|
|
spider-mario
|
2025-05-17 09:34:15
|
oh, yes, the documentation seems to touch on this
|
|
2025-05-17 09:34:25
|
> If you look along the bottom edge of the rose, you will see that the Distort Operator actually produced a better cleaner result than the Resize Operator. […] However remember that Distort is much slower than Resize, as it uses a more direct but much more complex Area Resampling technique, without the 2-pass speed optimizations that resize uses.
|
|
2025-05-17 09:34:43
|
https://usage.imagemagick.org/resize/#distort_resize
|
|
2025-05-17 09:34:56
|
TIL
|
|
2025-05-17 09:35:16
|
brb I’m going to reprocess all the images I’ve ever applied `-resize` on
|
|
|
damian101
|
|
I'm starting to think it can only be the sample position...
|
|
2025-05-17 09:40:57
|
No, that is definitely always center, I just tried non-center, and everything was visibly shifted.
|
|
|
spider-mario
|
2025-05-17 09:49:10
|
for downsizing, I’m not actually sure `Distort` is better
|
|
2025-05-17 09:49:16
|
the result of `resize` seems sharper
|
|
|
damian101
|
2025-05-18 06:47:43
|
well, it's a very small difference anyway, and I only tested with bilinear
|
|
2025-05-18 07:41:00
|
Looks like almost all the bilinear scaling out there has little to do with bilinear interpolation, first step appears to be triangle-shape convolution over +- 2 px distance.
|
|
2025-05-18 07:41:22
|
Which explains the blurriness, of course...
|
|
|
Looks like almost all the bilinear scaling out there has little to do with bilinear interpolation, first step appears to be triangle-shape convolution over +- 2 px distance.
|
|
2025-05-18 07:53:09
|
So, something like 2 - |(x - x0)| * 2 - |(y - y0)| to get all the relative weights for the neighboring 4x4 pixels.
|
|
|
_wb_
|
2025-05-18 07:55:11
|
I think anything where the kernel weight computation only involves linear stuff could be called "bilinear", just like "bicubic" can mean a huge amount of different things that only share the use of ^3
|
|
2025-05-18 07:58:04
|
https://www.cs.utexas.edu/~fussell/courses/cs384g-fall2013/lectures/mitchell/Mitchell.pdf
|
|
2025-05-18 07:58:50
|
|
|
|
damian101
|
2025-05-18 07:59:38
|
Right, bilinear is fine as a term, actually...
Not sure about bilinear interpolation, though... Because that's not really what happens.
|
|
2025-05-18 08:00:00
|
Bilinear filtering?
|
|
|
_wb_
https://www.cs.utexas.edu/~fussell/courses/cs384g-fall2013/lectures/mitchell/Mitchell.pdf
|
|
2025-05-18 08:01:18
|
dang, that's old <:woag:1070464147805970432>
|
|
|
_wb_
|
2025-05-18 08:01:35
|
I guess often it's seen from the perspective of upsampling, where it's interpolation. When downsampling, "decimation" is sometimes used which kind of makes sense
|
|
|
dang, that's old <:woag:1070464147805970432>
|
|
2025-05-18 08:02:31
|
SIGGRAPH'88, lol
|
|
|
DZgas Ж
|
2025-05-18 08:05:20
|
It's good that I live in 2050, because they're discussing interpolation using algorithms from 50 years ago again.
box (fant) is really better for downscale, but for video I use spline36. there are fewer artifacts than lanzcos and fewer blures than bicubic. for 1080p -> 720, this is ideal. but box is better with pictures, there are zero artifacts, only problems of subjective perception, which makes the picture seem not so clear. but its perfect, though.
|
|
2025-05-18 08:12:48
|
The main issue is that the image viewing will not occur at the same size, pixel by pixel, making the selection of algorithms extremely useless and meaningless. The image will still be rescaled using some bilinear method, after which the artifacts from Lanczos will be much more noticeable, and the blur from bicubic will be quite apparent.
The second problem is compression... Even effectively using Lanczos when sending content that is not art to a place with high compression, such as Telegram. Despite being able to use a perfect 1280x1280 canvas and guarantee quality, smooth, perfect box pieces will simply compress more. Although with Lanczos, due to artifacts, there will be more information at the edges of objects...
|
|
2025-05-18 08:15:22
|
box is better for stickers because webp does it better. and for jpeg, lanzcos or bicubic is better, in order to provoke the encoder to give out more information on the current quality parameter.
|
|
2025-05-18 08:18:27
|
i also use Hanning interpolation for downscale
|
|
2025-05-18 08:21:19
|
but there are still no solutions. if it is possible not to interpolate, don't do it. or make sure that the size is reduced at least 2 times. then it has a profit. and it definitely doesn't have blure because of the concentration of information. Then it's just a matter of what type of artifacts are acceptable to you personally.
|
|
|
Mine18
FSR 1 is a tuned Lanczos, why not use Lanczos?
|
|
2025-05-18 08:23:57
|
lanczos is a tuned bicubic...... the difference in the shape of the window
|
|
|
spider-mario
|
2025-05-18 08:26:27
|
Lanczos is based on sinc, not bicubic
|
|
|
damian101
|
2025-05-18 08:28:35
|
yeah...
|
|
2025-05-18 08:28:46
|
only 2-tap Lanczos is Cubic-like.
|
|
2025-05-18 08:29:12
|
Should be pretty close to Catmull-Rom I think...
|
|
|
DZgas Ж
It's good that I live in 2050, because they're discussing interpolation using algorithms from 50 years ago again.
box (fant) is really better for downscale, but for video I use spline36. there are fewer artifacts than lanzcos and fewer blures than bicubic. for 1080p -> 720, this is ideal. but box is better with pictures, there are zero artifacts, only problems of subjective perception, which makes the picture seem not so clear. but its perfect, though.
|
|
2025-05-18 08:30:48
|
I mostly see horrible compression artifacts in the second pic...
|
|
|
DZgas Ж
|
|
spider-mario
Lanczos is based on sinc, not bicubic
|
|
2025-05-18 08:40:58
|
Yes, that's right, true, you caught me—this is exactly where I went wrong.
|
|
2025-05-18 08:45:14
|
When FSR was released, I thought, "Finally, they've made madVR NGU available for everyone." But no, that's not the case... madVR NGU Sharp still remains an interpolation performed using arcane tricks that have been around for 10 years, and no one has even come close to matching it.
|
|
|
damian101
|
2025-05-18 08:52:18
|
What is this madVR thing, actually?
|
|
|
DZgas Ж
|
2025-05-18 08:53:52
|
algorithms that were created a long time ago, but still can work even better than neural networks. This is just
—Spline-S
—Ngu sharp
their whole problem is commerce, they sell the first one, and you can only see his work by stealing. and the second one is closed, although it is free, it is written on DirectX shaders.
|
|
|
What is this madVR thing, actually?
|
|
2025-05-18 08:55:22
|
mpc-hc addon
|
|
|
damian101
|
2025-05-18 08:56:01
|
I use ewa_ginseng for upscaling...
|
|
|
DZgas Ж
|
|
I use ewa_ginseng for upscaling...
|
|
2025-05-18 08:56:32
|
What?
|
|
|
damian101
|
|
DZgas Ж
What?
|
|
2025-05-18 09:10:47
|
in mpv
|
|
|
DZgas Ж
|
|
in mpv
|
|
2025-05-18 09:41:09
|
in mpv I also use FSR
|
|
|
spider-mario
|
|
well, it's a very small difference anyway, and I only tested with bilinear
|
|
2025-05-18 10:21:59
|
in my testing so far (for 800% upscaling), I think my preference goes to `-filter Jinc -define filter:support 8 -distort Resize 800%x800%`
|
|
2025-05-18 10:22:56
|
(but not for downscaling – I haven’t determined which one I prefer for that yet, but that’s likely not it)
|
|
|
spider-mario
in my testing so far (for 800% upscaling), I think my preference goes to `-filter Jinc -define filter:support 8 -distort Resize 800%x800%`
|
|
2025-05-18 04:38:38
|
on second thought, maybe `-resize` instead of `-distort Resize` – tends to be less artifacty
|
|
|
gb82
|
2025-05-20 06:09:48
|
<@794205442175402004> im back with my cloudinary question of the week, hah
libjxl uses highway so I guess this is less relevant, but do you know if all the server hardware you use for encoding is AVX-512?
|
|
2025-05-20 06:10:01
|
or AVX2 at least, maybe?
|
|
|
_wb_
|
2025-05-20 06:14:32
|
Yeah it's avx-512 but we are compiling libjxl without it because we suspect there might be bugs specifically triggered by avx-512 (since the well-tested simd variants are all less wide). The speed difference between avx2 and avx-512 doesn't justify such risks right now.
|
|
|
gb82
|
|
_wb_
Yeah it's avx-512 but we are compiling libjxl without it because we suspect there might be bugs specifically triggered by avx-512 (since the well-tested simd variants are all less wide). The speed difference between avx2 and avx-512 doesn't justify such risks right now.
|
|
2025-05-20 06:18:38
|
would this be a libjxl issue or a highway issue? iirc the highway SIMD intrinsics are platform/extension agnostic?
|
|
|
_wb_
|
2025-05-20 06:32:33
|
No idea, could be there is no issue at all in libjxl but we did see some bad behavior in jpegli and the HDR tone mapping tools that come with libjxl when compiling with avx512. Could be a question of insufficient padding or something like that (some accidental assumption that 8x32 bits of padding is enough), or some bug in highway or in clang, I dunno. We haven't bothered yet to investigate.
|
|
|
gb82
|
2025-05-20 06:45:39
|
Interesting
|
|
|
AccessViolation_
|
2025-05-23 05:42:48
|
this is a really cool video
https://www.youtube.com/watch?v=xDLxFGXuPEc
|
|
2025-05-23 05:44:14
|
it's about blurring, and de-blurring by dividing the image by the blur kernel instead of multiplying it
|
|
2025-05-23 05:44:52
|
it makes sense that it's possible in hindsight but I never would have thought this was possible before, I thought blurring was a strictly destructive process
|
|
|
jonnyawsom3
|
2025-05-23 05:56:30
|
We watched it together in the Voice Channel this morning "Hey I know this part!"
|
|
|
AccessViolation_
|
2025-05-23 06:01:39
|
oh nice :D
|
|
|
_wb_
|
2025-05-23 09:56:46
|
Sharpening is just the opposite of blurring, but information does still get lost and you cannot sharpen back detail in regions that are smoothed to oblivion...
|
|
|
juliobbv
|
|
AccessViolation_
this is a really cool video
https://www.youtube.com/watch?v=xDLxFGXuPEc
|
|
2025-05-23 10:12:31
|
I see that Technology Connections guy has a new channel 🤔
|
|
|
jonnyawsom3
|
2025-05-23 10:14:55
|
Huh, never noticed that before
|
|
|
AccessViolation_
|
|
_wb_
Sharpening is just the opposite of blurring, but information does still get lost and you cannot sharpen back detail in regions that are smoothed to oblivion...
|
|
2025-05-23 10:51:56
|
I suspect the reason that if you blur too hard you won't be able to recover detail eventually, is because of quantization?
|
|
2025-05-23 10:53:52
|
e.g. if your data theoretically is real numbers without precision limits it doesn't matter how strong the blur is, and you'll always be able to recover it
|
|
2025-05-23 10:54:50
|
actually, no, because a very strong blur over the whole image could turn every pixel the same...
|
|
2025-05-23 10:57:32
|
or could it? maybe it depends on the blur implementation too. it's hard for me to reason about, I can't see at which point the blurring is too much and data becomes unrecoverable
|
|
|
Lumen
|
|
AccessViolation_
actually, no, because a very strong blur over the whole image could turn every pixel the same...
|
|
2025-05-23 11:08:56
|
not possible
|
|
2025-05-23 11:08:58
|
this is infinite sigma
|
|
2025-05-23 11:09:21
|
a gaussian blur is by its nature invertible (without precision issue)
|
|
2025-05-23 11:09:25
|
to visualize it
|
|
2025-05-23 11:09:35
|
you can see the FFT effect of a gaussian blur
|
|
2025-05-23 11:09:47
|
basically multiplying by a gaussian kernel the FFT
|
|
2025-05-23 11:09:53
|
you can completely revert these factors
|
|
2025-05-23 11:10:14
|
and well, infinite sigma is different since you cannot divide by 0
|
|
|
AccessViolation_
|
2025-05-23 11:10:14
|
ahh I understand. neat
|
|
|
_wb_
|
2025-05-24 08:10:31
|
In practice though, you use a convolution kernel that is small and a precision that is finite.
|
|
|
spider-mario
|
|
Lumen
not possible
|
|
2025-05-24 09:32:11
|
well, not possible if you want to call it a gaussian blur, but definitely possible to blur an image in that way
|
|
|
Jyrki Alakuijala
|
|
Lumen
a gaussian blur is by its nature invertible (without precision issue)
|
|
2025-05-24 10:03:45
|
Math yes, in engineering no
|
|
|
Lumen
|
2025-05-24 10:04:23
|
I was answering a theoritical question indeed ^^
|
|
|
damian101
|
|
AccessViolation_
it makes sense that it's possible in hindsight but I never would have thought this was possible before, I thought blurring was a strictly destructive process
|
|
2025-05-24 06:50:41
|
It is in practice due to precision loss.
|
|
|
AccessViolation_
|
2025-05-24 09:55:08
|
yep yep
|
|
2025-05-24 09:57:02
|
I think averaging all pixels is my preferred way of blurring sensitive information. second is black bar, but can look too out of place
|
|
2025-05-24 09:58:05
|
I wonder how Signal's face blurring feature works. If it's reversible then maybe I should create an issue ^^
|
|
|
spider-mario
|
2025-05-24 10:38:38
|
I tend to use GIMP’s “Pixelize” filter
|
|
2025-05-24 10:38:55
|
adjusting the block size until it looks “right but not leaking too much”
|
|
|
AccessViolation_
|
2025-05-24 11:28:45
|
there are machine learning models (one from Google I believe) that can reconstruct faces from non-scrambling pixelating filters, and there are also tools for recovering the original text from pixelated segments in screenshots. you can possibly also recover the text from a small segment where all pixels are averaged, though thankfully there are only 256 shades of gray in most screenshots so while I wouldn't hide someone's name that way - the length of the name alone might even be a good enough giveaway if the font isn't monospaced - it's probably fine for longer snippets of text
|
|
|
lonjil
|
|
AccessViolation_
there are machine learning models (one from Google I believe) that can reconstruct faces from non-scrambling pixelating filters, and there are also tools for recovering the original text from pixelated segments in screenshots. you can possibly also recover the text from a small segment where all pixels are averaged, though thankfully there are only 256 shades of gray in most screenshots so while I wouldn't hide someone's name that way - the length of the name alone might even be a good enough giveaway if the font isn't monospaced - it's probably fine for longer snippets of text
|
|
2025-05-27 06:55:58
|
Are they better than this?
|
|
|
Meow
|
2025-05-28 02:20:19
|
R-c-st learning
|
|
|
damian101
|
2025-05-28 04:51:47
|
Why can't I decode this file with JxrDecApp?
https://cdn.discordapp.com/attachments/615105639567589376/1376816652687118336/Screenshot_2025-05-26_00-24-30_058.jxr
|
|
2025-05-28 04:54:39
|
I always get an
```
*** ERROR: Unsupported format in JPEG XR ***
```
|
|
2025-05-28 04:55:11
|
even with the exact example command
|
|
|
jonnyawsom3
|
|
Why can't I decode this file with JxrDecApp?
https://cdn.discordapp.com/attachments/615105639567589376/1376816652687118336/Screenshot_2025-05-26_00-24-30_058.jxr
|
|
2025-05-28 05:07:07
|
How did you get the file?
|
|
|
damian101
|
|
How did you get the file?
|
|
2025-05-28 05:07:24
|
someone on the AV1 discord posted it
|
|
|
jonnyawsom3
|
2025-05-28 05:13:36
|
I vaguely recall NVIDIA software creating JXRs that were either unreadable, or only via Windows and not the reference library. Can't remember any details though
|
|
|
damian101
|
|
I vaguely recall NVIDIA software creating JXRs that were either unreadable, or only via Windows and not the reference library. Can't remember any details though
|
|
2025-05-28 05:24:35
|
that would make a lot of sense...
|
|
2025-05-28 05:25:23
|
Windows Photo viewer can show them
|
|
2025-05-28 05:27:46
|
it appears to be a screenshot
|
|
2025-05-28 05:27:57
|
so that fits
|
|
|
RaveSteel
|
2025-05-28 05:50:42
|
The JxrDecApp does not always automatically choose the correct pixel format. You can try specifying manually
|
|
2025-05-28 05:54:03
|
But some JXRs cannot be decoded at all by JxrDecApp
|
|
|
_wb_
|
2025-05-28 08:00:04
|
Those jxr cli tools are extremely brittle and annoying to use
|
|
2025-05-28 08:01:52
|
I think they were made just because they needed some reference implementation when they were rubberstamping wdp into a jpeg standard, so they quickly made something that somewhat worked and then abandoned it completely.
|
|
|
Quackdoc
|
2025-05-29 01:26:06
|
I just use magick lol
|
|
|
Meow
|
2025-05-29 05:50:42
|
jxrlib even can't read PNG
|
|
|
Quackdoc
|
2025-05-29 06:15:38
|
tiff and BMP are all a man needs
|
|
|
novomesk
|
|
Why can't I decode this file with JxrDecApp?
https://cdn.discordapp.com/attachments/615105639567589376/1376816652687118336/Screenshot_2025-05-26_00-24-30_058.jxr
|
|
2025-05-30 07:40:12
|
converted via nomacs on Windows.
|
|
|
jonnyawsom3
|
2025-05-30 07:42:32
|
Huh, interesting image... Also massively blown out as the AVIF
|
|
2025-05-30 07:43:17
|
|
|
|
Mine18
|
|
novomesk
converted via nomacs on Windows.
|
|
2025-05-30 01:19:42
|
hey, could you show me how to get the file conversion preview for nomacs?
like the one demonstrated here? https://github.com/nomacs/nomacs/issues/292#issuecomment-644237409
|
|
|
Quackdoc
|
|
Huh, interesting image... Also massively blown out as the AVIF
|
|
2025-05-30 01:47:46
|
the source image is a scRGB image
|
|
2025-05-30 01:47:51
|
so that is to be expected to some extent
|
|
|
Why can't I decode this file with JxrDecApp?
https://cdn.discordapp.com/attachments/615105639567589376/1376816652687118336/Screenshot_2025-05-26_00-24-30_058.jxr
|
|
2025-05-30 01:51:12
|
wait, how *did* you try to decode it?
|
|
|
novomesk
|
|
Mine18
hey, could you show me how to get the file conversion preview for nomacs?
like the one demonstrated here? https://github.com/nomacs/nomacs/issues/292#issuecomment-644237409
|
|
2025-05-30 01:51:47
|
Use "Save As" from File menu and the preview appears after typing filename and selecting type. Note: not all formats have the preview dialog.
|
|
|
Quackdoc
|
2025-05-30 02:03:26
|
interesting, magick identify reads it as a srgb image
```
Channel statistics:
Pixels: 8294400
Red:
min: -60.0928 (-0.000916958)
max: 822259 (12.5469)
mean: 9546.61 (0.145672)
median: 59.6866 (0.000910759)
standard deviation: 55674.1 (0.849533)
kurtosis: 85.2372
skewness: 8.71022
entropy: 0.704312
Green:
min: 0.964829 (1.47223e-05)
max: 822259 (12.5469)
mean: 12271.4 (0.187249)
median: 266.246 (0.00406265)
standard deviation: 67066.8 (1.02337)
kurtosis: 70.0362
skewness: 8.07073
entropy: 0.838601
Blue:
min: -218.872 (-0.00333977)
max: 821236 (12.5313)
mean: 12432 (0.1897)
median: 422.994 (0.00645447)
standard deviation: 67501.9 (1.03001)
kurtosis: 67.7693
skewness: 7.95335
entropy: 0.867897
Alpha:
min: 65535 (1)
max: 65535 (1)
mean: 65535 (1)
median: 65535 (1)
standard deviation: 0 (0)
kurtosis: 0
skewness: 0
entropy: 0
Image statistics:
Overall:
min: -218.872 (-0.00333977)
max: 822259 (12.5469)
mean: 24946.2 (0.380655)
median: 16571 (0.252857)
standard deviation: 47560.7 (0.72573)
kurtosis: 55.7607
skewness: 6.18358
entropy: 0.602702
```
|
|
2025-05-30 02:03:38
|
` Gamma: 0.454545`
|
|
|
damian101
|
|
Quackdoc
wait, how *did* you try to decode it?
|
|
2025-05-30 02:15:23
|
First like this:
```
JxrDecApp -i '/home/damian101/Downloads/Screenshot 2025-05-26 00-24-30_058.jxr' -o '/home/damian101/Downloads/Screenshot 2025-05-26 00-24-30_058.jxr.tif' -c 10
```
then like this:
```
JxrDecApp -i '/home/damian101/Downloads/Screenshot 2025-05-26 00-24-30_058.jxr' -o '/home/damian101/Downloads/Screenshot 2025-05-26 00-24-30_058.jxr.bmp' -c 0
```
|
|
|
Quackdoc
|
2025-05-30 02:16:06
|
why are you specifying `-c` ?
|
|
|
First like this:
```
JxrDecApp -i '/home/damian101/Downloads/Screenshot 2025-05-26 00-24-30_058.jxr' -o '/home/damian101/Downloads/Screenshot 2025-05-26 00-24-30_058.jxr.tif' -c 10
```
then like this:
```
JxrDecApp -i '/home/damian101/Downloads/Screenshot 2025-05-26 00-24-30_058.jxr' -o '/home/damian101/Downloads/Screenshot 2025-05-26 00-24-30_058.jxr.bmp' -c 0
```
|
|
2025-05-30 02:17:41
|
yeah just don't specifc -c
|
|
|
damian101
|
|
Quackdoc
why are you specifying `-c` ?
|
|
2025-05-30 02:17:56
|
bmp requires -c 0
|
|
|
Quackdoc
yeah just don't specifc -c
|
|
2025-05-30 02:18:09
|
makes no difference
|
|
|
Quackdoc
|
2025-05-30 02:18:22
|
don't use bmp, use tiff
|
|
|
damian101
|
2025-05-30 02:18:23
|
tif should support anything anyway
|
|
2025-05-30 02:18:26
|
I did
|
|
|
Quackdoc
|
2025-05-30 02:18:43
|
and you get that error not specifying anything?
|
|
|
damian101
|
|
Quackdoc
and you get that error not specifying anything?
|
|
2025-05-30 02:20:15
|
oh
|
|
2025-05-30 02:20:45
|
yeah, tif with nothing specified works...
|
|
|
Quackdoc
|
2025-05-30 02:22:24
|
btw, the valid outputs for this image are {2,3,22,25,28}
|
|
|
damian101
|
2025-05-30 02:24:04
|
oh, because it's planar?
|
|
2025-05-30 02:24:27
|
no...
|
|
2025-05-30 02:24:28
|
why
|
|
|
Quackdoc
|
2025-05-30 02:24:30
|
no because jxrdec is dumb
|
|
2025-05-30 02:24:34
|
lmao
|
|
2025-05-30 02:25:26
|
but yeah, in the future if you want to know what outputs are valid just do `for i in {0..34}; do JxrDecApp -i Screenshot_2025-05-26_00-24-30_058.jxr -o out-$i.tiff -c $i; done`
|
|
2025-05-30 02:25:30
|
[av1_kekw](https://cdn.discordapp.com/emojis/758892021191934033.webp?size=48&name=av1_kekw)
|
|
|
_wb_
|
2025-05-30 08:54:41
|
That tool should be given a 'Command line interface of the year' award
|
|
2025-05-30 08:55:19
|
Some ignoble prize version of such an award, that is
|
|
|
A homosapien
|
2025-05-30 09:33:14
|
The Golden Raspberry Awards for CLI programs
|
|
|
jonnyawsom3
|
|
_wb_
That tool should be given a 'Command line interface of the year' award
|
|
2025-05-30 09:54:40
|
That goes to the Adobe DNG Converter for me. Case sensitive, order dependant, unlisted parameters, unless you find the example PDF on the website which also doesn't explain the ordering, with no user feedback at all
|
|
|
Quackdoc
|
2025-05-31 01:24:41
|
it's a shame because jxr is an... ok image format all things considered for what it sets out to accomplish, for sure a bit outdated now.
|
|
2025-06-01 10:18:59
|
huh, djpegli is quite slow to decode?
```ps
Benchmark 1: taskset --cpu 1 djpegli woag.jxl.jpg --disable_output
Time (mean ± σ): 1.217 s ± 0.004 s [User: 1.168 s, System: 0.037 s]
Range (min … max): 1.213 s … 1.224 s 5 runs
Benchmark 2: taskset --cpu 1 djpeg woag.jxl.jpg > /dev/null
Time (mean ± σ): 824.2 ms ± 123.2 ms [User: 790.0 ms, System: 24.5 ms]
Range (min … max): 750.7 ms … 1042.0 ms 5 runs
Benchmark 3: taskset --cpu 1 jpegtopnm woag.jxl.jpg > /dev/null
Time (mean ± σ): 847.1 ms ± 7.2 ms [User: 810.5 ms, System: 25.9 ms]
Range (min … max): 839.4 ms … 857.3 ms 5 runs
Summary
taskset --cpu 1 djpeg woag.jxl.jpg > /dev/null ran
1.03 ± 0.15 times faster than taskset --cpu 1 jpegtopnm woag.jxl.jpg > /dev/null
1.48 ± 0.22 times faster than taskset --cpu 1 djpegli woag.jxl.jpg --disable_output
```
|
|
|
Tirr
|
2025-06-01 10:44:37
|
djpegli decodes in f32 while libjpeg-turbo does it in integers I guess
|
|
|
CrushedAsian255
|
2025-06-01 10:46:39
|
also djpegli is optimised more for quality where libjpeg-turbo, as given in the name is specifically optimised to be really fast
|
|
2025-06-01 10:46:45
|
(probably explains why they use int instead of float)
|
|
|
damian101
|
|
Quackdoc
huh, djpegli is quite slow to decode?
```ps
Benchmark 1: taskset --cpu 1 djpegli woag.jxl.jpg --disable_output
Time (mean ± σ): 1.217 s ± 0.004 s [User: 1.168 s, System: 0.037 s]
Range (min … max): 1.213 s … 1.224 s 5 runs
Benchmark 2: taskset --cpu 1 djpeg woag.jxl.jpg > /dev/null
Time (mean ± σ): 824.2 ms ± 123.2 ms [User: 790.0 ms, System: 24.5 ms]
Range (min … max): 750.7 ms … 1042.0 ms 5 runs
Benchmark 3: taskset --cpu 1 jpegtopnm woag.jxl.jpg > /dev/null
Time (mean ± σ): 847.1 ms ± 7.2 ms [User: 810.5 ms, System: 25.9 ms]
Range (min … max): 839.4 ms … 857.3 ms 5 runs
Summary
taskset --cpu 1 djpeg woag.jxl.jpg > /dev/null ran
1.03 ± 0.15 times faster than taskset --cpu 1 jpegtopnm woag.jxl.jpg > /dev/null
1.48 ± 0.22 times faster than taskset --cpu 1 djpegli woag.jxl.jpg --disable_output
```
|
|
2025-06-01 11:30:08
|
expected it to be slower, actually
|
|
2025-06-01 11:30:29
|
but seems about right
|
|
|
Quackdoc
|
2025-06-01 11:59:25
|
this is quite a bit slower
|
|
|
damian101
|
2025-06-01 12:32:00
|
1/2 more time, 1/3 slower
|
|
2025-06-01 12:32:15
|
yes
|
|
2025-06-01 12:32:19
|
quite alright imo
|
|
|
RaveSteel
|
2025-06-01 04:58:53
|
<@&807636211489177661>
|
|
|
jonnyawsom3
|
2025-06-01 05:19:01
|
Oh you beat me to it
|
|
|
Cacodemon345
|
2025-06-01 05:38:52
|
2 scams/malicious ads in a row.
|
|
|
spider-mario
|
2025-06-02 09:53:07
|
https://github.com/microsoft/edit/blob/6fc049713b2f6421c5000443edd1e645a57b8e1f/src/oklab.rs
|
|
2025-06-02 09:53:19
|
why does a command-line text editor contain an Oklab implementation
|
|
|
Quackdoc
|
2025-06-03 12:41:59
|
probably something dumb like color accurate emoji renderinf
|
|
|
Nova Aurora
|
2025-06-03 02:28:49
|
It feels like they remade notepad but in the terminal
|
|
|
_wb_
|
2025-06-03 02:13:00
|
Dear experts on image coding quality,
one of the ongoing JPEG activities is JPEG AIC which targets the assessment of image coding quality. This activity aims to develop methods for subjective and objective image quality assessment with the goal to support developing image coding standards and implementations. For subjective assessment, the AIC-3 methodology is in the final stages of standardization and will be published as ISO/IEC 29170-3. For objective assessment, the JPEG Committee is considering initiating a new Part, AIC-4, of the JPEG AIC project.
The Final Call for Proposals (CfP) on Objective Image Quality Assessment was issued as an outcome of the 107th JPEG meeting in April 2025. Expressions of interest and registration may be submitted until June 15, 2025 (not obligatory). Submissions to the Call for Proposals are planned to be due September 29, 2025.
At https://jpeg.org/aic/documentation.html please find the relevant documents and related information
- ISO/IEC JTC 1/SC29/WG1 N101211, REQ "AIC-4 Proposal Submission Template"
- ISO/IEC JTC 1/SC29/WG1 N101157, REQ "Final Call for Proposals on Objective Image Quality Assessment (AIC-4)"
- ISO/IEC JTC 1/SC29/WG1 N101056, ICQ "Common Test Conditions on Objective Quality Assessment“
Also, the following blog post summarizes the concepts for the corresponding subjective quality assessment that is to by predicted by the metrics to be submitted for the above Call for Proposals: https://cloudinary.com/labs/aic-3-and-hdr
In case of any questions please write. We hope that you may find this call for proposals interesting and consider a submission that later might be integrated in the forthcoming ISO/IEC AIC-4 standard. You are also welcome to share this information with other interested parties, of course.
Kind regards,
Dietmar Saupe / Jon Sneyers
Co-Chairs JPEG AIC Ad hoc Group
--
Dietmar Saupe dietmar.saupe@uni-konstanz.de
Jon Sneyers jon@cloudinary.com
|
|
|
CrushedAsian255
|
|
_wb_
Dear experts on image coding quality,
one of the ongoing JPEG activities is JPEG AIC which targets the assessment of image coding quality. This activity aims to develop methods for subjective and objective image quality assessment with the goal to support developing image coding standards and implementations. For subjective assessment, the AIC-3 methodology is in the final stages of standardization and will be published as ISO/IEC 29170-3. For objective assessment, the JPEG Committee is considering initiating a new Part, AIC-4, of the JPEG AIC project.
The Final Call for Proposals (CfP) on Objective Image Quality Assessment was issued as an outcome of the 107th JPEG meeting in April 2025. Expressions of interest and registration may be submitted until June 15, 2025 (not obligatory). Submissions to the Call for Proposals are planned to be due September 29, 2025.
At https://jpeg.org/aic/documentation.html please find the relevant documents and related information
- ISO/IEC JTC 1/SC29/WG1 N101211, REQ "AIC-4 Proposal Submission Template"
- ISO/IEC JTC 1/SC29/WG1 N101157, REQ "Final Call for Proposals on Objective Image Quality Assessment (AIC-4)"
- ISO/IEC JTC 1/SC29/WG1 N101056, ICQ "Common Test Conditions on Objective Quality Assessment“
Also, the following blog post summarizes the concepts for the corresponding subjective quality assessment that is to by predicted by the metrics to be submitted for the above Call for Proposals: https://cloudinary.com/labs/aic-3-and-hdr
In case of any questions please write. We hope that you may find this call for proposals interesting and consider a submission that later might be integrated in the forthcoming ISO/IEC AIC-4 standard. You are also welcome to share this information with other interested parties, of course.
Kind regards,
Dietmar Saupe / Jon Sneyers
Co-Chairs JPEG AIC Ad hoc Group
--
Dietmar Saupe dietmar.saupe@uni-konstanz.de
Jon Sneyers jon@cloudinary.com
|
|
2025-06-04 01:06:20
|
can I propose mean square error 😄
|
|
|
Demiurge
|
2025-06-04 11:54:24
|
So is Jon pronounced like "yawn" or is it more like Hebrew "Elyon" (most high) and "Yonatan" (Jonathan) or Yiddish "Gut Yontif" (good holiday)
|
|
|
_wb_
|
2025-06-04 12:03:59
|
I don't speak Hebrew/Yiddish and I don't know how those are pronounced, but my name is pronounced "yonn" (the J is like the J in German/Dutch "Jan", not like the J in English "John")
|
|
|
CrushedAsian255
can I propose mean square error 😄
|
|
2025-06-04 12:05:35
|
There's a list of "anchor metrics" that will be used as a baseline to compare against, MSE is one of them (or rather PSNR, but that's basically the same thing)
|
|
|
Cacodemon345
|
2025-06-04 12:07:04
|
I will never understand the relationship in pronunciation between 'y' and 'j' across Latin-script languages.
|
|
|
Demiurge
|
2025-06-04 06:31:33
|
But is it an "oh" or an "ah" vowel sound?
|
|
|
spider-mario
|
2025-06-04 07:18:11
|
Gemini says /ɔ/ (open o)
|
|
2025-06-04 07:18:42
|
https://en.wikipedia.org/wiki/Open-mid_back_rounded_vowel
|
|
2025-06-04 07:19:20
|
(check out the audio sample)
|
|
2025-06-04 07:21:46
|
whether that’s “yawn” depends on the accent https://en.wiktionary.org/wiki/yawn#Pronunciation
|
|
|
Demiurge
|
2025-06-05 12:37:55
|
Hmm
|
|
2025-06-05 12:38:43
|
So like "over yonder"
|
|
|
spider-mario
|
2025-06-05 07:49:24
|
yonder seems more open https://en.wiktionary.org/wiki/yonder
|
|
|
_wb_
|
|
Demiurge
But is it an "oh" or an "ah" vowel sound?
|
|
2025-06-05 08:01:25
|
oh
|
|
|
juliobbv
|
2025-06-05 08:05:37
|
I've always said it like "yon" (in Spanish)
|
|
2025-06-05 08:05:43
|
please forgive me for my sins
|
|
|
_wb_
|
2025-06-05 08:29:17
|
How does "yon" sound in Spanish?
|
|
2025-06-05 08:40:08
|
In the International Phonetic Alphabet, my name is just <jon>.
The "j" is this one: https://en.wikipedia.org/wiki/Voiced_palatal_approximant
The "o" is this one: https://en.wikipedia.org/wiki/Close-mid_back_rounded_vowel (but the short version, the audio sample on that page is the long version, <oː>)
The "n" is this one: https://en.wikipedia.org/wiki/Voiced_dental,_alveolar_and_postalveolar_nasals
|
|
2025-06-05 08:40:35
|
I hope that clarifies it 🙂
|
|
|
juliobbv
|
|
_wb_
How does "yon" sound in Spanish?
|
|
2025-06-05 08:53:25
|
like [jo̞n]
|
|
2025-06-05 08:53:43
|
so actually very close to ground truth
|
|
2025-06-05 08:54:32
|
https://en.wikipedia.org/wiki/Mid_back_rounded_vowel
|
|
|
Meow
|
2025-06-05 12:52:03
|
Sounds like this https://en.wikipedia.org/wiki/Jiong
|
|
2025-06-05 12:52:43
|
If that j isn't [j]
|
|
|
spider-mario
|
|
juliobbv
https://en.wikipedia.org/wiki/Mid_back_rounded_vowel
|
|
2025-06-05 07:16:04
|
“mid back rounded vowel, you touch my tralala”
“voiced bilabial nasal, my ding ding dong”
|
|
|
_wb_
In the International Phonetic Alphabet, my name is just <jon>.
The "j" is this one: https://en.wikipedia.org/wiki/Voiced_palatal_approximant
The "o" is this one: https://en.wikipedia.org/wiki/Close-mid_back_rounded_vowel (but the short version, the audio sample on that page is the long version, <oː>)
The "n" is this one: https://en.wikipedia.org/wiki/Voiced_dental,_alveolar_and_postalveolar_nasals
|
|
2025-06-05 07:16:21
|
oops, sorry for spreading misinformation about the degree of openness then
|
|
|
Meow
|
2025-06-06 02:50:08
|
An online converter that lets you choose jpg and jpeg
|
|
2025-06-06 02:51:58
|
Wow the jpg and jpeg file sizes are identical 🤨
|
|
|
CrushedAsian255
|
2025-06-06 04:46:05
|
like its not even a jpeg / jfif thing
|
|
2025-06-06 04:46:12
|
its literally byte identical?
|
|
|
Meow
|
2025-06-06 10:23:38
|
https://meee.com.tw/changetype
|
|
|
CrushedAsian255
|
|
Meow
https://meee.com.tw/changetype
|
|
2025-06-06 10:51:42
|
他说404
|
|
|
Meow
|
2025-06-06 12:49:25
|
Walled
|
|
|
CrushedAsian255
|
|
Meow
Walled
|
|
2025-06-06 01:15:21
|
我需要台湾的IP吗?
|
|
|
Meow
|
2025-06-06 01:16:41
|
Uh the website breaks now
|
|
2025-06-06 01:17:25
|
The traffic may be too high now as Imgur blocks uploading from Taiwan
|
|
|
DZgas Ж
|
|
Meow
An online converter that lets you choose jpg and jpeg
|
|
2025-06-06 01:27:34
|
<:megapog:816773962884972565>
png --> jpeg
jpg
jfif
jpegli
guetzli jpeg
mozjpeg
turbojpeg
baseline jpeg
true jpeg 1992
|
|
|
monad
|
2025-06-06 02:00:51
|
forgot jpg_large
|
|
|
juliobbv
|
2025-06-06 02:10:43
|
420_jpeg
444_jpeg
|
|
|
CrushedAsian255
|
2025-06-06 02:46:48
|
what about png -> reconstructed jpeg
(png -> jpeg -> jxl -> jpeg)
|
|
|
Demiurge
|
|
Meow
The traffic may be too high now as Imgur blocks uploading from Taiwan
|
|
2025-06-06 06:05:26
|
What? Why?
|
|