Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sixel quality improvements #174

Open
hpjansson opened this issue Oct 4, 2023 Discussed in #173 · 4 comments
Open

Sixel quality improvements #174

hpjansson opened this issue Oct 4, 2023 Discussed in #173 · 4 comments
Labels
quality Output quality
Milestone

Comments

@hpjansson
Copy link
Owner

Discussed in #173

Originally posted by helma October 4, 2023
I intend to use chafa as a previewer for my photos, but have sometimes problems with the rendering quality of slow color gradients (e.g. cloudy skies), that come out very quantized with distinct color bands. Crisp photos render however perfectly as sixels. I have tried chafa, notcurses, img2sixel and imagemagick and in general I can get the best results with the -I option of img2sixel, followed by magick, notcurses and chafa (my terminal is foot version: 1.14.0 +pgo +ime +graphemes -assertions from nixos 23.05). Here are the resulting sixel files, png images have been generated with sixel2img:

Original (not very beautiful, but shows the effect very clearly):

chafa source.jpeg > chafa.six (Chafa version 1.12.4)


https://files.pdp8.info/chafa.six

ncplayer -t0 -q -k -s scalehi source.jpeg > notcurses.six (ncplayer version 3.0.9)


https://files.pdp8.info/notcurses.six

magick source.jpeg -resize 1914x1188> sixel:- > magick.six (Version: ImageMagick 7.1.1-18 Q16-HDRI x86_64 8c6cdf58e:20230923 https://imagemagick.org)


https://files.pdp8.info/magick.six

img2sixel -I -w 1914 source.jpeg > img2sixel.six (img2sixel 1.10.3)

Conversion to png spoils it completely, but img2sixel gives by far the best approximation of the original with the -I option.
The high color option may cause however artefacts at the bottom of some images (maybe related to libsixel/libsixel#16).


https://files.pdp8.info/img2sixel.six

Are there any options in chafa to improve sixel rendering of photos? Dithering can improve the appearance of this file, but I loose details in sharper shots. I would prefer to use chafa over the other options because of speed and active maintainance.

@hpjansson hpjansson added the quality Output quality label Oct 4, 2023
@hpjansson
Copy link
Owner Author

As mentioned in the discussion, there's currently no way for the user to get better quality.

Let's use this issue for improvements to the default quantizer and ways to trade off work/quality with the -w option.

@hpjansson hpjansson added this to the 1.16 milestone Nov 24, 2023
@johnd0e
Copy link

johnd0e commented Oct 23, 2024

we're probably allocating a disproportionate amount of palette entries to the most common color ranges (cf. the dark areas), and too few to rarer colors.

Ideally, the palette should not be the same for every image, but rather tailored to each one.

@hpjansson
Copy link
Owner Author

Ideally, the palette should not be the same for every image, but rather tailored to each one.

It does use a dynamic palette, but the palette generator isn't great for quality. I think it's possible to get better results without making performance suffer too much, though.

@jerch
Copy link

jerch commented Nov 10, 2024

Wow that cloud image is an interesting one, it also steps into an edge case in my octree impl cutting off too many of the "second line colors" during my 2nd-pass tree pruning. Thx for that image, a good test case indeed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
quality Output quality
Projects
None yet
Development

No branches or pull requests

3 participants