skip to content
Архитектура в курилке

Красивые GIF-ки из терминала

/ чтиво на 3 минуты

Содержание

TLDR

Terminal window
# Устанавливаем
npm install -g terminalizer
# Сохраняем глобальный конфиг
terminalizer init
# Начинаем запись с названием test
terminalizer record -k test
# Рендерим полученную запись в файл test.gif
terminalizer render test -o test.gif

Зачем оно надо

Это скорее утилита для баловства, ведь всегда можно просто сделать запись области экрана и конвертнуть это дело в GIF, но можно все это делать прямо в терминале.

Помимо прочего, можно загрузить на их сайт запись и переслать кому-лиюо ссылку.

Установка и первый запуск

Для установки потребуется, чтобы на тачке был установлен npm. Устанавливаем для всех пользователей:

Terminal window
npm install -g terminalizer

Для того же Mac brew не поможет, но для Arch-а можно воспользоваться версиями из AUR.

Terminal window
# если Вы используете yay
yay -S nodejs-terminalizer

Все, все готово к работе, можно запускать:

Terminal window
terminalizer record -k test

В текущем окне будет запущена новая сессия, можете в ней потыкать, подключиться по ssh - как пожелаете, в конце просто жмем exit, чтобы прервать текущую запись. По итогу в текущей директории будет сохранен предварительный файл, который можно срендерить в gif-ку (в нашем случае, мы записывали test, значит и появиться файл test.yaml):

Terminal window
terminalizer render test -o test.gif

Вы великолепны! В текущей папке у Вас появился файл test.gif с записью терминала!

Главная проблема в том, что Вы увидите свой старый еще ненастроенный терминал, забудьте о starship.rs, Oh-My-Posh или других украшениях. Если Вы хотите использовать полную мощь terminalizer, то его необходимо настроить.

Настройка

По умолчанию terminalizer берет конфиг из текущей директории, или же, если его нет, то из ~/.config/terminalizer папки.

Сгенерировать дефолтный конфиг можно командой

Terminal window
terminalizer init

В терминале Вы увидите что-то вроде

The global config directory is created at
/Users/bob/.config/terminalizer

В таком случае, каждый запуск terminalizer будет идти с данным конфигом, но при этом каждый раз, когда вы делаете какую-то запись, генерируется YAML файл, в котором содержится как полный конфиг, так и записанные кадры, так что тестируя свои параметры, удобнее править полученный файл, а не менять параметры глобального конфига и каждый раз заново прогонять запись.

command

Первым делом необходимо заменить команду запуска на Вашу оболочку

# Specify a command to be executed
# like `/bin/bash -l`, `ls`, or any other commands
# the default is bash for Linux
# or powershell.exe for Windows
command: zsh

В моем случае, я заменил null на zsh

env

Следующий параметр, на который следует обратить внимание - это env:

# Export additional ENV variables
env:
recording: true

По умолчанию при запуске terminalizer в оболочке выставляется переменная окружения recording=true, это удобно, к примеру, для того, чтобы не запускать определенные команды. Так в каждом моем терминале вызывается утилита pfetch.

Чтобы не засорять вывод, в ~/.zshrc у меня прописана проверка на наличие переменной recording, чтобы не показывать вывод pfetch в terminalizer:

Terminal window
if [ -z "$recording" ]; then
pfetch
fi

В целом, остальные параметры неплохо описаны в документации: будь то добавление вотермарки или же настройка полей. Главное - не забудьте указать шрифты, которые стоят у Вас в терминале.

Проблемы

Так как мы имеем дело с чисто JS-ной утилитой, то при её установке (а иногда и при работе) могут вылезать проблемы.

EACCESS

При установке можем словить нечто подобное:

npm ERR! code EACCES
npm ERR! syscall mkdir
npm ERR! path /usr/local/lib/node_modules
npm ERR! errno -13
npm ERR! Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules'
npm ERR! [Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules'] {
npm ERR! errno: -13,
npm ERR! code: 'EACCES',
npm ERR! syscall: 'mkdir',
npm ERR! path: '/usr/local/lib/node_modules'
npm ERR! }
npm ERR!
npm ERR! The operation was rejected by your operating system.
npm ERR! It is likely you do not have the permissions to access this file as the current user
npm ERR!
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator.
npm ERR! A complete log of this run can be found in:
npm ERR! /home/zhurik/.npm/_logs/2025-03-14T09_48_06_223Z-debug-0.log

Проблема нередкая, и в целом решение лежит в доке.

Но если лень ковырять или переустанавливать node и npm, то можно просто указать npm-у папку, в которую ставить глобальные пакеты:

Terminal window
mkdir -p ~/.npm-global/lib
npm config set prefix '~/.npm-global'
echo 'export PATH=~/.npm-global/bin:$PATH' | tee -a ~/.profile
source .profile

Вуаля, все установится и будет работать