Communitygithub.com

LIUFelix2004/github-promo-video-skill

Generate a ≤28 second promo video for any GitHub account: real homepage screenshot as cover (cross-section lying flat, dynamically rising from far to near) + GitHub white repository cards (Star count rolling animation, README summary slides in one by one) + paper strip ending. All text rendered locally, zero AI-generated text, zero spelling errors. Suitable for requests like 'make a promo video / resume video / same-style video for this GitHub'.

What is github-promo-video-skill?

This skill generates a short, high-quality promotional video (≤28 seconds) for any GitHub account, showcasing the user's profile, top repositories, and key statistics. It automates the entire process: capturing a real screenshot of the GitHub profile page as the cover (with a smooth 3D perspective animation), creating three white repository cards with rolling Star/Fork counts and README-derived summaries, and ending with a paper-strip style personal info card. The skill is designed for use with AI coding agents like Claude Code or Cursor, and it strictly avoids AI-generated text for any on-screen content, relying on local rendering with PIL and ffmpeg to ensure zero spelling errors and no fabricated data. Users provide a configuration file with real data, run Python scripts to capture frames and render the video, and perform a frame-by-frame quality check before delivery. This approach guarantees authenticity and precision, making it ideal for creating resume videos, portfolio showcases, or social media highlights.

Works with~Claude Code~Codex CLI~Cursor
npx skills add LIUFelix2004/github-promo-video-skill

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation

GitHub Resume Promo Video (Clone-Ready Pipeline)

Final video structure (total duration ≤28s, default ≈24.5s):

  1. Dynamic Cover (5.5s): A real screenshot of the target GitHub profile page, transformed via continuous perspective from 'cross-section lying flat in the distance' to 'upright tilted close-up', with a light gradient ground and soft shadow, followed by a white flash transition.
  2. Project Cards × 3 (6–6.5s each): GitHub white repository cards in the same style — repository name, subtitle, red/blue large numbers rolling from 0 to actual Star/Fork counts, 4 README summary lines sliding in one by one, and technical tags fading in at the bottom. Cards 1 and 2 are the two repos with the highest Stars; Card 3 is an 'More Projects' overview (large number = total repos / contributions in the last year).
  3. Paper Strip Ending (4.5s): Paper strips pasted one by one (username / @github / nickname / representative work · Star count, last strip with red background), with a large circular avatar (pink outline) zooming in on the right side.
  4. Music: User-provided audio file (see notes), no voiceover.

Hard Rules

  • Cover must be a real captured page frame: Use scripts/capture_frame.py to capture yourself, or use a headless browser screenshot. Do not use AI to generate/redraw the profile page (it will fabricate repository names and fake data), and do not reuse screenshots provided by others as the cover without attribution.
  • All on-screen text comes only from config: Numbers, repository names, summary lines are all locally typeset (PIL), without using AI video generation to carry text — this is the fundamental reason why this pipeline has zero text errors and no irrelevant brand logos throughout the video.
  • Project introductions must be based on actual README reading: Sort by Star count and take the top 2–3 projects, open their READMEs, distill each into 4 one-sentence summaries, then write them into the config. Merely using the repository list description as a substitute is not acceptable. If the 3rd Star-ranked project is thin on content (e.g., README has only one line), merge it into Card 3's overview and explain this during delivery.
  • Frame-by-frame self-check before delivery: At minimum, check the cover's starting frame, each card's fully-formed frame, and the ending frame; if any text or number issues are found, fix them before delivery and honestly inform the user of any remaining imperfections.

Steps

1. Research the Account

  • Open https://github.com/<user>?tab=repositories&sort=stargazers to get the Star ranking and counts.
  • Open the profile page to confirm: display name, followers, total repositories, contributions in the last year, pinned repositories.
  • Open the README for each of the top 2–3 Star-ranked projects, write 4 summary points per project (function/features/technology/characteristics), and list 4–6 technical tags.

2. Prepare Assets (assets/)

python3 scripts/capture_frame.py <user> assets/page_frame.png   # Homepage screenshot (real frame)
curl -L https://github.com/<user>.png -o assets/avatar.png       # Avatar (or crop from homepage)
# BGM: Place the user-provided audio in assets/bgm.m4a (optional)

3. Write Config

Copy examples/config.example.json to config.json, then fill in the real data and summaries from step 1 (paths relative to the config directory or use absolute paths).

4. Render

python3 scripts/render_promo.py --config config.json --out out.mp4

Requires: Python 3 + Pillow + numpy, ffmpeg, Noto Sans CJK font (the script will search common paths automatically).

5. Frame-by-Frame Self-Check and Deliver

Use ffmpeg to extract one frame at 0.4s / the midpoint of each segment / the end, and verify: numbers match Star counts, text has no misalignment, the cover is a real page, and the ending strips are complete. Send the final video to the user along with a 'structure explanation + known imperfections' note.

Config Field Quick Reference

FieldDescription
username / display_nameAccount name / display name (used in ending strips)
page_frame / avatar / bgmAsset paths; bgm can be null (no music)
cardsExactly 3 cards: {name, sub, n1, l1, n2, l2, rows[4], chips[]}; n1/l1 are red large number + label (e.g., 303 / Stars), n2/l2 are blue (e.g., 33 / Forks); Card 3 can use Repositories / Contributions
finale_strips4 paper strip texts, last strip automatically gets red background
durationsOptional: {cover, cards[3], finale} in seconds; total minus transitions should be ≤28

Notes

  • Music Copyright: This repository does not include any BGM. Only use audio provided by the user or that you have the rights to use; do not redistribute audio tracks extracted from others' videos.
  • The screenshot service (thum.io) may return a placeholder image on the first request due to normal queuing; the script handles this by fetching twice.
  • The absence of irrelevant brand logos (like Apple) throughout the video is a design result (local rendering with no external assets), requiring no additional processing.

Related Skills