rasterm

January 6, 2025 ยท View on GitHub

Encodes images to iTerm / Kitty / SIXEL (terminal) inline graphics protocols.

GoDoc

rasterm sample output

Supported Image Encodings

  • Kitty
  • iTerm2 / WezTerm
  • Sixel

TODO

TESTING

Notes

terminal features matrix

terminalsixeliTerm2 formatkitty format
ghosttyY
iterm2YY
kittyY
rioYY
minttyYY
mltermYY
putty
rloginYY
weztermYY
xtermY

known responses

CSI 0 c

terminalresponse
apple terminal\x1b[?1;2c
ghostty\x1b[?62;22c
guake\x1b[?65;1;9c
iterm2\x1b[?62;4c
kitty\x1b[?62;c
rio\x1b[?62;4;6;22c
mintty\x1b[?64;1;2;4;6;9;15;21;22;28;29c
mlterm\x1b[?63;1;2;3;4;7;29c
putty\x1b[?6c
rlogin\x1b[?65;1;2;3;4;6;7;8;9;15;18;21;22;29;39;42;44c
st\x1b[?6c
terminology\x1b[?64;1;9;15;18;21;22c
vimterm\x1b[?1;2c
wez\x1b[?65;4;6;18;22c
xfce\x1b[?65;1;9c
xterm\x1b[?63;1;2;4;6;9;15;22c

CSI > 0 c

terminalresponse
apple terminal\x1b[>1;95;0c
ghostty\x1b[>1;10;0c
guake\x1b[>65;5402;1c
iterm2\x1b[>0;95;0c
rio\x1b[>0;95;0c
kitty\x1b[>1;4000;19c
mintty\x1b[>77;30104;0c
mlterm\x1b[>24;279;0c
putty\x1b[>0;136;0c
rlogin\x1b[>65;331;0c
stNO RESPONSE
vimterm\x1b[>0;100;0c
wez\x1b[>0;0;0c
xfce\x1b[>65;5402;1c
xterm\x1b[>19;344;0c

identifications

terminalvalues
apple terminalTERM_PROGRAM="Apple_Terminal"
apple terminal__CFBundleIdentifier="com.apple.Terminal"
ghosttyTERM="xterm-ghostty"
rioTERM="rio"
guake
iterm2LC_TERMINAL="iTerm2"
kittyTERM="xterm-kitty"
minttyTERM="mintty"
mlterm
putty
rlogin
st
terminologyTERM_PROGRAM=terminology
vimtermVIM_TERMINAL is set
wezTERM_PROGRAM="wezterm"
xfce
xterm

opinions

  • Sixel is a primitive and wasteful format. Most sixel terminals also support the iTerm2 format--fewer bytes, full color instead of paletted, and no pixel re-processing required. Much better!

go stuff

go tool pprof -http=:8080 ./name.prof
godoc -http=:8099 -goroot="$HOME/go"
go test -v
go mod tidy
https://blog.golang.org/pprof

more reading