IPython magic command for displaying images in kitty terminal
Project description
ipython-icat
Installation
You can install ipython-icat using pip:
pip install ipython-icat
Requirements
- Python 3.9+
- IPython
- matplotlib
- Pillow (PIL)
- terminal emulator with support for kitty graphics protocol (KGP) e.g., kitty, ghostty
Usage
Loading the Extension
In your IPython session, load the extension:
%load_ext icat
For startup files, Neovim terminals, or other launchers that should enable the backend immediately after loading the extension, set:
IPYTHON_ICAT_AUTO=1
Displaying Matplotlib Plots
To enable icat integration for both matplotlib plots and automatic PIL image rendering:
%icat
After running this command:
- Matplotlib plots will be displayed directly in your kitty-compatible terminal.
- Evaluating a
PIL.Image.Imagevalue (e.g. typingimgat the prompt) will automatically render it.
You can also run:
%icat statusto see whether integration is enabled%icat offto disable auto-rendering and restore the previous matplotlib backend (best-effort)
Use as a Default Backend
To set the kitty backend for matplotlib as the default, add the following lines to your IPython configuration file:
c.InteractiveShellApp.extensions = ['icat']c.InteractiveShellApp.exec_lines = ['%icat on']
Automatic Setup
You can quickly set up IPython to use the icat extension using the setup command:
python -m icat setup
This command will:
- Create an IPython profile if it doesn't exist (or use an existing one)
- Configure the profile to load the icat extension automatically
- Set matplotlib to use the icat backend by default
Additional options:
--profile NAME- Use a specific profile instead of the default--ipython-path PATH- Specify a custom path to the .ipython directory
Example with custom profile:
python -m icat setup --profile myprofile
Displaying Images
To display an image file, a PIL Image object, or a Python expression that evaluates to a PIL Image:
%icat path/to/your/image.jpg
or
from PIL import Image
img = Image.open('path/to/your/image.jpg')
%icat img
Expressions work too:
%icat ds[0].image
You can also resize the image when displaying:
%icat path/to/your/image.jpg -W 300 -H 200
Using Ghostty
If you'd like to use this plugin with Ghostty, make sure to install the static kitten binary which will allow you to run kitten icat.
Using Full-Screen Terminal Apps
ipython-icat can render through full-screen terminal programs, such as Neovim
terminal buffers, by asking kitten icat to emit Kitty unicode placeholders.
Enable that mode with:
IPYTHON_ICAT_PLACEHOLDER=1
The placeholder path is configured with environment variables:
IPYTHON_ICAT_CELL_PIXELS=WIDTHxHEIGHTsupplies the terminal cell size in pixels. This letskitten icatcompute the window size when IPython is running inside an embedded terminal.IPYTHON_ICAT_WINDOW_SIZE=COLS,ROWS,WIDTH_PX,HEIGHT_PXoverrides the computed window size completely.IPYTHON_ICAT_TRANSFER_MODE=stream|file|memory|detectselects the Kitty graphics transfer mode. The default isstream, which works reliably through Neovim and Ghostty.IPYTHON_ICAT_PASSTHROUGH=none|tmux|detectcontrols whetherkitten icatwraps graphics commands for tmux. The default isnone; use this when a host program relays the graphics request itself.
pyrepl.nvim sets these variables
automatically when starting IPython and relays Kitty graphics requests from the
embedded terminal to the host terminal.
Features
- Display matplotlib plots directly in kitty terminal
- Show PIL Image objects or image files
- Resize images on display
- Seamless integration with IPython workflow
- Kitty unicode-placeholder support for embedded terminal workflows
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Acknowledgments
- matplotlib-backend-kitty for the original implementation
- matplotlib and Pillow for their excellent libraries
- kitty terminal for developing the graphics protocol
License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ipython_icat-0.4.2.tar.gz.
File metadata
- Download URL: ipython_icat-0.4.2.tar.gz
- Upload date:
- Size: 8.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
33a72c9e70e2beed6770fa95383a35b8e361ce0471170e8733e3299c222642c5
|
|
| MD5 |
37156dd41eeb921b029d1f8b74e394da
|
|
| BLAKE2b-256 |
86d6aade72add73e83dd65f2d8e04ab19cd12d57661f1529172ba5de5aea17cd
|
File details
Details for the file ipython_icat-0.4.2-py3-none-any.whl.
File metadata
- Download URL: ipython_icat-0.4.2-py3-none-any.whl
- Upload date:
- Size: 8.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b80beec6a604996199bdd0288682fdbd89c50a24b033fdbe31575a3300e74c45
|
|
| MD5 |
4a393c5cfe5118fd95f0a99b32d50db2
|
|
| BLAKE2b-256 |
7086d84af32fa53a389a2762ea5e03e5ebe69ab0270e76732824f7d3ae6e35f8
|