Skip to content

Inline Graphics

The terminal renders images inline, in two protocols:

Protocol Sequence Notes
iTerm2 OSC 1337 ; File=inline=1;... : <base64> ST The most widely supported by CLI tooling. PNG, JPEG, GIF, WebP, BMP and anything else the engine’s image wrapper reads; animations show their first frame.
Sixel DCS q ... ST The classic DEC protocol; wide support in image tools. The terminal advertises Sixel in its device-attributes reply so tools can detect it.

The Kitty graphics protocol (APC _G) is not implemented; those sequences are discarded silently. Images are always drawn beneath the text layer.

Because the agent needs a way to show you something. A render, a graph, a diff of two screenshots, a texture it just generated — describing those in prose wastes both your time. An image in the shared surface is the shortest path from “the agent knows” to “you know.”

It is also why the graphics stack is in a product that frames itself as a chat surface: this is the agent presenting itself to the human, which is exactly what the terminal is for.

Images can carry explicit dimensions or be left to their intrinsic size.

  • Unsized images (Sixel, and iTerm by default) are drawn at their true pixel resolution rather than stretched onto the cell grid, so a 64×64 icon looks like a 64×64 icon.
  • Explicitly sized images honour what the protocol asked for. iTerm’s width=20 (cells), width=200px, width=50% (of the viewport) and width=auto are all understood, as is the preserveAspectRatio flag, which defaults to on.
  • The cursor advances past the image’s height and the screen scrolls as needed, so an image behaves like a tall block of output.
Decoded size 16 megapixels per image; the terminal advertises 4096×4096 to tools that ask.
Payload About 9 MB of image data per sequence (12 million base64 characters). Anything larger prints an [image too large] placeholder and the stream resyncs.
Memory 256 MB of decoded images per session, least-recently-used eviction. Adjustable with the console variable ConductorTerminal.Graphics.MaxImageMemoryMB. Identical images are stored once.
Lifetime An image is dropped when the scrollback row it is anchored to is evicted.

Any tool that already emits one of these protocols works. For a quick check, chafa with Sixel output, or an iTerm-protocol image printer such as imgcat:

Terminal window
chafa --format=sixel .\Content\Textures\T_Poster.png

If you get a block of garbled escape characters instead of a picture, the tool is emitting a protocol variant the decoder did not recognise — that is worth reporting, with the tool and command line. If you get nothing at all, the tool is probably emitting Kitty graphics; switch it to Sixel or iTerm2 output.