Skip to content

feat(skills): add pr-to-hyperframes visual walkthrough skill#875

Open
miguel-heygen wants to merge 3 commits into
mainfrom
worktree-feat+pr-video-skill
Open

feat(skills): add pr-to-hyperframes visual walkthrough skill#875
miguel-heygen wants to merge 3 commits into
mainfrom
worktree-feat+pr-video-skill

Conversation

@miguel-heygen
Copy link
Copy Markdown
Collaborator

@miguel-heygen miguel-heygen commented May 15, 2026

Summary

  • Adds pr-to-hyperframes skill — a full pipeline for generating narrated video walkthroughs of pull requests, modeled after tldraw's pr-walkthrough
  • Auto-detects repo branding — reads package.json, design.md, logo files, and git remote to brand the video with the project's own identity. The only HyperFrames mention is a subtle "Made with HyperFrames" attribution in the outro and PR body
  • Includes ambient suggestion mode — when creating a PR with visual changes, the skill proactively offers to generate a walkthrough

Pipeline

  1. Analyze — read PR diff, resolve repo branding (name, colors, fonts, logo)
  2. Narrate — write walkthrough script broken into 8-12 segments
  3. TTS — generate per-segment audio via Gemini TTS (generate-audio.sh)
  4. Manifest — describe every slide (intro, diff, code, text, list, image, segment, outro) with timing from durations.json
  5. Renderbuild.mjs generates a HyperFrames HTML composition with syntax-highlighted diffs, GSAP timeline, and whisper-timed captions; render.sh orchestrates the full pipeline down to a 720p/30fps MP4

File structure

skills/pr-to-hyperframes/
├── SKILL.md                     # Workflow guide + ambient trigger rules
├── .gitignore                   # tmp/ and out/ excluded
├── scripts/
│   ├── generate-audio.sh        # Gemini TTS → per-segment WAVs + durations.json
│   └── make-video.sh            # Fallback static-slide assembler
└── video/
    ├── hyperframes.json         # HyperFrames project config
    ├── meta.json                # Project metadata
    ├── build.mjs                # manifest.json → index.html composition
    ├── render.sh                # Full pipeline: assets → whisper → build → render → ffmpeg
    └── .gitignore               # Generated files excluded

Test plan

  • Verify skill loads via npx skills list
  • Test branding resolution: repo with design.md picks up custom colors/fonts
  • Test branding fallback: repo without design.md uses neutral palette
  • Test build.mjs generates valid index.html from a sample manifest
  • Test render.sh produces a 720p MP4 end-to-end
  • Test ambient detection triggers on branches with .tsx/.css changes
  • Test ambient detection skips on backend-only branches

New skill that generates short video walkthroughs of PR changes and
embeds them in the PR description. Detects visual/UI changes in the diff
and composes a before/after or feature walkthrough using HyperFrames.

Includes ambient suggestion — when creating a PR with visual changes,
the skill proactively offers to generate a walkthrough video so
reviewers can see changes in motion instead of reading diffs.
Full pipeline for generating narrated video walkthroughs of PRs:
- SKILL.md with 5-step workflow (analyze → narrate → TTS → manifest → render)
- build.mjs: manifest-driven HTML composition with syntax-highlighted diffs,
  code slides, captions from whisper transcripts, and GSAP timeline
- render.sh: full pipeline (assets → whisper → build → hyperframes → ffmpeg)
- generate-audio.sh: per-segment Gemini TTS with validation and silence trimming
- make-video.sh: fallback static-slide assembler

Branding is auto-detected from the repo (package.json, design.md, git remote,
logo files) — the only HyperFrames mention is a subtle attribution line in
the outro and PR body. This makes the skill generic across any project.

Includes ambient suggestion mode: when creating a PR with visual changes,
the skill proactively offers to generate a walkthrough video.
return fs.readFileSync(svgPath, "utf8");
}
}
return `<img src="assets/${path.basename(brand.logo)}" class="project-logo" alt="${esc(brand.name)}" />`;
<div ${slideAttrs({ start, duration, i })}>
<div class="slide-bg"></div>
<div class="slide-stage stage--image">
<img class="image-fill" src="assets/${esc(slide.src || "")}" alt=""/>
…g, duration heuristic

Based on testing the skill with subagents on HyperFrames PR #874 and
Pacific PR #27684:

- Emphasize that manifest schema must match build.mjs exactly (agents
  were inventing their own slide structures)
- Add duration estimation formula: ~2.5 words/second
- Specify which design.md tokens to extract for branding
- Add GitHub org avatar as fallback logo source
- Adjust narration length guidance for small vs large PRs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants