slideshow
GitHub用于构建 HyperFrames 交互式幻灯片演示,支持场景切换、片段揭示、分支热点及演讲者模式。适用于需要可导航演示文稿而非视频导出的场景。
Trigger Scenarios
Install
npx skills add heygen-com/hyperframes --skill slideshow -g -y
SKILL.md
Frontmatter
{
"name": "slideshow",
"description": "Build a HyperFrames slideshow to present live - slides, fragment reveals, branching hotspots and presenter mode with speaker notes, served by `hyperframes present` - or turn an existing page into one. Use when the person wants a deck or presentation rather than a rendered video."
}
Plugin installs: Before setup or freshness commands, follow plugin execution rules when this skill is inside a HyperFrames plugin.
HyperFrames slideshow
A slideshow is a normal composition (the /hyperframes contract applies) plus one JSON island that says which scenes are slides and how they connect. The deliverable is a running deck, not an MP4.
What changes from a video project
- Each slide is a top-level scene in the composition file:
data-composition-id,data-start,data-duration,data-label,data-width,data-height. There is no master root composition wrapping them. - One island per composition, near the top of
<body>, written in the HTML (never generated by script;presentreads the file statically):
<script type="application/hyperframes-slideshow+json">
{
"slides": [
{ "sceneId": "hook", "notes": "Pause on the number." },
{
"sceneId": "problem",
"fragments": [11.0, 15.0],
"hotspots": [
{
"id": "h1",
"label": "Where does $40B come from?",
"target": "market-detail",
"region": { "x": 55, "y": 60, "w": 40, "h": 20 }
}
]
}
],
"slideSequences": [
{ "id": "market-detail", "label": "Market sizing", "slides": [{ "sceneId": "mkt-math" }] }
]
}
</script>
sceneIdequals a scene'sdata-composition-id(or givestartTime/endTime).notesare presenter-only.ttsScript,ttsAudioUrlandttsDurationMsare reserved and not wired yet.- Fragments are absolute timeline times (the same clock as
data-start, not offsets inside the slide) within the slide's[start, end]. Navigation seeks, it never plays: each hold state must look right when the timeline is seeked straight to that time. A slide without fragments enters at a rest frame inside it. - Branch slides are ordinary scenes listed only in
slideSequences, never in the mainslidesarray. A hotspot'stargetis a sequenceid;regionis a percentage box (omit it for a full-slide button). Back returns to the slide that held the hotspot. - Text the audience must read is at least 40 px at 1920×1080. Before hand-building any named visual, search
npx hyperframes catalog --query "<the visual, in English>" --json: it ranks the whole registry with nothing installed.
Porting an existing page
- Keep the source's look, motion, interactions and media behaviour; port its widgets, players and visualizers rather than approximating them.
- Movement the page drove by scroll, wheel or a camera layer becomes a camera move from one focal point to the next on slide navigation, never a page visibly scrolling. Keep each move direct, without reversals the source doesn't make.
- Screenshots, posts, charts, code and any image with readable text are evidence: keep their aspect (
object-fit: contain) and check all four edges for crops. - Every copied
<video>/<audio>needsdata-startanddata-duration(data-has-audio="true"when its sound plays), and nopreload="none". Custom media chrome reads the native element's events andcurrentTime, never its own timer. - Hidden stacked slides need
opacity: 0,visibility: hiddenandpointer-events: nonetogether, or an invisible layer swallows clicks.
Present and hand off
- Never render a deck to MP4:
renderkeeps only the first scene and truncates silently. For stills,snapshot --ateach slide. - Run
npx hyperframes check --jsonuntil it is clean. The slideshow rule checks that everysceneIdresolves, every hotspottargetexists, fragments sit inside their slide, and main-line slides don't overlap. - Serve it with
npx hyperframes present <project-dir>and hand over the URL it prints: "Click Present, or press P, to open the audience tab." - The project's root
index.htmlshould open as a working deck:<hyperframes-slideshow>around<hyperframes-player src="…">, with the raw composition in a subfolder if needed. The component owns Present (P), Prev/Next, the counter, global mute, fullscreen, swipe, hotspots, presenter notes (editable, kept per deck) and stopping media on slide exit. Don't build your own versions of any of these. - Screen sharing: in Google Meet share the audience tab, which keeps rendering in the background. In Zoom drag the audience tab into its own window and share that; a fully covered window freezes.
- A deck opened from the bare player bundle without
presentneeds workarounds:references/standalone-harness.md.
Version History
-
34a8d48
Current 2026-11-02 22:56
重构技能结构,将部分核心技能折叠为指南并更新路径;精简核心条目内容以优化体积和安装效率。
-
9566f96
2026-10-19 05:57
修正技能文档中的错误事实与断裂路径,解决跨技能矛盾,更新插件安装规则及 Figma 源文件处理流程。
-
a80d733
2026-09-22 11:13
重构技能以保持 hyperframes-core 作为 HTML 契约;修复组件目录搜索逻辑,确保在手动构建样式前优先检索注册表;恢复相机配方和根尺寸设置。
-
097d901
2026-08-27 19:55
修正了技能更新机制,要求在执行前必须获得用户明确确认,禁止静默自动运行 npx 更新命令。
-
634df5a
2026-08-19 22:13
修复嵌入字幕分发作者专属路径问题,删除未引用的测试集和主题文档,并移除 SKILL.md 中重复的媒体清理代码块。
- 9d4c349 2026-07-24 22:18


