JPEG XL

Info

rules 57
github 35276
reddit 647

JPEG XL

tools 4225
website 1655
adoption 20712
image-compression-forum 0

General chat

welcome 3810
introduce-yourself 291
color 1414
photography 3435
other-codecs 23765
on-topic 24923
off-topic 22701

Voice Channels

General 2147

Archived

bot-spam 4380

jxl

Anything JPEG XL related

_wb_
2021-12-29 08:56:01
"Naked av1" isn't even completely headerless
monad
monad Nope, just tried generally good parameters for images.
2021-12-29 09:52:41
Actually, I think I did about this much before but didn't keep the results. Maybe not totally superficial, not totally comprehensive.
sebseb
Traneptora https://github.com/thebombzen/FFmpeg/tree/libjxl
2021-12-29 02:13:45
if you i have a step by step installing, i can try it (debian 10 of 11 )
Traneptora
sebseb if you i have a step by step installing, i can try it (debian 10 of 11 )
2021-12-29 02:35:58
Clone the repo, switch to the libjxl branch
2021-12-29 02:36:20
alternatively add my repo as an upstream to an existing ffmpeg clone
2021-12-29 02:36:34
then fetch, then switch to libjxl
2021-12-29 02:37:07
after that just `./configure --enable-libjxl` followed by `make`
2021-12-29 02:37:57
you won't need to install it, can just do `./ffmpeg_g -i lenna.jxl` or equivalent
Hello71
2021-12-29 03:57:27
or shove https://github.com/thebombzen/FFmpeg/compare/master...libjxl.patch into quilt or whatever it is
Traneptora
2021-12-29 06:35:02
well, I sent my final patches to the ML, let's get some fingers crossed
fab
2021-12-30 11:23:44
for %i in (C:\Users\Utente\Videos\ma\*.png) do cjxl -d 3.446 -s 8 --epf=0 --intensity_target=280 -I 0.9 --photon_noise=ISO1059 --faster_decoding=4 --gaborish=0 --dots=0 %i %i.jxl
2021-12-30 11:31:09
I hadn't RAM for this
nathanielcwm
fab I hadn't RAM for this
2021-12-30 03:26:21
oof how much u have rn?
fab
2021-12-30 03:29:03
24 seconds a photo with that commit i posted in offtopic
2021-12-30 03:29:27
634mb RAM. Per 2400x1080 images
2021-12-30 03:29:48
4 threads same i3 330.
2021-12-30 03:30:28
Im at 2h 25 i did 529 images
2021-12-30 03:33:47
2021-12-30 03:33:59
Close zoom of the artifacts
2021-12-30 03:34:14
140392 bytes
2021-12-30 03:46:17
2021-12-30 03:46:31
Original quality
2021-12-30 03:46:44
Jpg
2021-12-30 03:47:11
827 kb 847283 byte
Master Of Zen
2021-12-30 07:35:27
Quick question, what is the process for first block in Intra coding?(Not JXL specific) Is that just DC? So it's get average -> match with best DC mode -> get residual -> code all of that until you have enough neighboring blocks for directional prediction modes?
_wb_
2021-12-30 07:39:32
Jxl does not do any directional prediction (amongst others to avoid dependencies between groups, which complicates and limits parallel decoding)
2021-12-30 07:41:47
In av1, I imagine the first block just doesn't use any directional prediction (and in general, first row of blocks and first column of blocks can only really predict from left or from top)
Master Of Zen
_wb_ Jxl does not do any directional prediction (amongst others to avoid dependencies between groups, which complicates and limits parallel decoding)
2021-12-30 07:46:47
does that comes with coding efficiency trade off? Is dependency only main flaw of directional modes?
_wb_
2021-12-30 07:49:01
We tried directional prediction and could only get some benefits at low quality
2021-12-30 07:49:34
At higher quality it didn't help much at all
Master Of Zen
2021-12-30 07:50:35
Yeah, that what I though also, you can get quite big residuals if you try to achieve high quality, which negates the point
_wb_
2021-12-30 07:51:24
For the bitrates targeted by video codecs, it is useful
2021-12-30 07:52:02
For still images, not so much
2021-12-30 07:54:51
I think it's one of the main causes of the "vectorized look" that you can get with av1 (and heic, and to some extent with webp)
2021-12-30 07:55:16
Also known as the "oil painting" look, or smudging artifacts
2021-12-30 07:56:32
For some non-photographic content it is nice though, like manga. The artifacts are similar to the drawing style, so not problematic visually
Master Of Zen
2021-12-30 08:02:20
Makes sense
Rally
2021-12-31 04:23:53
hmm, I tried opening a jxl-art generated JXL file with XnViewMP and its not generating it correctly, any ideas why that's the case?
improver
2021-12-31 04:51:02
if using windows try infanview
_wb_
2021-12-31 05:04:36
Old versions of libjxl didn't do upsampling correctly
Rally
improver if using windows try infanview
2021-12-31 05:11:17
works, thanks!
fab
2022-01-01 12:21:06
Svt av1 crf 50 preset 8 Is equivalent to
2022-01-01 12:21:18
43.017 jpeg xl s 8
Traneptora
2022-01-01 03:33:48
Is there a "test" or "print info" option in `djxl`
spider-mario
2022-01-01 03:35:29
there is a separate `jxlinfo` in `examples`
2022-01-01 03:35:39
(which nowadays is built directly in the build folder, not in `examples/`)
Traneptora
2022-01-01 04:29:10
is there any way we could possible have that functionality added to djxl?
2022-01-01 04:29:38
I'm not sure there's any way to get the tools to just tell me about a jxl or test for its integrity
2022-01-01 04:30:00
(decoding to stdout or /dev/null also fails because it can't automatically determine the output file type by extension)
2022-01-01 04:35:40
for example, `djpeg` in both turbojpeg and mozjpeg has `-targa` as an output option to give you consistent output
2022-01-01 04:39:53
I know many tools like `gzip` or `xz` have a `-t` option to just test
2022-01-01 04:40:18
`xz -l` lists information and `xz -t` tests integrity by decoding and checking for issues but not writing the decoded output anywhere
spider-mario
Traneptora (decoding to stdout or /dev/null also fails because it can't automatically determine the output file type by extension)
2022-01-01 04:56:52
you don’t need to supply an output file name at all
2022-01-01 04:57:13
if you just write `djxl img.jxl`, it will decode it to pixels in memory and not write the result anywhere
2022-01-01 04:57:27
(unless we removed that feature?)
Fraetor
spider-mario (unless we removed that feature?)
2022-01-01 04:58:20
It still exists.
Traneptora
2022-01-01 05:00:21
``` JPEG XL decoder v0.7.0 61f9ed0 [SSSE3,Scalar] Usage: tools/djxl INPUT OUTPUT [OPTIONS...] INPUT the compressed input file OUTPUT the output can be PNG with ICC, JPG, or PPM/PFM. ```
2022-01-01 05:00:24
this is not documented
2022-01-01 05:00:31
(output of `djxl --help`)
2022-01-01 05:01:14
it should say something like "Omit the output file in order to test the integrity without writing the decoded pixels."
2022-01-01 05:01:23
or equivalent that is less clunky
Fraetor
2022-01-01 05:01:29
Could probably do with being added to the manpage as well: ``` DJXL(1) DJXL(1) NAME djxl - decompress JPEG XL images SYNOPSIS djxl [options...] input.jxl [output] DESCRIPTION djxl decompresses a JPEG XL image or animation. The output format is determined by the extension of the output file, which can be .png, .jpg, .ppm, .pfm. If the JPEG XL input file contains an animation, multiple output files will be produced, with names of the form "output-framenumber.ext". OPTIONS -h, --help Displays the options that djxl supports. -j, --pixels_to_jpeg By default, if the input JPEG XL contains a recompressed JPEG file, djxl reconstructs the exact original JPEG file if the output file has the .jpg (or .jpeg) filename extension. This flag causes the decoder to instead decode the image to pixels and encode a new (lossy) JPEG in this case. -q quality, --jpeg_quality=quality When decoding to .jpg, use this output quality. This option implicitly enables the --pixels_to_jpeg option. EXAMPLES # Decompress a JPEG XL file to PNG $ djxl input.jxl output.png # Reconstruct a losslessly-recompressed JPEG file $ djxl lossless-jpeg.jxl reconstructed.jpeg SEE ALSO cjxl(1) 12/31/2021 DJXL(1) ```
Traneptora
2022-01-01 05:02:01
manpage at least has brackets around `[output]`
2022-01-01 05:02:29
I personally think options should go before arguments on principle, so I don't like `djxl INPUT OUTPUT [OPTIONS]` and would rather it say something like
2022-01-01 05:02:39
`djxl [options...] input [output]` just like in the manpage
2022-01-01 05:02:49
or equivalent
Fraetor
2022-01-01 05:03:21
Both work, but it should probably be consistent between the documentation.
Traneptora
spider-mario there is a separate `jxlinfo` in `examples`
2022-01-01 05:04:26
`jxlinfo` does not print frame info
2022-01-01 05:05:07
it just reports ```frame: still frame, unnamed```
2022-01-01 05:05:52
in particular, it won't even say whether it's VarDCT or Modular
2022-01-01 05:06:54
although decoding the frame header apparently requires ANS which is <:PortDoll:631220337564188692>
2022-01-01 05:06:56
unfortunate
_wb_
2022-01-01 05:38:14
We could expose that info in the libjxl frame header info
2022-01-01 05:38:59
It's not quite clear where to draw the line between "internal only info" and "externally relevant, to be exposed info"
lithium
2022-01-03 08:44:15
Look like higher intensity_target(2000) and lower target distance(d0.5,0.3) will affect separate option border issue.
Scope
2022-01-03 03:26:39
<https://github.com/libjxl/libjxl/pull/1032/commits/2ca2ca610a76b69fdd6bbf730043e12dddea739d> Also, speaking of transparency changes, is fjxl not very efficient at compressing images with transparency or is there some other thing? Like here: https://de.catbox.moe/o0mc76.png
2022-01-03 03:26:43
_wb_
2022-01-03 03:27:30
My guess here is: needs palette, and benefits from more lz77 than just RLE
2022-01-03 03:29:25
QOI has the pixel cache thing that kind of acts like a 32-color palette, so that helps
2022-01-03 03:30:22
I'm still on holidays for the rest of the weem but afterwards I might at some point add palette detection to fjxl
2022-01-03 03:31:20
It should be possible to do palette if possible without too much slowdown
Scope
2022-01-03 03:32:49
Hmm, also a quick switch to an efficient mode for palette compression would also be useful for the rest of the slower speeds, like from `-e 1` to `-e 7` And it could also make `-e 3` as a mode with very fast and good compression for most content
2022-01-03 03:44:38
Also it would be good to make some kind of fast mode for `-e 3`, like only 8 bit or like in PIK, because currently PIK is faster and more efficient
_wb_
2022-01-03 03:46:55
Specialized code paths could help
Traneptora
2022-01-04 12:30:35
why are all the dependencies added as submodules?
2022-01-04 12:31:14
it seems unnecessary to pull libpng when my system has it installed
2022-01-04 12:31:50
most other libraries just require you to install the various dependencies yourself unless they're very primitive and small (e.g. lodepng)
2022-01-04 12:32:14
like, sjpeg, most systems come with a system libjpeg installed as a jpeg decoder
2022-01-04 12:32:33
we should make sjpeg an optional dep
2022-01-04 12:32:48
having to download them all even if we're using the system version is sort of frustrating
2022-01-04 12:33:28
and why is *zlib* of all things repacked
2022-01-04 12:34:09
all unix systems come with zlib as an essential library
2022-01-04 12:34:16
and windows comes with an equivalent (or maybe even zlib itself)
_wb_
2022-01-04 12:37:52
It should use system libpng/zlib in normal builds
Traneptora
2022-01-04 12:38:15
the issue is, if you clone libjxl and try to build, it'll refuse until you grab the dependencies
_wb_
2022-01-04 12:38:27
We only have it as a submodule for msan builds, because system libpng is not indtrumented for msan
Traneptora
2022-01-04 12:38:38
why not just use the WIC decoder
2022-01-04 12:38:43
windows has native support for zlib and png
2022-01-04 12:39:56
for zlib, in case we'd like to homebrew our own primitive PNG decoder/encoder https://docs.microsoft.com/en-us/windows/win32/cmpapi/-compression-portal for PNG, if not https://docs.microsoft.com/en-us/windows/win32/wic/-wic-lh
_wb_
2022-01-04 12:40:18
WIC is not exactly portable
Traneptora
2022-01-04 12:40:30
It isn't, it's only for windows
2022-01-04 12:40:48
so you don't have to pull in a libpng dependency
2022-01-04 12:41:18
in either case, what frustrates me most tbh is that the dependency grabber grabs literally all of the deps, even the ones you don't need
2022-01-04 12:41:50
it's a little annoying to clone libpng when I won't end up doing anything with the repo
_wb_
2022-01-04 12:42:04
Yes, that seems unnecessary
Traneptora
2022-01-04 12:42:11
at the very least it should be a shallow clone
2022-01-04 12:42:32
which only downloads the last commit
_wb_
2022-01-04 12:43:04
My git skills are quite limited, but feel free to suggest improvements
Traneptora
_wb_ My git skills are quite limited, but feel free to suggest improvements
2022-01-04 01:13:25
append `--depth 1 --recommend-shallow` to the git line in `./deps.sh`
2022-01-04 01:13:53
so it reads
2022-01-04 01:13:55
```sh git -C "${MYDIR}" submodule update --init --recursive --depth 1 --recommend-shallow ```
_wb_ My git skills are quite limited, but feel free to suggest improvements
2022-01-05 02:34:47
https://github.com/libjxl/libjxl/pull/1075
Jyrki Alakuijala
lithium Look like higher intensity_target(2000) and lower target distance(d0.5,0.3) will affect separate option border issue.
2022-01-07 10:48:15
What is the separate option border issue?
lithium Thank you for your reply 🙂 On previous test, I try to reduce those tiny artifacts for drawing content(RGB24), so I use c 1(None) on vardct mode, without color transform can reduce tiny artifacts and increase file size, but will create other issue. This time, I try higher intensity target for drawing content(RGB24), I think intensity target 4000 really can reduce those tiny artifacts and let pixel more like original image. Maybe those tiny artifacts will happen on lower XYB values? and drawing content need higher XYB values to preserve colors?
2022-01-07 10:55:27
If we are pixel-peeking (zooming) to see these defects, we could make a butteraugli version that 2x or 4x the pixels before using butteraugli -- that way we could model the zooming and likely get butteraugli-guided compression to work better with zooming
lithium
Jyrki Alakuijala What is the separate option border issue?
2022-01-07 02:10:13
Thank you for your reply 🙂 jxl separate option is from Jon PR466, > https://github.com/libjxl/libjxl/pull/466 This option can segment image and apply two different lossy algorithm for this image, but for now Modular patch frame and VarDCT frame have visible issue on merge border. > Experimental new encode option: use a heuristic to segment the image in a 'non-photographic' frame > (encoded as one big Modular patch) and a 'photographic' frame (encoded with VarDCT).
Jyrki Alakuijala If we are pixel-peeking (zooming) to see these defects, we could make a butteraugli version that 2x or 4x the pixels before using butteraugli -- that way we could model the zooming and likely get butteraugli-guided compression to work better with zooming
2022-01-07 02:10:26
I usually use general zoom(1x) to watch those image, but sometime still can see some tiny error. I think on lower distance(d0.5,0.3) whole image is look really good for non-photo content, but for specific area(like high contrast sharp line,border) have some visible tiny error, in previous test, I think increase intensity target can reduce those error, (I guess specific area(like high contrast sharp line,border) error will spread to other area, and increase those error area ) But I think jxl separate option probably a better method, reduce visible tiny error and still have good compression ratio, and also can avoid DCT worst case for some manga content.
JendaLinda
_wb_ It's not quite clear where to draw the line between "internal only info" and "externally relevant, to be exposed info"
2022-01-08 03:25:28
Exposing more information about the frames would be very useful. Not only the compression scheme (Modular, VarDCT) but also the color space (XYB, RGB, YCbCr, grayscale) and if possible, lossy/lossless indication would be also nice. The jxlinfo tool should be also able to at least list all included boxes if container is used.
w
2022-01-08 07:28:34
Lossy/lossless indicator doesn't really make sense
2022-01-08 07:28:46
maybe instead cjxl can tag the encoder settings
_wb_
2022-01-08 07:56:04
Could add a metadata box containing cjxl version and cmd line flags and whatever other stuff people think is worth storing (timestamp of encode? timestamp of original input file?)
2022-01-08 07:56:34
It would not be part of the standard itself though, just something a tool can do
JendaLinda
2022-01-08 11:01:47
Metadata isn't reliable. I would rather have a tool to obtain as much information as possible from the jxl datastream itself. In this stage jxl seems to be quite opaque. I believe more tinkers would like to see more clearly into jxl internals.
Fraetor
2022-01-08 11:03:33
TBF, I think the modular/VarDCT+colourspace mostly indicates whether it was lossless or not.
2022-01-08 11:04:16
like Modular RGB could have a note of "Probably lossless"
JendaLinda
2022-01-08 11:08:09
I understand it's not possible to get the exact information if the compression was lossy or lossless, that's not a big deal. Just exposing all available information about the bitstream would be enough for user to be able to read them and interpret them.
2022-01-08 11:18:56
The question is, if it's reasonable to include that in the API or create a special tool for reading detailed information from jxl files.
Sam
2022-01-08 11:41:09
i don't know if anyone has done this already but i did an attempt at making a jpeg xl web button! (if anyone still uses those)
w
2022-01-08 11:46:00
I didn't think someone else would make a button https://discord.com/channels/794206087879852103/794206170445119489/923560819093016617
Sam
2022-01-08 11:47:14
oh cool!!
2022-01-08 11:47:42
we also happened to go for slightly different sizes/styles so they don't really overlap :)
w
2022-01-08 11:48:36
yeah the different sizes is interesting
improver
2022-01-09 02:44:38
<https://commons.m.wikimedia.org/wiki/File:JPEG_XL_logo.svg#mw-jump-to-license> says PD because its too simple lol
_wb_
2022-01-09 07:25:03
TBH, I don't think the JPEG committee really cares about the copyright on the logos. What they care about is that nobody is making it look like they represent the JPEG committee or that the JPEG committee approves something, when that's not the case.
2022-01-09 07:26:22
So it's more about the context and how such a logo (or a derived logo) is used, than about the copyright license per se. At least that's my impression.
2022-01-09 07:29:49
Concretely: if you'd put such a web button on a page to show you like the codec or you made some application that uses it or something like that, nobody will complain. If you put it on something to make it look like it's an official statement by ISO/IEC JTC1 SC29 WG1, that's something else.
improver
2022-01-09 07:34:55
i wanna make jpeg qoi logo just for troll reasons now...
_wb_
2022-01-09 07:56:38
Haha
2022-01-09 07:57:07
What about a jpeg bmp logo :)
JendaLinda
2022-01-09 12:45:32
In my testing, I've discovered that it might be worth to optimize JPEG images before transcoding them to JXL (using jpegtran or Irfanview's lossless JPEG transformations). Despite the jxlc box being exactly the same regardless of the optimization, the size of the jbrd box correlates to the size of the original JPEG file. The same image, with no metadata, the optimized JPEG file results in smaller JXL file than the unoptimized one.
Fraetor
2022-01-09 12:58:22
The only thing with that is that you then don't get the bit exact same file back at the end.
2022-01-09 12:58:55
And if you just want to minimise size you are best off just using `--strip` to remove the jbrd box entirely.
2022-01-09 01:00:14
You can still reconstruct a pixel exact jpeg from that, but not bit exact.
JendaLinda
2022-01-09 01:38:59
I couldn't find a way to reconstruct a JPEG file if the jbrd is missing. So at this point, it seems that jbrd box is necessary to be able to recunstruct a JPEG file at all. Anyway, I found the difference in the file size interesting. I was curious how JXL handles differently optimized JPEG files. After all, the optimization method is specific to JPEG, so it shouldn't make a difference, but it does for some reason. I have all my JPEG optimized alredy, so I "unoptimized" one to try it. And voila, cjxl produced a bigger jxl file.
_wb_
2022-01-09 01:41:03
The jbrd contains all info that is not image data or exif/xmp
2022-01-09 01:42:33
E.g. padding bits in jpeg can have any value. If they're all zeroes (as is the case with jpegtran output), it's fine, but if they're something else, they have to be stored somewhere...
JendaLinda
2022-01-09 01:58:47
I see, the JFIF marker is also clearly visible in the jbrd box. All tested files were produced by jpegtran, just with different settings.
Orum
2022-01-09 03:51:03
``` -P K, --predictor=K [modular encoding] predictor(s) to use: 0=zero, 1=left, 2=top, 3=avg0, 4=select, 5=gradient, 6=weighted, 7=topright, 8=topleft, 9=leftleft, 10=avg1, 11=avg2, 12=avg3, 13=toptop predictive average 14=mix 5 and 6, 15=mix everything. Default 14, at slowest speed default 15``` ...but when I try `-P 15` I get `Invalid predictor value 15, must be less than 14.`
2022-01-09 03:51:41
which is odd, because `-P 14` works just fine (like it should), so the error is wrong on two accounts
2022-01-09 03:55:35
will open an issue on github
Scope
2022-01-09 03:55:38
https://github.com/libjxl/libjxl/pull/613
Orum
2022-01-09 03:55:51
oh, it's already fixed <:BlobYay:806132268186861619>
RockPolish
2022-01-09 04:08:08
Hello everyone, wondering if there is a way to make djxl write the decoded pixels to stdout instead of to a file? I've been trying to load .jxl images in Python (and one WIP library for this on github did not work for me), and it seems wasteful to have to call djxl to write to a .png, then load that .png in Python, and then delete that temporary file. That extra step could be nicely avoided if djxl can just output the raw pixels (but then it'd also have to give the width/height I guess) - or any other way that people have been able to neatly load jxl images in Python? Sorry if this is a common question, I searched but couldn't find much about it
Fraetor
2022-01-09 04:11:41
We probably just need python bindings for libjxl.
_wb_
2022-01-09 04:49:01
Yes, that would be a better idea than system calls
RockPolish
2022-01-09 05:01:05
I agree, my idea was that the stdout thing could be good enough "for now" and work for any language, not just Python - it's not super clean though
2022-01-09 05:01:43
I would be very happy if I could load jpeg xl images in Python, from the bit of testing I've done (losslessly from .png to .jxl), the size reduction ranges from "quite nice" to "extremely nice" with the images I'm trying
_wb_
2022-01-09 05:05:05
Libjxl bindings for all popular languages should be something that can happen quickly after the 1.0 release
Hello71
2022-01-09 08:02:40
https://github.com/libjxl/libjxl/issues/542
2022-01-09 08:04:16
also note that png encoding is (normally) much slower than jxl decoding; even if the disk i/o is free, just encoding the png is a major bottleneck
2022-01-09 08:05:34
also, python surely has imagemagick bindings, and imagemagick supports jxl now. depending on platform, it might be more difficult to install libjxl plus imagemagick with jxl compared to libjxl alone though
RockPolish
2022-01-09 08:14:31
thanks for the link, and thanks for the info, I didn't know imagemagick supported jxl, I'll try it out
_wb_
2022-01-09 08:53:50
We should probably add pam support (ppm but also supporting alpha), as well as decoding just the icc profile
2022-01-09 08:54:47
So you can do something like `djxl foo.jxl --format=pam -` to get uncompressed output on stdout
RockPolish
2022-01-09 09:22:03
that would be great, I'll stay tuned
improver
2022-01-09 10:29:03
> is scheduled to be published on 2022-01-07 (if there are no delays). did delays happen
_wb_
2022-01-09 10:51:25
I would be surprised if delays didn't happen, knowing ISO a bit. Plus the holidays...
Hello71
2022-01-10 03:33:53
theoretically, i think bit-exact jpeg recompression could use jxl lossless "recursively" for embedded thumbnail/preview image. is this implemented, unimplemented, not in spec, or cannot work as described?
2022-01-10 03:35:49
if thumbnail image occupies say 10 kB, and jxl recompression can save 30%, then it would save 3 kB per image, assuming jpeg is not brotli compressible
veluca
2022-01-10 03:52:37
I'd say it's unimplemented, not in spec, and probably a bit of a pain to actually do that way
2022-01-10 03:53:31
might be easier to move the JPEG-preview into a JPEG-recompressed JPEG XL-preview with a second jpeg reconstruction box
2022-01-10 03:53:39
but honestly, I don't think it's really worth the effort
JendaLinda
2022-01-10 03:59:05
I think it would be better to ditch the original thumbnail and generate a new one if needed.
Hello71
2022-01-10 04:00:57
but then it won't be bit-exact
2022-01-10 04:04:53
oh, i see
2022-01-10 04:05:08
but then it *probably* won't be bit-exact
2022-01-10 04:07:26
unless you know the exact scaling algorithm of the original producer (i wonder if there's useful forensic data there)
JendaLinda
2022-01-10 04:11:05
If you need the bit exact file, the original thumbnail has to be saved as is. In the original file, the thumbnail is embedded as another complete JPEG file.
Hello71
2022-01-10 04:11:35
hm, i think 10k is an overestimate of the average. looking at my corpus, exif thumbnail and photoshop thumbnail are normally between 4k and 16k, but strongly right-tailed. it's flashpix previewimages that are huge for some reason
JendaLinda
2022-01-10 04:13:40
And there are also JFIF thumbnails, which are uncompressed bitmaps.
Hello71
2022-01-10 04:14:15
yeah but does anyone actually use that
JendaLinda
2022-01-10 04:15:14
I have no idea, but their support would have to be implemented as well. They're in the specs after all.
Hello71
2022-01-10 04:16:54
i'm just talking about optimizing compression; in that context we just shove everything we don't understand into generic jpeg reconstruction data
JendaLinda
2022-01-10 04:21:31
Personally, I've just removed all thumbnails. I can generate new ones whenever I need them. I've also baked rotation into the image data, because EXIF is unreliable. And I've optimized the files, so there's no garbage data in them. I don't need the exact files, as long as the image data are preserved. But that's a personal preference.
lithium
2022-01-11 03:49:52
If separate picture high contrast sharp line to one frame and apply modular on this frame, another colors plane frame apply vardct, this separate picture method is a good idea? > https://github.com/Mukosame/Anime2Sketch
Kagamiin~ Saphri
lithium If separate picture high contrast sharp line to one frame and apply modular on this frame, another colors plane frame apply vardct, this separate picture method is a good idea? > https://github.com/Mukosame/Anime2Sketch
2022-01-11 06:07:40
Hmm, how would the color layer be obtained and how would it be combined?
Jyrki Alakuijala
lithium If separate picture high contrast sharp line to one frame and apply modular on this frame, another colors plane frame apply vardct, this separate picture method is a good idea? > https://github.com/Mukosame/Anime2Sketch
2022-01-11 10:56:55
Yes, but I should do such things in the encoder by default ...
Hello71
JendaLinda Personally, I've just removed all thumbnails. I can generate new ones whenever I need them. I've also baked rotation into the image data, because EXIF is unreliable. And I've optimized the files, so there's no garbage data in them. I don't need the exact files, as long as the image data are preserved. But that's a personal preference.
2022-01-12 03:33:29
unfortunately removing thumbnails is not always safe, even ignoring the actual thumbnail data; some very poorly designed makernotes or other data may be corrupted with improper thumbnail removal
2022-01-12 03:35:11
now, only a fool would put thumbnail before absolute-offset makernotes, but of course only a fool would make absolute-offset makernotes in the first place
JendaLinda
2022-01-12 06:40:51
Absolute offsets will break if you do any changes to the file structure. There is no way jxl would be able to optimize all weird thumbnail formats. The only way is to store all non standard data as a one big blob. There are even files including data outside the JPEG markers.
2022-01-12 06:44:37
For me, the only useful metadata is a timestamp. I've kept the whole EXIF, even I don't really need most of the EXIF data. If makernotes were making me troubles, I would have just removed makernotes and called it a day.
lithium
Jyrki Alakuijala Yes, but I should do such things in the encoder by default ...
2022-01-12 03:01:03
Thank you for your reply I don't know which method is better, Jon mention some different method about detection image features. > wb > it will probably be a somewhat different approach - not really separating the image into two parts, > but generalizing patches and dot detection into something that doesn't just try to detect text (repeated letters) > and small ellipses (dot detection), but more generally image features that are better not DCT-encoded. > https://discord.com/channels/794206087879852103/794206087879852106/921411954529157140
Kagamiin~ Saphri Hmm, how would the color layer be obtained and how would it be combined?
2022-01-12 03:02:33
Thank you for your reply jxl have a magic option call `--separate`, but still on very experiment status, I guess probably can apply this method on different separate frame? > https://github.com/libjxl/libjxl/pull/466
wayfarer3130
2022-01-12 04:18:34
I'm adding support for medical use of JPEG-XL for the IHE DICOM group. When encapsulated into a DICOM file, the format limits each encoded part to 4 gb, and requires a way to distnguish "next part" from "start of new image". I was thinking of using the ISOBMF format, but I don't know where to look to figure out how to distinguish the start of a new image from a jxlp box. What I'm looking for is a set of bytes that I can use to distinguish jxlp boxes from start of image identifiers.
_wb_
2022-01-12 04:40:57
in jpeg xl files there is always only one image (which can have multiple frames)
2022-01-12 04:42:33
I assume in DICOM you can have multiple images?
wayfarer3130
2022-01-12 04:58:23
No, in DICOM you only have multiple frames, each of which is stored in a separate compressed object - that is as independent JXL instances each encoded separately. Logically they should be encoded in the same JPEG-XL object, but right now that is a step too far.
2022-01-12 04:58:44
So yes, think of it as multiple images, each with exactly one frame.
_wb_
2022-01-12 05:43:37
then every jxl object will either start with the naked codestream signature (0xFF0A) or with the container signature (which is longer)
wayfarer3130
2022-01-12 10:23:49
Is either signature ever the same as the start of a jxlp box? If not, then I can simply say that anything except the naked codestream or the container signature is a continuation marker, and require the breaks between parts to start at a jxlp section (which I'd still like a signature for if possible)
_wb_
2022-01-13 06:19:18
Well there's no guarantee that entropy-coded data doesn't accidentally contain a sequence of bytes that looks like a signature.
2022-01-13 06:26:46
But assuming/requiring that what gets embedded in dicom is either a full naked codestream or a full jxlp box from a container, like you said, it's as follows: Start of new jxl image: - FF 0A (naked codestream, cannot have continuation) - 00 00 00 0C 4A 58 4C 20 0D 0A 87 0A (container, can have continuation) Continuation (jxlp box): - 4 arbitrary bytes (big endian uint32 size, or 0 for 'until eof') followed by "jxlp" in ascii text.
Traneptora
2022-01-13 11:44:22
<@!179701849576833024> thanks
2022-01-13 12:02:02
ugh
2022-01-13 12:02:09
``` Generating C API documentation /home/leo/Programs/AUR/libjxl-git/src/libjxl/lib/include/jxl/encode.h:824: error: documented empty return type of JxlEncoderInitExtraChannelInfo (warning treated as error, aborting now) ```
2022-01-13 12:02:21
is this an AUR package issue or are other people experiencing this too?
improver
2022-01-13 01:23:06
ive reported that on gh
2022-01-13 04:17:03
its prob because doxygen on arch is very recent and spews more warnings than older version
2022-01-13 04:17:38
and for whatever reason its specified in cmakefile to treat warnings as errors
2022-01-13 04:19:17
thats why i consider "treat warnings as errors" settings by default stupid, it breaks very easily on toolset changes
2022-01-13 04:20:07
should only be set for CI builders really
wayfarer3130
_wb_ But assuming/requiring that what gets embedded in dicom is either a full naked codestream or a full jxlp box from a container, like you said, it's as follows: Start of new jxl image: - FF 0A (naked codestream, cannot have continuation) - 00 00 00 0C 4A 58 4C 20 0D 0A 87 0A (container, can have continuation) Continuation (jxlp box): - 4 arbitrary bytes (big endian uint32 size, or 0 for 'until eof') followed by "jxlp" in ascii text.
2022-01-13 04:20:08
Thank you - the continuation is exactly what I needed, will add that to the standards document.
_wb_
improver thats why i consider "treat warnings as errors" settings by default stupid, it breaks very easily on toolset changes
2022-01-13 04:26:44
it's useful because breaking will be much more noticeable than not breaking, and warnings are usually not innocent. But I agree that for a release, it's probably better to allow warnings.
improver
2022-01-13 04:43:16
much more noticeable for people trying to build your stuff in a way what doesn't allow them to build your stuff, and yet days and days after it was broke no one fixed it and except for me no one even reported. so no it doesn't help noticeability, it just demotivates users building your stuff
2022-01-13 04:45:10
cost / benefit ratio is too large and there is already strategy with better, pretty much guaranteed noticeability and no demotivational cost - putting that setting in CI scripts
2022-01-13 04:46:10
so i believe its fair to call decision to treat warnings as errors by default plain stupid
2022-01-13 04:51:45
its kinda irritating that some people push for that without analysing costs. not to mention it's semantically wrong, warnings are separate category for a reason
_wb_
2022-01-13 06:07:38
Makes sense - feel free to make a pull request to do the warning-is-error only for CI and not for normal builds
veluca
2022-01-13 06:18:22
isn't it that way already?
2022-01-13 06:18:30
pretty sure it is
improver
2022-01-13 06:46:36
yes, for C++ stuff. not for doxygen stuff though
veluca
2022-01-13 06:54:44
huh
2022-01-13 06:54:49
that could use some fixing
improver
2022-01-13 07:32:02
https://github.com/libjxl/libjxl/pull/1095 yeah
Scope
2022-01-13 08:40:03
<https://www.reddit.com/r/jpegxl/comments/s37802/how_can_i_use_the_fastlossless_encoder/> Also, would it be more convenient to have a separate repository for FJXL? Unless it's probably more difficult for reviews, but I think it's easier for other people to discuss, make changes, and use
fab
2022-01-13 08:44:39
Fjxl and fpnge aren't the same
2022-01-13 08:44:42
?
2022-01-13 08:44:58
Fpng i knew is made by Richard
Scope
2022-01-13 08:48:40
FJXL for JXL, FPNG and FPNGE for PNG
fab
2022-01-13 09:18:05
Thanks
lithium
lithium If separate picture high contrast sharp line to one frame and apply modular on this frame, another colors plane frame apply vardct, this separate picture method is a good idea? > https://github.com/Mukosame/Anime2Sketch
2022-01-16 10:31:34
I was wrong, I test this separate method on photoshop (separate picture high contrast sharp line), but look like this method also happen some border issue...😢 I think Jon method probably a better choose, but I don't understand how to detect not suitable DCT features for non-photo picture.
Jyrki Alakuijala
2022-01-19 02:15:01
how to code without artefacts
Pierre-Anthony Lemieux
2022-01-20 08:48:55
<@!179701849576833024> What needs to be called before `JxlDecoderProcessInput()` in order to decode a codestream created by `FastLosslessEncode()` ?
veluca
2022-01-20 08:50:27
I'd say the same as any other JPEG XL image - you can follow the example in https://github.com/libjxl/libjxl/blob/main/examples/decode_oneshot.cc
Pierre-Anthony Lemieux
2022-01-20 08:55:07
Weird. Decoding dies with the following code, which works when an image is encoded using the code in encode_oneshot.com.
2022-01-20 08:55:40
Decoder snippet
veluca
2022-01-20 08:56:24
that's curious - how does it die?
_wb_
2022-01-20 08:58:43
could be that FastLosslessEncode() always produces an RGBA image
2022-01-20 08:59:30
which you might not be prepared for, since this code is not getting the `num_comps` from the bitstream
2022-01-20 09:01:40
it can be useful to build libjxl with debug messages enabled ( `-DJXL_DEBUG_WARNING -DJXL_DEBUG_ON_ERROR`)
Pierre-Anthony Lemieux
2022-01-20 09:05:17
`ext/libjxl/lib/jxl/decode.cc:2117: invalid signature terminate called after throwing an instance of 'std::runtime_error' what(): Decoder error`
veluca
2022-01-20 09:08:55
huh. this sounds like it's getting the wrong input...
Pierre-Anthony Lemieux
2022-01-20 09:09:55
It is getting the contents of `codestream` in `FastLosslessEncode(pixels, width, width * 4, height, &codestream);`
2022-01-20 09:14:31
> could be that FastLosslessEncode() always produces an RGBA image <@!794205442175402004> That is just an artifact of the experimental code, right?
_wb_
2022-01-20 09:26:27
Yes
Pierre-Anthony Lemieux
2022-01-20 09:37:25
<@!179701849576833024> did you ever try the output of `FastLosslessEncode` with `DecodeJpegXlOneShot`?
veluca
2022-01-20 09:44:15
No, just with djxl, but it should be the same in theory...
Pierre-Anthony Lemieux
2022-01-20 09:47:50
Doesn't djxl use different header reading logic?
veluca
2022-01-20 09:52:49
it does, but it should at least be equivalent 🙂
_wb_
2022-01-20 10:14:03
What are the first two bytes of the codestream? Should be 0xFF0A
Pierre-Anthony Lemieux
2022-01-20 10:34:00
veluca
2022-01-20 10:34:56
that looks very wrong
2022-01-20 10:35:06
think you could share the code that produced it?
Pierre-Anthony Lemieux
2022-01-20 10:36:51
``` unsigned char* data = stbi_load(filepath.c_str(), &width, &height, &num_comps, 0); ... this->cb_.size = FastLosslessEncode(pixels, width, width * 4, height, &this->cb_.codestream);```
_wb_
2022-01-20 10:39:28
And cb_.codestream is an unsigned char*?
Pierre-Anthony Lemieux
2022-01-20 10:40:27
``` struct CodestreamBuffer { uint8_t* codestream; size_t size; }; ```
2022-01-20 10:40:48
(waiting for the obvious mistake to come out 🙂
_wb_
2022-01-20 10:41:25
Yes this looks like some obvious-in-retrospect thing
veluca
2022-01-20 10:42:23
... couldn't say what's the issue though, except if you end up not using cb_ after all for the decoder
2022-01-20 10:42:27
can you send the whole file?
Pierre-Anthony Lemieux
2022-01-20 10:49:20
https://github.com/sandflow/libench/blob/main/src/main/cpp/ojph_codec.cpp
2022-01-20 10:49:55
(trying to come up with an automated test bench for lossless codecs)
veluca
2022-01-20 10:51:49
ah, you're missing a return in encodeRGBA8
Pierre-Anthony Lemieux
2022-01-20 10:53:48
ok. that was dumb.
2022-01-20 10:54:11
feel free to suggest enhancements to the build and the code.
2022-01-20 10:55:57
works good now.
Scope
2022-01-22 10:24:15
If somebody on Windows and AVX2 CPU wants to test JXL builds with different compilers, I have added various builds and write a simple CMD which also has a timer, it can be used as `C_Bench.cmd Image.png` (or drop the image on the cmd), but if the image is very big, it will take long time to bench or it is possible to reduce `--num_reps` in cmd file MP/s in JXL or Global Time in the timer, this is basically what needs to be compared Alternatively, it is possible to compare builds manually, they are in different folders with the relevant names
The_Decryptor
2022-01-23 03:00:26
I'm having some issues with 10bit PNM files and cjxl
2022-01-23 03:00:52
I can open this image in GIMP and IM fine, but roundtripping it through cjxl/djxl just gives me a black square
Fox Wizard
2022-01-23 06:39:45
When I saw lossless I thought it doesn't make that much of a difference, but then I saw lossy performance... not twice as fast for me, but still a very decent difference
Scope
2022-01-23 06:47:10
Yes, for lossless it depends much more on the image, on some the difference is hardly noticeable
2022-01-23 06:47:49
Also on slower encoding settings
Fox Wizard
2022-01-23 06:54:18
Hm, really seems to depend a lot on the image. In another image it was about twice as fast for lossless. I like how there's such an extreme speed improvement just by using a different compiler
Scope
2022-01-23 07:05:12
Fox Wizard
2022-01-23 07:11:59
<a:FurretSpeed:832307660035850310>
BlueSwordM
Fox Wizard <a:FurretSpeed:832307660035850310>
2022-01-23 07:27:11
<a:speed:765057909317959710>
_wb_
2022-01-24 08:58:16
If you have a 1-bit image, you can use a single horizontal (or vertical) squeeze step and then apply palette on the resulting 2 channels to get a half-sized 2-bit image, I checked the math, it works
2022-01-24 08:59:31
You cannot use the same trick to get from a 2-bit image to a bitpacked 4-bit image though: you would get 22 palette entries, not 16, due to the tendency term in squeeze
2022-01-24 09:00:22
(also you do need to pad the dimensions to become even, but that's not really an issue)
2022-01-24 10:21:47
Ah, there _is_ a way to do more bitpacking
2022-01-24 10:22:36
so doing squeeze on 1-bit images does this: 0,0 -> 0,0 0,1 -> 0,-1 1,0 -> 1,1 1,1 -> 1,0
2022-01-24 10:23:15
problem is that the second channel gets 3 values, so cannot just recursively apply squeeze on it
2022-01-24 10:24:28
but if you introduce a dummy extra channel that is just all zeroes, you can apply RCT
2022-01-24 10:24:59
(you need the extra channel because RCT requires 3 same-sized channels)
2022-01-24 10:26:53
with an RCT that subtracts the first channel from the second, you get only 2 distinct values in the second channel too
2022-01-24 10:30:09
then you can apply squeeze again on both channels to get 4 channels, apply rct again twice to get the residuals to only 2 distinct values again, etc
2022-01-24 10:30:43
that scheme works recursively, and it can be used both horizontally and vertically
2022-01-24 10:31:39
so you can take any NxM macroblock of 1-bit values and bitpack it into NM-bit macropixels
2022-01-24 10:34:47
with special-casing in the decoder to recognize such a weird sequence of e.g. Squeeze, RCT, Squeeze, RCT, RCT, Palette to do the unpacking in a way more efficient way than naively undoing each transform in sequence, it could be efficient too
2022-01-24 10:36:56
2D bitpacking of e.g. 2x2 1-bit pixels into 4-bit macropixels likely compresses better than the usual 1D bitpacking of 8x1 1-bit pixels into 8-bit macropixels, at least according to my gut feeling
2022-01-24 10:41:13
could in principle even pack 6x5 1-bit pixels into 30-bit macropixels...
2022-01-24 10:42:40
that's probably a bad idea, but 4x4 pixels into 16-bit macropixels could perhaps work well
2022-01-24 10:48:16
<@532010383041363969> so the jxl bitstream does in fact allow bit packing, just not directly, you need a fancy chain of modular transforms and a dummy extrachannel to do it. But it can in principle be done.
Scope
2022-01-24 05:11:23
Fix ANS code generation at faster speeds <https://github.com/libjxl/libjxl/pull/1112> So it only affects for `-e 1`?
cpc2
2022-01-24 05:25:59
Hi, I've seen that the image in the jxl website is only 117 bytes despite having a pretty good quality. But if I open it on irfanview and save it again as jxl the resulting file is dozens of kb. Is that image in the main page encoded in some special way or is the encoder in irfanview inefficient? (Ps I don't have much knowledge of how it works)
2022-01-24 05:26:15
this image
Scope
2022-01-24 05:27:20
<#824000991891554375>
veluca
Scope Fix ANS code generation at faster speeds <https://github.com/libjxl/libjxl/pull/1112> So it only affects for `-e 1`?
2022-01-24 05:30:11
only, no. mostly, yes 😛
_wb_
cpc2 Hi, I've seen that the image in the jxl website is only 117 bytes despite having a pretty good quality. But if I open it on irfanview and save it again as jxl the resulting file is dozens of kb. Is that image in the main page encoded in some special way or is the encoder in irfanview inefficient? (Ps I don't have much knowledge of how it works)
2022-01-24 05:52:14
It is a hand-crafted bitstream. Don't expect any jxl encoder to get even close to that density. I doubt the search space the libjxl encoder is looking in even includes such encodings...
cpc2
2022-01-24 05:54:47
ahh i see, thanks!
_wb_
2022-01-24 06:04:47
Actually interesting exercise to run cjxp -m -e 9 - g 3 -I 1 on jxl art to see how close it gets to figuring out the MA tree
cpc2
2022-01-24 06:12:15
one other doubt I had is that i talked about jxl in another server and said it can save around 20% of the size converting losslessly from jpeg, but a guy tried it in a converter website (https://jpegxl.io/) and the result was somehow bigger. Is that site converting it wrong somehow?
Diamondragon
cpc2 one other doubt I had is that i talked about jxl in another server and said it can save around 20% of the size converting losslessly from jpeg, but a guy tried it in a converter website (https://jpegxl.io/) and the result was somehow bigger. Is that site converting it wrong somehow?
2022-01-24 06:15:25
I don't think that site is doing lossless. Try using this: https://github.com/libjxl/libjxl/releases/download/v0.6.1/jxl-x64-windows-static.zip
fab
Diamondragon I don't think that site is doing lossless. Try using this: https://github.com/libjxl/libjxl/releases/download/v0.6.1/jxl-x64-windows-static.zip
2022-01-24 06:16:28
just les effo and olde build less than 0.6
Scope Fix ANS code generation at faster speeds <https://github.com/libjxl/libjxl/pull/1112> So it only affects for `-e 1`?
2022-01-24 06:16:47
no, only new heuistic change
2022-01-24 06:16:53
by one single byte
2022-01-24 06:16:59
no compaed of image
Diamondragon
2022-01-24 06:17:01
unzip, move this jpg into the folder, type 'cmd' in the address bar in windows explorer, and hit enter. Then, do this:
2022-01-24 06:17:57
cjxl [image name].jpg [image name].jxl
cpc2
2022-01-24 06:19:14
👌 thanks, gonna try
2022-01-24 06:19:31
so by doing it in a lossy way it somehow grows in size
fab
2022-01-24 06:19:38
at s 8 is active
2022-01-24 06:21:20
it changes in different way
2022-01-24 06:21:46
i'll try comparing the images visually without posting the results
_wb_
cpc2 so by doing it in a lossy way it somehow grows in size
2022-01-24 06:26:43
Yes, since it wastes bits trying to preserve jpeg artifacts if you encode from pixels.
cpc2
Diamondragon cjxl [image name].jpg [image name].jxl
2022-01-24 06:27:08
yup, just did it and went from 2.41mb to 2.03mb
_wb_ Yes, since it wastes bits trying to preserve jpeg artifacts if you encode from pixels.
2022-01-24 06:27:30
ahh i see 👌
_wb_
2022-01-24 06:34:33
Any codec that does lossy transcoding either adds extra loss (more artifacts on top of the ones that are already there), or will get larger than the original file. Only the lossless jpeg transcoding mode of jxl can avoid that. But you need to give it the original jpeg file, not just the decoded pixels (which is likely what jpegxl.io does)
Scope
veluca only, no. mostly, yes 😛
2022-01-24 06:59:44
It is strange, but the result is a little worse on the Manga set
_wb_
2022-01-24 07:06:03
At what speed?
Scope
2022-01-24 07:08:31
`-e 1/2`
2022-01-24 07:09:34
But, on other sets a little better or almost the same, mostly better on photo-type images
_wb_
2022-01-24 07:13:29
Interesting...
Deleted User
_wb_ Any codec that does lossy transcoding either adds extra loss (more artifacts on top of the ones that are already there), or will get larger than the original file. Only the lossless jpeg transcoding mode of jxl can avoid that. But you need to give it the original jpeg file, not just the decoded pixels (which is likely what jpegxl.io does)
2022-01-24 07:15:51
Or both! <:kekw:808717074305122316>
veluca
Scope But, on other sets a little better or almost the same, mostly better on photo-type images
2022-01-24 07:54:47
can't imagine why xD
Scope
2022-01-24 07:57:47
Sometimes `-e 2` is also slightly worse (like 0.1%), even when `-e 1` is better (compared to older versions)
Justin
2022-01-25 09:50:26
It should already!
2022-01-25 09:50:33
You can tick it under the expert settings. "JPEG transcode".
2022-01-25 09:50:54
Let me know if you experience any issues.
2022-01-25 09:57:37
username
Justin You can tick it under the expert settings. "JPEG transcode".
2022-01-25 10:45:43
that seems a bit counterintuitive is there any reason why it isn't the default for jpeg images?
Scope
2022-01-26 07:27:17
> Do not run filters on color channels using their padded dim <https://github.com/libjxl/libjxl/pull/1120> Is it somehow helpful to eliminate boundaries for separate encoding?
_wb_
2022-01-26 08:17:35
Nah, we weren't doing edge cases (on the very right and bottom edges of the whole image) exactly correctly w.r.t. the spec, so that has to be fixed
Justin
username that seems a bit counterintuitive is there any reason why it isn't the default for jpeg images?
2022-01-26 08:22:42
No, there isn't. I'll enable it by default in the next push. Thanks for the feedback! Highly appreciated
lithium
2022-01-26 08:51:13
A little curious, If I don't misread Jyrki Alakuijala comment, probably Jyrki Alakuijala don't like separate image and use different algorithm method? I still can't figure it out this comment... > Jyrki Alakuijala > Detecting and using different approaches is a dirty trick that tries to circumvent unnecessary deficiencies -- the system should always just work > When detecting and using different approaches for compression density, then it is ok > It is not equally ok as a method to suppress visible artefacts > https://discord.com/channels/794206087879852103/930838798911291472/933363934889672764 update: > Detecting and using different approaches is a dirty trick that tries to circumvent unnecessary deficiencies > -- the system should always just work vardct can implement some feature to process better for high contrast sharp edge. > When detecting and using different approaches for compression density, then it is ok > It is not equally ok as a method to suppress visible artefacts For DCT worst case will change to another compress algorithm to get better compression. I try to figure it out this comment, probably like this?
Justin
username that seems a bit counterintuitive is there any reason why it isn't the default for jpeg images?
2022-01-26 10:40:52
it's live. 🙂
2022-01-26 02:16:15
There's a repo, but it's still private, since we push a lot currently without documenting (yes, I know..😆 ). It will be public in some months, just like avif.io 🙂 That spam algorithm thing looks weird, especially since I did little to no marketing for this website besides some twitter postings and rare news in this discord. Thanks for letting me know!
Koromaru Korüko
2022-01-26 02:17:52
<@!439539398657441832> what are you using for the page? workers, service workers, or client wasm?
2022-01-26 02:20:17
dont @ me, i dont run the site XD
Justin
Koromaru Korüko <@!439539398657441832> what are you using for the page? workers, service workers, or client wasm?
2022-01-26 02:22:19
It's client WASM. Planning to add offline support some time with workers, but since this is a fun project with almost no income like avif.io and I don't have the dev skills required, most tasks are paused.
Koromaru Korüko
2022-01-26 02:23:02
client wasm is offline .... workers are the things that connect to your website to offload the task onto your servers.
Justin
Koromaru Korüko client wasm is offline .... workers are the things that connect to your website to offload the task onto your servers.
2022-01-26 02:23:21
I think that is perfect evidence for my lacking skills 😛
Koromaru Korüko
2022-01-26 02:23:40
well then
2022-01-26 02:23:50
i need proper use cases for encoding
2022-01-26 02:24:01
so i can implement actually usefull functions in wasm_extras
Justin
2022-01-26 02:24:08
Ye right! I remember creating some stack exchange replies with links to articles. Nothing spammy though. But it's whatever
Koromaru Korüko
2022-01-26 02:24:40
can you send me a few use cases that you have, and any ideas or suggestions on how the functions should look. I'll then see about implementing them.
2022-01-26 02:24:57
simple stuff, like data xy in data z out
Justin
Koromaru Korüko can you send me a few use cases that you have, and any ideas or suggestions on how the functions should look. I'll then see about implementing them.
2022-01-26 02:26:17
would publishing the repo instead help as well?
2022-01-26 02:26:32
Ye, most likely the self promotion aspect, that makes sense. 🙂 I think self promotion is fine in a sense, if it flows with the narrative and provides quality. But it's whatever.
Koromaru Korüko
2022-01-26 02:26:42
the repo is a fork and its currently planned once its got a decent interface
2022-01-26 02:27:20
to be merged with the official libjxl repo
2022-01-26 02:28:22
as for publishing, no rush, and tbh no real clue, as I would have to read over half your code base to figure out what/how you even do jxl
2022-01-26 02:29:24
it would be easier if you just give some suggestions. the only limit would be i don't want to directly interface with files and the likes, as on browser its not impossible but not exactly good.
Justin
2022-01-26 02:31:22
Ye, right. I remember we had a talk with Jon once about progress tracking the conversion process. But then again, I'm way out of suggesting any technical or functional improvements at this point, since this is way beyond my skills.
Koromaru Korüko
2022-01-26 02:32:16
status tracking is a bit of a no go, for browser js
2022-01-26 02:32:21
as its forced single threaded
2022-01-26 02:32:41
I mean, I could implement a callback..
Justin
2022-01-26 02:33:08
@FYI Published it https://github.com/justinschmitz97/jpegxl/
Koromaru Korüko
2022-01-26 02:33:30
love the commit names XD
Justin
2022-01-26 02:33:48
ye, don't whip me pls
2022-01-26 02:34:07
I'll do better now.
Koromaru Korüko
2022-01-26 02:36:32
hehe
2022-01-26 02:36:50
what do you think would be better, a functional interface or an object based interface?
Justin
Koromaru Korüko what do you think would be better, a functional interface or an object based interface?
2022-01-26 02:38:21
By "you", you refer to this whole chatroom, right? 😄
Koromaru Korüko
2022-01-26 02:38:45
na, i don't usually work directly with javascript so i don't know what the general preference is
2022-01-26 02:39:25
for me personally i prefer using functional interfaces when interfacing with other languages
2022-01-26 02:39:47
as it removes the need to manage objects.
Justin
2022-01-26 02:40:25
https://tenor.com/view/futurama-fry-unsure-squint-hmm-gif-5346260
2022-01-26 02:40:27
Ehhh. yes.. yes of course. Sorry, out of my expertise. 😄
Koromaru Korüko
2022-01-26 02:40:54
aight, no worry
Deleted User
2022-01-26 02:57:09
I typically just override the old code... <:YEP:808828808127971399>
Justin
I typically just override the old code... <:YEP:808828808127971399>
2022-01-26 03:03:41
you lunatic!
Deleted User
2022-01-26 03:10:58
I like to live dangerous. ;)
cpc2
Justin Let me know if you experience any issues.
2022-01-26 11:13:47
https://github.com/justinschmitz97/jpegxl/issues/1 submitted an issue because the jpeg transcode feature doesn't seem to work (perhaps happened when moving the checkmark from expert settings to the approach section)
lithium
2022-01-27 07:05:54
A little curious, libjxl 1.0 will be ready end of February, It's mean non-photo content quality and feature improvement will happen on March?<:BlobYay:806132268186861619>
fab
2022-01-27 07:23:20
Wait i send you a screenshot
Justin
cpc2 https://github.com/justinschmitz97/jpegxl/issues/1 submitted an issue because the jpeg transcode feature doesn't seem to work (perhaps happened when moving the checkmark from expert settings to the approach section)
2022-01-27 10:24:39
Looked into it, but I have no clue why this is happening 😦
lithium
2022-01-29 03:01:48
Transform RGB or ycbcr color space to XYB color space, It's possible add new compress error in this process? I notice if I use XYB + default intensity target will heppen some tiny artifacts, when I use intensity target 4000 can reduce those tiny artifacts, but when I use c1 those tiny artifacts is gone, but I think probably have some other issue on c1. > cjxl -d 0.5 -e 8 --epf=3 > cjxl -d 0.5 -e 8 --epf=3 --intensity_target=4000 > cjxl -d 0.5 -e 8 --epf=3 -c 1 > https://discord.com/channels/794206087879852103/930838798911291472/935908292100784138
fab
2022-01-29 03:34:28
could you build cjxlng with brotlidec please
2022-01-29 07:32:35
please help
2022-01-29 07:32:45
for %i in (C:\Users\Utente\Pictures\e\*.jpg) do cjxl_ng %i %i.jxl
2022-01-29 07:32:51
i have installed package botli
2022-01-29 07:33:07
i want
2022-01-29 07:33:09
i 0.019 s 8 use new heuristics cjxlng d 0.88
2022-01-29 07:33:23
ffom latest build
2022-01-29 08:13:54
what is the command fo msys
2022-01-29 08:14:01
is the clang pacman
2022-01-29 08:14:03
o nomal one
Traneptora
2022-01-30 02:05:39
I'm getting a build error with git master
2022-01-30 02:05:42
``` [ 65%] Building CXX object lib/CMakeFiles/ac_strategy_test.dir/jxl/ac_strategy_test.cc.o In file included from /home/leo/Programs/libjxl/lib/jxl/ac_strategy_test.cc:13: /usr/include/hwy/tests/test_util-inl.h:517:3: error: statement not allowed in constexpr function HWY_ASSERT(max_pow2 != 0); ^ /usr/include/hwy/base.h:144:3: note: expanded from macro 'HWY_ASSERT' do { \ ^ 1 error generated. ```
2022-01-30 02:05:47
is this an upstream bug in Highway?
2022-01-30 02:06:28
I git cloned the repo (recursively), and configured it as such
2022-01-30 02:06:51
```bash export CC=clang export CXX=clang++ unset CFLAGS unset CXXFLAGS cmake -B build -DCMAKE_BUILD_TYPE:STRING='Release' -DJPEGXL_FORCE_SYSTEM_BROTLI:BOOL='true' -DJPEGXL_FORCE_SYSTEM_GTEST:BOOL='true' -DJPEGXL_FORCE_SYSTEM_HWY:BOOL='true' -DJPEGXL_BUNDLE_LIBPNG:BOOL='NO' -DJPEGXL_BUNDLE_GFLAGS='NO' -Wno-dev make -C build ```
2022-01-30 02:07:09
highway is git master
veluca
2022-01-30 02:08:15
sounds like an hwy problem yes
Traneptora
2022-01-30 02:08:39
in the short term, can I work around it by not building the tests?
2022-01-30 02:08:57
or is `ac_strategy_test.cc` not really a test but a main file
veluca
2022-01-30 02:09:05
it's a test
2022-01-30 02:09:10
can totally skip tests yes
Traneptora
2022-01-30 02:10:38
I'll add `-DBUILD_TESTING:BOOL='false'` for now
lithium
2022-01-31 02:36:15
`libjxl` `basic_info.uses_original_profile = JXL_TRUE` equal to `cjxl` `-c 1` ?
_wb_
2022-01-31 04:18:41
yes, should be
lithium
2022-01-31 05:18:19
In my test `-c 1` can remove tiny artifacts for non-photo content, but will happen some strange rectangle artifacts, and file size will bigger than XYB. I just think maybe those tiny artifacts happen on XYB transform?
2022-02-01 08:08:15
Look like cjxl -d 0.5 -e 8(XYB) + slight bilateral filter will better than use -c 1 for my use case, but I think apply bilateral filter probably not a good idea. > https://discord.com/channels/794206087879852103/930838798911291472/937979858598903829
fab
2022-02-03 08:17:18
wb how to conve
2022-02-03 08:17:23
with cjxlng
2022-02-03 08:17:45
2022-02-03 08:17:55
2022-02-03 09:23:18
2022-02-03 09:23:29
some thumbnail look good some look bad
2022-02-03 09:24:10
Effort 8
2022-02-03 09:24:25
Jamaika build unfortunately
diskorduser
2022-02-04 03:25:59
Use lossless mode
Sage
fab
2022-02-04 03:30:57
if you're compressing that entire column as an image and you want it to look anywhere near good you should probably use patches for lossy
fab
2022-02-04 05:03:03
I don't know about this encoder
2022-02-04 05:03:24
I know latest version is fixed size
2022-02-04 05:03:33
Only one quality per Speed
diskorduser Use lossless mode
2022-02-04 05:21:49
Png don't compress
2022-02-04 05:22:07
The image was generated with cjpeg hdr
2022-02-04 05:22:31
Old 4 month commit
2022-02-04 05:22:40
But i have compiled it now
2022-02-04 05:22:49
02 february 2022
2022-02-04 05:23:09
Fixed quality again
2022-02-04 05:23:13
Lossy to lossy
diskorduser
2022-02-04 05:23:20
Pngs made with cjpeg? Whaaat
fab
2022-02-04 05:23:33
Jpg to jxl
2022-02-04 05:23:40
Jpg hdr to jxl
2022-02-04 05:23:48
Cjxlng
2022-02-04 05:23:53
Fixed quality
2022-02-04 05:23:55
S8
2022-02-04 05:24:04
-effort 8
diskorduser
2022-02-04 05:24:59
If you're converting jpg to jxl, probably it's lossless conversion. You don't have to worry about it. Right?
fab
2022-02-04 05:25:21
No cjxlng only has a quality per speed
2022-02-04 05:25:25
That isnt d1
2022-02-04 05:25:39
Unless you touch lossy modular mode
2022-02-04 05:25:54
Who f don't know if is Active
2022-02-04 05:26:35
I downloaed a last compiled from jamaika from 1 day ago
2022-02-04 05:26:40
02gcc
2022-02-04 05:26:45
Not 3101gcc
2022-02-04 05:27:06
That was s8 cjxlng
2022-02-04 05:27:40
I didnt make show the name of build
diskorduser
2022-02-04 05:28:10
jpg to jxl is a lossless conversion. You shouldn't add -d 1.
fab
2022-02-04 05:28:44
Yes but this is s 8 cjxlng
2022-02-04 05:28:47
Not d1
2022-02-04 05:28:50
Is fixed quality
2022-02-04 05:29:03
The size vsries
2022-02-04 05:29:12
This was 335 kb
diskorduser
2022-02-04 05:29:12
Why are you using "cjxlng"?
fab
2022-02-04 05:29:19
And 6500 height
diskorduser Why are you using "cjxlng"?
2022-02-04 05:29:42
For neomelodic or Sanremo or even Sicilian faces
2022-02-04 05:29:47
It looks good
2022-02-04 05:30:04
But it has some blur as i showed
2022-02-04 05:30:25
The inna love bizzarre thumbnail picture is all blirred
2022-02-04 05:30:40
Still not lossless
diskorduser
2022-02-04 05:30:44
If you have jpg, you should just use cjxl and do lossless conversion.
fab
2022-02-04 05:30:51
But lossless is enough for me
diskorduser If you have jpg, you should just use cjxl and do lossless conversion.
2022-02-04 05:31:09
This some people say it retrocessed
2022-02-04 05:31:32
Or is only 16 percent with 40% picture
2022-02-04 05:31:46
But to me is false data
2022-02-04 05:32:06
Still i don't use since 3 months
diskorduser If you have jpg, you should just use cjxl and do lossless conversion.
2022-02-04 05:32:14
Dkd OK
_wb_
2022-02-04 06:07:04
cjxlng is WIP
Sage
_wb_ cjxlng is WIP
2022-02-04 07:42:43
what's it for?
_wb_
2022-02-04 07:50:30
It's a cjxl that uses the library api
fab
2022-02-09 04:02:16
—d 0.815 —s 9 ——use_new_heuristics —q 45.11 —s 8 ——use_new_heuristics (new encode —d 0.3 —s 9 ——epf=2 ——gaborish=1 ——photon_noise=ISO55 ——target_intensity=256 -p (default
2022-02-09 04:02:38
the poblem is that cjxl can't choose those
2022-02-09 04:02:45
so a new encode has to be made
2022-02-09 04:02:51
like cjxlng
2022-02-09 09:04:18
2022-02-09 09:05:10
john in my opinion the image beatrix supercars should scale bette at low bpp
2022-02-09 09:05:51
like at
2022-02-09 09:05:56
D 0.222 s 6 i 0.615 with old cjxlng
2022-02-09 09:07:13
https://www.sendspace.com/file/luh1vg
Jyrki Alakuijala
2022-02-16 12:05:04
I have created https://github.com/libjxl/libjxl/pull/1178 to reduce the redness blurring at low distances
2022-02-16 12:05:43
probably the 'right thing' would be to have another parameter that indicates if the use is going to be at high zoom levels
2022-02-16 12:05:53
but we can also think that very low distances implicitely indicate it
fab
2022-02-16 12:26:44
Anyone for a build
2022-02-16 12:26:57
Win64 win 7
2022-02-16 12:39:19
scope ae you acgtive
2022-02-16 01:27:35
https://music.youtube.com/playlist?list=PLic8c70Da8qhatUbUXmWF7lZOxsETCjmj&feature=share
2022-02-16 01:28:06
I guess this are the images where jxl has more difficulties
2022-02-16 01:32:19
2022-02-16 01:32:32
Like if you tell jxl encode this
2022-02-16 01:32:46
Probably the artifacts won't be bad
2022-02-16 01:33:03
But if the neomelodic are mixed with INNA
2022-02-16 01:33:12
Then is more complex
2022-02-16 01:33:24
Text is also important for me
2022-02-16 01:33:37
I posted it in benchmarks
2022-02-16 02:34:06
<@!532010383041363969> how to download the build in github
2022-02-16 02:34:11
do i need peemium github
2022-02-16 02:34:45
i'm waiting fo the checks
Jyrki Alakuijala
2022-02-16 02:34:45
I don't know, I'm using git without experience or substantial understanding of it
Koromaru Korüko
Jyrki Alakuijala I don't know, I'm using git without experience or substantial understanding of it
2022-02-16 02:41:52
this is everyone who uses git...
2022-02-16 02:42:13
if the option isn't in my GUI it doesn't exist
fab
2022-02-16 03:00:44
https://github.com/libjxl/libjxl/runs/5217664268
2022-02-16 03:00:50
why this is a job
2022-02-16 03:01:04
and not a run
2022-02-16 03:01:19
2022-02-16 03:02:36
ah i saw the eo
2022-02-16 03:02:42
the mistake