Quick start
This page takes you from a clean machine to a finished video walkthrough. The path is linear: one command per step, no branching. Setup steps (1–5) should each complete in under a minute on a warm machine — if one hangs, open a GitHub issue and we will fix the quick start, not your machine. Step 6 (the actual walkthrough generation) takes 8–15 minutes because the LLM script and judge passes dominate; that is expected, not a stall.
Prerequisites
Section titled “Prerequisites”You need:
- Docker (Docker Desktop or equivalent). Required for the Postgres container.
- Node.js 22+. Required for the local Next.js dev server, the schema push, and the CLI.
- FFmpeg on
PATH. Required by the default video compositor. Install withbrew install ffmpeg(macOS) orsudo apt install ffmpeg(Debian/Ubuntu).
For the script-writer you need credentials for one of:
- Anthropic SDK (
SCRIPT_WRITER=claude-sdk, the.env.exampledefault): setANTHROPIC_API_KEY— get one at console.anthropic.com. - Claude CLI (
SCRIPT_WRITER=claude-cli): install and log into the Claude CLI. No API key needed. - Mock (
SCRIPT_WRITER=mock): no credentials, deterministic stub output. See Run the mock-only pipeline below.
The path
Section titled “The path”-
Clone the repo, install host deps, install
prvodctl.npm ciis for the server build;prvodctlis the CLI you’ll point at it from the second terminal in step 6.Terminal window git clone https://github.com/keep-honest/prvod.gitcd prvodnpm cicurl -fsSL https://raw.githubusercontent.com/keep-honest/prvod/main/cli-go/install.sh | shprvodctl --versionOn Windows, grab the
.zipfrom the releases page and putprvodctl.exeonPATH. There’s also an in-repo Node CLI (npm run cli -- <flags>) with the same flag surface — useful while hacking onsrc/cli/, otherwise stick withprvodctl. -
Start Postgres.
Terminal window docker compose up db -dThis binds Postgres on host port
5434(so it doesn’t collide with a local5432). -
Apply the schema.
Terminal window DATABASE_URL=postgresql://dev:dev@localhost:5434/pr_to_video npm run db:push -
Configure
.envfor local dev. The Next.js dev server reads.envdirectly, so all keys go here. Generate the two HMAC secrets first and paste them in by hand — the quoted heredoc below keeps$(...)literal so nothing expands into your shell history.Terminal window cp .env.example .envopenssl rand -hex 32 # copy this → STORAGE_URL_SECRET belowopenssl rand -hex 32 # copy this → APP_ENCRYPTION_KEY belowcat >> .env <<'EOF'DATABASE_URL=postgresql://dev:dev@localhost:5434/pr_to_videoANTHROPIC_API_KEY=sk-ant-...USE_BUILTIN_TTS=trueSTORAGE_PROVIDER=localSTORAGE_URL_SECRET=<paste first openssl output>APP_ENCRYPTION_KEY=<paste second openssl output>API_SECRET_KEY=local-dev-keyEOFIf you’d rather use the Claude CLI auth instead of an API key, swap
ANTHROPIC_API_KEY=...forSCRIPT_WRITER=claude-cli. -
Start the dev server.
Terminal window npm run devWait for
Ready in NNN msandhttp://localhost:3000. -
Generate a walkthrough from your current branch. In a second terminal:
Terminal window prvodctl \--server-url http://localhost:3000 \--api-key local-dev-key \--uncommittedprvodctlreads your local git diff, posts it to the server, and polls until the pipeline finishes. The diff streams via theapplication/x-git-diffupload branch (100 MB cap) by default; pass--no-stream-diffto fall back to the legacy JSON branch (5 MB cap) when you need the real--pr-numberpreserved. Expect 8–15 minutes for a standard-mode walkthrough on a typical PR-sized diff — the LLM script-generation and judge passes dominate wall-clock time.local-dev-keymatches theAPI_SECRET_KEYyou wrote into.envin step 4. -
Open the video. When
prvodctlexits, it prints a review URL likehttp://localhost:3000/reviews/<jobId>. Open it in your browser. The walkthrough plays inline with synchronized captions.
Trigger from a real pull request
Section titled “Trigger from a real pull request”Once the local pipeline works, wire up the GitHub App so PRVOD posts walkthroughs on actual PRs.
-
Register a GitHub App at
github.com/settings/apps/new. The full permission matrix and webhook setup live in the main repo at README.md → GitHub App Webhook. -
Set the app’s env vars in your
.env(GITHUB_APP_ID,GITHUB_APP_PRIVATE_KEY,GITHUB_APP_SLUG,GITHUB_APP_WEBHOOK_SECRET,APP_ENCRYPTION_KEY). -
Install the app on the repos you want it to watch.
-
In any PR, write a comment containing
@prvod. The bot acknowledges immediately, runs the pipeline, then posts a second comment with the finished video URL.
Annotation variants:
| Comment | What happens |
|---|---|
@prvod | Standard walkthrough (20–120s), once per PR |
@prvod short | Short walkthrough (20–60s) |
@prvod popcorn | ~5-minute mini documentary covering every changed file |
@prvod deepdive | Reviewer-style narration, combinable with the above |
@prvod script | JSON script only, skip video generation |
Run the mock-only pipeline (no API keys)
Section titled “Run the mock-only pipeline (no API keys)”If you want to see the pipeline run end-to-end with no API keys or Claude CLI auth at all, swap the script-writer line in step 4’s .env block:
SCRIPT_WRITER=mockTTS_PROVIDER=mockThen run npm run dev and prvodctl --uncommitted as in step 6. The video will be a deterministic stub instead of a real LLM-generated walkthrough — useful for confirming your environment works before adding real credentials.