🖼 Вывод изображений в терминале с помощью imgcat на Python

С помощью 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