{"id":49360407,"url":"https://github.com/ambient-code/pull-reviews","last_synced_at":"2026-04-27T16:02:15.990Z","repository":{"id":345746893,"uuid":"1180188779","full_name":"ambient-code/pull-reviews","owner":"ambient-code","description":null,"archived":false,"fork":false,"pushed_at":"2026-03-20T18:37:58.000Z","size":179,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-21T05:25:38.548Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ambient-code.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-12T19:43:52.000Z","updated_at":"2026-03-20T18:38:01.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ambient-code/pull-reviews","commit_stats":null,"previous_names":["ambient-code/pull-reviews"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/ambient-code/pull-reviews","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ambient-code%2Fpull-reviews","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ambient-code%2Fpull-reviews/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ambient-code%2Fpull-reviews/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ambient-code%2Fpull-reviews/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ambient-code","download_url":"https://codeload.github.com/ambient-code/pull-reviews/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ambient-code%2Fpull-reviews/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32343571,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"online","status_checked_at":"2026-04-27T02:00:06.769Z","response_time":128,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-27T16:02:11.769Z","updated_at":"2026-04-27T16:02:15.979Z","avatar_url":"https://github.com/ambient-code.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Pull Reviews - AI Powered Video Review\n\nAutomated video reviews for GitHub pull requests. Pull Reviews analyzes your PR diffs with AI, generates narrated walkthrough scripts, renders short videos with syntax-highlighted code, and posts them back as PR comments.\n\n## How it works\n\n```\nPR event → Fetch diff → AI analysis → Narration script → TTS → Syntax highlighting → Video render → Upload → PR comment\n```\n\n1. A PR is opened or updated (via GitHub Actions or webhook)\n2. Pull Reviews fetches the diff and resolves configuration (presets, auto-detection, per-PR overrides)\n3. An LLM (OpenAI, Anthropic, or Claude on Vertex AI) analyzes the diff for purpose, risks, and significance\n4. A narration script is generated with time-budgeted scenes\n5. TTS generates MP3 audio for each scene (OpenAI or Kokoro local)\n6. Shiki syntax-highlights the diff hunks with green/red line coloring\n7. Remotion renders a 1920x1080 H.264 video at 30fps\n8. The video uploads to S3-compatible storage (Cloudflare R2, AWS S3, etc.)\n9. A comment with the video and review summary is posted (or updated) on the PR\n\n## Video scenes\n\n| Scene | Description |\n|-------|-------------|\n| **Title Card** | PR title, author, repo, branch badges, +/- stats |\n| **File Overview** | Animated file tree with language icons and change bars |\n| **Diff Walkthrough** | Per-file syntax-highlighted code with narration |\n| **Risk Callout** | Severity-colored risk items (critical/warning/info) |\n| **Summary** | Sentiment badge, review summary, quick stats |\n\nAll scenes are individually toggleable via configuration.\n\n## Quick start\n\n### GitHub Actions (recommended)\n\nCopy this workflow to `.github/workflows/pull-reviews.yml` in any repo:\n\n```yaml\nname: Video Review\n\non:\n  pull_request:\n    types: [opened, synchronize]\n\npermissions:\n  contents: read\n  pull-requests: write\n  id-token: write\n\njobs:\n  review:\n    uses: ambient-code/pull-reviews/.github/workflows/review.yml@main\n    with:\n      s3_bucket: pull-reviews\n    secrets:\n      S3_ENDPOINT: ${{ secrets.S3_ENDPOINT }}\n      S3_ACCESS_KEY_ID: ${{ secrets.S3_ACCESS_KEY_ID }}\n      S3_SECRET_ACCESS_KEY: ${{ secrets.S3_SECRET_ACCESS_KEY }}\n      CDN_BASE_URL: ${{ secrets.CDN_BASE_URL }}\n```\n\nNo API keys needed for analysis when using Vertex AI with Workload Identity Federation. TTS falls back to Kokoro (free, local) when no OpenAI key is provided.\n\n### CLI usage (test against a real PR)\n\n```bash\ncp .env.example .env\n# Fill in GITHUB_TOKEN\n\n# Build the Docker image\nnpm run docker:build\n\n# Review a PR\ndocker compose run --rm review owner/repo 42\ndocker compose run --rm review owner/repo 42 --preset=security\n```\n\n### Webhook server\n\n```bash\n# Fill in all GitHub App credentials in .env\nnpm run docker:build\nnpm run docker:server\n```\n\nThe server listens on port 3001 and processes `pull_request` events (opened/synchronize).\n\n### Local development (Remotion Studio)\n\n```bash\nnpm install\nnpm run dev\n```\n\nOpens Remotion Studio for previewing compositions with default props. Requires Chromium on the host.\n\n## Configuration\n\nPull Reviews is deeply configurable through multiple layers:\n\n1. **Environment variables** — base settings\n2. **`.pull-reviews.yml`** in your repo — per-repo defaults\n3. **Built-in presets** — `quick`, `thorough`, `security`, `architecture`, `onboarding`\n4. **Auto-detection** — from branch names, commit prefixes, file patterns, labels\n5. **PR body overrides** — `\u003c!-- pull-reviews ... --\u003e` YAML blocks\n\nSee [docs/configuration.md](docs/configuration.md) for the full reference.\n\n## Documentation\n\n| Document | Description |\n|----------|-------------|\n| [Configuration](docs/configuration.md) | Full config reference — presets, YAML, env vars, auto-detection |\n| [Architecture](docs/architecture.md) | System design, pipeline flow, data model |\n| [Deployment](docs/deployment.md) | Docker setup, GitHub App, S3 storage, production checklist |\n| [Scenes \u0026 Video](docs/scenes.md) | Video composition structure, scene details, styling |\n| [CLI Reference](docs/cli.md) | Local testing commands and options |\n| [LLM Analysis](docs/analysis.md) | How AI review works — prompts, providers, output format |\n\n## Environment variables\n\nSee [`.env.example`](.env.example) for the full list. Key variables:\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `GITHUB_TOKEN` | CLI only | Personal access token for CLI testing |\n| `GITHUB_APP_ID` | Server | GitHub App ID |\n| `GITHUB_PRIVATE_KEY` | Server | GitHub App private key (PEM or base64) |\n| `GITHUB_WEBHOOK_SECRET` | Server | Webhook signature verification |\n| `LLM_PROVIDER` | No | `openai`, `anthropic`, or `vertex` |\n| `TTS_PROVIDER` | No | `openai` or `local` (Kokoro, default when no OpenAI key) |\n| `S3_ENDPOINT` | No | Custom S3 endpoint (required for R2) |\n| `S3_BUCKET` | No | S3 bucket name (default: preel-videos) |\n\n## Scripts\n\n```bash\nnpm run typecheck        # TypeScript check\nnpm run dev              # Remotion Studio (local)\nnpm run build            # Bundle Remotion project\nnpm run docker:build     # Build Docker image\nnpm run docker:server    # Start webhook server in Docker\nnpm run docker:preview   # Render preview video with default props\nnpm run docker:review    # Review a PR via CLI in Docker\n```\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fambient-code%2Fpull-reviews","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fambient-code%2Fpull-reviews","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fambient-code%2Fpull-reviews/lists"}