Kitty 图形协议 —— 内联像素图像(ESC _ G … ESC \)
Sixel 的现代替代:通过 Kitty APC 帧把 PNG / RGBA 字节流式发送给终端,配合合理的分块与放置协议。
字节形式
涵盖所有常见的字符串字面量写法,方便正反查找。
\\x1b[
\x1b_Ga=T,f=100,m=1;BASE64_CHUNK\x1b\\\\033[
\033_Ga=...;PAYLOAD\033\\\\e[
\e_G a=...;PAYLOAD \e\\ESC [
ESC _ G key=value,... ; BASE64 ESC \hex
1b 5f 47 ... 1b 5c说明
Kitty 图形协议 —— kitty.sh 设计的 Sixel/iTerm-img 现代替代 —— 使用 APC(Application Program Command)帧:引导符 `\x1b_`(ESC _),字面 `G` 标识图形命令,逗号分隔的 key=value 控制头(`a=T` 传输并显示、`f=100` PNG、`f=24` RGB、`f=32` RGBA、`s` `v` 像素宽高、`m=1` 还有后续分块/`m=0` 最后一块、`i=ID` 图像 ID 便于重新放置),`;`,然后每块最多 4096 字节的 base64 载荷,以 ST(`\x1b\\`)结尾。kitty + ghostty + wezterm 原生支持;konsole 部分支持。iTerm2 自家 `\x1b]1337;File=...` 协议是另一选项;两者正逐步向 Kitty 的设计靠拢。Sixel(DCS `Pq`)是两者均不支持时的传统回退。
规范出处: Kitty Graphics Protocol (sw.kovidgoyal.net/kitty/graphics-protocol/)
示例
# Display a PNG file inline (one-shot, no chunking):\nb64=$(base64 -w0 cat.png)\nprintf '\033_Ga=T,f=100;%s\033\\' "$b64"import base64, sys\npng = open('cat.png','rb').read()\nsys.stdout.write('\x1b_Ga=T,f=100;' + base64.b64encode(png).decode() + '\x1b\\')data, _ := os.ReadFile("cat.png")\nfmt.Printf("\x1b_Ga=T,f=100;%s\x1b\\\\", base64.StdEncoding.EncodeToString(data))import fs from 'node:fs';\nconst b64 = fs.readFileSync('cat.png').toString('base64');\nprocess.stdout.write('\x1b_Ga=T,f=100;' + b64 + '\x1b\\')/* read PNG into buf, base64-encode, then: */\nprintf("\x1b_Ga=T,f=100;%s\x1b\\\\", b64);终端支持
- xterm
- 不支持
- Linux console (fbcon)
- 不支持
- macOS Terminal.app
- 不支持
- iTerm2
- 部分
- Windows Terminal
- 不支持
- cmd.exe / ConPTY
- 不支持
- kitty
- 支持
- alacritty
- 不支持
- WezTerm
- 支持
- Ghostty
- 支持
- GNOME Terminal
- 不支持
- Konsole
- 部分
- tmux
- 不支持
- GNU screen
- 不支持
| xterm | Linux console (fbcon) | macOS Terminal.app | iTerm2 | Windows Terminal | cmd.exe / ConPTY | kitty | alacritty | WezTerm | Ghostty | GNOME Terminal | Konsole | tmux | GNU screen |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 不支持 | 不支持 | 不支持 | 部分 | 不支持 | 不支持 | 支持 | 不支持 | 支持 | 支持 | 不支持 | 部分 | 不支持 | 不支持 |