С помощью Python можно выводить изображения прямо в терминал! Проект wookayin/python-imgcat делает это легко и красиво, особенно если ты пользуешься iTerm2, WezTerm или tmux.
Этот инструмент может быть полезен при визуализации изображений, графиков, результатов ML, генерации QR-кодов — прямо из CLI, без GUI!
🚀 Установка
pip install imgcat
После установки будет доступнаутилита imgcat в терминале, а также одноимённый Python-модуль.
🖥 Использование из командной строки (CLI)
Для вывода изображения просто укажи файл:
imgcat local_image.png
Можно указать сразу несколько файлов:
imgcat img1.png img2.jpg img3.gif
Или передать изображение через stdin:
cat my_qr_code.png | imgcat
Можно ограничить высоту изображения (в строках терминала):
imgcat logo.png --height 10
📌 Поддерживается iTerm2, WezTerm и терминалы с поддержкой iTerm2 inline image protocol.
🐍 Использование в Python
from imgcat import imgcat
# Обычное изображение
imgcat(open("image.png", "rb"))
# NumPy-массив
from skimage import data
img = data.chelsea() # RGB-массив
imgcat(img, height=7)
# Изображение из PIL
from PIL import Image
imgcat(Image.fromarray(img))
🧪 Поддержка Matplotlib
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([1, 2, 3, 5, 8])
imgcat(fig)
📊 Matplotlib напрямую в терминал
Можно установить бэкенд для matplotlib, чтобы fig.show() показывал изображение прямо в терминале:
MPLBACKEND="module://imgcat" python draw_graph.py
Или внутри Python:
import matplotlib
matplotlib.use("module://imgcat")
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.text(0.5, 0.5, "Hello from Terminal!", ha="center")
fig.show()
👀 Весь график появится прямо в терминале, без GUI!
📘 Использование в IPython и Jupyter
Магия IPython — %imgcat:
%load_ext imgcat
%imgcat skimage.data.chelsea()
Работает как в обычной оболочке, так и в Jupyter Notebook.
⚙️ Поддержка tmux
По умолчанию tmux 2.5+ может не отображать изображения, особенно большие. Решения:
- Использовать tmux <= 2.4
- Или в tmux 3.3a+ включить пропуск команд в конфиге:
# ~/.tmux.conf
set-option -g allow-passthrough on
📈 Пример: визуализация графика прямо в терминале
import matplotlib
matplotlib.use("module://imgcat")
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([0, 1, 2, 3], [0, 1, 4, 9])
ax.set_title("y = x^2")
fig.show()
💡 Это отличный способ быстро просматривать графики или изображения на сервере без GUI!
🔮 Будущее и TODO проекта
Автор планирует добавить поддержку других терминальных протоколов (например, Sixel), что расширит совместимость за пределы iTerm2 и WezTerm.
✅ Заключение
imgcat — мощный и лёгкий инструмент для разработчиков, дата-сайентистов и админов, которым нужно быстро визуализировать данные без GUI.
- 💡 Удобен в SSH-сессиях
- 📦 Поддерживает Python API и CLI
- 🎨 Работает с matplotlib, PIL, NumPy и stdin
Попробуй прямо сейчас — установи imgcat и выведи свою первую картинку в терминал!
🔗 GitHub проекта | PyPI