A
cd ..
Tools

Asciinema Terminal Recording

Record and share terminal sessions with asciinema.

2025-11-09
asciinema, recording, terminal

Install asciinema

# Ubuntu/Debian
sudo apt install asciinema

# macOS
brew install asciinema

# Python pip
pip3 install asciinema

Start recording

asciinema rec

Stop recording

Press Ctrl+D or type exit

Save to file

asciinema rec demo.cast

Upload to asciinema.org

asciinema rec
# Press Ctrl+D when done
# Link will be provided

Record with title

asciinema rec -t "My Demo"

Append to existing recording

asciinema rec --append demo.cast

Playback recording

asciinema play demo.cast

Playback from URL

asciinema play https://asciinema.org/a/123456

Playback at different speed

asciinema play -s 2 demo.cast  # 2x speed
asciinema play -s 0.5 demo.cast  # 0.5x speed

Limit idle time

asciinema rec -i 2 demo.cast  # Max 2 seconds idle

Set terminal size

asciinema rec --cols 80 --rows 24 demo.cast

Add command to recording

asciinema rec -c "bash -l"

Overwrite existing file

asciinema rec --overwrite demo.cast

Upload existing recording

asciinema upload demo.cast

Authentication

# Link account
asciinema auth

Convert to GIF

Using agg (asciinema's official converter):

# Install agg
cargo install --git https://github.com/asciinema/agg

# Convert
agg demo.cast demo.gif

Using asciicast2gif:

# Install
npm install -g asciicast2gif

# Convert
asciicast2gif demo.cast demo.gif

Embed in webpage

<script src="https://asciinema.org/a/123456.js" id="asciicast-123456" async></script>

Self-hosted player

<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" type="text/css" href="/asciinema-player.css" />
</head>
<body>
  <div id="demo"></div>
  <script src="/asciinema-player.min.js"></script>
  <script>
    AsciinemaPlayer.create('/demo.cast', document.getElementById('demo'));
  </script>
</body>
</html>

Player options

AsciinemaPlayer.create('/demo.cast', document.getElementById('demo'), {
  cols: 80,
  rows: 24,
  autoPlay: true,
  preload: true,
  loop: true,
  startAt: 5,  // Start at 5 seconds
  speed: 1.5,  // 1.5x speed
  idleTimeLimit: 2,
  theme: 'monokai',
  poster: 'npt:0:05'  // Poster at 5 seconds
});

Configuration file

Create ~/.config/asciinema/config:

[api]
token = your-api-token

[record]
command = /bin/bash -l
maxwait = 2
yes = true
quiet = true

[play]
maxwait = 1
speed = 1.0

Environment variable

export ASCIINEMA_CONFIG_HOME=~/.config/asciinema

Record specific command

asciinema rec -c "htop" demo.cast

Auto-upload

asciinema rec --yes

Use titles in terminal

#!/bin/bash
echo -e  "\033]0;Demo Title\007"
# Your commands here

Complete demo script

#!/bin/bash

# Clear screen
clear

# Add delays between commands
sleep 1

echo "# Installing nginx"
sleep 1
sudo apt install nginx

sleep 2

echo "# Starting nginx"
sudo systemctl start nginx

sleep 1

echo "# Checking status"
sudo systemctl status nginx --no-pager

sleep 2

echo "# Done!"

Record it:

asciinema rec -c "./demo.sh" demo.cast

Tips for great recordings

# 1. Set standard terminal size
asciinema rec --cols 80 --rows 24

# 2. Limit idle time
asciinema rec -i 2

# 3. Use clear font
# Set in terminal preferences

# 4. Add explanatory echos
echo "# Installing dependencies..."
apt install package

# 5. Use sleep for pacing
sleep 1  # Pause 1 second

# 6. Clean terminal before recording
clear

Edit recordings

Using asciinema-edit:

# Install
cargo install --git https://github.com/cirocosta/asciinema-edit

# Cut from 5s to 10s
asciinema-edit cut --start 5 --end 10 input.cast output.cast

# Change speed
asciinema-edit speed --factor 2 input.cast output.cast

# Quantize (remove tiny delays)
asciinema-edit quantize input.cast output.cast

Convert to SVG

# Using svg-term-cli
npm install -g svg-term-cli

# Convert
svg-term --in demo.cast --out demo.svg

Alternatives to asciinema

# ttyrec
ttyrec recording.tty
# ... commands ...
# Ctrl+D

ttyplay recording.tty

# script (built-in)
script recording.txt
# ... commands ...
# Ctrl+D

# terminalizer
npm install -g terminalizer
terminalizer record demo
terminalizer play demo
terminalizer render demo

Use cases

# 1. Tutorial creation
asciinema rec tutorial.cast

# 2. Bug reproduction
asciinema rec bug-report.cast

# 3. CI/CD demos
asciinema rec deployment-demo.cast

# 4. Documentation
# Embed in docs with asciinema player

# 5. Training materials
asciinema rec training-session.cast

Batch processing

#!/bin/bash

for script in demos/*.sh; do
    name=$(basename "$script" .sh)
    asciinema rec -c "$script" "recordings/${name}.cast"
done

API usage

# Upload programmatically
curl -u "your-token:" \
  -F "asciicast=@demo.cast" \
  https://asciinema.org/api/asciicasts

Was this useful?

Share with your team

Browse More