Communitygithub.com

LIUFelix2004/github-promo-video-skill

为任意 GitHub 账号生成一条 ≤28 秒的简历宣传视频:真实主页截图做封面(横切面平躺、由远到近动态立起)+ GitHub 白色仓库卡片(Star 数字滚动计数、README 总结逐条滑入)+ 纸条式结尾。全部文字本地渲染,零 AI 生成文字、零拼写错误。适用于"给这个 GitHub 做个宣传视频/简历视频/同款视频"类请求。

github-promo-video-skill 是什么?

github-promo-video-skill is a Claude Code agent skill that 为任意 GitHub 账号生成一条 ≤28 秒的简历宣传视频:真实主页截图做封面(横切面平躺、由远到近动态立起)+ GitHub 白色仓库卡片(Star 数字滚动计数、README 总结逐条滑入)+ 纸条式结尾。全部文字本地渲染,零 AI 生成文字、零拼写错误。适用于"给这个 GitHub 做个宣传视频/简历视频/同款视频"类请求。.

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add LIUFelix2004/github-promo-video-skill

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

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.

相关技能