# Manual Test Plan video-studio's core is a pipeline over **external tools** — ffmpeg/ffprobe, whisper, Ollama, and a headless Chromium (via Playwright/domotion-svg). That orchestration can't be exercised by fast, deterministic unit tests, so it lives here as a manual checklist. Run it before a release, or after touching the analyzer, the launcher, or the caption renderer. The pure logic *underneath* the pipeline (fps/timecode/scene math, caption argument + SVG assembly) **is** unit-tested — see [`tests/`](../tests) and the "Automated Coverage Summary" at the bottom. Don't re-test those by hand; this doc is only for what crosses a process/tool boundary. ## Prerequisites - macOS with Homebrew. - `node >= 18`, `npm install` + `npm run build` done in the repo. - Tools installed (or let the launcher offer to install them): `ffmpeg`, `ffprobe`, `whisper` (`openai-whisper`), optionally `ollama`, and `claude`. - A sample input video (a 1–10 min screen-recording or talk works well). ## 1. Launcher / doctor (`bin/video-studio.mjs`) | # | Step | Expected | |---|------|----------| | 1.1 | `node bin/video-studio.mjs --check` | Prints the splash + a per-tool pass/fail table. Exits without installing or launching. Reports "All set." when everything is present, or "Some required tools are missing." otherwise. | | 1.2 | `node bin/video-studio.mjs --check` with a required tool removed from PATH | That tool shows as missing with its `brew install …` / manual hint; exit message flags the missing required tool. | | 1.3 | `node bin/video-studio.mjs --help` | Prints the splash and the usage block (lines parsed from the file header). | | 1.4 | `node bin/video-studio.mjs --skills-only` | Copies `skills/*` into `~/.claude/skills/`, substitutes `{{TOOLKIT_DIR}}` in each `SKILL.md`, prints one `/name → …` line per skill, exits. | | 1.5 | `node bin/video-studio.mjs --no-launch ` | Runs tool checks + the analyzer prep + installs skills, prints "Ready", but does **not** start `claude`. | | 1.6 | On a non-macOS host (or simulate) | Exits early with "video-studio currently supports macOS only." | | 1.7 | `node bin/video-studio.mjs ` in a real terminal | After the "Ready" how-to, it **pauses on "Press Enter to launch Claude…"** so the how-to is readable; Claude launches only after Enter. With `--yes`, or when stdin isn't a TTY, it skips the pause. (VS-22) | | 1.8 | **Global/npx install** — `npm i -g video-studio && video-studio --no-launch ` (or from the packed tarball) | Under "Preparing analyzer" it prints **"analyzer ready (dist/analyzer.js)"** and does **NOT** run `npm run build` / `tsc` — the prebuilt `dist/` ships in the package and consumers lack the TS devDependencies. **No `tsc` type-error wall** (the VS-77 regression). The build only runs in a dev checkout (toolchain present) or when `dist/` is absent — decided by the pure `analyzerPrepPlan` in `tools/launcher-plan.mjs`. | ## 2. Scene analyzer (`dist/analyzer.js`) | # | Step | Expected | |---|------|----------| | 2.1 | `node dist/analyzer.js