#423 by GitHub stars

cclank/lanshu-create-ai-presenter-video

Turn a topic or finished script into a complete, publish-ready explainer video — led by an AI presenter from an authorized adult presenter image, or performed with no presenter in one of twelve explainer styles (nine visual styles and three narrative ones). Not for promos, ads, or footage montages.

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

762d3ee42623 → 762d3ee42623

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 762d3ee42623

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 762d3ee42623b75a4ec63ad6aa61ace69d78ce6e

git clone --filter=blob:none --no-checkout https://github.com/cclank/lanshu-create-ai-presenter-video.git .hotskills/cclank-lanshu-create-ai-presenter-video && git -C .hotskills/cclank-lanshu-create-ai-presenter-video checkout --detach 762d3ee42623b75a4ec63ad6aa61ace69d78ce6e # Copy each selected skill directory from .hotskills/cclank-lanshu-create-ai-presenter-video into .agents/skills/<skill-name>/
2.9kGitHub stars
80stars in 7 days
1skill in this repository
12commits in 30 days

Heat

6.8
  • Star growth, last 7 daysAhead of 94% of tracked repositories
  • Star growth, last 24 hoursAhead of 70% of tracked repositories
  • Rank movement, last 7 daysAhead of 51% of tracked repositories
  • Commits, last 30 daysAhead of 79% of tracked repositories
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekAhead of 0% of tracked repositories

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Aug 16, 2026Nov 6, 20262,934

Individual skills in this repository

How it works

lanshu-create-ai-presenter-video

When your agent uses it

Turn a topic or finished script into a complete, publish-ready explainer video — led by an AI presenter from an authorized adult presenter image, or performed with no presenter in one of twelve explainer styles (nine visual styles and three narrative ones). Not for promos, ads, or footage montages. Use for new presenter or styled explainer videos and for continuing, revising, captioning, lip-sync repairing, or re-exporting an existing job. Use it whenever the user asks for 数字人口播 / 数字人讲解, for a 讲解视频 / 动画讲解 / 科普视频, asks which styles or templates are available (有哪些风格 / 看看风格 / 风格模板), or names one of the styles: 留白, 信号/科技感, 手帐/手绘, 立体书/纸艺, 波普漫画, 一镜到底/3D, 图纸与注脚, 黑板报, 黏土小城, 推演/动态图解, 案卷/调查复盘, 小剧场/生活场景. Keep model and provider selection capability-based and record the actual choices per job.

What it loads into context

Frontmatter

322 tokens

Always available to the agent

SKILL.md

3,495 tokens

When the skill is activated

Reference documents

116,761 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. Choose a route
  2. Required outcome
  3. Operating rules
  4. Start or resume a job
  5. Production state machine
  6. Default behavior for minimal input
  7. Required job artifacts
  8. Reference routing

Scripts executed separately

  • explainer/core/core.js
  • explainer/core/sfxlib.py
  • explainer/examples/kv-cache/v1-editorial/package.json
  • explainer/examples/kv-cache/v1-editorial/tools/sfx.py
  • explainer/examples/kv-cache/v10-reasoning/beats.js
  • explainer/examples/kv-cache/v10-reasoning/package.json
  • explainer/examples/kv-cache/v10-reasoning/tools/sfx.py
  • explainer/examples/kv-cache/v10-reasoning/tools/sfx.sh
  • explainer/examples/kv-cache/v11-casefile/beats.js
  • explainer/examples/kv-cache/v11-casefile/package.json
  • explainer/examples/kv-cache/v11-casefile/tools/sfx.py
  • explainer/examples/kv-cache/v11-casefile/tools/sfx.sh
  • explainer/examples/kv-cache/v12-sitcom/beats.js
  • explainer/examples/kv-cache/v12-sitcom/package.json
  • explainer/examples/kv-cache/v12-sitcom/tools/sfx.py
  • explainer/examples/kv-cache/v12-sitcom/tools/sfx.sh
  • explainer/examples/kv-cache/v12-sitcom/tools/sfx_beats.py
  • explainer/examples/kv-cache/v2-signal/package.json
  • explainer/examples/kv-cache/v2-signal/tools/sfx.py
  • explainer/examples/kv-cache/v3-notebook/package.json
  • explainer/examples/kv-cache/v3-notebook/tools/sfx.py
  • explainer/examples/kv-cache/v4-paper/package.json
  • explainer/examples/kv-cache/v4-paper/tools/sfx.py
  • explainer/examples/kv-cache/v5-comic/package.json
  • explainer/examples/kv-cache/v5-comic/tools/sfx.py
  • explainer/examples/kv-cache/v6-cinematic/package.json
  • explainer/examples/kv-cache/v6-cinematic/tools/sfx.py
  • explainer/examples/kv-cache/v7-drafting/package.json
  • explainer/examples/kv-cache/v7-drafting/tools/sfx.py
  • explainer/examples/kv-cache/v8-chalkboard/package.json
  • explainer/examples/kv-cache/v8-chalkboard/tools/sfx.py
  • explainer/examples/kv-cache/v9-clay/package.json
  • explainer/examples/kv-cache/v9-clay/tools/sfx.py
  • explainer/kits/v1-editorial/kit.js
  • explainer/kits/v1-editorial/starter/beats.js
  • explainer/kits/v1-editorial/starter/package.json
  • explainer/kits/v1-editorial/starter/tools/sfx.py
  • explainer/kits/v1-editorial/starter/tools/sfx.sh
  • explainer/kits/v10-reasoning/kit.js
  • explainer/kits/v10-reasoning/starter/beats.js
  • explainer/kits/v10-reasoning/starter/package.json
  • explainer/kits/v10-reasoning/starter/tools/sfx.py
  • explainer/kits/v10-reasoning/starter/tools/sfx.sh
  • explainer/kits/v11-casefile/casefile_sfx.py
  • explainer/kits/v11-casefile/events.mjs
  • explainer/kits/v11-casefile/kit.js
  • explainer/kits/v11-casefile/starter/beats.js
  • explainer/kits/v11-casefile/starter/package.json
  • explainer/kits/v11-casefile/starter/tools/sfx.py
  • explainer/kits/v11-casefile/starter/tools/sfx.sh
  • explainer/kits/v12-sitcom/kit.js
  • explainer/kits/v12-sitcom/sitcom_sfx.py
  • explainer/kits/v12-sitcom/starter/beats.js
  • explainer/kits/v12-sitcom/starter/package.json
  • explainer/kits/v12-sitcom/starter/tools/sfx.py
  • explainer/kits/v12-sitcom/starter/tools/sfx.sh
  • explainer/kits/v12-sitcom/starter/tools/sfx_beats.py
  • explainer/kits/v2-signal/kit.js
  • explainer/kits/v2-signal/sfx_signal.py
  • explainer/kits/v2-signal/starter/beats.js
  • explainer/kits/v2-signal/starter/package.json
  • explainer/kits/v2-signal/starter/tools/sfx.py
  • explainer/kits/v2-signal/starter/tools/sfx.sh
  • explainer/kits/v3-notebook/events.mjs
  • explainer/kits/v3-notebook/kit.js
  • explainer/kits/v3-notebook/notebook_sfx.py
  • explainer/kits/v3-notebook/starter/beats.js
  • explainer/kits/v3-notebook/starter/package.json
  • explainer/kits/v3-notebook/starter/tools/sfx.py
  • explainer/kits/v3-notebook/starter/tools/sfx.sh
  • explainer/kits/v4-paper/kit.js
  • explainer/kits/v4-paper/paper_sfx.py
  • explainer/kits/v4-paper/starter/beats.js
  • explainer/kits/v4-paper/starter/package.json
  • explainer/kits/v4-paper/starter/tools/sfx.py
  • explainer/kits/v4-paper/starter/tools/sfx.sh
  • explainer/kits/v4-paper/starter/tools/sfx_beats.py
  • explainer/kits/v5-comic/kit.js
  • explainer/kits/v5-comic/starter/beats.js
  • explainer/kits/v5-comic/starter/package.json
  • explainer/kits/v5-comic/starter/tools/sfx.py
  • explainer/kits/v5-comic/starter/tools/sfx.sh
  • explainer/kits/v6-cinematic/kit.js
  • explainer/kits/v6-cinematic/starter/beats.js
  • explainer/kits/v6-cinematic/starter/package.json
  • explainer/kits/v6-cinematic/starter/tools/sfx.py
  • explainer/kits/v6-cinematic/starter/tools/sfx.sh
  • explainer/kits/v7-drafting/kit.js
  • explainer/kits/v7-drafting/starter/beats.js
  • explainer/kits/v7-drafting/starter/package.json
  • explainer/kits/v7-drafting/starter/tools/sfx.py
  • explainer/kits/v7-drafting/starter/tools/sfx.sh
  • explainer/kits/v8-chalkboard/chalklog.mjs
  • explainer/kits/v8-chalkboard/kit.js
  • explainer/kits/v8-chalkboard/starter/beats.js
  • explainer/kits/v8-chalkboard/starter/package.json
  • explainer/kits/v8-chalkboard/starter/tools/sfx.py
  • explainer/kits/v8-chalkboard/starter/tools/sfx.sh
  • explainer/kits/v9-clay/kit.js
  • explainer/kits/v9-clay/starter/beats.js
  • explainer/kits/v9-clay/starter/package.json
  • explainer/kits/v9-clay/starter/tools/plan.mjs
  • explainer/kits/v9-clay/starter/tools/sfx.py
  • explainer/kits/v9-clay/starter/tools/sfx.sh
  • explainer/tools/docs.py
  • explainer/tools/fonts.py
  • explainer/tools/grid.py
  • explainer/tools/new_film.sh
  • explainer/tools/new_topic.sh
  • explainer/tools/qa.py
  • explainer/tools/render.sh
  • explainer/tools/srt.py
  • explainer/tools/stamp.py
  • explainer/tools/still_grid.py
  • explainer/tools/story.py
  • explainer/tools/sync.sh
  • scripts/check_state.py
  • scripts/finalize_delivery.sh
  • scripts/init_job.py
  • scripts/plan_segments.py
  • scripts/preflight.py
  • tests/explainer_smoke.sh
  • tests/smoke.sh
  • tests/story_timing.py

