mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-11 06:30:03 +00:00
* refactor(producer): extract HDR compositor from renderOrchestrator Move ~700 LOC of HDR compositing primitives (countNonZeroAlpha, countNonZeroRgb48, cropRgb48le, HdrVideoFrameSource, closeHdrVideoFrameSource, blitHdrVideoLayer, HdrImageBuffer, blitHdrImageLayer, CompositeTransfer, shouldUseLayeredComposite, resolveCompositeTransfer, HdrCompositeContext, compositeHdrFrame, HdrTransitionMeta, TransitionRange) into a dedicated hdrCompositor.ts module. Remove backward-compat re-exports from renderOrchestrator (hdrPerf, captureCost, shared) and rewire all import sites to the authoritative source modules. * refactor(producer): delete 4 re-export shim files screenshotService.ts, videoFrameExtractor.ts, videoFrameInjector.ts, and streamingEncoder.ts existed solely to re-export symbols from @hyperframes/engine. No internal consumer imported from them except index.ts → videoFrameInjector, which now imports directly from engine. * refactor(producer): delete unused PNG decode/blit worker pool The pool (455 LOC) and worker (127 LOC) were built speculatively for pipelining Chrome screenshots with PNG decode/blit but were never wired into any capture path. Zero non-test source files imported them. Also removed the esbuild entry point from producer/build.mjs, the tsup entry point + alpha-blit alias from cli/tsup.config.ts, and the PNG worker bootstrap from cli/src/cli.ts. * refactor(producer): centralize frame filename construction Replace 4 inline padStart(6) template literals with shared helpers: - formatCaptureFrameName(index, ext): zero-based, for internal capture - formatExportFrameName(index, ext): zero-based input, one-based output for user-facing png-sequence export * perf(producer): hoist allElementIds out of compositing loop Move fullStacking.map() from inside the per-layer iteration to before the loop, computing the element ID list once per frame instead of once per DOM layer per frame. * refactor(producer): consolidate HDR timing instrumentation * refactor(producer): remove typecasts and deduplicate HDR capture patterns - Extract seekInjectAndQueryStacking() and seekAndInject() helpers to deduplicate the seek+inject+query pattern across sequential loop, hybrid loop, and per-scene transition capture (3 call sites → 1 helper) - Fix sceneBuf as Buffer casts by properly typing the scene-capture arrays as [Buffer, Set<string>][] instead of using as const + cast - Replace as NonNullable<> cast on outputFormat with as const fallback - Add explanatory comments on inherent linkedom DOM casts * refactor(producer): name constants, type matrix, extract opacity helper - Replace magic 0.001/0.999 with TRANSFORM_IDENTITY_EPSILON and OPAQUE_ALPHA_THRESHOLD; replace BPP=6 with RGB48_BYTES_PER_PIXEL - Add AffineMatrix tuple type + isAffineMatrix guard, eliminating all 4 non-null assertions on matrix indices - Extract resolveBlitOpacity() to replace 5 identical ternaries - Narrow fallow-ignore-file to line-level complexity suppressions
103 lines
4.0 KiB
TypeScript
103 lines
4.0 KiB
TypeScript
/**
|
|
* @hyperframes/producer
|
|
*
|
|
* Generic HTML-to-video rendering engine using Chrome's BeginFrame API.
|
|
* Framework-agnostic: works with GSAP, Lottie, Three.js, CSS animations,
|
|
* or any web content via configurable page contracts and hooks.
|
|
*/
|
|
|
|
// ── Main rendering pipeline ─────────────────────────────────────────────────
|
|
export {
|
|
createRenderJob,
|
|
executeRenderJob,
|
|
RenderCancelledError,
|
|
type RenderConfig,
|
|
type RenderConfigInput,
|
|
type RenderJob,
|
|
type RenderStatus,
|
|
type RenderPerfSummary,
|
|
type ProgressCallback,
|
|
} from "./services/renderOrchestrator.js";
|
|
export {
|
|
type BrowserDiagnosticSummary,
|
|
type RenderCaptureObservability,
|
|
type RenderObservabilitySummary,
|
|
type RenderObservationData,
|
|
type RenderObservationEvent,
|
|
type RenderObservationStatus,
|
|
} from "./services/render/observability.js";
|
|
|
|
// ── Frame capture (lower-level) ─────────────────────────────────────────────
|
|
export {
|
|
createCaptureSession,
|
|
initializeSession,
|
|
closeCaptureSession,
|
|
captureFrame,
|
|
captureFrameToBuffer,
|
|
getCompositionDuration,
|
|
getCapturePerfSummary,
|
|
prepareCaptureSessionForReuse,
|
|
type CaptureOptions,
|
|
type CaptureSession,
|
|
type CaptureResult,
|
|
type CapturePerfSummary,
|
|
type BeforeCaptureHook,
|
|
} from "./services/frameCapture.js";
|
|
|
|
// ── File server ─────────────────────────────────────────────────────────────
|
|
export {
|
|
createFileServer,
|
|
type FileServerOptions,
|
|
type FileServerHandle,
|
|
} from "./services/fileServer.js";
|
|
|
|
// ── Video frame injection (Hyperframes-specific hook) ───────────────────────
|
|
export { createVideoFrameInjector } from "@hyperframes/engine";
|
|
|
|
// ── Configuration ───────────────────────────────────────────────────────────
|
|
export { resolveConfig, DEFAULT_CONFIG, type ProducerConfig } from "./config.js";
|
|
|
|
// ── Logger ──────────────────────────────────────────────────────────────────
|
|
export {
|
|
type ProducerLogger,
|
|
type LogLevel,
|
|
createConsoleLogger,
|
|
defaultLogger,
|
|
} from "./logger.js";
|
|
|
|
// ── Server ──────────────────────────────────────────────────────────────────
|
|
export {
|
|
createRenderHandlers,
|
|
createProducerApp,
|
|
startServer,
|
|
type HandlerOptions,
|
|
type ServerOptions,
|
|
type RenderHandlers,
|
|
} from "./server.js";
|
|
|
|
// ── Utilities ───────────────────────────────────────────────────────────────
|
|
export { normalizeErrorMessage } from "./utils/errorMessage.js";
|
|
export { quantizeTimeToFrame } from "./utils/parityContract.js";
|
|
export { resolveRenderPaths, type RenderPaths } from "./utils/paths.js";
|
|
|
|
export {
|
|
prepareHyperframeLintBody,
|
|
runHyperframeLint,
|
|
type PreparedHyperframeLintInput,
|
|
} from "./services/hyperframeLint.js";
|
|
|
|
// ── Distributed render primitives ───────────────────────────────────────────
|
|
// The full surface lives at `@hyperframes/producer/distributed`; we
|
|
// additionally re-export the three activity functions + their result
|
|
// types here so callers that pin `@hyperframes/producer` don't need a
|
|
// separate subpath import.
|
|
export {
|
|
assemble,
|
|
plan,
|
|
renderChunk,
|
|
type AssembleResult,
|
|
type ChunkResult,
|
|
type DistributedRenderConfig,
|
|
type PlanResult,
|
|
} from "./distributed.js";
|