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

# Weekly updates

> Curated weekly highlights for HyperFrames.

export const DocsVideo = ({src, poster, title, autoPlay = false, loop = false, portrait = false}) => {
  const videoRef = useRef(null);
  const playerRef = useRef(null);
  const hideTimerRef = useRef(null);
  const progressFrameRef = useRef(null);
  const [enhanced, setEnhanced] = useState(false);
  const [playing, setPlaying] = useState(false);
  const [waiting, setWaiting] = useState(false);
  const [muted, setMuted] = useState(false);
  const [currentTime, setCurrentTime] = useState(0);
  const [duration, setDuration] = useState(0);
  const [playbackRate, setPlaybackRate] = useState(1);
  const [controlsVisible, setControlsVisible] = useState(false);
  const [fullscreen, setFullscreen] = useState(false);
  const [fullscreenSupported, setFullscreenSupported] = useState(false);
  const [previewing, setPreviewing] = useState(false);
  const [scrubbing, setScrubbing] = useState(false);
  const [previewTime, setPreviewTime] = useState(0);
  const [previewPosition, setPreviewPosition] = useState(0);
  const formatTime = seconds => {
    if (!Number.isFinite(seconds) || seconds < 0) return "0:00";
    const minutes = Math.floor(seconds / 60);
    const remaining = Math.floor(seconds % 60);
    return `${minutes}:${String(remaining).padStart(2, "0")}`;
  };
  const clearHideTimer = () => {
    if (hideTimerRef.current) {
      window.clearTimeout(hideTimerRef.current);
      hideTimerRef.current = null;
    }
  };
  const revealControls = () => {
    setControlsVisible(true);
    clearHideTimer();
    hideTimerRef.current = window.setTimeout(() => setControlsVisible(false), 2200);
  };
  const togglePlayback = async () => {
    const video = videoRef.current;
    if (!video) return;
    if (video.paused || video.ended) {
      if (video.ended) video.currentTime = 0;
      setWaiting(true);
      try {
        await video.play();
      } catch {
        setWaiting(false);
        setPlaying(false);
      }
    } else {
      video.pause();
      setControlsVisible(true);
    }
  };
  const toggleMute = () => {
    const video = videoRef.current;
    if (!video) return;
    if (video.muted && video.volume === 0) video.volume = 0.8;
    video.muted = !video.muted;
    setMuted(video.muted);
  };
  const seek = event => {
    const video = videoRef.current;
    if (!video) return;
    const nextTime = Number(event.target.value);
    video.currentTime = nextTime;
    setCurrentTime(nextTime);
  };
  const updateScrubPreview = (event, seekMainVideo = false) => {
    if (!duration) return;
    const rect = event.currentTarget.getBoundingClientRect();
    const ratio = Math.min(1, Math.max(0, (event.clientX - rect.left) / rect.width));
    const nextTime = ratio * duration;
    setPreviewing(true);
    setPreviewTime(nextTime);
    setPreviewPosition(ratio * 100);
    if (seekMainVideo) {
      const video = videoRef.current;
      if (video) {
        video.currentTime = nextTime;
        setCurrentTime(nextTime);
      }
    }
  };
  const cyclePlaybackRate = () => {
    const video = videoRef.current;
    if (!video) return;
    const rates = [1, 1.25, 1.5, 2];
    const currentIndex = rates.indexOf(video.playbackRate);
    const nextRate = rates[(currentIndex + 1) % rates.length];
    video.playbackRate = nextRate;
    setPlaybackRate(nextRate);
  };
  const toggleFullscreen = async () => {
    const player = playerRef.current;
    const video = videoRef.current;
    if (!player || typeof document === "undefined") return;
    try {
      if (document.fullscreenElement) {
        await document.exitFullscreen();
      } else if (player.requestFullscreen) {
        await player.requestFullscreen();
      } else if (video?.webkitEnterFullscreen) {
        video.webkitEnterFullscreen();
      }
    } catch {}
  };
  const handleKeyboard = event => {
    if (event.target !== event.currentTarget) return;
    const video = videoRef.current;
    if (!video) return;
    if (event.key === " " || event.key === "Enter") {
      event.preventDefault();
      togglePlayback();
    } else if (event.key === "ArrowLeft") {
      event.preventDefault();
      video.currentTime = Math.max(0, video.currentTime - 5);
    } else if (event.key === "ArrowRight") {
      event.preventDefault();
      video.currentTime = Math.min(duration || video.duration || 0, video.currentTime + 5);
    } else if (event.key.toLowerCase() === "m") {
      event.preventDefault();
      toggleMute();
    } else if (event.key.toLowerCase() === "f") {
      event.preventDefault();
      toggleFullscreen();
    }
  };
  useEffect(() => {
    setEnhanced(true);
    setFullscreenSupported(Boolean(playerRef.current?.requestFullscreen || videoRef.current?.webkitEnterFullscreen));
    return () => {
      clearHideTimer();
    };
  }, []);
  useEffect(() => {
    if (typeof document === "undefined") return undefined;
    const syncFullscreen = () => setFullscreen(document.fullscreenElement === playerRef.current);
    document.addEventListener("fullscreenchange", syncFullscreen);
    return () => document.removeEventListener("fullscreenchange", syncFullscreen);
  }, []);
  useEffect(() => {
    clearHideTimer();
    if (!playing) return undefined;
    hideTimerRef.current = window.setTimeout(() => setControlsVisible(false), 2200);
    return clearHideTimer;
  }, [playing]);
  useEffect(() => {
    if (!playing) return undefined;
    const updateProgress = () => {
      const video = videoRef.current;
      if (video && !video.paused) setCurrentTime(video.currentTime);
      progressFrameRef.current = window.requestAnimationFrame(updateProgress);
    };
    progressFrameRef.current = window.requestAnimationFrame(updateProgress);
    return () => {
      if (progressFrameRef.current) window.cancelAnimationFrame(progressFrameRef.current);
      progressFrameRef.current = null;
    };
  }, [playing]);
  const progress = duration > 0 ? currentTime / duration * 100 : 0;
  const replaying = duration > 0 && currentTime >= duration - 0.15;
  return <div className="hf-docs-video-block" data-portrait={portrait ? "true" : "false"}>
      <div ref={playerRef} className="hf-docs-video" role="region" aria-label={title} tabIndex={0} onKeyDown={handleKeyboard} onPointerMove={revealControls} onPointerLeave={() => setControlsVisible(false)} onFocus={revealControls} onBlur={event => {
    if (!event.currentTarget.contains(event.relatedTarget)) setControlsVisible(false);
  }}>
        <video ref={videoRef} aria-label={title} src={src} poster={poster} autoPlay={autoPlay} loop={loop} playsInline preload="metadata" controls={!enhanced} onClick={togglePlayback} onDoubleClick={toggleFullscreen} onLoadedMetadata={event => {
    const nextDuration = event.currentTarget.duration || 0;
    setDuration(nextDuration);
    setMuted(event.currentTarget.muted);
  }} onDurationChange={event => setDuration(event.currentTarget.duration || 0)} onTimeUpdate={event => setCurrentTime(event.currentTarget.currentTime)} onPlay={() => setPlaying(true)} onPause={() => setPlaying(false)} onPlaying={() => setWaiting(false)} onWaiting={() => setWaiting(true)} onCanPlay={() => setWaiting(false)} onEnded={() => {
    setPlaying(false);
    setControlsVisible(true);
  }} onVolumeChange={event => setMuted(event.currentTarget.muted)} />

        {enhanced && <>
            {!playing && (currentTime <= 0.2 || replaying) && <button type="button" className="hf-docs-video-hero-play" onClick={togglePlayback} aria-label={replaying ? "Replay video" : "Play video"}>
                <span className="hf-docs-video-hero-icon" aria-hidden="true">
                  <svg viewBox="0 0 24 24">
                    <path d="M8 5.5v13l10-6.5z" />
                  </svg>
                </span>
              </button>}

            {waiting && playing && <span className="hf-docs-video-spinner" aria-label="Loading" />}

            <div className="hf-docs-video-controls" data-visible={controlsVisible ? "true" : "false"}>
              <div className="hf-docs-video-scrub-preview" data-visible={previewing ? "true" : "false"} style={{
    "--hf-video-preview-x": `${previewPosition}%`
  }} aria-hidden="true">
                <span>{formatTime(previewTime)}</span>
              </div>

              <input className="hf-docs-video-progress" type="range" min="0" max={duration || 0} step="0.01" value={Math.min(currentTime, duration || 0)} aria-label="Video progress" aria-valuetext={`${formatTime(currentTime)} of ${formatTime(duration)}`} onChange={seek} onPointerEnter={updateScrubPreview} onPointerMove={event => updateScrubPreview(event, scrubbing || event.buttons === 1)} onPointerDown={event => {
    setScrubbing(true);
    event.currentTarget.setPointerCapture?.(event.pointerId);
    updateScrubPreview(event, true);
  }} onPointerUp={event => {
    setScrubbing(false);
    if (event.pointerType !== "mouse") setPreviewing(false);
  }} onPointerCancel={() => {
    setScrubbing(false);
    setPreviewing(false);
  }} onPointerLeave={() => {
    if (!scrubbing) setPreviewing(false);
  }} style={{
    "--hf-video-progress": `${progress}%`
  }} />

              <div className="hf-docs-video-control-row">
                <button type="button" className="hf-docs-video-control" onClick={togglePlayback} aria-label={playing ? "Pause video" : "Play video"}>
                  {playing ? <svg viewBox="0 0 24 24" aria-hidden="true">
                      <path d="M7 5h4v14H7zm6 0h4v14h-4z" />
                    </svg> : <svg viewBox="0 0 24 24" aria-hidden="true">
                      <path d="M8 5.5v13l10-6.5z" />
                    </svg>}
                </button>

                <button type="button" className="hf-docs-video-control" onClick={toggleMute} aria-label={muted ? "Unmute video" : "Mute video"}>
                  {muted ? <svg viewBox="0 0 24 24" aria-hidden="true">
                      <path d="M4 9v6h4l5 4V5L8 9zm11.5 1.1 1.4-1.4 1.6 1.6 1.6-1.6 1.4 1.4-1.6 1.6 1.6 1.6-1.4 1.4-1.6-1.6-1.6 1.6-1.4-1.4 1.6-1.6z" />
                    </svg> : <svg viewBox="0 0 24 24" aria-hidden="true">
                      <path d="M4 9v6h4l5 4V5L8 9zm11 1.2v3.6c1-.5 1.7-1.5 1.7-2.8S16 10.7 15 10.2zm0-4v2.1c2.2.6 3.7 2.5 3.7 4.7s-1.5 4.1-3.7 4.7v2.1c3.3-.7 5.7-3.5 5.7-6.8S18.3 6.9 15 6.2z" />
                    </svg>}
                </button>

                <span className="hf-docs-video-time" aria-hidden="true">
                  {formatTime(currentTime)} <span>/</span> {formatTime(duration)}
                </span>

                <span className="hf-docs-video-spacer" />

                <button type="button" className="hf-docs-video-rate" onClick={cyclePlaybackRate} aria-label={`Playback speed ${playbackRate} times`}>
                  {playbackRate}×
                </button>

                {fullscreenSupported && <button type="button" className="hf-docs-video-control" onClick={toggleFullscreen} aria-label={fullscreen ? "Exit fullscreen" : "Enter fullscreen"}>
                    {fullscreen ? <svg viewBox="0 0 24 24" aria-hidden="true">
                        <path d="M8 3H6v3H3v2h5zm8 0v5h5V6h-3V3zM3 16v2h3v3h2v-5zm13 0v5h2v-3h3v-2z" />
                      </svg> : <svg viewBox="0 0 24 24" aria-hidden="true">
                        <path d="M3 8h2V5h3V3H3zm13-5v2h3v3h2V3zM5 16H3v5h5v-2H5zm14 3h-3v2h5v-5h-2z" />
                      </svg>}
                  </button>}
              </div>
            </div>
          </>}
      </div>

    </div>;
};

Weekly HyperFrames highlights across releases, examples, docs, and community updates.

For exact versioned release notes, see the [Changelog](/changelog).