Files

  • .github/workflows/validate.ymlasset2,042 bytes
  • .gitignoreasset360 bytes
  • CHANGELOG.mddoc2,207 bytes
  • LICENSEasset1,063 bytes
  • README.mddoc20,451 bytes
  • README.zh-CN.mddoc20,103 bytes
  • SKILL.mdcore15,265 bytes
  • SKILL.mdcore15,265 bytes
  • SKILL.mdcore15,265 bytes
  • SKILL.mdcore15,265 bytes
  • SKILL.mdcore15,265 bytes
  • SKILL.mdcore15,265 bytes
  • SKILL.mdcore15,265 bytes
  • SKILL.mdcore15,265 bytes
  • SKILL.mdcore15,265 bytes
  • VERSIONasset6 bytes
  • agents/openai.yamlasset443 bytes
  • assets/job.template.jsonasset1,988 bytes
  • explainer/GOTCHAS.mddoc4,935 bytes
  • explainer/KITS.mddoc18,871 bytes
  • explainer/STARTER-BRIEF.mddoc5,865 bytes
  • explainer/STYLES.mddoc14,142 bytes
  • explainer/THIRD_PARTY.mddoc1,398 bytes
  • explainer/core/core.jsruns11,347 bytes
  • explainer/core/sfxlib.pyruns9,320 bytes
  • explainer/examples/README.mddoc1,414 bytes
  • explainer/examples/kv-cache/v1-editorial/fonts.jsonasset133 bytes
  • explainer/examples/kv-cache/v1-editorial/hyperframes.jsonasset355 bytes
  • explainer/examples/kv-cache/v1-editorial/index.htmlasset49,660 bytes
  • explainer/examples/kv-cache/v1-editorial/meta.jsonasset114 bytes
  • explainer/examples/kv-cache/v1-editorial/package.jsonruns306 bytes
  • explainer/examples/kv-cache/v1-editorial/tools/sfx.pyruns7,754 bytes
  • explainer/examples/kv-cache/v10-reasoning/STYLE.mddoc2,159 bytes
  • explainer/examples/kv-cache/v10-reasoning/beats.jsruns31,067 bytes
  • explainer/examples/kv-cache/v10-reasoning/fonts.jsonasset678 bytes
  • explainer/examples/kv-cache/v10-reasoning/hyperframes.jsonasset355 bytes
  • explainer/examples/kv-cache/v10-reasoning/index.htmlasset31,020 bytes
  • explainer/examples/kv-cache/v10-reasoning/meta.jsonasset116 bytes
  • explainer/examples/kv-cache/v10-reasoning/package.jsonruns307 bytes
  • explainer/examples/kv-cache/v10-reasoning/tools/sfx.pyruns13,559 bytes
  • explainer/examples/kv-cache/v10-reasoning/tools/sfx.shruns374 bytes
  • explainer/examples/kv-cache/v11-casefile/STYLE.mddoc3,941 bytes
  • explainer/examples/kv-cache/v11-casefile/beats.jsruns29,554 bytes
  • explainer/examples/kv-cache/v11-casefile/fonts.jsonasset340 bytes
  • explainer/examples/kv-cache/v11-casefile/hyperframes.jsonasset355 bytes
  • explainer/examples/kv-cache/v11-casefile/index.htmlasset37,919 bytes
  • explainer/examples/kv-cache/v11-casefile/meta.jsonasset114 bytes
  • explainer/examples/kv-cache/v11-casefile/package.jsonruns306 bytes
  • explainer/examples/kv-cache/v11-casefile/tools/sfx.pyruns3,590 bytes
  • explainer/examples/kv-cache/v11-casefile/tools/sfx.shruns991 bytes
  • explainer/examples/kv-cache/v12-sitcom/STYLE.mddoc2,637 bytes
  • explainer/examples/kv-cache/v12-sitcom/beats.jsruns38,743 bytes
  • explainer/examples/kv-cache/v12-sitcom/fonts.jsonasset327 bytes
  • explainer/examples/kv-cache/v12-sitcom/hyperframes.jsonasset355 bytes
  • explainer/examples/kv-cache/v12-sitcom/index.htmlasset27,908 bytes
  • explainer/examples/kv-cache/v12-sitcom/meta.jsonasset110 bytes
  • explainer/examples/kv-cache/v12-sitcom/package.jsonruns304 bytes
  • explainer/examples/kv-cache/v12-sitcom/tools/sfx.pyruns7,498 bytes
  • explainer/examples/kv-cache/v12-sitcom/tools/sfx.shruns579 bytes
  • explainer/examples/kv-cache/v12-sitcom/tools/sfx_beats.pyruns11,518 bytes
  • explainer/examples/kv-cache/v2-signal/fonts.jsonasset203 bytes
  • explainer/examples/kv-cache/v2-signal/hyperframes.jsonasset355 bytes
  • explainer/examples/kv-cache/v2-signal/index.htmlasset83,096 bytes
  • explainer/examples/kv-cache/v2-signal/meta.jsonasset108 bytes
  • explainer/examples/kv-cache/v2-signal/package.jsonruns303 bytes
  • explainer/examples/kv-cache/v2-signal/tools/sfx.pyruns9,735 bytes
  • explainer/examples/kv-cache/v3-notebook/fonts.jsonasset61 bytes
  • explainer/examples/kv-cache/v3-notebook/hyperframes.jsonasset355 bytes
  • explainer/examples/kv-cache/v3-notebook/index.htmlasset44,081 bytes
  • explainer/examples/kv-cache/v3-notebook/meta.jsonasset112 bytes
  • explainer/examples/kv-cache/v3-notebook/package.jsonruns305 bytes
  • explainer/examples/kv-cache/v3-notebook/tools/sfx.pyruns1,050 bytes
  • explainer/examples/kv-cache/v4-paper/fonts.jsonasset50 bytes
  • explainer/examples/kv-cache/v4-paper/hyperframes.jsonasset355 bytes
  • explainer/examples/kv-cache/v4-paper/index.htmlasset61,432 bytes
  • explainer/examples/kv-cache/v4-paper/meta.jsonasset106 bytes
  • explainer/examples/kv-cache/v4-paper/package.jsonruns302 bytes
  • explainer/examples/kv-cache/v4-paper/tools/sfx.pyruns9,540 bytes
  • explainer/examples/kv-cache/v5-comic/fonts.jsonasset287 bytes
  • explainer/examples/kv-cache/v5-comic/hyperframes.jsonasset355 bytes
  • explainer/examples/kv-cache/v5-comic/index.htmlasset75,068 bytes
  • explainer/examples/kv-cache/v5-comic/meta.jsonasset106 bytes
  • explainer/examples/kv-cache/v5-comic/package.jsonruns302 bytes
  • explainer/examples/kv-cache/v5-comic/tools/sfx.pyruns11,118 bytes
  • explainer/examples/kv-cache/v6-cinematic/fonts.jsonasset569 bytes
  • explainer/examples/kv-cache/v6-cinematic/hyperframes.jsonasset355 bytes
  • explainer/examples/kv-cache/v6-cinematic/index.htmlasset55,703 bytes
  • explainer/examples/kv-cache/v6-cinematic/meta.jsonasset114 bytes
  • explainer/examples/kv-cache/v6-cinematic/package.jsonruns306 bytes
  • explainer/examples/kv-cache/v6-cinematic/tools/sfx.pyruns7,222 bytes
  • explainer/examples/kv-cache/v7-drafting/fonts.jsonasset558 bytes
  • explainer/examples/kv-cache/v7-drafting/hyperframes.jsonasset355 bytes
  • explainer/examples/kv-cache/v7-drafting/index.htmlasset63,037 bytes
  • explainer/examples/kv-cache/v7-drafting/meta.jsonasset111 bytes
  • explainer/examples/kv-cache/v7-drafting/package.jsonruns304 bytes
  • explainer/examples/kv-cache/v7-drafting/tools/sfx.pyruns8,888 bytes
  • explainer/examples/kv-cache/v8-chalkboard/fonts.jsonasset169 bytes
  • explainer/examples/kv-cache/v8-chalkboard/hyperframes.jsonasset355 bytes
  • explainer/examples/kv-cache/v8-chalkboard/index.htmlasset34,222 bytes
  • explainer/examples/kv-cache/v8-chalkboard/meta.jsonasset115 bytes
  • explainer/examples/kv-cache/v8-chalkboard/package.jsonruns306 bytes
  • explainer/examples/kv-cache/v8-chalkboard/tools/sfx.pyruns3,752 bytes
  • explainer/examples/kv-cache/v9-clay/STYLE.mddoc1,687 bytes
  • explainer/examples/kv-cache/v9-clay/fonts.jsonasset418 bytes
  • explainer/examples/kv-cache/v9-clay/hyperframes.jsonasset355 bytes
  • explainer/examples/kv-cache/v9-clay/index.htmlasset72,293 bytes
  • explainer/examples/kv-cache/v9-clay/meta.jsonasset104 bytes
  • explainer/examples/kv-cache/v9-clay/package.jsonruns301 bytes
  • explainer/examples/kv-cache/v9-clay/tools/sfx.pyruns8,352 bytes
  • explainer/gallery/nine-styles-kv-cache.jpgasset245,417 bytes
  • explainer/gallery/three-narrative-styles-kv-cache.jpgasset151,401 bytes
  • explainer/kits/v1-editorial/KIT.mddoc10,887 bytes
  • explainer/kits/v1-editorial/kit.cssasset14,639 bytes
  • explainer/kits/v1-editorial/kit.jsruns25,027 bytes
  • explainer/kits/v1-editorial/paper-grain.svgasset437 bytes
  • explainer/kits/v1-editorial/starter/AGENTS.mddoc1,491 bytes
  • explainer/kits/v1-editorial/starter/CLAUDE.mddoc1,491 bytes
  • explainer/kits/v1-editorial/starter/STARTER.mddoc7,066 bytes
  • explainer/kits/v1-editorial/starter/beats.jsruns1,748 bytes
  • explainer/kits/v1-editorial/starter/fonts.jsonasset133 bytes
  • explainer/kits/v1-editorial/starter/hyperframes.jsonasset355 bytes
  • explainer/kits/v1-editorial/starter/index.htmlasset32,999 bytes
  • explainer/kits/v1-editorial/starter/meta.jsonasset112 bytes
  • explainer/kits/v1-editorial/starter/package.jsonruns305 bytes
  • explainer/kits/v1-editorial/starter/tools/sfx.pyruns8,002 bytes
  • explainer/kits/v1-editorial/starter/tools/sfx.shruns456 bytes
  • explainer/kits/v10-reasoning/KIT.mddoc11,455 bytes
  • explainer/kits/v10-reasoning/kit.cssasset15,754 bytes
  • explainer/kits/v10-reasoning/kit.jsruns44,698 bytes
  • explainer/kits/v10-reasoning/starter/AGENTS.mddoc1,491 bytes
  • explainer/kits/v10-reasoning/starter/CLAUDE.mddoc1,491 bytes
  • explainer/kits/v10-reasoning/starter/STARTER.mddoc8,663 bytes
  • explainer/kits/v10-reasoning/starter/beats.jsruns1,417 bytes
  • explainer/kits/v10-reasoning/starter/fonts.jsonasset678 bytes
  • explainer/kits/v10-reasoning/starter/hyperframes.jsonasset355 bytes
  • explainer/kits/v10-reasoning/starter/index.htmlasset30,550 bytes
  • explainer/kits/v10-reasoning/starter/meta.jsonasset114 bytes
  • explainer/kits/v10-reasoning/starter/package.jsonruns306 bytes
  • explainer/kits/v10-reasoning/starter/tools/sfx.pyruns9,088 bytes
  • explainer/kits/v10-reasoning/starter/tools/sfx.shruns374 bytes
  • explainer/kits/v11-casefile/KIT.mddoc11,566 bytes
  • explainer/kits/v11-casefile/casefile_sfx.pyruns8,660 bytes
  • explainer/kits/v11-casefile/cork.svgasset1,200 bytes
  • explainer/kits/v11-casefile/events.mjsruns2,835 bytes
  • explainer/kits/v11-casefile/kit.cssasset18,590 bytes
  • explainer/kits/v11-casefile/kit.jsruns59,226 bytes
  • explainer/kits/v11-casefile/stamp-ink.svgasset539 bytes
  • explainer/kits/v11-casefile/starter/AGENTS.mddoc1,491 bytes
  • explainer/kits/v11-casefile/starter/CLAUDE.mddoc1,491 bytes
  • explainer/kits/v11-casefile/starter/STARTER.mddoc8,737 bytes
  • explainer/kits/v11-casefile/starter/beats.jsruns1,671 bytes
  • explainer/kits/v11-casefile/starter/fonts.jsonasset340 bytes
  • explainer/kits/v11-casefile/starter/hyperframes.jsonasset355 bytes
  • explainer/kits/v11-casefile/starter/index.htmlasset37,872 bytes
  • explainer/kits/v11-casefile/starter/meta.jsonasset112 bytes
  • explainer/kits/v11-casefile/starter/package.jsonruns305 bytes
  • explainer/kits/v11-casefile/starter/tools/sfx.pyruns3,590 bytes
  • explainer/kits/v11-casefile/starter/tools/sfx.shruns991 bytes
  • explainer/kits/v12-sitcom/KIT.mddoc11,794 bytes
  • explainer/kits/v12-sitcom/kit.cssasset27,192 bytes
  • explainer/kits/v12-sitcom/kit.jsruns85,952 bytes
  • explainer/kits/v12-sitcom/sitcom_sfx.pyruns6,330 bytes
  • explainer/kits/v12-sitcom/starter/AGENTS.mddoc1,491 bytes
  • explainer/kits/v12-sitcom/starter/CLAUDE.mddoc1,491 bytes
  • explainer/kits/v12-sitcom/starter/STARTER.mddoc8,362 bytes
  • explainer/kits/v12-sitcom/starter/beats.jsruns1,853 bytes
  • explainer/kits/v12-sitcom/starter/fonts.jsonasset327 bytes
  • explainer/kits/v12-sitcom/starter/hyperframes.jsonasset355 bytes
  • explainer/kits/v12-sitcom/starter/index.htmlasset27,056 bytes
  • explainer/kits/v12-sitcom/starter/meta.jsonasset110 bytes
  • explainer/kits/v12-sitcom/starter/package.jsonruns304 bytes
  • explainer/kits/v12-sitcom/starter/tools/sfx.pyruns7,498 bytes
  • explainer/kits/v12-sitcom/starter/tools/sfx.shruns579 bytes
  • explainer/kits/v12-sitcom/starter/tools/sfx_beats.pyruns1,102 bytes
  • explainer/kits/v2-signal/KIT.mddoc10,900 bytes
  • explainer/kits/v2-signal/kit.cssasset14,792 bytes
  • explainer/kits/v2-signal/kit.jsruns28,809 bytes
  • explainer/kits/v2-signal/sfx_signal.pyruns3,692 bytes
  • explainer/kits/v2-signal/starter/AGENTS.mddoc1,491 bytes
  • explainer/kits/v2-signal/starter/CLAUDE.mddoc1,491 bytes
  • explainer/kits/v2-signal/starter/STARTER.mddoc7,706 bytes
  • explainer/kits/v2-signal/starter/beats.jsruns1,371 bytes
  • explainer/kits/v2-signal/starter/fonts.jsonasset203 bytes
  • explainer/kits/v2-signal/starter/hyperframes.jsonasset355 bytes
  • explainer/kits/v2-signal/starter/index.htmlasset41,799 bytes
  • explainer/kits/v2-signal/starter/meta.jsonasset106 bytes
  • explainer/kits/v2-signal/starter/package.jsonruns302 bytes
  • explainer/kits/v2-signal/starter/tools/sfx.pyruns7,758 bytes
  • explainer/kits/v2-signal/starter/tools/sfx.shruns445 bytes
  • explainer/kits/v3-notebook/KIT.mddoc9,391 bytes
  • explainer/kits/v3-notebook/events.mjsruns3,195 bytes
  • explainer/kits/v3-notebook/fix-56de.woff2asset940 bytes
  • explainer/kits/v3-notebook/kit.cssasset13,090 bytes
  • explainer/kits/v3-notebook/kit.jsruns45,077 bytes
  • explainer/kits/v3-notebook/notebook_sfx.pyruns6,303 bytes
  • explainer/kits/v3-notebook/paper-grain.svgasset437 bytes
  • explainer/kits/v3-notebook/starter/AGENTS.mddoc1,491 bytes
  • explainer/kits/v3-notebook/starter/CLAUDE.mddoc1,491 bytes
  • explainer/kits/v3-notebook/starter/STARTER.mddoc7,185 bytes
  • explainer/kits/v3-notebook/starter/beats.jsruns1,496 bytes
  • explainer/kits/v3-notebook/starter/fonts.jsonasset61 bytes
  • explainer/kits/v3-notebook/starter/hyperframes.jsonasset355 bytes
  • explainer/kits/v3-notebook/starter/index.htmlasset35,189 bytes
  • explainer/kits/v3-notebook/starter/meta.jsonasset110 bytes
  • explainer/kits/v3-notebook/starter/package.jsonruns304 bytes
  • explainer/kits/v3-notebook/starter/tools/sfx.pyruns3,522 bytes
  • explainer/kits/v3-notebook/starter/tools/sfx.shruns882 bytes
  • explainer/kits/v4-paper/KIT.mddoc11,701 bytes
  • explainer/kits/v4-paper/kit.cssasset17,590 bytes
  • explainer/kits/v4-paper/kit.jsruns34,546 bytes
  • explainer/kits/v4-paper/paper-grain.svgasset437 bytes
  • explainer/kits/v4-paper/paper_sfx.pyruns5,150 bytes
  • explainer/kits/v4-paper/starter/AGENTS.mddoc1,491 bytes
  • explainer/kits/v4-paper/starter/CLAUDE.mddoc1,491 bytes
  • explainer/kits/v4-paper/starter/STARTER.mddoc7,611 bytes
  • explainer/kits/v4-paper/starter/beats.jsruns1,612 bytes
  • explainer/kits/v4-paper/starter/fonts.jsonasset50 bytes
  • explainer/kits/v4-paper/starter/hyperframes.jsonasset355 bytes
  • explainer/kits/v4-paper/starter/index.htmlasset36,124 bytes
  • explainer/kits/v4-paper/starter/meta.jsonasset106 bytes
  • explainer/kits/v4-paper/starter/package.jsonruns302 bytes
  • explainer/kits/v4-paper/starter/tools/sfx.pyruns6,880 bytes
  • explainer/kits/v4-paper/starter/tools/sfx.shruns555 bytes
  • explainer/kits/v4-paper/starter/tools/sfx_beats.pyruns917 bytes
  • explainer/kits/v5-comic/KIT.mddoc11,555 bytes
  • explainer/kits/v5-comic/kit.cssasset17,021 bytes
  • explainer/kits/v5-comic/kit.jsruns32,042 bytes
  • explainer/kits/v5-comic/starter/AGENTS.mddoc1,491 bytes
  • explainer/kits/v5-comic/starter/CLAUDE.mddoc1,491 bytes
  • explainer/kits/v5-comic/starter/STARTER.mddoc7,632 bytes
  • explainer/kits/v5-comic/starter/beats.jsruns1,159 bytes
  • explainer/kits/v5-comic/starter/fonts.jsonasset287 bytes
  • explainer/kits/v5-comic/starter/hyperframes.jsonasset355 bytes
  • explainer/kits/v5-comic/starter/index.htmlasset35,030 bytes
  • explainer/kits/v5-comic/starter/meta.jsonasset104 bytes
  • explainer/kits/v5-comic/starter/package.jsonruns301 bytes
  • explainer/kits/v5-comic/starter/tools/sfx.pyruns10,812 bytes
  • explainer/kits/v5-comic/starter/tools/sfx.shruns383 bytes
  • explainer/kits/v6-cinematic/KIT.mddoc8,315 bytes
  • explainer/kits/v6-cinematic/grain.svgasset437 bytes
  • explainer/kits/v6-cinematic/kit.cssasset13,407 bytes
  • explainer/kits/v6-cinematic/kit.jsruns30,306 bytes
  • explainer/kits/v6-cinematic/starter/AGENTS.mddoc1,491 bytes
  • explainer/kits/v6-cinematic/starter/CLAUDE.mddoc1,491 bytes
  • explainer/kits/v6-cinematic/starter/STARTER.mddoc7,062 bytes
  • explainer/kits/v6-cinematic/starter/beats.jsruns1,091 bytes
  • explainer/kits/v6-cinematic/starter/fonts.jsonasset569 bytes
  • explainer/kits/v6-cinematic/starter/hyperframes.jsonasset355 bytes
  • explainer/kits/v6-cinematic/starter/index.htmlasset33,854 bytes
  • explainer/kits/v6-cinematic/starter/meta.jsonasset112 bytes
  • explainer/kits/v6-cinematic/starter/package.jsonruns305 bytes
  • explainer/kits/v6-cinematic/starter/tools/sfx.pyruns4,618 bytes
  • explainer/kits/v6-cinematic/starter/tools/sfx.shruns405 bytes
  • explainer/kits/v7-drafting/KIT.mddoc9,070 bytes
  • explainer/kits/v7-drafting/grain.svgasset437 bytes
  • explainer/kits/v7-drafting/kit.cssasset17,014 bytes
  • explainer/kits/v7-drafting/kit.jsruns32,823 bytes
  • explainer/kits/v7-drafting/starter/AGENTS.mddoc1,491 bytes
  • explainer/kits/v7-drafting/starter/CLAUDE.mddoc1,491 bytes
  • explainer/kits/v7-drafting/starter/STARTER.mddoc7,824 bytes
  • explainer/kits/v7-drafting/starter/beats.jsruns1,233 bytes
  • explainer/kits/v7-drafting/starter/fonts.jsonasset558 bytes
  • explainer/kits/v7-drafting/starter/hyperframes.jsonasset355 bytes
  • explainer/kits/v7-drafting/starter/index.htmlasset44,243 bytes
  • explainer/kits/v7-drafting/starter/meta.jsonasset110 bytes
  • explainer/kits/v7-drafting/starter/package.jsonruns303 bytes
  • explainer/kits/v7-drafting/starter/tools/sfx.pyruns8,001 bytes
  • explainer/kits/v7-drafting/starter/tools/sfx.shruns382 bytes
  • explainer/kits/v8-chalkboard/KIT.mddoc9,678 bytes
  • explainer/kits/v8-chalkboard/chalk-mask.pngasset317,154 bytes
  • explainer/kits/v8-chalkboard/chalklog.mjsruns3,997 bytes
  • explainer/kits/v8-chalkboard/grain.svgasset437 bytes
  • explainer/kits/v8-chalkboard/kit.cssasset6,489 bytes
  • explainer/kits/v8-chalkboard/kit.jsruns62,099 bytes
  • explainer/kits/v8-chalkboard/starter/AGENTS.mddoc1,491 bytes
  • explainer/kits/v8-chalkboard/starter/CLAUDE.mddoc1,491 bytes
  • explainer/kits/v8-chalkboard/starter/STARTER.mddoc8,176 bytes
  • explainer/kits/v8-chalkboard/starter/beats.jsruns1,093 bytes
  • explainer/kits/v8-chalkboard/starter/fonts.jsonasset169 bytes
  • explainer/kits/v8-chalkboard/starter/hyperframes.jsonasset355 bytes
  • explainer/kits/v8-chalkboard/starter/index.htmlasset34,953 bytes
  • explainer/kits/v8-chalkboard/starter/meta.jsonasset114 bytes
  • explainer/kits/v8-chalkboard/starter/package.jsonruns305 bytes
  • explainer/kits/v8-chalkboard/starter/tools/sfx.pyruns4,535 bytes
  • explainer/kits/v8-chalkboard/starter/tools/sfx.shruns799 bytes
  • explainer/kits/v9-clay/KIT.mddoc9,992 bytes
  • explainer/kits/v9-clay/kit.cssasset14,853 bytes
  • explainer/kits/v9-clay/kit.jsruns35,762 bytes
  • explainer/kits/v9-clay/starter/AGENTS.mddoc1,491 bytes
  • explainer/kits/v9-clay/starter/CLAUDE.mddoc1,491 bytes
  • explainer/kits/v9-clay/starter/STARTER.mddoc8,103 bytes
  • explainer/kits/v9-clay/starter/beats.jsruns1,326 bytes
  • explainer/kits/v9-clay/starter/fonts.jsonasset418 bytes
  • explainer/kits/v9-clay/starter/hyperframes.jsonasset355 bytes
  • explainer/kits/v9-clay/starter/index.htmlasset38,566 bytes
  • explainer/kits/v9-clay/starter/meta.jsonasset102 bytes
  • explainer/kits/v9-clay/starter/package.jsonruns300 bytes
  • explainer/kits/v9-clay/starter/tools/plan.mjsruns1,730 bytes
  • explainer/kits/v9-clay/starter/tools/sfx.pyruns4,223 bytes
  • explainer/kits/v9-clay/starter/tools/sfx.shruns385 bytes
  • explainer/stories/_test-dry/script.mddoc972 bytes
  • explainer/stories/_test-dry/story.jsonasset6,705 bytes
  • explainer/stories/kv-cache-casefile/script.mddoc2,552 bytes
  • explainer/stories/kv-cache-casefile/story.jsonasset13,684 bytes
  • explainer/stories/kv-cache-reasoning/script.mddoc2,362 bytes
  • explainer/stories/kv-cache-reasoning/story.jsonasset12,412 bytes
  • explainer/stories/kv-cache-sitcom/script.mddoc2,308 bytes
  • explainer/stories/kv-cache-sitcom/story.jsonasset12,385 bytes
  • explainer/stories/kv-cache/STORYBOARD.mddoc6,470 bytes
  • explainer/stories/kv-cache/script.mddoc2,476 bytes
  • explainer/stories/kv-cache/story.jsonasset11,258 bytes
  • explainer/tools/docs.pyruns4,747 bytes
  • explainer/tools/fonts.pyruns7,120 bytes
  • explainer/tools/grid.pyruns3,374 bytes
  • explainer/tools/new_film.shruns3,081 bytes
  • explainer/tools/new_topic.shruns1,790 bytes
  • explainer/tools/qa.pyruns5,842 bytes
  • explainer/tools/render.shruns2,507 bytes
  • explainer/tools/srt.pyruns3,520 bytes
  • explainer/tools/stamp.pyruns1,719 bytes
  • explainer/tools/still_grid.pyruns3,628 bytes
  • explainer/tools/story.pyruns25,060 bytes
  • explainer/tools/sync.shruns2,114 bytes
  • references/editing.mddoc4,131 bytes
  • references/generation.mddoc5,957 bytes
  • references/qa-recovery.mddoc4,679 bytes
  • references/styled-explainer.mddoc12,866 bytes
  • scripts/check_state.pyruns9,592 bytes
  • scripts/finalize_delivery.shruns9,750 bytes
  • scripts/init_job.pyruns8,034 bytes
  • scripts/plan_segments.pyruns7,162 bytes
  • scripts/preflight.pyruns8,601 bytes
  • tests/explainer_smoke.shruns7,089 bytes
  • tests/smoke.shruns7,942 bytes
  • tests/story_timing.pyruns3,599 bytes
