mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-08-31 02:41:44 +00:00
**`declareVariable`'s field is `declaration`, not `decl`.** Documented wrong in three places across two SDK reference pages. This one fails *silently* — the handler reads `op.declaration`, gets undefined, and returns EMPTY at sdk/src/engine/mutate.ts:991. No throw, no patch, no error. A reader copies the example and nothing happens. types.mdx opens by claiming it was verified against types.ts, which is where the correct name is (line 134). **Colour grading says eighteen presets; the Grade panel has thirteen.** Eighteen is the combined total. The other five carry effects and live in the Effects panel — colorGrading.ts derives GRADE_PRESETS by filtering EFFECT_PRESETS out, and colorGrading.test.ts:25 asserts VHS Playback is *not* in Grade. I wrote that sentence today and used VHS Playback as the example, so the page sent a reader to Grade looking for something that is not there. The visual brief further down had the same error baked in; fixed before anyone shoots it. **`hyperframes render` on a slideshow does not fail — it lies.** The page said export "is not currently supported", which reads like the command errors. The skill is emphatic: a deck has no master root composition, so render resolves only the first slide and writes a silently truncated MP4 — six seconds of a forty-second deck, no warning. That is now a Warning saying exactly that. I also swept every documented edit-operation field against sdk/src/types.ts. Six looked wrong and five were my regex not stripping the `?` optional marker; `easeEach` and `resolvedSelector` are real, at types.ts:178-179. One genuine error out of that sweep, the one above.
92 lines
3.8 KiB
Plaintext
92 lines
3.8 KiB
Plaintext
---
|
||
title: "Create an interactive presentation"
|
||
sidebarTitle: "Presentation"
|
||
description: "Build a navigable deck with reveals, notes, optional branches, hotspots, and presenter mode."
|
||
---
|
||
|
||
import { DocsVideo } from "/snippets/docs-video.jsx";
|
||
|
||
A HyperFrames slideshow stays interactive. The result is a live, navigable deck—not a linear MP4.
|
||
|
||
|
||
<DocsVideo
|
||
title="A real deck being navigated — fragments, a branch, and presenter mode"
|
||
src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/slideshow-demo-v1.mp4"
|
||
poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/slideshow-demo-v1.jpg"
|
||
/>
|
||
|
||
This is a live capture of a running deck, not a video of slides. Watch the
|
||
fragments arrive one key-press at a time, a hotspot jump to a branch slide, the
|
||
back control return to the exact fragment it left, and presenter mode open with
|
||
real speaker notes and a running timer.
|
||
|
||
## Make the request
|
||
|
||
Give the agent the material and the decision the presentation should support:
|
||
|
||
```text
|
||
Using /hyperframes, turn this product strategy outline into a presentation for
|
||
our leadership review: [paste outline]
|
||
```
|
||
|
||
The agent confirms the audience, main outcome, and whether the deck needs
|
||
reveals, optional branches, or presenter notes. You do not need to prescribe
|
||
every slide before seeing the proposed structure.
|
||
|
||
If the result should play from beginning to end without a presenter, use a normal [video workflow](/workflows). A slideshow cannot be exported as one linear MP4 yet.
|
||
|
||
<Warning>
|
||
Do not run `hyperframes render` on a deck. It does not fail — a deck has no
|
||
master root composition, so the render resolves only the **first** slide and
|
||
writes a silently truncated MP4. You can get six seconds of a forty-second
|
||
deck and no warning that anything is missing.
|
||
|
||
Use `hyperframes present` for the live deck, or `hyperframes snapshot` for
|
||
per-slide stills.
|
||
</Warning>
|
||
|
||
## What control does the presenter need?
|
||
|
||
- **Present a clear story** — give every slide one claim, one useful visual, and concise speaker notes.
|
||
- **Reveal points as you speak** — use progressive reveals where the presenter should control the explanation.
|
||
- **Offer optional detail** — keep the main story direct and place deeper material behind clear branches and hotspots.
|
||
- **Convert an interactive page** — preserve its visual language and translate its motion into deliberate slide and reveal states.
|
||
|
||
Attach the source notes, document, page, or existing deck. Name the audience and what should change after the presentation.
|
||
|
||
## Keep the main story clear
|
||
|
||
- **Slides** carry one complete claim and one useful visual.
|
||
- **Reveals** let the presenter add part of an idea at a time.
|
||
- **Branches** hold optional detail without interrupting the story everyone sees.
|
||
- **Speaker notes** help the presenter; they should not repeat the slide.
|
||
|
||
The main story should still make sense when no optional branch is opened.
|
||
|
||
## Review it as a presenter
|
||
|
||
- Each slide makes one clear point.
|
||
- Reveals help the explanation.
|
||
- Hotspots are obvious without distracting.
|
||
- Embedded media stops when its slide is left.
|
||
- Presenter notes and the audience view stay separate.
|
||
- The complete deck works with keyboard, touch, and its visible controls.
|
||
|
||
Use [Studio’s Slideshow panel](/studio/slideshows) to adjust order, notes, reveals, and branches.
|
||
|
||
## Present the deck
|
||
|
||
```bash
|
||
npx hyperframes present <project-directory>
|
||
```
|
||
|
||
Open the local URL, then click **Present** or press **P**. The audience gets a clean full-screen view while the presenter keeps the current slide, next slide, notes, and timer.
|
||
|
||
In Google Meet, share the audience **tab**. In Zoom, move the audience tab into its own window and share that window.
|
||
|
||
## Related topics
|
||
|
||
- [Build and revise a slideshow in Studio](/studio/slideshows)
|
||
- [Use variables and templates](/studio/variables)
|
||
- [Create a linear video instead](/workflows)
|