slideshot-cli
v0.1.6
Published
Command-line interface for [Slideshot](https://slideshot.ai/) to record product demo videos from text descriptions. Designed to be used by AI agents first. Describe a feature you want to demo in a web app, and the Slideshot agent will provide a ready-to-s
Readme
Slideshot CLI
Command-line interface for Slideshot to record product demo videos from text descriptions. Designed to be used by AI agents first. Describe a feature you want to demo in a web app, and the Slideshot agent will provide a ready-to-share mp4 video. No post-editing is required.
Installation
npm install -g slideshot-cliOr run it without a global install:
npx -y slideshot-cli --helpQuick Start
Authenticate with your Slideshot account:
slideshot auth login --email [email protected]
# Or use an emailed one-time code
slideshot auth login --email [email protected] --email-onlyCreate a run:
slideshot runs create https://example.com --goal "Capture the homepage and produce a demo"Wait for completion:
slideshot runs wait <run-id> --output textList the public artifacts for a run:
slideshot runs artifacts <run-id> --output textDownload the generated demo video:
slideshot runs download <run-id> --artifact demo.mp4 --dir ./artifacts --output textFetch detected brand information for a target URL:
slideshot brand fetch https://example.com --output textList saved brand guidelines for a target domain:
slideshot brand list --domain app.example.com --output textAuthentication
Slideshot supports both stored user sessions and API keys.
Sign in with email and password
# Interactive password prompt
slideshot auth login --email [email protected]
# Read password from stdin
printf '%s' 'your-password' | slideshot auth login --email [email protected] --password-stdinSign in with an emailed one-time code
slideshot auth login --email [email protected] --email-only
slideshot auth login --email [email protected] --email-only --skip-api-key--email-only sends a one-time code to your email address, prompts for that code in the terminal, and signs you in without a password. This flow matches the web app's passwordless behavior and can create the account if it does not already exist.
By default, auth login stores your user session locally and creates a local API key for commands that can authenticate with an API key. Pass --skip-api-key if you only want the user session.
When a command supports API keys, Slideshot resolves auth in this order:
--api-key <api-key>SLIDESHOT_API_KEY- stored local API key
- stored user session, when the command supports it
Use an API key
# Store an API key locally
slideshot auth set-key srk_...
# Or use an environment variable
export SLIDESHOT_API_KEY=srk_...Inspect or clear auth state
slideshot auth status --output text
slideshot auth env --shell sh --output text
slideshot auth clear-key
slideshot auth logout
slideshot auth logout --clear-keyManage API keys for your account
These commands require a signed-in user session:
slideshot auth keys list --output text
slideshot auth keys create --label "Slideshot CLI"
slideshot auth keys revoke <api-key-id>Local auth storage
Slideshot stores local auth state in the standard config directory for your OS:
- macOS:
~/Library/Application Support/slideshot/auth.json - Linux:
$XDG_CONFIG_HOME/slideshot/auth.jsonor~/.config/slideshot/auth.json - Windows:
%APPDATA%\\slideshot\\auth.json
Commands
runs
Create and manage Slideshot runs.
# Create a run
slideshot runs create https://example.com --goal "Capture the onboarding flow"
# Pass additional JSON options inline or from a file
slideshot runs create https://example.com --goal "Record sign in" --options '{"viewport":"desktop"}'
slideshot runs create https://example.com --goal "Record sign in" --options @options.json
# Check status
slideshot runs status <run-id> --output text
# Wait until the run reaches a terminal state
slideshot runs wait <run-id> --output text
# List runs visible to the current auth
slideshot runs list --output text
slideshot runs list --api-key "$SLIDESHOT_API_KEY" --output text
# Cancel a run
slideshot runs cancel <run-id>
# Submit input when a run is waiting for user input
slideshot runs input <run-id> --value "123456"
# List downloadable artifacts
slideshot runs artifacts <run-id> --output text
# Download one artifact or all public artifacts
slideshot runs download <run-id> --artifact demo.mp4 --dir ./artifacts --output text
slideshot runs download <run-id> --all --dir ./artifacts --output textAll runs commands can use --api-key or fall back to your stored session when supported.
Run Artifacts
The CLI exposes stable public artifact names:
raw.mp4demo.mp4plan.json
Common runs Options
| Command | Options |
| --- | --- |
| runs create | --goal <goal> (required), --options <json-or-@file>, --api-key <api-key>, --output <json\|text> |
| runs status | --api-key <api-key>, --output <json\|text> |
| runs wait | --api-key <api-key>, --output <json\|text> |
| runs list | --api-key <api-key>, --output <json\|text> |
| runs cancel | --api-key <api-key>, --output <json\|text> |
| runs input | --value <value> (required), --api-key <api-key>, --output <json\|text> |
| runs artifacts | --api-key <api-key>, --output <json\|text> |
| runs download | --artifact <name> or --all, --dir <directory>, --api-key <api-key>, --output <json\|text> |
brand
Fetch detected brand information for a target URL and manage saved brand guidelines.
slideshot brand fetch https://example.com
slideshot brand fetch https://example.com/pricing --output text
slideshot brand list --domain app.example.com --output text
slideshot brand create \
--label Main \
--domain app.example.com \
--video '{"background":{"type":"solid","color":"#0B1220"},"cursor":"default"}' \
--default
slideshot brand set-default <brand-guideline-id>
slideshot brand delete <brand-guideline-id>Common brand Options
| Command | Options |
| --- | --- |
| brand fetch | --api-key <api-key>, --output <json\|text> |
| brand list | --domain <domain>, --api-key <api-key>, --output <json\|text> |
| brand create | --label <label>, --domain <domain>, --video <json-or-@file>, --logo-url <url>, --intro <json-or-@file>, --default, --api-key <api-key>, --output <json\|text> |
| brand set-default | <id>, --api-key <api-key>, --output <json\|text> |
| brand delete | <id>, --api-key <api-key>, --output <json\|text> |
Saved brand guidelines store reusable visual configuration by registered domain. Use brand list --domain <target> before creating a styled run, then reference the selected guideline from run options with {"brand":{"source":"default"}} or {"brand":{"source":"saved","id":"..."}}. A saved intro is still opt-in per run: omit intro to skip it, pass "intro": {} for logo-only saved intro templates, or pass "intro": {"content":{"text":"..."}} for text-based saved intro templates.
credentials
Manage saved credentials for target domains.
# List credentials
slideshot credentials list --output text
# Create a credential
slideshot credentials create \
--label Main \
--domain app.example.com \
--email [email protected] \
--password secret
# Create a default credential for a domain
slideshot credentials create \
--label Main \
--domain app.example.com \
--email [email protected] \
--default
# Update a credential
slideshot credentials update <credential-id> \
--label Main \
--domain app.example.com \
--email [email protected] \
--api-key "$SLIDESHOT_API_KEY"
# Set the default credential for a domain
slideshot credentials set-default <credential-id>
# Delete a credential
slideshot credentials delete <credential-id>Common credentials Options
| Command | Options |
| --- | --- |
| credentials list | --api-key <api-key>, --output <json\|text> |
| credentials create | --label <label>, --domain <domain>, --email <email>, --password <password>, --default, --api-key <api-key>, --output <json\|text> |
| credentials update | <id>, --label <label>, --domain <domain>, --email <email>, --password <password>, --api-key <api-key>, --output <json\|text> |
| credentials set-default | <id>, --api-key <api-key>, --output <json\|text> |
| credentials delete | <id>, --api-key <api-key>, --output <json\|text> |
All credentials commands can use either an API key or a signed-in user session. credentials update still uses the user route, but that route now accepts both auth modes.
feedback
Submit product feedback from the CLI.
# Send feedback directly
slideshot feedback "Need clearer chapter breaks"
slideshot feedback "Need clearer chapter breaks" --api-key "$SLIDESHOT_API_KEY"
# Attach a related run ID
slideshot feedback "The generated demo looked great" --run-id <run-id>
# Read feedback from stdin
printf '%s' 'Please add more export presets' | slideshot feedbackfeedback can use either an API key or a signed-in user session.
Options:
--run-id <id>to attach one or more related runs--api-key <api-key>to override API key resolution for this command--stdinto force reading feedback text from stdin--output <json|text>
schema
Print JSON Schema for a command's request and response types.
slideshot schema runs.create --output text
slideshot schema auth.keys.createThis is useful when you want to generate tooling or validate payloads around the CLI contract.
Output and Scripting
Slideshot defaults to compact JSON output so it works well in scripts and pipelines.
# Compact JSON
slideshot runs status <run-id>
# Human-readable output
slideshot runs status <run-id> --output text
# Pipe JSON into other tools
slideshot runs artifacts <run-id> | jqErrors are printed as a stable JSON envelope, which makes failure cases script-friendly as well.
Exit Codes
Most commands return:
0on success2for local validation errors3for auth/configuration errors4for remote client errors5for remote server errors
slideshot runs wait also uses deterministic terminal-state exit codes:
0when the run succeeded10when the run isawaiting_input11when the run failed12when the run was cancelled
Version
slideshot --versionHelp
Use the built-in help for full command details:
slideshot --help
slideshot help runs
slideshot help runs create
slideshot help auth keys create