Read SKILL.md

# Lanshu Create AI Presenter Video

Produce a verified explainer video from minimal inputs — led by a digital human, or performed in one of twelve explainer styles. The final narration is the master clock for presenter motion, captions, graphics, cuts, and delivery duration.

## Choose a route

Every job takes one of two routes, recorded as `creative.route`. Infer it when the request is clear (cues below);
otherwise ask once, with this table and the style gallery (`explainer/STYLES.md`; attach or link the images
`explainer/gallery/nine-styles-kv-cache.jpg` and `explainer/gallery/three-narrative-styles-kv-cache.jpg`). Never fall back to `presenter` silently: it needs a portrait the user
may not have.

| Route | The video | The user provides | Paid generation | Format |
|---|---|---|---|---|
| `presenter` | A digital human presents; captions and keyword graphics support it | Topic or script + authorized presenter image | Voice + presenter video | Any; 9:16 by default |
View the complete source on GitHub

Skills included

  • lanshu-create-ai-presenter-video

Repository facts

License
MIT
Created
Aug 20, 2026
Last pushed
Oct 11, 2026
Forks
442
Open issues
2
Project activity
Active

Rank over the last 12 weeks

Now #423 · best #384 · down 34 in 30 days

  1. #413 on Nov 1
  2. #410 on Nov 2
  3. #414 from Nov 3 to Nov 4
  4. #417 on Nov 5
  5. #421 on Nov 6
  6. #423 since Nov 7
