VHS: Делаем красивые GIF анимации выполнения команд консоли

20.01.25

Разработка - Работа с интерфейсом

Рассмотрим простой и быстрый способ создания гифок работы в командной строке для оформления документации, инструкций и статей.

Работа программиста часто связана с использованием консоли (терминала, командной строки). И если сам 1С, в целом, не заставляет нас использовать команды для запуска кода на выполнение или сборки проекта, то DevOps и админ-сегменты полны ими чуть менее чем полностью - и по ним создается целая куча инструкций, статей, документации
 

Но как наглядно показать пользователю работу, ввод и вывод консоли, не прибегая к миллионам скриншотов? Тут нам поможет VHS - утилита для создания анимаций выполнения команд консоли

 


 

Что такое VHS?

charmbracelet/vhs - это консольная утилита, которая позволяет превращать текстовые описания выполняемых команд в красивые GIF, WebM и MP4 анимации с эффектом набора текста, разными цветовыми схемами и прочими возможностями для кастомизации. Если вы когда-нибудь пользовались Открытым пакетом интеграций, то могли видеть подобные записи в его документации, на странице описания CLI версии

 

 

Обилие цветовых схем (в том числе и возможность создавать свои), разнообразные настройки и способность влиять на результат манипуляциями с описанием, которое хранится в обычном текстовом файле, делают VHS очень гибким и, при этом, хорошо автоматизируемым инструментом


 

Установка

VHS - это open-source проект. Получить его можно из релизов charmbracelet/vhs на Github. Есть версии под разные системы, в том числе и для Windows

 


Однако просто так сразу VHS не заработает - open-source же. Нужно установить еще 2 утилиты, которые ему необходимы для работы: ttyd и ffmpeg
 

 
 ttyd
 
 ffmpeg

 

В итоге, когда у нас на руках есть все три элемента, остается лишь куда-то их поместить и добавить в PATH. Вы можете сделать как отдельные папки для каждой утилиты (VHS и ffmpeg - это архивы, а ttyd - просто один файл) или же сгрузить все в одну, но только так, чтобы исполняемые (exe) файлы находились в одном каталоге

 

 

При таком варианте, в PATH будет достаточно прописать только одно расположение. После этого VHS должен стать доступен из любого места, если просто написать в vhs в командной строке

 

 
 Способ установки через пакетные менеджеры

 

Работа с утилитой

После установки нам необходимо создать файл, в который мы запишем текстовое описание нашей будущей гифки. Проще всего это сделать создав файл заготовку при помощи команды
 

vhs new <путь к файлу>

 

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

 

# VHS documentation
#
# Output:
#   Output <path>.gif               Create a GIF output at the given <path>
#   Output <path>.mp4               Create an MP4 output at the given <path>
#   Output <path>.webm              Create a WebM output at the given <path>
#
# Require:
#   Require <string>                Ensure a program is on the $PATH to proceed
#
# Settings:
#   Set FontSize <number>           Set the font size of the terminal
#   Set FontFamily <string>         Set the font family of the terminal
#   Set Height <number>             Set the height of the terminal
#   Set Width <number>              Set the width of the terminal
#   Set LetterSpacing <float>       Set the font letter spacing (tracking)
#   Set LineHeight <float>          Set the font line height
#   Set LoopOffset <float>%         Set the starting frame offset for the GIF loop
#   Set Theme <json|string>         Set the theme of the terminal
#   Set Padding <number>            Set the padding of the terminal
#   Set Framerate <number>          Set the framerate of the recording
#   Set PlaybackSpeed <float>       Set the playback speed of the recording
#   Set MarginFill <file|#000000>   Set the file or color the margin will be filled with.
#   Set Margin <number>             Set the size of the margin. Has no effect if MarginFill isn't set.
#   Set BorderRadius <number>       Set terminal border radius, in pixels.
#   Set WindowBar <string>          Set window bar type. (one of: Rings, RingsRight, Colorful, ColorfulRight)
#   Set WindowBarSize <number>      Set window bar size, in pixels. Default is 40.
#   Set TypingSpeed <time>          Set the typing speed of the terminal. Default is 50ms.
#
# Sleep:
#   Sleep <time>                    Sleep for a set amount of <time> in seconds
#
# Type:
#   Type[@<time>] "<characters>"    Type <characters> into the terminal with a
#                                   <time> delay between each character
#
# Keys:
#   Escape[@<time>] [number]        Press the Escape key
#   Backspace[@<time>] [number]     Press the Backspace key
#   Delete[@<time>] [number]        Press the Delete key
#   Insert[@<time>] [number]        Press the Insert key
#   Down[@<time>] [number]          Press the Down key
#   Enter[@<time>] [number]         Press the Enter key
#   Space[@<time>] [number]         Press the Space key
#   Tab[@<time>] [number]           Press the Tab key
#   Left[@<time>] [number]          Press the Left Arrow key
#   Right[@<time>] [number]         Press the Right Arrow key
#   Up[@<time>] [number]            Press the Up Arrow key
#   Down[@<time>] [number]          Press the Down Arrow key
#   PageUp[@<time>] [number]        Press the Page Up key
#   PageDown[@<time>] [number]      Press the Page Down key
#   Ctrl+<key>                      Press the Control key + <key> (e.g. Ctrl+C)
#
# Display:
#   Hide                            Hide the subsequent commands from the output
#   Show                            Show the subsequent commands in the output

Output ./demo.gif

Require echo

Set Shell "bash"
Set FontSize 32
Set Width 1200
Set Height 600

Type "echo 'Welcome to VHS!'" Sleep 500ms  Enter

Sleep 5s

 

