asciinema - Terminal session recorder 📹

Overview

Note: This is README for development branch. See the version for latest stable release.

asciinema

Build Status PyPI license

Terminal session recorder and the best companion of asciinema.org.

demo

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):

sudo pip3 install asciinema

Record your first session:

asciinema rec first.cast

Now replay it with double speed:

asciinema play -s 2 first.cast

Or with normal speed but with idle time limited to 2 seconds:

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:

asciinema upload first.cast

The above uploads it to asciinema.org, which is a default 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:

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.

Installation

Python package

asciinema is available on PyPI 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.

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.

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:

git clone https://github.com/asciinema/asciinema.git
cd asciinema

If you want latest stable version:

git checkout master

If you want current development version:

git checkout develop

Then run it with:

python3 -m asciinema --version

Docker image

asciinema Docker image is based on Ubuntu 18.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 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 asciinema/asciinema). Another option is to start the container with /bin/bash as the entrypoint, install extra packages and manually start asciinema rec:

docker run --rm -ti -v "$HOME/.config/asciinema":/root/.config/asciinema --entrypoint=/bin/bash asciinema/asciinema
root@6689517d99a1:~# apt-get install foobar
root@6689517d99a1:~# 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 recording of terminal by pressing Ctrl+P. 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 Ctrl+P again.

Recording finishes when you exit the shell (hit Ctrl+D 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 (by default to asciinema.org), where it can be watched and shared.

If the filename argument is given then the resulting recording (called asciicast) is saved to a local file. It can later be replayed with asciinema play and/or uploaded to asciinema server with asciinema upload .

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= - Specify command to record, defaults to $SHELL
  • -e, --env= - List of environment variables to capture, defaults to SHELL,TERM
  • -t, --title=</code> - Specify the title of the asciicast</li> <li><code>-i, --idle-time-limit=<sec></code> - Limit recorded terminal inactivity to max <code><sec></code> seconds</li> <li><code>-y, --yes</code> - Answer "yes" to all prompts (e.g. upload confirmation)</li> <li><code>-q, --quiet</code> - Be quiet, suppress all notices/warnings (implies -y)</li> </ul> <p>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. <a href="https://github.com/asciinema/asciinema-player">asciinema-player</a>) to display pressed keys. Because it's basically a key-logging (scoped to a single shell instance), it's disabled by default, and has to be explicitly enabled via <code>--stdin</code> option.</p> <h3><a id="user-content-play-filename" class="anchor" aria-hidden="true" href="#play-filename"> <svg class="octicon octicon-link" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"> <path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path> </svg></a><code>play <filename></code></h3> <p><strong>Replay recorded asciicast in a terminal.</strong></p> <p>This command replays given asciicast (as recorded by <code>rec</code> command) directly in your terminal.</p> <p>Following keyboard shortcuts are available:</p> <ul> <li><kbd>Space</kbd> - toggle pause,</li> <li><kbd>.</kbd> - step through a recording a frame at a time (when paused),</li> <li><kbd>Ctrl+C</kbd> - exit.</li> </ul> <p>Playing from a local file:</p> <pre><code>asciinema play /path/to/asciicast.cast </code></pre> <p>Playing from HTTP(S) URL:</p> <pre><code>asciinema play https://asciinema.org/a/22124.cast asciinema play http://example.com/demo.cast </code></pre> <p>Playing from asciicast page URL (requires <code><link rel="alternate" type="application/x-asciicast" href="/my/ascii.cast"></code> in page's HTML):</p> <pre><code>asciinema play https://asciinema.org/a/22124 asciinema play http://example.com/blog/post.html </code></pre> <p>Playing from stdin:</p> <pre><code>cat /path/to/asciicast.cast | asciinema play - ssh user@host cat asciicast.cast | asciinema play - </code></pre> <p>Playing from IPFS:</p> <pre><code>asciinema play dweb:/ipfs/QmNe7FsYaHc9SaDEAEXbaagAzNw9cH7YbzN4xV7jV1MCzK/ascii.cast </code></pre> <p>Available options:</p> <ul> <li><code>-i, --idle-time-limit=<sec></code> - Limit replayed terminal inactivity to max <code><sec></code> seconds</li> <li><code>-s, --speed=<factor></code> - Playback speed (can be fractional)</li> </ul> <blockquote> <p>For the best playback experience it is recommended to run <code>asciinema play</code> 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.</p> </blockquote> <h3><a id="user-content-cat-filename" class="anchor" aria-hidden="true" href="#cat-filename"> <svg class="octicon octicon-link" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"> <path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path> </svg></a><code>cat <filename></code></h3> <p><strong>Print full output of recorded asciicast to a terminal.</strong></p> <p>While <code>asciinema play <filename></code> replays the recorded session using timing information saved in the asciicast, <code>asciinema cat <filename></code> dumps the full output (including all escape sequences) to a terminal immediately.</p> <p><code>asciinema cat existing.cast >output.txt</code> gives the same result as recording via <code>asciinema rec --raw output.txt</code>.</p> <h3><a id="user-content-upload-filename" class="anchor" aria-hidden="true" href="#upload-filename"> <svg class="octicon octicon-link" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"> <path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path> </svg></a><code>upload <filename></code></h3> <p><strong>Upload recorded asciicast to asciinema.org site.</strong></p> <p>This command uploads given asciicast (recorded by <code>rec</code> command) to asciinema.org, where it can be watched and shared.</p> <p><code>asciinema rec demo.cast</code> + <code>asciinema play demo.cast</code> + <code>asciinema upload demo.cast</code> is a nice combo if you want to review an asciicast before publishing it on asciinema.org.</p> <h3><a id="user-content-auth" class="anchor" aria-hidden="true" href="#auth"> <svg class="octicon octicon-link" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"> <path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path> </svg></a><code>auth</code></h3> <p><strong>Link your install ID with your asciinema.org user account.</strong></p> <p>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.</p> <p>This command displays the URL to open in a web browser to do that. You may be asked to log in first.</p> <p>Install ID is a random ID (<a href="https://en.wikipedia.org/wiki/Universally_unique_identifier" rel="nofollow">UUID v4</a>) generated locally when you run asciinema for the first time, and saved at <code>$HOME/.config/asciinema/install-id</code>. 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.</p> <blockquote> <p>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 <code>asciinema auth</code> on all of those machines.</p> </blockquote> <blockquote> <p>asciinema versions prior to 2.0 confusingly referred to install ID as "API token".</p> </blockquote> <h2><a id="user-content-hosting-the-recordings-on-the-web" class="anchor" aria-hidden="true" href="#hosting-the-recordings-on-the-web"> <svg class="octicon octicon-link" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"> <path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path> </svg></a>Hosting the recordings on the web</h2> <p>As mentioned in the <code>Usage > rec</code> section above, if the <code>filename</code> argument to <code>asciinema rec</code> is omitted then the recorded asciicast is uploaded to <a href="https://asciinema.org" rel="nofollow">asciinema.org</a>. You can watch it there and share it via secret URL.</p> <p>If you prefer to host the recordings yourself, you can do so by either:</p> <ul> <li>recording to a file (<code>asciinema rec demo.cast</code>), and using <a href="https://github.com/asciinema/asciinema-player#self-hosting-quick-start">asciinema's standalone web player</a> in your HTML page, or</li> <li>setting up your own <a href="https://github.com/asciinema/asciinema-server">asciinema-server</a> instance, and <a href="https://github.com/asciinema/asciinema-server/wiki/Installation-guide#using-asciinema-recorder-with-your-instance">setting API URL accordingly</a>.</li> </ul> <h2><a id="user-content-configuration-file" class="anchor" aria-hidden="true" href="#configuration-file"> <svg class="octicon octicon-link" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"> <path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path> </svg></a>Configuration file</h2> <p>You can configure asciinema by creating config file at <code>$HOME/.config/asciinema/config</code>.</p> <p>Configuration is split into sections (<code>[api]</code>, <code>[record]</code>, <code>[play]</code>). Here's a list of all available options for each section:</p> <div class="highlight highlight-source-ini"> <pre><span class="pl-en">[api]</span> <span class="pl-c"><span class="pl-c">;</span> API server URL, default: https://asciinema.org</span> <span class="pl-c"><span class="pl-c">;</span> If you run your own instance of asciinema-server then set its address here</span> <span class="pl-c"><span class="pl-c">;</span> It can also be overriden by setting ASCIINEMA_API_URL environment variable</span> <span class="pl-k">url</span> = https://asciinema.example.com <span class="pl-en">[record]</span> <span class="pl-c"><span class="pl-c">;</span> Command to record, default: $SHELL</span> <span class="pl-k">command</span> = /bin/bash -l <span class="pl-c"><span class="pl-c">;</span> Enable stdin (keyboard) recording, default: no</span> <span class="pl-k">stdin</span> = yes <span class="pl-c"><span class="pl-c">;</span> List of environment variables to capture, default: SHELL,TERM</span> <span class="pl-k">env</span> = SHELL,TERM,USER <span class="pl-c"><span class="pl-c">;</span> Limit recorded terminal inactivity to max n seconds, default: off</span> <span class="pl-k">idle_time_limit</span> = 2 <span class="pl-c"><span class="pl-c">;</span> Answer "yes" to all interactive prompts, default: no</span> <span class="pl-k">yes</span> = true <span class="pl-c"><span class="pl-c">;</span> Be quiet, suppress all notices/warnings, default: no</span> <span class="pl-k">quiet</span> = true <span class="pl-c"><span class="pl-c">;</span> Define hotkey for pausing recording (suspending capture of output),</span> <span class="pl-c"><span class="pl-c">;</span> default: C-\</span> <span class="pl-k">pause_key</span> = C-p <span class="pl-c"><span class="pl-c">;</span> Define hotkey prefix key - when defined other recording hotkeys must</span> <span class="pl-c"><span class="pl-c">;</span> be preceeded by it, default: no prefix</span> <span class="pl-k">prefix_key</span> = C-a <span class="pl-en">[play]</span> <span class="pl-c"><span class="pl-c">;</span> Playback speed (can be fractional), default: 1</span> <span class="pl-k">speed</span> = 2 <span class="pl-c"><span class="pl-c">;</span> Limit replayed terminal inactivity to max n seconds, default: off</span> <span class="pl-k">idle_time_limit</span> = 1 <span class="pl-c"><span class="pl-c">;</span> Define hotkey for pausing/resuming playback,</span> <span class="pl-c"><span class="pl-c">;</span> default: space</span> <span class="pl-k">pause_key</span> = p <span class="pl-c"><span class="pl-c">;</span> Define hotkey for stepping through playback, a frame at a time,</span> <span class="pl-c"><span class="pl-c">;</span> default: .</span> <span class="pl-k">pause_key</span> = ] <span class="pl-en">[notifications]</span> <span class="pl-c"><span class="pl-c">;</span> Should desktop notifications be enabled, default: yes</span> <span class="pl-k">enabled</span> = no <span class="pl-c"><span class="pl-c">;</span> Custom notification command</span> <span class="pl-c"><span class="pl-c">;</span> Environment variable $TEXT contains notification text</span> <span class="pl-k">command</span> = tmux display-message <span class="pl-s"><span class="pl-pds">"</span>$TEXT<span class="pl-pds">"</span></span></pre> </div> <p>A very minimal config file could look like that:</p> <div class="highlight highlight-source-ini"> <pre><span class="pl-en">[record]</span> <span class="pl-k">idle_time_limit</span> = 2</pre> </div> <p>Config directory location can be changed by setting <code>$ASCIINEMA_CONFIG_HOME</code> environment variable.</p> <p>If <code>$XDG_CONFIG_HOME</code> is set on Linux then asciinema uses <code>$XDG_CONFIG_HOME/asciinema</code> instead of <code>$HOME/.config/asciinema</code>.</p> <blockquote> <p>asciinema versions prior to 1.1 used <code>$HOME/.asciinema</code>. If you have it there you should <code>mv $HOME/.asciinema $HOME/.config/asciinema</code>.</p> </blockquote> <h2><a id="user-content-contributing" class="anchor" aria-hidden="true" href="#contributing"> <svg class="octicon octicon-link" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"> <path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path> </svg></a>Contributing</h2> <p>If you want to contribute to this project check out <a href="https://asciinema.org/contributing" rel="nofollow">Contributing</a> page.</p> <h2><a id="user-content-authors" class="anchor" aria-hidden="true" href="#authors"> <svg class="octicon octicon-link" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"> <path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path> </svg></a>Authors</h2> <p>Developed with passion by <a href="http://ku1ik.com" rel="nofollow">Marcin Kulik</a> and great open source <a href="https://github.com/asciinema/asciinema/contributors">contributors</a>.</p> <h2><a id="user-content-license" class="anchor" aria-hidden="true" href="#license"> <svg class="octicon octicon-link" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"> <path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path> </svg></a>License</h2> <p>Copyright © 2011–2019 Marcin Kulik.</p> <p>All code is licensed under the GPL, v3 or later. See LICENSE file for details.</p> </article> </div> </div> </div> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-7963911354665843" data-ad-slot="9109096810"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> <div id="issues" class="card mt-3"> <div class="card-header"><h5>Comments</h5></div> <div class="card-body"> <div class="review-list"> <ul> <li> <div class="d-flex"> <div class="left"> <span> <img data-original="https://avatars.githubusercontent.com/u/182020?v=4" class="lazy profile-pict-img img-fluid" alt="Bad request for uploads of >4kb recordings under CentOS (Python 3.4)"> </span> </div> <div class="right"> <h4> <a href="https://github.com/asciinema/asciinema/issues/213" rel="nofollow"> Bad request for uploads of >4kb recordings under CentOS (Python 3.4) </a> </h4> <div class="review-description"> <article class="markdown-body text-wrap"> <h3>Bug report</h3> <p><strong>System info:</strong></p> <ul> <li><strong>Version used:</strong> 1.4.0 (1.1.1 also have same issue)</li> <li><strong>OS:</strong> CentOS Linux release 7.3.1611</li> <li><strong>Python version:</strong> Python 3.4.5</li> <li><strong>Install tools:</strong> yum (from EPEL repository)</li> </ul> <p><strong>Steps to reproduce:</strong></p> <ol> <li><code>asciinema upload asciicast.json</code></li> </ol> <p><strong>Expected behavior:</strong></p> <p>File uploaded to asciinema.org</p> <p><strong>Actual behavior:</strong></p> <p>Client print error message:</p> <pre><code>Error: Invalid request: <html><body><h1>400 Bad request</h1> Your browser sent an invalid request. </body></html> </code></pre> <p><strong>Additional info:</strong></p> <p>Client create broken recording if zsh (<code>4.3.11 (x86_64-redhat-linux-gnu)</code> in my case) is used and oh-my-zsh is installed. If oh-my-zsh disabled or bash used as a shell, client create and upload recording without any problems.</p> <p>Recording JSON: https://gist.github.com/andyone/b2a883e8c3795a6ad393a715ff7a41df</p> <span style='padding: .2em .6em .3em;color:#fff;background-color:#e99695'>compatibility</span> <span style='padding: .2em .6em .3em;color:#fff;background-color:#5319e7'>help wanted</span> <span style='padding: .2em .6em .3em;color:#fff;background-color:#fef2c0'>hosting</span>  </article> </div> <span class="publish py-3 d-inline-block w-100"> opened by andyone <i class="fa fa-commenting" aria-hidden="true"></i> 58 </span> </div> </div> </li> <li> <div class="d-flex"> <div class="left"> <span> <img data-original="https://avatars.githubusercontent.com/u/17589?v=4" class="lazy profile-pict-img img-fluid" alt="Decouple terminal recording from asciinema.org"> </span> </div> <div class="right"> <h4> <a href="https://github.com/asciinema/asciinema/issues/70" rel="nofollow"> Decouple terminal recording from asciinema.org </a> </h4> <div class="review-description"> <article class="markdown-body text-wrap"> <p>Recording should not be tied to asciinema.org.</p> <p>You should be able to:</p> <ul> <li>record to a local file with <code>asciinema rec <filename></code>,</li> <li>replay locally (in a terminal) from files with <code>asciinema play <filename></code>,</li> <li>replay locally (in a terminal) from URLs with <code>asciinema play <url></code>,</li> <li>instruct player on asciinema.org to play from external URL?</li> </ul> <p>This is a prerequisite for #49, it is in fact a simpler version of it.</p> <p>Saving/sharing/replaying from a local file means we have to decide on the data format.</p> <p><strong>Requirements for data format:</strong></p> <ul> <li>should include raw stdout data with frame timing + (initial) width/height of the terminal window</li> <li>should be easy to parse and process for <code>asciinema</code> and external tools</li> <li>should allow live streaming</li> <li>should be easy to read/parse by js player itself (so you can point js player directly to URL containing recording in this format)</li> <li>the format should be versioned</li> </ul> <p><strong>Option 1: use current format used by asciinema.org</strong></p> <p>zip file with custom extension (like <code>.asciicast</code> for ex), including 3 files:</p> <ul> <li><code>meta.json</code> - with metadata like width/height of terminal, title, etc</li> <li><code>stdout</code> - raw stdout bytes,</li> <li><code>stdout.timing</code> - timing information.</li> </ul> <p>Current implementation uses these 3 files when uploading the recording to asciinema.org. This however isn't really compatible with live streaming idea and doesn't address all the requirements above.</p> <p><strong>Option 2: new JSON based format</strong></p> <p>With frames inlined, to be used when persisted:</p> <pre><code>{ version: 1, width: 80, height: 24, frames: [<frame>, <frame>, <frame>...] } </code></pre> <p>With frames delegated to an URL, to be used when streaming:</p> <pre><code>{ version: 1, width: 80, height: 24, frames_url: "https://....." or "ws://....." } </code></pre> <p><code>frames_url</code> is a URL to streaming endpoint, either http or websocket.</p> <p>Format of the single frame:</p> <p>JSON isn't suited to store arbitrary binary data in strings and raw stdout output contains lots of non-printable bytes so we should encode them. Base64 or encoding each byte in hex or utf would do.</p> <pre><code>[1.234, "bHMgLWxhIC8="] </code></pre> <p>or</p> <pre><code>{ delay: 1.234, data: "bHMgLWxhIC8=" } </code></pre> <p>Streaming endpoint(s) could be implemented to spit out each new frame in a separate line.</p> </article> </div> <span class="publish py-3 d-inline-block w-100"> opened by sickill <i class="fa fa-commenting" aria-hidden="true"></i> 38 </span> </div> </div> </li> <li> <div class="d-flex"> <div class="left"> <span> <img data-original="https://avatars.githubusercontent.com/u/2679019?v=4" class="lazy profile-pict-img img-fluid" alt="Windows support?"> </span> </div> <div class="right"> <h4> <a href="https://github.com/asciinema/asciinema/issues/150" rel="nofollow"> Windows support? </a> </h4> <div class="review-description"> <article class="markdown-body text-wrap"> <p>A Windows console is a (quirky) ANSI terminal, bound up behind the Windows Console API. Assuming a recorder can be made, the existing asciicast file format should be capable of representing nearly anything a Windows Console application can do. The resulting recording should be as playable as any other.</p> <p>The difficult trick is the recording. Has anyone put any thought or effort into building such a recorder for a Windows console?</p> <p>Would a port of asciinema to Windows be possible?</p> <span style='padding: .2em .6em .3em;color:#fff;background-color:#0e8a16'>feature request</span> <span style='padding: .2em .6em .3em;color:#fff;background-color:#fbca04'>packaging</span>  </article> </div> <span class="publish py-3 d-inline-block w-100"> opened by rberteig <i class="fa fa-commenting" aria-hidden="true"></i> 31 </span> </div> </div> </li> <li> <div class="d-flex"> <div class="left"> <span> <img data-original="https://avatars.githubusercontent.com/u/17462?v=4" class="lazy profile-pict-img img-fluid" alt="Writing to disk in real-time"> </span> </div> <div class="right"> <h4> <a href="https://github.com/asciinema/asciinema/issues/127" rel="nofollow"> Writing to disk in real-time </a> </h4> <div class="review-description"> <article class="markdown-body text-wrap"> <p>Steps to reproduce:</p> <ul> <li>start recording to a file;</li> <li>kill asciinema process (e.g., close the terminal window);</li> <li>try to locate the recording — there is none.</li> </ul> <p>See <a href="https://asciinema.org/a/4tzbj4fmp5f1pl18n0l07d311">the demo</a>.</p> <p>It would be very useful if asciinema flushed the recording file periodically. Unfinished JSON file is easy to fix (<code>asciinema play</code> could do this). The loss of a session recording may be rather disappointing at times.</p> <p>(My dayjob project has long-running system tests. I use asciinema to record their execution, because its web UI allows me to jump to interesting spots and fast-forward the test.)</p> <span style='padding: .2em .6em .3em;color:#fff;background-color:#0e8a16'>feature request</span> <span style='padding: .2em .6em .3em;color:#fff;background-color:#1d76db'>improvement</span>  </article> </div> <span class="publish py-3 d-inline-block w-100"> opened by vvv <i class="fa fa-commenting" aria-hidden="true"></i> 24 </span> </div> </div> </li> <li> <div class="d-flex"> <div class="left"> <span> <img data-original="https://avatars.githubusercontent.com/u/17589?v=4" class="lazy profile-pict-img img-fluid" alt="asciicast format version 2"> </span> </div> <div class="right"> <h4> <a href="https://github.com/asciinema/asciinema/issues/196" rel="nofollow"> asciicast format version 2 </a> </h4> <div class="review-description"> <article class="markdown-body text-wrap"> <p>The ideas behind asciicast v2 format are:</p> <ul> <li>enable live, incremental writing to a file during recording (with v1 format the final recording JSON can only be written as a whole after finishing the recording session),</li> <li>allow the players to start the playback as soon as they read the meta-data line (contrary to v1 format which requires reading the whole file), without need to buffer whole recording in memory,</li> <li>use the same data representation whether you're recording to a file or streaming via UNIX pipe or WebSocket.</li> </ul> <p>Preview of the doc: https://github.com/asciinema/asciinema/blob/v2/doc/asciicast-v2.md</p> </article> </div> <span class="publish py-3 d-inline-block w-100"> opened by sickill <i class="fa fa-commenting" aria-hidden="true"></i> 23 </span> </div> </div> </li> <li> <div class="d-flex"> <div class="left"> <span> <img data-original="https://avatars.githubusercontent.com/u/666493?v=4" class="lazy profile-pict-img img-fluid" alt="Update shebang to use python2"> </span> </div> <div class="right"> <h4> <a href="https://github.com/asciinema/asciinema/issues/10" rel="nofollow"> Update shebang to use python2 </a> </h4> <div class="review-description"> <article class="markdown-body text-wrap"> <p>On archlinux the default <code>python</code> is python 3, so I get something like <code>print: invalid syntax</code> when running <code>asciiio</code>. I'm told the command <code>python2</code> is valid on systems where <code>python</code> points to python 2. Thanks to the fine folks in #archlinux!</p> </article> </div> <span class="publish py-3 d-inline-block w-100"> opened by losingkeys <i class="fa fa-commenting" aria-hidden="true"></i> 23 </span> </div> </div> </li> <li> <div class="d-flex"> <div class="left"> <span> <img data-original="https://avatars.githubusercontent.com/u/22957968?v=4" class="lazy profile-pict-img img-fluid" alt="[Feature request] Record multiple tty at the same time"> </span> </div> <div class="right"> <h4> <a href="https://github.com/asciinema/asciinema/issues/250" rel="nofollow"> [Feature request] Record multiple tty at the same time </a> </h4> <div class="review-description"> <article class="markdown-body text-wrap"> <p>Hi</p> <p>Y'all know asciinema works (or uses) the script command (man script if you don't know it)</p> <p>So the idea would be to add X arguments, being tty paths</p> <p>It will then start recording those two (or more) terminals at the same time</p> <p>After exiting (on the terminal that launched the recording), when pressing enter to upload, it would upload all the record files to the website</p> <p>So the website should also support playing multiple recordings at the same time</p> <p>Displaying all the recorded sessions on one page</p> <p>I doubt much people would need this feature except me tho</p> </article> </div> <span class="publish py-3 d-inline-block w-100"> opened by Bux42 <i class="fa fa-commenting" aria-hidden="true"></i> 16 </span> </div> </div> </li> <li> <div class="d-flex"> <div class="left"> <span> <img data-original="https://avatars.githubusercontent.com/u/31205483?v=4" class="lazy profile-pict-img img-fluid" alt="Upload failed"> </span> </div> <div class="right"> <h4> <a href="https://github.com/asciinema/asciinema/issues/235" rel="nofollow"> Upload failed </a> </h4> <div class="review-description"> <article class="markdown-body text-wrap"> <p>Upload fails with the following error:</p> <pre><code>bash-3.2$ exit exit ~ Asciicast recording finished. ~ Press <Enter> to upload, <Ctrl-C> to cancel. ~ Upload failed: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)> ~ Retry later by running: asciinema upload /var/folders/9g/60yjppb57779f3nrvxzvb_wn5wr3t6/T/tmp3zaagfuf-asciinema.json </code></pre> <p><strong>My Env:</strong> MacOS Sierra - 10.12.4 (16E195)</p> <p>I'm able to play the recording, just that the upload fails. Any feedback or clues to fix this issue?</p> </article> </div> <span class="publish py-3 d-inline-block w-100"> opened by stayingcool <i class="fa fa-commenting" aria-hidden="true"></i> 16 </span> </div> </div> </li> <li> <div class="d-flex"> <div class="left"> <span> <img data-original="https://avatars.githubusercontent.com/u/1029200?v=4" class="lazy profile-pict-img img-fluid" alt="[Error] asciinema needs a UTF-8"> </span> </div> <div class="right"> <h4> <a href="https://github.com/asciinema/asciinema/issues/160" rel="nofollow"> [Error] asciinema needs a UTF-8 </a> </h4> <div class="review-description"> <article class="markdown-body text-wrap"> <p>I'm getting this error in Ubuntu 16.04 64b after adding the ppa and updating. Previously, I had <code>Version: 1.0.16</code> and now I've <code>Version: 1.2.0-1</code>. Previously, it was all working fine. Why does this error show? What are the benefits this check? https://github.com/asciinema/asciinema/blob/master/main.go#L103</p> <pre><code class="language-sh">➔ asciinema --version asciinema needs a UTF-8 native locale to run. Check the output of `locale` command. ➔ locale LANG=en_IN LANGUAGE=en_IN:en LC_CTYPE=en_IN LC_NUMERIC="en_IN" LC_TIME="en_IN" LC_COLLATE="en_IN" LC_MONETARY="en_IN" LC_MESSAGES="en_IN" LC_PAPER="en_IN" LC_NAME="en_IN" LC_ADDRESS="en_IN" LC_TELEPHONE="en_IN" LC_MEASUREMENT="en_IN" LC_IDENTIFICATION="en_IN" LC_ALL= </code></pre> </article> </div> <span class="publish py-3 d-inline-block w-100"> opened by abhisekp <i class="fa fa-commenting" aria-hidden="true"></i> 16 </span> </div> </div> </li> <li> <div class="d-flex"> <div class="left"> <span> <img data-original="https://avatars.githubusercontent.com/u/23648?v=4" class="lazy profile-pict-img img-fluid" alt="Presentation mode, for playing back keystrokes when pressing keys"> </span> </div> <div class="right"> <h4> <a href="https://github.com/asciinema/asciinema/issues/393" rel="nofollow"> Presentation mode, for playing back keystrokes when pressing keys </a> </h4> <div class="review-description"> <article class="markdown-body text-wrap"> <p>This is a bit of a weird request, but asciinema would be extremely useful in presentations if it could play back my keystrokes when I actually pressed keys, to make it look like I'm live-typing.</p> <p>Ie it would record when I pressed keys during the recording, and advance the playback from keystroke to keystroke when I pressed any key on the keyboard.</p> <p>Is this possible to do with the current format/code? If not, what would I need to change to implement this? Any pointers would be appreciated.</p> </article> </div> <span class="publish py-3 d-inline-block w-100"> opened by skorokithakis <i class="fa fa-commenting" aria-hidden="true"></i> 15 </span> </div> </div> </li> <li> <div class="d-flex"> <div class="left"> <span> <img data-original="https://avatars.githubusercontent.com/u/620392?v=4" class="lazy profile-pict-img img-fluid" alt="Upload fails with "Broken Pipe""> </span> </div> <div class="right"> <h4> <a href="https://github.com/asciinema/asciinema/issues/238" rel="nofollow"> Upload fails with "Broken Pipe" </a> </h4> <div class="review-description"> <article class="markdown-body text-wrap"> <p>Hello, I've been able to record & upload sessions before, but last night I started getting an error when uploading:</p> <p><img src="https://user-images.githubusercontent.com/620392/31564083-9813e2bc-b02f-11e7-9cf0-dda4f8d227e7.png" alt="image" /></p> <p>The file is still present at the path shown in the screenshot, and every so often I've tried re-uploading it, but get the same results.</p> <p>My recording was a few minutes long, so I thought maybe it is too big? Here are the relevant stats:</p> <p><img src="https://user-images.githubusercontent.com/620392/31564215-008f2b76-b030-11e7-8990-c4cbd8354ee7.png" alt="image" /></p> <p>Also, my error is not quite the same as the one in https://github.com/asciinema/asciinema/issues/235, but I tried the fix from that issue anyway, with no change.</p> </article> </div> <span class="publish py-3 d-inline-block w-100"> opened by pwoolcoc <i class="fa fa-commenting" aria-hidden="true"></i> 14 </span> </div> </div> </li> <li> <div class="d-flex"> <div class="left"> <span> <img data-original="https://avatars.githubusercontent.com/u/1172317?v=4" class="lazy profile-pict-img img-fluid" alt="upload failed: <urlopen error [SSL: TLSV1_ALERT_INTERNAL_ERROR]"> </span> </div> <div class="right"> <h4> <a href="https://github.com/asciinema/asciinema/issues/530" rel="nofollow"> upload failed: <urlopen error [SSL: TLSV1_ALERT_INTERNAL_ERROR] </a> </h4> <div class="review-description"> <article class="markdown-body text-wrap"> <p><code>rec</code> and <code>play</code> commands are working fine. But upload fails with following error.</p> <pre><code>asciinema: upload failed: <urlopen error [SSL: TLSV1_ALERT_INTERNAL_ERROR] tlsv1 alert internal error (_ssl.c:992)> asciinema: retry later by running: asciinema upload demo.cast </code></pre> <p>Is there issue with ssl library ?</p> <pre><code>❯ python3 -c "import ssl; print(ssl.OPENSSL_VERSION)" OpenSSL 1.1.1q 5 Jul 2022 </code></pre> <ul> <li>installed using pip3 using Python 3.11.1</li> <li>MacOS Catalina 10.15.4</li> </ul> </article> </div> <span class="publish py-3 d-inline-block w-100"> opened by navyad <i class="fa fa-commenting" aria-hidden="true"></i> 1 </span> </div> </div> </li> <li> <div class="d-flex"> <div class="left"> <span> <img data-original="https://avatars.githubusercontent.com/u/304902?v=4" class="lazy profile-pict-img img-fluid" alt="Incorrect rendering of DEC Special Graphics, which is used in ncurses Nethack"> </span> </div> <div class="right"> <h4> <a href="https://github.com/asciinema/asciinema/issues/527" rel="nofollow"> Incorrect rendering of DEC Special Graphics, which is used in ncurses Nethack </a> </h4> <div class="review-description"> <article class="markdown-body text-wrap"> <p><a href="https://en.wikipedia.org/wiki/DEC_Special_Graphics">DEC Special Graphics</a> characters are rendered incorrectly.</p> <p>This can be produced by the following oneliner:</p> <pre><code class="language-sh">python3 -c 'for i in range(95, 127): print(f"{i:x} | \x1b(0{chr(i) * 4}\x1b(B | {i:x}")' </code></pre> <p>https://asciinema.org/a/6wW8RLBjuampesVCrbDUEjX62</p> <p>These characters are used by ncurses Nethack:</p> <p>https://asciinema.org/a/LguWxEd8Sju8Hc6lKtpmLlsX4</p> </article> </div> <span class="publish py-3 d-inline-block w-100"> opened by leonyu <i class="fa fa-commenting" aria-hidden="true"></i> 3 </span> </div> </div> </li> <li> <div class="d-flex"> <div class="left"> <span> <img data-original="https://avatars.githubusercontent.com/u/48565067?v=4" class="lazy profile-pict-img img-fluid" alt="Error when attempting to run using Ubuntu 22.04 with Pip 22.0.2 / Python 3.10"> </span> </div> <div class="right"> <h4> <a href="https://github.com/asciinema/asciinema/issues/526" rel="nofollow"> Error when attempting to run using Ubuntu 22.04 with Pip 22.0.2 / Python 3.10 </a> </h4> <div class="review-description"> <article class="markdown-body text-wrap"> <p>I installed it and tried to run, and it came back with permission error</p> <pre><code>stew@stew /> sudo apt install ascicinema [sudo] password for stew: Reading package lists... Done Building dependency tree... Done Reading state information... Done E: Unable to locate package ascicinema stew@stew / [100]> pip3 install asciinema Defaulting to user installation because normal site-packages is not writeable Collecting asciinema Downloading asciinema-2.2.0-py3-none-any.whl (92 kB) ━━━━━━━━━━━━━━━━━━━━━━━━ 92.5/92.5 KB 558.2 kB/s eta 0:00:00 Installing collected packages: asciinema Successfully installed asciinema-2.2.0 stew@stew /> asciinema rec first.cast asciinema: recording asciicast to first.cast asciinema: press <ctrl-d> or type "exit" when you're done Process Process-2: Traceback (most recent call last): File "/usr/lib/python3.10/multiprocessing/process.py", line 314, in _bootstrap self.run() File "/usr/lib/python3.10/multiprocessing/process.py", line 108, in run self._target(*self._args, **self._kwargs) File "/home/stew/.local/lib/python3.10/site-packages/asciinema/recorder.py", line 141, in run with self.writer as w: File "/home/stew/.local/lib/python3.10/site-packages/asciinema/asciicast/v2.py", line 126, in __enter__ self._open_file() File "/home/stew/.local/lib/python3.10/site-packages/asciinema/asciicast/v2.py", line 156, in _open_file self.file = open( PermissionError: [Errno 13] Permission denied: 'first.cast' Traceback (most recent call last): File "/home/stew/.local/bin/asciinema", line 8, in <module> sys.exit(main()) File "/home/stew/.local/lib/python3.10/site-packages/asciinema/__main__.py", line 215, in main code = command.execute() File "/home/stew/.local/lib/python3.10/site-packages/asciinema/commands/record.py", line 106, in execute recorder.record( File "/home/stew/.local/lib/python3.10/site-packages/asciinema/recorder.py", line 61, in record with async_writer(sync_writer, time_offset, record_stdin) as _writer: File "/home/stew/.local/lib/python3.10/site-packages/asciinema/async_worker.py", line 35, in __exit__ raise RuntimeError( RuntimeError: worker process exited with code 1 </code></pre> </article> </div> <span class="publish py-3 d-inline-block w-100"> opened by StewAlexander-com <i class="fa fa-commenting" aria-hidden="true"></i> 2 </span> </div> </div> </li> <li> <div class="d-flex"> <div class="left"> <span> <img data-original="https://avatars.githubusercontent.com/u/46302524?v=4" class="lazy profile-pict-img img-fluid" alt="Consider including more visual examples?"> </span> </div> <div class="right"> <h4> <a href="https://github.com/asciinema/asciinema/issues/525" rel="nofollow"> Consider including more visual examples? </a> </h4> <div class="review-description"> <article class="markdown-body text-wrap"> <p>Hey, thank you for working on this project! :+1: I was wondering if you would consider updating the <code>asciinema</code> Python documentation on a stand-alone documentation website. I am more than happy to help set up a template documentation site and configure anything Sphinx related. My <em>ulterior</em> motive is that I would be interested in potentially 'upstreaming' some of my <em>documentation</em> to the <code>asciinema</code> project:</p> <ul> <li>https://docs.kai-tub.tech/sphinx_cli_recorder/05_configuration.html (PS I am having issues with changes from my domain provider, if you can't open the page, please ping me)</li> </ul> <p>I am happy to answer any questions/concerns you might have and help you with Sphinx if you haven't used it before. :)</p> <p>Cheers!</p> </article> </div> <span class="publish py-3 d-inline-block w-100"> opened by kai-tub <i class="fa fa-commenting" aria-hidden="true"></i> 0 </span> </div> </div> </li> <li> <div class="d-flex"> <div class="left"> <span> <img data-original="https://avatars.githubusercontent.com/u/8285973?v=4" class="lazy profile-pict-img img-fluid" alt="Feature: Supporting ANSI Sequence OSC-8 (hyperlinks)"> </span> </div> <div class="right"> <h4> <a href="https://github.com/asciinema/asciinema/issues/524" rel="nofollow"> Feature: Supporting ANSI Sequence OSC-8 (hyperlinks) </a> </h4> <div class="review-description"> <article class="markdown-body text-wrap"> <p>If Asciinema is going for completeness, it might be interesting to support hyperlinks. The data is in the <code>.cast</code> files — just not interpreted in the display / rendering.</p> <p><strong>Details</strong>: https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda#the-escape-sequence <strong>Example Cast</strong>: https://asciinema.org/a/MN2bkhHfqvSKK0hiKmnt46qq4</p> <p>Snippet from the example <code>.cast</code> file:</p> <pre><code># Second line: \u001b]8;;<url>\u001b\\<displayText>\u001b]8;; [19.767998, "o", "\u001b]2;cs -r codesearch viper -f config --repos-only\u0007\u001b]1;cs\u0007"] [20.203515, "o", "\u001b[35m\u001b]8;;https://github.com/coxley/codesearch\u001b\\coxley/codesearch\u001b]8;;\u001b\\\u001b[0m\r\n"] </code></pre> </article> </div> <span class="publish py-3 d-inline-block w-100"> opened by coxley <i class="fa fa-commenting" aria-hidden="true"></i> 0 </span> </div> </div> </li> </ul> </div> </div> </div> <div id="releases" class="card mt-3"> <div class="card-header"><h5>Releases(v2.2.0)</h5></div> <div class="card-body"> <div class="review-list"> <ul> <li> <div class="d-flex"> <div class="right"> <h4> v2.2.0(May 7, 2022) </h4> <div class="review-description"> <article class="markdown-body"> <ul> <li>Added official support for Python 3.8, 3.9, 3.10</li> <li>Dropped official support for Python 3.5</li> <li>Added <code>--cols</code> / <code>--rows</code> options for overriding size of pseudo-terminal reported to recorded program</li> <li>Improved behaviour of <code>--append</code> when output file doesn't exist</li> <li>Keyboard input is now explicitly read from a TTY device in addition to stdin (when stdin != TTY)</li> <li>Recorded program output is now explicitly written to a TTY device instead of stdout</li> <li>Dash char (<code>-</code>) can now be passed as output filename to write asciicast to stdout</li> <li>Diagnostic messages are now printed to stderr (without colors when stderr != TTY)</li> <li>Improved robustness of writing asciicast to named pipes</li> <li>Lots of codebase modernizations (many thanks to Davis @djds Schirmer!)</li> <li>Many other internal refactorings</li> </ul> <i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/asciinema/asciinema/tarball/v2.2.0">Source code(tar.gz)</a><br><i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/asciinema/asciinema/zipball/v2.2.0">Source code(zip)</a><br> </article> </div> </div> </div> </li> <li> <div class="d-flex"> <div class="right"> <h4> v2.1.0(Oct 3, 2021) </h4> <div class="review-description"> <article class="markdown-body"> <ul> <li>Ability to pause/resume terminal capture with <code>C-\</code> key shortcut</li> <li>Desktop notifications - only for the above pause feature at the moment</li> <li>Removed dependency on tput/ncurses (thanks @arp242 / Martin Tournoij!)</li> <li>ASCIINEMA_REC env var is back (thanks @landonb / Landon Bouma!)</li> <li>Terminal answerbacks (CSI 6 n) in <code>asciinema cat</code> are now hidden (thanks @djpohly / Devin J. Pohly!)</li> <li>Codeset detection works on HP-UX now (thanks @michael-o / Michael Osipov!)</li> <li>Attempt at recording to existing file suggests use of <code>--overwrite</code> option now</li> <li>Upload for users with very long <code>$USER</code> is fixed</li> <li>Added official support for Python 3.8 and 3.9</li> <li>Dropped official support for EOL-ed Python 3.4 and 3.5</li> <li>Internal refactorings</li> </ul> <i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/asciinema/asciinema/tarball/v2.1.0">Source code(tar.gz)</a><br><i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/asciinema/asciinema/zipball/v2.1.0">Source code(zip)</a><br> </article> </div> </div> </div> </li> <li> <div class="d-flex"> <div class="right"> <h4> v2.0.2(Sep 8, 2019) </h4> <div class="review-description"> <article class="markdown-body"> <ul> <li>Official support for Python 3.7</li> <li>Recording is now possible on US-ASCII locale (thanks Jean-Philippe @jpouellet Ouellet!)</li> <li>Improved Android support (thanks Fredrik @fornwall Fornwall!)</li> <li>Possibility of programatic recording with <code>asciinema.record_asciicast</code> function</li> <li>Uses new JSON response format added recently to asciinema-server</li> <li>Tweaked message about how to stop recording (thanks Bachynin @vanyakosmos Ivan!)</li> <li>Added proper description and other metadata to Python package (thanks @Crestwave!)</li> </ul> <i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/asciinema/asciinema/tarball/v2.0.2">Source code(tar.gz)</a><br><i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/asciinema/asciinema/zipball/v2.0.2">Source code(zip)</a><br> </article> </div> </div> </div> </li> <li> <div class="d-flex"> <div class="right"> <h4> v2.0.1(Apr 4, 2018) </h4> <div class="review-description"> <article class="markdown-body"> <p>This is a minor bugfix release.</p> <ul> <li>Fixed example in asciicast v2 format doc (thanks Josh "@anowlcalledjosh" Holland!)</li> <li>Replaced deprecated <code>encodestring</code> (since Python 3.1) with <code>encodebytes</code> (thanks @delirious-lettuce!)</li> <li>Fixed location of config dir (you can <code>mv ~/.asciinema ~/.config/asciinema</code>)</li> <li>Internal refactorings</li> </ul> <i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/asciinema/asciinema/tarball/v2.0.1">Source code(tar.gz)</a><br><i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/asciinema/asciinema/zipball/v2.0.1">Source code(zip)</a><br> </article> </div> </div> </div> </li> <li> <div class="d-flex"> <div class="right"> <h4> v2.0.0(Feb 12, 2018) </h4> <div class="review-description"> <article class="markdown-body"> <p>This major release brings many new features, improvements and bugfixes. The most notable ones:</p> <ul> <li>new <a href="doc/asciicast-v2.md">asciicast v2 file format</a></li> <li>recording and playback of arbitrarily long session with minimal memory usage</li> <li>ability to live-stream via UNIX pipe: <code>asciinema rec unix.pipe</code> + <code>asciinema play unix.pipe</code> in second terminal tab/window</li> <li>optional stdin recording (<code>asciinema rec --stdin</code>)</li> <li>appending to existing recording (<code>asciinema rec --append <filename></code>)</li> <li>raw recording mode, storing only stdout bytes (<code>asciinema rec --raw <filename></code>)</li> <li>environment variable white-listing (<code>asciinema rec --env="VAR1,VAR2..."</code>)</li> <li>toggling pause in <code>asciinema play</code> by <kbd>Space</kbd></li> <li>stepping through a recording one frame at a time with <kbd>.</kbd> (when playback paused)</li> <li>new <code>asciinema cat <filename></code> command to dump full output of the recording</li> <li>playback from new IPFS URL scheme: <code>dweb:/ipfs/</code> (replaces <code>fs:/</code>)</li> <li>lots of other bugfixes and improvements</li> <li>dropped official support for Python 3.3 (although it still works on 3.3)</li> </ul> <i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/asciinema/asciinema/tarball/v2.0.0">Source code(tar.gz)</a><br><i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/asciinema/asciinema/zipball/v2.0.0">Source code(zip)</a><br> </article> </div> </div> </div> </li> <li> <div class="d-flex"> <div class="right"> <h4> v1.4.0(Feb 10, 2018) </h4> <div class="review-description"> <article class="markdown-body"> <ul> <li>Dropped distutils fallback in setup.py - setuptools required now (thanks Jakub "@jakubjedelsky" Jedelsky!)</li> <li>Dropped official support for Python 3.2 (although it still works on 3.2)</li> <li>New <code>--speed</code> option for <code>asciinema play</code> (thanks Bastiaan "@bastiaanb" Bakker!)</li> <li>Ability to set API token via <code>ASCIINEMA_API_TOKEN</code> env variable (thanks Samantha "@samdmarshall" Marshall!)</li> <li>Improved shutdown on more signals: CHLD, HUP, TERM, QUIT (thanks Richard "@typerlc"!)</li> <li>Fixed stdin handling during playback via <code>asciinema play</code></li> </ul> <i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/asciinema/asciinema/tarball/v1.4.0">Source code(tar.gz)</a><br><i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/asciinema/asciinema/zipball/v1.4.0">Source code(zip)</a><br> </article> </div> </div> </div> </li> <li> <div class="d-flex"> <div class="right"> <h4> v1.3.0(Feb 10, 2018) </h4> <div class="review-description"> <article class="markdown-body"> <p>This release brings back the original Python implementation of asciinema. It's based on 0.9.8 codebase and adds all features and bug fixes that have been implemented in asciinema's Go version between 0.9.8 and 1.2.0.</p> <p>Other notable changes:</p> <ul> <li>Zero dependencies! (other than Python 3)</li> <li>Fixed crash when resizing terminal window during recording (#167)</li> <li>Fixed upload from IPv6 hosts (#94)</li> <li>Improved UTF-8 charset detection (#160)</li> <li><code>-q/--quiet</code> option can be saved in config file now</li> <li>Final "logout" (produced by csh) is now removed from recorded stdout</li> <li><code>rec</code> command now tries to write to target path before starting recording</li> </ul> <i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/asciinema/asciinema/tarball/v1.3.0">Source code(tar.gz)</a><br><i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/asciinema/asciinema/zipball/v1.3.0">Source code(zip)</a><br> </article> </div> </div> </div> </li> <li> <div class="d-flex"> <div class="right"> <h4> v1.2.0(Feb 22, 2016) </h4> <div class="review-description"> <article class="markdown-body"> <ul> <li>Added playback from stdin: <code>cat demo.json | asciinema play -</code></li> <li>Added playback from IPFS: <code>asciinema play ipfs:/ipfs/QmcdXYJp6e4zNuimuGeWPwNMHQdxuqWmKx7NhZofQ1nw2V</code></li> <li>Added playback from asciicast page URL: <code>asciinema play https://asciinema.org/a/22124</code></li> <li><code>-q/--quiet</code> option added to <code>rec</code> command</li> <li>Fixed handling of partial UTF-8 sequences in recorded stdout</li> <li>Final "exit" is now removed from recorded stdout</li> <li>Longer operations like uploading/downloading show "spinner"</li> </ul> <i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/asciinema/asciinema/tarball/v1.2.0">Source code(tar.gz)</a><br><i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/asciinema/asciinema/zipball/v1.2.0">Source code(zip)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.2.0/asciinema-1.2.0-darwin-386.tar.gz">asciinema-1.2.0-darwin-386.tar.gz(2.51 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.2.0/asciinema-1.2.0-darwin-amd64.tar.gz">asciinema-1.2.0-darwin-amd64.tar.gz(2.71 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.2.0/asciinema-1.2.0-freebsd-386.tar.gz">asciinema-1.2.0-freebsd-386.tar.gz(2.54 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.2.0/asciinema-1.2.0-freebsd-amd64.tar.gz">asciinema-1.2.0-freebsd-amd64.tar.gz(2.72 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.2.0/asciinema-1.2.0-linux-386.tar.gz">asciinema-1.2.0-linux-386.tar.gz(2.54 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.2.0/asciinema-1.2.0-linux-amd64.tar.gz">asciinema-1.2.0-linux-amd64.tar.gz(2.73 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.2.0/asciinema-1.2.0-linux-arm.tar.gz">asciinema-1.2.0-linux-arm.tar.gz(2.44 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.2.0/sha1sum.txt">sha1sum.txt(537 bytes)</a><br> </article> </div> </div> </div> </li> <li> <div class="d-flex"> <div class="right"> <h4> v1.1.1(Jun 21, 2015) </h4> <div class="review-description"> <article class="markdown-body"> <ul> <li>Fixed putting terminal in raw mode (fixes ctrl-o in nano)</li> </ul> <i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/asciinema/asciinema/tarball/v1.1.1">Source code(tar.gz)</a><br><i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/asciinema/asciinema/zipball/v1.1.1">Source code(zip)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.1.1/asciinema-1.1.1-darwin-386.tar.gz">asciinema-1.1.1-darwin-386.tar.gz(1.86 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.1.1/asciinema-1.1.1-darwin-amd64.tar.gz">asciinema-1.1.1-darwin-amd64.tar.gz(2.00 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.1.1/asciinema-1.1.1-freebsd-386.tar.gz">asciinema-1.1.1-freebsd-386.tar.gz(1.87 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.1.1/asciinema-1.1.1-freebsd-amd64.tar.gz">asciinema-1.1.1-freebsd-amd64.tar.gz(2.00 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.1.1/asciinema-1.1.1-linux-386.tar.gz">asciinema-1.1.1-linux-386.tar.gz(1.88 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.1.1/asciinema-1.1.1-linux-amd64.tar.gz">asciinema-1.1.1-linux-amd64.tar.gz(2.00 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.1.1/asciinema-1.1.1-linux-arm.tar.gz">asciinema-1.1.1-linux-arm.tar.gz(1.82 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.1.1/sha1sum.txt">sha1sum.txt(537 bytes)</a><br> </article> </div> </div> </div> </li> <li> <div class="d-flex"> <div class="right"> <h4> v1.1.0(May 25, 2015) </h4> <div class="review-description"> <article class="markdown-body"> <ul> <li><code>--max-wait</code> option is now also available for <code>play</code> command</li> <li>Added support for compilation on FreeBSD</li> <li>Improved locale/charset detection</li> <li>Improved upload error messages</li> <li>New config file location (with backwards compatibility)</li> </ul> <i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/asciinema/asciinema/tarball/v1.1.0">Source code(tar.gz)</a><br><i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/asciinema/asciinema/zipball/v1.1.0">Source code(zip)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.1.0/asciinema-1.1.0-darwin-386.tar.gz">asciinema-1.1.0-darwin-386.tar.gz(1.86 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.1.0/asciinema-1.1.0-darwin-amd64.tar.gz">asciinema-1.1.0-darwin-amd64.tar.gz(2.00 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.1.0/asciinema-1.1.0-linux-386.tar.gz">asciinema-1.1.0-linux-386.tar.gz(1.88 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.1.0/asciinema-1.1.0-linux-amd64.tar.gz">asciinema-1.1.0-linux-amd64.tar.gz(2.00 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.1.0/asciinema-1.1.0-linux-arm.tar.gz">asciinema-1.1.0-linux-arm.tar.gz(1.82 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.1.0/sha1sum.txt">sha1sum.txt(381 bytes)</a><br> </article> </div> </div> </div> </li> <li> <div class="d-flex"> <div class="right"> <h4> v1.0.0(Mar 12, 2015) </h4> <div class="review-description"> <article class="markdown-body"> <ul> <li><code>--max-wait</code> and <code>--yes</code> options can be saved in config file</li> <li>Support for displaying warning messages returned from API</li> <li>Also, see the CHANGELOG for 1.0.0 release candidates</li> </ul> <p>Blog post summing up this release: http://blog.asciinema.org/post/one-point-o/</p> <i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/asciinema/asciinema/tarball/v1.0.0">Source code(tar.gz)</a><br><i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/asciinema/asciinema/zipball/v1.0.0">Source code(zip)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.0.0/asciinema-1.0.0-darwin-386.tar.gz">asciinema-1.0.0-darwin-386.tar.gz(1.86 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.0.0/asciinema-1.0.0-darwin-amd64.tar.gz">asciinema-1.0.0-darwin-amd64.tar.gz(1.99 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.0.0/asciinema-1.0.0-linux-386.tar.gz">asciinema-1.0.0-linux-386.tar.gz(1.88 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.0.0/asciinema-1.0.0-linux-amd64.tar.gz">asciinema-1.0.0-linux-amd64.tar.gz(2.00 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.0.0/asciinema-1.0.0-linux-arm.tar.gz">asciinema-1.0.0-linux-arm.tar.gz(1.82 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.0.0/sha1sum.txt">sha1sum.txt(381 bytes)</a><br> </article> </div> </div> </div> </li> <li> <div class="d-flex"> <div class="right"> <h4> v1.0.0.rc2(Mar 8, 2015) </h4> <div class="review-description"> <article class="markdown-body"> <ul> <li>All dependencies are now vendored in Godeps dir</li> <li>Help message includes all commands with their possible options</li> <li><code>-y</code> and <code>-t</code> options have longer alternatives: <code>--yes</code>, <code>--title</code></li> <li><code>--max-wait</code> option has shorter alternative: <code>-w</code></li> <li>Import paths changed to <code>github.com/asciinema/asciinema</code> due to repository renaming</li> <li><code>-y</code> also suppresess "please resize terminal" prompt</li> </ul> <i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/asciinema/asciinema/tarball/v1.0.0.rc2">Source code(tar.gz)</a><br><i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/asciinema/asciinema/zipball/v1.0.0.rc2">Source code(zip)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.0.0.rc2/asciinema-1.0.0.rc2-darwin-386.tar.gz">asciinema-1.0.0.rc2-darwin-386.tar.gz(1.85 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.0.0.rc2/asciinema-1.0.0.rc2-darwin-amd64.tar.gz">asciinema-1.0.0.rc2-darwin-amd64.tar.gz(1.99 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.0.0.rc2/asciinema-1.0.0.rc2-linux-386.tar.gz">asciinema-1.0.0.rc2-linux-386.tar.gz(1.87 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.0.0.rc2/asciinema-1.0.0.rc2-linux-amd64.tar.gz">asciinema-1.0.0.rc2-linux-amd64.tar.gz(1.99 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.0.0.rc2/asciinema-1.0.0.rc2-linux-arm.tar.gz">asciinema-1.0.0.rc2-linux-arm.tar.gz(1.81 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.0.0.rc2/sha1sum.txt">sha1sum.txt(401 bytes)</a><br> </article> </div> </div> </div> </li> <li> <div class="d-flex"> <div class="right"> <h4> v1.0.0.rc1(Mar 2, 2015) </h4> <div class="review-description"> <article class="markdown-body"> <p>This RC introduces <a href="doc/asciicast-v1.md">new asciicast file format</a> and adds ability to record to a local file with <code>asciinema rec demo.json</code>. Locally saved recording can be replayed in terminal with <code>asciinema play demo.json</code>, and uploaded to asciinema.org with <code>asciinema upload demo.json</code>. See <a href="https://github.com/asciinema/asciinema-cli">README</a> for description of these new commands.</p> <p><code>asciinema rec</code> without filename argument works as before - uploads to asciinema.org after asking for confirmation. However, asciicast is saved to a tmp file before uploading, allowing user to retry upload later with <code>asciinema upload /tmp/path/to/asciicast.json</code> in case of upload error (like network connection issue etc).</p> <p>There are other smaller improvements in this version, see the changelog.</p> <p>When testing please pay special attention to national characters, or any non-ascii characters - recording relies on UTF-8 exclusively now, and the saved/uploaded file is JSON file with all stdout data encoded in JSON strings.</p> <p>Download RC1 binary for your os/arch below:</p> <i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/asciinema/asciinema/tarball/v1.0.0.rc1">Source code(tar.gz)</a><br><i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/asciinema/asciinema/zipball/v1.0.0.rc1">Source code(zip)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.0.0.rc1/asciinema-1.0.0.rc1-darwin-386.tar.gz">asciinema-1.0.0.rc1-darwin-386.tar.gz(1.73 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.0.0.rc1/asciinema-1.0.0.rc1-darwin-amd64.tar.gz">asciinema-1.0.0.rc1-darwin-amd64.tar.gz(1.86 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.0.0.rc1/asciinema-1.0.0.rc1-linux-386.tar.gz">asciinema-1.0.0.rc1-linux-386.tar.gz(1.75 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.0.0.rc1/asciinema-1.0.0.rc1-linux-amd64.tar.gz">asciinema-1.0.0.rc1-linux-amd64.tar.gz(1.86 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.0.0.rc1/asciinema-1.0.0.rc1-linux-arm.tar.gz">asciinema-1.0.0.rc1-linux-arm.tar.gz(1.70 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v1.0.0.rc1/sha1sum.txt">sha1sum.txt(401 bytes)</a><br> </article> </div> </div> </div> </li> <li> <div class="d-flex"> <div class="right"> <h4> v0.9.9(Dec 17, 2014) </h4> <div class="review-description"> <article class="markdown-body"> <p>See <a href="https://github.com/asciinema/asciinema-cli/blob/e7c6623b6bbc504c512ebafbcfa3afb1a6c348db/CHANGELOG.md">CHANGELOG</a> for details.</p> <i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/asciinema/asciinema/tarball/v0.9.9">Source code(tar.gz)</a><br><i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/asciinema/asciinema/zipball/v0.9.9">Source code(zip)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v0.9.9/asciinema-0.9.9-darwin-386.tar.gz">asciinema-0.9.9-darwin-386.tar.gz(1.73 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v0.9.9/asciinema-0.9.9-darwin-amd64.tar.gz">asciinema-0.9.9-darwin-amd64.tar.gz(1.85 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v0.9.9/asciinema-0.9.9-linux-386.tar.gz">asciinema-0.9.9-linux-386.tar.gz(1.74 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v0.9.9/asciinema-0.9.9-linux-amd64.tar.gz">asciinema-0.9.9-linux-amd64.tar.gz(1.85 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v0.9.9/asciinema-0.9.9-linux-arm.tar.gz">asciinema-0.9.9-linux-arm.tar.gz(1.69 MB)</a><br><i class="fa fa-codepen m-r-xs" aria-hidden="true"></i><a href="https://github.com/asciinema/asciinema/releases/download/v0.9.9/sha1sum.txt">sha1sum.txt(381 bytes)</a><br> </article> </div> </div> </div> </li> </ul> </div> </div> </div> </div> <div class="col-lg-4 right"> <div id="basic" class="tab-pane fade show active"> <div class="box shadow-sm rounded bg-white mb-3"> <div class="box-title border-bottom p-3"> <h6 class="m-0">Owner </h6> </div> <div class="d-flex align-items-center p-3 job-item-header"> <div class="overflow-hidden mr-2"> <h6 class="font-weight-bold -dark mb-0 text-truncate"> asciinema </h6> <div class="small text-gray-500"> Record and share your terminal sessions, the right way. </div> </div> <img class="img-fluid ml-auto" style="border-radius: 50%;" src="https://avatars.githubusercontent.com/u/6506055?v=4&s=60" alt="asciinema"> </div> <div class="box-body p-3"> <a href="https://github.com/asciinema/asciinema" rel="nofollow" target="_blank" class="btn btn-lg btn-block btn-info mb-3"><i class="fa fa-github" aria-hidden="true"></i> GitHub </a> <a href="https://asciinema.org" rel="nofollow" target="_blank" class="btn btn-lg btn-block btn-dark mb-3"><i class="fa fa-home" aria-hidden="true"></i> https://asciinema.org</a> </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/tony-tmuxp-python-command-line-tools"><h6 class="font-weight-bold ">:computer: tmux session manager. built on libtmux</h6></a> <p class="mb-0 text-muted">tmuxp, tmux session manager. built on libtmux. We need help! tmuxp is a trusted session manager for tmux. If you could lend your time to helping answe</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/37234308?v=4&s=40" alt="python utilities for tmux" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 3.6k <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Jan 1, 2023 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/laixintao-iredis-python-command-line-tools"><h6 class="font-weight-bold ">Interactive Redis: A Terminal Client for Redis with AutoCompletion and Syntax Highlighting.</h6></a> <p class="mb-0 text-muted">Interactive Redis: A Cli for Redis with AutoCompletion and Syntax Highlighting. IRedis is a terminal client for redis with auto-completion and syntax </p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/9675939?v=4&s=40" alt="null" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 2.2k <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Dec 29, 2022 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/dbcli-mycli-python-command-line-tools"><h6 class="font-weight-bold ">A Terminal Client for MySQL with AutoCompletion and Syntax Highlighting.</h6></a> <p class="mb-0 text-muted">mycli A command line client for MySQL that can do auto-completion and syntax highlighting. HomePage: http://mycli.net Documentation: http://mycli.net/</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/11810727?v=4&s=40" alt="dbcli" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 10.7k <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Jan 7, 2023 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/lvoogdt-ehh"><h6 class="font-weight-bold ">Python commandline tool for remembering linux/terminal commands</h6></a> <p class="mb-0 text-muted">ehh Remember linux commands Commandline tool for remembering linux/terminal commands. It stores your favorite commands in ~/ehh.json in your homedir a</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/168357?v=4&s=40" alt="null" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 56 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Nov 10, 2022 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/chvolkmann-code-connect"><h6 class="font-weight-bold ">Open a file in your locally running Visual Studio Code instance from arbitrary terminal connections.</h6></a> <p class="mb-0 text-muted">code-connect Open a file in your locally running Visual Studio Code instance from arbitrary terminal connections. Motivation VS Code supports opening </p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/15794071?v=4&s=40" alt="Christian Volkmann" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 56 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Nov 19, 2022 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/josh0xA-darkdump"><h6 class="font-weight-bold ">Darkdump - Search The Deep Web Straight From Your Terminal</h6></a> <p class="mb-0 text-muted">Darkdump - Search The Deep Web Straight From Your Terminal About Darkdump Darkdump is a simple script written in Python3.9 in which it allows users to</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/29878743?v=4&s=40" alt="Josh Schiavone" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 264 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Dec 30, 2022 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/sparky8512-starlink-grpc-tools"><h6 class="font-weight-bold ">Random scripts and other bits for interacting with the SpaceX Starlink user terminal hardware</h6></a> <p class="mb-0 text-muted">starlink-grpc-tools This repository has a handful of tools for interacting with the gRPC service implemented on the Starlink user terminal (AKA "the d</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/76499194?v=4&s=40" alt="null" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 270 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Dec 29, 2022 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/willmcgugan-rich-python-command-line-tools"><h6 class="font-weight-bold ">Rich is a Python library for rich text and beautiful formatting in the terminal.</h6></a> <p class="mb-0 text-muted">The Rich API makes it easy to add color and style to terminal output. Rich can also render pretty tables, progress bars, markdown, syntax highlighted source code, tracebacks, and more — out of the box.</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/554369?v=4&s=40" alt="Will McGugan" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 41.4k <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Jan 3, 2023 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/davidbrochart-nbterm-python-command-line-tools"><h6 class="font-weight-bold ">Lets you view, edit and execute Jupyter Notebooks in the terminal.</h6></a> <p class="mb-0 text-muted">Lets you view, edit and execute Jupyter Notebooks in the terminal.</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/4711805?v=4&s=40" alt="David Brochart" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 684 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Dec 28, 2022 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/gojuukaze-terminal_layout-python-command-line-tools"><h6 class="font-weight-bold ">The project help you to quickly build layouts in terminal,cross-platform</h6></a> <p class="mb-0 text-muted">The project help you to quickly build layouts in terminal,cross-platform</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/15613304?v=4&s=40" alt="gojuukaze" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 133 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Nov 30, 2022 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/timeopochin-GanTTY-python-command-line-tools"><h6 class="font-weight-bold "> GanTTY - Project planning from the terminal</h6></a> <p class="mb-0 text-muted"> GanTTY - Project planning from the terminal</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/22426786?v=4&s=40" alt="Timeo Sam Pochin" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 161 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Dec 26, 2022 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/DenverCoder1-table2ascii-python-command-line-tools"><h6 class="font-weight-bold ">Module for converting 2D Python lists to fancy ASCII tables. Table2Ascii lets you display pretty tables in the terminal and on Discord.</h6></a> <p class="mb-0 text-muted">table2ascii Module for converting 2D Python lists to a fancy ASCII/Unicode tables table2ascii ?? Installation ??‍?? Usage Convert lists to ASCII table</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/20955511?v=4&s=40" alt="Jonah Lawrence" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 40 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Jan 3, 2023 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/nmeum-saneterm-python-command-line-tools"><h6 class="font-weight-bold ">Modern line-oriented terminal emulator without support for TUIs.</h6></a> <p class="mb-0 text-muted">Modern line-oriented terminal emulator without support for TUIs.</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/2326560?v=4&s=40" alt="null" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 10 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Jun 12, 2022 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/NinjaSnail1080-nano-terminal-wallet"><h6 class="font-weight-bold ">A super simple wallet application for the NANO cryptocurrency that runs in the terminal</h6></a> <p class="mb-0 text-muted">Nano Terminal Wallet A super simple wallet application for the NANO cryptocurrency that runs in the terminal Written in 2021 by NinjaSnail1080 (Discor</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/38820548?v=4&s=40" alt="null" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 9 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Jul 22, 2022 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/SpEcHiDe-UploadGram-python-command-line-tools"><h6 class="font-weight-bold ">uploadgram uses your Telegram account to upload files up to 2GiB, from the Terminal.</h6></a> <p class="mb-0 text-muted">uploadgram uploadgram uses your Telegram account to upload files up to 2GiB, from the Terminal. Heavily inspired by the telegram-upload Installing: pi</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/6317196?v=4&s=40" alt="Shrimadhav U K" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 97 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Jan 6, 2023 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/jarun-ddgr-python-command-line-tools"><h6 class="font-weight-bold ">ddgr is a cmdline utility to search DuckDuckGo (html version) from the terminal</h6></a> <p class="mb-0 text-muted">ddgr is a cmdline utility to search DuckDuckGo (html version) from the terminal. While googler is extremely popular among cmdline users, in many forums the need of a similar utility for privacy-aware DuckDuckGo came up. DuckDuckGo Bangs are super-cool too! So here's ddgr for you!</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/5959286?v=4&s=40" alt="Piña Colada" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 2.5k <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Dec 25, 2022 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/stark0de-ippsec-cli-python-command-line-tools"><h6 class="font-weight-bold ">This a simple tool to query the awesome ippsec.rocks website from your terminal</h6></a> <p class="mb-0 text-muted">ippsec-cli This a simple tool to query the awesome ippsec.rocks website from your terminal Installation and usage cd /opt git clone https://github.com</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/53110298?v=4&s=40" alt="stark0de" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 5 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Nov 26, 2022 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/cgraphite-fileshare"><h6 class="font-weight-bold ">💥 Share files easily over your local network from the terminal!</h6></a> <p class="mb-0 text-muted">Fileshare ?? Share files easily over your local network from the terminal! ?? Installation # clone the repo $ git clone https://github.com/dopevog/fil</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/82938580?v=4&s=40" alt="Dopevog" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 11 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Sep 10, 2021 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/apoclyps-reviews-python-command-line-tools"><h6 class="font-weight-bold ">A terminal UI dashboard to monitor requests for code review across Github and Gitlab repositories.</h6></a> <p class="mb-0 text-muted">A terminal UI dashboard to monitor requests for code review across Github and Gitlab repositories.</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/1443700?v=4&s=40" alt="Kyle Harrison" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 150 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Dec 14, 2022 </div> </div> </div> </div> </div> </div> <!-- footer --> <footer class="bg-white"> <div class="container"> <div class="copyright"> <div class="logo"> <a href="/"> <img src="/assets/images/logo_pythonrepo.png"> </a> </div> <p>2022.PythonRepo </p> </div> </div> </footer> <!-- footer--> <!-- Bootstrap core JavaScript --> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js" integrity="sha512-bnIvzh6FU75ZKxp0GXLH9bewza/OIw6dLVh9ICg0gogclmYGguQJWl8U30WpbsGTqbIiAwxTsbe76DErLq5EDQ==" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.bundle.min.js" integrity="sha512-Oy5BruJdE3gP9+LMJ11kC5nErkh3p4Y0GawT1Jrcez4RTDxODf3M/KP3pEsgeOYxWejqy2SPnj+QMpgtvhDciQ==" crossorigin="anonymous"></script> <!-- select2 Js --> <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.min.js" integrity="sha512-2ImtlRlf2VVmiGZsjm9bEyhjGW4dU7B6TNwh/hx/iSByxNENtj3WVE6o/9Lj4TJeVXPi4bnOIMXFIJJAeufa0A==" crossorigin="anonymous"></script> <!-- Custom --> <script src="/assets/js/custom.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.lazyload/1.9.1/jquery.lazyload.min.js"></script> <script> $(function() { $("img.lazy").lazyload({ threshold :180, failurelimit :20, effect : "fadeIn" }); }); </script> <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script> <script> hljs.initHighlightingOnLoad(); </script> </body> </html><script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="1ac07a2b2ba7b2d3e06a694a-|49" defer></script>