Skip to content

Проект asciinema

Проект asciinema

Скринкаст терминала с помощью asciinema

Проект asciinema состоит из нескольких взаимодополняющих частей:

  • регистратор сеансов терминала на основе командной строки asciinema,
  • сайт с API на asciinema.org,
  • проигрыватель javascript

Вы наверняка знакомы с asciinema (github), это удобный опенсорсный инструмент для записи действий в терминале. Записи сохраняются в простом для чтения текстовом формате, поэтому весят совсем немного, а веб-плеер по сути воспроизводит текст из терминала вместо видео, так что любой кусок можно скопировать и использовать. Готовый материал можно загрузить в одно нажатие на asciinema.org или сначала отредактировать локально. Плеер можно встроить на сайт буквально в три строки, бонусом прилагаются всякие плюшки с оформлением и совместимостью, и вообще по совокупности всех фич (и отсутствия головной боли) asciinema давно перерос все аналоги. Вот только есть несостыковка: записи в проекте называют asciicasts, по аналогии со скринкастами — но возможности стримить сессию в реальном времени не было несколько лет, пока не вышел релиз 2.0, в котором с помощью нового формата файлов удалось реализовать на удивление стабильную и удобную раздачу на любой терминал в реал-тайме. О том, как это работает, о подводных камнях и перспективах — под катом.

Один формат — много возможностей

В старых версиях данные записывались в JSON, что добавляло немало оверхеда, да и парсинг у него нетривиальный, а главное, объект неудобно дробить на чанки для частичной передачи и чтения данных. На смену пришёл кастомный формат

  {"version": 2, "width": 236, "height": 54, "timestamp": 1613998795, "idle_time_limit": 1.0, "env": {"SHELL": "/bin/bash", "TERM": "screen"}}
  [0.023635, "o", "client@some-desktop:~$ "]
  [0.812065, "o", "h"]
  [1.087183, "o", "e"]
  [1.246706, "o", "l"]
  [1.473065, "o", "l"]
  [1.657363, "o", "o"]
  [4.114169, "o", "exit\r\n"]