> ## Documentation Index
> Fetch the complete documentation index at: https://hyperframes-fix-prompt-guide-validation-bugs.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Anatomy of a one-shot prompt

> The six-part skeleton — route, spec, beats, copy, technique, negatives — that removes the decisions agents most often get wrong.

The [copy-paste examples](/prompting/examples) share one skeleton. Each part removes a decision agents most often get wrong on a first try:

```text theme={null}
[route]      /motion-graphics
[spec]       8-second 1920x1080 video.
[beats]      Beat 1 (0-4s): ...  Beat 2 (4-5s): ...  Beat 3 (5-8s): ...
[copy]       the exact on-screen text, quoted
[technique]  Adapt the `code-typing` and `vfx-shatter` registry blocks.
[negatives]  No narration, no image or media files.
```

* **Route** with a slash command — it loads the right workflow and the framework rules.
* **Spec** duration and resolution up front. Defaults are 1920x1080 at 30fps.
* **Beats** get timestamps. Include pacing instructions ("then hold on the blinking cursor") — agents skip breathing room unless told.
* **Copy** is quoted exactly, with `/` for line breaks. Unquoted copy gets paraphrased.
* **Technique**: name registry blocks exactly as they appear in the [catalog](/catalog/blocks/data-chart) — they're adapted starting points, not drop-ins (blocks ship with demo content the agent rewrites to your beat, so naming one pins the *technique*). Pin a technique wherever the default choice can fail (see [the specification dial](/prompting/specification-dial)).
* **Negatives** close the gaps: "no narration" is not "silent" — if you want no sound at all, say "no audio". Avoid ambiguous phrases like "no external assets" (CDN-loaded runtimes are normal; say "no image or media files" if that's what you mean).

Assembled:

> /motion-graphics Make an 8-second 1920x1080 video. Beat 1 (0-4s): dark macOS terminal types "npx skills add heygen-com/hyperframes" character by character, then hold on the blinking cursor. Beat 2 (4-5s): the terminal shatters into fragments. Beat 3 (5-8s): bold white kinetic text on black slams in word by word, snappy: "YOU JUST MADE THIS / WITH HYPERFRAMES." Adapt the `code-typing` and `vfx-shatter` registry blocks; hand-author the kinetic text. No narration, no image or media files.

<video controls muted loop playsinline preload="metadata" src="https://static.heygen.ai/hyperframes-oss/docs/images/prompting/validate-anatomy-terminal.mp4" style={{ borderRadius: "0.5rem", marginTop: "0.75rem" }} />

*Rendered from the prompt above, unedited.*

## The beat formula

The skeleton above structures the *ask*. Inside each beat, describe the *content* with the same five slots every time:

```text theme={null}
[element]   what's on screen        a giant number · the tweet card · "SHOWREEL"
[motion]    what it does            counts up with an odometer roll · slides up · fades in per letter
[layout]    where it sits           top-center · filling the lower half · bottom-right
[style]     how it looks            dark navy, green accent · 8-bit pixel · thin geometric sans
[timing]    when, inside the beat   at 1s · over 3s, easing out as it lands · staggered 0.1s apart
```

One sentence per element, slots in any order: *"a giant number **(element)** counts up to \$4.2M with an odometer roll **(motion)**, easing out as it lands **(timing)**, centered **(layout)** in green on dark navy **(style)**."* Elements you don't describe, the agent designs — which is fine when you trust its taste and a drift risk when you don't (see [the specification dial](/prompting/specification-dial)).

<Tip>
  Beat-timestamped prompting — `Beat 2 (4-5s): ...` — is HyperFrames' native language. Diffusion video models bolt time segmentation on top of a single clip; here every beat maps directly to a timed clip in the composition, so per-beat descriptions translate losslessly. Use timestamps liberally.
</Tip>

## Common rewrites

The fixes that come up most, as before/after pairs — each exists because of how the engine actually behaves:

**Freezing the hold.** Compositions hold their final state, so a literal "hold" renders a frozen frame — the single biggest cheap-motion tell.

* ❌ `then everything holds motionless to the end`
* ✅ `then everything settles into a gentle ambient idle (breathing scale, slow drift)`

**Simultaneity collisions.** Two things "at 4s" overlap for a few frames; the renderer does exactly what you wrote.

* ❌ `at 4s the counter fades out and READY stamps in`
* ✅ `the counter fades out fully by 4.2s; at 4.2s READY stamps in`

**Vague negatives.** "No external assets" is ambiguous — CDN-loaded runtimes are normal infrastructure.

* ❌ `no external assets`
* ✅ `no image or media files`

**Prose where copy belongs.** Unquoted text gets paraphrased; quoted text renders verbatim.

* ❌ `show a tagline about shipping faster`
* ✅ `tagline: "Ship faster."`

**Format-blind numbers.** An odometer needs fixed digit columns — "counts $0 → $4.2M" forces an awkward "\$0.0M" start.

* ❌ `counts from $0 to $4.2M`
* ✅ `counts up to $4.2M`
