Terminal Graphics Protocol
9 hours ago
- #terminal-graphics
- #protocol-specification
- #image-rendering
- The specification outlines a protocol for rendering pixel graphics in terminal emulators without requiring them to understand image formats.
- Key design goals include pixel-level positioning, integration with text (including alpha blending and scrolling with text), and optimizations for local client-terminal setups.
- Demonstrates the protocol with a command example: `kitten icat path/to/some/image.png`.
- Lists applications utilizing the kitty graphics protocol, such as `awrit`, `blackcat`, `broot`, and libraries like `notcurses` and `rasterm`.
- Explains how to get window size in pixels and cells using `TIOCGWINSZ` ioctl across different programming languages.
- Details the graphics escape code format (`<ESC>_G<control data>;<payload><ESC>\`) and its components.
- Describes transferring pixel data in formats like 24-bit RGB, 32-bit RGBA, and PNG, including compression options.
- Covers transmission mediums (direct, file, shared memory) and considerations for local vs. remote clients.
- Explains querying terminal support for the graphics protocol and available transmission mediums.
- Details displaying images on screen, controlling layout, and using Unicode placeholders for flexible image integration.
- Introduces relative placements for positioning images relative to others, enhancing flexibility with Unicode placeholders.
- Describes methods for deleting images, including specific placements or all visible images.
- Covers animation support, including frame data transfer, controlling animations, and composing frames.
- Discusses image persistence, storage quotas to prevent denial-of-service, and interaction with terminal actions like resetting or scrolling.