Install
openclaw skills install @heygen-com/slideshowBuild 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.
openclaw skills install @heygen-com/slideshowPlugin installs: Before setup or freshness commands, follow plugin execution rules when this skill is inside a HyperFrames plugin.
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.
data-composition-id, data-start, data-duration, data-label, data-width, data-height. There is no master root composition wrapping them.<body>, written in the HTML (never generated by script; present reads 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>
sceneId equals a scene's data-composition-id (or give startTime/endTime). notes are presenter-only. ttsScript, ttsAudioUrl and ttsDurationMs are reserved and not wired yet.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.slideSequences, never in the main slides array. A hotspot's target is a sequence id; region is a percentage box (omit it for a full-slide button). Back returns to the slide that held the hotspot.npx hyperframes catalog --query "<the visual, in English>" --json: it ranks the whole registry with nothing installed.object-fit: contain) and check all four edges for crops.<video>/<audio> needs data-start and data-duration (data-has-audio="true" when its sound plays), and no preload="none". Custom media chrome reads the native element's events and currentTime, never its own timer.opacity: 0, visibility: hidden and pointer-events: none together, or an invisible layer swallows clicks.render keeps only the first scene and truncates silently. For stills, snapshot --at each slide.npx hyperframes check --json until it is clean. The slideshow rule checks that every sceneId resolves, every hotspot target exists, fragments sit inside their slide, and main-line slides don't overlap.npx hyperframes present <project-dir> and hand over the URL it prints: "Click Present, or press P, to open the audience tab."index.html should 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.present needs workarounds: references/standalone-harness.md.