> ## Documentation Index
> Fetch the complete documentation index at: https://hyperframes-canary-calibration-notes.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 30 Days of HyperFrames

> The official 30 Days of HyperFrames lessons, collected in one place as the series is published.

export const HoverVideo = ({src, poster, className, hasAudio = true}) => {
  const videoRef = useRef(null);
  const wrapRef = useRef(null);
  const [muted, setMuted] = useState(true);
  const [playing, setPlaying] = useState(false);
  const [inView, setInView] = useState(false);
  const [reduced, setReduced] = useState(() => typeof window !== "undefined" && typeof window.matchMedia === "function" && window.matchMedia("(prefers-reduced-motion: reduce)").matches);
  useEffect(() => {
    const query = window.matchMedia("(prefers-reduced-motion: reduce)");
    const onChange = () => setReduced(query.matches);
    query.addEventListener("change", onChange);
    return () => query.removeEventListener("change", onChange);
  }, []);
  useEffect(() => {
    const el = wrapRef.current;
    if (!el || typeof IntersectionObserver !== "function") {
      setInView(true);
      return;
    }
    const observer = new IntersectionObserver(entries => setInView(entries[0]?.isIntersecting ?? false), {
      rootMargin: "200px"
    });
    observer.observe(el);
    return () => observer.disconnect();
  }, []);
  useEffect(() => {
    const video = videoRef.current;
    if (!video) return;
    if (!inView) {
      video.pause();
      video.removeAttribute("src");
      video.load();
      setMuted(true);
      setPlaying(false);
      return;
    }
    if (reduced && video.muted) video.pause();
  }, [inView, reduced]);
  const start = () => {
    const video = videoRef.current;
    if (video) video.play().catch(() => {});
  };
  const toggleSound = () => {
    const video = videoRef.current;
    if (!video) return;
    const next = !muted;
    setMuted(next);
    video.muted = next;
    if (!next) start();
  };
  const togglePlay = () => {
    const video = videoRef.current;
    if (!video) return;
    if (video.paused) start(); else video.pause();
  };
  const autoplaying = inView && !reduced;
  const icon = paths => <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
      {paths}
    </svg>;
  return <div ref={wrapRef} className={`relative overflow-hidden ${className ?? ""}`}>
      <video ref={videoRef} className="absolute inset-0 h-full w-full object-cover" src={inView ? src : undefined} poster={poster} autoPlay={autoplaying} muted={muted} loop={autoplaying} playsInline preload="none" onPlay={() => setPlaying(true)} onPause={() => setPlaying(false)} onMouseEnter={() => {
    if (hasAudio && !reduced && muted) toggleSound();
  }} onMouseLeave={() => {
    if (hasAudio && !muted) toggleSound();
  }} />
      <button type="button" onClick={e => {
    e.preventDefault();
    e.stopPropagation();
    (hasAudio ? toggleSound : togglePlay)();
  }} aria-pressed={hasAudio ? !muted : playing} aria-label={hasAudio ? muted ? reduced ? "Play this preview with sound" : "Unmute this preview" : "Mute this preview" : playing ? "Pause this preview" : "Play this preview"} className="absolute left-2 top-2 z-10 inline-flex items-center gap-1 rounded-full bg-black/60 px-2.5 py-1 text-xs font-medium text-white backdrop-blur transition hover:bg-black/75 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-white">
        {hasAudio ? muted ? icon(<><path d="M11 5 6 9H2v6h4l5 4V5z" /><line x1="23" y1="9" x2="17" y2="15" /><line x1="17" y1="9" x2="23" y2="15" /></>) : icon(<><path d="M11 5 6 9H2v6h4l5 4V5z" /><path d="M15.5 8.5a5 5 0 0 1 0 7" /><path d="M18.5 5.5a9 9 0 0 1 0 13" /></>) : playing ? icon(<><rect x="6" y="4" width="4" height="16" /><rect x="14" y="4" width="4" height="16" /></>) : icon(<polygon points="5 3 19 12 5 21 5 3" />)}
        {hasAudio ? muted ? "Sound" : "On" : playing ? "Pause" : "Play"}
      </button>
    </div>;
};

One lesson a day, each one built and rendered before it was posted. Every day below links to its original post for the prompt and the discussion; where the film or a frame from it is published, you can see the result here first.

