marcushyett/tik-test
Automated TikTok-style video reviews for your pull requests — Claude plans, Playwright runs, FFmpeg + Remotion compose, posted as a PR comment with optional formal review.
View on GitHubTrust Signals
- Scorecard Score
- not yet scored
- Maintenance Recency
- Activelast commit May 2, 2026
- License
- MIT
Pinned Snippet
uses: marcushyett/tik-test@b0ec28bb2bdf28f831c1afc122cd58c260aa9c8f # v1.4.7tags can be moved; commit SHAs can't. why a SHA?
Inputs
| name | description | required | default |
|---|---|---|---|
| claude-code-oauth-token | OAuth token for the Claude Code Max subscription. Generate locally with `claude setup-token`, then paste into a repository secret. Required unless `anthropic-api-key` is provided. | no | "" |
| anthropic-api-key | Pay-per-use Anthropic API key. Alternative to `claude-code-oauth-token`. | no | "" |
| openai-api-key | Optional. Enables OpenAI TTS voice-over. Without it the video is silent on Linux runners. | no | "" |
| pr-number | PR number to review. Auto-detected from `pull_request`, `deployment_status`, or `workflow_dispatch` events when omitted. | no | "" |
| preview-url | Override the target URL. Auto-detected from `deployment_status` events when omitted; otherwise read from the consumer repo's `claude.md`. | no | "" |
| vercel-bypass-secret | Vercel automation bypass secret for protected previews. Optional. | no | "" |
| review-mode | How to leave a formal PR review: `none` · `approve-on-pass` · `request-changes-on-fail` · `always`. | no | request-changes-on-fail |
| require-pass | If `true`, the job exits non-zero when any test step fails (turns the check red). | no | true |
| quick | If `true`, produce a draft 540×960 render in ~2 min. Set `false` for full-res. | no | true |
| quick-and-dirty | Faster, lower-quality preset. Drops the render to 0.5× of native (540×960) and caps body scenes at 6 so the narration call is shorter. Use when speed matters more than fidelity. Default: false. | no | false |
| no-video | Skip video render + upload entirely. Same plan generation, same agent run, same LLM-synthesised checklist — just no MP4. The PR comment posted in this mode is text-only (checklist + summary, no `tik-test-video:v1` marker, so the reviewer web app does not pick it up as a feed entry). Cuts CI time roughly 5×; pairs well with `run-on-every-push: true` for cheap per-commit feedback. Default: false. | no | false |
| strict-config | Refuse silent fallback to CLAUDE.md / bare README when no tiktest.md is present. Recommended for production setups so a missing or mis-located tiktest.md fails fast rather than silently planning against the wrong file. Default: false. | no | false |
| meticulous | Thorough-testing mode. Raises the per-goal turn cap from 25 to 100 and swaps the agent's system prompt for the exhaustive variant (full verification hierarchy, freeze-the-moment recipes for sub-second transitions). Default: false. The default prompt optimises for the SHORTEST possible recording — a tight video review — at the cost of skipping anything that needs more than one retry. Turn this on when you'd rather have a careful auto- review than a snappy video, e.g. for high-stakes PRs. | no | false |
| run-on-every-push | When false (default), tik-test only runs on the initial `opened` / `reopened` PR event and on `workflow_dispatch`. When true, it ALSO runs on every commit pushed to the PR branch (the `synchronize` event). Each re-run uses Claude credits, so leave off unless you want to re-review on every push. | no | false |
| github-token | GITHUB_TOKEN with `pull-requests: write` permission. Defaults to the workflow token. | no | ${{ github.token }} |
| working-directory | Subdirectory of the consumer repo containing `claude.md`. Defaults to the workspace root. Useful for monorepos. | no | "" |
| plan-timeout | Seconds before plan-generation `claude` call is killed. Default 240 (4 min). Bump for huge diffs. | no | 240 |
| agent-timeout | Seconds before EACH per-goal browser-driving `claude` call is killed. Default 600 (10 min). Bump for slow page loads. | no | 600 |
| narration-timeout | Seconds before narration-generation `claude` call is killed. Default 540 (9 min). Bump for long runs (12+ tool moments). | no | 540 |
| feature-finder-timeout | Seconds before fallback feature-finder `claude` call is killed (only fires on a 404 startUrl). Default 60. | no | 60 |
| max-goals | Hard cap on goals the planner produces. Default 3. Above ~5 risks pushing the agent over the 25-min job budget. | no | 3 |
| min-chunk-seconds | Minimum body chunk length — shorter consecutive moments coalesce. Default 3.5. Lower = more scenes (risk: narration timeout); higher = sluggish pacing. | no | 3.5 |
| max-body-scenes | Hard ceiling on body scenes after coalescing. Default 12. Above ~14 risks narration timeout (also bump narration-timeout). | no | 12 |
| trim-merge-seconds | Tolerance for collapsing adjacent active windows in the trim planner. Tools that fire within this many seconds of each other (e.g. browser_click → browser_snapshot) merge into one segment. Big lever on render time. Default 1.5. Below 0.5 = same too-many-segments problem the default fixes; above 3 = distinct beats fuse and pacing suffers. | no | 1.5 |
| checklist-min-items | Minimum items the LLM must produce before the call is treated as failed. Default 4. | no | 4 |
| checklist-max-items | Maximum checklist items rendered on the outro card. Default 10. Above ~12 overflows the safe band on mobile. | no | 10 |
| render-segments | Number of parallel Chromium browsers used by Remotion to render the video. Each segment opens a separate browser and decodes the master capture in full, so memory grows roughly linearly with this number. Default 1 (sequential) — safe on standard GitHub-hosted runners. Set 2–4 on a runner with ≥16 GB RAM for a faster render. | no | 1 |
| render-concurrency | Concurrent Chromium tabs *per* segment. Empty (default) = auto-pick based on CPU count. Lower if you see OOM kills on long captures. | no | "" |
| video-cache-mb | Per-segment offthread video cache size, in MB. Larger = faster reads from the master capture but more resident RAM. Default 256 (was 512 pre-v1.x, which OOM'd on long captures). Bump to 512+ on big runners. | no | 256 |
| node-max-old-space-mb | Node.js heap cap (MB) for the tik-test process. Surfaces as a clean JS heap-OOM error instead of a silent SIGTERM from the kernel OOM killer. Default 4096. Set to 0 to leave Node's default in place. | no | 4096 |
| intro-seconds | Title-card window. Default 4.5. | no | 4.5 |
| outro-seconds | Outro narration window (before the post-voice hold). Default 4.0. | no | 4.0 |
| outro-hold-seconds | Extra time the outro Sequence holds AFTER the voice ends so the checklist stays readable. Default 3.5. | no | 3.5 |
Outputs
no outputs