跳到主要内容
ansicode

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 \
hex1b 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/)

示例

bash
# Display a PNG file inline (one-shot, no chunking):\nb64=$(base64 -w0 cat.png)\nprintf '\033_Ga=T,f=100;%s\033\\' "$b64"
python
import base64, sys\npng = open('cat.png','rb').read()\nsys.stdout.write('\x1b_Ga=T,f=100;' + base64.b64encode(png).decode() + '\x1b\\')
go
data, _ := os.ReadFile("cat.png")\nfmt.Printf("\x1b_Ga=T,f=100;%s\x1b\\\\", base64.StdEncoding.EncodeToString(data))
javascript
import fs from 'node:fs';\nconst b64 = fs.readFileSync('cat.png').toString('base64');\nprocess.stdout.write('\x1b_Ga=T,f=100;' + b64 + '\x1b\\')
c
/* 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
不支持

相关序列

在家族食谱中

DCS 食谱 · 2. 流内画图 —— Sixel 与 Kitty 图形