--- name: vhscli description: Use the `vhscli` CLI to analyze images/video/pdfs with a prompt, or generate images/videos/audio. Use when the user asks about local media, wants AI images/videos/audio, or mentions vhscli, vhs, seedream, seedance, seed-audio, nano-banana, or gpt-image. --- # vhscli `vhscli` is a command-line tool for multimodal AI: chat about text/images/video/pdfs, or generate images, videos, and audio from prompts. It's a thin client — auth, uploads, and model execution all happen server-side, so users don't store any provider API keys locally. Run `vhscli --help` or `vhscli --help` to see current help — the CLI is the source of truth. ## Invocation Always run via `npx @getvhs/vhscli@latest` so you pick up the newest models, flags, and fixes. Don't pin a version, and don't call a bare `vhscli` binary even if one is on PATH — it may be stale. ``` npx @getvhs/vhscli@latest ... ``` Throughout this doc, commands are written as `vhscli ...` for readability — substitute `npx @getvhs/vhscli@latest ...` when running. Requires Node.js ≥ 24. ## Top-level ``` vhscli [-v|--version] [-h|--help] vhscli [options] ... ``` - `-v`, `--version` — print version (only when no command is given) - `-h`, `--help` — show help (works on root and every subcommand) Commands: - `login` — log in with google (opens browser; saves session to `~/.vhs/session.json`) - `logout` — log out and delete local access tokens - `whoami [--json]` — print the logged-in user's name and email (local read; no network). plain: `Name `; `--json`: one event line - `account [--json]` — email and balance (hits the backend). plain: email, then `balance: $X.XX` - `models` — list available models - `generate -o ` — generate an image, video, or audio, wait, and save it (`-o` is required) - `submit -o ` — submit the same task as `generate` but exit immediately, printing the task id; finish later with `resume` - `chat ` — chat with seed-2.0 / `a2:seed-2-pro` (text, image, video, or pdf input) - `resume -o ` — wait for one task and write its output - `poll -` — watch task ids from stdin; print the first to finish, then exit (writes no files) - `save -o ` — write an already-finished task's output (never waits) The CLI stores nothing locally: a task lives in the VHS backend and the task id is the only handle to it. There is no project, no database, no config — see "How a task is tracked" below. `--json` on `generate` / `submit` / `resume` / `save` / `poll` / `whoami` / `account` puts NDJSON events on stdout and reroutes ordinary logs to stderr (see "--json" below). ## Auth Assume auth is already configured. If a command fails with an auth error, run `vhscli login` to open a browser for Google OAuth. Do NOT run `vhscli login` preemptively — it requires interactive browser login. ## Models - **Chat / understand** (text / image / video / pdf): `seed-2.0` (`a2:seed-2-pro` under `vhscli chat`) - **Generate images**: `seedream-5` (default), `seedream-5-pro`, `nano-banana-2`, `nano-banana-pro`, `gpt-image-2` — under `vhscli generate` - **Generate video**: `seedance-2` (up to 4k), `seedance-2.5` (up to 720p) — under `vhscli generate` - **Generate audio**: `seed-audio-1` — under `vhscli generate` ## Prompt guides Before you invoke `vhscli generate` (or do non-trivial understanding with `vhscli chat`), **Read the matching prompt guide first** and shape the prompt around it. The guides are concise, model-specific references distilled from each provider's docs — formulas, what to lead with, what works, what fails. Wording that's great for one model often underperforms on another, so don't skip this. | Model(s) | Guide file (Read before prompting) | | ---------------------------------- | ---------------------------------- | | `seed-2.0` (used by `vhscli chat`) | `prompt_guide/seed-2.txt` | | `seedream-5`, `seedream-5-pro` | `prompt_guide/seedream.txt` | | `nano-banana-2`, `nano-banana-pro` | `prompt_guide/nano-banana.txt` | | `seedance-2`, `seedance-2.5` | `prompt_guide/seedance-2.txt` | | `gpt-image-2` | `prompt_guide/gpt-image-2.txt` | Trigger: any time the user asks for output from one of these models, Read its guide before building the prompt. For trivial chat (plain text Q&A with no media) you can skip `seed-2.txt`. ## Stdin prompts Every command that takes a prompt also accepts `-` as the prompt, meaning "read from stdin": ``` cat my_prompt.txt | vhscli generate nano-banana-pro - -o out.png echo "what is this?" | vhscli chat - -i photo.jpg ``` --- ## vhscli chat — chat about text, images, video, or pdfs ``` vhscli chat [-i ...] [-f ...] [-v