2015-03-06 11:59:27 +01:00
|
|
|
# asciinema
|
2013-10-03 17:57:40 +02:00
|
|
|
|
2015-03-05 15:57:12 +01:00
|
|
|
[](https://travis-ci.org/asciinema/asciinema)
|
2017-09-16 11:08:32 +02:00
|
|
|
[](https://pypi.org/project/asciinema/)
|
2015-08-07 17:04:55 -04:00
|
|
|
[](https://raw.githubusercontent.com/asciinema/asciinema/master/LICENSE)
|
2013-10-03 17:57:40 +02:00
|
|
|
|
2015-03-06 11:59:27 +01:00
|
|
|
Terminal session recorder and the best companion of
|
|
|
|
|
[asciinema.org](https://asciinema.org).
|
2013-10-03 17:57:40 +02:00
|
|
|
|
2017-09-16 10:36:06 +02:00
|
|
|
[](https://asciinema.org/a/113463?autoplay=1)
|
2015-03-28 17:56:20 +01:00
|
|
|
|
2013-10-03 17:57:40 +02:00
|
|
|
## Installation
|
|
|
|
|
|
2017-09-16 21:17:19 +02:00
|
|
|
### Python package
|
|
|
|
|
|
|
|
|
|
asciinema is available on [PyPI](https://pypi.python.org/pypi/asciinema) and can
|
|
|
|
|
be installed with pip (Python 3 with setuptools required):
|
|
|
|
|
|
|
|
|
|
sudo pip3 install asciinema
|
|
|
|
|
|
|
|
|
|
This is the recommended way of installation, which gives you the latest released
|
|
|
|
|
version.
|
|
|
|
|
|
2016-07-05 17:29:33 +02:00
|
|
|
### Native packages
|
2014-12-17 16:23:15 +01:00
|
|
|
|
2016-07-05 17:29:33 +02:00
|
|
|
asciinema is included in repositories of most popular package managers on Mac OS
|
|
|
|
|
X, Linux and FreeBSD. Look for package named `asciinema`. See the
|
2015-07-01 20:20:07 +02:00
|
|
|
[list of available packages](https://asciinema.org/docs/installation).
|
2014-12-17 16:23:15 +01:00
|
|
|
|
2017-09-16 21:17:19 +02:00
|
|
|
### Snap supported Linux distros
|
2017-04-28 12:01:26 +01:00
|
|
|
|
2017-09-16 21:17:19 +02:00
|
|
|
If your run [Ubuntu or other snap supported Linux distribution](https://snapcraft.io/docs/core/install) you can
|
|
|
|
|
install asciinema with:
|
2014-12-17 16:23:15 +01:00
|
|
|
|
2017-09-16 21:17:19 +02:00
|
|
|
snap install asciinema --classic
|
2014-12-17 16:23:15 +01:00
|
|
|
|
2017-09-16 21:17:19 +02:00
|
|
|
The snap contains all necessary dependencies required to run asciinema, and will
|
|
|
|
|
get automatically updated when a new version is pushed to the store.
|
2015-03-06 11:59:27 +01:00
|
|
|
|
2017-04-12 14:01:17 +02:00
|
|
|
### Docker image
|
|
|
|
|
|
|
|
|
|
asciinema Docker image is based on Ubuntu 16.04 and has the latest version of
|
|
|
|
|
asciinema recorder pre-installed.
|
|
|
|
|
|
|
|
|
|
docker pull asciinema/asciinema
|
|
|
|
|
|
|
|
|
|
When running it don't forget to allocate a pseudo-TTY (`-t`), keep STDIN open
|
|
|
|
|
(`-i`) and mount config directory volume (`-v`):
|
|
|
|
|
|
|
|
|
|
docker run --rm -ti -v "$HOME/.config/asciinema":/root/.config/asciinema asciinema/asciinema
|
|
|
|
|
|
|
|
|
|
Default command run in a container is `asciinema rec`.
|
|
|
|
|
|
|
|
|
|
There's not much software installed in this image though. In most cases you may
|
|
|
|
|
want to install extra programs before recording. One option is to derive new
|
|
|
|
|
image from this one (start your custom Dockerfile with `FROM
|
|
|
|
|
asciinema/asciinema`). Another option is to start the container with `/bin/bash`
|
|
|
|
|
as the command, install extra packages and manually start `asciinema rec`:
|
|
|
|
|
|
|
|
|
|
docker run --rm -ti -v "$HOME/.config/asciinema":/root/.config/asciinema asciinema/asciinema /bin/bash
|
|
|
|
|
root@6689517d99a1:~# apt-get install foobar
|
|
|
|
|
root@6689517d99a1:~# asciinema rec
|
|
|
|
|
|
2016-07-05 17:29:33 +02:00
|
|
|
### Running latest version from master
|
2014-12-17 16:23:15 +01:00
|
|
|
|
2016-07-05 17:29:33 +02:00
|
|
|
If none of the above works for you (or you want to help with development) just
|
|
|
|
|
clone the repo and run asciinema straight from the checkout:
|
2014-12-17 16:23:15 +01:00
|
|
|
|
2016-07-05 17:29:33 +02:00
|
|
|
git clone https://github.com/asciinema/asciinema.git
|
|
|
|
|
cd asciinema
|
|
|
|
|
python3 -m asciinema --version
|
2014-12-18 12:05:44 +01:00
|
|
|
|
2013-10-03 17:57:40 +02:00
|
|
|
## Usage
|
|
|
|
|
|
2015-08-08 21:25:11 +02:00
|
|
|
asciinema is composed of multiple commands, similar to `git`, `apt-get` or
|
2015-03-05 15:29:17 +01:00
|
|
|
`brew`.
|
2014-12-17 16:23:15 +01:00
|
|
|
|
2015-08-08 21:25:11 +02:00
|
|
|
When you run `asciinema` with no arguments help message is displayed, listing
|
2015-03-05 15:29:17 +01:00
|
|
|
all available commands with their options.
|
2014-12-17 16:23:15 +01:00
|
|
|
|
2015-02-24 17:51:40 +01:00
|
|
|
### `rec [filename]`
|
2014-12-17 16:23:15 +01:00
|
|
|
|
2015-02-24 17:51:40 +01:00
|
|
|
__Record terminal session.__
|
2014-12-17 16:23:15 +01:00
|
|
|
|
|
|
|
|
This is the single most important command in asciinema, since it is how you
|
|
|
|
|
utilize this tool's main job.
|
|
|
|
|
|
2015-02-24 17:51:40 +01:00
|
|
|
By running `asciinema rec [filename]` you start a new recording session. The
|
|
|
|
|
command (process) that is recorded can be specified with `-c` option (see
|
|
|
|
|
below), and defaults to `$SHELL` which is what you want in most cases.
|
2014-12-17 16:23:15 +01:00
|
|
|
|
|
|
|
|
Recording finishes when you exit the shell (hit <kbd>Ctrl+D</kbd> or type
|
2015-02-24 17:51:40 +01:00
|
|
|
`exit`). If the recorded process is not a shell then recording finishes when
|
2014-12-17 16:23:15 +01:00
|
|
|
the process exits.
|
|
|
|
|
|
2015-02-24 17:51:40 +01:00
|
|
|
If the `filename` argument is given then the resulting recording (called
|
2015-02-25 15:26:38 +01:00
|
|
|
[asciicast](doc/asciicast-v1.md)) is saved to a local file. It can later be
|
|
|
|
|
replayed with `asciinema play <filename>` and/or uploaded to asciinema.org with
|
|
|
|
|
`asciinema upload <filename>`. If the `filename` argument is omitted then
|
|
|
|
|
(after asking for confirmation) the resulting asciicast is uploaded to
|
2015-03-12 15:27:58 +01:00
|
|
|
asciinema.org for further playback in a web browser.
|
2015-02-24 17:51:40 +01:00
|
|
|
|
2014-12-17 16:23:15 +01:00
|
|
|
`ASCIINEMA_REC=1` is added to recorded process environment variables. This
|
|
|
|
|
can be used by your shell's config file (`.bashrc`, `.zshrc`) to alter the
|
|
|
|
|
prompt or play a sound when shell is being recorded.
|
|
|
|
|
|
|
|
|
|
Available options:
|
|
|
|
|
|
2015-03-05 15:29:17 +01:00
|
|
|
* `-c, --command=<command>` - Specify command to record, defaults to $SHELL
|
2015-08-08 21:25:11 +02:00
|
|
|
* `-t, --title=<title>` - Specify the title of the asciicast
|
2017-09-16 10:29:56 +02:00
|
|
|
* `-w, --max-wait=<sec>` - Reduce recorded terminal inactivity to max `<sec>` seconds
|
2015-08-08 21:25:11 +02:00
|
|
|
* `-y, --yes` - Answer "yes" to all prompts (e.g. upload confirmation)
|
2015-08-08 21:28:41 +02:00
|
|
|
* `-q, --quiet` - Be quiet, suppress all notices/warnings (implies -y)
|
2014-12-17 16:23:15 +01:00
|
|
|
|
2015-02-24 17:51:40 +01:00
|
|
|
### `play <filename>`
|
|
|
|
|
|
|
|
|
|
__Replay recorded asciicast in a terminal.__
|
|
|
|
|
|
|
|
|
|
This command replays given asciicast (as recorded by `rec` command) directly in
|
|
|
|
|
your terminal.
|
|
|
|
|
|
2016-02-21 12:09:33 +01:00
|
|
|
Playing from a local file:
|
2015-06-23 20:20:22 +02:00
|
|
|
|
2016-02-21 12:09:33 +01:00
|
|
|
asciinema play /path/to/asciicast.json
|
|
|
|
|
|
2016-02-21 20:24:20 +01:00
|
|
|
Playing from HTTP(S) URL:
|
|
|
|
|
|
|
|
|
|
asciinema play https://asciinema.org/a/22124.json
|
|
|
|
|
asciinema play http://example.com/demo.json
|
|
|
|
|
|
|
|
|
|
Playing from asciicast page URL (requires `<link rel="alternate"
|
|
|
|
|
type="application/asciicast+json" href="....json">` in page's HTML):
|
2016-02-21 12:09:33 +01:00
|
|
|
|
|
|
|
|
asciinema play https://asciinema.org/a/22124
|
2016-02-21 20:24:20 +01:00
|
|
|
asciinema play http://example.com/blog/post.html
|
2016-02-21 12:09:33 +01:00
|
|
|
|
|
|
|
|
Playing from stdin:
|
|
|
|
|
|
|
|
|
|
cat /path/to/asciicast.json | asciinema play -
|
2016-02-21 20:24:20 +01:00
|
|
|
ssh user@host cat asciicast.json | asciinema play -
|
2015-06-23 20:20:22 +02:00
|
|
|
|
2016-02-21 20:23:00 +01:00
|
|
|
Playing from IPFS:
|
|
|
|
|
|
|
|
|
|
asciinema play ipfs:/ipfs/QmcdXYJp6e4zNuimuGeWPwNMHQdxuqWmKx7NhZofQ1nw2V
|
|
|
|
|
asciinema play fs:/ipfs/QmcdXYJp6e4zNuimuGeWPwNMHQdxuqWmKx7NhZofQ1nw2V
|
|
|
|
|
|
2015-05-10 13:53:04 +02:00
|
|
|
Available options:
|
|
|
|
|
|
2017-09-16 10:29:56 +02:00
|
|
|
* `-w, --max-wait=<sec>` - Reduce replayed terminal inactivity to max `<sec>` seconds
|
2017-01-23 16:27:54 +01:00
|
|
|
* `-s, --speed=<factor>` - Playback speedup (can be fractional)
|
2015-05-10 13:53:04 +02:00
|
|
|
|
2015-10-21 11:20:26 +02:00
|
|
|
NOTE: it is recommended to run `asciinema play` in a terminal of dimensions not
|
|
|
|
|
smaller than the one used for recording as there's no "transcoding" of control
|
|
|
|
|
sequences for new terminal size.
|
|
|
|
|
|
2015-02-24 17:51:40 +01:00
|
|
|
### `upload <filename>`
|
|
|
|
|
|
|
|
|
|
__Upload recorded asciicast to asciinema.org site.__
|
|
|
|
|
|
|
|
|
|
This command uploads given asciicast (as recorded by `rec` command) to
|
2015-03-12 15:27:58 +01:00
|
|
|
asciinema.org for further playback in a web browser.
|
2015-02-24 17:51:40 +01:00
|
|
|
|
2015-02-25 16:24:15 +01:00
|
|
|
`asciinema rec demo.json` + `asciinema play demo.json` + `asciinema upload
|
|
|
|
|
demo.json` is a nice combo for when you want to review an asciicast before
|
|
|
|
|
publishing it on asciinema.org.
|
2015-02-24 17:51:40 +01:00
|
|
|
|
2014-12-17 16:23:15 +01:00
|
|
|
### `auth`
|
|
|
|
|
|
2016-07-12 16:12:24 +02:00
|
|
|
__Manage recordings on asciinema.org account.__
|
2014-12-17 16:23:15 +01:00
|
|
|
|
2016-07-12 16:10:24 +02:00
|
|
|
If you want to manage your recordings on asciinema.org (set title/description,
|
|
|
|
|
delete etc) you need to authenticate. This command displays the URL you should
|
|
|
|
|
open in your web browser to do that.
|
2014-12-17 16:23:15 +01:00
|
|
|
|
2016-07-12 16:10:24 +02:00
|
|
|
On every machine you run asciinema recorder, you get a new, unique API token. If
|
|
|
|
|
you're already logged in on asciinema.org website and you run `asciinema auth`
|
|
|
|
|
from a new computer then this new device will be linked to your account.
|
2013-10-03 17:57:40 +02:00
|
|
|
|
2015-05-24 12:29:58 +02:00
|
|
|
You can synchronize your config file (which keeps the API token) across the
|
2016-07-12 16:10:24 +02:00
|
|
|
machines so all of them use the same token, but that's not necessary. You can
|
|
|
|
|
assign new tokens to your account from as many machines as you want.
|
2013-10-03 17:57:40 +02:00
|
|
|
|
2017-01-28 14:02:54 +01:00
|
|
|
## Hosting the recordings on the web
|
|
|
|
|
|
2017-09-16 11:09:02 +02:00
|
|
|
As mentioned in the `Usage > rec` section above, if the `filename` argument to
|
|
|
|
|
`asciinema rec` is omitted then the recorded asciicast is uploaded
|
|
|
|
|
to [asciinema.org](https://asciinema.org). You can watch it there and share it via secret URL.
|
2017-01-28 14:02:54 +01:00
|
|
|
|
|
|
|
|
If you prefer to host the recordings yourself, you can do so by recording to a
|
|
|
|
|
file (`asciinema rec demo.json`) and using
|
|
|
|
|
[asciinema's standalone web player](https://github.com/asciinema/asciinema-player#self-hosting-quick-start)
|
|
|
|
|
in your HTML page.
|
|
|
|
|
|
2015-03-09 17:05:14 +01:00
|
|
|
## Configuration file
|
|
|
|
|
|
2015-05-24 12:29:58 +02:00
|
|
|
asciinema uses a config file to keep API token and user settings. In most cases
|
|
|
|
|
the location of this file is `$HOME/.config/asciinema/config`.
|
|
|
|
|
|
2016-07-05 17:29:33 +02:00
|
|
|
*NOTE: When you first run asciinema, local API token is generated (UUID) and
|
2017-04-11 17:38:22 +02:00
|
|
|
saved in the file (unless the file already exists or you have set
|
|
|
|
|
`ASCIINEMA_API_TOKEN` environment variable).*
|
2016-07-05 17:29:33 +02:00
|
|
|
|
|
|
|
|
The auto-generated, minimal config file looks like this:
|
2015-03-09 17:05:14 +01:00
|
|
|
|
|
|
|
|
[api]
|
2016-07-05 17:29:33 +02:00
|
|
|
token = <your-api-token-here>
|
2015-03-09 17:05:14 +01:00
|
|
|
|
2015-03-10 15:49:35 +01:00
|
|
|
There are several options you can set in this file. Here's a config with all
|
|
|
|
|
available options set:
|
2015-03-09 17:05:14 +01:00
|
|
|
|
|
|
|
|
[api]
|
2016-07-05 17:29:33 +02:00
|
|
|
token = <your-api-token-here>
|
2015-03-10 15:49:35 +01:00
|
|
|
url = https://asciinema.example.com
|
2015-03-09 17:05:14 +01:00
|
|
|
|
|
|
|
|
[record]
|
|
|
|
|
command = /bin/bash -l
|
|
|
|
|
maxwait = 2
|
|
|
|
|
yes = true
|
2016-07-03 21:08:02 +02:00
|
|
|
quiet = true
|
2015-03-09 17:05:14 +01:00
|
|
|
|
2015-05-10 13:53:04 +02:00
|
|
|
[play]
|
|
|
|
|
maxwait = 1
|
|
|
|
|
|
2015-03-10 15:49:35 +01:00
|
|
|
The options in `[api]` section are related to API location and authentication.
|
|
|
|
|
To tell asciinema recorder to use your own asciinema site instance rather than
|
|
|
|
|
the default one (asciinema.org), you can set `url` option. API URL can also be
|
2017-04-11 17:38:22 +02:00
|
|
|
passed via `ASCIINEMA_API_URL` environment variable, as well as API token, via
|
|
|
|
|
`ASCIINEMA_API_TOKEN` environment variable.
|
2015-03-09 17:05:14 +01:00
|
|
|
|
2015-05-10 13:53:04 +02:00
|
|
|
The options in `[record]` and `[play]` sections have the same meaning as the
|
|
|
|
|
options you pass to `asciinema rec`/`asciinema play` command. If you happen to
|
|
|
|
|
often use either `-c`, `-w` or `-y` with these commands then consider saving it
|
|
|
|
|
as a default in the config file.
|
2015-03-09 17:05:14 +01:00
|
|
|
|
2017-04-11 17:44:43 +02:00
|
|
|
*NOTE: If you want to publish your asciinema config file (in public dotfiles
|
|
|
|
|
repository) you __should__ remove `token = ...` line from the file and use
|
|
|
|
|
`ASCIINEMA_API_TOKEN` environment variable instead.*
|
|
|
|
|
|
2015-05-24 12:29:58 +02:00
|
|
|
### Configuration file locations
|
|
|
|
|
|
|
|
|
|
In fact, the following locations are checked for the presence of the config
|
|
|
|
|
file (in the given order):
|
|
|
|
|
|
|
|
|
|
* `$ASCIINEMA_CONFIG_HOME/config` - if you have set `$ASCIINEMA_CONFIG_HOME`
|
|
|
|
|
* `$XDG_CONFIG_HOME/asciinema/config` - on Linux, `$XDG_CONFIG_HOME` usually points to `$HOME/.config/`
|
|
|
|
|
* `$HOME/.config/asciinema/config` - in most cases it's here
|
|
|
|
|
* `$HOME/.asciinema/config` - created by asciinema versions prior to 1.1
|
|
|
|
|
|
2016-07-05 17:29:33 +02:00
|
|
|
The first one found is used.
|
2015-05-24 12:29:58 +02:00
|
|
|
|
2013-12-03 20:15:47 +01:00
|
|
|
## Contributing
|
|
|
|
|
|
|
|
|
|
If you want to contribute to this project check out
|
2014-02-09 14:05:55 +01:00
|
|
|
[Contributing](https://asciinema.org/contributing) page.
|
2013-12-03 20:15:47 +01:00
|
|
|
|
2013-10-06 12:58:29 +02:00
|
|
|
## Authors
|
2013-10-03 17:57:40 +02:00
|
|
|
|
2013-10-06 12:58:29 +02:00
|
|
|
Developed with passion by [Marcin Kulik](http://ku1ik.com) and great open
|
2015-03-05 15:57:12 +01:00
|
|
|
source [contributors](https://github.com/asciinema/asciinema/contributors)
|
2013-10-06 12:58:29 +02:00
|
|
|
|
2014-11-15 17:42:04 +01:00
|
|
|
## License
|
2013-10-06 12:58:29 +02:00
|
|
|
|
2017-01-28 14:06:13 +01:00
|
|
|
Copyright © 2011-2017 Marcin Kulik.
|
2014-11-15 17:42:04 +01:00
|
|
|
|
|
|
|
|
All code is licensed under the GPL, v3 or later. See LICENSE file for details.
|