Рассмотрим весь этот файл по блокам:

 
 Output
 
 Require
 
 Settings
 
 Sleep
 
 Type
 
 Keys
 
 Display

 

Цветовые схемы

Отдельно стоит затронуть цветовое оформление терминала для будущих записей. Оно определяется командой вида
 

Set Theme <json|string>

 

и может принимать как имя темы, так и json с собственным определением значений для всех необходимых цветов, вроде цвета текста, фона и пр.

 

Если вам не нужен какой-то определенный тонкий цветовой набор, то можно выбрать из готовых вариантов, коих существует огромная масса. Посмотреть их и узнать названия можно в хорошем репозитории flemay/vhs-themes. Если нашли подходящую, то достаточно просто написать Set Theme и ее имя

 

 

В случае необходимости получения конкретных цветов, можно сформировать собственную схему самостоятельно. Выглядит это следующим образом:

Set Theme { "name": "Whimsy", "black": "#535178", "red": "#ef6487", "green": "#5eca89", "yellow": "#fdd877", "blue": "#65aef7", "magenta": "#aa7ff0", "cyan": "#43c1be", "white": "#ffffff", "brightBlack": "#535178", "brightRed": "#ef6487", "brightGreen": "#5eca89", "brightYellow": "#fdd877", "brightBlue": "#65aef7", "brightMagenta": "#aa7ff0", "brightCyan": "#43c1be", "brightWhite": "#ffffff", "background": "#29283b", "foreground": "#b3b0d6", "selection": "#3d3c58", "cursor": "#b3b0d6" }

Единственный нюанс: цвета в сформированной анимации могут несколько отличаться от конкретных HEX значений. Вы можете заметить это, например, на примере GIF из документации ОПИ в начале статьи: несмотря на то, что цвет фона там был установлен как белый, явно видно разницу между действительно белым фоном страницы статьи и чуть сероватым фоном GIF

Это какой-то дефект анимации, который встречается во многих программах для создания GIF. Так что, если вам нужны вот прямо точные цвета, будьте готовы к долгому и утомительному процессу перебора оттенков


 

Небольшой пример

И еще небольшой пример описания и полученного результата напоследок

 

 
Текст Tape-а

 

Спасибо за внимание!


Связанные статьи:

OInt CLI - приложение Открытого пакета интеграций для командной строки

Все методы интеграции ОПИ теперь в формате приложения для CMD/Shell! Простой и компактный исполняемый файл со встроенной справкой - удобный инструмент для тестирования и работы с вашими любимыми сервисами. Пока в раннем доступе

 

 

Интерактивные TUI элементы в OneScript

Поговорим про меню, спиннеры, прогресс-бары и прочие свистелки для CLI приложений на OneScript

 

 

 

 Мой GitHub:    https://gitub.com/Bayselonarrend 
 OpenYellow:    https://openyellow.org
 Лицензия MIT:  https://mit-license.org

vhs консоль терминал cli инструменты

См. также

Работа с интерфейсом Системный администратор Программист Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Платные (руб)

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    55424    17    23    

43

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Платные (руб)

Богатый редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    63819    44    59    

82

Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    19697    27    6    

43

Работа с интерфейсом Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    21730    mrXoxot    44    

128

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    10879    smielka    37    

105

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    17938    1225    elcoan    53    

125

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия Абонемент ($m)

Подходит для создания web-страниц для замены управляемых форм 1С, красивых отчетов, интерфейса мобильного приложения на платформе 1С и для простых страниц веб-сайтов.

3 стартмани

10.04.2023    12633    167    acces969    31    

126
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. BackinSoda 20.01.25 12:40 Сейчас в теме
VHS - это старые фильмы с заложенным носом, а не вот это вот всё)
user673778_karavaykov; pavlov_dv; sys1c; Sashares; gucci76; Йожкин Кот; bayselonarrend; +7 Ответить
7. user673778_karavaykov 1 23.01.25 10:27 Сейчас в теме
(1) "И восстали машины из пепла ядерного огня"
2. SlavaKron 20.01.25 13:00 Сейчас в теме
140Mb
Почему утилита так много весит?
3. bayselonarrend 2385 20.01.25 13:05 Сейчас в теме
(2) Сам vhs не много весит. Много весит ffmpeg, потому что это в целом большой универсальный набор библиотек и кодеков для работы с аудио и видео. Vhs в целом из линуксового мира, а там ffmpeg это зависимость, которая может переиспользоваться (и переиспользуются) многими программами потом, поэтому никого это не смущает
4. Дмитрий74Чел 239 20.01.25 14:35 Сейчас в теме
Технология конечно красивая. Но мне кажется проще использовать какую-нибудь программу захвата экрана, набрать нужный текст в консоли вживую, и сохранить захват в gif.
Восьмой; +1 Ответить
5. bayselonarrend 2385 20.01.25 14:39 Сейчас в теме
(4) Это проще если это на один раз. Фишка VHS в том, что можно а) хранить очень маленький файл и пересоздавать gif когда это понадобиться б) менять, например в коде, какие-то настройки в этом файле и создавать новые гифки

Например, если гифки используются в какой-нибудь документации к консольному сфоту, то можно при выходе новой версии в автоматическом режиме пересоздавать их для поддержания актуальности

Ну и + код красиво равномерно набирается без ошибок и запинок, в отличии от живой записи
JohnyDeath; gtrr34; +2 Ответить
6. Восьмой 90 21.01.25 11:55 Сейчас в теме
У меня только 1 вопрос - а зачем это все, и какое отношение это имеет к 1С?
idhas; paybaseme; chernov.gigansk.ru; +3 2 Ответить
Оставьте свое сообщение