PySixel icon indicating copy to clipboard operation
PySixel copied to clipboard

View full-pixel color graphics on SIXEL-supported terminals(xterm/mlterm/DECterm/Reflection/kermit/RLogin/tanasinn/yaft)

pysixel

What is SIXEL?

.. image:: https://raw.githubusercontent.com/saitoha/PySIXEL/data/data/sixel_gnuplot.png :width: 640

SIXEL is one of image formats for terminal imaging introduced by DEC VT series. SIXEL image data scheme is represented as a terminal-friendly escape sequence. So if you want to show a SIXEL image file, all you have to do is "cat" it to your terminal.

See also more faster high quality C implementation libsixel: https://github.com/saitoha/libsixel

.. image:: https://raw.githubusercontent.com/saitoha/PySIXEL/data/data/sixel_hikari.png :width: 640

I heard SIXEL was supported by some old terminal applications, such as SAS, WordPerfect.

Nowadays netpbm and Gnuplot support this.

.. image:: https://raw.githubusercontent.com/saitoha/PySIXEL/data/data/sixel_ls.png :width: 640

Requirements

If you want to view a SIXEL image, you have to get a terminal which support sixel graphics.

Now SIXEL feature is supported by the following terminals.

  • RLogin (Japanese terminal emulator)

    http://nanno.dip.jp/softlib/man/rlogin/

  • tanasinn (Works with firefox)

    http://github.com/saitoha/tanasinn/

  • mlterm

    Works on each of X, win32/cygwin, framebuffer version. http://mlterm.sourceforge.net/

  • XTerm (compiled with --enable-sixel option) You should launch xterm with "-ti 340" option. the SIXEL palette is limited to a maximum of 16 colors. http://invisible-island.net/xterm/

  • DECterm

  • Kermit

  • WRQ Reflection

  • ZSTEM

Install

via github ::

$ git clone https://github.com/saitoha/PySixel.git
$ cd pysixel 
$ python setup.py install

or via pip ::

$ pip install PySixel 

Usage

PySixel provides a Command line tool::

$ sixelconv [options] filename

or ::

$ cat filename | sixelconv [options]
  • Options::

    -h, --help show this help message and exit -8, --8bit-mode Generate a sixel image for 8bit terminal or printer -7, --7bit-mode Generate a sixel image for 7bit terminal or printer -r, --relative-position Treat specified position as relative one -a, --absolute-position Treat specified position as absolute one -x LEFT, --left=LEFT Left position in cell size, or pixel size with unit 'px' -y TOP, --top=TOP Top position in cell size, or pixel size with unit 'px' -w WIDTH, --width=WIDTH Width in cell size, or pixel size with unit 'px' -e HEIGHT, --height=HEIGHT Height in cell size, or pixel size with unit 'px' -t ALPHATHRESHOLD, --alpha-threshold=ALPHATHRESHOLD Alpha threshold for PNG-to-SIXEL image conversion -c, --chromakey Enable auto chroma key processing -n NCOLOR, --ncolor=NCOLOR Specify number of colors -b, --body-only Output sixel without header and DCS envelope -f, --fast The speed priority mode (default) -s, --size The size priority mode

Example

View an image file::

$ sixelconv test.png

Generate sixel file from an image file::

$ sixelconv < test.png > test.six

View generated sixel file::

$ cat test.six

Show sixel in xterm ::

$ curl ftp://invisible-island.net/xterm/xterm-301.tgz | tar xz
$ cd xterm-301
$ ./configure --enable-wide-chars --enable-sixel-graphics --enable-256-color
$ make
# make install
$ xterm -ti vt340 -e 'sixelconv -n16 ~/testdir/test.jpg'

Code Example

::

import sixel
writer = sixel.SixelWriter()
writer.draw('test.png') 

Dependency

  • Pillow https://github.com/python-imaging/Pillow

  • Python imageloader module https://pypi.python.org/pypi/imageloader

Contributors

  • @cocuh (Python3 support)

Reference

  • Chris_F_Chiesa, 1990 : All About SIXELs ftp://ftp.cs.utk.edu/pub/shuford/terminal/all_about_sixels.txt

  • Netpbm http://netpbm.sourceforge.net/

    It includes ppmtosixel command http://netpbm.sourceforge.net/doc/ppmtosixel.html

  • vt100.net http://vt100.net/