*The author selected the Electronic Frontier Foundation to receive a donation as part of the Write for DOnations program.*

Introduction

Terminalizer is a terminal recorder application that allows you to record your terminal session in real-time, and then play it back at a later date. It works in the same way as a desktop screen recorder, but instead runs in your terminal.

Recording your terminal session is useful if you want to review a particular activity again, or to help debug a particularly tricky error. Recordings made with Terminalizer can also be exported as animated GIFs, which are great for sharing online or adding to marketing material for your software.

In this tutorial, you will install Terminalizer, use it to record and play back terminal sessions, customize your recordings, and then export them to share online.

Prerequisites

terminal illustration for: Prerequisites

To complete this tutorial, you will need:

If you wish to share your recordings online, you'll also need:

Once you have these ready, log in to your server as your non-root user to begin.

Step 1 — Installing Terminalizer

In this step, you will download and install Terminalizer on your system. Terminalizer is written using Node.js, and is available to install using the npm package manager.

To install Terminalizer globally on your system, run the following command:

				
					
sudo npm install --global --allow-root --unsafe-perm=true terminalizer

				
			

Terminalizer uses the Electron application framework to export recorded terminal sessions into GIF format. The --unsafe-perms=true command argument is required in order to install Electron globally on your system.

Once Terminalizer has been installed, you'll see similar output to the following:

				
					
[secondary_label Output]

. . .

/usr/local/lib

└── terminalizer@<^>0.7.1<^>

				
			

Next, check your installation of Terminalizer by running:

				
					
terminalizer --version

				
			

This will display something similar to the following:

				
					
[secondary_label Output]

<^>0.7.1<^>

				
			

Finally, generate a default Terminalizer configuration file, which you can use for Terminalizer's advanced customization (detailed further in Step 4):

				
					
terminalizer init

				
			

This will produce output similar to the following:

				
					
[secondary_label Output]

The global config directory is created at

/home/<^>user<^>/.terminalizer

				
			

Now that you've installed Terminalizer, you can make your first terminal recording.

Step 2 — Recording and Playing Back a Terminal Session

In this step, you will record and playback a terminal session.

To begin, set up a new Terminalizer recording using a name of your choice:

				
					
terminalizer record <^>your-recording<^>

				
			

This will output the following to indicate that the recording has started:

				
					
[secondary_label Output]

The recording session has started

Press Ctrl+D to exit and save the recording

				
			

You can now proceed to do anything that you want within your terminal. Each key press and command will be recorded in real-time by Terminalizer.

For example:

				
					
[environment second]

pwd

date

whoami

echo "Hello, world!"

				
			

When you'd like to stop the recording, press CTRL+D. Terminalizer will then save the recording to the specified file in YAML format, for example, <^>your-recording<^>.yml.

				
					
[secondary_label Output]

Successfully Recorded

The recording data is saved into the file:

/home/&lt;^&gt;user&lt;^&gt;/&lt;^&gt;your-recording&lt;^&gt;.yml

				
			

You may be prompted by Terminalizer to share your recording online. Just press CTRL+C to cancel this for now, as you can playback the terminal recording locally first.

Next, play your recorded terminal session with the followng command:

				
					
terminalizer play &lt;^&gt;your-recording&lt;^&gt;

				
			

This will replay the recorded session in real-time in your terminal:

				
					
[secondary_label Output]

[environment third]

user@droplet:~$ pwd

/home/user

user@droplet:~$ date

Sun Mar 8 14:55:36 UTC 2020

user@droplet:~$ whoami

user

user@droplet:~$ echo "Hello, world!"

Hello, world!

user@droplet:~$ logout

				
			

You can also adjust the playback speed of your recording using the --speed-factor option.

For example, the following will playback your recording twice as slowly (half speed):

				
					
terminalizer play &lt;^&gt;your-recording&lt;^&gt; --speed-factor 2

				
			

Alternatively, you can play back your recording twice as fast (double speed):

				
					
terminalizer play &lt;^&gt;your-recording&lt;^&gt; --speed-factor 0.5

				
			

You've recorded and played back a terminal session. Next, you can share a recorded terminal session online.

Step 3 — Sharing a Recorded Terminal Session

In this step, you'll share your recorded terminal session online on the Terminalizer Explore page.

