summaryrefslogtreecommitdiffstats
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md540
1 files changed, 540 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..04970e0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,540 @@
+# asciinema
+
+[![Build Status](https://github.com/asciinema/asciinema/actions/workflows/asciinema.yml/badge.svg)](https://github.com/asciinema/asciinema/actions/workflows/asciinema.yml)
+[![PyPI](https://img.shields.io/pypi/v/asciinema.svg)](https://pypi.org/project/asciinema/)
+[![license](http://img.shields.io/badge/license-GNU-blue.svg)](https://raw.githubusercontent.com/asciinema/asciinema/master/LICENSE)
+
+Terminal session recorder and the best companion of
+[asciinema.org](https://asciinema.org).
+
+[![demo](https://asciinema.org/a/335480.svg)](https://asciinema.org/a/335480?autoplay=1)
+
+asciinema _[as-kee-nuh-muh]_ is a free and open source solution for recording
+terminal sessions and sharing them on the web.
+
+Shout-out to our Platinum [sponsors](https://github.com/sponsors/ku1ik), whose
+financial support helps keep the project alive:
+
+[<img src="./.github/sponsor-logos/dashcam/logo-on-light.png" width="200" />](https://dashcam.io?utm_source=asciinemagithub)
+
+## Quick intro
+
+asciinema lets you easily record terminal sessions and replay
+them in a terminal as well as in a web browser.
+
+Install latest version ([other installation options](#installation))
+using [pipx](https://pypa.github.io/pipx/) (if you have it):
+
+```sh
+pipx install asciinema
+```
+
+If you don't have pipx, install using pip with your preferred Python version:
+
+```sh
+python3 -m pip install asciinema
+```
+
+Record your first session:
+
+```sh
+asciinema rec first.cast
+```
+
+Now replay it with double speed:
+
+```sh
+asciinema play -s 2 first.cast
+```
+
+Or with normal speed but with idle time limited to 2 seconds:
+
+```sh
+asciinema play -i 2 first.cast
+```
+
+You can pass `-i 2` to `asciinema rec` as well, to set it permanently on a
+recording. Idle time limiting makes the recordings much more interesting to
+watch. Try it.
+
+If you want to watch and share it on the web, upload it:
+
+```sh
+asciinema upload first.cast
+```
+
+The above uploads it to [asciinema.org](https://asciinema.org), which is a
+default [asciinema-server](https://github.com/asciinema/asciinema-server)
+instance, and prints a secret link you can use to watch your recording in a web
+browser.
+
+You can record and upload in one step by omitting the filename:
+
+```sh
+asciinema rec
+```
+
+You'll be asked to confirm the upload when the recording is done. Nothing is
+sent anywhere without your consent.
+
+These are the basics, but there's much more you can do. The following sections
+cover installation, usage and hosting of the recordings in more detail. Also,
+checkout [agg](https://github.com/asciinema/agg) if you're interested in GIF generation.
+
+## Installation
+
+### Python package from PyPI
+
+[pypi]: https://pypi.python.org/pypi/asciinema
+
+asciinema is available on [PyPI] and can be installed with
+[pipx](https://pypa.github.io/pipx/) (if you have it) or with pip (Python 3
+with setuptools required):
+
+```sh
+pipx install asciinema
+```
+
+Or with pip (using your preferred Python version):
+
+```sh
+python3 -m pip install asciinema
+```
+
+Installing from [PyPI] is the recommended way of installation, which gives you the latest released version.
+
+### Native packages
+
+asciinema is included in repositories of most popular package managers on Mac OS
+X, Linux and FreeBSD. Look for package named `asciinema`. See the
+[list of available packages](https://asciinema.org/docs/installation).
+
+### Running latest version from source code checkout
+
+If you can't use Python package or native package for your OS is outdated you
+can clone the repo and run asciinema straight from the checkout.
+
+Clone the repo:
+
+```sh
+git clone https://github.com/asciinema/asciinema.git
+cd asciinema
+```
+
+If you want latest stable version:
+
+```sh
+git checkout master
+```
+
+If you want current development version:
+
+```sh
+git checkout develop
+```
+
+Then run it with:
+
+```sh
+python3 -m asciinema --version
+```
+
+### Docker image
+
+asciinema Docker image is based on [Ubuntu
+22.04](https://releases.ubuntu.com/22.04/) and has the latest version of
+asciinema recorder pre-installed.
+
+```sh
+docker pull ghcr.io/asciinema/asciinema
+```
+
+When running it don't forget to allocate a pseudo-TTY (`-t`), keep STDIN open
+(`-i`) and mount config directory volume (`-v`):
+
+```sh
+docker run --rm -it -v "${HOME}/.config/asciinema:/root/.config/asciinema" ghcr.io/asciinema/asciinema rec
+```
+
+Container's entrypoint is set to `/usr/local/bin/asciinema` so you can run the
+container with any arguments you would normally pass to `asciinema` binary (see
+Usage section for commands and options).
+
+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
+ghcr.io/asciinema/asciinema`). Another option is to start the container with
+`/bin/bash` as the entrypoint, install extra packages and manually start
+`asciinema rec`:
+
+```console
+docker run --rm -it -v "${HOME}/.config/asciinema:/root/.config/asciinema" --entrypoint=/bin/bash ghcr.io/asciinema/asciinema rec
+root@6689517d99a1:~# apt-get install foobar
+root@6689517d99a1:~# asciinema rec
+```
+
+It is also possible to run the docker container as a non-root user, which has
+security benefits. You can specify a user and group id at runtime to give the
+application permission similar to the calling user on your host.
+
+```sh
+docker run --rm -it \
+ --env=ASCIINEMA_CONFIG_HOME="/run/user/$(id -u)/.config/asciinema" \
+ --user="$(id -u):$(id -g)" \
+ --volume="${HOME}/.config/asciinema:/run/user/$(id -u)/.config/asciinema:rw" \
+ --volume="${PWD}:/data:rw" \
+ --workdir='/data' \
+ ghcr.io/asciinema/asciinema rec
+```
+
+## Usage
+
+asciinema is composed of multiple commands, similar to `git`, `apt-get` or
+`brew`.
+
+When you run `asciinema` with no arguments help message is displayed, listing
+all available commands with their options.
+
+### `rec [filename]`
+
+**Record terminal session.**
+
+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.
+
+You can temporarily pause the capture of your terminal by pressing
+<kbd>Ctrl+\\</kbd>. This is useful when you want to execute some commands during
+the recording session that should not be captured (e.g. pasting secrets). Resume
+by pressing <kbd>Ctrl+\\</kbd> again. When pausing desktop notification is
+displayed so you're sure the sensitive output won't be captured in the
+recording.
+
+Recording finishes when you exit the shell (hit <kbd>Ctrl+D</kbd> or type
+`exit`). If the recorded process is not a shell then recording finishes when
+the process exits.
+
+If the `filename` argument is omitted then (after asking for confirmation) the
+resulting asciicast is uploaded to
+[asciinema-server](https://github.com/asciinema/asciinema-server) (by default to
+asciinema.org), where it can be watched and shared.
+
+If the `filename` argument is given then the resulting recording (called
+[asciicast](doc/asciicast-v2.md)) is saved to a local file. It can later be
+replayed with `asciinema play <filename>` and/or uploaded to asciinema server
+with `asciinema upload <filename>`.
+
+`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 the shell is being recorded.
+
+Available options:
+
+- `--stdin` - Enable stdin (keyboard) recording (see below)
+- `--append` - Append to existing recording
+- `--raw` - Save raw STDOUT output, without timing information or other metadata
+- `--overwrite` - Overwrite the recording if it already exists
+- `-c, --command=<command>` - Specify command to record, defaults to $SHELL
+- `-e, --env=<var-names>` - List of environment variables to capture, defaults
+ to `SHELL,TERM`
+- `-t, --title=<title>` - Specify the title of the asciicast
+- `-i, --idle-time-limit=<sec>` - Limit recorded terminal inactivity to max `<sec>` seconds
+- `--cols=<n>` - Override terminal columns for recorded process
+- `--rows=<n>` - Override terminal rows for recorded process
+- `-y, --yes` - Answer "yes" to all prompts (e.g. upload confirmation)
+- `-q, --quiet` - Be quiet, suppress all notices/warnings (implies -y)
+
+Stdin recording allows for capturing of all characters typed in by the user in
+the currently recorded shell. This may be used by a player (e.g.
+[asciinema-player](https://github.com/asciinema/asciinema-player)) to display
+pressed keys. Because it's basically key-logging (scoped to a single shell
+instance), it's disabled by default, and has to be explicitly enabled via
+`--stdin` option.
+
+### `play <filename>`
+
+**Replay recorded asciicast in a terminal.**
+
+This command replays given asciicast (as recorded by `rec` command) directly in
+your terminal.
+
+Following keyboard shortcuts are available by default:
+
+- <kbd>Space</kbd> - toggle pause,
+- <kbd>.</kbd> - step through a recording a frame at a time (when paused),
+- <kbd>Ctrl+C</kbd> - exit.
+
+See "Configuration file" section for information on how to customize the
+keyboard shortcuts.
+
+Playing from a local file:
+
+```sh
+asciinema play /path/to/asciicast.cast
+```
+
+Playing from HTTP(S) URL:
+
+```sh
+asciinema play https://asciinema.org/a/22124.cast
+asciinema play http://example.com/demo.cast
+```
+
+Playing from asciicast page URL (requires `<link rel="alternate" type="application/x-asciicast" href="/my/ascii.cast">` in page's HTML):
+
+```sh
+asciinema play https://asciinema.org/a/22124
+asciinema play http://example.com/blog/post.html
+```
+
+Playing from stdin:
+
+```sh
+cat /path/to/asciicast.cast | asciinema play -
+ssh user@host cat asciicast.cast | asciinema play -
+```
+
+Playing from IPFS:
+
+```sh
+asciinema play dweb:/ipfs/QmNe7FsYaHc9SaDEAEXbaagAzNw9cH7YbzN4xV7jV1MCzK/ascii.cast
+```
+
+Available options:
+
+- `-i, --idle-time-limit=<sec>` - Limit replayed terminal inactivity to max `<sec>` seconds
+- `-s, --speed=<factor>` - Playback speed (can be fractional)
+- `-l, --loop` - Play in a loop
+- `-m, --pause-on-markers` - Automatically pause on [markers](#markers)
+- `--stream=<stream>` - Select stream to play (see below)
+- `--out-fmt=<format>` - Select output format (see below)
+
+By default the output stream (`o`) is played. This is what you want in most
+cases. If you recorded the input stream (`i`) with `asciinema rec --stdin` then
+you can replay it with `asciinema play --stream=i <filename>`.
+
+By default the selected stream is written to stdout in original, raw data form.
+This is also what you want in majority of cases. However you can change the
+output format to asciicast (newline delimited JSON) with `asciinema play
+--out-fmt=asciicast <filename>`. This allows delegating actual rendering to
+another place (e.g. outside of your terminal) by piping output of `asciinema
+play` to a tool of your choice.
+
+> For the best playback experience 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.
+
+### `cat <filename>`
+
+**Print full output of recorded asciicast to a terminal.**
+
+While `asciinema play <filename>` replays the recorded session using timing
+information saved in the asciicast, `asciinema cat <filename>` dumps the full
+output (including all escape sequences) to a terminal immediately.
+
+`asciinema cat existing.cast >output.txt` gives the same result as recording via
+`asciinema rec --raw output.txt`.
+
+### `upload <filename>`
+
+**Upload recorded asciicast to asciinema.org site.**
+
+This command uploads given asciicast (recorded by `rec` command) to
+asciinema.org, where it can be watched and shared.
+
+`asciinema rec demo.cast` + `asciinema play demo.cast` + `asciinema upload demo.cast` is a nice combo if you want to review an asciicast before
+publishing it on asciinema.org.
+
+### `auth`
+
+**Link your install ID with your asciinema.org user account.**
+
+If you want to manage your recordings (change title/theme, delete) at
+asciinema.org you need to link your "install ID" with asciinema.org user
+account.
+
+This command displays the URL to open in a web browser to do that. You may be
+asked to log in first.
+
+Install ID is a random ID ([UUID
+v4](https://en.wikipedia.org/wiki/Universally_unique_identifier)) generated
+locally when you run asciinema for the first time, and saved at
+`$HOME/.config/asciinema/install-id`. Its purpose is to connect local machine
+with uploaded recordings, so they can later be associated with asciinema.org
+account. This way we decouple uploading from account creation, allowing them to
+happen in any order.
+
+> A new install ID is generated on each machine and system user account you use
+> asciinema on, so in order to keep all recordings under a single asciinema.org
+> account you need to run `asciinema auth` on all of those machines.
+
+> asciinema versions prior to 2.0 confusingly referred to install ID as "API
+> token".
+
+## Markers
+
+Markers allow marking specific time locations in a recording, which can be used
+for navigation, as well as for automatic pausing of the playback.
+
+Markers can be added to a recording in several ways:
+
+- while you are recording, by pressing a configured hotkey, see [add_marker_key
+ config option](#configuration-file)
+- for existing recording, by inserting marker events (`"m"`) in the asciicast
+ file, see [marker event](doc/asciicast-v2.md#m---marker)
+
+When replaying a recording with `asciinema play` you can enable
+auto-pause-on-marker behaviour with `-m`/`--pause-on-markers` option (it's off
+by default). When a marker is encountered, the playback automatically pauses and
+can be resumed by pressing space bar key. The playback continues until next
+marker is encountered. You can also fast-forward to the next marker by pressing
+`]` key (when paused).
+
+Markers can be useful in e.g. live demos: you can create a recording with
+markers, then play it back during presentation, and have it stop wherever you
+want to explain terminal contents in more detail.
+
+## Hosting the recordings on the web
+
+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.
+
+If you prefer to host the recordings yourself, you can do so by either:
+
+- recording to a file (`asciinema rec demo.cast`), and using [asciinema's
+ standalone web
+ player](https://github.com/asciinema/asciinema-player#self-hosting-quick-start)
+ in your HTML page, or
+- setting up your own
+ [asciinema-server](https://github.com/asciinema/asciinema-server) instance,
+ and [setting API URL
+ accordingly](https://github.com/asciinema/asciinema-server/wiki/Installation-guide#using-asciinema-recorder-with-your-instance).
+
+## Configuration file
+
+You can configure asciinema by creating config file at
+`$HOME/.config/asciinema/config`.
+
+Configuration is split into sections (`[api]`, `[record]`, `[play]`). Here's a
+list of all available options for each section:
+
+```ini
+[api]
+
+; API server URL, default: https://asciinema.org
+; If you run your own instance of asciinema-server then set its address here
+; It can also be overriden by setting ASCIINEMA_API_URL environment variable
+url = https://asciinema.example.com
+
+[record]
+
+; Command to record, default: $SHELL
+command = /bin/bash -l
+
+; Enable stdin (keyboard) recording, default: no
+stdin = yes
+
+; List of environment variables to capture, default: SHELL,TERM
+env = SHELL,TERM,USER
+
+; Limit recorded terminal inactivity to max n seconds, default: off
+idle_time_limit = 2
+
+; Answer "yes" to all interactive prompts, default: no
+yes = true
+
+; Be quiet, suppress all notices/warnings, default: no
+quiet = true
+
+; Define hotkey for pausing recording (suspending capture of output),
+; default: C-\ (control + backslash)
+pause_key = C-p
+
+; Define hotkey for adding a marker, default: none
+add_marker_key = C-x
+
+; Define hotkey prefix key - when defined other recording hotkeys must
+; be preceeded by it, default: no prefix
+prefix_key = C-a
+
+[play]
+
+; Playback speed (can be fractional), default: 1
+speed = 2
+
+; Limit replayed terminal inactivity to max n seconds, default: off
+idle_time_limit = 1
+
+; Define hotkey for pausing/resuming playback,
+; default: space
+pause_key = p
+
+; Define hotkey for stepping through playback, a frame at a time,
+; default: . (dot)
+step_key = s
+
+; Define hotkey for jumping to the next marker,
+; default: ]
+next_marker_key = m
+
+[notifications]
+; Desktop notifications are displayed on certain occasions, e.g. when
+; pausing/resuming the capture of terminal with C-\ keyboard shortcut.
+
+; Should desktop notifications be enabled, default: yes
+enabled = no
+
+; Custom notification command
+; asciinema automatically detects available desktop notification system
+; (notify-send on GNU/Linux, osacript/terminal-notifier on macOS). Custom
+; command can be used if needed.
+; When invoked, environment variable $TEXT contains notification text, while
+; $ICON_PATH contains path to the asciinema logo image.
+command = tmux display-message "$TEXT"
+```
+
+A very minimal config file could look like that:
+
+```ini
+[record]
+idle_time_limit = 2
+```
+
+Config directory location can be changed by setting `$ASCIINEMA_CONFIG_HOME`
+environment variable.
+
+If `$XDG_CONFIG_HOME` is set on Linux then asciinema uses
+`$XDG_CONFIG_HOME/asciinema` instead of `$HOME/.config/asciinema`.
+
+> asciinema versions prior to 1.1 used `$HOME/.asciinema`. If you have it
+> there you should `mv $HOME/.asciinema $HOME/.config/asciinema`.
+
+## Sponsors
+
+asciinema is sponsored by:
+
+- [**Dashcam**](https://dashcam.io?utm_source=asciinemagithub)
+- [Brightbox](https://www.brightbox.com/)
+
+## Consulting
+
+I offer consulting services for asciinema project. See https://asciinema.org/consulting for more information.
+
+## Contributing
+
+If you want to contribute to this project check out
+[Contributing](https://asciinema.org/contributing) page.
+
+## Authors
+
+Developed with passion by [Marcin Kulik](http://ku1ik.com) and great open
+source [contributors](https://github.com/asciinema/asciinema/contributors).
+
+## License
+
+© 2011 Marcin Kulik.
+
+All code is licensed under the GPL, v3 or later. See [LICENSE](./LICENSE) file
+for details.