端末での操作をSVG形式で記録する termtosvg

ttyrec/playみたいに端末操作を録画出来るアプリケーション.再生はウェブブラウザなどでできます.

導入はpipで

$ pip3 install termtosvg
$ termtosvg -h
usage: termtosvg [output_file] [--font FONT] [--theme THEME] [--help] [--verbose]
Record a terminal session and render an SVG animation on the fly

positional arguments:
  output_file    optional filename of the SVG animation; if missing, a random
                 filename will be automatically generated

optional arguments:
  -h, --help     show this help message and exit
  --font FONT    font to specify in the CSS portion of the SVG animation
                 (DejaVu Sans Mono, Monaco...). If the font is not installed
                 on the viewer's machine, the browser will display a default
                 monospaced font instead.
  --theme THEME  color theme used to render the terminal session (circus,
                 classic-dark, classic-light, dracula, isotope, marrakesh,
                 material, monokai, solarized-dark, solarized-light, zenburn)
  -v, --verbose  increase log messages verbosity

See also 'termtosvg record --help' and 'termtosvg render --help'

導入後実行するとそのまま端末に戻ってexitするまでの操作を記録してくれる.exitするとSVGを書き出してそのファイル名を教えてくれる.

mk@T430s:~ (551)$ termtosvg
Recording started, enter "exit" command or Control-D to end
mk@T430s:~ (554)$ cowsay -f duck "hello termtosvg!"
 __________________
< hello termtosvg! >
 ------------------
 \
  \
   \ >()_
      (__)__ _
mk@T430s:~ (555)$ cowsay -f duck "hello termtosvg!"|lolcat
 __________________
< hello termtosvg! >
 ------------------
 \
  \
   \ >()_
      (__)__ _
mk@T430s:~ (556)$ exit
Recording ended, SVG animation is /tmp/termtosvg_vpd7hh0z.svg

出来上がったファイルはSVGなので中を見てコピペとか出来なくはない.

$ xmllint --format /tmp/termtosvg_vpd7hh0z.svg|head
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="full" height="408" version="1.1" width="640">
  <defs>
    <style type="text/css"><![CDATA[* {font-family: "DejaVu Sans Mono", monospace; font-style: normal; font-size: 14px}
text {dominant-baseline: text-before-edge}
.bold {font-weight: bold}
.background {fill: #002b36}]]></style>
    <g id="1">
      <text fill="#93a1a1" lengthAdjust="spacingAndGlyphs" textLength="144" x="0">mk@T430s:~ (554)$ </text>
      <text fill="#002b36" lengthAdjust="spacingAndGlyphs" textLength="8" x="144"> </text>

以下にexampleがある

サーバにアップロードして共有だとasciinemaが便利だけどこれはこれでファイル一個なので便利そうです.
Python製でライセンスはBSD 3-Clause Licenseです.