65 earlier periods
  1. #909 on Aug 16
  2. #894 on Aug 20
  3. #897 on Aug 21
  4. #835 on Aug 22
  5. #739 on Aug 23
  6. #679 on Aug 24
  7. #656 on Aug 25
  8. #632 on Aug 26
  9. #635 on Aug 27
  10. #653 on Aug 28
  11. #608 on Aug 29
  12. #602 on Aug 30
  13. #624 on Aug 31
  14. #641 on Sep 1
  15. #629 on Sep 2
  16. #613 on Sep 4
  17. #606 on Sep 5
  18. #632 on Sep 7
  19. #644 on Sep 9
  20. #646 on Sep 10
  21. #634 on Sep 11
  22. #637 on Sep 12
  23. #655 on Sep 15
  24. #660 on Sep 16
  25. #662 on Sep 17
  26. #661 on Sep 18
  27. #638 on Sep 19
  28. #666 on Sep 21
  29. #677 on Sep 22
  30. #675 on Sep 23
  31. #648 on Sep 24
  32. #570 on Sep 25
  33. #472 on Sep 26
  34. #451 on Sep 27
  35. #450 on Sep 28
  36. #455 on Sep 29
  37. #447 on Sep 30
  38. #444 on Oct 1
  39. #440 on Oct 2
  40. #427 on Oct 3
  41. #421 on Oct 4
  42. #432 on Oct 5
  43. #407 on Oct 6
  44. #392 on Oct 7
  45. #389 on Oct 8
  46. #399 on Oct 9
  47. #385 on Oct 10
  48. #387 on Oct 11
  49. #394 on Oct 12
  50. #390 on Oct 13
  51. #394 on Oct 14
  52. #392 on Oct 15
  53. #393 on Oct 16
  54. #384 on Oct 17
  55. #390 on Oct 18
  56. #394 on Oct 19
  57. #396 on Oct 20
  58. #394 on Oct 21
  59. #395 on Oct 22
  60. #393 on Oct 23
  61. #385 on Oct 24
  62. #401 on Oct 25
  63. #409 on Oct 28
  64. #412 on Oct 29
  65. #415 from Oct 30 to Oct 31

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 2, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 23 notes
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • explainer/examples/kv-cache/v2-signal/index.html:10 Analysis incomplete: physical or joined line exceeds character limit
  • explainer/examples/kv-cache/v2-signal/index.html:11 Analysis incomplete: physical or joined line exceeds character limit
  • explainer/examples/kv-cache/v2-signal/index.html:12 Analysis incomplete: physical or joined line exceeds character limit
  • explainer/examples/kv-cache/v2-signal/index.html:13 Analysis incomplete: physical or joined line exceeds character limit
  • explainer/examples/kv-cache/v2-signal/index.html:14 Analysis incomplete: physical or joined line exceeds character limit
  • explainer/examples/kv-cache/v2-signal/index.html:15 Analysis incomplete: physical or joined line exceeds character limit
  • explainer/examples/kv-cache/v2-signal/index.html:16 Analysis incomplete: physical or joined line exceeds character limit
  • explainer/examples/kv-cache/v9-clay/index.html:18 Analysis incomplete: physical or joined line exceeds character limit
  • explainer/examples/kv-cache/v9-clay/index.html:19 Analysis incomplete: physical or joined line exceeds character limit
  • explainer/examples/kv-cache/v9-clay/index.html:20 Analysis incomplete: physical or joined line exceeds character limit
  • explainer/examples/kv-cache/v9-clay/index.html:21 Analysis incomplete: physical or joined line exceeds character limit
  • explainer/examples/kv-cache/v9-clay/index.html:22 Analysis incomplete: physical or joined line exceeds character limit
Show all 476 signals by file

.github/workflows/validate.yml

  • Dangerous shell operationline 59
    run: sudo apt-get update && sudo apt-get install -y --no-install-recommends ffmpeg

.gitignore

  • Access to secretsline 6
    [Credential-related source omitted]

