From afafca4b9670cad60afd66475207ef6a016a759b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel?= Date: Tue, 18 Aug 2026 10:17:02 -0400 Subject: [PATCH] feat: make creator media edits render-safe (#3322) * feat: make creator media edits render-safe * fix: align media playback timing * docs: add creator editing recipes * docs: expand creator editing guidance * fix: unify media source offsets * fix: scale natural media duration * fix: preserve natural media zero spans * fix: align compiled natural media timing * test: classify compiler media test as integration * fix: drop inactive media windows * fix: unify literal timing parsing * fix: keep browser media parsing serializable * fix: keep page timing readers strict * fix: close remaining preview timing gaps * fix(core): preserve Studio voice pitch at playback speed * chore: keep creator contract source-neutral --- .../core/src/compiler/timingCompiler.test.ts | 17 + packages/core/src/compiler/timingCompiler.ts | 38 +- packages/core/src/index.ts | 8 + packages/core/src/runtime/audioFx.test.ts | 6 +- packages/core/src/runtime/clipTree.test.ts | 25 ++ packages/core/src/runtime/clipTree.ts | 11 +- packages/core/src/runtime/init.test.ts | 24 ++ packages/core/src/runtime/init.ts | 109 ++--- packages/core/src/runtime/media.test.ts | 55 +++ packages/core/src/runtime/media.ts | 32 +- .../src/runtime/mediaVolumeEnvelope.test.ts | 18 + .../core/src/runtime/mediaVolumeEnvelope.ts | 11 +- .../core/src/runtime/playbackRate.test.ts | 31 ++ packages/core/src/runtime/playbackRate.ts | 48 +++ packages/core/src/runtime/startResolver.ts | 6 +- packages/core/src/runtime/timeline.test.ts | 40 ++ packages/core/src/runtime/timeline.ts | 31 +- .../src/runtime/webAudioTransport.test.ts | 149 ++++++- .../core/src/runtime/webAudioTransport.ts | 148 ++++++- .../engine/src/services/audioMixer.test.ts | 228 +++++++++++ packages/engine/src/services/audioMixer.ts | 85 +++- .../engine/src/services/audioMixer.types.ts | 2 + .../src/services/mediaTimelineWindow.test.ts | 40 ++ .../src/services/mediaTimelineWindow.ts | 17 + .../src/services/videoFrameExtractor.test.ts | 130 ++++++ .../src/services/videoFrameExtractor.ts | 168 +++++--- .../producer/scripts/test-classification.mjs | 1 + .../scripts/test-classification.test.mjs | 11 + .../htmlCompiler.naturalDuration.test.ts | 133 ++++++ .../src/services/htmlCompiler.test.ts | 109 ++++- .../producer/src/services/htmlCompiler.ts | 159 +++++--- .../playback-rate-av-parity.test.ts | 234 +++++++++++ scripts/creator-editing-capabilities.test.mjs | 377 ++++++++++++++++++ skills-manifest.json | 14 +- skills/general-video/SKILL.md | 9 + skills/hyperframes-audio/SKILL.md | 18 + skills/hyperframes-cli/SKILL.md | 14 + skills/hyperframes-core/SKILL.md | 39 +- .../references/creator-editing-recipes.md | 341 ++++++++++++++++ .../references/tracks-and-clips.md | 12 + skills/hyperframes-keyframes/SKILL.md | 39 +- skills/hyperframes/SKILL.md | 15 + 42 files changed, 2695 insertions(+), 307 deletions(-) create mode 100644 packages/core/src/runtime/playbackRate.test.ts create mode 100644 packages/engine/src/services/mediaTimelineWindow.test.ts create mode 100644 packages/engine/src/services/mediaTimelineWindow.ts create mode 100644 packages/producer/src/services/htmlCompiler.naturalDuration.test.ts create mode 100644 packages/producer/tests/playback-rate-av-parity/playback-rate-av-parity.test.ts create mode 100644 scripts/creator-editing-capabilities.test.mjs create mode 100644 skills/hyperframes-core/references/creator-editing-recipes.md diff --git a/packages/core/src/compiler/timingCompiler.test.ts b/packages/core/src/compiler/timingCompiler.test.ts index a3f411f8e..6ddbfe709 100644 --- a/packages/core/src/compiler/timingCompiler.test.ts +++ b/packages/core/src/compiler/timingCompiler.test.ts @@ -19,6 +19,23 @@ it("source contains no raw NUL bytes", () => { }); describe("compileTimingAttrs", () => { + it.each(["", " ", "0s", "0abc", "0px", "-1s", "Infinity", "NaN"])( + "does not partially parse invalid literal data-duration=%j", + (duration) => { + const html = `