<Update label="Week of August 3, 2026" description="Weekly digest - August 3, 2026 - August 10, 2026" tags={["Weekly update", "Highlights"]}>
  <Frame>
    <DocsVideo title="HyperFrames video: Weekly Changelog Aug03 10" src="https://static.heygen.ai/hyperframes/changelog-videos/weekly-changelog-aug03-10.mp4" />
  </Frame>

  Documentation is the largest change this week. The site gains a Studio section, workflow guides, and section hubs, and a long sweep replaces prose with film on pages that only described things. The parallel drawElement router is back on for every install. A security sweep closes a filename bug class at nine call sites instead of the one a test pinned. Studio gets long correctness runs on canvas resize and on files edited outside the editor. Fifteen releases shipped, v0.7.90 through v0.7.105.

  ## Features

  * **The parallel drawElement router is on for every install again.** It shipped default-on in late July. A canary then cut router exposure across the fleet to 0.13 percent of non-CI renders, roughly 25 times less than before, because installs outside the cohort were explicitly disarmed. The gating was itself the regression, so the canary entry and the guard that read it are both gone and the producer default stands on its own. The per-install circuit breaker and the per-render self-verify are unchanged, and `HF_DE_PARALLEL_ROUTER=false` is still the kill switch. This affects speed only, never output ([19defeabf](https://github.com/heygen-com/hyperframes/commit/19defeabfe8fa47747d1d8bc087a84d69a09cb59), [4a2514232](https://github.com/heygen-com/hyperframes/commit/4a2514232b9f20ea4baa94510e79a42bae85e92f), [c6df112ac](https://github.com/heygen-com/hyperframes/commit/c6df112ac1843e228a9d40bbcb6bad1752f53de5), [af535080a](https://github.com/heygen-com/hyperframes/commit/af535080a250bb150c0a6448517a075cd8076818)).
  * **Catalog search can rank by meaning, on your own machine.** `catalog search` can match a phrasing that shares no words with the move you want. It runs on a one-time 33 MB model download that stays on your machine, and nothing is sent anywhere. It is opt-in, so word matching remains the default until you accept that download. The output also reports how many catalog moves the local index has never seen, so a stale index cannot pass for a thin catalog ([68205dbbc](https://github.com/heygen-com/hyperframes/commit/68205dbbc159412209663ede7732629b4f50bcf1), [#3089](https://github.com/heygen-com/hyperframes/pull/3089)).
  * **Sign in from a headless terminal.** `hyperframes auth login --device` runs the RFC 8628 device flow, so an SSH session or a machine with no browser can authenticate ([b9233525b](https://github.com/heygen-com/hyperframes/commit/b9233525b2e02ec9329445ab2602ebd557033daf), [#2836](https://github.com/heygen-com/hyperframes/pull/2836)).
  * **Studio handles files edited outside the editor.** Studio coordinates external file changes, preserves the conflict rather than silently dropping one side, and ships recovery UI for it. Pending edits drain before a reload, external edits reconcile first, and inspector commits are transactional ([a99caad58](https://github.com/heygen-com/hyperframes/commit/a99caad581496f2ad8e132b750ced73be8cf3e51), [#2991](https://github.com/heygen-com/hyperframes/pull/2991), [b30a23402](https://github.com/heygen-com/hyperframes/commit/b30a23402e2db19b43cb0283e1553048746fb8bb), [#2990](https://github.com/heygen-com/hyperframes/pull/2990), [8a0dccfc7](https://github.com/heygen-com/hyperframes/commit/8a0dccfc72224d993efdb0ae8d95fc0e020327d4), [#2992](https://github.com/heygen-com/hyperframes/pull/2992), [ebdd1893c](https://github.com/heygen-com/hyperframes/commit/ebdd1893c4a0d86b984fb627fed0283a981d2713), [#2993](https://github.com/heygen-com/hyperframes/pull/2993), [471313854](https://github.com/heygen-com/hyperframes/commit/47131385445c0f8ee4203f8d6ff4f5600d8c8b2e), [#2989](https://github.com/heygen-com/hyperframes/pull/2989), [552419c52](https://github.com/heygen-com/hyperframes/commit/552419c52d16fa5a5e8d15a9263bc5f41e596360), [#2987](https://github.com/heygen-com/hyperframes/pull/2987)).
  * **Timeline navigation, and steadier virtualized gestures.** Logical timeline navigation is modelled and the live timeline clock is extracted. Five virtualized interactions are stabilised: clip gestures, keyframe retiming, drops, marquee selection, and beat gestures. Thumbnail generation is cancelable now, so a scroll no longer queues work nobody is waiting for ([0f1333c80](https://github.com/heygen-com/hyperframes/commit/0f1333c80d3c18eddf8af69110168cc910d14fec), [#2712](https://github.com/heygen-com/hyperframes/pull/2712), [19b8a1f3c](https://github.com/heygen-com/hyperframes/commit/19b8a1f3c5a55c30b5aa367c9054ca1b31552536), [#2711](https://github.com/heygen-com/hyperframes/pull/2711), [f52398cee](https://github.com/heygen-com/hyperframes/commit/f52398ceeff388bab66a8ce2fd8db96c786e8f69), [#2704](https://github.com/heygen-com/hyperframes/pull/2704), [44bee4c3c](https://github.com/heygen-com/hyperframes/commit/44bee4c3cf208c1f2757beca2e2aa38e96aebc3c), [#2705](https://github.com/heygen-com/hyperframes/pull/2705), [bb5c60387](https://github.com/heygen-com/hyperframes/commit/bb5c603870a0ef2b0defe485c57e4b7d084d5b90), [#2706](https://github.com/heygen-com/hyperframes/pull/2706), [91d14744a](https://github.com/heygen-com/hyperframes/commit/91d14744a09fefab92363af78065097327a092ce), [#2707](https://github.com/heygen-com/hyperframes/pull/2707), [677fd31e9](https://github.com/heygen-com/hyperframes/commit/677fd31e9a7bf52475236abbfb662f528862d795), [#2709](https://github.com/heygen-com/hyperframes/pull/2709), [96861cbaf](https://github.com/heygen-com/hyperframes/commit/96861cbafc33e9e7b853b31c56610d50599cb96b), [#2720](https://github.com/heygen-com/hyperframes/pull/2720)).
  * **A paint query for transparent compositions.** The SDK exposes a paint query, so hit-testing can ask what a transparent composition actually paints ([9769ba2c7](https://github.com/heygen-com/hyperframes/commit/9769ba2c7bcd75e938ca5267b6568b457cb98fae), [#3070](https://github.com/heygen-com/hyperframes/pull/3070)).
  * **`add` records which registry items it installed** ([0bda6b55b](https://github.com/heygen-com/hyperframes/commit/0bda6b55b89b4f2c832d59364ef44675deec51f8), [#3099](https://github.com/heygen-com/hyperframes/pull/3099)).

  ## Fixes

  * **An asset whose name starts with a dash no longer breaks a render.** Nine independent ffprobe call sites read such a name as an option. Last week's fix terminated the options at one of them and its regression test pinned that single site, so CI reported the bug class closed while it stayed open everywhere else. Reproduced on ffprobe 8.1.1: audio pad and trim failed in the middle of a render, and `hyperframes init`, whisper duration probing, and the WebM alpha check all failed as well. A dash-prefixed HEVC preview passed lint silently. Every site terminates its options now, and the one helper that structurally cannot do so asserts the terminator instead of letting the path through ([47564ab94](https://github.com/heygen-com/hyperframes/commit/47564ab94cc4bac5de6715169939353c211af689), [d0dbf11ef](https://github.com/heygen-com/hyperframes/commit/d0dbf11ef53dd7ca535ed40a10e8f2dad4f12c4d), [255cf9291](https://github.com/heygen-com/hyperframes/commit/255cf929150977fa57dc1cadde2e9cf626f5c20c), [6c5403f7c](https://github.com/heygen-com/hyperframes/commit/6c5403f7cd5e5b21f301b88d6d9f84451751ba15)).
  * **Telemetry redacts any path, not a list of known roots.** Redaction covered an allowlist of roots, so a path anywhere else went out intact. It now redacts any path, including bare relative ones and the known input path, and it handles unicode paths, non-Error rejections, and shell callers. One ffprobe helper was throwing raw stderr, which echoes the input path, straight into logs and telemetry ([d04569e37](https://github.com/heygen-com/hyperframes/commit/d04569e37f1c63967ce7373557ded4e4f150e7de), [e79ab3ab3](https://github.com/heygen-com/hyperframes/commit/e79ab3ab31a5f789f8c998430f2b58cb95973f07), [1664fe6ad](https://github.com/heygen-com/hyperframes/commit/1664fe6ad773c76e0dc7314e7f2eb439cd3687d6)).
  * **`skills update` no longer deletes skills the manifest never covered.** The repo ships skills from three directories and generates its manifest from one of them. Anything installed from the other two looked absent from the manifest, so the prune read that silence as removed upstream and deleted the skills immediately after the same command installed them. The prune now considers only skills under the path the manifest actually covers, and leaves an entry alone when it cannot tell where the skill came from ([ed3ff98ce](https://github.com/heygen-com/hyperframes/commit/ed3ff98ce0443a232fc740a5821c601e67fd09cc), [#3118](https://github.com/heygen-com/hyperframes/pull/3118)).
  * **Resizing an element on the Studio canvas lands where you put it.** A run of fixes replaces a 200px guess with the element's real box, stops a uniform resize writing a scale GSAP ignores, pins the drop point on a first resize and keeps an animated element on it, measures the correction from the pre-gesture position, corrects against the scale the resize actually commits, covers legacy resize boxes, and handles an element whose scale is an instant hold ([477f77629](https://github.com/heygen-com/hyperframes/commit/477f77629b15bbbaeb245202610dafbb4b9d1629), [20ef79862](https://github.com/heygen-com/hyperframes/commit/20ef79862057b13c2e7ec7b777241888a3d3ca75), [7dc18771d](https://github.com/heygen-com/hyperframes/commit/7dc18771d183276a4733e24dc97f95b5d4397932), [b18fd62e0](https://github.com/heygen-com/hyperframes/commit/b18fd62e0e55e3cd6a24df47a95db7e3eb2c4d65), [ee5ae9619](https://github.com/heygen-com/hyperframes/commit/ee5ae9619c859bb246dbda20b8ffa19d4994530d), [a693b12cc](https://github.com/heygen-com/hyperframes/commit/a693b12cca705901125d241f51a0dfd056b32576), [12e637fb2](https://github.com/heygen-com/hyperframes/commit/12e637fb25b4b40f7ba311882e257bdb869489e3), [a850e97f3](https://github.com/heygen-com/hyperframes/commit/a850e97f3d5a2cfcf183aec2cc2620020e8e1bf4), [#3092](https://github.com/heygen-com/hyperframes/pull/3092), [17ac986bf](https://github.com/heygen-com/hyperframes/commit/17ac986bfe0fffbbc8aac2a68b9e9814f561b562), [#3146](https://github.com/heygen-com/hyperframes/pull/3146), [cf45c9845](https://github.com/heygen-com/hyperframes/commit/cf45c984549bc41ed4debc99d5283d2a60108cbb), [#2986](https://github.com/heygen-com/hyperframes/pull/2986)).
  * **A hardware GPU claim is verified rather than trusted.** Setting `browserGpuMode=hardware` used to be taken at its word. It is verified now, a probe failure is distinguished from a genuinely absent GPU, and an unverified hardware GPU warns once per process. SwiftShader ghosting in software screenshot captures is fixed, capture mode is no longer mislabelled, and drawElement refusals that used to be silent are named ([131780fe9](https://github.com/heygen-com/hyperframes/commit/131780fe9627ee7fb17cb871ef6a144a6ef02735), [6703ea7e0](https://github.com/heygen-com/hyperframes/commit/6703ea7e04701b490c5fb563db4f532fbc8aec89), [f69c4a0e3](https://github.com/heygen-com/hyperframes/commit/f69c4a0e3aa8feb1110b52d538f8ca127481c95d), [b57dc13cb](https://github.com/heygen-com/hyperframes/commit/b57dc13cb6c8752c4f8f9426cfda2faf529136c2), [#3096](https://github.com/heygen-com/hyperframes/pull/3096), [33ac86fd3](https://github.com/heygen-com/hyperframes/commit/33ac86fd3842f5f40cc66033fd8ad06d0c495c44), [#3151](https://github.com/heygen-com/hyperframes/pull/3151)).
  * **The runtime is served before author scripts, and the composition query survives the redirect** ([b6ff3ab74](https://github.com/heygen-com/hyperframes/commit/b6ff3ab74556b844dd87b067cf850badc000bba7), [#3114](https://github.com/heygen-com/hyperframes/pull/3114)).
  * **A Studio edit no longer reloads the preview**, and the preview stays alive when the window is tight ([bea32b8aa](https://github.com/heygen-com/hyperframes/commit/bea32b8aae5bd9008c5fbe453a17a8a4588365ba), [#3137](https://github.com/heygen-com/hyperframes/pull/3137), [d5cc1c9c6](https://github.com/heygen-com/hyperframes/commit/d5cc1c9c6249c27a63269288d8b7771656eb50db), [#3091](https://github.com/heygen-com/hyperframes/pull/3091)).
  * **Remote downloads are integrity-checked**, and BeginFrame time stays monotonic across frame rates ([bbdfee116](https://github.com/heygen-com/hyperframes/commit/bbdfee1166c45e348ef76d2e384a0ad2243ac847), [#2938](https://github.com/heygen-com/hyperframes/pull/2938), [b390b71bd](https://github.com/heygen-com/hyperframes/commit/b390b71bde982ffbf55c9ec93f1491d99011bfc3), [#3011](https://github.com/heygen-com/hyperframes/pull/3011)).
  * **Sub-composition sibling asset paths resolve everywhere**, in previews and outside them ([4e7fcf7f2](https://github.com/heygen-com/hyperframes/commit/4e7fcf7f2a5af2922ecb6855f08ed879018b8521), [#2994](https://github.com/heygen-com/hyperframes/pull/2994), [cbd8a77d1](https://github.com/heygen-com/hyperframes/commit/cbd8a77d162be059126698f7e20680c5430dd3d5), [#2983](https://github.com/heygen-com/hyperframes/pull/2983)).
  * **Smaller ones.** `bpm-detective` retries after a transient import failure ([b4bd67040](https://github.com/heygen-com/hyperframes/commit/b4bd670402b82f25c1f5e0343336e21455284f80), [#2736](https://github.com/heygen-com/hyperframes/pull/2736)). Every redirect a host may answer with is followed ([db3de4c1b](https://github.com/heygen-com/hyperframes/commit/db3de4c1bf2fa8e093aeb26c67f79e352ef5af89), [#3148](https://github.com/heygen-com/hyperframes/pull/3148)). A bare `--frame-check` stops swallowing the next flag ([70cc4f59a](https://github.com/heygen-com/hyperframes/commit/70cc4f59a1165f1a132a7bf96d2c8f98ceef2d1a), [#2966](https://github.com/heygen-com/hyperframes/pull/2966)). Queued telemetry is no longer dropped when `process.exit` races the final flush ([bc6dbc7e2](https://github.com/heygen-com/hyperframes/commit/bc6dbc7e216353a67700230164e81c3f6076f559), [#2970](https://github.com/heygen-com/hyperframes/pull/2970)). Font family values split only on top-level commas ([172311e95](https://github.com/heygen-com/hyperframes/commit/172311e95e99b04cd2d76d43de9bbadd69c630ab), [#3067](https://github.com/heygen-com/hyperframes/pull/3067)). A composition can declare its caption colour states ([1e7799bfb](https://github.com/heygen-com/hyperframes/commit/1e7799bfbb08c30a55b01a262653f40a2bbeda8a)). Three crash-boundary trips in the editor are fixed ([d8a91fc34](https://github.com/heygen-com/hyperframes/commit/d8a91fc347df4def4a957609d1847ca3306eb867), [#3102](https://github.com/heygen-com/hyperframes/pull/3102)). Asset media type mismatches are rejected, and short VFR frame coverage is correct ([9792c3295](https://github.com/heygen-com/hyperframes/commit/9792c32950133cc7a6aa55361f682bb431db5439), [#2937](https://github.com/heygen-com/hyperframes/pull/2937), [127eb1937](https://github.com/heygen-com/hyperframes/commit/127eb193715a79252ac77969a95d431a89fee4fe), [#2936](https://github.com/heygen-com/hyperframes/pull/2936)).

  ## Under the hood

  * **A branch that deletes a file main still ships now fails CI.** Deletions used to pass review as long as nothing referenced them in the diff ([f28bc80a1](https://github.com/heygen-com/hyperframes/commit/f28bc80a1d9c238ecaf36d8a5fee13933a3824fb), [#3150](https://github.com/heygen-com/hyperframes/pull/3150)).
  * **The scripts directory is typechecked**, and registry manifest paths are contained against escapes in the preview renderer, filesystem-aware ([79dff2051](https://github.com/heygen-com/hyperframes/commit/79dff2051699c9bae28088eb795c4cbebff6dde1), [#3149](https://github.com/heygen-com/hyperframes/pull/3149), [bd7ea5d5c](https://github.com/heygen-com/hyperframes/commit/bd7ea5d5ce7cab921c0b6e9df5ed92c47b01bb8a), [dc2d1697f](https://github.com/heygen-com/hyperframes/commit/dc2d1697fe708cfc356f07882c431dc372062658)).
  * **Preview and render divergences settled.** The four remaining known differences between what the preview shows and what the render produces are closed ([57ec008cb](https://github.com/heygen-com/hyperframes/commit/57ec008cb295efb0a817840a1eadac53fbbf355e), [#3097](https://github.com/heygen-com/hyperframes/pull/3097)).
  * **Canary decisions report why.** The rollout evaluator emits the reason behind an assignment, on Studio events too, so a cohort result can be explained rather than guessed ([076657a63](https://github.com/heygen-com/hyperframes/commit/076657a63994a911deba65cd4d54131d5997e1d1), [b3990ac78](https://github.com/heygen-com/hyperframes/commit/b3990ac789a40242b38eb740475811a03e701b2b), [3b65321a2](https://github.com/heygen-com/hyperframes/commit/3b65321a204383582e3794ac19eca5d6f5eb3474), [#3065](https://github.com/heygen-com/hyperframes/pull/3065)).

  ## Docs

  * **A restructured site.** There is a Studio section now, plus workflow guides, section hubs, shared page components, and the ten workflows collected in one place. Superseded pages retire behind redirects. A Reference Project landed early in the week and came out again before the week ended, because sending readers to GitHub is not what they want ([6fe5b4f82](https://github.com/heygen-com/hyperframes/commit/6fe5b4f82a2ee108f7bb7279f4848e61e2c3b26e), [edfe66a95](https://github.com/heygen-com/hyperframes/commit/edfe66a95375234f0d261a09a46a29424d040318), [#2977](https://github.com/heygen-com/hyperframes/pull/2977), [52f3eb5b2](https://github.com/heygen-com/hyperframes/commit/52f3eb5b27c89965c34573a0ec6fb5628a80a907), [f742084fa](https://github.com/heygen-com/hyperframes/commit/f742084fa85c1e2be1c0711c4467c48d4cd6f214), [e60bef3f5](https://github.com/heygen-com/hyperframes/commit/e60bef3f579a27d8be2d93b62109f063459646f6), [b5509602f](https://github.com/heygen-com/hyperframes/commit/b5509602fa9f8ad9944c79b9f73f3a440357ecbf)).
  * **Pages show the thing instead of describing it.** Roughly two dozen guides traded prose for film. Nine get light-theme videos, six get a real film in place of a six-second clip, and the project model and the two core concepts are drawn rather than described twice. The ten hardest-reading prompting pages were rewritten ([72d4016f5](https://github.com/heygen-com/hyperframes/commit/72d4016f5f25fb71c856f0d6fd9e52e91686c83a), [8762887a5](https://github.com/heygen-com/hyperframes/commit/8762887a5b3773f460fa61e017d870f68f5d540a), [f595a7d68](https://github.com/heygen-com/hyperframes/commit/f595a7d68388c2e8842d3b8f5346273d0f9450b7), [b4648e0e5](https://github.com/heygen-com/hyperframes/commit/b4648e0e5a45734970e3e905efcac4cf76d51057), [ad4c6a9b6](https://github.com/heygen-com/hyperframes/commit/ad4c6a9b6e0781e4253507ec4a179b83b3faee9b), [31366d724](https://github.com/heygen-com/hyperframes/commit/31366d724d83ff855c1a02edb2c37ff441a3648c), [eb199bd15](https://github.com/heygen-com/hyperframes/commit/eb199bd1595f7774a16fb7baea12510a8d8a02d6), [8dba394d4](https://github.com/heygen-com/hyperframes/commit/8dba394d4dd52678cd49b68a3ec8fd8a921a1d6d)).
  * **Docs videos have sound, and one narrator.** Every click-to-play video carries an audio track, and the house narrator is written down so the films stop sounding like two different products. Cards on Examples and 30 Days play their film's audio on hover, with accessible controls, lazy loading, and reduced-motion handling ([bb7b0c899](https://github.com/heygen-com/hyperframes/commit/bb7b0c899f91bcfd1b4f36378bc750aa74e95976), [60f09dfcf](https://github.com/heygen-com/hyperframes/commit/60f09dfcfd3f8b18ac51e9d26f34e614969477e8), [5361b9e10](https://github.com/heygen-com/hyperframes/commit/5361b9e10c80c787527ffa25a0db01002ddebbf0), [fb6a82c50](https://github.com/heygen-com/hyperframes/commit/fb6a82c5052d5c801ecd6ec52d1ceadf4757e6a9), [e6bc8f139](https://github.com/heygen-com/hyperframes/commit/e6bc8f139c032d202d94fe2b4837b2e1b0f45ff8), [0467bc812](https://github.com/heygen-com/hyperframes/commit/0467bc812916259a53a3f08eb30fb8a35586ee19), [c9fd7465c](https://github.com/heygen-com/hyperframes/commit/c9fd7465c9b9d516b53241fee1f8ca78d18ba905), [f3d1d531d](https://github.com/heygen-com/hyperframes/commit/f3d1d531d138d69e7d347391e5f7a4b35fb599a3)).
  * **Claims the source contradicts, corrected.** Reading the pages against the code turned up a run of statements that were simply wrong, in the developer reference, in contributor instructions, in the SDK dispatch contract, and in the composition offset rationale. All corrected, including one the author had written themselves. Documentation quality gates run now, so the next batch gets caught by CI instead of by a reader ([d01253771](https://github.com/heygen-com/hyperframes/commit/d01253771fa7f3eac4fa9126c7bedb9911e0be30), [af5ebf09c](https://github.com/heygen-com/hyperframes/commit/af5ebf09ce8bd15991da51bf83a9fe852e8dca29), [7a91b93dd](https://github.com/heygen-com/hyperframes/commit/7a91b93dd6222cd5c4ae0017aceb688c394e2488), [e94a458fe](https://github.com/heygen-com/hyperframes/commit/e94a458fed5f9279e38cd990c2c83a1fabf5c77d), [0f6259d46](https://github.com/heygen-com/hyperframes/commit/0f6259d461cfb678d60ae7926d343fbe44aee925), [8e658bd6c](https://github.com/heygen-com/hyperframes/commit/8e658bd6c932ee1b8c65f247f9767d75fbd56275), [fed2baf27](https://github.com/heygen-com/hyperframes/commit/fed2baf27882cda0e19ae0e972f7335a162c36eb), [174bd4e2d](https://github.com/heygen-com/hyperframes/commit/174bd4e2dcdc4a9da1467892d3a3ca4d7f96c74a)).
  * **30 Days shows all thirty films.** The page borrows nothing from elsewhere now, and it sits above the update feeds in Explore. The Catalog is visual and reproducible on a rebuilt generator, and template-only blocks render in catalog previews ([a46bc9d56](https://github.com/heygen-com/hyperframes/commit/a46bc9d565de76ad6e6dc5d35c6a9ff7d1e5cf76), [06d2d6f24](https://github.com/heygen-com/hyperframes/commit/06d2d6f24c31b094198e4cd630d1f34c5df5dd2e), [c53c7efd1](https://github.com/heygen-com/hyperframes/commit/c53c7efd1ec1070251ecf1a25643f96d5b96e7a7), [79c4056a3](https://github.com/heygen-com/hyperframes/commit/79c4056a3f7d509f330392d2198d0001fc4bd5a6), [2a7d9bd0a](https://github.com/heygen-com/hyperframes/commit/2a7d9bd0ad114a7aadf65f1f65b8556f8da6d61d), [218eff7d3](https://github.com/heygen-com/hyperframes/commit/218eff7d361487becf7e1d6fc0d85453ac199b5e), [#3098](https://github.com/heygen-com/hyperframes/pull/3098)).
  * **Broken and self-redirecting navigation fixed.** Nineteen anchor links moved onto headings that now exist, two prompting links point at real headings, a nav entry that redirected away from itself is gone, and the changelog and weekly archive are reachable again ([d16f6e69d](https://github.com/heygen-com/hyperframes/commit/d16f6e69d72c8582fac9577f57aaad158596b1e1), [951c6ea45](https://github.com/heygen-com/hyperframes/commit/951c6ea45c1eddc377a40542a84acd40d1f472ef), [1a82615f6](https://github.com/heygen-com/hyperframes/commit/1a82615f64f270ed2bcbe24844a2e702855a8839), [8b98b41ee](https://github.com/heygen-com/hyperframes/commit/8b98b41eed9e9f36b080342453a8a1c40d227a43)).

  For exact versioned release notes, see the [Changelog](/changelog).
</Update>

<Update label="Week of July 27, 2026" description="Weekly digest - July 27, 2026 - August 3, 2026" tags={["Weekly update", "Highlights"]}>
  <Frame>
    <DocsVideo title="HyperFrames video: Weekly Changelog 2026 07 27 2026 08 03" src="https://static.heygen.ai/hyperframes/changelog-videos/weekly-changelog-2026-07-27-2026-08-03.mp4" />
  </Frame>

  The Studio timeline is the headline. Expanding a track now shows one lane per animated property. Each lane gets a keyframe track header and drag retiming. Virtualization is on by default. A long correctness sweep makes a keyframe edit land on the element you actually clicked. Three themed registry families add 29 catalog items from an outside contributor. Transparent GIF output works. The engine's media probing is hardened end to end. A clean install now resolves a dependency graph with no advisories.

  ## Features

  * **Per-property keyframe lanes.** Expanding a Studio track shows one lane per animated property. Before, you got a single collapsed row. Keyframe track headers land with it, plus per-lane retiming interactions and variable timing and layout. Keyframe percentages are now computed in the tween's own time frame, not the clip's ([fed5e5b71](https://github.com/heygen-com/hyperframes/commit/fed5e5b71df505b2598fe31522eba1710ea62c7c), [8bb31b394](https://github.com/heygen-com/hyperframes/commit/8bb31b3949ca7320242fbeb26451512deedae9cc), [e36fb385b](https://github.com/heygen-com/hyperframes/commit/e36fb385bc71af52c16c7e6059305c4bc2da2b7a), [d518972f8](https://github.com/heygen-com/hyperframes/commit/d518972f8b2b5c163875cd5d99c4ef6f0fce2113), [4a12eb9d9](https://github.com/heygen-com/hyperframes/commit/4a12eb9d9c404f20419cbac427d9808f92fef41c), [2d1b905a5](https://github.com/heygen-com/hyperframes/commit/2d1b905a56c55286c3ab76b3271c277517cec496), [#2791](https://github.com/heygen-com/hyperframes/pull/2791)).
  * **Timeline virtualization by default.** Long timelines render only the visible rows. Dense keyframe clusters stay readable. Studio also tracks timeline performance now, so regressions show up as telemetry instead of as a complaint ([c6925e471](https://github.com/heygen-com/hyperframes/commit/c6925e471a1ab4df911f5b4aab08740084c5412c), [#2926](https://github.com/heygen-com/hyperframes/pull/2926), [723d3381c](https://github.com/heygen-com/hyperframes/commit/723d3381c4cabb3c238d883adf4fca487ead9df6), [#2925](https://github.com/heygen-com/hyperframes/pull/2925), [10b517dab](https://github.com/heygen-com/hyperframes/commit/10b517dab9515988cb82100c3975b53a47da1f35), [#2898](https://github.com/heygen-com/hyperframes/pull/2898)).
  * **Bulk easing edits.** Select merged keyframes, change their easing, and the whole selection updates in one edit. Ease mode switches optimistically, so the curve updates without waiting on a round trip ([10d45def0](https://github.com/heygen-com/hyperframes/commit/10d45def058248d0d59d1448beef6a6ee91ddeba), [659e22656](https://github.com/heygen-com/hyperframes/commit/659e22656e51aef54d079b3822fa40086d93726b), [#2695](https://github.com/heygen-com/hyperframes/pull/2695)).
  * **Three themed registry families, 29 items.** `mk-*` is minimal presentation (9 items). `yt-*` is retro-broadcast creator (9 items). `hw-*` is hand-drawn scribble (11 items). @jbernard077 contributed all three. The work consolidates four earlier pull requests, cuts five items already covered by something we ship, and fixes the defects CI never got to report. `beat-freeze-cut` joins the transition set as a thirtieth item ([f252ec6d9](https://github.com/heygen-com/hyperframes/commit/f252ec6d9942486b4bbdbbdae05f25e683c4ab26), [d3d286a1a](https://github.com/heygen-com/hyperframes/commit/d3d286a1a53ed52d78ab3994195e83d2188ec163), [#2939](https://github.com/heygen-com/hyperframes/pull/2939), [#1933](https://github.com/heygen-com/hyperframes/pull/1933), [#1992](https://github.com/heygen-com/hyperframes/pull/1992), [#1993](https://github.com/heygen-com/hyperframes/pull/1993), [#1994](https://github.com/heygen-com/hyperframes/pull/1994)).
  * **Fast capture on Windows hardware GPUs.** drawElement fast capture is open to Windows hardware GPU configurations. Windows FFmpeg discovery candidates are validated before use ([cb30157eb](https://github.com/heygen-com/hyperframes/commit/cb30157ebbbcfedd3606b9d566d565f4412de45e), [#2841](https://github.com/heygen-com/hyperframes/pull/2841), [4ad1cf455](https://github.com/heygen-com/hyperframes/commit/4ad1cf4551b724e7d54f82f86b233ef734545250), [#2871](https://github.com/heygen-com/hyperframes/pull/2871)).
  * **Two new layout check options.** `--layout proseCoverageFloor` is available opt-in. `data-layout-allow-caption-zone` waives the caption-zone rule where an overlap is intentional ([209e6e014](https://github.com/heygen-com/hyperframes/commit/209e6e01486c3a452cfd27b0c1eb8c04417df27f), [#2834](https://github.com/heygen-com/hyperframes/pull/2834), [3a7950fd6](https://github.com/heygen-com/hyperframes/commit/3a7950fd63b501788f39f1fd44c12fc317139d79), [#2853](https://github.com/heygen-com/hyperframes/pull/2853)).
  * **CLI state that survives a reset.** Circuit-breaker state rolls over across a config wipe. Install-state moved into the config directory. Deleting that directory is now a genuine full reset ([dfe92b2aa](https://github.com/heygen-com/hyperframes/commit/dfe92b2aabcea8d934e4696f9dfe063307fccdf7), [#2874](https://github.com/heygen-com/hyperframes/pull/2874), [dae1b63d4](https://github.com/heygen-com/hyperframes/commit/dae1b63d4a59fc6dff7fe19861d90efce9dc6948), [#2904](https://github.com/heygen-com/hyperframes/pull/2904)).

  ## Fixes

  * **Transparent GIFs stay transparent.** `--format gif` used to silently flatten transparent compositions. The palette encoder was receiving JPEG frames with no alpha plane. GIF is now treated as an alpha-capable format. Its frames are captured as RGBA PNG. The palette is encoded with explicit transparency semantics. Page-side shader compositing stays enabled for GIF, so shader transitions blend instead of hard-cutting ([6cfb05e38](https://github.com/heygen-com/hyperframes/commit/6cfb05e38bcb0ad02fa848500b462f0193a639b1), [#2327](https://github.com/heygen-com/hyperframes/pull/2327)).
  * **A clean install reports no advisories.** Installing `hyperframes` used to surface five npm advisories, four of them high severity. There was no clean upgrade path. Patched floors land for Hono Node Server, adm-zip, and Sharp. They apply consistently across the CLI, engine, producer, and Cloud Run. ONNX Runtime is pinned to 1.21.1 as an interim choice, because 1.23.2 independently pulls the vulnerable adm-zip range. The pin keeps all six platform bindings ([13ac9e390](https://github.com/heygen-com/hyperframes/commit/13ac9e390585e75b80f5efd46393531315f0be2c), [#2855](https://github.com/heygen-com/hyperframes/pull/2855)).
  * **Media probing hardened end to end.** Malformed frame-rate ratios are rejected instead of becoming NaN. File paths are passed after `--`, so a name starting with `-` is not read as an option. The PNG walk anchors at IHDR and stops at cICP, using native crc32. Colour metadata merges per field, with correct alpha detection. The AAC duration refinement is cancellable and limited to AAC-LC. Stdin is rejected. Stdout is decoded correctly and bounded ([f75ca076b](https://github.com/heygen-com/hyperframes/commit/f75ca076b790d38e518af892b67a9ea42cca3dd5), [#2740](https://github.com/heygen-com/hyperframes/pull/2740), [2af3f4d0e](https://github.com/heygen-com/hyperframes/commit/2af3f4d0ed9fac2fadc1266bcadde04e6513d800), [#2912](https://github.com/heygen-com/hyperframes/pull/2912), [62b96c227](https://github.com/heygen-com/hyperframes/commit/62b96c227e7934ec8be4f7a806a99d7cd8decef0), [#2913](https://github.com/heygen-com/hyperframes/pull/2913), [19dc83bc2](https://github.com/heygen-com/hyperframes/commit/19dc83bc2beebebc136da776b2718594f41a469d), [4d563fa75](https://github.com/heygen-com/hyperframes/commit/4d563fa7523f0ef2e630d0da214b3b667bf7c982), [#2914](https://github.com/heygen-com/hyperframes/pull/2914), [242a42f6c](https://github.com/heygen-com/hyperframes/commit/242a42f6c94d5cc780477ed94c7938448639f67f), [361fd4992](https://github.com/heygen-com/hyperframes/commit/361fd4992636188e484e719a149f452b87c98b2b), [#2915](https://github.com/heygen-com/hyperframes/pull/2915), [9e275423e](https://github.com/heygen-com/hyperframes/commit/9e275423e2f44e37d73d5b7372a3ead3ba95cf75), [#2916](https://github.com/heygen-com/hyperframes/pull/2916), [96a6e8bd9](https://github.com/heygen-com/hyperframes/commit/96a6e8bd95410695340b2671b1dc167f14f49999)).
  * **Bounded HDR and video extraction.** HDR and video frame extraction now run against explicit resource bounds. They no longer scale with whatever the source demands ([233975737](https://github.com/heygen-com/hyperframes/commit/2339757377f1534900af5c84ad4025c6e576da9e), [#2955](https://github.com/heygen-com/hyperframes/pull/2955)).
  * **Keyframe edits land on the element you clicked.** A run of fixes replaces inferred targets with the real one. Every new tween is authored against a single element. A keyframe added at the playhead targets one element. Lane edits and fallbacks resolve against the clicked element. Colliding keyframes are targeted exactly. Tweens are attributed to their real target. A target the DOM has proved is not unique is never re-authored ([3d9243606](https://github.com/heygen-com/hyperframes/commit/3d924360667a15745d85dc060689d913b5dcc5d7), [#2849](https://github.com/heygen-com/hyperframes/pull/2849), [fd5555be7](https://github.com/heygen-com/hyperframes/commit/fd5555be758450d73335dd3f89c70329aac8ee35), [#2847](https://github.com/heygen-com/hyperframes/pull/2847), [ba8df2661](https://github.com/heygen-com/hyperframes/commit/ba8df2661c4af74897c734ad6376a0b1dc3fd5e2), [c20c5366d](https://github.com/heygen-com/hyperframes/commit/c20c5366da34c1a3444d3ff9282e01d92bf274d8), [#2846](https://github.com/heygen-com/hyperframes/pull/2846), [7482c22d8](https://github.com/heygen-com/hyperframes/commit/7482c22d821c0a46b48cb17421c4df73014dbbd6), [#2692](https://github.com/heygen-com/hyperframes/pull/2692), [59a818e80](https://github.com/heygen-com/hyperframes/commit/59a818e80a3ef561c5cb4a25ea30128cd18458b2), [f04cdb79c](https://github.com/heygen-com/hyperframes/commit/f04cdb79c5f1475fa7d6048036a4e0af354a60a2), [1f3fd2800](https://github.com/heygen-com/hyperframes/commit/1f3fd2800cd2e4df9e8a2c2b81ea11ed5b799630)).
  * **The preview reload loop is gone.** Writes to `.transcode-cache` and the waveform cache touched files the project watcher was watching. So a preview reloaded in a loop, and shader transitions stuck partway through. Generated caches are now ignored by the watcher and excluded from project metadata ([7ea8250f5](https://github.com/heygen-com/hyperframes/commit/7ea8250f50b6d8824f21a3a21ef290c52c42d6fa), [bf739a4db](https://github.com/heygen-com/hyperframes/commit/bf739a4db2807373a0c294224dd4a101c6ed8954), [#2952](https://github.com/heygen-com/hyperframes/pull/2952), [1d01b9f2c](https://github.com/heygen-com/hyperframes/commit/1d01b9f2cfe44cb7899410e742a9d553c7807e19)).
  * **Preview reliability and resolution.** Preview recovery is hardened and loading reliability is improved. Retained preview resources are released instead of accumulating. Chrome resolves on Windows. A selected render resolution is honored rather than silently replaced ([c62bd4c45](https://github.com/heygen-com/hyperframes/commit/c62bd4c454d7a53aac39e03b10da8eeb2a93d77e), [18b9acac1](https://github.com/heygen-com/hyperframes/commit/18b9acac12269899b0bfacb289d9bde3e1b065e4), [#2837](https://github.com/heygen-com/hyperframes/pull/2837), [fbfffb1aa](https://github.com/heygen-com/hyperframes/commit/fbfffb1aa785fe48aa94a3570bd04c9128a80d18), [#2924](https://github.com/heygen-com/hyperframes/pull/2924), [d8d626537](https://github.com/heygen-com/hyperframes/commit/d8d626537bf6a830711f38e24cc8756bc26f8d48), [#2878](https://github.com/heygen-com/hyperframes/pull/2878), [f1655b930](https://github.com/heygen-com/hyperframes/commit/f1655b9302dc870c1e2ee24f19fd23897c767b42), [#2876](https://github.com/heygen-com/hyperframes/pull/2876)).
  * **Drilling into sub-compositions.** Every host row stays on the drill path, not just the top one. Children expand against their resolved parent host. Hidden state persists on expanded rows. Sub-compositions stay expanded at the end of the timeline. Sub-composition clip timing is computed correctly ([acad7b268](https://github.com/heygen-com/hyperframes/commit/acad7b268ea1e9e4b35e15265ac6c8a178e43865), [d48440a9b](https://github.com/heygen-com/hyperframes/commit/d48440a9bacb83aef8007b3667e78e02a2481d8f), [12546985f](https://github.com/heygen-com/hyperframes/commit/12546985f588df8cf984d241dd27e3417edb3320), [5dad52370](https://github.com/heygen-com/hyperframes/commit/5dad52370f77a9a0618827279b8a4dcd86868456), [3e342cff9](https://github.com/heygen-com/hyperframes/commit/3e342cff9c642258509df64e0a47da38502591bd), [3f0c20f63](https://github.com/heygen-com/hyperframes/commit/3f0c20f633e9ac064e45df838e03d4412ddafda8), [#2845](https://github.com/heygen-com/hyperframes/pull/2845)).
  * **Timeline accessibility and pointer targets.** Track numbers announced to assistive technology are the real ones. `aria-controls` points at the lanes. Toolbar and lane controls meet the 24x24 pointer-target minimum. Ruler clicks seek to the pressed position. Escape cancels a retime. The scrub clamps to 0 instead of being dropped. Popovers and tooltips stop clipping at panel edges ([1faa0cbda](https://github.com/heygen-com/hyperframes/commit/1faa0cbdadc71abdea220d8705682c0a18e499bb), [#2848](https://github.com/heygen-com/hyperframes/pull/2848), [4e74eefdd](https://github.com/heygen-com/hyperframes/commit/4e74eefddd4c1e38f7c97662cc52fae6d2a01698), [69020699d](https://github.com/heygen-com/hyperframes/commit/69020699dfb595194c8bf85117525045439bcdb2), [#2843](https://github.com/heygen-com/hyperframes/pull/2843), [706f537f3](https://github.com/heygen-com/hyperframes/commit/706f537f33bcf182f6b294806384d377c1b1d747), [b386b55f7](https://github.com/heygen-com/hyperframes/commit/b386b55f735a0217751e26245fbf677c8ff5d303), [f81ac7457](https://github.com/heygen-com/hyperframes/commit/f81ac745726d3195d07b79d7de9c31357ce8ab43), [#2890](https://github.com/heygen-com/hyperframes/pull/2890)).
  * **Colour field and shortcuts panel.** The hex field accepts 3-digit shorthand, is editable, and commits on an outside press. The shortcuts popup drops `aria-modal`, because it is not modal. It dismisses on Escape or an outside press ([86f633f98](https://github.com/heygen-com/hyperframes/commit/86f633f98573a79f88422c8a24a69bd55d718c3d), [55614033e](https://github.com/heygen-com/hyperframes/commit/55614033e501b5e55bfd3a2099396b74443652cd), [7f0cadcbb](https://github.com/heygen-com/hyperframes/commit/7f0cadcbb1f24df12bee091d5156e3cbf67f51e4), [aa2811642](https://github.com/heygen-com/hyperframes/commit/aa2811642fecabdef58ce45329b115993d1e43fb), [#2844](https://github.com/heygen-com/hyperframes/pull/2844)).
  * **Audio and nested timing.** Hidden audio is excluded from the render mix. Plateaus survive sampled audio automation. Nested template video timing is offset correctly. Distributed video metadata is validated before a plan is built ([b7160f69b](https://github.com/heygen-com/hyperframes/commit/b7160f69bba87254f8d33853df21a8be862605e1), [#2870](https://github.com/heygen-com/hyperframes/pull/2870), [04e0ccce4](https://github.com/heygen-com/hyperframes/commit/04e0ccce429c0c7c579cd06db09e7bad8fb550f3), [#2863](https://github.com/heygen-com/hyperframes/pull/2863), [9bbb6d50a](https://github.com/heygen-com/hyperframes/commit/9bbb6d50a02e128fcdab9ae20d33649b65406788), [#2859](https://github.com/heygen-com/hyperframes/pull/2859), [557d82b6a](https://github.com/heygen-com/hyperframes/commit/557d82b6a9547e403598713e2840c41736d35544), [#2839](https://github.com/heygen-com/hyperframes/pull/2839)).
  * **Fonts, downloads, and browsers.** Large local fonts stay file-backed instead of being inlined. Transient deterministic font fetches retry. Stalled download cleanup is awaited. A host-compatible cached browser is selected. The check navigation timeout is honored ([87791fd01](https://github.com/heygen-com/hyperframes/commit/87791fd01d93ee82226bf09d98a4dfe339c42307), [#2864](https://github.com/heygen-com/hyperframes/pull/2864), [20f4f8f49](https://github.com/heygen-com/hyperframes/commit/20f4f8f49c19181adfb4194f1965ee00845219f9), [#2865](https://github.com/heygen-com/hyperframes/pull/2865), [0bf33cb11](https://github.com/heygen-com/hyperframes/commit/0bf33cb117b111e89ee8d031d565c291aabf9160), [#2835](https://github.com/heygen-com/hyperframes/pull/2835), [85f0c9d35](https://github.com/heygen-com/hyperframes/commit/85f0c9d3546b1973dfba884fe6d2a7a8188d4ad3), [#2861](https://github.com/heygen-com/hyperframes/pull/2861), [fdc593289](https://github.com/heygen-com/hyperframes/commit/fdc5932897ea3ecf778d520da77e6f6d493017d5), [#2860](https://github.com/heygen-com/hyperframes/pull/2860)).
  * **Website capture is bounded and honest.** Capture runtime stages run against a live budget that is validated and propagated. A blocked page is rejected outright, instead of passing a login wall through as a screenshot. Failure diagnostics are preserved. Skipped Lottie previews are omitted. Bounded vision failures are reported ([765a5ae83](https://github.com/heygen-com/hyperframes/commit/765a5ae83f31b01b65426f34a3c80a47330456a0), [49091e614](https://github.com/heygen-com/hyperframes/commit/49091e6142c98b9fcab967c88e210df601a118d9), [d3607606e](https://github.com/heygen-com/hyperframes/commit/d3607606eeced5c826923f536d0d33d0cd799fb9), [22e3cca96](https://github.com/heygen-com/hyperframes/commit/22e3cca966e4f3c5dfe0f8b716dec80259206300), [9ae000726](https://github.com/heygen-com/hyperframes/commit/9ae00072614f35785e4a1d7bad48787451462a91), [ac9458888](https://github.com/heygen-com/hyperframes/commit/ac9458888c7a6e05aa6b4d5d74063b5859782d02), [dfc60797a](https://github.com/heygen-com/hyperframes/commit/dfc60797a2adeddef120f4c800f06b30cc155117), [b38e90740](https://github.com/heygen-com/hyperframes/commit/b38e90740407ac50fd83e124b8211d3efc7282be), [#2933](https://github.com/heygen-com/hyperframes/pull/2933)).
  * **Fewer false lint failures.** An asset `src` still holding an unresolved templating token is no longer reported as a missing asset. The placeholder skip is consolidated into one shared predicate ([6c185f252](https://github.com/heygen-com/hyperframes/commit/6c185f252f38a5a1f1dc9e23f17ef98f63ea18c7), [#2893](https://github.com/heygen-com/hyperframes/pull/2893), [5a6e4b1a8](https://github.com/heygen-com/hyperframes/commit/5a6e4b1a8f4176250b5c92b63845399fcfe7f256), [#2894](https://github.com/heygen-com/hyperframes/pull/2894)).
  * **Registry polish.** `mk` card offsets animate with transforms instead of `top` and `left`. Connector geometry and family accents are corrected. Demo legibility is improved. The device timeline registers synchronously ([ce7d75dba](https://github.com/heygen-com/hyperframes/commit/ce7d75dbaa29e3920216f6e848e68b4b6257602e), [#2960](https://github.com/heygen-com/hyperframes/pull/2960), [35231e964](https://github.com/heygen-com/hyperframes/commit/35231e964daab6d6b73d8dc3917f9f95f5944157), [2bb620517](https://github.com/heygen-com/hyperframes/commit/2bb620517749eefaa19e5fefbb2a85b9d6f538b8), [#2546](https://github.com/heygen-com/hyperframes/pull/2546)).

  ## Under the hood

  * **Render routing telemetry.** Live DOM element count is now measured at capture-session init on every render. Before, it was measured only on the 17% that open a probe session. So the fleet element-count distribution is finally observable. This is deliberately observational, and it does not feed the routing gate ([d74afc7b7](https://github.com/heygen-com/hyperframes/commit/d74afc7b7dc620036439b398c6bca823fb3911b4), [#2891](https://github.com/heygen-com/hyperframes/pull/2891)).
  * **Groundwork for faster short compositions.** A controlled sweep found single-worker drawElement beating parallel screenshot by 1.16x to 1.24x. That was on compositions between 250 and 899 frames, which is where the median fleet render sits. A 2x2 then showed motion and DOM size pulling in opposite directions. So the band is gated on an element ceiling, not a bare floor drop. A bare floor drop would have handed large compositions a 1.8x regression. This release computes and emits that band decision on every render, but it changes no routing. It stays behind `HF_DE_SHORT_BAND_ROUTE`, so the follow-up flip is measurable against a real baseline rather than a guess ([0749cd9ff](https://github.com/heygen-com/hyperframes/commit/0749cd9ff83ad41c72c7dc6be1b224e9bc27731b), [e9de2fa14](https://github.com/heygen-com/hyperframes/commit/e9de2fa14f61f503287c9d87ec0487c165ecbcba), [def98f79c](https://github.com/heygen-com/hyperframes/commit/def98f79c3fa746e805c6fbe9ee51392c267ea1e), [4dbf0d90b](https://github.com/heygen-com/hyperframes/commit/4dbf0d90b05de2c3db7c983641c8785fd9988148), [23854f7c6](https://github.com/heygen-com/hyperframes/commit/23854f7c6a328ef1f6913160af345c9fda70b036), [#2875](https://github.com/heygen-com/hyperframes/pull/2875)).
  * **Parallel drawElement router.** The router's minimum-frames floor drops from 2000 to 700. A crossover sweep found three workers beating one at every size tested. The router itself stays off by default behind `HF_DE_PARALLEL_ROUTER`. So this tunes what it will do rather than changing today's renders. Render events also gain battery and low-power state on macOS. The same composition was measured flipping between two power-management regimes with no signal to segment by ([3da31e399](https://github.com/heygen-com/hyperframes/commit/3da31e399b498d0ab6b1ce32b008b8b10cdcd2dc), [#2838](https://github.com/heygen-com/hyperframes/pull/2838)).

  ## Docs

  * **Colour grading and film effects.** The prompting guide gains a colour grading and film effects chapter. Agent guidance links to it. The `--hf-color-grading-intensity` claim is corrected and made order-agnostic. Professional grading and media treatments are documented, with the treatment contracts spelled out ([819ed632d](https://github.com/heygen-com/hyperframes/commit/819ed632d92229297c833145546effc0ddb6fb26), [#2911](https://github.com/heygen-com/hyperframes/pull/2911), [2517f1773](https://github.com/heygen-com/hyperframes/commit/2517f1773fa6afcc9b54b651f93409d7e99e9e3f), [dd9c86d07](https://github.com/heygen-com/hyperframes/commit/dd9c86d07a12307ef0c15eff88b21b2df73fc8cd), [0c7c9bbdb](https://github.com/heygen-com/hyperframes/commit/0c7c9bbdb0b10acd370865cbdda540ac0ce3f408), [e4eac0c21](https://github.com/heygen-com/hyperframes/commit/e4eac0c215faec922a866e61f4e37d322442bd47), [1a2c30a79](https://github.com/heygen-com/hyperframes/commit/1a2c30a7994fc488685e9251a41e40eea2c3bcb2), [12452a115](https://github.com/heygen-com/hyperframes/commit/12452a11569812003a067073c0497d69279b620d), [182862773](https://github.com/heygen-com/hyperframes/commit/182862773187dc01f08b2c29d2a3a5951afe5c5e), [#2826](https://github.com/heygen-com/hyperframes/pull/2826)).
  * **The motion chapter, rebuilt.** Each rule now carries before-and-after prompts and an exaggerated applied side. The chapter leads with meaning rather than amplitude. It adds the motion-purpose filter, offset ratio, and property coherence. It also adds the worker-boundary determinism caveat and an "Avoiding the slideshow" continuity contract. Demos are rebuilt around motivated subjects and embedded as validated renders ([6f29f1454](https://github.com/heygen-com/hyperframes/commit/6f29f1454e4d84a94c36574188d92cc8dc3b953c), [cebf66e6e](https://github.com/heygen-com/hyperframes/commit/cebf66e6e8ca6251c8e83c88d1009a00024ffc63), [1f4d00e15](https://github.com/heygen-com/hyperframes/commit/1f4d00e15e627aa2e6b130fe4f78401980cd37c7), [d4bd2917b](https://github.com/heygen-com/hyperframes/commit/d4bd2917b5e279e43be8ac7cb811fc863aebc49b), [4f6fb8fc1](https://github.com/heygen-com/hyperframes/commit/4f6fb8fc16c566bd8f473820a559a16c15b1fbeb), [cdac57c07](https://github.com/heygen-com/hyperframes/commit/cdac57c0757cee22db67e9595b29809cfabd056c), [dd4fd9cef](https://github.com/heygen-com/hyperframes/commit/dd4fd9cefaa1f5816a8a2ff404e2152af542b25d), [#2109](https://github.com/heygen-com/hyperframes/pull/2109)).
  * **The intent interview.** The guide documents the intent interview. Its pages line up with the skill contracts. An agent's first move is now a question rather than a guess ([2efbfd475](https://github.com/heygen-com/hyperframes/commit/2efbfd47583f75534b194d90ec0f689278b370f5), [#2872](https://github.com/heygen-com/hyperframes/pull/2872)).
  * **Contributing and setup.** The catalog contribution guide is refreshed. The Studio monorepo dev server port is now documented. It appears in both the setup guide and the Studio docs ([67ffafb11](https://github.com/heygen-com/hyperframes/commit/67ffafb11c18cd599b856c411c614cf329377d22), [#2954](https://github.com/heygen-com/hyperframes/pull/2954), [a52dd9c30](https://github.com/heygen-com/hyperframes/commit/a52dd9c3087c63a5c2c7f38d480961794d8c5eae), [#2902](https://github.com/heygen-com/hyperframes/pull/2902), [ffe5e12cf](https://github.com/heygen-com/hyperframes/commit/ffe5e12cf8f404b86e019d28ca25dc75de903d57), [#2901](https://github.com/heygen-com/hyperframes/pull/2901)).
  * **Guides and adopters.** THU-MAIC is added as a HyperFrames adopter. The Send-to guide is unlisted from the web nav. It is served through the tool rather than found by search. It also states plainly that enhance turns are free, and that render is the paid step ([1738b5a11](https://github.com/heygen-com/hyperframes/commit/1738b5a11f7eee1c130b29b3c489f79473e7aec2), [#2761](https://github.com/heygen-com/hyperframes/pull/2761), [a3c8f897f](https://github.com/heygen-com/hyperframes/commit/a3c8f897f2cdb4231521a752d6b320c8edb77a45), [#2918](https://github.com/heygen-com/hyperframes/pull/2918), [e3636db07](https://github.com/heygen-com/hyperframes/commit/e3636db07e7e242cd150e5a44c338658d84b13df), [#2827](https://github.com/heygen-com/hyperframes/pull/2827)).
  * **Product launch video.** The guidance uses real screenshots for site showcases. It catches motion jumps at frame cuts. It avoids weak music openings in short launch videos. The end-to-end run exposed defects in capture, audio, and docs. Those are fixed ([860954d71](https://github.com/heygen-com/hyperframes/commit/860954d71c15dcd7d47ce9d8bda55009010f08f7), [#2881](https://github.com/heygen-com/hyperframes/pull/2881), [5466bcecc](https://github.com/heygen-com/hyperframes/commit/5466bceccef70a3663f5a92bc567455fd018f050), [#2880](https://github.com/heygen-com/hyperframes/pull/2880), [30900c346](https://github.com/heygen-com/hyperframes/commit/30900c3465f457bf65f07ed4b4b55c384286bd20), [#2882](https://github.com/heygen-com/hyperframes/pull/2882), [e0dc255e8](https://github.com/heygen-com/hyperframes/commit/e0dc255e8a4108833ac727d54f4b039cca397042), [#2892](https://github.com/heygen-com/hyperframes/pull/2892)).
  * **Skills.** Blocked website captures are gated in the skills docs. Media-treatment policy targets are named instead of alluded to. Transition roots without an explicit duration are extended rather than dropped ([30f383074](https://github.com/heygen-com/hyperframes/commit/30f38307411908237201ed227f5350aa18ba156e), [6cab53a68](https://github.com/heygen-com/hyperframes/commit/6cab53a681bf159ffe34f66506a8004e38213fae), [#2879](https://github.com/heygen-com/hyperframes/pull/2879), [14ced9051](https://github.com/heygen-com/hyperframes/commit/14ced9051795b32db75a479ac2580eef3c5df85c), [#2873](https://github.com/heygen-com/hyperframes/pull/2873)).

  For exact versioned release notes, see the [Changelog](/changelog).
</Update>

<Update label="Week of July 20, 2026" description="Weekly digest - July 20, 2026 - July 27, 2026" tags={["Weekly update", "Highlights"]}>
  <Frame>
    <DocsVideo title="HyperFrames video: Weekly Changelog 2026 07 20 2026 07 27" src="https://static.heygen.ai/hyperframes/changelog-videos/weekly-changelog-2026-07-20-2026-07-27.mp4" />
  </Frame>

  Professional color grading is the headline. Master and per-channel curves, hue curves, three-way wheels, and HSL secondaries land in core, Studio, and the CLI. You can now shape shadows, midtones, and highlights on any image or video without leaving the composition. The distributed plan gains an explicit protocol version. It can also publish artifacts straight to S3 and GCS. Studio adds a keyframe ease editor. Registry caption components become transcript-driven. A long run of audio, download, and capture reliability fixes lands underneath.

  ## Features

  * **Professional color grading.** Core adds master and per-channel RGB tone curves. It adds hue-vs-hue, hue-vs-saturation, and hue-vs-luma curves. It adds three-way shadows, midtones, and highlights wheels, plus HSL secondary qualifiers. Everything normalizes through one shared contract. A grade you author resolves the same way in preview and in render ([f99fc4e56](https://github.com/heygen-com/hyperframes/commit/f99fc4e5686239f5ef56d4eb6083bee796ceeddc)).
  * **Grading controls in Studio.** The inspector exposes the new curve and wheel controls, with live previews. You can grade a clip on the canvas instead of hand-writing a `data-color-grading` payload ([20ef48abc](https://github.com/heygen-com/hyperframes/commit/20ef48abcb190e3e9ef132d1b1dd711201d3c58b)).
  * **Agent-native grading from the CLI.** `hyperframes media-treatment` applies, previews, and clears a grading payload by selector. Use `--dry-run` before writing and `--clear` to remove. The media-use skill now reads the source and picks a treatment, instead of guessing a preset name ([6d5961b80](https://github.com/heygen-com/hyperframes/commit/6d5961b8024fe70f87879f271dd91149717d41a8), [4582881d0](https://github.com/heygen-com/hyperframes/commit/4582881d002c361afff59cc1c74ae072a50e17f7)).
  * **Media treatments.** A media treatment is a source-aware plan. It composes existing color, effect, timeline, and registry primitives, rather than adding a second runtime schema. Core defines the capability catalog. The runtime renders treatments deterministically. Studio ships an inspector for them. The registry adds matching overlays ([70213c5a8](https://github.com/heygen-com/hyperframes/commit/70213c5a8526b12c8b26f01b8288d78bb9edc917), [944640c32](https://github.com/heygen-com/hyperframes/commit/944640c3283d604383fd437fcca8c63941d8e3d7), [39c2341c4](https://github.com/heygen-com/hyperframes/commit/39c2341c4d1edf52a00fb8db4a49553c739860cc), [b0d3164dd](https://github.com/heygen-com/hyperframes/commit/b0d3164ddb6177c6b31634f02a908fdae607850f)).
  * **Keyframe ease editor.** Studio gets an ease curve editor. It has a preset library, editable ease parameters, and an SVG curve preview. A deterministic ease runtime backs it. An authored ease replays identically at render time ([c253dec23](https://github.com/heygen-com/hyperframes/commit/c253dec23b0a6f1ccfe49c17371fdc9823f73b4c), [5acbf240c](https://github.com/heygen-com/hyperframes/commit/5acbf240cbab38594d06b59b9ef7f2a4b37d31b7)).
  * **Versioned distributed plan protocol.** Distributed plans now carry an explicit protocol descriptor. Plans written before the descriptor still load as v1. A partial, malformed, or unknown descriptor fails closed, before any layout-specific read. Plan hashes and rendered pixels are unchanged ([f9f00b0ef](https://github.com/heygen-com/hyperframes/commit/f9f00b0efc2d1006967d5b2e0009ea3c3f6ed2e6), [#2777](https://github.com/heygen-com/hyperframes/pull/2777)).
  * **Plan v2 publishing straight to object storage.** A storage-neutral, manifest-last publisher lets cloud adapters write plan artifacts directly to S3 and GCS. No shared filesystem is needed. AWS Lambda now reads the v2 protocol. This is the groundwork for lifting the plan size limit on very large distributed renders ([09998789b](https://github.com/heygen-com/hyperframes/commit/09998789b5ff012adcd97e9fb33537e473f1cc52), [74d7bfde4](https://github.com/heygen-com/hyperframes/commit/74d7bfde4870bbc1c6c4471cfc004964807df3e7), [5bf61d6df](https://github.com/heygen-com/hyperframes/commit/5bf61d6df0694c3077ecc7e84cd9d72f2029a5e6), [#2789](https://github.com/heygen-com/hyperframes/pull/2789), [07f9a3de9](https://github.com/heygen-com/hyperframes/commit/07f9a3de954d663e61d0e7da233fe8d33a06a5f9), [#2792](https://github.com/heygen-com/hyperframes/pull/2792)).
  * **Data-driven caption components.** caption-highlight, caption-weight-shift, caption-pill-karaoke, caption-emoji-pop, and caption-editorial-emphasis now build themselves from a shared caption-data runtime. That runtime brings automatic grouping, an emphasis heuristic, and a generic emoji lexicon. A transcript drives the animation, instead of hand-authored per-word markup ([7d4e71d10](https://github.com/heygen-com/hyperframes/commit/7d4e71d10b617b858fde2e764e15d530e9ffdf19), [c67e9dc1f](https://github.com/heygen-com/hyperframes/commit/c67e9dc1f843122225468ce63a67c57f70c2bba2), [08620b75d](https://github.com/heygen-com/hyperframes/commit/08620b75df5275739fd9b0b8f480527fdc1d9a98), [392a9d251](https://github.com/heygen-com/hyperframes/commit/392a9d251a4feadbf7703ba4f9157c1857c7a59b), [ed8973952](https://github.com/heygen-com/hyperframes/commit/ed8973952dda2aa43931e0ffa05b3fc6ba0cb1cb)).
  * **New layout lint checks.** Lint adds `rotation_pivot_drift` and `off_pivot_rotation` for hub-referenced rotation. It also re-samples dense motion for `content_overlap`, so fast collisions between samples are no longer missed ([222aec45a](https://github.com/heygen-com/hyperframes/commit/222aec45ab0553c014dddccd563e273affd9b71a), [#2741](https://github.com/heygen-com/hyperframes/pull/2741), [e710a1686](https://github.com/heygen-com/hyperframes/commit/e710a1686f2442b460ea4973dca0be97c81ef184), [#2744](https://github.com/heygen-com/hyperframes/pull/2744), [72e2f08f1](https://github.com/heygen-com/hyperframes/commit/72e2f08f15ceec105eb2bca6e9e35b8020e040be), [#2746](https://github.com/heygen-com/hyperframes/pull/2746)).
  * **Live map capture warning.** The engine detects a live map viewport at capture init. It names the map library it found and points at the basemap-baking path. Streaming tiles no longer silently produce a nondeterministic render ([30ca51c61](https://github.com/heygen-com/hyperframes/commit/30ca51c615fce20f5266278cdf5f4c97fd691c88)).
  * **Leaner, larger skills corpus.** The composition skills gain seven blueprints and ten rules from a mining pass. The router now routes once and dispatches packet-scoped workers. Each run costs less context ([853256403](https://github.com/heygen-com/hyperframes/commit/853256403b3ffd3dc0b616785ab876b4c0f04a89), [#2680](https://github.com/heygen-com/hyperframes/pull/2680), [6ad738b58](https://github.com/heygen-com/hyperframes/commit/6ad738b580adf157393fde02351af64669c9fbc5), [#2618](https://github.com/heygen-com/hyperframes/pull/2618)).

  ## Fixes

  * **Audio no longer runs past the picture.** Padded audio is normalized on a sample timeline. The mux stops at the shortest normalized stream. The final mux is capped to video duration. AAC packet padding is trimmed exactly. M4A edit timing and priming survive normalization ([4b116b988](https://github.com/heygen-com/hyperframes/commit/4b116b98802c05f0eeb541878806692eea975541), [532461599](https://github.com/heygen-com/hyperframes/commit/532461599b7518f4609002cdb314ff2ce9f3a70f), [63bc525ca](https://github.com/heygen-com/hyperframes/commit/63bc525ca90b08356d50ebb41d4e15581c9d3470), [19258ea5b](https://github.com/heygen-com/hyperframes/commit/19258ea5ba47067e9d5756b122051c467ece0b04), [afc4e96bb](https://github.com/heygen-com/hyperframes/commit/afc4e96bbed21dbcd29544a6be95d35db7dd4eed), [9289551e9](https://github.com/heygen-com/hyperframes/commit/9289551e98958f006ec14af8ae9058096a4932fe), [59c56d325](https://github.com/heygen-com/hyperframes/commit/59c56d325723bbcb7c54315023aedeb72b376cd8), [113a4985b](https://github.com/heygen-com/hyperframes/commit/113a4985b51bc1d77babe7113d6c96bbe46d41bf)).
  * **Portable audio padding.** The audio filter chain drops an FFmpeg option the bundled Windows build rejects. Compositions that rendered video but failed to mux audio now complete. Typed audio failure causes are preserved through the engine, the in-process producer, and distributed planning ([3b9552ef9](https://github.com/heygen-com/hyperframes/commit/3b9552ef9db36b133485e4ce805892346e0b9006), [37b88688e](https://github.com/heygen-com/hyperframes/commit/37b88688e7ae854e377c47fe3d9560ab0c930161), [#2769](https://github.com/heygen-com/hyperframes/pull/2769)).
  * **Probe failures say why.** ffprobe keeps a bounded stderr tail instead of running quiet. A failed probe now reports the actual error rather than a blank diagnostic ([8c5077068](https://github.com/heygen-com/hyperframes/commit/8c50770684bc87ca67592c45d4101e3c029193d2), [#2772](https://github.com/heygen-com/hyperframes/pull/2772)).
  * **Hardened media downloads.** Video downloads are atomic and retry transient failures. Reserved and future-use IPv4 ranges are blocked. Downloader trust-boundary gaps are closed. Network error shapes are narrowed honestly ([c01f6b446](https://github.com/heygen-com/hyperframes/commit/c01f6b446829f15c2c18dfd43da7013b412b2bf7), [2e84faeb2](https://github.com/heygen-com/hyperframes/commit/2e84faeb28ff8689da212a5b7db805f3b454d4d9), [4b81f7858](https://github.com/heygen-com/hyperframes/commit/4b81f785868362fbb5c4bd7f1c5be24b2ccb7f94), [5ce2eb879](https://github.com/heygen-com/hyperframes/commit/5ce2eb879db1bb2b3dd740bcd7e9abf8adaa3230)).
  * **Distributed render reliability.** Sparse video directories are materialized. Distributed capture falls back safely. Plan scratch state resets between runs. Oversized plans are attributed and stopped early. Partial color metadata is accepted in plan v2. Cloud Run enforces effective BeginFrame capture ([ddb59d356](https://github.com/heygen-com/hyperframes/commit/ddb59d3567fc70d808f86ef8b5b531078e3df2d6), [96cafb47c](https://github.com/heygen-com/hyperframes/commit/96cafb47c6c9850939c85e2cc76e578d3b6dbd1b), [ebb02cafe](https://github.com/heygen-com/hyperframes/commit/ebb02cafe7e1d1e067bc37c00fd3613e20230ee5), [d699cbf01](https://github.com/heygen-com/hyperframes/commit/d699cbf014ac2232e3d2cec5c06c9d74103fa61f), [58869f087](https://github.com/heygen-com/hyperframes/commit/58869f0878e304fd39d564b93cc4a8b18e885b4e), [#2814](https://github.com/heygen-com/hyperframes/pull/2814), [2a284a8e3](https://github.com/heygen-com/hyperframes/commit/2a284a8e3aca62100ec037c23c98706e7146aa14)).
  * **Honest extraction errors.** Frame-extraction launch failures aggregate into one typed error with narrowed shapes. They no longer surface as an opaque crash ([33ca1de06](https://github.com/heygen-com/hyperframes/commit/33ca1de0631be66bfa5c591a231256c69667226e), [c01e1a5f9](https://github.com/heygen-com/hyperframes/commit/c01e1a5f96839e1a2650516ceb3745ed7b28517f), [9b63646c8](https://github.com/heygen-com/hyperframes/commit/9b63646c8aa036b786513137f2efcdf637ad432c)).
  * **Capture self-verification.** Parallel and sequential disk drawElement samples self-verify. Screenshot retry recovers disk-path verify failures. A verify failure rethrows past the completeness check. Orphaned probe sessions close before retries. Frame stride carries onto worker results, so interleaved workers stop reporting false positives ([060b6f8ae](https://github.com/heygen-com/hyperframes/commit/060b6f8ae53e8ae243d8e2c2c3afd690dbe7f99c), [9fc1c2f15](https://github.com/heygen-com/hyperframes/commit/9fc1c2f15990fc44f50533362bec2f075aa1d53d), [ec791e91d](https://github.com/heygen-com/hyperframes/commit/ec791e91d97c0070502c4ad208923d4f98005846), [c85cfae8f](https://github.com/heygen-com/hyperframes/commit/c85cfae8fa97229e9c4f4d7217cf08b4bc859f3d), [b8e101547](https://github.com/heygen-com/hyperframes/commit/b8e10154762f5a0fe71fb4a6a9f3d472e9bf99ec), [4f53dd4f2](https://github.com/heygen-com/hyperframes/commit/4f53dd4f2cd607de17b2d2329746fa5da0cadeaa)).
  * **Studio editing.** Preview audio plays at speeds above 1x. Flat keyframe retiming is hardened. Tween keyframe diamonds retime correctly. Composed media treatments survive a round trip. Stale color scopes clear. The grading contracts line up across panels ([07965e9fe](https://github.com/heygen-com/hyperframes/commit/07965e9fe93fc7b53dfe7c933f8abd0c4b10c86d), [#2691](https://github.com/heygen-com/hyperframes/pull/2691), [270179d94](https://github.com/heygen-com/hyperframes/commit/270179d94b3ca3b82f61655b354855187f0d210c), [f25a13692](https://github.com/heygen-com/hyperframes/commit/f25a1369279c99081c56966b14991649138bc035), [d5c7d3ee1](https://github.com/heygen-com/hyperframes/commit/d5c7d3ee16c2db53b91c66353d4f6387fe23e920), [c1fcf7534](https://github.com/heygen-com/hyperframes/commit/c1fcf7534f730f5677b0d5201e6af6d17bd19cb0), [794930a07](https://github.com/heygen-com/hyperframes/commit/794930a07568deddd55ba0d891b68bec739641fa)).
  * **Authoring fidelity.** Position edits apply to SVG elements, not just HTML. Nested-rule selectors survive composition CSS scoping. `setText` keeps `<br>` line breaks editable. Duration-authored keyframe timing and intent are preserved ([63539a0cd](https://github.com/heygen-com/hyperframes/commit/63539a0cdef75597d2e301736740cf3bdd905596), [#2724](https://github.com/heygen-com/hyperframes/pull/2724), [1e2c7d673](https://github.com/heygen-com/hyperframes/commit/1e2c7d673fc0fe8da9a822bb7a8744f84f44d9d4), [#2733](https://github.com/heygen-com/hyperframes/pull/2733), [dd7378bbd](https://github.com/heygen-com/hyperframes/commit/dd7378bbd934ecc0da85c1edfae7946ac7e2271a), [#2742](https://github.com/heygen-com/hyperframes/pull/2742), [4bfbd89d6](https://github.com/heygen-com/hyperframes/commit/4bfbd89d633d5fd227023643db62d2a566984edb), [d84e999f7](https://github.com/heygen-com/hyperframes/commit/d84e999f728e25cee15a71995805a52d0a7907c4)).
  * **Fewer false lint failures.** The `media_in_subcomposition` rule is dropped. Bounded GSAP infinite repeats are allowed. Compiler-derived `data-end` is recognized as legitimate. The pivot-drift and `connector_detached` checks are tightened against counterfactuals ([e7f9918d2](https://github.com/heygen-com/hyperframes/commit/e7f9918d21f9fa57f1799c7b3ba38963cfcb52f1), [#2765](https://github.com/heygen-com/hyperframes/pull/2765), [adb149b86](https://github.com/heygen-com/hyperframes/commit/adb149b86939e61bb3fce91cb8d0e5530f7bd29c), [#2763](https://github.com/heygen-com/hyperframes/pull/2763), [ac9f46310](https://github.com/heygen-com/hyperframes/commit/ac9f463108531d28eee496bd837aab542eb9e409), [75ed99e1d](https://github.com/heygen-com/hyperframes/commit/75ed99e1d4f45015812575ff26c07efb0b253f21), [#2819](https://github.com/heygen-com/hyperframes/pull/2819), [7a294f195](https://github.com/heygen-com/hyperframes/commit/7a294f19562928036dae20d5e73c2637d1e19060), [#2739](https://github.com/heygen-com/hyperframes/pull/2739)).
  * **Preview and coverage.** The preview server serves external symlink assets. Looping short videos are credited in the coverage gate. Frame coverage aligns with extraction rounding. Invalid render durations are bounded ([7778c093b](https://github.com/heygen-com/hyperframes/commit/7778c093b6288756cf5e27311828e6049e7c85c3), [#2764](https://github.com/heygen-com/hyperframes/pull/2764), [a637f394e](https://github.com/heygen-com/hyperframes/commit/a637f394ee900c64c8f2e1ee78cf1e0ce17b8739), [#2732](https://github.com/heygen-com/hyperframes/pull/2732), [f0c2c7d23](https://github.com/heygen-com/hyperframes/commit/f0c2c7d23384de589f54c11ff093f128c9a39e56), [344d9c0a8](https://github.com/heygen-com/hyperframes/commit/344d9c0a87aeba01beca618e21d2469921506cdf)).
  * **Runtime audio variables in distributed plans.** Audio variables resolved at runtime are carried into distributed plans. They are no longer dropped when a render fans out ([465c9e764](https://github.com/heygen-com/hyperframes/commit/465c9e764138b94faa48badbee468eb42bd1a39d), [#2725](https://github.com/heygen-com/hyperframes/pull/2725)).
  * **CLI process lifecycle.** Command failures report once. Error telemetry is awaited before finalization. The post-render exit reset stays root-owned. The lifecycle migration is complete ([73d3b4e1f](https://github.com/heygen-com/hyperframes/commit/73d3b4e1f491e5211a960bac86fbb674909be7ad), [a9338a4e0](https://github.com/heygen-com/hyperframes/commit/a9338a4e0f91b8482fe32bef50018209c29ce031), [e0bda7a17](https://github.com/heygen-com/hyperframes/commit/e0bda7a17111753f76b7e073d654be802c06c129), [619406a23](https://github.com/heygen-com/hyperframes/commit/619406a23b061bf659d107f83beec4eada6ff086)).
  * **Caption template hygiene.** Caption runtimes are wrapped in IIFEs. Non-numeric caption-data versions are rejected. A boot fetch never clobbers a manual attach. Brand custom properties clear on unbranded re-attach. GSAP renders at attach. A quadratic hide-all-others loop is gone ([e2846eb7c](https://github.com/heygen-com/hyperframes/commit/e2846eb7cc81821f7fc21a9c4dccdd85c7ef3429), [5c2981d06](https://github.com/heygen-com/hyperframes/commit/5c2981d066480000d623e4d023e9cf918b2772e3), [4f6994719](https://github.com/heygen-com/hyperframes/commit/4f6994719196e72dc01ebe8f60d869e064ec7685), [020c8986f](https://github.com/heygen-com/hyperframes/commit/020c8986f46f795757203900cd251ad551ccc620), [5af6203ae](https://github.com/heygen-com/hyperframes/commit/5af6203ae7fcd506511ca5683a9097d666c4a63e), [18de2b1f1](https://github.com/heygen-com/hyperframes/commit/18de2b1f1de8062a79ae7aa6fa4796e320fe6131), [8bf939043](https://github.com/heygen-com/hyperframes/commit/8bf939043fb44e05f6dd7caba81822ac5ef18334)).
  * **Feedback telemetry.** CLI feedback is sent as plain events. The repro guidance no longer embeds identifying detail ([597c14a88](https://github.com/heygen-com/hyperframes/commit/597c14a8874401fe252d238c1ed4a0b6e2812a2c), [78ab9bc88](https://github.com/heygen-com/hyperframes/commit/78ab9bc889908e412e806d80f4ffbd938efc7a78)).

  ## Docs

  * **Send-to guide is discoverable.** The Send-to guide is published in the nav and in `llms.txt`. Agents can find it without being handed the path ([911b332bb](https://github.com/heygen-com/hyperframes/commit/911b332bb2131f1b3fc4abbea563bf0c70d165c4), [#2667](https://github.com/heygen-com/hyperframes/pull/2667)).
  * **Changelog video skill.** Captions are non-optional in the changelog-video skill. A pre-build gate stops a run before it produces an unbuildable composition ([807078c7c](https://github.com/heygen-com/hyperframes/commit/807078c7cde9d5c8403588722d1cd9397c513a0d), [#2729](https://github.com/heygen-com/hyperframes/pull/2729), [7d312bd17](https://github.com/heygen-com/hyperframes/commit/7d312bd170baa6fb1d2c247e14fef7c4d1022279)).
  * **Codex plugin packaging.** The skills bundle now packages a Codex plugin upload alongside the existing surfaces ([696cbdbbd](https://github.com/heygen-com/hyperframes/commit/696cbdbbd0e5c83faf72c767126d4a153110f130), [#2668](https://github.com/heygen-com/hyperframes/pull/2668)).

  For exact versioned release notes, see the [Changelog](/changelog).
</Update>

<Update label="Week of July 13, 2026" description="Weekly digest - July 13, 2026 - July 20, 2026" tags={["Weekly update", "Highlights"]}>
  <Frame>
    <DocsVideo title="HyperFrames video: Weekly Changelog Jul13 20" src="https://static.heygen.ai/hyperframes/changelog-videos/weekly-changelog-jul13-20.mp4" />
  </Frame>

  Automatic media proxying is the headline. Any video codec your FFmpeg can decode now plays on every live surface. That covers preview, Studio, play, and published pages. Render keeps using the originals. Media Use gains a video generator. Studio's flat inspector ships on by default. The engine's timeout errors now name the fix. A large batch of render, lint, and CLI reliability fixes lands alongside.

  ## Features

  * **Automatic media proxying.** Studio-server probes each source's codec facts and transcodes a bounded H.264 proxy on demand. The runtime swaps an undecodable source to its proxy. Browser-hostile footage plays instead of showing a black frame. Render always uses the originals ([9ca1e1710](https://github.com/heygen-com/hyperframes/commit/9ca1e171013c0d74a868f5eda3ebdf93c9566632), [#2587](https://github.com/heygen-com/hyperframes/pull/2587), [9d148d288](https://github.com/heygen-com/hyperframes/commit/9d148d288aa1ea1ad4ea687fc21d92f8b5008286), [#2589](https://github.com/heygen-com/hyperframes/pull/2589), [39b588cbd](https://github.com/heygen-com/hyperframes/commit/39b588cbd0e196d1d1db14e959f837dc90cf7788), [#2592](https://github.com/heygen-com/hyperframes/pull/2592)).
  * **Proxies across the authoring surfaces.** Proxies serve from the preview route, play, and the static project server. They also bake into published archives. Projects can opt out with `media.autoProxy` or `--no-proxy` ([67eab59f4](https://github.com/heygen-com/hyperframes/commit/67eab59f44c0609c7299dc7127d864b37d2d1715), [#2590](https://github.com/heygen-com/hyperframes/pull/2590), [74b4f1e8c](https://github.com/heygen-com/hyperframes/commit/74b4f1e8c3cb0058583c6d9048708519a6d94417), [#2593](https://github.com/heygen-com/hyperframes/pull/2593), [35eff5038](https://github.com/heygen-com/hyperframes/commit/35eff5038b5f8e825b416b05bd7ea5baa38684a0), [#2595](https://github.com/heygen-com/hyperframes/pull/2595), [645880706](https://github.com/heygen-com/hyperframes/commit/6458807066bd4e0c1a6f573423879e97b91ad1c3), [#2591](https://github.com/heygen-com/hyperframes/pull/2591)).
  * **Alpha-capable proxies.** Alpha sources get a VP9 and yuva420p WebM proxy instead of a refusal. A ProRes 4444 file previews rather than going black ([e8371a7ac](https://github.com/heygen-com/hyperframes/commit/e8371a7accfb1ccd88c792898b65910aec60b0bd), [#2598](https://github.com/heygen-com/hyperframes/pull/2598)).
  * **Media Use video generation.** `resolve --type video` generates a HeyGen avatar video, free for new API users. It falls back to local LTX-2 when HeyGen is unavailable, or when you pass `--local-only` ([0a66671fc](https://github.com/heygen-com/hyperframes/commit/0a66671fc576b6b7d4a1b433ff97467dcba20b17), [#2614](https://github.com/heygen-com/hyperframes/pull/2614)).
  * **Flat inspector on by default.** Studio's flat inspector is now the default panel after this cycle's fixes. Set `VITE_STUDIO_FLAT_INSPECTOR_ENABLED=false` to return to the legacy panel ([a4167ede0](https://github.com/heygen-com/hyperframes/commit/a4167ede074cc4a3e86bc14571ff6a406d664271)).
  * **Size-aware cloud archives.** Cloud render and publish honor `.hyperframesignore`. They drop root render and snapshot output by default. They add `cloud render --dry-run` diagnostics, so projects stay under the 200MB upload limit ([e73304fb0](https://github.com/heygen-com/hyperframes/commit/e73304fb0e94d2272839e55a0bcc4dd00210db34)).
  * **Clearer engine timeout errors.** Puppeteer and page-navigation timeouts now name the env vars and escape hatches that fix them. Streaming-encode auto-disables on Windows software-GPU setups ([6944a1c2d](https://github.com/heygen-com/hyperframes/commit/6944a1c2d0430c8d42c6c5e1408d640b9674a2c8), [58cff5f6d](https://github.com/heygen-com/hyperframes/commit/58cff5f6d5dc8a136617df1a1b1712b142ec0986), [cbf2a2ec6](https://github.com/heygen-com/hyperframes/commit/cbf2a2ec69f12f4b5aad384d538d354321ce64cf)).
  * **New GSAP lint rules.** Lint flags seek-order and SVG draw-on hazards. It flags relative-value second writers and `tl.set` initial hides. It flags cold-seek opacity reveals that break at render time ([f3d210066](https://github.com/heygen-com/hyperframes/commit/f3d21006633014fcb29b7a51571cd50ce832fed3), [#2611](https://github.com/heygen-com/hyperframes/pull/2611), [4ad582606](https://github.com/heygen-com/hyperframes/commit/4ad582606bd2c0da9e20c83faa1acb3b79fe6e47), [#2612](https://github.com/heygen-com/hyperframes/pull/2612), [55ee559e4](https://github.com/heygen-com/hyperframes/commit/55ee559e40e2e84e11fe5e09e8bf57b755ea03cb), [#2503](https://github.com/heygen-com/hyperframes/pull/2503)).
  * **CLI quality-of-life.** The transcribe timeout is configurable, with a duration-scaled default. `--resolution` accepts portrait aspects. `doctor` surfaces the extract-cache directory, alongside a new `--frames-cache-dir` flag ([f8210d96d](https://github.com/heygen-com/hyperframes/commit/f8210d96daf7fd081e9304f26a288a0a1420db66), [46e9ecf3f](https://github.com/heygen-com/hyperframes/commit/46e9ecf3f2f66f7a8b145fc87a36184541b3ad13), [ca3522750](https://github.com/heygen-com/hyperframes/commit/ca352275062574b8b96aaef2ac06f8bae0a1ccc1)).
  * **SDK base variable reads.** `getVariableValue({ base: true })` reads the declared default before overrides. `attachSync` re-syncs the override snapshot on iframe load ([db5e06221](https://github.com/heygen-com/hyperframes/commit/db5e062211fbad324b67bcc672d4e92cc4e2d351), [#2499](https://github.com/heygen-com/hyperframes/pull/2499), [4682da14f](https://github.com/heygen-com/hyperframes/commit/4682da14f19061aeac25b723e1cbb6a98f5d86ad)).

  ## Fixes

  * **Deep sub-composition nesting.** Recursive sub-composition inlining now handles depth-3 and deeper nesting ([d21883fe0](https://github.com/heygen-com/hyperframes/commit/d21883fe05a5819e910d4747683dc008a0ab5147), [#2660](https://github.com/heygen-com/hyperframes/pull/2660)).
  * **Final frame holds.** Video holds its final frame through the rest of the composition instead of dropping to blank ([2e8f871bc](https://github.com/heygen-com/hyperframes/commit/2e8f871bc86d29ec3369f0eb11f0183b2001a07a)).
  * **No phantom capture duplicates.** Capture stops compositing phantom duplicates when captureBeyondViewport is on ([2be8a62c0](https://github.com/heygen-com/hyperframes/commit/2be8a62c0009e61aeae7f713773013afd9b6f173), [#2607](https://github.com/heygen-com/hyperframes/pull/2607)).
  * **Clean CLI output.** Diagnostics and the SystemMemory cgroup notice now go to stderr. That keeps `--json` output and stdout parsers clean ([b179c9536](https://github.com/heygen-com/hyperframes/commit/b179c95362645c3ca06fa869d698429e2e3d1e61), [#2520](https://github.com/heygen-com/hyperframes/pull/2520), [d92d1d4f5](https://github.com/heygen-com/hyperframes/commit/d92d1d4f51e2737d19db8a67073da8ae04a16789), [#2522](https://github.com/heygen-com/hyperframes/pull/2522)).
  * **Studio reliability.** Composition timelines are hardened. Stale failed sidecars are ignored for existing renders. Stale SwiftShader layers are prevented ([2b65b4efc](https://github.com/heygen-com/hyperframes/commit/2b65b4efcef9f69ab294aa608b54a89a600ab76f), [#2615](https://github.com/heygen-com/hyperframes/pull/2615), [2577aaffe](https://github.com/heygen-com/hyperframes/commit/2577aaffeb9703be3d9dd17c0c5fb3c45b6e32e7), [#2621](https://github.com/heygen-com/hyperframes/pull/2621), [54a3ef200](https://github.com/heygen-com/hyperframes/commit/54a3ef2000da635b93c03a41c129a78f0276bf38)).
  * **Platform fixes.** Intel macOS background removal is restored. Windows work dirs avoid the output path limit. A dyld crash on older macOS now points at `HYPERFRAMES_BROWSER_PATH` ([04954ead8](https://github.com/heygen-com/hyperframes/commit/04954ead818d5db91efbdd7bbb2bd1e5f07a2f60), [#2480](https://github.com/heygen-com/hyperframes/pull/2480), [882c20324](https://github.com/heygen-com/hyperframes/commit/882c203241b43e6a1515c2672a4285d0d4f5425c), [#2479](https://github.com/heygen-com/hyperframes/pull/2479), [0d16f19b0](https://github.com/heygen-com/hyperframes/commit/0d16f19b07b1c7f60d54cac4f05f93ea3abacbcd)).
  * **Media Use asset cleanup.** Failed asset reservations are cleaned up instead of leaking zero-byte placeholders ([49113eb08](https://github.com/heygen-com/hyperframes/commit/49113eb08487b2c53b7404bc26c5e419244ae97f), [#2627](https://github.com/heygen-com/hyperframes/pull/2627)).
  * **Producer coverage gate.** Held video tails are credited in the coverage gate ([209784ab2](https://github.com/heygen-com/hyperframes/commit/209784ab27801b70c9d8e636e4eaf2e3dc796d2b), [#2606](https://github.com/heygen-com/hyperframes/pull/2606)).

  ## Docs & Examples

  * **Automatic proxying guide.** New docs cover the proxy cache, published-proxy baking, and the render-original invariant. They also cover FFmpeg requirements and both opt-out forms ([8c1b6c515](https://github.com/heygen-com/hyperframes/commit/8c1b6c515401a03e1a8394cff60b4e7410f14f0d), [#2596](https://github.com/heygen-com/hyperframes/pull/2596)).
  * **Send-to guides consolidated.** The Send-to import guidance now lives in one guide. That resolves an earlier fidelity contradiction ([8bfc67688](https://github.com/heygen-com/hyperframes/commit/8bfc676881c07c3c8ee1f0b6b247cc5f207cd3fd), [#2619](https://github.com/heygen-com/hyperframes/pull/2619), [7acabbcde](https://github.com/heygen-com/hyperframes/commit/7acabbcdeb9b55ce9f75c7d35d7f281273a99f29), [#2620](https://github.com/heygen-com/hyperframes/pull/2620)).
  * **Core skills install by default.** The core skill set now installs by default on every surface ([3bb26b0f0](https://github.com/heygen-com/hyperframes/commit/3bb26b0f08142e95126b4934511a09a1e68c143d), [#2554](https://github.com/heygen-com/hyperframes/pull/2554)).
  * **TTS docs aligned.** The skill's text-to-speech docs now match the CLI contract ([428e57191](https://github.com/heygen-com/hyperframes/commit/428e571914ee979c815097fbbd26d56757a11056), [#2483](https://github.com/heygen-com/hyperframes/pull/2483)).

  For exact versioned release notes, see the [Changelog](/changelog).
</Update>