CHANGELOG.md

  • Network accessline 16
    - Windows / Git Bash temporary paths and native-tool CRLF output in smoke tests and delivery finalization, including portrait contact-sheet orientation ([#3](https://github.com/cclank/lanshu-create-ai-presenter-video/pull/3)).
  • Network accessline 17
    - Windows npm cache lookup and Chrome executable suffixes for the notebook and chalkboard sound readers ([#4](https://github.com/cclank/lanshu-create-ai-presenter-video/pull/4)). The notebook reader retains its existing Chrome sandbox defau
  • Network accessline 28
    Thanks to [@happysharegithub](https://github.com/happysharegithub) for the Windows compatibility contributions in #3 and #4.

README.md

  • Network accessline 5
    [![Agent Skills](https://img.shields.io/badge/Agent_Skills-SKILL.md-111827)](https://agentskills.io)
  • Network accessline 6
    ![Harness Neutral](https://img.shields.io/badge/Harness-Neutral-8B5CF6)
  • Network accessline 7
    ![Provider Neutral](https://img.shields.io/badge/Provider-Neutral-0EA5E9)
  • Network accessline 8
    ![Routes: Presenter | Styled](https://img.shields.io/badge/Routes-Presenter_%7C_Styled-0EA5E9)
  • Network accessline 9
    [![Explainer Styles: 12](https://img.shields.io/badge/Explainer_Styles-12-E8590C)](explainer/STYLES.md)
  • Network accessline 10
    [![Rendered with HyperFrames](https://img.shields.io/badge/Rendered_with-HyperFrames-2563EB)](https://hyperframes.heygen.com)
  • Network accessline 11
    <br> [![Validate Skill](https://github.com/cclank/lanshu-create-ai-presenter-video/actions/workflows/validate.yml/badge.svg)](https://github.com/cclank/lanshu-create-ai-presenter-video/actions/workflows/validate.yml) [![License: MIT](https:
  • Network accessline 12
    [![Validate Skill](https://github.com/cclank/lanshu-create-ai-presenter-video/actions/workflows/validate.yml/badge.svg)](https://github.com/cclank/lanshu-create-ai-presenter-video/actions/workflows/validate.yml)
  • Network accessline 13
    [![License: MIT](https://img.shields.io/badge/License-MIT-F4C430.svg)](LICENSE)
  • Network accessline 14
    [![Release](https://img.shields.io/github/v/release/cclank/lanshu-create-ai-presenter-video)](https://github.com/cclank/lanshu-create-ai-presenter-video/releases/latest)
  • Network accessline 15
    [![Python 3.9+](https://img.shields.io/badge/Python-3.9%2B-3776AB?logo=python&logoColor=white)](https://www.python.org/)
  • Network accessline 16
    [![FFmpeg Required](https://img.shields.io/badge/FFmpeg-Required-007808?logo=ffmpeg&logoColor=white)](https://ffmpeg.org/)
  • Network accessline 17
    [![Node.js for the styled route](https://img.shields.io/badge/Node.js-styled_route-5FA04E?logo=nodedotjs&logoColor=white)](https://nodejs.org/)
  • Network accessline 18
    [![GitHub stars](https://img.shields.io/github/stars/cclank/lanshu-create-ai-presenter-video?style=flat)](https://github.com/cclank/lanshu-create-ai-presenter-video/stargazers)
  • Network accessline 19
    <br> [![X @LufzzLiz](https://img.shields.io/badge/X-@LufzzLiz-000000?logo=x&logoColor=white)](https://x.com/LufzzLiz) [![Author: 岚叔 Lanshu](https://img.shields.io/badge/Author-%E5%B2%9A%E5%8F%94_Lanshu-C2410C)](https://x.com/LufzzLiz)
  • Network accessline 20
    [![X @LufzzLiz](https://img.shields.io/badge/X-@LufzzLiz-000000?logo=x&logoColor=white)](https://x.com/LufzzLiz)
  • Network accessline 21
    [![Author: 岚叔 Lanshu](https://img.shields.io/badge/Author-%E5%B2%9A%E5%8F%94_Lanshu-C2410C)](https://x.com/LufzzLiz)
  • Network accessline 25
    `lanshu-create-ai-presenter-video` is an [Agent Skill](https://agentskills.io) that takes an AI agent through the full production of an explainer video. On the **presenter route** that means script, narration, presenter generation, lip-sync
  • Access to secretsline 140
    [Credential-related source omitted]
  • Network accessline 149
    | Claude Code | `~/.claude/skills/` or project-level `.claude/skills/` | `/lanshu-create-ai-presenter-video` | | Codex | `~/.codex/skills/` | `$lanshu-create-ai-presenter-video` | | Other Agent Skills clients | See the client's documentatio
  • Network accessline 151
    | Other Agent Skills clients | See the client's documentation, linked from the [client list](https://agentskills.io/clients) | Client-specific |
  • Network accessline 156
    git clone https://github.com/cclank/lanshu-create-ai-presenter-video.git \
  • Network accessline 162
    Tagged versions and a ready-to-extract skill ZIP are available in [Releases](https://github.com/cclank/lanshu-create-ai-presenter-video/releases). See [CHANGELOG.md](CHANGELOG.md) for version history.
  • Network accessline 335
    [![Follow on X](https://img.shields.io/badge/Follow_on_X-@LufzzLiz-000000?style=for-the-badge&logo=x&logoColor=white)](https://x.com/LufzzLiz)

README.zh-CN.md

  • Network accessline 5
    [![Agent Skills](https://img.shields.io/badge/Agent_Skills-SKILL.md-111827)](https://agentskills.io)
  • Network accessline 6
    ![Harness Neutral](https://img.shields.io/badge/Harness-Neutral-8B5CF6)
  • Network accessline 7
    ![Provider Neutral](https://img.shields.io/badge/Provider-Neutral-0EA5E9)
  • Network accessline 8
    ![Routes: Presenter | Styled](https://img.shields.io/badge/Routes-Presenter_%7C_Styled-0EA5E9)
  • Network accessline 9
    [![讲解风格 12 种](https://img.shields.io/badge/%E8%AE%B2%E8%A7%A3%E9%A3%8E%E6%A0%BC-12%20%E7%A7%8D-E8590C)](explainer/STYLES.md)
  • Network accessline 10
    [![Rendered with HyperFrames](https://img.shields.io/badge/Rendered_with-HyperFrames-2563EB)](https://hyperframes.heygen.com)
  • Network accessline 11
    <br> [![Validate Skill](https://github.com/cclank/lanshu-create-ai-presenter-video/actions/workflows/validate.yml/badge.svg)](https://github.com/cclank/lanshu-create-ai-presenter-video/actions/workflows/validate.yml) [![License: MIT](https:
  • Network accessline 12
    [![Validate Skill](https://github.com/cclank/lanshu-create-ai-presenter-video/actions/workflows/validate.yml/badge.svg)](https://github.com/cclank/lanshu-create-ai-presenter-video/actions/workflows/validate.yml)
  • Network accessline 13
    [![License: MIT](https://img.shields.io/badge/License-MIT-F4C430.svg)](LICENSE)
  • Network accessline 14
    [![Release](https://img.shields.io/github/v/release/cclank/lanshu-create-ai-presenter-video)](https://github.com/cclank/lanshu-create-ai-presenter-video/releases/latest)
  • Network accessline 15
    [![Python 3.9+](https://img.shields.io/badge/Python-3.9%2B-3776AB?logo=python&logoColor=white)](https://www.python.org/)
  • Network accessline 16
    [![FFmpeg Required](https://img.shields.io/badge/FFmpeg-Required-007808?logo=ffmpeg&logoColor=white)](https://ffmpeg.org/)
  • Network accessline 17
    [![Node.js for the styled route](https://img.shields.io/badge/Node.js-styled_route-5FA04E?logo=nodedotjs&logoColor=white)](https://nodejs.org/)
  • Network accessline 18
    [![GitHub stars](https://img.shields.io/github/stars/cclank/lanshu-create-ai-presenter-video?style=flat)](https://github.com/cclank/lanshu-create-ai-presenter-video/stargazers)
  • Network accessline 19
    <br> [![X @LufzzLiz](https://img.shields.io/badge/X-@LufzzLiz-000000?logo=x&logoColor=white)](https://x.com/LufzzLiz) [![作者 岚叔](https://img.shields.io/badge/%E4%BD%9C%E8%80%85-%E5%B2%9A%E5%8F%94-C2410C)](https://x.com/LufzzLiz)
  • Network accessline 20
    [![X @LufzzLiz](https://img.shields.io/badge/X-@LufzzLiz-000000?logo=x&logoColor=white)](https://x.com/LufzzLiz)
  • Network accessline 21
    [![作者 岚叔](https://img.shields.io/badge/%E4%BD%9C%E8%80%85-%E5%B2%9A%E5%8F%94-C2410C)](https://x.com/LufzzLiz)
  • Network accessline 25
    `lanshu-create-ai-presenter-video` 是一个 [Agent Skill](https://agentskills.io)(岚叔 · 通用数字人与讲解视频制作),带领 AI agent 走完讲解视频的全流程。**数字人路线**包括文案、配音、人物生成、口型同步、字幕与关键词动效、剪辑、渲染和质量验收;**风格化路线**从逐字对时的讲稿出发,用十二种风格之一(九种画风、三种讲法)把每句讲解演成画面,一直到渲染成片。每个阶段都以磁盘上的产物为准入证据
  • Access to secretsline 128
    [Credential-related source omitted]
  • Network accessline 136
    | Claude Code | `~/.claude/skills/`,或项目内 `.claude/skills/` | `/lanshu-create-ai-presenter-video` | | Codex | `~/.codex/skills/` | `$lanshu-create-ai-presenter-video` | | 其他支持 Agent Skills 的工具 | 见该工具文档,[客户端列表](https://agentskills.io/clients)
  • Network accessline 138
    | 其他支持 Agent Skills 的工具 | 见该工具文档,[客户端列表](https://agentskills.io/clients)附有各家说明链接 | 按该工具的方式 |
  • Network accessline 143
    git clone https://github.com/cclank/lanshu-create-ai-presenter-video.git \
  • Network accessline 149
    版本标签和可直接解压到 skills 目录的安装 ZIP 见 [Releases](https://github.com/cclank/lanshu-create-ai-presenter-video/releases),版本记录见 [CHANGELOG.md](CHANGELOG.md)。
  • Network accessline 319
    [![在 X 上关注](https://img.shields.io/badge/%E5%9C%A8_X_%E4%B8%8A%E5%85%B3%E6%B3%A8-@LufzzLiz-000000?style=for-the-badge&logo=x&logoColor=white)](https://x.com/LufzzLiz)

explainer/GOTCHAS.md

  • Access to secretsline 68
    [Credential-related source omitted]

explainer/core/core.js

  • Executable scriptline 1
    Executable file

explainer/core/sfxlib.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/examples/kv-cache/v1-editorial/hyperframes.json

  • Network accessline 1
    {   "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 2
    "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 3
    "registry": "https://raw.githubusercontent.com/heygen-com/hyperframes/main/registry",

explainer/examples/kv-cache/v1-editorial/index.html

  • Network accessline 4
    <meta charset="UTF-8">     <meta name="viewport" content="width=1920, height=1080">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 5
    <meta name="viewport" content="width=1920, height=1080">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>     <link rel="stylesheet" href="lib/kit/kit.css">
  • Network accessline 6
    <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 108
    function tf(e, x, y, s) { e.style.transform = "translate(" + (x || 0).toFixed(1) + "px," + (y || 0).toFixed(1) + "px) scale(" + (s == null ? 1 : s).toFixed(4) + ")"; }         function svg(parent, w, h) {           var s = document.createEl
  • Network accessline 109
    function svg(parent, w, h) {           var s = document.createElementNS("http://www.w3.org/2000/svg", "svg");           s.setAttribute("class", "kv-svg");
  • Network accessline 110
    var s = document.createElementNS("http://www.w3.org/2000/svg", "svg");
  • Network accessline 116
    }         function sv(parent, tag, attrs) {           var e = document.createElementNS("http://www.w3.org/2000/svg", tag);
  • Network accessline 117
    function sv(parent, tag, attrs) {           var e = document.createElementNS("http://www.w3.org/2000/svg", tag);           for (var k in attrs) e.setAttribute(k, attrs[k]);
  • Network accessline 118
    var e = document.createElementNS("http://www.w3.org/2000/svg", tag);

explainer/examples/kv-cache/v1-editorial/package.json

  • Executable scriptline 1
    Executable file

explainer/examples/kv-cache/v1-editorial/tools/sfx.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/examples/kv-cache/v10-reasoning/beats.js

  • Executable scriptline 1
    Executable file

explainer/examples/kv-cache/v10-reasoning/hyperframes.json

  • Network accessline 1
    {   "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 2
    "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 3
    "registry": "https://raw.githubusercontent.com/heygen-com/hyperframes/main/registry",

explainer/examples/kv-cache/v10-reasoning/index.html

  • Network accessline 6
    <title>V10 推演</title>     <link rel="stylesheet" href="lib/kit/kit.css">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 7
    <link rel="stylesheet" href="lib/kit/kit.css">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>     <style>
  • Network accessline 8
    <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>

explainer/examples/kv-cache/v10-reasoning/package.json

  • Executable scriptline 1
    Executable file

explainer/examples/kv-cache/v10-reasoning/tools/sfx.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/examples/kv-cache/v10-reasoning/tools/sfx.sh

  • Executable scriptline 1
    #!/usr/bin/env bash

explainer/examples/kv-cache/v11-casefile/beats.js

  • Executable scriptline 1
    Executable file

explainer/examples/kv-cache/v11-casefile/hyperframes.json

  • Network accessline 1
    {   "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 2
    "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 3
    "registry": "https://raw.githubusercontent.com/heygen-com/hyperframes/main/registry",

explainer/examples/kv-cache/v11-casefile/index.html

  • Network accessline 4
    <meta charset="UTF-8">     <meta name="viewport" content="width=1920, height=1080">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 5
    <meta name="viewport" content="width=1920, height=1080">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>     <style>
  • Network accessline 6
    <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>

explainer/examples/kv-cache/v11-casefile/package.json

  • Executable scriptline 1
    Executable file

explainer/examples/kv-cache/v11-casefile/tools/sfx.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/examples/kv-cache/v11-casefile/tools/sfx.sh

  • Executable scriptline 1
    #!/usr/bin/env bash

explainer/examples/kv-cache/v12-sitcom/beats.js

  • Executable scriptline 1
    Executable file

explainer/examples/kv-cache/v12-sitcom/hyperframes.json

  • Network accessline 1
    {   "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 2
    "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 3
    "registry": "https://raw.githubusercontent.com/heygen-com/hyperframes/main/registry",

explainer/examples/kv-cache/v12-sitcom/index.html

  • Network accessline 4
    <meta charset="UTF-8">     <meta name="viewport" content="width=1920, height=1080">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 5
    <meta name="viewport" content="width=1920, height=1080">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>     <link rel="stylesheet" href="lib/kit/kit.css">
  • Network accessline 6
    <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>

explainer/examples/kv-cache/v12-sitcom/package.json

  • Executable scriptline 1
    Executable file

explainer/examples/kv-cache/v12-sitcom/tools/sfx.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/examples/kv-cache/v12-sitcom/tools/sfx.sh

  • Executable scriptline 1
    #!/usr/bin/env bash

explainer/examples/kv-cache/v12-sitcom/tools/sfx_beats.py

  • Executable scriptline 1
    Executable file

explainer/examples/kv-cache/v2-signal/hyperframes.json

  • Network accessline 1
    {   "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 2
    "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 3
    "registry": "https://raw.githubusercontent.com/heygen-com/hyperframes/main/registry",

explainer/examples/kv-cache/v2-signal/index.html

  • Network accessline 4
    <meta charset="UTF-8">     <meta name="viewport" content="width=1920, height=1080">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 5
    <meta name="viewport" content="width=1920, height=1080">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>     <link rel="stylesheet" href="lib/kit/kit.css">
  • Network accessline 6
    <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 505
    }         }         const NS = "http://www.w3.org/2000/svg";
  • Network accessline 506
    }         const NS = "http://www.w3.org/2000/svg";         function sv(tag, attrs, parent) {
  • Network accessline 507
    const NS = "http://www.w3.org/2000/svg";

explainer/examples/kv-cache/v2-signal/package.json

  • Executable scriptline 1
    Executable file

explainer/examples/kv-cache/v2-signal/tools/sfx.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/examples/kv-cache/v3-notebook/hyperframes.json

  • Network accessline 1
    {   "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 2
    "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 3
    "registry": "https://raw.githubusercontent.com/heygen-com/hyperframes/main/registry",

explainer/examples/kv-cache/v3-notebook/index.html

  • Network accessline 4
    <meta charset="UTF-8">     <meta name="viewport" content="width=1920, height=1080">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 5
    <meta name="viewport" content="width=1920, height=1080">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>     <script src="lib/core.js"></script>
  • Network accessline 6
    <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 161
    const rowT = (n) => b3.mei + 0.03 + (n - 1) * 0.15;         const cellD = (n, j) => g.rect(TX(j) + 3, RY(n), TW - 6, CH, 100 + n * 10 + j, 1.8);         const NS = "http://www.w3.org/2000/svg";
  • Network accessline 162
    const cellD = (n, j) => g.rect(TX(j) + 3, RY(n), TW - 6, CH, 100 + n * 10 + j, 1.8);         const NS = "http://www.w3.org/2000/svg";         const rows = [];
  • Network accessline 163
    const NS = "http://www.w3.org/2000/svg";

explainer/examples/kv-cache/v3-notebook/package.json

  • Executable scriptline 1
    Executable file

explainer/examples/kv-cache/v3-notebook/tools/sfx.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/examples/kv-cache/v4-paper/hyperframes.json

  • Network accessline 1
    {   "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 2
    "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 3
    "registry": "https://raw.githubusercontent.com/heygen-com/hyperframes/main/registry",

explainer/examples/kv-cache/v4-paper/index.html

  • Network accessline 4
    <meta charset="UTF-8">     <meta name="viewport" content="width=1920, height=1080">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 5
    <meta name="viewport" content="width=1920, height=1080">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>     <link rel="stylesheet" href="lib/kit/kit.css">
  • Network accessline 6
    <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 268
    });         // the look-back strings (beat 2)         var svgNS = "http://www.w3.org/2000/svg";
  • Network accessline 269
    // the look-back strings (beat 2)         var svgNS = "http://www.w3.org/2000/svg";         function svgLayer(id, z) {
  • Network accessline 270
    var svgNS = "http://www.w3.org/2000/svg";

explainer/examples/kv-cache/v4-paper/package.json

  • Executable scriptline 1
    Executable file

explainer/examples/kv-cache/v4-paper/tools/sfx.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/examples/kv-cache/v5-comic/hyperframes.json

  • Network accessline 1
    {   "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 2
    "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 3
    "registry": "https://raw.githubusercontent.com/heygen-com/hyperframes/main/registry",

explainer/examples/kv-cache/v5-comic/index.html

  • Network accessline 4
    <meta charset="UTF-8">     <meta name="viewport" content="width=1920, height=1080">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 5
    <meta name="viewport" content="width=1920, height=1080">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>     <link rel="stylesheet" href="lib/kit/kit.css">
  • Network accessline 6
    <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>

explainer/examples/kv-cache/v5-comic/package.json

  • Executable scriptline 1
    Executable file

explainer/examples/kv-cache/v5-comic/tools/sfx.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/examples/kv-cache/v6-cinematic/hyperframes.json

  • Network accessline 1
    {   "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 2
    "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 3
    "registry": "https://raw.githubusercontent.com/heygen-com/hyperframes/main/registry",

explainer/examples/kv-cache/v6-cinematic/index.html

  • Network accessline 8
    {         "imports": {           "three": "https://cdn.jsdelivr.net/npm/three@0.181.2/build/three.module.js",
  • Network accessline 9
    "imports": {           "three": "https://cdn.jsdelivr.net/npm/three@0.181.2/build/three.module.js",           "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.181.2/examples/jsm/"
  • Network accessline 10
    "three": "https://cdn.jsdelivr.net/npm/three@0.181.2/build/three.module.js",
  • Network accessline 11
    "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.181.2/examples/jsm/"

explainer/examples/kv-cache/v6-cinematic/package.json

  • Executable scriptline 1
    Executable file

explainer/examples/kv-cache/v6-cinematic/tools/sfx.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/examples/kv-cache/v7-drafting/hyperframes.json

  • Network accessline 1
    {   "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 2
    "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 3
    "registry": "https://raw.githubusercontent.com/heygen-com/hyperframes/main/registry",

explainer/examples/kv-cache/v7-drafting/index.html

  • Network accessline 6
    <title>KV cache · V7 图纸与注脚</title>     <link rel="stylesheet" href="lib/kit/kit.css">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 7
    <link rel="stylesheet" href="lib/kit/kit.css">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>     <style>
  • Network accessline 8
    <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>

explainer/examples/kv-cache/v7-drafting/package.json

  • Executable scriptline 1
    Executable file

explainer/examples/kv-cache/v7-drafting/tools/sfx.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/examples/kv-cache/v8-chalkboard/hyperframes.json

  • Network accessline 1
    {   "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 2
    "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 3
    "registry": "https://raw.githubusercontent.com/heygen-com/hyperframes/main/registry",

explainer/examples/kv-cache/v8-chalkboard/index.html

  • Network accessline 5
    <meta name="viewport" content="width=1920, height=1080">     <title>KV cache · V8 黑板报</title>     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 6
    <title>KV cache · V8 黑板报</title>     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>     <link rel="stylesheet" href="lib/kit/kit.css">
  • Network accessline 7
    <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>

explainer/examples/kv-cache/v8-chalkboard/package.json

  • Executable scriptline 1
    Executable file

explainer/examples/kv-cache/v8-chalkboard/tools/sfx.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/examples/kv-cache/v9-clay/hyperframes.json

  • Network accessline 1
    {   "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 2
    "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 3
    "registry": "https://raw.githubusercontent.com/heygen-com/hyperframes/main/registry",

explainer/examples/kv-cache/v9-clay/index.html

  • Network accessline 8
    {         "imports": {           "three": "https://cdn.jsdelivr.net/npm/three@0.181.2/build/three.module.js",
  • Network accessline 9
    "imports": {           "three": "https://cdn.jsdelivr.net/npm/three@0.181.2/build/three.module.js",           "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.181.2/examples/jsm/"
  • Network accessline 10
    "three": "https://cdn.jsdelivr.net/npm/three@0.181.2/build/three.module.js",
  • Network accessline 11
    "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.181.2/examples/jsm/"

explainer/examples/kv-cache/v9-clay/package.json

  • Executable scriptline 1
    Executable file

explainer/examples/kv-cache/v9-clay/tools/sfx.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/kits/v1-editorial/kit.js

  • Executable scriptline 1
    Executable file
  • Network accessline 24
    }   function svgEl(tag, attrs) {     const e = document.createElementNS("http://www.w3.org/2000/svg", tag);
  • Network accessline 25
    function svgEl(tag, attrs) {     const e = document.createElementNS("http://www.w3.org/2000/svg", tag);     for (const k in attrs || {}) e.setAttribute(k, attrs[k]);
  • Network accessline 26
    const e = document.createElementNS("http://www.w3.org/2000/svg", tag);

explainer/kits/v1-editorial/paper-grain.svg

  • Network accessline 1
    <svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">

explainer/kits/v1-editorial/starter/beats.js

  • Executable scriptline 1
    Executable file

explainer/kits/v1-editorial/starter/hyperframes.json

  • Network accessline 1
    {   "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 2
    "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 3
    "registry": "https://raw.githubusercontent.com/heygen-com/hyperframes/main/registry",

explainer/kits/v1-editorial/starter/index.html

  • Network accessline 4
    <meta charset="UTF-8">     <meta name="viewport" content="width=1920, height=1080">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 5
    <meta name="viewport" content="width=1920, height=1080">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>     <link rel="stylesheet" href="lib/kit/kit.css">
  • Network accessline 6
    <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 93
    function tf(e, x, y, s) { e.style.transform = "translate(" + (x || 0).toFixed(1) + "px," + (y || 0).toFixed(1) + "px) scale(" + (s == null ? 1 : s).toFixed(4) + ")"; }         function svg(parent, w, h) {           const s = document.create
  • Network accessline 94
    function svg(parent, w, h) {           const s = document.createElementNS("http://www.w3.org/2000/svg", "svg");           s.setAttribute("class", "v1-svg");
  • Network accessline 95
    const s = document.createElementNS("http://www.w3.org/2000/svg", "svg");
  • Network accessline 101
    }         function sv(parent, tag, attrs) {           const e = document.createElementNS("http://www.w3.org/2000/svg", tag);
  • Network accessline 102
    function sv(parent, tag, attrs) {           const e = document.createElementNS("http://www.w3.org/2000/svg", tag);           for (const k in attrs) e.setAttribute(k, attrs[k]);
  • Network accessline 103
    const e = document.createElementNS("http://www.w3.org/2000/svg", tag);

explainer/kits/v1-editorial/starter/package.json

  • Executable scriptline 1
    Executable file

explainer/kits/v1-editorial/starter/tools/sfx.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/kits/v1-editorial/starter/tools/sfx.sh

  • Executable scriptline 1
    #!/usr/bin/env bash

explainer/kits/v10-reasoning/kit.js

  • Executable scriptline 1
    Executable file
  • Network accessline 15
    if (!C) throw new Error("kit v10-reasoning: load lib/core.js before lib/kit/kit.js");   const { clamp01, pr, lerp, E, track } = C;   const NS = "http://www.w3.org/2000/svg";
  • Network accessline 16
    const { clamp01, pr, lerp, E, track } = C;   const NS = "http://www.w3.org/2000/svg";   const T = {
  • Network accessline 17
    const NS = "http://www.w3.org/2000/svg";

explainer/kits/v10-reasoning/starter/beats.js

  • Executable scriptline 1
    Executable file

explainer/kits/v10-reasoning/starter/hyperframes.json

  • Network accessline 1
    {   "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 2
    "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 3
    "registry": "https://raw.githubusercontent.com/heygen-com/hyperframes/main/registry",

explainer/kits/v10-reasoning/starter/index.html

  • Network accessline 6
    <title>V10 推演</title>     <link rel="stylesheet" href="lib/kit/kit.css">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 7
    <link rel="stylesheet" href="lib/kit/kit.css">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>     <style>
  • Network accessline 8
    <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>

explainer/kits/v10-reasoning/starter/package.json

  • Executable scriptline 1
    Executable file

explainer/kits/v10-reasoning/starter/tools/sfx.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/kits/v10-reasoning/starter/tools/sfx.sh

  • Executable scriptline 1
    #!/usr/bin/env bash

explainer/kits/v11-casefile/casefile_sfx.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/kits/v11-casefile/cork.svg

  • Network accessline 1
    <svg xmlns="http://www.w3.org/2000/svg" width="384" height="384" viewBox="0 0 384 384">

explainer/kits/v11-casefile/events.mjs

  • Executable scriptline 1
    Executable file

explainer/kits/v11-casefile/kit.js

  • Executable scriptline 1
    Executable file
  • Network accessline 20
    if (!C) throw new Error("kit v11-casefile: load lib/core.js first");   const { clamp01, pr, E, hash } = C;   const NS = "http://www.w3.org/2000/svg";
  • Network accessline 21
    const { clamp01, pr, E, hash } = C;   const NS = "http://www.w3.org/2000/svg";   const COL = {
  • Network accessline 22
    const NS = "http://www.w3.org/2000/svg";

explainer/kits/v11-casefile/stamp-ink.svg

  • Network accessline 1
    <svg xmlns="http://www.w3.org/2000/svg" width="220" height="220" viewBox="0 0 220 220">

explainer/kits/v11-casefile/starter/beats.js

  • Executable scriptline 1
    Executable file

explainer/kits/v11-casefile/starter/hyperframes.json

  • Network accessline 1
    {   "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 2
    "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 3
    "registry": "https://raw.githubusercontent.com/heygen-com/hyperframes/main/registry",

explainer/kits/v11-casefile/starter/index.html

  • Network accessline 4
    <meta charset="UTF-8">     <meta name="viewport" content="width=1920, height=1080">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 5
    <meta name="viewport" content="width=1920, height=1080">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>     <style>
  • Network accessline 6
    <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>

explainer/kits/v11-casefile/starter/package.json

  • Executable scriptline 1
    Executable file

explainer/kits/v11-casefile/starter/tools/sfx.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/kits/v11-casefile/starter/tools/sfx.sh

  • Executable scriptline 1
    #!/usr/bin/env bash

explainer/kits/v12-sitcom/kit.js

  • Executable scriptline 1
    Executable file
  • Network accessline 21
    if (!C) throw new Error("kit v12-sitcom: load lib/core.js before lib/kit/kit.js");   const { clamp01, pr, lerp, E, hash } = C;   const NS = "http://www.w3.org/2000/svg";
  • Network accessline 23
    const NS = "http://www.w3.org/2000/svg";

explainer/kits/v12-sitcom/sitcom_sfx.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/kits/v12-sitcom/starter/beats.js

  • Executable scriptline 1
    Executable file

explainer/kits/v12-sitcom/starter/hyperframes.json

  • Network accessline 1
    {   "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 2
    "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 3
    "registry": "https://raw.githubusercontent.com/heygen-com/hyperframes/main/registry",

explainer/kits/v12-sitcom/starter/index.html

  • Network accessline 4
    <meta charset="UTF-8">     <meta name="viewport" content="width=1920, height=1080">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 5
    <meta name="viewport" content="width=1920, height=1080">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>     <link rel="stylesheet" href="lib/kit/kit.css">
  • Network accessline 6
    <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>

explainer/kits/v12-sitcom/starter/package.json

  • Executable scriptline 1
    Executable file

explainer/kits/v12-sitcom/starter/tools/sfx.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/kits/v12-sitcom/starter/tools/sfx.sh

  • Executable scriptline 1
    #!/usr/bin/env bash

explainer/kits/v12-sitcom/starter/tools/sfx_beats.py

  • Executable scriptline 1
    Executable file

explainer/kits/v2-signal/kit.js

  • Executable scriptline 1
    Executable file
  • Network accessline 9
    const C = g.ExplainerCore;   const { clamp01, pr, E, hash } = C;   const NS = "http://www.w3.org/2000/svg";
  • Network accessline 10
    const { clamp01, pr, E, hash } = C;   const NS = "http://www.w3.org/2000/svg";   let SEED = 1;
  • Network accessline 11
    const NS = "http://www.w3.org/2000/svg";

explainer/kits/v2-signal/sfx_signal.py

  • Executable scriptline 1
    Executable file

explainer/kits/v2-signal/starter/beats.js

  • Executable scriptline 1
    Executable file

explainer/kits/v2-signal/starter/hyperframes.json

  • Network accessline 1
    {   "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 2
    "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 3
    "registry": "https://raw.githubusercontent.com/heygen-com/hyperframes/main/registry",

explainer/kits/v2-signal/starter/index.html

  • Network accessline 4
    <meta charset="UTF-8">     <meta name="viewport" content="width=1920, height=1080">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 5
    <meta name="viewport" content="width=1920, height=1080">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>     <link rel="stylesheet" href="lib/kit/kit.css">
  • Network accessline 6
    <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 359
    }         }         const NS = "http://www.w3.org/2000/svg";
  • Network accessline 360
    }         const NS = "http://www.w3.org/2000/svg";         function sv(tag, attrs, parent) {
  • Network accessline 361
    const NS = "http://www.w3.org/2000/svg";

explainer/kits/v2-signal/starter/package.json

  • Executable scriptline 1
    Executable file

explainer/kits/v2-signal/starter/tools/sfx.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/kits/v2-signal/starter/tools/sfx.sh

  • Executable scriptline 1
    #!/usr/bin/env bash

explainer/kits/v3-notebook/events.mjs

  • Executable scriptline 1
    Executable file

explainer/kits/v3-notebook/kit.css

  • Network accessline 116
    height: 46px;   margin-top: -25px;   background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 46 46'%3E%3Cpath d='M 6 24 L 17 36 L 40 9' fill='none' stroke='%23c63d2f' stroke-width='6' stroke-linecap='round
  • Network accessline 117
    margin-top: -25px;   background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 46 46'%3E%3Cpath d='M 6 24 L 17 36 L 40 9' fill='none' stroke='%23c63d2f' stroke-width='6' stroke-linecap='round' stroke-linejoi
  • Network accessline 118
    background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 46 46'%3E%3Cpath d='M 6 24 L 17 36 L 40 9' fill='none' stroke='%23c63d2f' stroke-width='6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%
  • Network accessline 141
    bottom: -14px;   height: 12px;   background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 12' preserveAspectRatio='none'%3E%3Cpath d='M 2 7 Q 60 3 110 6 T 198 5' fill='none' stroke='%23c63d2f' stroke-wi
  • Network accessline 142
    height: 12px;   background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 12' preserveAspectRatio='none'%3E%3Cpath d='M 2 7 Q 60 3 110 6 T 198 5' fill='none' stroke='%23c63d2f' stroke-width='3.2' stroke-
  • Network accessline 143
    background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 12' preserveAspectRatio='none'%3E%3Cpath d='M 2 7 Q 60 3 110 6 T 198 5' fill='none' stroke='%23c63d2f' stroke-width='3.2' stroke-linecap='round' 
  • Network accessline 199
    width: calc(var(--ul, 0) * 100%);   height: 0.16em;   background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 16'%3E%3Cpath d='M 0 8 Q 10 1 20 8 T 40 8' fill='none' stroke='%23c63d2f' stroke-width='3.4'
  • Network accessline 200
    height: 0.16em;   background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 16'%3E%3Cpath d='M 0 8 Q 10 1 20 8 T 40 8' fill='none' stroke='%23c63d2f' stroke-width='3.4' stroke-linecap='round'/%3E%3C/svg%3
  • Network accessline 201
    background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 16'%3E%3Cpath d='M 0 8 Q 10 1 20 8 T 40 8' fill='none' stroke='%23c63d2f' stroke-width='3.4' stroke-linecap='round'/%3E%3C/svg%3E") 0 50% / 0.42em

explainer/kits/v3-notebook/kit.js

  • Executable scriptline 1
    Executable file
  • Network accessline 17
    if (!C) throw new Error("kit v3-notebook: load lib/core.js first");   const { clamp01, pr, E, hash } = C;   const NS = "http://www.w3.org/2000/svg";
  • Network accessline 18
    const { clamp01, pr, E, hash } = C;   const NS = "http://www.w3.org/2000/svg";   const COL = {
  • Network accessline 19
    const NS = "http://www.w3.org/2000/svg";

explainer/kits/v3-notebook/notebook_sfx.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/kits/v3-notebook/paper-grain.svg

  • Network accessline 1
    <svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">

explainer/kits/v3-notebook/starter/beats.js

  • Executable scriptline 1
    Executable file

explainer/kits/v3-notebook/starter/hyperframes.json

  • Network accessline 1
    {   "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 2
    "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 3
    "registry": "https://raw.githubusercontent.com/heygen-com/hyperframes/main/registry",

explainer/kits/v3-notebook/starter/index.html

  • Network accessline 4
    <meta charset="UTF-8">     <meta name="viewport" content="width=1920, height=1080">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 5
    <meta name="viewport" content="width=1920, height=1080">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>     <style>
  • Network accessline 6
    <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>

explainer/kits/v3-notebook/starter/package.json

  • Executable scriptline 1
    Executable file

explainer/kits/v3-notebook/starter/tools/sfx.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/kits/v3-notebook/starter/tools/sfx.sh

  • Executable scriptline 1
    #!/usr/bin/env bash

explainer/kits/v4-paper/kit.js

  • Executable scriptline 1
    Executable file
  • Network accessline 476
    const push = h("div", "kit-recap-push");     push.appendChild(h("div", "kit-recap-land", `<svg viewBox="0 0 1920 420" preserveAspectRatio="none"><path d="M 0 110 C 220 60, 420 70, 640 100 C 860 130, 1060 50, 1300 70 C 1540 90, 1720 120, 192
  • Network accessline 477
    push.appendChild(h("div", "kit-recap-land", `<svg viewBox="0 0 1920 420" preserveAspectRatio="none"><path d="M 0 110 C 220 60, 420 70, 640 100 C 860 130, 1060 50, 1300 70 C 1540 90, 1720 120, 1920 80 L 1920 420 L 0 420 Z" fill="#bcd4e6" opa
  • Network accessline 478
    const svgNS = "http://www.w3.org/2000/svg";

explainer/kits/v4-paper/paper-grain.svg

  • Network accessline 1
    <svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">

explainer/kits/v4-paper/paper_sfx.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/kits/v4-paper/starter/beats.js

  • Executable scriptline 1
    Executable file

explainer/kits/v4-paper/starter/hyperframes.json

  • Network accessline 1
    {   "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 2
    "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 3
    "registry": "https://raw.githubusercontent.com/heygen-com/hyperframes/main/registry",

explainer/kits/v4-paper/starter/index.html

  • Network accessline 4
    <meta charset="UTF-8">     <meta name="viewport" content="width=1920, height=1080">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 5
    <meta name="viewport" content="width=1920, height=1080">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>     <link rel="stylesheet" href="lib/kit/kit.css">
  • Network accessline 6
    <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>

explainer/kits/v4-paper/starter/package.json

  • Executable scriptline 1
    Executable file

explainer/kits/v4-paper/starter/tools/sfx.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/kits/v4-paper/starter/tools/sfx.sh

  • Executable scriptline 1
    #!/usr/bin/env bash

explainer/kits/v4-paper/starter/tools/sfx_beats.py

  • Executable scriptline 1
    Executable file

explainer/kits/v5-comic/kit.js

  • Executable scriptline 1
    Executable file
  • Network accessline 14
    if (!C) throw new Error("kit v5-comic: load lib/core.js before lib/kit/kit.js");   const { clamp01, E, hash } = C;   const NS = "http://www.w3.org/2000/svg";
  • Network accessline 15
    const { clamp01, E, hash } = C;   const NS = "http://www.w3.org/2000/svg";   const COL = { ink: "#141414", paper: "#fff6e0", white: "#ffffff", accent: "#ff4fa3", blue: "#1c7bd1", yellow: "#ffe14d", warn: "#ff5a36", ok: "#2fbf5a" };
  • Network accessline 16
    const NS = "http://www.w3.org/2000/svg";

explainer/kits/v5-comic/starter/beats.js

  • Executable scriptline 1
    Executable file

explainer/kits/v5-comic/starter/hyperframes.json

  • Network accessline 1
    {   "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 2
    "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 3
    "registry": "https://raw.githubusercontent.com/heygen-com/hyperframes/main/registry",

explainer/kits/v5-comic/starter/index.html

  • Network accessline 4
    <meta charset="UTF-8">     <meta name="viewport" content="width=1920, height=1080">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 5
    <meta name="viewport" content="width=1920, height=1080">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>     <link rel="stylesheet" href="lib/kit/kit.css">
  • Network accessline 6
    <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>

explainer/kits/v5-comic/starter/package.json

  • Executable scriptline 1
    Executable file

explainer/kits/v5-comic/starter/tools/sfx.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/kits/v5-comic/starter/tools/sfx.sh

  • Executable scriptline 1
    #!/usr/bin/env bash

explainer/kits/v6-cinematic/grain.svg

  • Network accessline 1
    <svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">

explainer/kits/v6-cinematic/kit.js

  • Executable scriptline 1
    Executable file
  • Network accessline 265
    const el = mk("div", "kit-recap");     const scrim = mk("div", "kit-recap-scrim");     const ns = "http://www.w3.org/2000/svg";
  • Network accessline 266
    const scrim = mk("div", "kit-recap-scrim");     const ns = "http://www.w3.org/2000/svg";     const svg = document.createElementNS(ns, "svg");
  • Network accessline 267
    const ns = "http://www.w3.org/2000/svg";

explainer/kits/v6-cinematic/starter/beats.js

  • Executable scriptline 1
    Executable file

explainer/kits/v6-cinematic/starter/hyperframes.json

  • Network accessline 1
    {   "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 2
    "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 3
    "registry": "https://raw.githubusercontent.com/heygen-com/hyperframes/main/registry",

explainer/kits/v6-cinematic/starter/index.html

  • Network accessline 8
    {         "imports": {           "three": "https://cdn.jsdelivr.net/npm/three@0.181.2/build/three.module.js",
  • Network accessline 9
    "imports": {           "three": "https://cdn.jsdelivr.net/npm/three@0.181.2/build/three.module.js",           "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.181.2/examples/jsm/"
  • Network accessline 10
    "three": "https://cdn.jsdelivr.net/npm/three@0.181.2/build/three.module.js",
  • Network accessline 11
    "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.181.2/examples/jsm/"

explainer/kits/v6-cinematic/starter/package.json

  • Executable scriptline 1
    Executable file

explainer/kits/v6-cinematic/starter/tools/sfx.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/kits/v6-cinematic/starter/tools/sfx.sh

  • Executable scriptline 1
    #!/usr/bin/env bash

explainer/kits/v7-drafting/grain.svg

  • Network accessline 1
    <svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">

explainer/kits/v7-drafting/kit.js

  • Executable scriptline 1
    Executable file
  • Network accessline 14
    if (!C) throw new Error("kit v7-drafting: load lib/core.js before lib/kit/kit.js");   const { clamp01, pr, lerp, E, hash, track } = C;   const NS = "http://www.w3.org/2000/svg";
  • Network accessline 15
    const { clamp01, pr, lerp, E, hash, track } = C;   const NS = "http://www.w3.org/2000/svg";   const T = {
  • Network accessline 16
    const NS = "http://www.w3.org/2000/svg";

explainer/kits/v7-drafting/starter/beats.js

  • Executable scriptline 1
    Executable file

explainer/kits/v7-drafting/starter/hyperframes.json

  • Network accessline 1
    {   "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 2
    "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 3
    "registry": "https://raw.githubusercontent.com/heygen-com/hyperframes/main/registry",

explainer/kits/v7-drafting/starter/index.html

  • Network accessline 6
    <title>V7 图纸与注脚</title>     <link rel="stylesheet" href="lib/kit/kit.css">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 7
    <link rel="stylesheet" href="lib/kit/kit.css">     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>     <style>
  • Network accessline 8
    <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>

explainer/kits/v7-drafting/starter/package.json

  • Executable scriptline 1
    Executable file

explainer/kits/v7-drafting/starter/tools/sfx.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/kits/v7-drafting/starter/tools/sfx.sh

  • Executable scriptline 1
    #!/usr/bin/env bash

explainer/kits/v8-chalkboard/chalklog.mjs

  • Executable scriptline 1
    #!/usr/bin/env node
  • Network accessline 62
    await page.setRequestInterception(true);   page.on("request", (r) => (/\.(wav|mp3|mp4)$/.test(r.url()) ? r.abort() : r.continue()));   await page.goto(`http://127.0.0.1:${port}/index.html`, { waitUntil: "domcontentloaded", timeout: 60000 })
  • Network accessline 63
    page.on("request", (r) => (/\.(wav|mp3|mp4)$/.test(r.url()) ? r.abort() : r.continue()));   await page.goto(`http://127.0.0.1:${port}/index.html`, { waitUntil: "domcontentloaded", timeout: 60000 });   await page.waitForFunction(() => window
  • Network accessline 64
    await page.goto(`http://127.0.0.1:${port}/index.html`, { waitUntil: "domcontentloaded", timeout: 60000 });

explainer/kits/v8-chalkboard/grain.svg

  • Network accessline 1
    <svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">

explainer/kits/v8-chalkboard/kit.js

  • Executable scriptline 1
    Executable file
  • Network accessline 13
    if (!X) throw new Error("kit v8-chalkboard: load lib/core.js first");   const { clamp01, pr, lerp, E, hash, track } = X;   const NS = "http://www.w3.org/2000/svg";
  • Network accessline 15
    const NS = "http://www.w3.org/2000/svg";
  • Network accessline 676
    function toneRuns(text, tone, baseTone) {     const runs = [], isL = (ch) => /[A-Za-z0-9≈$%.–\/]/.test(ch);     let cur = "", curL = null;
  • Network accessline 677
    const runs = [], isL = (ch) => /[A-Za-z0-9≈$%.–\/]/.test(ch);     let cur = "", curL = null;     Array.from(text).forEach((ch) => {
  • Network accessline 678
    let cur = "", curL = null;
  • Network accessline 679
    Array.from(text).forEach((ch) => {       const l = ch === " " || ch === "·" ? curL : isL(ch);       if (curL !== null && l !== curL) { runs.push([cur, curL]); cur = ""; }
  • Network accessline 680
    const l = ch === " " || ch === "·" ? curL : isL(ch);
  • Network accessline 681
    if (curL !== null && l !== curL) { runs.push([cur, curL]); cur = ""; }
  • Network accessline 682
    cur += ch;       curL = l;     });
  • Network accessline 683
    curL = l;

explainer/kits/v8-chalkboard/starter/beats.js

  • Executable scriptline 1
    Executable file

explainer/kits/v8-chalkboard/starter/hyperframes.json

  • Network accessline 1
    {   "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 2
    "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 3
    "registry": "https://raw.githubusercontent.com/heygen-com/hyperframes/main/registry",

explainer/kits/v8-chalkboard/starter/index.html

  • Network accessline 5
    <meta name="viewport" content="width=1920, height=1080">     <title>V8 黑板报 · starter</title>     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 6
    <title>V8 黑板报 · starter</title>     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>     <link rel="stylesheet" href="lib/kit/kit.css">
  • Network accessline 7
    <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 386
    // the lesson in one row under the closing line: a mini panel per chapter, in its board colour and border           var tb0 = MAST.rows.length ? MAST.rows[MAST.rows.length - 1].y + MAST.rows[MAST.rows.length - 1].size * 1.25 : 600;         
  • Network accessline 387
    var tb0 = MAST.rows.length ? MAST.rows[MAST.rows.length - 1].y + MAST.rows[MAST.rows.length - 1].size * 1.25 : 600;           var stripY = Math.round(Math.max(tb0 + 30, 790)), nC = STA.length;           if (API.options.outline !== false && 
  • Network accessline 388
    var stripY = Math.round(Math.max(tb0 + 30, 790)), nC = STA.length;
  • Network accessline 389
    if (API.options.outline !== false && stripY + 120 <= PH - 40) {             var bw = Math.min(330, (PM.w - 180 - (nC - 1) * 24) / nC), Le2 = story.line(END), ts0 = story.end.start + 0.25, tsp = Math.min(0.3, (Le2.end - Le2.start) * 0.45 / n
  • Network accessline 390
    var bw = Math.min(330, (PM.w - 180 - (nC - 1) * 24) / nC), Le2 = story.line(END), ts0 = story.end.start + 0.25, tsp = Math.min(0.3, (Le2.end - Le2.start) * 0.45 / nC);

explainer/kits/v8-chalkboard/starter/package.json

  • Executable scriptline 1
    Executable file

explainer/kits/v8-chalkboard/starter/tools/sfx.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/kits/v8-chalkboard/starter/tools/sfx.sh

  • Executable scriptline 1
    #!/usr/bin/env bash

explainer/kits/v9-clay/kit.js

  • Executable scriptline 1
    Executable file

explainer/kits/v9-clay/starter/beats.js

  • Executable scriptline 1
    Executable file

explainer/kits/v9-clay/starter/hyperframes.json

  • Network accessline 1
    {   "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 2
    "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 3
    "registry": "https://raw.githubusercontent.com/heygen-com/hyperframes/main/registry",

explainer/kits/v9-clay/starter/index.html

  • Network accessline 8
    {         "imports": {           "three": "https://cdn.jsdelivr.net/npm/three@0.181.2/build/three.module.js",
  • Network accessline 9
    "imports": {           "three": "https://cdn.jsdelivr.net/npm/three@0.181.2/build/three.module.js",           "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.181.2/examples/jsm/"
  • Network accessline 10
    "three": "https://cdn.jsdelivr.net/npm/three@0.181.2/build/three.module.js",
  • Network accessline 11
    "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.181.2/examples/jsm/"
  • Network accessline 546
    const chap = Kit.chapters($("chap"), story);       const title = END ? Kit.title(story, { parent: $("stage") }) : null;       const leaders = document.createElementNS("http://www.w3.org/2000/svg", "svg");
  • Network accessline 547
    const title = END ? Kit.title(story, { parent: $("stage") }) : null;       const leaders = document.createElementNS("http://www.w3.org/2000/svg", "svg");       leaders.id = "leaders";
  • Network accessline 548
    const leaders = document.createElementNS("http://www.w3.org/2000/svg", "svg");
  • Network accessline 554
    const draft = story.data.draft ? Kit.sticker('<div class="ph-draft">草稿 · 无配音</div>', { x: W - 64, y: 52, ax: 1, ay: 0, clamp: false }) : null;       const LEAD = RECAP ? RECAP.points.map(() => {         const g = document.createElementNS("h
  • Network accessline 555
    const LEAD = RECAP ? RECAP.points.map(() => {         const g = document.createElementNS("http://www.w3.org/2000/svg", "g");         g.innerHTML = '<line x1="0" y1="0" x2="0" y2="0"></line><circle r="8" cx="0" cy="0"></circle>';
  • Network accessline 556
    const g = document.createElementNS("http://www.w3.org/2000/svg", "g");

explainer/kits/v9-clay/starter/package.json

  • Executable scriptline 1
    Executable file

explainer/kits/v9-clay/starter/tools/plan.mjs

  • Executable scriptline 1
    Executable file

explainer/kits/v9-clay/starter/tools/sfx.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/kits/v9-clay/starter/tools/sfx.sh

  • Executable scriptline 1
    #!/usr/bin/env bash

explainer/tools/docs.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/tools/fonts.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 37
    DYH_VERSION = "3.0.0" DYH_CDN = f"https://cdn.jsdelivr.net/npm/@chinese-fonts/dyh@{DYH_VERSION}/dist/SmileySans-Oblique/"
  • Network accessline 38
    DYH_CDN = f"https://cdn.jsdelivr.net/npm/@chinese-fonts/dyh@{DYH_VERSION}/dist/SmileySans-Oblique/"
  • Access to secretsline 39
    [Credential-related source omitted]
  • Network accessline 75
    def fetch(url: str) -> bytes:
  • Network accessline 76
    request = urllib.request.Request(url, headers={"User-Agent": UA})
  • Network accessline 77
    with urllib.request.urlopen(request, timeout=60) as response:
  • Network accessline 81
    def google_face(key: str, spec: dict, chars: str) -> str:     query = urllib.parse.quote(chars, safe="")     css = fetch(f"https://fonts.googleapis.com/css2?family={spec['css']}&text={query}&display=block").decode()
  • Network accessline 82
    query = urllib.parse.quote(chars, safe="")     css = fetch(f"https://fonts.googleapis.com/css2?family={spec['css']}&text={query}&display=block").decode()     urls = re.findall(r"url\((https://[^)]+)\)", css)
  • Network accessline 83
    css = fetch(f"https://fonts.googleapis.com/css2?family={spec['css']}&text={query}&display=block").decode()
  • Network accessline 84
    urls = re.findall(r"url\((https://[^)]+)\)", css)
  • Network accessline 86
    raise SystemExit(f"{key}: expected one subset url, got {len(urls)}")     target = OUT / f"{key}.woff2"     target.write_bytes(fetch(urls[0]))
  • Network accessline 87
    target = OUT / f"{key}.woff2"     target.write_bytes(fetch(urls[0]))     return face(spec, f"assets/fonts/{key}.woff2")
  • Network accessline 88
    target.write_bytes(fetch(urls[0]))
  • Network accessline 111
    def dyh_faces(spec: dict, chars: str) -> list[str]:     base = DYH_DIR / "dist" / "SmileySans-Oblique" if DYH_DIR else None     css = (base / "result.css").read_text(encoding="utf-8") if base else fetch(DYH_CDN + "result.css").decode()
  • Network accessline 112
    base = DYH_DIR / "dist" / "SmileySans-Oblique" if DYH_DIR else None     css = (base / "result.css").read_text(encoding="utf-8") if base else fetch(DYH_CDN + "result.css").decode()     target_dir = OUT / "smiley-sans"
  • Network accessline 113
    css = (base / "result.css").read_text(encoding="utf-8") if base else fetch(DYH_CDN + "result.css").decode()
  • Network accessline 126
    shutil.copy2(base / src.group(1), target_dir / name)             else:                 (target_dir / name).write_bytes(fetch(DYH_CDN + src.group(1)))
  • Network accessline 127
    else:                 (target_dir / name).write_bytes(fetch(DYH_CDN + src.group(1)))             rules.append(face(spec, f"assets/fonts/smiley-sans/{Path(src.group(1)).name}", ranges.group(1).strip()))
  • Network accessline 128
    (target_dir / name).write_bytes(fetch(DYH_CDN + src.group(1)))

explainer/tools/grid.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/tools/new_film.sh

  • Executable scriptline 1
    #!/usr/bin/env bash
  • Dangerous shell operationline 28
    sed -i.bak "s/\"name\": \"[^\"]*\"/\"name\": \"$NAME\"/" "$DEST/package.json" && rm -f "$DEST/package.json.bak"
  • Dangerous shell operationline 30
    rm -f "$DEST/assets/audio/narration.wav"   # always take the story's own narration

explainer/tools/new_topic.sh

  • Executable scriptline 1
    #!/usr/bin/env bash

explainer/tools/qa.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 15
    [Credential-related source omitted]

explainer/tools/render.sh

  • Executable scriptline 1
    #!/usr/bin/env bash
  • Dangerous shell operationline 19
    rm -f "$PROJECT/renders/$NAME-draft-full.mp4"

explainer/tools/srt.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/tools/stamp.py

  • Executable scriptline 1
    #!/usr/bin/env python3

explainer/tools/still_grid.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 30
    [Credential-related source omitted]
  • Access to secretsline 42
    [Credential-related source omitted]

explainer/tools/story.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 37
    [Credential-related source omitted]
  • Network accessline 150
    [Credential-related source omitted]
  • Access to secretsline 150
    [Credential-related source omitted]
  • Network accessline 151
    [Credential-related source omitted]
  • Access to secretsline 151
    [Credential-related source omitted]
  • Network accessline 155
    if pronounce:         body["pronunciation_dict"] = {"tone": list(pronounce)}     req = urllib.request.Request(base + "/v1/t2a_v2", data=json.dumps(body).encode(),
  • Network accessline 156
    [Credential-related source omitted]
  • Network accessline 157
    req = urllib.request.Request(base + "/v1/t2a_v2", data=json.dumps(body).encode(),
  • Network accessline 158
    [Credential-related source omitted]
  • Network accessline 159
    with urllib.request.urlopen(req, timeout=120) as response:
  • Network accessline 164
    if not url:         sys.exit(f"MiniMax returned no word timestamps for 「{text}」 (subtitle_file missing)")     with urllib.request.urlopen(url, timeout=60) as response:
  • Network accessline 165
    sys.exit(f"MiniMax returned no word timestamps for 「{text}」 (subtitle_file missing)")     with urllib.request.urlopen(url, timeout=60) as response:         subs = json.load(response)
  • Network accessline 166
    with urllib.request.urlopen(url, timeout=60) as response:
  • Access to secretsline 378
    [Credential-related source omitted]
  • Access to secretsline 379
    [Credential-related source omitted]
  • Access to secretsline 380
    [Credential-related source omitted]

explainer/tools/sync.sh

  • Executable scriptline 1
    #!/usr/bin/env bash

references/styled-explainer.md

  • Access to secretsline 18
    [Credential-related source omitted]
  • Network accessline 25
    The default voice is MiniMax `Chinese (Mandarin)_Reliable_Executive` (a steady male voice) at speed 1.1; set `voice:` and `speed:` in `script.md` to change it — the user picks a system voice ID from the voice library in their MiniMax consol
  • Network accessline 26
    and `speed:` in `script.md` to change it — the user picks a system voice ID from the voice library in their MiniMax console. The international API is `https://api.minimax.io` (the default); mainland-China accounts use their console's endpoi
  • Network accessline 27
    console. The international API is `https://api.minimax.io` (the default); mainland-China accounts use their console's
  • Network accessline 28
    endpoint via `MINIMAX_BASE_URL` (typically `https://api.minimaxi.com`). Write names, numbers and acronyms in the

scripts/check_state.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/finalize_delivery.sh

  • Executable scriptline 1
    #!/usr/bin/env bash
  • Dangerous shell operationline 52
    # A failed cleanup must not decide the exit status: under `set -e` a rejected rm would turn a
  • Dangerous shell operationline 54
    trap 'rm -rf -- "$TMP_DIR" >/dev/null 2>&1 || true' EXIT INT TERM

scripts/init_job.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/plan_segments.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/preflight.py

  • Executable scriptline 1
    #!/usr/bin/env python3

tests/explainer_smoke.sh

  • Executable scriptline 1
    #!/usr/bin/env bash
  • Dangerous shell operationline 16
    # A failed cleanup must not decide the exit status: under `set -e` a rejected rm would turn a
  • Dangerous shell operationline 18
    trap 'rm -rf -- "$WORK" >/dev/null 2>&1 || true' EXIT INT TERM

tests/smoke.sh

  • Executable scriptline 1
    #!/usr/bin/env bash
  • Dangerous shell operationline 13
    # A failed cleanup must not decide the exit status: under `set -e` a rejected rm would turn a
  • Dangerous shell operationline 15
    trap 'rm -rf -- "$WORK" >/dev/null 2>&1 || true' EXIT INT TERM

tests/story_timing.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 53
    with self.subTest(pronounce=pronounce), tempfile.TemporaryDirectory() as tmp:                 api_result = {"base_resp": {"status_code": 0}, "data": {                     "audio": "00ff", "subtitle_file": "https://example.invalid/subtitles"
  • Network accessline 54
    api_result = {"base_resp": {"status_code": 0}, "data": {                     "audio": "00ff", "subtitle_file": "https://example.invalid/subtitles"                 }}
  • Network accessline 55
    "audio": "00ff", "subtitle_file": "https://example.invalid/subtitles"
  • Access to secretsline 60
    [Credential-related source omitted]

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Some files could not be read; the facts below still hold.

Declared and executed: 14 facts
Signal confidence: 274 facts

and 224 more

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeCompatibleStandard SKILL.md SKILL.md.claude/skills/<skill-name>/
CodexNativeManifest explainer/kits/v1-editorial/starter/AGENTS.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md SKILL.md.opencode/skills/<skill-name>/
  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.

Explore alternatives and comparisons

Add this badge to your README

It updates every night and links to this page.

cclank/lanshu-create-ai-presenter-video: #423 on hotskills, 2.9k stars

[![cclank/lanshu-create-ai-presenter-video on hotskills](https://hotskills.dev/badge/cclank-lanshu-create-ai-presenter-video.svg)](https://hotskills.dev/skill/cclank-lanshu-create-ai-presenter-video/)