📺🗿 Terminal graphics for the 21st century.
This is a feature release focused on compatibility, presentation and ergonomics.
New option: --animate <bool>
. On by default. Can be turned off to replace animations with a still frame. Suggested by @ploum in #79.
New option: --center <bool>
or -C <bool>
. Off by default. Can be turned on to center images. Suggested by @ploum in #83.
New options: --margin-bottom <n>
and --margin-right <n>
. These permit using all available space (with --margin-bottom 0
) or some smaller amount. Suggested by @crmabs in #61.
New option: --polite <bool>
. On by default. Can be turned off to correct issues caused by previous terminal state (e.g. no sixel scrolling) and improve presentation (e.g. by temporarily hiding the cursor). This can leave the terminal in an altered state, which is somewhat rude.
New option: --threads <n>
. Allows manually specifying the number of threads to use. Defaults to one per detected logical CPU core.
When invoked with redirected input and no arguments, act like a filter as if invoked with -
. Here's an example that downloads an image, converts it to Unicode text and mails it to [email protected]
:
$ curl https://hpjansson.org/chafa/img/lc.jpg \
| chafa -f symbols -c none -s 77 --invert --dither bayer \
| mailx [email protected]
If input or output is being redirected, default to playing animations only once instead of looping forever. This can be overridden with -d inf
.
Replaced obsolete Autoconf macros (@mikelolasagasti).
Improved image loaders:
convert
.Improved terminal support:
Bug fixes:
This is a major feature release.
Added basic support for the Kitty and iTerm2 graphics protocols. These are enabled automatically when corresponding terminal support is detected, or manually with -f kitty
or -f iterm
.
Implemented an 8-color mode, selectable with -c 8
(@hodefoting).
Implemented a foreground-only switch, --fg-only
. This produces character art using foreground colors only, and will avoid modifying or resetting the background color. Looks best with non-contiguous symbols (e.g. ascii
).
Added builtins for Japanese kana fullwidth symbols. These can now be used without loading any external fonts (try -c none --symbols wide
).
Added builtins for legacy computer symbols (mainly wedges and sextant blocks). These were widely used in PETSCII and Teletext, and can be enabled using --symbols
or --fill
with their respective tags: legacy
, wedge
and sextant
(@hodefoting).
Since there is a growing number of builtin symbols that may not be available everywhere, the default selection has been restricted to the widely supported block and border sets.
If possible, we now select a visually blank character from the specified symbol/fill sets instead of hardcoding ASCII space for featureless cells. One practical upshot of this is that the constant-width braille range can be used to produce consistent images even in contexts with variable-width fonts. U+2800 (BRAILLE PATTERN BLANK) will then be used in blank cells.
Improved terminal size detection when used with pipelines and redirection. This should now produce an image properly sized for your terminal: curl https://i.imgur.com/WFDEFVg.jpeg | chafa - | tee out
ChafaCanvas gained API functions for programmatically getting and setting character cell contents. These are used in a new example in tests/ncurses.c demonstrating ncurses integration.
Made --disable-rpath
the default in order to simplify packaging.
Added a HACKING file featuring a much needed release checklist.
Improved terminal support:
Bug fixes:
This is a bugfix release.
Add NOCONFIGURE variable to autogen.sh to skip configure (Biswapriyo Nath).
Bug fixes:
This release adds major features and important fixes to both libchafa and the chafa
command-line tool.
Added support for fullwidth symbols that take up two character cells. These are common in East Asian scripts. Single-cell and double-cell symbols can be mixed, and -f symbols
mode will use both if possible.
New symbol tags: alpha
, digit
, alnum
, narrow
, wide
, ambiguous
, ugly
, bad
. "Ambiguous" symbols have uncertain widths and may render poorly in some terminals. "Ugly" denotes symbols that are unsuitable for Chafa's cell-based graphics (multicolor emoji, ideographic descriptors, etc). "Bad" is a superset of these two categories. Bad symbols are always excluded unless explicitly enabled with e.g. CHAFA_SYMBOL_TAG_BAD
(--symbols +bad
in the frontend).
The font loader (--glyph-file
option) now does a better job with proportional fonts.
Added options for controlling lossless optimization of output. Currently, attribute reuse and character repetition (REP sequence) are implemented.
Added -O
option to the frontend. This controls the optimization level.
Added a simple abstraction layer for terminal control sequences (ChafaTermInfo
and ChafaTermDb
). This allows for improved terminal support.
FbTerm is now supported with TERM=fbterm
in the environment.
Bug fixes:
This is a bugfix release.
Added configure option --disable-rpath. This allows packagers to prevent the hard-coded library search path from being embedded in the chafa command-line tool (Mo Zhou, #39).
Added defaults for the yaft terminal.
Bug fixes: #40 - Fails to build on hurd-i386 + other i386 (reported by Mo Zhou). [unfiled] - Rare failed assert with mostly transparent sixel image (reported by Reddit user spryfigure). [unfiled] - Minor typo in function docstring.
This release adds major features to both libchafa and the chafa command-line tool.
Added sixel graphics support. Chafa will automatically produce sixels
if the connected terminal supports it. It can also be forced using the
new -f
or --format
flag. This is a new implementation written from the
ground up to maximize throughput.
Added the --glyph-file
option, which loads glyph-symbol mappings from
any file format supported by FreeType (TTF, PCF, etc). This allows for
custom font support and improved symbol selection.
Added the --speed
option specifying animation speed. It accepts a
unitless multiplier, a specific number of frames per second, or max
for maximum throughput.
There are now two ways to assign colors to symbol cells. Formerly,
this was done based on the average color of the covered area. The new
default is to use the median color, which produces sharper edges,
but is slightly more prone to high-frequency noise. The new option
--color-extractor
selects the method to employ.
When displaying multiple files, the default delay between files has
been changed from three seconds to zero. Animations will still play
through once. This can be overridden on the chafa command line with -d
or --duration
.
Minor tweaks to built-in symbols.
Performance improvements:
-ffast-math
, yielding a big speedup for DIN99d.This minor release fixes a bug causing builds linking with libchafa to fail.
This minor release fixes a few bugs and improves terminal detection.
Detect kitty and mlterm virtual terminals and apply optimal defaults accordingly.
Make Automake build more strict and fix a few compatibility nits.
Bug fixes: #30 - Failed to build on hurd-i386 (found by @cdluminate). [unfiled] - Crash on certain broken GIFs.
This is a feature and performance release.
Added --dither, --dither-grain and --dither-intensity options. These allow for sub-cell dithering in quantized modes (none, 2, 16, 240 and 256). Especially beneficial when used with -p off.
Added API for ordered and diffusion-based dithering in quantization.
Added API support for multiple 8bpc pixel modes: RGB, BGR, RGBA, BGRA, ARGB, ABGR with either premultiplied or unassociated alpha channels.
Smooth scaling is now done internally, meaning libchafa consumers no longer need to prescale images.
Implemented a machine learning tool that can generate custom fonts for efficient image reproduction from a provided dataset. This is left uninstalled since it's still experimental (@cdluminate).
Throughput improvements:
Installation instructions:
Bug fixes: