# atmos cast record

Use this command to interpret a [VHS](https://github.com/charmbracelet/vhs)-dialect `.tape` file directly into an asciicast recording — an ad hoc entry point for a one-off tape with no workflow YAML at all. It reuses the exact same interpreter as a `type: cast` step's `tape` and `source` fields (see [`type: cast`](/steps/type/cast#tape-interpretation)); `record` is the missing third verb alongside `play` and `render`: it takes a `.tape` and produces a `.cast` (optionally rendered further), the inverse direction of `render`.

## Usage

```shell
atmos cast record <input.tape> --output=<path> [--format=<fmt>] [--mode=<session|steps>] [--shell=<command>] [--shell-init=<clean|user|path>]
```

## Arguments

- **`input.tape`**
  **Required.**
   Path to the VHS-dialect tape file to interpret.

## Flags

- **`--output`, `-o`**
  **Required.**
   Write the recording (or rendered artifact) to this path. A 
  `.cast`
   extension keeps the raw recording; any other supported extension (
  `.gif`
  , 
  `.mp4`
  , 
  `.html`
  , 
  `.ascii`
  , 
  `.png`
  , 
  `.jpg`
  /
  `.jpeg`
  ) records to a temporary 
  `.cast`
   first, renders it here, and removes the temporary file. An existing file at this path is overwritten on rerun. The tape's own 
  `Output`
   directives are honored in addition to this flag, so one run can write several artifacts.
- **`--format`, `-f`**
  Output format (
  `cast`
  , 
  `gif`
  , 
  `mp4`
  , 
  `html`
  , 
  `ascii`
  , 
  `png`
  , 
  `jpg`
  , 
  `jpeg`
  ). Optional when 
  `--output`
  's extension already identifies the format. When the extension is a recognized one, 
  `--format`
   must agree with it in both directions, so 
  `--output=demo.gif --format=cast`
   is an error. Use 
  `--format`
   to pick the format for an output path whose extension does not identify one.
- **`--mode`**
  Cast mode: 
  `session`
   (default) or 
  `steps`
  . Defaults to 
  `session`
   — the opposite of 
  `type: cast`
  's own default — since a bare 
  `.tape`
   handed to the CLI is almost always meant to replay as an actual VHS-style session, which commonly includes raw keypresses that only 
  `mode: session`
   supports. Use 
  `--mode=steps`
   for a tape that only types shell commands, to get real per-command exit codes; the command errors if the tape contains anything 
  `mode: steps`
   can't express (see 
  [`type: cast` tape interpretation](/steps/type/cast#tape-interpretation)
  ). The 
  `--mode`
   and 
  `--format`
   values are validated before recording starts.
- **`--shell`**

  Shell the session starts, as a command line that may include arguments, such as `--shell=zsh` or `--shell="bash -o vi"` (environment variable `ATMOS_CAST_RECORD_SHELL`). It overrides the tape's `Set Shell`; when omitted, the tape's `Set Shell` applies, and then `$SHELL`. The arguments follow the ones `--shell-init` adds, so a clean startup is kept; to run a command line that manages startup files itself, such as `--shell="bash --rcfile demo.rc"`, pair it with `--shell-init=user`.
- **`--shell-init`**

  Controls which startup files the session shell loads (environment variable `ATMOS_CAST_RECORD_SHELL_INIT`): `clean` starts the shell without the user's startup files so the recording is reproducible, `user` loads them, and any other value is a path to an rc file that is sourced instead. When omitted, `cast.session.shell_init` from [`atmos.yaml`](/cli/configuration/cast) applies, and then `clean`. See [`shell_init`](/steps/type/cast#fields) for the per-shell behavior.

## Examples

```shell
atmos cast record ./demo.tape --output=demo.mp4
atmos cast record ./demo.tape --output=demo.cast
atmos cast record ./demo.tape --output=demo.gif --mode=steps
atmos cast record ./demo.tape --output=demo.cast --shell-init=user
atmos cast record ./demo.tape --output=demo.gif --shell="bash -o vi"
```

Recording straight to `.cast` lets you inspect, play, or render it further without re-interpreting the tape:

```shell
atmos cast record ./demo.tape --output=demo.cast
atmos cast play demo.cast
atmos cast render demo.cast --output=demo.gif
```

## See Also

- [`type: cast` tape interpretation](/steps/type/cast#tape-interpretation) — the `tape` and `source` step fields this command shares its interpreter with
- [`atmos cast play`](/cli/commands/cast/play) — Replay a cast recording in the terminal
- [`atmos cast render`](/cli/commands/cast/render) — Render a cast recording to media output
