commit 8d2fe92fdde3fc593e3ca6ae131a3c91c05a33e5
parent e38c05d1c69c70698f333f029cacd8f02cd5412f
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date: Thu, 1 Oct 2026 16:15:06 -0400
umtool: the clip bench takes MUTE_FADE from a dependency-free mute.mjs, so deck.mjs stays out of its client bundle
report-to-video/mute.mjs holds the one constant and is exported as
umtool-report-to-video/mute; deck.mjs re-exports it, so the build and the
bench still read the same number. playback.mjs, which the "use client"
bench imports, no longer pulls in deck.mjs with node:crypto and
attribution: the capped build's client chunks no longer carry
crypto-browserify (1 chunk before, 0 after) and are 1,505,165 bytes →
1,043,591.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Diffstat:
4 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/umtool/lib/report/playback.mjs b/umtool/lib/report/playback.mjs
@@ -40,9 +40,11 @@ export const START_LEAD = 0.03;
/**
* The mute mark's fade, in source seconds: the BUILD's, so what the bench plays
* is what the cut does -- a ramp that ENDS at the mark, silent from the mark on.
+ * From `mute.mjs`, not `deck.mjs`: this module is in the bench's client bundle,
+ * and deck.mjs would bring node:crypto and attribution with it.
*/
-export { MUTE_FADE } from "umtool-report-to-video/deck";
-import { MUTE_FADE } from "umtool-report-to-video/deck";
+export { MUTE_FADE } from "umtool-report-to-video/mute";
+import { MUTE_FADE } from "umtool-report-to-video/mute";
/** One Web Audio render quantum, in frames. */
export const RENDER_QUANTUM = 128;
diff --git a/umtool/report-to-video/deck.mjs b/umtool/report-to-video/deck.mjs
@@ -906,8 +906,8 @@ export function footageMoves({ posts, segments, render }) {
// validators (umtool's writers and the build share them) and the arithmetic.
// ---------------------------------------------------------------------------
-/** The fade into a `muteFrom`'s silence, in seconds: long enough not to click, short enough to keep the next word out. */
-export const MUTE_FADE = 0.04;
+/** The fade into a `muteFrom`'s silence (`mute.mjs`, dependency-free so a client bundle can take it alone). */
+export { MUTE_FADE } from "./mute.mjs";
/** `render.endFade`'s upper bound, in seconds. */
export const END_FADE_MAX = 10;
diff --git a/umtool/report-to-video/mute.mjs b/umtool/report-to-video/mute.mjs
@@ -0,0 +1,7 @@
+// The mute mark's fade, alone: no imports, so a client bundle (umtool's clip
+// bench previews the mute as the build makes it) can take it without pulling
+// in deck.mjs and what deck.mjs imports (node:crypto, attribution).
+// deck.mjs re-exports it; the build and the bench read the same number.
+
+/** The fade into a `muteFrom`'s silence, in seconds: long enough not to click, short enough to keep the next word out. */
+export const MUTE_FADE = 0.04;
diff --git a/umtool/report-to-video/package.json b/umtool/report-to-video/package.json
@@ -24,6 +24,7 @@
"./cues": "./cues.mjs",
"./deck": "./deck.mjs",
"./ledger-totals": "./ledger-totals.mjs",
+ "./mute": "./mute.mjs",
"./package.json": "./package.json",
"./render-cards": "./render-cards.mjs",
"./resolve-windows": "./resolve-windows.mjs",