|
|
ignaloidas
|
2025-11-05 07:41:26
|
but it's also not inherently lossy - it's just hard/rare for it to not be
|
|
|
AccessViolation_
|
2025-11-05 07:42:29
|
do you mean that if you took a VarDCT JXL, sent that into another JXL encoder, as pixel data, it could theoretically output the exact same blocks and be lossless?
|
|
2025-11-05 07:44:42
|
I think you can go one step further, DCT is a mathematically reversible (lossless) transform. it's just we throw away some of it where we can afford it. but if you don't throw anything away, and don't quantize, I think vardct can in theory be lossless?
|
|
2025-11-05 07:45:27
|
I'm not sure if you can setup quantization tables with 'multiplier values' of 1 so that no coefficients are rounded by being multiplied?
|
|
|
|
ignaloidas
|
|
AccessViolation_
do you mean that if you took a VarDCT JXL, sent that into another JXL encoder, as pixel data, it could theoretically output the exact same blocks and be lossless?
|
|
2025-11-05 07:45:51
|
I mean more that if you had a hypothetical camera sensor that transmitted it's data as a DCT, you could just plug that into VarDCT and it be lossless
|
|
|
AccessViolation_
|
2025-11-05 07:46:02
|
ahh right
|
|
2025-11-05 07:46:39
|
wait don't many camera sensors like laptop webcams basically output a stream of JPEGs?
|
|
|
|
ignaloidas
|
2025-11-05 07:46:59
|
MJPEG is a thing, yes
|
|
2025-11-05 07:47:24
|
though they can often output a raw stream as well
|
|
2025-11-05 07:47:59
|
but because USB 2.0 bandwidth is what it is, for anything remotely high res it's MJPEG
|
|
|
AccessViolation_
|
2025-11-05 07:49:25
|
ah that makes sense
|
|
|
|
ignaloidas
|
2025-11-05 07:51:15
|
on a semi-related note - there is eUSB2V2 that "solves" this issue by allowing one side of things to effectively be overclocked up to 10x the speed, while the other stays as-is, so that you could have internal cameras that can transmit raw high-res data without needing complex receivers unlike if they used USB 3.0
|
|
|
jonnyawsom3
|
2025-11-05 07:51:24
|
And yes we've made MJXL with an FFMPEG hack before
|
|
|
The Thunk
|
|
The Thunk
<@794205442175402004> in response to https://discord.com/channels/794206087879852103/803645746661425173/1433496087196340375
|
|
2025-11-05 10:24:05
|
Doubled my processing speed on single thread and did a 0.512 GB in 16 minutes and 27 seconds.
|
|
2025-11-05 10:30:40
|
|
|
|
_wb_
|
2025-11-05 10:44:04
|
Speed is not what is impressive about it, breaking basic math is
|
|
2025-11-05 10:44:46
|
Even if it would take a billion years per block, it would still be mathematically impossible
|
|
|
Adrian The Frog
|
2025-11-05 11:28:52
|
would be really neat to store and retrieve data in the cpu branch prediction between the encoder and decoder
i'm sure some security researcher has figured out how to do that
|
|
|
The Thunk
|
|
_wb_
Speed is not what is impressive about it, breaking basic math is
|
|
2025-11-06 01:28:13
|
Interesting, what I was doing before was very slow. So, this speed up is huge. I was mostly focused on compressing binary and that is a fringe benefit of my process. So, even though I can lossless compress binary my speed and rate of compression isn't useful? (Compared to other methods?)
|
|
|
jonnyawsom3
|
2025-11-06 01:45:04
|
Speed is nice, but if you are achieving such compression, that alone is worth it
|
|
|
Exorcist
|
|
ignaloidas
can you really tell from looking at the file (ignoring the YCbCr bit) whether it's lossless or not tho?
|
|
2025-11-06 05:33:41
|
|
|
|
_wb_
Speed is not what is impressive about it, breaking basic math is
|
|
2025-11-06 05:51:41
|
I have to more and more believe this is same story as Sloot Digital Coding System, from misunderstanding shared dictionary to intentional cheating
|
|
|
_wb_
|
2025-11-06 07:52:57
|
Yep... It's the modern version of alchemy, snake oil and perpetuum mobile inventions, I guess.
|
|
|
AccessViolation_
|
|
Exorcist
I have to more and more believe this is same story as Sloot Digital Coding System, from misunderstanding shared dictionary to intentional cheating
|
|
2025-11-06 09:15:53
|
so brotli >:3
|
|
2025-11-06 09:17:10
|
(I joke, a compression algorithm with a shared dictionary is perfect for use on the web where a lot of data will be html/js/json)
|
|
|
Exorcist
|
2025-11-06 12:37:07
|
There is a more fancy shared dictionary:
next-token-prediction language model as the probability distribution of arithmetic coding
|
|
2025-11-06 12:39:50
|
The bit size of every encoded token is the cross entropy of model prediction vs ground truth (one-hot)
|
|
|
The Thunk
|
|
Exorcist
I have to more and more believe this is same story as Sloot Digital Coding System, from misunderstanding shared dictionary to intentional cheating
|
|
2025-11-06 01:51:12
|
If a dictionary is used you have to account for the space used in the dictionary as overhead. My reports are the actual storage size and do not require a dictionary each block has enough data to self describe and self define back to the original value.
|
|
|
jonnyawsom3
|
2025-11-06 02:17:46
|
That's... What they're doing. They're getting it reviewed by someone else
|
|
|
Exorcist
|
2025-11-06 02:22:23
|
He think his secret power worth 500 euro
|
|
|
monad
|
|
That's... What they're doing. They're getting it reviewed by someone else
|
|
2025-11-06 03:28:47
|
Not likely. The more messages posted, the more they read like a formulaic troll tactic.
|
|
|
LMP88959
|
2025-11-06 03:44:20
|
https://www.gamedev.net/forums/topic/11259-mp3-beating-compression/
|
|
2025-11-06 03:44:45
|
if you havent seen this ancient forum thread yet you should haha
|
|
|
Exorcist
|
2025-11-06 03:50:21
|
```
Original post by kieren_j
Well actually, I posted that infamous first message because thats what my compressor produced - then I found a little (!) problem in my code that meant instead of reading and writing all the bits of a byte, it was only using the first.
I didn''t really have the guts to say it went wrong like that...
I still feel really bad though.
---------------
kieren_j
```
|
|
|
The Thunk
|
|
monad
Not likely. The more messages posted, the more they read like a formulaic troll tactic.
|
|
2025-11-06 03:57:39
|
I am just updating the chat and potentially interested parties as I make breakthroughs. Since, I last discussed in the chat I am now processing around 1000 blocks a second where as before I was only getting 10 blocks a second. I am not trying to troll anyone. Just enjoying the process and learning as I go. Some people give good constructive feedback. So, I continue to participate in dialogues.
|
|
|
AccessViolation_
|
2025-11-06 04:22:56
|
the only feedback you've gotten is that what you've claimed is impossible
|
|
2025-11-06 04:23:11
|
people have been trying to get through to you with this
|
|
|
_wb_
|
2025-11-06 04:33:17
|
How did you do the benchmark I asked you to do (taking 1000 blocks of 512 bytes from /dev/random and trying to compress them), if you're not using linux but Windows? I haven't used Windows in 27 years but last time I checked it didn't have a /dev/random...
|
|
|
monad
|
2025-11-06 04:34:47
|
I might as well add now that "Linux is not my OS" is a bs excuse. Unlike the safely guarded bit-discarding method, it is open and available to anyone.
|
|
|
Exorcist
|
2025-11-06 04:37:22
|
|
|
2025-11-06 04:39:34
|
|
|
2025-11-06 04:40:38
|
This is his first time that he censored his log screenshot to hide the data size
If he has the willing to modify the log, he can fake the data size too
|
|
|
_wb_
|
2025-11-06 04:42:35
|
looks like <@991011772381163581> deleted all those original messages? Maybe they finally figured out the flaw and are now very embarrassed and hiding the traces
|
|
|
Exorcist
|
2025-11-06 04:43:55
|
His log is already censored before he deleted message
|
|
|
The Thunk
|
|
_wb_
looks like <@991011772381163581> deleted all those original messages? Maybe they finally figured out the flaw and are now very embarrassed and hiding the traces
|
|
2025-11-06 04:44:03
|
No, I was told not to use that forum. So, now I am in this forum. There is random block generation and it doesn't need to be truly random just random enough. A million blocks is a large enough sample size.
|
|
|
AccessViolation_
the only feedback you've gotten is that what you've claimed is impossible
|
|
2025-11-06 04:44:58
|
That is why I wrote code to test my algorithm. I wouldn't be pursing further if my code was not producing the results I claim.
|
|
|
_wb_
|
2025-11-06 04:46:28
|
https://en.wikipedia.org/wiki/Mechanical_Turk#/media/File:Kempelen_chess1.jpg
|
|
|
Exorcist
|
|
_wb_
https://en.wikipedia.org/wiki/Mechanical_Turk#/media/File:Kempelen_chess1.jpg
|
|
2025-11-06 04:47:34
|
In the day without computer, at least you need a very clever player for such magic show
|
|
|
The Thunk
|
|
_wb_
https://en.wikipedia.org/wiki/Mechanical_Turk#/media/File:Kempelen_chess1.jpg
|
|
2025-11-06 04:48:12
|
I don't think I fit inside the code... If my algorithm didn't work it wouldn't be able to compress a single block. Random bits are not supposed to be compressible.
|
|
|
_wb_
|
2025-11-06 04:50:48
|
ok I'll play along one more time. What does this block compress to? Show me a hexdump of the compressed version please.
```
9961fe4013b95b1de9c2305990fdc817cc9a46d35cb920065a866995d7bd
bc87f0d74ce4e10e193f7a9da1d11542e80ef1c14c494628dee873d7e5b8
a93cc5d4532c146c039fb001d15e6308832b43c95e288a5e293de9e564db
571d702c3d4fc386aca22c0e5f3c42643757977048be328579440a15f50f
243bcf670a1c4066c339bc82ea3b0b0326fbd503eef9a08f4cbc1b7c1015
66364c38d3e9eeb809f8bf21464449eb43449b628b317b97e09ef652fe26
e14a4db6fdb70e368bcd128a68dc463ae4b72171fb474eae70140849a947
e195c7d4307cfb2b7c5aa8eca70d93b4c110deffa18ff2bf41e2639a0dee
9e05553361fbb7528c3294a0b723eebb7bc3c0dedbcef1168844bc2690ac
4d49d238dc59e609c5fe0806e295640bac12d2bcc1a9d6042bde35678a42
3fd7cd1327dda3db9c389f6ba95644797ff144ad8b4751f69627ba3e1609
6a11e67e33a64679e1d9ac1e3b86c9428a577cb2f834449f360d43b89cd1
e581ee9edb3d4d5bbf45b0aba3aa5294adddf05db2e7f7518a7af6fa2353
8ef50a7e4b5811e20ae76a42f044231bb7cb8859290b9e0f2172dea2b337
d8716b1ab041da64d0bcb3da8ac6bf9c0204bacbf4789f06984afad2002d
58b678698ec0e80229d71d4be8718aaf2012053aab49a6fa15f163374c95
a151e9eb1d9f71b637df2f5d02d62881280d7e9c95a0b20cc5c40efd23f6
0082
```
|
|
|
Exorcist
|
2025-11-06 04:52:08
|
write your encoded data into file system, and show the file properties by right click menu
You claim you are using Windows
|
|
2025-11-06 05:03:42
|
```
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>Download 1024-bit Random File</title>
</head>
<body>
<button id="downloadBtn">Download 1024-bit random file</button>
<script>
function downloadRandomBitsFile(bits = 1024, filename = 'random-1024bit.bin') {
if (bits % 8 !== 0) {
throw new Error('bits must be a multiple of 8')
}
const byteLen = bits / 8
const arr = new Uint8Array(byteLen)
crypto.getRandomValues(arr)
const blob = new Blob([arr], { type: 'application/octet-stream' })
const url = URL.createObjectURL(blob)
const a = document.createElement('a')
a.href = url
a.download = filename
document.body.appendChild(a)
a.click()
a.remove()
setTimeout(() => URL.revokeObjectURL(url), 5000)
}
document.getElementById('downloadBtn').addEventListener('click', () => {
downloadRandomBitsFile(1024, 'random-1024bit.bin')
})
</script>
</body>
</html>
```
|
|
2025-11-06 05:04:10
|
This is a random file generated by `JS_RNG.html`
|
|
|
The Thunk
|
|
_wb_
ok I'll play along one more time. What does this block compress to? Show me a hexdump of the compressed version please.
```
9961fe4013b95b1de9c2305990fdc817cc9a46d35cb920065a866995d7bd
bc87f0d74ce4e10e193f7a9da1d11542e80ef1c14c494628dee873d7e5b8
a93cc5d4532c146c039fb001d15e6308832b43c95e288a5e293de9e564db
571d702c3d4fc386aca22c0e5f3c42643757977048be328579440a15f50f
243bcf670a1c4066c339bc82ea3b0b0326fbd503eef9a08f4cbc1b7c1015
66364c38d3e9eeb809f8bf21464449eb43449b628b317b97e09ef652fe26
e14a4db6fdb70e368bcd128a68dc463ae4b72171fb474eae70140849a947
e195c7d4307cfb2b7c5aa8eca70d93b4c110deffa18ff2bf41e2639a0dee
9e05553361fbb7528c3294a0b723eebb7bc3c0dedbcef1168844bc2690ac
4d49d238dc59e609c5fe0806e295640bac12d2bcc1a9d6042bde35678a42
3fd7cd1327dda3db9c389f6ba95644797ff144ad8b4751f69627ba3e1609
6a11e67e33a64679e1d9ac1e3b86c9428a577cb2f834449f360d43b89cd1
e581ee9edb3d4d5bbf45b0aba3aa5294adddf05db2e7f7518a7af6fa2353
8ef50a7e4b5811e20ae76a42f044231bb7cb8859290b9e0f2172dea2b337
d8716b1ab041da64d0bcb3da8ac6bf9c0204bacbf4789f06984afad2002d
58b678698ec0e80229d71d4be8718aaf2012053aab49a6fa15f163374c95
a151e9eb1d9f71b637df2f5d02d62881280d7e9c95a0b20cc5c40efd23f6
0082
```
|
|
2025-11-06 05:04:56
|
I ran it for intellectual curiosity. It compressed. I don't want to have an issue with reverse engineering so I am keeping the compressed version to myself. I have someone I somewhat trust to evaluate my code. Hopefully I find out within the month. Thank you for taking the time to respond to me. I am not seeking validation from anyone on this discord. Thank you for your constructive feedback.
|
|
|
Exorcist
|
2025-11-06 05:06:21
|
Did you compress the ASCII text or binary?
|
|
|
|
afed
|
2025-11-06 05:06:31
|
and compression is one thing, the most difficult part is decompression <:KekDog:805390049033191445>
|
|
|
The Thunk
|
|
Exorcist
Did you compress the ASCII text or binary?
|
|
2025-11-06 05:08:08
|
Hex is just 4 bits... And, both hex and bits are just numbers... Compressing numbers and decompressing numbers.
|
|
|
afed
and compression is one thing, the most difficult part is decompression <:KekDog:805390049033191445>
|
|
2025-11-06 05:09:16
|
Yes, it is a lossless process. I don't think you can compress numbers lossy and have that be useful for files.
|
|
|
Exorcist
|
|
The Thunk
Hex is just 4 bits... And, both hex and bits are just numbers... Compressing numbers and decompressing numbers.
|
|
2025-11-06 05:10:31
|
You confirm your transform from ASCII text to binary are correct?
|
|
2025-11-06 05:10:50
|
That is the reason to use file system
|
|
|
The Thunk
|
|
Exorcist
You confirm your transform from ASCII text to binary are correct?
|
|
2025-11-06 05:11:21
|
ASCII is significantly larger per character than 4 bits. Hex is an INT value...
|
|
|
Exorcist
You confirm your transform from ASCII text to binary are correct?
|
|
2025-11-06 05:13:24
|
ASCII: 7 bits per character (commonly stored in 8-bit bytes).
Hex: not a character encoding — it's a numeral system. Each hex digit represents 4 bits; two hex digits commonly represent one byte (8 bits).
UTF‑8: variable-length encoding — 1 to 4 bytes per Unicode code point:
1 byte (8 bits) for U+0000..U+007F (same as ASCII),
2 bytes (16 bits) for U+0080..U+07FF,
3 bytes (24 bits) for U+0800..U+FFFF,
4 bytes (32 bits) for U+10000..U+10FFFF.
|
|
|
Exorcist
|
2025-11-06 05:13:59
|
In previous screenshot you read text from cmd, write text to cmd
|
|
|
monad
|
2025-11-06 05:15:17
|
\> numerical mumbo jumbo
ChatGPT is the compressor.
|
|
|
Exorcist
|
2025-11-06 05:18:36
|
I don't want the transform chain
[ASCII (used by cmd) -- hex -- binary]
I want directly read binary file, directly write binary file
|
|
|
monad
|
2025-11-06 05:27:26
|
Meanwhile, real compressors.
|
|
|
The Thunk
|
|
Exorcist
I don't want the transform chain
[ASCII (used by cmd) -- hex -- binary]
I want directly read binary file, directly write binary file
|
|
2025-11-06 05:28:53
|
Still optimizing the code working on speed. I want to be able to get similar speeds to MB/s like other compressors. I already did a separate compressor and de-compressor code. Printing the compressed hex and using it to decompress in the de-compressor code and comparing the original input to code 1 and the final output of code 2.
|
|
|
monad
|
2025-11-06 05:30:01
|
That's a very verbose way of saying nothing at all.
|
|
|
The Thunk
|
|
monad
That's a very verbose way of saying nothing at all.
|
|
2025-11-06 05:31:15
|
I have limited development time. I can remake the code to their liking or I can keep experimenting and optimizing the process...
|
|
|
Exorcist
|
|
_wb_
If you make an outrageous claim (40% compression on random bits), but aren't willing to share any proof besides "believe me, it's true", it's hard to take it serious. Maybe you don't understand how outrageous the claim actually is but that doesn't make it any more believable.
|
|
2025-11-06 05:42:03
|
The only possible situation is:
He confuse
- ASCII text annotation of hexadecimal digit (nibble in byte)
- hexadecimal digit (nibble)
- binary file (byte)
|
|
|
monad
|
|
monad
Meanwhile, real compressors.
|
|
2025-11-06 05:45:12
|
An amazing result as even sophisticated methods can spectacularly fail given antagonistic data.
```22406 sharnd.0.bin
22614 sharnd.0.bin.rz
22406 per.6
74368 per.6.rz```
|
|
|
_wb_
|
2025-11-06 05:46:12
|
Most general data compression schemes have a fallback to just encode raw bytes with some minimal header overhead
|
|
2025-11-06 05:46:49
|
if you don't have that, then yes, random bits can blow up
|
|
|
The Thunk
I ran it for intellectual curiosity. It compressed. I don't want to have an issue with reverse engineering so I am keeping the compressed version to myself. I have someone I somewhat trust to evaluate my code. Hopefully I find out within the month. Thank you for taking the time to respond to me. I am not seeking validation from anyone on this discord. Thank you for your constructive feedback.
|
|
2025-11-06 05:48:44
|
OK, keep the compressed version to yourself. Now pass it to your decompressor and check what output you get from it.
|
|
2025-11-06 05:52:50
|
It wouldn't be the first time someone thinks they have found something amazing, only to then understand they missed something big. I remember someone once claimed super lossy image compression performance, outperforming anything else by a factor of 3 or more. Turned out he was measuring compression rate in bytes per pixel while everyone else was using bits per pixel. Oopsie!
|
|
2025-11-06 05:53:43
|
(actually I don't remember this, it's a story I heard from Touradj of something that happened during JPEG 2000 development)
|
|
|
jonnyawsom3
|
|
AccessViolation_
the only feedback you've gotten is that what you've claimed is impossible
|
|
2025-11-06 06:19:38
|
We've been chatting in the voice channel occasionally, last night I explained the concept of VarDCT
|
|
|
lonjil
|
2025-11-06 06:22:34
|
Who wants to bet the compression he gets is due to counting the hex input as 1 char = 1 byte of data but then checking the binary sized of the "compressed" data buffer?
|
|
|
The Thunk
|
|
lonjil
Who wants to bet the compression he gets is due to counting the hex input as 1 char = 1 byte of data but then checking the binary sized of the "compressed" data buffer?
|
|
2025-11-06 06:57:21
|
No, its all bits each hex is just 4 bits. Hex is human readable whereas binary is not. The completed code will work on bits only when done and not have the overhead of converting hexadecimal to binary.
|
|
|
Exorcist
|
2025-11-06 07:12:52
|
"Trust me bro, I don't know ASM or C or C++, I also don't use hex viewer, but I can transform bits correctly"
|
|
|
monad
|
2025-11-06 07:51:54
|
https://www.youtube.com/watch?v=2sRS1dwCotw
|
|
|
AccessViolation_
|
|
The Thunk
No, I was told not to use that forum. So, now I am in this forum. There is random block generation and it doesn't need to be truly random just random enough. A million blocks is a large enough sample size.
|
|
2025-11-06 09:50:42
|
> There is random block generation and it doesn't need to be truly random just random enough
is your compressor tuned to the way your "random enough" random generator works?
|
|
|
The Thunk
I ran it for intellectual curiosity. It compressed. I don't want to have an issue with reverse engineering so I am keeping the compressed version to myself. I have someone I somewhat trust to evaluate my code. Hopefully I find out within the month. Thank you for taking the time to respond to me. I am not seeking validation from anyone on this discord. Thank you for your constructive feedback.
|
|
2025-11-06 09:53:59
|
it compressed how well?
|
|
2025-11-06 09:54:15
|
do you see this 40% with your own random data or with any random data from any source?
|
|
2025-11-06 09:55:27
|
if by "it compressed" you just meant "it produced an output" then, yeah
|
|
2025-11-06 10:04:57
|
actually nvm, don't worry about it
|
|
|
lonjil
|
2025-11-07 08:23:59
|
Day 1 of working on my super good FPGA video codec:
I said that I will be using 18-bit math, since FPGAs tend to have 18-bit multipliers. I'm realizing now that the most annoying part of implementing dct1d will be producing sqrt and cosine values of adequete precision without too big a LUT, without too many LEs, and without spending too many cycles.
|
|
|
|
veluca
|
2025-11-07 08:39:37
|
not planning to unroll the multiplications then, I take it :p
|
|
|
lonjil
|
2025-11-07 08:47:35
|
we'll see :p
|
|
2025-11-07 08:49:37
|
the chip I'm using has 144 18-bit multipliers, and there probably aren't *that* many other things I might want to use them for on the same SoC, so I'd feel comfortable using a large chunk of them.
|
|
2025-11-07 08:51:44
|
To start with, I'll use a very advanced tool (Desmos :v) to figure out how many LUT values I actually need.
|
|
|
|
veluca
|
2025-11-07 09:06:42
|
IIRC you can get away with basically N for a N-DCT
|
|
2025-11-07 09:07:18
|
i.e. a N-DCT needs (N/2) constants + those for a (N/2)-DCT
|
|
2025-11-07 09:07:30
|
(exception being the 2-DCT which needs 0)
|
|
2025-11-07 09:07:45
|
at least, that's with the jxl-rs and libjxl impl
|
|
2025-11-07 09:08:02
|
(and something needs a sqrt2)
|
|
|
lonjil
|
2025-11-07 09:16:59
|
mm
I'll be referencing jxl-rs for this, I think. And jxl-tiny, considering what it's for.
|
|
|
|
veluca
|
2025-11-07 09:32:45
|
pretty sure it uses the same DCT impl
|
|
|
AccessViolation_
|
2025-11-08 11:24:55
|
this is such weird statement to me
|
|
2025-11-08 11:25:11
|
<https://www.sony.co.jp/en/Products/LDAC/info/>
|
|
|
RaveSteel
|
2025-11-08 11:32:58
|
It is a weird statement because it is not based on reality
|
|
2025-11-08 11:34:29
|
This is the old Debatte of analog vs digital, but extended into lossless vs lossy
|
|
|
AccessViolation_
|
2025-11-08 11:50:14
|
what they're saying boils down to "lossy compression of a high-resolution signal is better than lossless compression of a low-resolution signal" which is not a fair comparison to make
|
|
2025-11-08 12:00:45
|
it seems sony never confirmed what LDAC stands for
|
|
2025-11-08 12:01:28
|
it's definitely a lossy codec, though Wikipedia says it's an acronym for "Lossless Digital Audio Codec"
|
|
|
lonjil
|
|
AccessViolation_
what they're saying boils down to "lossy compression of a high-resolution signal is better than lossless compression of a low-resolution signal" which is not a fair comparison to make
|
|
2025-11-08 12:03:57
|
Tbf, if the lossy high res has the same bit rate as the lossless low res signal, it's a good comparison if you're goal is to show to shower that higher res is a good idea.
|
|
|
AccessViolation_
|
2025-11-08 12:06:09
|
I meant bit rate with resolution
|
|
2025-11-08 12:06:12
|
or bit depth
|
|
2025-11-08 12:06:33
|
in the graphic, they're claiming the top right signal is better than the bottom left signal, essentially
|
|
2025-11-08 12:24:37
|
sony's marketing claims are dubious but the previous editor's statement about them was also false
|
|
2025-11-08 12:26:12
|
also it seems we don't really know what LDAC stands for, apparently some people assume it stands for 'Lossless Digital Audio Codec' which would be categorically wrong
|
|
2025-11-08 12:29:11
|
I could elaborate about the dubious marketing and acronym that suspiciously implies lossless encoding but then I'd have to dig up a bunch of reliable secondary sources that talk about exactly this and I'm too low energy for that right now <:SadCheems:890866831047417898>
|
|
2025-11-08 12:35:46
|
also, huffman coding <:BanHammer:805396864639565834>
|
|
|
jonnyawsom3
|
|
AccessViolation_
this is such weird statement to me
|
|
2025-11-08 12:49:45
|
The part at the bottom suggests a bandwidth limit to me. FLAC may be lossless but detail is lost in transmission due to the network/decoder not keeping up. Lossy allows greater range in the same bandwidth
Maybe...
|
|
|
AccessViolation_
|
2025-11-08 12:56:29
|
there is a bandwidth limit since it's designed for bluetooth yeah, and somewhere else it says lossless encoding is not feasible for bluetooth because of that limit.
but as for the claim it's making, it's saying lossy encoding of *high-res audio* is better than lossless encoding of *high-quality* content, and it considers *high-quality audio* to be lower resolution/bit depth than *high-res audio*
you can see in the named graph, that the highly quantized ones at the bottom are called "high-quality" and the lesser quantized ones are called "high-res"
|
|
|
jonnyawsom3
|
2025-11-08 12:57:33
|
I... Think I understand? High res has larger range, but high quality is quantized less
|
|
|
AccessViolation_
|
2025-11-08 12:59:22
|
I think what they're saying is akin to saying a 2000 x 2000 JPEG ("lossy High-Res Audio content") is better than a 1000 x 1000 PNG ("lossless High quality content") that's nearest-neighbor upsampled to 2000 x 2000 again
|
|
2025-11-08 01:01:24
|
which is true, but a lossless representation of a downsampled signal is not to be considered lossless relative to the source
|
|
2025-11-08 01:02:57
|
and unless you're sure what they mean with high-quality and high-res it's really confusing
|
|
2025-11-08 01:15:29
|
also what happened to that ultra hdr article? was it so bad it was decided to just delete it? <:KekDog:805390049033191445>
|
|
2025-11-08 01:16:01
|
oh it's back? I could've sworn I couldn't find it just a few days ago
|
|
2025-11-08 01:17:15
|
oh no right, it was this. so effectively, "yes"
|
|
|
Exorcist
|
|
AccessViolation_
this is such weird statement to me
|
|
2025-11-08 01:54:03
|
Key point:
They think lossy 192k Hz > lossless 48k Hz
|
|
|
dogelition
|
|
AccessViolation_
this is such weird statement to me
|
|
2025-11-08 01:54:21
|
lmao what
|
|
2025-11-08 01:55:18
|
(1) isn't even true either
|
|
|
AccessViolation_
|
2025-11-08 01:56:02
|
it isn't?
|
|
|
dogelition
|
2025-11-08 01:56:26
|
https://people.xiph.org/~xiphmont/demo/neil-young.html
|
|
|
Exorcist
|
2025-11-08 01:56:27
|
Totally bullshit
|
|
|
RaveSteel
|
2025-11-08 01:58:47
|
It's marketing for "audiophiles"
|
|
2025-11-08 02:01:33
|
The people at xiph also published a 30 minute explainer some years ago regarding this
|
|
2025-11-08 02:02:23
|
https://wiki.xiph.org/Videos/A_Digital_Media_Primer_For_Geeks
|
|
2025-11-08 02:02:25
|
https://wiki.xiph.org/Videos/Digital_Show_and_Tell
|
|
|
Exorcist
|
2025-11-08 02:04:01
|
Most audiophiles are uneducated, can't understand Nyquist-Shannon sampling theorem
(why 44k Hz sample point can represent 20k Hz sine wave, won't become triangular wave or square wave)
|
|
|
dogelition
|
2025-11-08 02:04:39
|
also, Bluetooth LE Audio is genuinely a great technology
lc3 (the mandatory codec) has good quality at low complexity and low latency
and auracast is great for sharing audio, accessibility at venues and (soon™) announcements at airports and stuff
|
|
2025-11-08 02:04:56
|
think it obsoletes most if not all the proprietary codecs
|
|
|
RaveSteel
|
2025-11-08 02:05:26
|
The only real problem with bluetooth is with its massive quality limiation for bluetooth headsets
|
|
2025-11-08 02:05:34
|
everything else is pretty great
|
|
|
dogelition
|
2025-11-08 02:05:49
|
LE Audio fixes this (to some extent)
|
|
|
RaveSteel
|
2025-11-08 02:06:22
|
oh, and that one piece of the headset has double the energy usage due to it transmitting audio to the other piece
|
|
|
dogelition
|
2025-11-08 02:06:44
|
this isn't actually necessarily true in practice
|
|
|
RaveSteel
|
2025-11-08 02:07:00
|
But for the most part is how it is integrated
|
|
|
dogelition
|
2025-11-08 02:07:11
|
https://assets.qualcomm.com/rs/385-TWS-803/images/whitepaper-the-evolution-of-true-wireless-technology-2020.pdf
|
|
2025-11-08 02:07:25
|
|
|
|
Quackdoc
|
|
AccessViolation_
sony's marketing claims are dubious but the previous editor's statement about them was also false
|
|
2025-11-08 02:07:43
|
not only dubious, it's an outright lie
|
|
|
dogelition
|
2025-11-08 02:07:49
|
and there are LE Audio tws that still operate like that instead of acting as 2 devices
|
|
|
RaveSteel
|
|
dogelition
|
|
2025-11-08 02:07:50
|
Is there any headset that implements this?
|
|
|
dogelition
|
2025-11-08 02:08:02
|
anything that uses a qualcomm soc, presumably?
|
|
|
Quackdoc
|
|
Quackdoc
not only dubious, it's an outright lie
|
|
2025-11-08 02:08:16
|
LDAC marketing is contingent on the fact that 990 BT audio exists, but not it's feasibility
|
|
|
dogelition
also, Bluetooth LE Audio is genuinely a great technology
lc3 (the mandatory codec) has good quality at low complexity and low latency
and auracast is great for sharing audio, accessibility at venues and (soon™) announcements at airports and stuff
|
|
2025-11-08 02:09:02
|
LC3 chad
|
|
2025-11-08 02:09:27
|
I like how LC3Plus is mostly useless now since they punted all the goodies to LC3
|
|
2025-11-08 02:10:03
|
LC3Plus literally just offers a lower latency and 96khz audio pretty much
|
|
|
dogelition
|
|
Quackdoc
LC3 chad
|
|
2025-11-08 02:12:21
|
got these 2 days ago, zero issues with le audio so far
|
|
2025-11-08 02:12:36
|
and they support fully parametric 10 band eq (some assembly required)
|
|
|
Quackdoc
|
2025-11-08 02:13:27
|
ill have to try them some time, but I dont have anything currently that supports LC3 properly, I just use it for my local speaker setup.
|
|
|
RaveSteel
|
|
dogelition
anything that uses a qualcomm soc, presumably?
|
|
2025-11-08 02:16:37
|
hm, will have to have a look then for a new pair then
|
|
2025-11-08 02:16:59
|
my current headset, which is 5 years old, has 5x energy usage on the right piece due to aged battery compared to the left piece
|
|
2025-11-08 02:17:13
|
which boils down to an hour max of listening
|
|
|
AccessViolation_
|
2025-11-08 08:04:51
|
why do youtube's encoders incorrectly assume they can disproportionally reduce quality in dark areas?
|
|
2025-11-08 08:05:31
|
or does it drop quality equally everywhere regardless of brightness, and we're just more sensitive to those lower brightness differences? I know the latter is true, but I assume encoders usually account for that?
|
|
2025-11-08 08:09:02
|
do they assume dark things are less *important* maybe?
|
|
|
_wb_
|
2025-11-08 08:17:21
|
The whole point of the transfer curve in a colorspace is to take the very nonlinear human perception of brightness into account...
|
|
2025-11-08 08:19:18
|
but it's kind of hard to know the actual viewing conditions. If the entire image is dark (not just a dark region in an otherwise bright image), and the room is also dark, then your eyes will adapt and you are much more sensitive than in a condition where bright stuff is also in view
|
|
2025-11-08 08:21:24
|
so if you zoom in on a dark region until your entire screen is only dark stuff, you will not only see more artifacts because of the zooming, but also because of adaptation
|
|
2025-11-08 08:25:48
|
if encoders have to take into account the full dynamic range of humans including adaptation, an insane precision is required in the darks since at some point it's not just cones but also rods and we can almost detect individual photons with those when it's sufficiently dark
|
|
|
AccessViolation_
|
2025-11-08 08:31:49
|
hm that makes sense
|
|
2025-11-08 08:33:53
|
still, dark segments in youtube videos are so bad that creators sometimes have to artificially boost the brightness so half the frame's content doesn't get quantized away
|
|
2025-11-08 08:35:02
|
it sort of reminds me of using a low intensity target in jxl
|
|
2025-11-08 08:38:23
|
what you said should apply to encoders in general, but I haven't noticed images with these issues, nor videos of dark areas I've taken myself, so it doesn't really explain why youtube specifically does really bad in dark scenes and more or less fine in well lit scenes
|
|
2025-11-08 08:43:10
|
> we can almost detect individual photons with those when it's sufficiently dark
also, that's incredible, I didn't know our eyes were anything close to this sensitive
|
|
|
jonnyawsom3
|
2025-11-08 10:17:28
|
Once or twice I've ended up in countryside without a light, it gets to a point you can practically see noise like a camera. Blotchy areas of grey in otherwise pure black
|
|
|
AccessViolation_
or does it drop quality equally everywhere regardless of brightness, and we're just more sensitive to those lower brightness differences? I know the latter is true, but I assume encoders usually account for that?
|
|
2025-11-08 10:22:08
|
The quantizer sees a difference of 1 regardless if it's bright or dark, even though visually the range is weighted 80% towards bright colors
There's good demos by the AV1 guys https://gitlab.com/AOMediaCodec/SVT-AV1/-/blob/master/Docs/Appendix-Variance-Boost.md
|
|
|
Exorcist
|
|
AccessViolation_
why do youtube's encoders incorrectly assume they can disproportionally reduce quality in dark areas?
|
|
2025-11-09 04:26:56
|
overfit PSNR
|
|
|
_wb_
|
2025-11-09 09:15:55
|
I think there are a few things working together to make video codecs often very bad at dark scenes/regions, turning them into a blocky mess:
- the transfer curves typically used (Rec709 etc) don't really have a lot of precision in the darks to begin with
- using tv-range instead of full range further reduces the precision
- YCbCr is perceptually not a very good colorspace, especially in the darks you actually need the contribution from the chroma components to make gradients etc look good
- doing 4:2:0 and using aggressive chroma quantization (both are typical for video codecs) makes this even worse
- still too much PSNR optimization in video codecs, and PSNR is basically not sensitive to banding/blocking issues — no per-pixel error metric that doesn't consider the spatial aspect can detect that since these artifacts are creating low per-pixel error yet they are very obvious due to the spatial structure
|
|
|
Hefresh Lashlan
|
|
dogelition
got these 2 days ago, zero issues with le audio so far
|
|
2025-11-09 12:53:43
|
its cenrosed
|
|
|
dogelition
|
2025-11-09 12:54:01
|
that's my name (idk why that shows there)
|
|
|
Hefresh Lashlan
|
|
dogelition
that's my name (idk why that shows there)
|
|
2025-11-09 12:55:41
|
is there an algorithim that uncencors it?
|
|
2025-11-09 12:56:11
|
pretty sure ai can fill the gaps
|
|
|
AccessViolation_
|
2025-11-09 01:12:19
|
AI is not magic, the best it could do in this case is guess
|
|
|
jonnyawsom3
|
|
Hefresh Lashlan
is there an algorithim that uncencors it?
|
|
2025-11-09 02:06:49
|
... Why would they help you uncensor their own image?
|
|
|
Hefresh Lashlan
|
|
... Why would they help you uncensor their own image?
|
|
2025-11-09 02:10:39
|
I thought that maybe they were interested in that
|
|
|
AccessViolation_
|
2025-11-09 05:28:47
|
two chatbots (Phind 70B and GPT-4o-mini) claiming JPEG XL supports up to 16-bit per channel 😵💫
|
|
2025-11-09 05:35:13
|
oh good
|
|
2025-11-09 05:36:33
|
crazy how JPEG was already so well adopted before it was invented
|
|
2025-11-09 05:42:19
|
both also claim webp supports a bit depth higher of 8 bpc in those tables btw...
|
|
|
jonnyawsom3
|
|
AccessViolation_
two chatbots (Phind 70B and GPT-4o-mini) claiming JPEG XL supports up to 16-bit per channel 😵💫
|
|
2025-11-09 06:12:50
|
Not *technically* wrong if it meant integers
|
|
|
AccessViolation_
|
2025-11-09 06:14:17
|
if it's integers, wouldn't that make it 24-bit for VarDCT and 32-bit (unsigned) for modular?
|
|
|
lonjil
|
2025-11-09 06:30:22
|
Just 24-bit
|
|
2025-11-09 06:30:49
|
modular is implemented with fp32 so it only works if the integers aren't too big
|
|
|
jonnyawsom3
|
2025-11-09 06:31:28
|
Theoretically there's nothing stopping f64 in Modular, just spec and implementation limits
|
|
|
AccessViolation_
|
2025-11-09 06:45:14
|
interesting, I thought Modular supported using i32/u32 internally as it stands
|
|
|
|
veluca
|
2025-11-09 06:54:11
|
it does
|
|
2025-11-09 06:54:29
|
there's some postprocessing in fp32 in libjxl but it doesn't *need* to be done that way
|
|
|
jonnyawsom3
|
2025-11-09 06:56:30
|
https://discord.com/channels/794206087879852103/805176455658733570/812257462379872287
|
|
|
AccessViolation_
|
2025-11-09 07:00:20
|
> JPEG XL can losslessly represent 32-bit floating point
> data. For integer data, in principle up to 31-bit unsigned
> integer or 32-bit signed integer data can be stored losslessly,
> but the reference implementation libjxl is limited to an
> integer precision of 24-bit since it internally uses a 32-bit
> float representation in most of the encoding and decoding
> implementation.
|
|
|
veluca
there's some postprocessing in fp32 in libjxl but it doesn't *need* to be done that way
|
|
2025-11-09 07:03:32
|
is jxl-rs limited to f32 for everything as well, or does it already support integer channels that an encoder could produce in the future?
|
|
|
|
veluca
|
2025-11-09 07:04:14
|
I am not sure I see much of a point of having more than 24 bits, tbh
|
|
|
AccessViolation_
|
2025-11-09 07:18:17
|
the only use case I can think of is losslessly recompressing other formats that support larger bit depths. not that I know whether there are any
|
|
2025-11-09 07:18:36
|
like for archival
|
|
|
lonjil
|
2025-11-09 07:19:01
|
JPEG 2000 supports lossless up to 38-bit integers 😄
|
|
|
AccessViolation_
|
2025-11-09 07:21:38
|
oh damn
|
|
|
veluca
I am not sure I see much of a point of having more than 24 bits, tbh
|
|
2025-11-09 07:23:21
|
I can respect this, also knowing you might be the one that would have to write new SIMD code for those bit depths 😅
|
|
|
jonnyawsom3
|
|
AccessViolation_
is jxl-rs limited to f32 for everything as well, or does it already support integer channels that an encoder could produce in the future?
|
|
2025-11-09 07:23:30
|
As far as I understood, jxl-rs was targeting Level 5 of the spec for faster decoding in browsers (Using float16 instead of float32). Any extra support is just bonus, but I could be wrong
|
|
|
|
veluca
|
|
As far as I understood, jxl-rs was targeting Level 5 of the spec for faster decoding in browsers (Using float16 instead of float32). Any extra support is just bonus, but I could be wrong
|
|
2025-11-09 07:24:22
|
I don't think we ever *explicitly* decided that, but I will say that if we want to try non-fp32 things out they will be fp16 before fp64 or int32 😛
|
|
|
jonnyawsom3
|
2025-11-09 07:25:06
|
Yeah, maybe I was getting mixed up with the simple render pipeline or something
|
|
|
AccessViolation_
|
2025-11-09 07:25:25
|
*I have a suggestion*
https://doc.rust-lang.org/std/primitive.f128.html
|
|
2025-11-09 07:25:27
|
/j
|
|
|
|
veluca
|
2025-11-09 07:25:28
|
fp16 should be especially good on aarch64, and on x86 we can be fast enough with fp32 on sufficiently modern machines, I believe
|
|
|
AccessViolation_
|
2025-11-09 07:25:59
|
f16 would be neat for sure
|
|
|
|
veluca
|
2025-11-09 07:26:01
|
(my laptop does ~75MP/s on a single thread, that's fast enough :P)
|
|
2025-11-09 07:26:11
|
(with libjxl, I mean)
|
|
|
jonnyawsom3
|
2025-11-09 07:26:54
|
Clang or MSVC?
|
|
|
|
veluca
|
2025-11-09 07:27:09
|
clang
|
|
|
jonnyawsom3
|
2025-11-09 07:27:45
|
Ah good, because Clang is still between 20-30% faster (Or 200-300% for fast lossless)... One day we'll get the github actions using it instead
|
|
|
veluca
(my laptop does ~75MP/s on a single thread, that's fast enough :P)
|
|
2025-11-09 07:29:02
|
Meanwhile, my poor poor CPU xD
```JPEG XL decoder v0.12.0 6efa0f5a [_AVX2_] {Clang 20.1.8}
Decoded to pixels.
3840 x 2160, geomean: 29.503 MP/s [27.203, 30.894], 20 reps, 0 threads.```
|
|
2025-11-09 07:29:18
|
That's desktop by the way, time has not treated first gen Ryzen well
|
|
|
|
veluca
|
2025-11-09 07:29:22
|
is that vardct?
|
|
|
jonnyawsom3
|
|
|
veluca
|
2025-11-09 07:29:50
|
the difference between my desktop and my laptop is not too big (on one thread)
|
|
2025-11-09 07:29:54
|
wow, ok xD
|
|
2025-11-09 07:30:25
|
I guess it is an 8 year old cpu
|
|
|
jonnyawsom3
|
2025-11-09 07:30:26
|
I know first gen Ryzen takes 2 clock cycles for AVX2, so that's probably a good chunk of it
|
|
|
|
veluca
|
2025-11-09 07:30:50
|
yeah I believe they only have 128 bit SIMD execution units
|
|
|
jonnyawsom3
|
2025-11-09 07:31:24
|
One day I'll do a comparison of my 8 year old phone vs my 8 year old desktop haha
|
|
|
|
veluca
|
2025-11-09 07:31:48
|
will want to try the 9xxx series eventually, those have full 512-bit SIMD execution units IIRC
|
|
|
jonnyawsom3
|
2025-11-09 07:33:04
|
Oooh, I know I wanted to see fast-lossless on AVX512 since AVX2 was a 5x speedup, also a threadripper/EPYC since we discovered the libjxl 'port' has worse thread utilization compared to standalone
|
|
|
|
veluca
|
2025-11-09 07:33:37
|
maybe once we're done with the decoder side of jxl-rs we'll start adding some encoders 🙂
|
|
|
jonnyawsom3
|
2025-11-09 07:35:16
|
Right now I'm unravelling Jyrki's VarDCT code. I think I just got it performing better than 0.8 (finally), better quality and less density but needs more tuning
|
|
|
AccessViolation_
|
|
veluca
maybe once we're done with the decoder side of jxl-rs we'll start adding some encoders 🙂
|
|
2025-11-09 07:36:44
|
I hope I might be able to contribute somehow. I probably would have already, I don't really like working in C and I don't know it that well
|
|
|
|
veluca
|
2025-11-09 07:37:14
|
there's plenty to do! 🙂
|
|
|
lonjil
|
|
veluca
maybe once we're done with the decoder side of jxl-rs we'll start adding some encoders 🙂
|
|
2025-11-09 07:37:57
|
that reminds me, if I have any time between school and the hobby video codec, I want to try to make a slow but flexible encoder that makes decisions using a user provided script (probably Scheme or Lua or something)
would make quality vs size tradeoff experiments easier, though you wouldn't get any data on the perf impact it'd have in practice
|
|
|
jonnyawsom3
|
2025-11-09 07:38:45
|
Similar to MA trees or something else?
|
|
|
lonjil
|
2025-11-09 07:39:40
|
the idea would be that all decisions made by the encoder would be done by a script, so more like the code in libjxl that decides which MA tree to use, decides how much to quantize stuff, etc.
|
|
|
AccessViolation_
|
2025-11-09 07:40:55
|
I've been thinking about making specialized encoders for screenshot tools in apps, like for games, where game content is encoded in VarDCT but the UI layer is encoded losslessly and alpha blended on top
currently I'd be more interesting in making an analyzer though, something that lets you view block selection and MA tree decisions over the image
|
|
2025-11-09 07:42:18
|
the analyzer also seems easier since it would not necessarily require decoding anything to pixel data, I can use a complete decoder library for that part
|
|
|
|
veluca
|
2025-11-09 07:42:42
|
some things I really want to try out encoder side:
- find optimal k-way splits along each MA tree property, maybe for a combination of 2 properties (would make for a very fast modular decoder, and I think it should be quite powerful)
- figure out how to train some small neural network to replace the current encoder decisions (biggest issue is figuring out what training data to use...)
- try to see if we can use some gradient descent based method to optimize a bitstream more or less from scratch, like https://arxiv.org/abs/2412.00505
|
|
|
jonnyawsom3
|
|
I know first gen Ryzen takes 2 clock cycles for AVX2, so that's probably a good chunk of it
|
|
2025-11-09 07:45:34
|
I forgot, I got Sapien to make me the slowest build possible. Emulated AVX (I think)
```JPEG XL decoder v0.12.0 e5943b1a [_EMU128_] {Clang 21.1.4}
Decoded to pixels.
3840 x 2160, geomean: 19.515 MP/s [18.772, 20.104], 20 reps, 0 threads.```
```JPEG XL decoder v0.12.0 6efa0f5a [_AVX2_] {Clang 20.1.8}
Decoded to pixels.
3840 x 2160, geomean: 29.503 MP/s [27.203, 30.894], 20 reps, 0 threads.```
Honestly surprised it's not more of a difference, guess that 128bit unit really struggles
|
|
|
veluca
some things I really want to try out encoder side:
- find optimal k-way splits along each MA tree property, maybe for a combination of 2 properties (would make for a very fast modular decoder, and I think it should be quite powerful)
- figure out how to train some small neural network to replace the current encoder decisions (biggest issue is figuring out what training data to use...)
- try to see if we can use some gradient descent based method to optimize a bitstream more or less from scratch, like https://arxiv.org/abs/2412.00505
|
|
2025-11-09 07:46:45
|
I know Jon has talked about a JIT MA tree decoder, but it'd cause security scrutiny
|
|
|
|
veluca
|
2025-11-09 07:47:17
|
I also mentioned that a few times
|
|
2025-11-09 07:47:31
|
as one of the things that would be very cool but we'll probably never do 😛
|
|
|
jonnyawsom3
|
2025-11-09 07:48:15
|
Also, I found out recently that libjxl does background and screen content detection in the encoder, but screen content doesn't seem to do much and background detection adds dots(?) but then encodes over them anyway (I think)
|
|
|
AccessViolation_
|
2025-11-09 07:48:54
|
oh another thing I wanted to explore was recursive patches.
for example, for a large text screenshot, you get one layer of patches that has all the letters, and then you patch-copy those onto a new 'free' frame to create patches for common words, and then in the final image you can in some cases replace entire words with a single larger patch instead of with individual letters, which should be cheaper to signal
|
|
|
jonnyawsom3
|
2025-11-09 07:49:23
|
Still lots of mysteries to unravel in libjxl, yet alone the new techniques jxl-rs could allow haha
|
|
|
AccessViolation_
oh another thing I wanted to explore was recursive patches.
for example, for a large text screenshot, you get one layer of patches that has all the letters, and then you patch-copy those onto a new 'free' frame to create patches for common words, and then in the final image you can in some cases replace entire words with a single larger patch instead of with individual letters, which should be cheaper to signal
|
|
2025-11-09 07:50:07
|
The patch locations are compressed, so I think it'd only be saving bytes compared to compressing the patch frame itself more efficiently (Right now it's an effort 2 encode IIRC)
|
|
|
username
|
|
veluca
maybe once we're done with the decoder side of jxl-rs we'll start adding some encoders 🙂
|
|
2025-11-09 07:50:54
|
speaking of the decoder side, once it's in a really good or "finished" state it would maybe be cool to look into having [Knusperli](https://github.com/google/knusperli/) like/style decoding for transcoded JPEGs?
|
|
|
jonnyawsom3
|
2025-11-09 07:52:02
|
Didn't Jyrki say it was in the original design, but was just too slow?
|
|
|
username
|
2025-11-09 07:52:10
|
no/yes
|
|
2025-11-09 07:52:26
|
that was for the VarDCT spec
|
|
2025-11-09 07:52:42
|
I'm just talking about transcoded JPEGs
|
|
2025-11-09 07:53:25
|
the way to decode VarDCT is way more tightly defined then regular JPEGs
|
|
|
AccessViolation_
|
|
The patch locations are compressed, so I think it'd only be saving bytes compared to compressing the patch frame itself more efficiently (Right now it's an effort 2 encode IIRC)
|
|
2025-11-09 07:53:43
|
hmm, you might be right. I'm not sure how patch locations for individual letters would be signaled, if they are signaled as the relative distance from the previous patch then the letters from identical words in different places could be LZ77 deduplicated, but if it stores absolute coordinates then LZ77 won't deduplicate those I don't think
|
|
|
jonnyawsom3
|
|
username
that was for the VarDCT spec
|
|
2025-11-09 07:55:17
|
Ah right, I found the old discussion https://discord.com/channels/794206087879852103/805176455658733570/1345882517005275308
|
|
|
AccessViolation_
|
2025-11-09 07:56:15
|
another semi related thing: inter-frame compression of animations where only a thiny bit moves by patch-copying over large chunks that don't move from the previous frame
|
|
2025-11-09 07:56:38
|
would be cool for recompressing some GIFs
|
|
|
jonnyawsom3
|
|
AccessViolation_
hmm, you might be right. I'm not sure how patch locations for individual letters would be signaled, if they are signaled as the relative distance from the previous patch then the letters from identical words in different places could be LZ77 deduplicated, but if it stores absolute coordinates then LZ77 won't deduplicate those I don't think
|
|
2025-11-09 07:57:09
|
Right now lossless struggles with low color content, which is what patches usually are due to text. The time doing recursive patches could be spent improving overall compression instead, either making the patch frame a few percent smaller, or the entire image a few percent smaller, instead of saving 1KB~ of compressed coordinate info
|
|
2025-11-09 07:57:53
|
Of course that depends how much text and how many patches, but then that makes the few percent increase in savings too
|
|
|
AccessViolation_
another semi related thing: inter-frame compression of animations where only a thiny bit moves by patch-copying over large chunks that don't move from the previous frame
|
|
2025-11-09 07:59:17
|
We kinda already have that with differential transparency, though libjxl doesn't do it automatically, only by copying existing GIFs/APNGs
|
|
|
AccessViolation_
|
2025-11-09 08:00:09
|
maybe, but it wouldn't hurt for me to experiment with this separately (I wasn't suggesting for others to work on this, it was something I would like to explore eventually)
|
|
|
jonnyawsom3
|
2025-11-09 08:00:19
|
Also this https://github.com/libjxl/libjxl/issues/3134
|
|
|
AccessViolation_
|
|
We kinda already have that with differential transparency, though libjxl doesn't do it automatically, only by copying existing GIFs/APNGs
|
|
2025-11-09 08:03:42
|
nice, I didn't know it did anything like this already
|
|
2025-11-09 08:04:00
|
how's the compression compared to APNGs/GIFs generally? is it competitive? 👀
|
|
|
jonnyawsom3
|
|
Right now lossless struggles with low color content, which is what patches usually are due to text. The time doing recursive patches could be spent improving overall compression instead, either making the patch frame a few percent smaller, or the entire image a few percent smaller, instead of saving 1KB~ of compressed coordinate info
|
|
2025-11-09 08:04:46
|
Due to that, only at effort 9 or 10 get gains over GIF. Pallete sorting is a big problem, but for APNG it does pretty well
|
|
|
AccessViolation_
|
2025-11-09 08:22:51
|
oh that's not bad
|
|
|
Exorcist
|
|
AccessViolation_
another semi related thing: inter-frame compression of animations where only a thiny bit moves by patch-copying over large chunks that don't move from the previous frame
|
|
2025-11-09 08:35:22
|
reinvent motion compensation <:galaxybrain:821831336372338729>
|
|
|
AccessViolation_
|
2025-11-09 08:35:55
|
we'll have to, jxl can't natively do that 😔
|
|
|
Exorcist
|
2025-11-09 08:50:09
|
> The Patches coding tool exploits such redundancies. It works as follows. Up to four previously coded frames can be ‘saved’, i.e. the frame header indicates to a decoder that the contents of a decoded frame must be buffered for future reference. There are four ‘slots’ available for this. The Patches tool allows referencing these frames, selecting a rectangular region in them, and then adding that ‘patch’ to the current frame in one or more arbitrary positions. Different blend modes are supported, and when there are...
<:tfw:843857104439607327>
|
|
|
AccessViolation_
|
2025-11-09 08:52:21
|
this is why we need MPEG XL <:Stonks:806137886726553651>
|
|
|
jonnyawsom3
|
|
AccessViolation_
this is why we need MPEG XL <:Stonks:806137886726553651>
|
|
2025-11-09 08:56:47
|
https://discord.com/channels/794206087879852103/794206170445119489/1178541355639783424
|
|
|
monad
|
|
username
speaking of the decoder side, once it's in a really good or "finished" state it would maybe be cool to look into having [Knusperli](https://github.com/google/knusperli/) like/style decoding for transcoded JPEGs?
|
|
2025-11-10 02:28:39
|
knusperli's smoothing behavior looks unnatural. seems an appeal thing over fidelity
|
|
|
Zamarusdz
|
2025-11-11 04:49:32
|
Hi, i was wondering if there are options to recompress with a higher effort later down the lane for already processed .jxl? (libjxl)
Ho and if there will/could be breaking changes that could make current .jxl decompress differently later?
|
|
|
monad
|
2025-11-11 05:31:50
|
no encoders currently optimize existing lossy encodes. different decoders can make different rendering decisions, whether related to bugs or exercising the flexibility of the spec.
|
|
|
Zamarusdz
|
2025-11-11 05:55:37
|
Sorry i forgot to precise that it's for lossless compressing.
|
|
2025-11-11 05:57:54
|
And if we don't take into account metadatas as i've backed up those before converting and can set them back. (not sure if this is an option directly using libjxl or if it's out of scope, it's only 1-2kb per metadatas file after all)
|
|
|
_wb_
|
2025-11-11 07:56:57
|
For lossless you can already do this, cjxl takes jxl input so you can do things like `cjxl input.ppm -e 1 -d 0 fast.jxl` and then later `cjxl fast.jxl -e 7 -d 0 slow.jxl`
|
|
|
Zamarusdz
|
2025-11-11 08:16:10
|
Alright good to know thanks. I'm consistently getting 30% space savings with effort 5 for now!
|
|
|
TheBigBadBoy - 𝙸𝚛
|
|
username
speaking of the decoder side, once it's in a really good or "finished" state it would maybe be cool to look into having [Knusperli](https://github.com/google/knusperli/) like/style decoding for transcoded JPEGs?
|
|
2025-11-11 09:18:54
|
how does it compare to jpeg2png ?
|
|
|
username
|
|
TheBigBadBoy - 𝙸𝚛
how does it compare to jpeg2png ?
|
|
2025-11-11 09:47:30
|
it's wayy more subtle but doesn't have the downside of causing a lot of images to look worse/oversmoothed. only problem is the core JPEG decoder in that project seems to be problematic in some way because it's decodes don't seem to have the right colors for some reason. also it doesn't decode in a high precision like jpegli/libjxl does.
|
|
|
TheBigBadBoy - 𝙸𝚛
|
2025-11-11 09:55:35
|
thanks
|
|
|
Meow
|
2025-11-11 01:29:51
|
Fake news
|
|
2025-11-11 02:00:34
|
I meant the spammer who faked Trump
|
|
|
Magnap
|
2025-11-12 07:08:39
|
is there still a thread going for "lossless examples where other codecs perform better"? I found one but it says only for screenshots
|
|
|
monad
|
2025-11-12 07:10:22
|
There is one for high effort. https://discord.com/channels/794206087879852103/1187313089612369991
|
|
|
TheBigBadBoy - 𝙸𝚛
|
2025-11-12 10:08:56
|
the difference between avif and jpeg from nintendo.com
|
|
2025-11-12 10:09:41
|
ohhhh I'm stupid
|
|
2025-11-12 10:10:06
|
there's only a difference on my end because I keep forgetting that my viewer has no color management 😭
|
|
|
username
|
2025-11-12 10:17:30
|
doesn't their website also serve JXL?
|
|
|
lonjil
|
|
username
|
2025-11-12 10:18:25
|
huh I remember some random domain of theirs serving JXLs
|
|
2025-11-12 10:18:30
|
guess it's not the main website
|
|
|
lonjil
|
|
username
guess it's not the main website
|
|
2025-11-12 10:28:58
|
It was cloudinary and someone changed the url from auto to JXL
|
|
|
_wb_
|
2025-11-12 10:29:15
|
Nintendo of Europe is a Cloudinary customer so they might serve jxl, not sure if they have it enabled though
|
|
|
AccessViolation_
|
2025-11-12 10:31:52
|
will there be a point where existing customers have support implicitly enabled if they have it on auto? instead of having to explicitly enable it? that's how it is now right
|
|
2025-11-12 10:32:43
|
I can't think of any reason not to
|
|
|
_wb_
|
2025-11-13 08:15:32
|
I'll give you a reason: we still have lots of contracts where our revenue directly depends on bandwidth consumption. Enabling more efficient formats is shooting ourselves in the foot, our revenue will just go down. So we do that only by default when customers are switching to the new pricing model, which is based on impressions, not just on bandwidth.
|
|
|
AccessViolation_
|
2025-11-13 09:45:48
|
ohhh yeah I remember reading about that, I'd forgotten since
|
|
2025-11-13 09:45:52
|
that's completely fair
|
|
|
Quackdoc
|
|
_wb_
Nintendo of Europe is a Cloudinary customer so they might serve jxl, not sure if they have it enabled though
|
|
2025-11-13 11:32:00
|
forcing it with a redirector works, but I think some things are under normal scenarios
|
|
|
AccessViolation_
|
2025-11-15 05:04:51
|
for all this time I was under the impression that "chroma from luma" was just a different term for chroma subsampling... it's something different
|
|
|
_wb_
|
2025-11-16 11:04:12
|
it's predicting chroma from luma, which in jxl we actually only do when there's no chroma subsampling because that just complicates such a prediction.
|
|
|
AccessViolation_
|
2025-11-16 09:29:13
|
look what I found, must've fallen off the back of a truck.
for legal reasons, I really appreciate the choice of wording and layout, and the positioning of the logos could not have been better if I were to review it critically in a matter that constitutes fair use as recognized by the united states copyright law which is enforced on this social medium
|
|
2025-11-16 09:30:34
|
no one tell them this is on the internet archive <:KekDog:805390049033191445>
|
|
2025-11-16 09:31:54
|
I was actually hoping it was on there "officially" with digital controlled lending so I could reserve it for a while, but no, someone just put it on there as a pdf
|
|
|
RaveSteel
|
2025-11-16 09:35:24
|
lol nice
|
|
|
lonjil
|
2025-11-16 09:49:24
|
ok no snitching
|
|
|
AccessViolation_
|
2025-11-16 09:54:19
|
of course I deeply condemn this
|
|
2025-11-16 09:55:14
|
you wouldn't download an open standard
|
|
|
_wb_
it's predicting chroma from luma, which in jxl we actually only do when there's no chroma subsampling because that just complicates such a prediction.
|
|
2025-11-16 10:14:46
|
presumably this retains a lot more color than chroma subsampling, how competitive is it in terms of compression?
|
|
2025-11-16 10:21:22
|
it doesn't look like I can control these with cjxl
|
|
|
jonnyawsom3
|
2025-11-16 10:21:41
|
Control what?
|
|
|
AccessViolation_
|
2025-11-16 10:21:50
|
chroma subsampling and chroma from luma
|
|
|
jonnyawsom3
|
2025-11-16 10:22:02
|
Subsampling is JPEG transcode only
|
|
|
AccessViolation_
|
2025-11-16 10:22:23
|
oh!
|
|
2025-11-16 10:23:27
|
does the format not support it or is it just not in the encoder?
|
|
2025-11-16 10:23:56
|
I really dislike chroma subsampling so you don't hear me complaining either way
|
|
|
jonnyawsom3
|
2025-11-16 10:29:17
|
*Technically* you could make a bastardized encoder that does, but you're not meant to
|
|
|
AccessViolation_
|
2025-11-16 10:30:55
|
that's actually great
|
|
|
A homosapien
|
|
AccessViolation_
presumably this retains a lot more color than chroma subsampling, how competitive is it in terms of compression?
|
|
2025-11-16 10:36:28
|
There's a cool Xiph article explaining chroma from luma for AV1
https://people.xiph.org/~xiphmont/demo/av1/demo1.shtml
|
|
|
AccessViolation_
|
|
*Technically* you could make a bastardized encoder that does, but you're not meant to
|
|
2025-11-16 10:52:39
|
is this by using modular tools or can you actually use the coding tools from lossless JPEG transcoding on their own?
|
|
2025-11-16 10:53:14
|
I was under the impression that JPEG transcoding was all or nothing, and that you couldn't use its coding tools on their own
|
|
|
lonjil
|
2025-11-16 10:53:17
|
there is not separate lossless jpeg mode
|
|
2025-11-16 10:53:21
|
it's just vardct
|
|
2025-11-16 10:53:48
|
some coding tools won't be available if you use subsampling IIRC
|
|
|
AccessViolation_
|
2025-11-16 10:56:26
|
that's interesting
|
|
2025-11-16 10:58:04
|
does this mean we can create otherwise normal JXLs that use Huffman coding instead of ANS <:KekDog:805390049033191445>
|
|
2025-11-16 11:00:23
|
oh you explicitly can lmao
> At a high level, JPEG XL’s entropy coding method
> works as follows. Every entropy coded stream can use either
> prefix coding (Huffman coding) or ANS coding
|
|
|
lonjil
|
2025-11-16 11:02:02
|
Huffman is much easier for hardware
|
|
|
lonjil
some coding tools won't be available if you use subsampling IIRC
|
|
2025-11-16 11:02:43
|
Double checked the standard. chrome subsampling is only allowed for YCbCr frames 🙂
|
|
|
AccessViolation_
|
2025-11-16 11:03:33
|
ah, so they really don't want you to use this for anything other than JPEG compression ^^
|
|
|
jonnyawsom3
|
|
AccessViolation_
ah, so they really don't want you to use this for anything other than JPEG compression ^^
|
|
2025-11-16 11:07:43
|
https://discord.com/channels/794206087879852103/803645746661425173/1362825741728874597
|
|
|
AccessViolation_
|
2025-11-16 11:08:36
|
> Chroma Subsampling is a sledgehammer when you should be using a scalpel
YES thank you
|
|
|
DZgas Ж
|
2025-11-17 09:04:50
|
CfL exists as shaders, I use it when the quality is not very good, it works well on AVC as a post-algorithm
|
|
2025-11-17 09:05:21
|
|
|
|
AccessViolation_
|
2025-11-18 05:51:12
|
|
|
2025-11-18 05:52:54
|
minesweeper anyone?
|
|
2025-11-18 05:59:59
|
it's interesting to use only one block type for the entire image. it gives you an idea of how the they work because you see the artifacts they produce in places where they usually wouldn't be picked
|
|
2025-11-18 06:03:47
|
you can see how the hornuss transform bases pixels in the 4x4 chunk on the average values in that chunk for example
|
|
2025-11-19 07:58:32
|
> Associated alpha (as in e.g. the OpenEXR image format) is more expressive than unassociated alpha (as in e.g. the PNG image format) since it allows modeling layers with light-emitting but transparent pixels, such as a candle flames or reflections in glass. Such pixels would correspond to an alpha value of zero and color components that are non-zero.
what would an alpha of zero and non-zero color values look like?
|
|
2025-11-19 08:00:43
|
I also don't intuitively understand how associated alpha lets things appear emissive while unassociated alpha doesn't
|
|
2025-11-19 08:08:44
|
> what would an alpha of zero and non-zero color values look like?
when you do this does the effective transparency become a function of the brightness/intensity of that pixel, and is that why it lets you create an effect of emissiveness maybe?
|
|
2025-11-19 08:11:21
|
basically acting like a different blend mode
|
|
|
Adrian The Frog
|
2025-11-19 08:16:45
|
Yes it only becomes useful when layered on something else
For modelling light transport, it's very intuitive as well (make a plane in blender, set transparency to the alpha channel and color to the emission channel), and it's very easy to generalize to having three alpha channels (RGB) for filtering effects
Once you start getting filtering effects in though the only way to actually be accurate is considering every wavelength individually, but it's close enough for most things
|
|
|
spider-mario
|
|
AccessViolation_
I also don't intuitively understand how associated alpha lets things appear emissive while unassociated alpha doesn't
|
|
2025-11-19 08:17:27
|
associated: out = (1−alpha)·bg + fg
unassociated: out = (1−alpha)·bg + alpha·fg
|
|
2025-11-19 08:17:55
|
so with alpha=0, associated: out = bg + fg (emissive); unassociated: out = bg
|
|
|
Quackdoc
|
|
AccessViolation_
> Associated alpha (as in e.g. the OpenEXR image format) is more expressive than unassociated alpha (as in e.g. the PNG image format) since it allows modeling layers with light-emitting but transparent pixels, such as a candle flames or reflections in glass. Such pixels would correspond to an alpha value of zero and color components that are non-zero.
what would an alpha of zero and non-zero color values look like?
|
|
2025-11-19 08:48:49
|
candle light
|
|
2025-11-19 08:49:37
|
another one is something like a gas it has no physical solid, you can't see it unless something is behind it
|
|
2025-11-19 08:50:15
|
it has color and energy but no surface for it to reflect on until you put something behind it
|
|
|
AccessViolation_
|
|
spider-mario
associated: out = (1−alpha)·bg + fg
unassociated: out = (1−alpha)·bg + alpha·fg
|
|
2025-11-19 08:58:48
|
okay I understand that. so basically, it's like allowing to you *add* intensity of the foreground pixels to the background pixels, instead of numerically replacing some ratio of the background pixel intensity with the foreground pixel intensity.
and as a result, if you *do* want to replicate this 'partially replace' blending that unassociated alpha does, using associated alpha, your pixels need to already be multiplied by the proportional amount of alpha, hence "premultiplied"
|
|
2025-11-19 08:58:59
|
I think I finally understand, thanks!
|
|
2025-11-19 09:05:54
|
now I also understand why associated is a better term than premultiplied, you don't *need* premultiplication for associated alpha to be useful, if you only have emissive elements you don't do it at all. I'd heard that before but never understood why
|
|
2025-11-19 09:16:28
|
I just noticed that in the captain disillusion video about the alpha channel, in this scene, none of these images are truly transparent, they all have a different transparency checkerboard which implies they're part of the images instead of rendered by the browser. just like how in practice you'll find a considerable amount of images with false transparency <:KekDog:805390049033191445>
|
|
|
spider-mario
|
2025-11-19 09:37:27
|
now someone will demand a new metadata chunk in PNG and JXL to declare which size/colour the checkerboard should be
|
|
|
AccessViolation_
|
2025-11-19 09:47:26
|
if we're redesigning the alpha system, I propose a new system with an alpha, beta and gamma channel that define the image subject's transparency to alpha, beta and gamma radiation, respectively
|
|
|
spider-mario
|
2025-11-19 09:53:34
|
for what it’s worth, OpenEXR supports per-channel alpha (AR, AG, AB)
|
|
2025-11-19 09:53:36
|
https://openexr.com/en/latest/TechnicalIntroduction.html#channel-names
|
|
|
AccessViolation_
|
2025-11-19 10:23:40
|
ah that's for filtering like adrian mentioned earlier
|
|
2025-11-19 10:23:42
|
neat
|
|
|
jonnyawsom3
|
|
spider-mario
now someone will demand a new metadata chunk in PNG and JXL to declare which size/colour the checkerboard should be
|
|
2025-11-20 12:28:22
|
Add a layer of JXL art :>
|
|
|
Adrian The Frog
|
2025-11-20 03:57:31
|
would be cool if browsers automatically picked the checkerboard shade that would give the most contrast
|
|
|
Jyrki Alakuijala
|
2025-11-21 08:54:14
|
my experience from ~2006 about PNG alpha optimization for Google Maps: ~32 levels is roughly enough, one level needs to be 100 % opaque, one level needs to be 100 % transparent, ideally a few more levels for highest transparency values -- I think I ended up adding 1 (or 3, don't remember) levels more for high transparency values, to get drop shadows without banding
|
|
|
jonnyawsom3
|
2025-11-21 08:59:48
|
Very interesting, I didn't know you worked on Maps, yet alone that long ago
|
|
|
AccessViolation_
|
2025-11-21 09:01:28
|
you were talking about subsampling the alpha channel right
|
|
2025-11-21 09:02:01
|
i wonder if you could get better gains by doing like 32 transparency levels and palette encoding them, then?
|
|
|
jonnyawsom3
|
2025-11-21 09:24:09
|
I had typed out about 5 or 6bit alpha, but pallete should already be doing that either locally or globally, so I don't think it would help much
|
|
|
AccessViolation_
|
2025-11-21 09:33:20
|
...you can use bit depths lower than 8 in modular?
|
|
2025-11-21 09:33:22
|
huh
|
|
2025-11-21 09:34:25
|
or do you mean effective bit depth, by not using more than some amount of values
|
|
|
jonnyawsom3
|
2025-11-21 09:35:37
|
Both I guess
|
|
|
_wb_
|
2025-11-22 12:51:01
|
Both are possible and will end up encoding more or less to the same thing
|
|
|
|
ignaloidas
|
2025-11-22 01:28:58
|
it's a bit different on quantization? With palette you could "quantize" to any free value, which could exploit the non-linear usage of alpha, where some ranges are more used / important than others (where just dropping bit-depth would lead to a consistent drop in precision across the entire range)
|
|
|
_wb_
|
2025-11-22 01:50:26
|
Yes, and also it doesn't need to be an integer power of two
|
|
|
AccessViolation_
|
2025-11-24 09:32:19
|
NASA's so-called PNG
|
|
2025-11-24 09:36:54
|
actually, this might be Firefox's fault
|
|
2025-11-24 09:39:37
|
yep
|
|
2025-11-24 09:53:06
|
is it possible (or rather probable) for a true lossless image to still show up as 92% quality with imagemagick identify?
|
|
|
jonnyawsom3
|
2025-11-24 10:04:55
|
What does that even mean? JPEG quality?
|
|
|
AccessViolation_
|
2025-11-24 10:07:57
|
I believe it tries to guess JPEG quality from the artifacts or quantization yeah
|
|
2025-11-24 10:14:58
|
this is also interesting, there are no pixels with a value lower than three in the green channel
|
|
2025-11-24 10:20:44
|
might be an outlier, a different image of theirs doesn't have that
|
|
|
jonnyawsom3
|
2025-11-24 11:07:11
|
What's the link to the image?
|
|
|
AccessViolation_
|
2025-11-24 11:45:03
|
the png download on this page:
https://science.nasa.gov/asset/webb/cats-paw-nebula-nircam-image/
|
|
2025-11-24 11:45:28
|
direct link: <https://assets.science.nasa.gov/content/dam/science/missions/webb/science/2025/07/STScI-01JY2AYZ2PYBDDSMX83K5248DD.jpg/jcr:content/renditions/Full%20Res%20(For%20Display).png>
|
|
2025-11-24 11:52:38
|
they also have a JPEG variant (right) which has much more obvious compression artifacts, but is also reported as having a quality of 92
|
|
|
jonnyawsom3
|
2025-11-24 12:31:37
|
> revealing a subset of mini toe bean-reminiscent structures
Best NASA quote so far
|
|
|
AccessViolation_
|
2025-11-24 12:45:10
|
first signs of arirals
|
|
|
monad
|
2025-11-25 04:48:08
|
guys, I think if we all stop working on jxl and pivot to cloning then jxl development will go a lot faster since we can clone Luca
|
|
|
username
|
|
AccessViolation_
NASA's so-called PNG
|
|
2025-11-25 07:37:37
|
off-topic but is that [IPvFoo](https://addons.mozilla.org/firefox/addon/ipvfoo/) I spot in the top right of your screenshot?
Some other extensions in a similar vein of functionality if you interested include:
[HTTP Version Indicator](https://addons.mozilla.org/firefox/addon/http2-indicator/) (shows if a site is using HTTP 1.1 or 2 or 3)
[IndicateTLS](https://addons.mozilla.org/firefox/addon/indicatetls/) (shows if a site is using TLS 1.2 or 1.3 or etc)
|
|
|
AccessViolation_
|
2025-11-25 07:41:20
|
yes it is :)
|
|
|
lonjil
|
2025-11-25 07:48:44
|
how to spot a good website:
|
|
|
Jyrki Alakuijala
|
|
AccessViolation_
they also have a JPEG variant (right) which has much more obvious compression artifacts, but is also reported as having a quality of 92
|
|
2025-11-26 11:18:34
|
perhaps YUV420
|
|
|
AccessViolation_
I believe it tries to guess JPEG quality from the artifacts or quantization yeah
|
|
2025-11-26 11:20:13
|
imagemagick looks at the quantization matrices -- it is possible to fool it by sending a very fine quantization matrix and then not use -3,-2,-1, 1, 2, 3 -- and compress a lot with crappy quality but get 100 as a reported quality
|
|
|
AccessViolation_
|
2025-11-26 11:30:01
|
interesting
|
|
2025-11-26 11:30:35
|
so that PNG was definitely derived from a lossy compressed image then :/
|
|
|
jonnyawsom3
|
2025-11-26 11:43:06
|
A PNG doesn't have quant matrices though
|
|
|
AccessViolation_
|
2025-11-26 11:44:35
|
from what I know identify looks at the pixel data directly, I assumed Jyrki meant that it estimates the matrices from those
|
|
|
lonjil
|
2025-11-26 11:49:04
|
It doesn't, it looks at the quant tables of JPEGs
|
|
2025-11-26 11:49:13
|
from testing, it seems to *always* report 92 for PNGs
|
|
|
Jyrki Alakuijala
|
|
lonjil
from testing, it seems to *always* report 92 for PNGs
|
|
2025-11-26 12:26:33
|
imagemagick's identify looks at the quant matrices, the image can be fully black (the same pixels) and exactly the same for different qualities, still image magick will compute something resembling the original encoding quality
|
|
|
lonjil
|
2025-11-26 12:40:19
|
I know, I'm saying it always reports 92 for PNG files, which of course don't have any quant matrices.
|
|
|
AccessViolation_
|
2025-11-26 01:29:19
|
oh, well that's confusing
|
|
|
_wb_
|
2025-11-26 02:49:10
|
ah yeah for PNG files and I guess other lossless formats, it pretends it is quality 92 so that will also be the quality it uses by default when you convert png to jpeg, since the default is to keep the quality
|
|
2025-11-26 02:50:44
|
which kind of makes sense, if you want to avoid generation loss then it's better to avoid requantizing with a different quant table, though of course even better is not to decode to pixels and then encode from pixels again
|
|
|
AccessViolation_
|
2025-11-26 03:03:31
|
wait, so you're saying it reports that quality for PNGs so that the last three steps in the PNG -> JPEG -> PNG -> JPEG pipeline are lossless?
|
|
2025-11-26 03:03:53
|
or am I misunderstanding
|
|
|
username
|
|
AccessViolation_
or am I misunderstanding
|
|
2025-11-26 03:06:36
|
"default is to keep the quality" I don't think refers to anything lossless I assume it's just so that converting between different lossy formats has a similar relative quality level
|
|
|
AccessViolation_
|
2025-11-26 03:07:32
|
oh got it
|
|
|
DZgas Ж
|
|
Traneptora
```
ffmpeg -y -i "THE AMAZING DIGITAL CIRCUS: PILOT [HwAPLk_sQ3w].mkv" -vf "zscale=w=128:h=-1:f=spline36,format=gbrp,crop=128:64" -frames:v 1 -update 1 OUT2.png
```
|
|
2025-11-27 03:08:06
|
"format=gbrp", yes, this, It's just hilarious that without this parameter you can't save RGB24 downscale. It's literally "YUV420 in core" for anything when converting video to PNG
the ffmpeg.
|
|
|
Exorcist
|
|
spider-mario
|
2025-11-28 10:10:20
|
when suddenly, suspenders
|
|
|
AccessViolation_
|
2025-11-28 10:44:28
|
I like how Nano Banana Pro looks sort of like a traditional image codec generation loss test
|
|
2025-11-28 10:46:33
|
a couple of them do
|
|
2025-11-28 10:47:52
|
giggling at the thought of putting lossless WebP in there, calling it something else and seeing how many people get suspicious
|
|
|
spider-mario
|
|
AccessViolation_
I like how Nano Banana Pro looks sort of like a traditional image codec generation loss test
|
|
2025-11-28 11:04:53
|
some in the comments have hypothesised that what we’re seeing is the “this is AI-generated” watermark
|
|
2025-11-28 11:05:06
|
which sounds plausible
|
|
|
|
cioute
|
|
lonjil
how to spot a good website:
|
|
2025-11-28 02:29:52
|
?
|
|
|
AccessViolation_
|
|
AccessViolation_
giggling at the thought of putting lossless WebP in there, calling it something else and seeing how many people get suspicious
|
|
2025-11-28 03:53:28
|
uh lossy WebP I mean <:galaxybrain:821831336372338729>
|
|
|
Magnap
|
2025-11-28 09:08:26
|
<@1028567873007927297> you might find this paper interesting re noise shaping https://doi.org/10.1109/ICIP.2010.5651757
|
|
2025-11-28 09:14:15
|
They set up spatial noise shaping as a convex optimization problem: minimize the l1 norm (for sparsity) of the transform coefficients (wavelet for them since they're working with JPEG 2000) subject to the spatial error staying below a certain level per pixel, which means you can allow more error in places where it's less noticeable due to masking
|
|
2025-11-28 09:20:49
|
Also they have this whole complicated scheme for it but I'm pretty sure the problem they set up is linear, and I bet a couple iterations of an interior point method would do wonders
|
|
2025-11-28 09:29:56
|
(but ig technically what you want to solve is the integer linear problem where you're looking for the best quantized values, and maybe that's why they're doing their whole "let's see which bits we can zero out" thing?)
|
|
|
Meow
|
|
Exorcist
|
|
2025-11-29 10:13:20
|
Earlier versions of lossy WebP would turn it to some nice smokes
|
|
|
jonnyawsom3
|
2025-11-29 02:35:05
|
We know what we must do
https://x.com/dimenpsyonal/status/1994440264086147391
|
|
|
lonjil
|
2025-11-29 02:42:29
|
effort 11 takes it to 54 bytes
|
|
|
TheBigBadBoy - 𝙸𝚛
|
|
We know what we must do
https://x.com/dimenpsyonal/status/1994440264086147391
|
|
2025-11-29 04:17:44
|
where is the 186B SVG ?
|
|
|
AccessViolation_
|
|
lonjil
effort 11 takes it to 54 bytes
|
|
2025-11-29 04:46:40
|
> Some manual tweaking takes it down to 42 bytes: `data:image/jxl;base64,/wq6Euh8YAASCAYBAGwASzhD2c0D1fBK9HQNJxh05Qk9XQQAuvIEIMEA`
fitting that into a URL the length of a sentence is such a flex. it's a crazy feeling that these few characters form the whole image
|
|