The series began on [@HeyGen](https://x.com/HeyGen) and continues on [@HyperFrames\_](https://x.com/HyperFrames_).

## Start and create

Days 1 to 9 cover the inputs: a repo, a track, a topic, a speaker, a design file. Every card opens the original post.

<CardGroup cols={2}>
  <Card title="Day 1 — Install HyperFrames" href="https://x.com/HeyGen/status/2074176916819685648">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-01.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-01.jpg" hasAudio={false} />

    Give your coding agent the HyperFrames skills. One router reads the request and picks the workflow.
  </Card>

  <Card title="Day 2 — Give your brand a motion language" href="https://x.com/HeyGen/status/2074574265714905167">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-02.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-02.jpg" hasAudio={false} />

    Turn a visual identity into reusable motion direction, written down once as `FRAME.md` and read on every later build.
  </Card>

  <Card title="Day 3 — PR-to-Video" href="https://x.com/HeyGen/status/2074954182583554051">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-03-s.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-03.jpg" />

    Explain an open pull request as a short video. Plays in full [above](#three-lessons-in-full).
  </Card>

  <Card title="Day 4 — Music-to-Video" href="https://x.com/HeyGen/status/2075262117964615956">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-04-s.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-04.jpg" />

    Build a video around a track and its beat. Plays in full [above](#three-lessons-in-full).
  </Card>

  <Card title="Day 5 — Faceless explainer" href="https://x.com/HeyGen/status/2075682104302882908">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-05-s.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-05.jpg" />

    Turn a topic into a designed explainer without footage. The visuals are invented per scene.
  </Card>

  <Card title="Day 6 — Talking-head recut" href="https://x.com/HeyGen/status/2075998619325604238">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-06-s.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-06.jpg" />

    Add synchronized graphics to an existing speaker video. The source clip plays untouched underneath.
  </Card>

  <Card title="Day 7 — Motion graphics" href="https://x.com/HeyGen/status/2076381187640324427">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-07.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-07.jpg" hasAudio={false} />

    Make a short, design-led animation where the motion carries the message.
  </Card>

  <Card title="Day 8 — Music and SFX with the HeyGen CLI" href="https://x.com/HeyGen/status/2076719036742922504">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-08-s.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-08.jpg" />

    Find and use audio from the command line, then let the mix duck itself under the narration.
  </Card>

  <Card title="Day 9 — Figma to HyperFrames" href="https://x.com/HeyGen/status/2077072141309382770">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-09.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-09.jpg" hasAudio={false} />

    Turn an existing design into a video composition — as live HTML, not a flattened export.
  </Card>
</CardGroup>

## Direct and refine

Days 10 to 19 are about steering: how you ask, what you inspect, and what you fix before rendering.

<CardGroup cols={2}>
  <Card title="Day 10 — Anatomy of a prompt" href="https://x.com/HeyGen/status/2077438104982667282">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-10.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-10.jpg" hasAudio={false} />

    Structure a request so the agent gets the important intent right the first time.
  </Card>

  <Card title="Day 11 — Repurpose an existing video" href="https://x.com/HeyGen/status/2077798995762823593">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-11-s.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-11.jpg" />

    Extract useful patterns from a reference instead of describing them from memory.
  </Card>

  <Card title="Day 12 — Dynamic captions" href="https://x.com/HeyGen/status/2078190361932103716">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-12-s.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-12.jpg" />

    Make captions part of the visual design rather than a track laid on top.
  </Card>

  <Card title="Day 13 — Studio preview, part 1" href="https://x.com/HeyGen/status/2078589328562016559">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-13.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-13.jpg" hasAudio={false} />

    Inspect a composition before rendering — in Studio, through your agent, or from the terminal.
  </Card>

  <Card title="Day 14 — Studio preview, part 2: keyframes" href="https://x.com/HeyGen/status/2078945075787452660">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-14.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-14.jpg" hasAudio={false} />

    Adjust motion with visible keyframe controls, one lane per animated property.
  </Card>

  <Card title="Day 15 — Sample the web" href="https://x.com/HeyGen/status/2079251321484722675">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-15.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-15.jpg" hasAudio={false} />

    Bring useful web motion into a composition by capturing the real page.
  </Card>

  <Card title="Day 16 — Media use" href="https://x.com/HeyGen/status/2079609229737111978">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-16-s.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-16.jpg" />

    Work with the available asset libraries, and control how each one crops and fits.
  </Card>

  <Card title="Day 17 — Storyboard" href="https://x.com/HeyGen/status/2080012076454719554">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-17-s.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-17.jpg" />

    Agree on the sequence before building every scene, so revisions land on the plan rather than the render.
  </Card>

  <Card title="Day 18 — HyperFrames in Video Agent" href="https://x.com/HeyGen/status/2080407266755510452">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-18-s.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-18.jpg" />

    Create with HyperFrames inside HeyGen Video Agent.
  </Card>

  <Card title="Day 19 — Background removal" href="https://x.com/HeyGen/status/2080762012330807438">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-19-s.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-19.jpg" />

    Use alpha channels to layer subjects into a scene, with the matte holding while the subject moves.
  </Card>
</CardGroup>

## Extend and ship

Days 20 to 30 move from one composition to a repeatable pipeline: reusable blocks, variables, grading, and rendering somewhere other than your laptop.

<CardGroup cols={2}>
  <Card title="Day 20 — Claude Design" href="https://x.com/HyperFrames_/status/2081184676430160379">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-20.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-20.jpg" hasAudio={false} />

    Take a design direction into a HyperFrames project without redrawing it by hand.
  </Card>

  <Card title="Day 21 — Cloud rendering" href="https://x.com/HyperFrames_/status/2081491370485952790">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-21.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-21.jpg" hasAudio={false} />

    Render without making one local computer the bottleneck. Two commands hand the job to the cloud.
  </Card>

  <Card title="Day 22 — Components Catalog" href="https://x.com/HyperFrames_/status/2081798071353278651">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-22-s.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-22.jpg" />

    Add reusable scenes and effects instead of rebuilding them each time.
  </Card>

  <Card title="Day 23 — Templates and variables" href="https://x.com/HyperFrames_/status/2082197435246600341">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-23-s.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-23.jpg" />

    Turn one composition into repeatable versions. Plays in full [above](#three-lessons-in-full).
  </Card>

  <Card title="Day 24 — Color grading" href="https://x.com/HyperFrames_/status/2082536413829235004">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-24-s.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-24.jpg" />

    Correct or stylize images and footage in code, and bring your own LUT packs.
  </Card>

  <Card title="Day 25 — Prompt Guide" href="https://x.com/HyperFrames_/status/2082892893027749917">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-25-s.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-25.jpg" />

    Find practical language and examples for directing an agent. The written guide lives in these docs, at [Prompting overview](/prompting/overview).
  </Card>

  <Card title="Day 26 — Media effects and overlays" href="https://x.com/HyperFrames_/status/2083324288632045910">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-26.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-26.jpg" hasAudio={false} />

    Add designed treatments to real media. Two to six authored colour ramps change the whole visual language.
  </Card>

  <Card title="Day 27 — Deploy" href="https://x.com/HyperFrames_/status/2083633492894900456">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-27-s.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-27.jpg" />

    Run rendering on your own cloud infrastructure. See [Deploy](/guides/deploy) for the four render routes.
  </Card>

  <Card title="Day 28 — Contribute to the Catalog" href="https://x.com/HyperFrames_/status/2084070152975634743">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-28-s.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-28.jpg" />

    Publish reusable building blocks for other creators. The [Catalog](/catalog) lists what has landed so far.
  </Card>

  <Card title="Day 29 — Components update" href="https://x.com/HyperFrames_/status/2084338269194732003">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-29-s.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-29.jpg" />

    Combine the expanded component set in a single project.
  </Card>

  <Card title="Day 30 — Thirty for thirty">
    <HoverVideo className="w-full aspect-video rounded-lg object-cover bg-zinc-100 dark:bg-zinc-900" src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-30.mp4" poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/thirty-days-day-30.jpg" hasAudio={false} />

    Thirty days in one cut — a second from every lesson, back to back. From install on Day 1 to the whole series here.
  </Card>
</CardGroup>

## Related topics

* [Choose a creation workflow](/workflows)
* [Direct your agent with the Prompt Guide](/prompting/overview)
* [Browse reusable Catalog elements](/catalog)
