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.
Why a terminal needs this
Section titled “Why a terminal needs this”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.
Sizing
Section titled “Sizing”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) andwidth=autoare all understood, as is thepreserveAspectRatioflag, 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.
Limits
Section titled “Limits”| 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. |
Trying it
Section titled “Trying it”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:
chafa --format=sixel .\Content\Textures\T_Poster.pngIf 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.