Begin by selecting a recorded session to share:

				
					
terminalizer share &lt;^&gt;your-recording&lt;^&gt;

				
			

You will then be prompted to provide some basic metadata about your recording, such as the title and description:

				
					
[secondary_label Output]

Please enter some details about your recording

? Title &lt;^&gt;Title of Your Recording&lt;^&gt;

? Description &lt;^&gt;Description of Your Recording&lt;^&gt;

? Tags such as git,bash,game &lt;^&gt;Comma-separated Tags for Your Recording&lt;^&gt;

				
			

[warning]

Warning: Terminalizer recordings are shared publicly by default, so ensure that there are no personally identifiable or confidential details present in your terminal recording that you don't want to share.

If this is the first time that you've shared a recorded session using Terminalizer, you'll need to link your Terminalizer account. Terminalizer will display a verification link if this is required:

				
					
[secondary_label Output]

Open the following link in your browser and login into your account

https://terminalizer.com/token?token=&lt;^&gt;your-token&lt;^&gt;



When you do it, press any key to continue

				
			

[warning]

Warning: Ensure that you keep your Terminalizer token private, as it will allow anyone in possession of it to access your Terminalizer account.

Once you have visited the link in your web browser and signed in to your Terminalizer account, press any key to continue.

Terminalizer will now upload your recording and provide you the link to view it:

				
					
[secondary_label Output]

Successfully Uploaded

The recording is available on the link:

https://terminalizer.com/view/&lt;^&gt;your-recording-id&lt;^&gt;

				
			

Visiting the link in a desktop web browser will allow you to view your shared recording:

You've shared a recorded terminal session on the Terminalizer website and viewed it in your web browser.

Step 4 — Setting Advanced Terminalizer Configuration

Now that you've gained some familiarity with Terminalizer, you can begin to review some of the more advanced customization options, such as the ability to adjust the display colors and style.

Each recording inherits the default configuration from the global Terminalizer config file, which is located at ~/.terminalizer/config.yml. This means that you can edit the configuration for individual recordings directly by editing the recording file (e.g. <^>your-recording<^>.yml). Alternatively, you can edit the global configuration, which will have an impact on all new recordings.

In this example you'll edit the global configuration file, but the same guidance applies to individual recording configuration files as well.

Begin by opening the global Terminalizer configuration file in your text editor, such as nano:

				
					
nano ~/.terminalizer/config.yml

				
			

Each of the available configuration options within the file are commented in order to explain what they do.

There are several common configuration options that you may wish to adjust to your liking:

  • cols: Explicitly set the number of terminal columns used for your recording.
  • rows: Explicitly set the number of terminal rows used for your recording.
  • frameDelay: Override the delay between each keystroke during playback.
  • maxIdleTime: Specify a maximum time between keystrokes during playback.
  • cursorStyle: Specify the default terminal cursor style out of block, bar, and underline.
  • fontFamily: Specify a list of preferred playback fonts, in order of preference.
  • theme: Adjust the color scheme of the playback, for example to create a black-on-white terminal, etc.

As an example, you can achieve a white-on-black terminal display by configuring the following options:

				
					
[label config.yml]

. . .

theme:

 background: "white"

 foreground: "black"

. . .

				
			

This will produce a result similar to the following:

You could adjust the cursor style to make the recording easier to understand, for example by swapping the default block-style cursor with an underlined one:

				
					
[label config.yml]

. . .

cursorStyle: underline

. . .

				
			

This produces a result similar to the following:

Once you have made any desired changes, save the file and return to your terminal.

If you edited the global Terminalizer configuration, these settings will apply to all new recordings going forward. If you're editing a specific recording configuration, Terminalizer will immediately apply the changes to that particular recording.

Note that custom playback styling only applies to shared recording sessions. Playing them back directly in your terminal will always use your default terminal styling and color scheme.

In this final step, you reviewed some of the advanced configuration options for Terminalizer.

Conclusion

In this article you used Terminalizer to record and share a terminal session. You now have the knowledge required to create recorded demos of your software for use in marketing material, or to share command-line tricks with friends.

If you wish to render and export Terminalizer recordings into GIF format, you can install Terminalizer on a machine with a graphical user interface/desktop and use the built-in rendering features:

You may also wish to browse the Terminalizer website to see recorded terminal sessions shared by other users: