gitframes 1.2.35 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/effects/index.d.mts +2 -2
- package/dist/effects/index.mjs +2 -2
- package/dist/{effects-4t4qk-BR.mjs → effects-C9connag.mjs} +946 -1556
- package/dist/effects-C9connag.mjs.map +1 -0
- package/dist/{index-B1557AUi.d.mts → index-t9GyO4Ei.d.mts} +35 -50
- package/dist/index-t9GyO4Ei.d.mts.map +1 -0
- package/dist/index.d.mts +24 -32
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +49 -77
- package/dist/index.mjs.map +1 -1
- package/dist/renderer/index.mjs +1 -1
- package/dist/{renderer-DVi31fSv.mjs → renderer-DgY7XBYE.mjs} +3 -3
- package/dist/{renderer-DVi31fSv.mjs.map → renderer-DgY7XBYE.mjs.map} +1 -1
- package/package.json +55 -55
- package/dist/effects-4t4qk-BR.mjs.map +0 -1
- package/dist/index-B1557AUi.d.mts.map +0 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["LayerAnimation","path","CameraAnimation","AdvancedTextAnimatorBuilder","color","TextPathBuilder","TextAnimatorBuilder","z$1","Scene","Sequence","size","z","color","resolvedSource","YoloNode","analyzeYoloSequence","signal","color","CoreEffect"],"sources":["../src/rich-text.ts","../../compositions/dist/program/index.mjs","../src/shapes3d.ts","../src/index.ts"],"sourcesContent":["import type { Signal, TextSpan, TextSpanMark } from \"@gitframes/core\";\n\nexport type { TextSpan, TextSpanMark };\n\nexport type TextSpanItem =\n\t| string\n\t| number\n\t| boolean\n\t| Signal<unknown>\n\t| TextSpan\n\t| (string | TextSpan)[]\n\t| null\n\t| undefined;\n\n/**\n * Tagged template literal for authoring rich, multi-style text runs.\n *\n * Interpolates strings, numbers, reactive signals, and typed span modifiers\n * directly into a structured TextSpan[] array with zero runtime parsing.\n *\n * @example\n * rich`Scale ${bold(\"10x\", { fill: \"#6366f1\" })} faster with ${mark(\"120 FPS\", { bg: \"#10b98133\" })}`\n */\nexport function rich(\n\tstrings: TemplateStringsArray,\n\t...values: TextSpanItem[]\n): TextSpan[] {\n\tconst spans: TextSpan[] = [];\n\n\tfor (let i = 0; i < strings.length; i++) {\n\t\tconst str = strings[i];\n\t\tif (str) {\n\t\t\tspans.push({ text: str });\n\t\t}\n\n\t\tif (i < values.length) {\n\t\t\tconst val = values[i];\n\t\t\tif (val === null || val === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (Array.isArray(val)) {\n\t\t\t\tfor (const item of val) {\n\t\t\t\t\tif (typeof item === \"string\") {\n\t\t\t\t\t\tif (item) spans.push({ text: item });\n\t\t\t\t\t} else if (item && typeof item === \"object\" && \"text\" in item) {\n\t\t\t\t\t\tspans.push(item as TextSpan);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (typeof val === \"object\" && \"text\" in val) {\n\t\t\t\tspans.push(val as TextSpan);\n\t\t\t} else if (\n\t\t\t\ttypeof val === \"object\" &&\n\t\t\t\t\"get\" in val &&\n\t\t\t\ttypeof (val as { get: unknown }).get === \"function\"\n\t\t\t) {\n\t\t\t\tspans.push({ text: val as Signal<string> });\n\t\t\t} else {\n\t\t\t\tspans.push({ text: String(val) });\n\t\t\t}\n\t\t}\n\t}\n\n\treturn spans;\n}\n\nexport function span(\n\ttext: string | Signal<string>,\n\toptions: Omit<TextSpan, \"text\"> = {},\n): TextSpan {\n\treturn { text, ...options };\n}\n\nexport function bold(\n\ttext: string | Signal<string>,\n\toptions: Omit<TextSpan, \"text\"> = {},\n): TextSpan {\n\treturn { text, fontWeight: options.fontWeight ?? 700, ...options };\n}\n\nexport function italic(\n\ttext: string | Signal<string>,\n\toptions: Omit<TextSpan, \"text\"> = {},\n): TextSpan {\n\treturn { text, fontStyle: \"italic\", ...options };\n}\n\nexport function accent(\n\ttext: string | Signal<string>,\n\toptions: Omit<TextSpan, \"text\"> = {},\n): TextSpan {\n\treturn { text, fill: options.fill ?? \"#6366f1\", ...options };\n}\n\nexport function color(\n\ttext: string | Signal<string>,\n\tfill: string | Signal<string>,\n\toptions: Omit<TextSpan, \"text\" | \"fill\"> = {},\n): TextSpan {\n\treturn { text, fill, ...options };\n}\n\nexport function size(\n\ttext: string | Signal<string>,\n\tfontSize: number | Signal<number>,\n\toptions: Omit<TextSpan, \"text\" | \"fontSize\"> = {},\n): TextSpan {\n\treturn { text, fontSize, ...options };\n}\n\nexport interface MarkOptions extends Omit<TextSpan, \"text\" | \"mark\" | \"fill\"> {\n\tbg?: string | Signal<string>;\n\tfill?: string | Signal<string>;\n\tradius?: number;\n\tpaddingX?: number;\n\tpaddingY?: number;\n}\n\nexport function mark(\n\ttext: string | Signal<string>,\n\toptions: MarkOptions = {},\n): TextSpan {\n\tconst { bg, fill, radius, paddingX, paddingY, ...rest } = options;\n\treturn {\n\t\ttext,\n\t\tfill,\n\t\tmark: {\n\t\t\tbackground: bg ?? \"#6366f133\",\n\t\t\tborderRadius: radius ?? 4,\n\t\t\tpaddingX: paddingX ?? 6,\n\t\t\tpaddingY: paddingY ?? 2,\n\t\t},\n\t\t...rest,\n\t};\n}\n\nexport function sup(\n\ttext: string | Signal<string>,\n\toptions: Omit<TextSpan, \"text\"> = {},\n): TextSpan {\n\treturn {\n\t\ttext,\n\t\tbaselineShift: options.baselineShift ?? -8,\n\t\t...options,\n\t};\n}\n\nexport function sub(\n\ttext: string | Signal<string>,\n\toptions: Omit<TextSpan, \"text\"> = {},\n): TextSpan {\n\treturn {\n\t\ttext,\n\t\tbaselineShift: options.baselineShift ?? 6,\n\t\t...options,\n\t};\n}\n\nexport function code(\n\ttext: string | Signal<string>,\n\toptions: Omit<TextSpan, \"text\"> = {},\n): TextSpan {\n\treturn {\n\t\ttext,\n\t\tfontFamily: options.fontFamily ?? \"JetBrains Mono\",\n\t\tmark: options.mark ?? {\n\t\t\tbackground: \"#ffffff18\",\n\t\t\tborderRadius: 4,\n\t\t\tpaddingX: 6,\n\t\t\tpaddingY: 2,\n\t\t},\n\t\t...options,\n\t};\n}\n\n/**\n * Normalizes string, TextSpan[], or array of mixed strings/spans into plain text and spans.\n */\nexport function normalizeTextSpans(\n\tinput: string | TextSpan[] | (string | TextSpan)[],\n): { text: string; spans?: TextSpan[] } {\n\tif (typeof input === \"string\") {\n\t\treturn { text: input };\n\t}\n\n\tif (!Array.isArray(input)) {\n\t\treturn { text: String(input) };\n\t}\n\n\tconst spans: TextSpan[] = [];\n\tlet plainText = \"\";\n\n\tfor (const item of input) {\n\t\tif (typeof item === \"string\") {\n\t\t\tif (item) {\n\t\t\t\tspans.push({ text: item });\n\t\t\t\tplainText += item;\n\t\t\t}\n\t\t} else if (item && typeof item === \"object\" && \"text\" in item) {\n\t\t\tconst s = item as TextSpan;\n\t\t\tspans.push(s);\n\t\t\tconst piece =\n\t\t\t\ttypeof s.text === \"string\"\n\t\t\t\t\t? s.text\n\t\t\t\t\t: s.text &&\n\t\t\t\t\t\t\ttypeof s.text === \"object\" &&\n\t\t\t\t\t\t\t\"get\" in s.text &&\n\t\t\t\t\t\t\ttypeof (s.text as { get: () => unknown }).get === \"function\"\n\t\t\t\t\t\t? String((s.text as { get: () => unknown }).get())\n\t\t\t\t\t\t: String(s.text ?? \"\");\n\t\t\tplainText += piece;\n\t\t}\n\t}\n\n\treturn {\n\t\ttext: plainText,\n\t\tspans: spans.length > 0 ? spans : undefined,\n\t};\n}\n\n/**\n * Upfront parser for external CMS or subtitle strings containing basic tags\n * (<b>, <i>, <span>, <color>, <mark>, <accent>, <code>, <sup>, <sub>).\n *\n * Compiles string markup into clean TextSpan[] before entering the composition pipeline.\n */\nexport function parseMarkup(markup: string): TextSpan[] {\n\tif (!markup || !markup.includes(\"<\")) {\n\t\treturn [{ text: markup }];\n\t}\n\n\tconst spans: TextSpan[] = [];\n\tconst tagRegex = /<(\\/?[a-zA-Z0-9_-]+)([^>]*)>/g;\n\tlet lastIndex = 0;\n\n\tinterface StyleState {\n\t\ttag: string;\n\t\tstyle: Partial<TextSpan>;\n\t}\n\tconst stack: StyleState[] = [];\n\n\tconst getCurrentStyle = (): Partial<TextSpan> => {\n\t\tconst merged: Partial<TextSpan> = {};\n\t\tfor (const state of stack) {\n\t\t\tObject.assign(merged, state.style);\n\t\t}\n\t\treturn merged;\n\t};\n\n\tfor (;;) {\n\t\tconst match = tagRegex.exec(markup);\n\t\tif (!match) {\n\t\t\tbreak;\n\t\t}\n\t\tconst textBefore = markup.slice(lastIndex, match.index);\n\t\tif (textBefore) {\n\t\t\tspans.push({ text: textBefore, ...getCurrentStyle() });\n\t\t}\n\t\tlastIndex = match.index + match[0].length;\n\n\t\tconst tagName = match[1].toLowerCase();\n\t\tconst rawAttrs = match[2];\n\n\t\tif (tagName.startsWith(\"/\")) {\n\t\t\tconst closingTag = tagName.slice(1);\n\t\t\tfor (let i = stack.length - 1; i >= 0; i--) {\n\t\t\t\tif (stack[i].tag === closingTag) {\n\t\t\t\t\tstack.splice(i, 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst attrs: Record<string, string> = {};\n\t\t\tconst attrRegex = /([a-zA-Z0-9_-]+)=[\"']([^\"']*)[\"']/g;\n\t\t\tfor (;;) {\n\t\t\t\tconst attrMatch = attrRegex.exec(rawAttrs);\n\t\t\t\tif (!attrMatch) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tattrs[attrMatch[1].toLowerCase()] = attrMatch[2];\n\t\t\t}\n\n\t\t\tconst style: Partial<TextSpan> = {};\n\n\t\t\tif (tagName === \"b\" || tagName === \"strong\") {\n\t\t\t\tstyle.fontWeight = 700;\n\t\t\t\tif (attrs.color || attrs.fill) style.fill = attrs.color ?? attrs.fill;\n\t\t\t} else if (tagName === \"i\" || tagName === \"em\") {\n\t\t\t\tstyle.fontStyle = \"italic\";\n\t\t\t\tif (attrs.color || attrs.fill) style.fill = attrs.color ?? attrs.fill;\n\t\t\t} else if (tagName === \"accent\") {\n\t\t\t\tstyle.fill = \"#6366f1\";\n\t\t\t} else if (tagName === \"color\") {\n\t\t\t\tstyle.fill = attrs.value ?? attrs.hex ?? attrs.fill;\n\t\t\t} else if (tagName === \"size\") {\n\t\t\t\tconst num = parseFloat(attrs.value ?? attrs.px ?? attrs.pt ?? \"0\");\n\t\t\t\tif (num > 0) style.fontSize = num;\n\t\t\t} else if (tagName === \"mark\") {\n\t\t\t\tstyle.mark = {\n\t\t\t\t\tbackground: attrs.bg ?? attrs.background ?? \"#6366f133\",\n\t\t\t\t\tborderRadius: attrs.radius ? parseFloat(attrs.radius) : 4,\n\t\t\t\t\tpaddingX: attrs.paddingx ? parseFloat(attrs.paddingx) : 6,\n\t\t\t\t\tpaddingY: attrs.paddingy ? parseFloat(attrs.paddingy) : 2,\n\t\t\t\t};\n\t\t\t\tif (attrs.color || attrs.fill) style.fill = attrs.color ?? attrs.fill;\n\t\t\t} else if (tagName === \"sup\") {\n\t\t\t\tstyle.baselineShift = -8;\n\t\t\t} else if (tagName === \"sub\") {\n\t\t\t\tstyle.baselineShift = 6;\n\t\t\t} else if (tagName === \"code\") {\n\t\t\t\tstyle.fontFamily = \"JetBrains Mono\";\n\t\t\t\tstyle.mark = {\n\t\t\t\t\tbackground: attrs.bg ?? \"#ffffff18\",\n\t\t\t\t\tborderRadius: 4,\n\t\t\t\t\tpaddingX: 6,\n\t\t\t\t\tpaddingY: 2,\n\t\t\t\t};\n\t\t\t} else if (tagName === \"span\") {\n\t\t\t\tif (attrs.color || attrs.fill) style.fill = attrs.color ?? attrs.fill;\n\t\t\t\tif (attrs.fontfamily) style.fontFamily = attrs.fontfamily;\n\t\t\t\tif (attrs.fontsize) style.fontSize = parseFloat(attrs.fontsize);\n\t\t\t\tif (attrs.fontweight) {\n\t\t\t\t\tconst nw = parseInt(attrs.fontweight, 10);\n\t\t\t\t\tstyle.fontWeight = Number.isNaN(nw) ? attrs.fontweight : nw;\n\t\t\t\t}\n\t\t\t\tif (attrs.fontstyle === \"italic\" || attrs.fontstyle === \"normal\") {\n\t\t\t\t\tstyle.fontStyle = attrs.fontstyle;\n\t\t\t\t}\n\t\t\t\tif (attrs.letterspacing)\n\t\t\t\t\tstyle.letterSpacing = parseFloat(attrs.letterspacing);\n\t\t\t\tif (attrs.baselineshift)\n\t\t\t\t\tstyle.baselineShift = parseFloat(attrs.baselineshift);\n\t\t\t\tif (attrs.opacity) style.opacity = parseFloat(attrs.opacity);\n\t\t\t}\n\n\t\t\tstack.push({ tag: tagName, style });\n\t\t}\n\t}\n\n\tconst remainingText = markup.slice(lastIndex);\n\tif (remainingText) {\n\t\tspans.push({ text: remainingText, ...getCurrentStyle() });\n\t}\n\n\treturn spans;\n}\n","import { createVirtualMedia, getActiveMediaMetadata } from \"@gitframes/core\";\nimport { signalRegistry } from \"@gitframes/webgpu-renderers\";\nimport { ColorSchema } from \"@gitframes/node-sdk\";\nimport { loadYoga } from \"yoga-layout/load\";\nimport { z } from \"zod\";\n\n//#region src/utils/layout/resolve-layout.ts\nlet yogaInstance = null;\n/**\n* Ensure the Yoga WASM module is loaded. Safe to call multiple times —\n* subsequent calls return the cached instance immediately.\n*/\nasync function initLayout() {\n\tif (yogaInstance) return yogaInstance;\n\tyogaInstance = await loadYoga();\n\treturn yogaInstance;\n}\nfunction mapJustify(yoga, value) {\n\tswitch (value) {\n\t\tcase \"center\": return yoga.JUSTIFY_CENTER;\n\t\tcase \"end\": return yoga.JUSTIFY_FLEX_END;\n\t\tcase \"space-between\": return yoga.JUSTIFY_SPACE_BETWEEN;\n\t\tcase \"space-around\": return yoga.JUSTIFY_SPACE_AROUND;\n\t\tdefault: return yoga.JUSTIFY_FLEX_START;\n\t}\n}\nfunction mapAlign(yoga, value) {\n\tswitch (value) {\n\t\tcase \"center\": return yoga.ALIGN_CENTER;\n\t\tcase \"end\": return yoga.ALIGN_FLEX_END;\n\t\tcase \"stretch\": return yoga.ALIGN_STRETCH;\n\t\tdefault: return yoga.ALIGN_FLEX_START;\n\t}\n}\nfunction mapAlignSelf(yoga, value) {\n\tswitch (value) {\n\t\tcase \"start\": return yoga.ALIGN_FLEX_START;\n\t\tcase \"center\": return yoga.ALIGN_CENTER;\n\t\tcase \"end\": return yoga.ALIGN_FLEX_END;\n\t\tcase \"stretch\": return yoga.ALIGN_STRETCH;\n\t\tcase \"baseline\": return yoga.ALIGN_BASELINE;\n\t\tdefault: return yoga.ALIGN_AUTO;\n\t}\n}\nfunction toYogaValue(val) {\n\tif (val === void 0 || val === null) return void 0;\n\tif (typeof val === \"number\" || typeof val === \"string\") return val;\n\tif (typeof val === \"object\") {\n\t\tif (\"unit\" in val && typeof val.unit === \"number\") return val;\n\t\tconst num = Number(val);\n\t\tif (!Number.isNaN(num)) return num;\n\t}\n}\n/** Container main dir; leaves return null. */\nfunction dirOf(node) {\n\tswitch (node.kind) {\n\t\tcase \"flex\": return node.dir ?? \"row\";\n\t\tcase \"block\": return \"column\";\n\t\tcase \"box\": return node.children && node.children.length > 0 ? \"column\" : null;\n\t\tdefault: return null;\n\t}\n}\n/** Container default width spec (block fills like HTML). */\nfunction defaultWidthSpec(node) {\n\tif (node.kind === \"block\") return \"fill\";\n}\nfunction containerStyle(node) {\n\tlet gap = 0;\n\tif (node.kind === \"flex\" || node.kind === \"block\") {\n\t\tconst g = toYogaValue(node.gap);\n\t\tgap = typeof g === \"number\" ? g : 0;\n\t}\n\tlet padding = 0;\n\tif (node.kind === \"flex\" || node.kind === \"block\" || node.kind === \"box\" || node.kind === \"text\") {\n\t\tconst p = toYogaValue(node.padding);\n\t\tpadding = typeof p === \"number\" ? p : 0;\n\t}\n\tlet justify = \"start\";\n\tif (node.kind === \"flex\") justify = node.justify ?? \"start\";\n\tlet align = \"start\";\n\tif (node.kind === \"flex\" || node.kind === \"block\") align = node.align ?? \"start\";\n\tlet wrap = false;\n\tif (node.kind === \"flex\") wrap = typeof node.wrap === \"boolean\" ? node.wrap : false;\n\treturn {\n\t\tgap,\n\t\tpadding,\n\t\tjustify,\n\t\talign,\n\t\twrap\n\t};\n}\nfunction isAbsolutePositioned(node) {\n\treturn node.position === \"absolute\" || node.position === void 0 && (node.x !== void 0 || node.y !== void 0);\n}\n/** Flow children (non-absolute). */\nfunction flowChildren(node) {\n\tif (\"children\" in node && node.children) return node.children.filter((c) => !isAbsolutePositioned(c));\n\treturn [];\n}\nfunction absoluteChildren(node) {\n\tif (\"children\" in node && node.children) return node.children.filter((c) => isAbsolutePositioned(c));\n\treturn [];\n}\nfunction buildYogaNode(yoga, node, parentExtent, measure, parentDir) {\n\tconst yn = yoga.Node.create();\n\tconst dir = dirOf(node);\n\tconst isContainer = dir !== null;\n\tconst children = [];\n\tif (isAbsolutePositioned(node)) {\n\t\tyn.setPositionType(yoga.POSITION_TYPE_ABSOLUTE);\n\t\tconst posX = toYogaValue(node.x);\n\t\tconst posY = toYogaValue(node.y);\n\t\tif (posX !== void 0) yn.setPosition(yoga.EDGE_LEFT, posX);\n\t\tif (posY !== void 0) yn.setPosition(yoga.EDGE_TOP, posY);\n\t} else yn.setPositionType(yoga.POSITION_TYPE_RELATIVE);\n\tconst grow = toYogaValue(node.grow);\n\tif (grow !== void 0) yn.setFlexGrow(typeof grow === \"number\" ? grow : parseFloat(grow));\n\tconst flexShrink = toYogaValue(node.flexShrink);\n\tif (flexShrink !== void 0) yn.setFlexShrink(typeof flexShrink === \"number\" ? flexShrink : parseFloat(flexShrink));\n\telse yn.setFlexShrink(parentDir !== null ? 1 : 0);\n\tif (node.flexBasis !== void 0) yn.setFlexBasis(node.flexBasis);\n\tif (node.alignSelf !== void 0) yn.setAlignSelf(mapAlignSelf(yoga, node.alignSelf));\n\tconst wSpec = node.width ?? defaultWidthSpec(node);\n\tconst hSpec = node.height;\n\tconst isWidthMain = parentDir === \"row\";\n\tconst isHeightMain = parentDir === \"column\";\n\tapplySizeSpec(yn, \"width\", wSpec, parentExtent?.width, isWidthMain);\n\tapplySizeSpec(yn, \"height\", hSpec, parentExtent?.height, isHeightMain);\n\tif (isContainer) {\n\t\tconst cs = containerStyle(node);\n\t\tyn.setFlexDirection(dir === \"row\" ? yoga.FLEX_DIRECTION_ROW : yoga.FLEX_DIRECTION_COLUMN);\n\t\tyn.setJustifyContent(mapJustify(yoga, cs.justify));\n\t\tyn.setAlignItems(mapAlign(yoga, cs.align));\n\t\tyn.setFlexWrap(cs.wrap ? yoga.WRAP_WRAP : yoga.WRAP_NO_WRAP);\n\t\tif (cs.padding > 0) yn.setPadding(yoga.EDGE_ALL, cs.padding);\n\t\tif (cs.gap > 0) yn.setGap(yoga.GUTTER_ALL, cs.gap);\n\t\tconst flow = flowChildren(node);\n\t\tconst abs = absoluteChildren(node);\n\t\tconst allChildren = [...flow, ...abs];\n\t\tfor (let i = 0; i < allChildren.length; i++) {\n\t\t\tconst childMapping = buildYogaNode(yoga, allChildren[i], void 0, measure, isAbsolutePositioned(node) ? null : dir);\n\t\t\tyn.insertChild(childMapping.yogaNode, i);\n\t\t\tchildren.push(childMapping);\n\t\t}\n\t} else if (node.kind === \"text\" || node.kind === \"media\" && node.dataType === \"Caption\") yn.setMeasureFunc((width, widthMode, height, heightMode) => {\n\t\tlet constraintWidth;\n\t\tif (widthMode === 1 || widthMode === 2) constraintWidth = width;\n\t\tconst measured = measure?.(node, constraintWidth) ?? {\n\t\t\twidth: 0,\n\t\t\theight: 0\n\t\t};\n\t\tlet resolvedWidth = measured.width;\n\t\tlet resolvedHeight = measured.height;\n\t\tif (widthMode === 1) resolvedWidth = width;\n\t\tif (heightMode === 1) resolvedHeight = height;\n\t\treturn {\n\t\t\twidth: resolvedWidth,\n\t\t\theight: resolvedHeight\n\t\t};\n\t});\n\telse {\n\t\tconst measured = measure?.(node) ?? null;\n\t\tif (measured) {\n\t\t\tconst hasRatio = node.aspectRatio !== void 0;\n\t\t\tconst isCaption = node.dataType === \"Caption\";\n\t\t\tconst intrinsicRatio = measured.height > 0 ? measured.width / measured.height : 1;\n\t\t\tif (node.kind === \"media\" && !isCaption && !hasRatio) yn.setAspectRatio(intrinsicRatio);\n\t\t\tconst isWAuto = wSpec === void 0 || wSpec === \"auto\" || wSpec === \"fit\";\n\t\t\tconst isHAuto = hSpec === void 0 || hSpec === \"auto\" || hSpec === \"fit\";\n\t\t\tif (isWAuto && isHAuto) {\n\t\t\t\tconst ar = node.aspectRatio ?? (node.kind === \"media\" ? intrinsicRatio : void 0) ?? 1;\n\t\t\t\tyn.setMeasureFunc((width, widthMode, height, heightMode) => {\n\t\t\t\t\tlet resW = measured.width;\n\t\t\t\t\tlet resH = measured.height;\n\t\t\t\t\tif (widthMode === 1 && heightMode === 1) {\n\t\t\t\t\t\tresW = width;\n\t\t\t\t\t\tresH = height;\n\t\t\t\t\t} else if (widthMode === 1) {\n\t\t\t\t\t\tresW = width;\n\t\t\t\t\t\tresH = ar > 0 ? Math.round(width / ar) : measured.height;\n\t\t\t\t\t} else if (heightMode === 1) {\n\t\t\t\t\t\tresH = height;\n\t\t\t\t\t\tresW = ar > 0 ? Math.round(height * ar) : measured.width;\n\t\t\t\t\t} else if (widthMode === 2 && heightMode === 2) {\n\t\t\t\t\t\tconst scale = Math.min(1, width / measured.width, height / measured.height);\n\t\t\t\t\t\tresW = Math.round(measured.width * scale);\n\t\t\t\t\t\tresH = Math.round(measured.height * scale);\n\t\t\t\t\t} else if (widthMode === 2) {\n\t\t\t\t\t\tif (measured.width > width) {\n\t\t\t\t\t\t\tresW = width;\n\t\t\t\t\t\t\tresH = ar > 0 ? Math.round(width / ar) : measured.height;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (heightMode === 2) {\n\t\t\t\t\t\tif (measured.height > height) {\n\t\t\t\t\t\t\tresH = height;\n\t\t\t\t\t\t\tresW = ar > 0 ? Math.round(height * ar) : measured.width;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\twidth: resW,\n\t\t\t\t\t\theight: resH\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t} else if (isWAuto) {\n\t\t\t\tconst ar = node.aspectRatio ?? (node.kind === \"media\" ? intrinsicRatio : void 0);\n\t\t\t\tif (ar === void 0 || ar <= 0) yn.setWidth(measured.width);\n\t\t\t} else if (isHAuto) {\n\t\t\t\tconst ar = node.aspectRatio ?? (node.kind === \"media\" ? intrinsicRatio : void 0);\n\t\t\t\tif (ar === void 0 || ar <= 0) yn.setHeight(measured.height);\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\tyogaNode: yn,\n\t\tlayoutNode: node,\n\t\tchildren\n\t};\n}\nfunction applySizeSpec(yn, dim, spec, parentExtent, isFlexChild) {\n\tif (spec === void 0 || spec === \"auto\" || spec === \"fit\") return;\n\tconst resolvedSpec = toYogaValue(spec);\n\tif (typeof resolvedSpec === \"number\") {\n\t\tif (dim === \"width\") yn.setWidth(resolvedSpec);\n\t\telse yn.setHeight(resolvedSpec);\n\t\treturn;\n\t}\n\tif (resolvedSpec === \"fill\") {\n\t\tif (isFlexChild) {\n\t\t\tif (yn.getFlexGrow() === 0) yn.setFlexGrow(1);\n\t\t\tyn.setFlexBasis(0);\n\t\t\treturn;\n\t\t}\n\t\tif (parentExtent !== void 0) if (dim === \"width\") yn.setWidth(parentExtent);\n\t\telse yn.setHeight(parentExtent);\n\t\telse if (dim === \"width\") yn.setWidthPercent(100);\n\t\telse yn.setHeightPercent(100);\n\t}\n}\nfunction readLayout(mapping, parentX, parentY, rects, sizes) {\n\tconst layout = mapping.yogaNode.getComputedLayout();\n\tlet x = parentX + layout.left;\n\tlet y = parentY + layout.top;\n\tconst width = layout.width;\n\tconst height = layout.height;\n\tconst node = mapping.layoutNode;\n\tif (!isAbsolutePositioned(node)) {\n\t\tx += Number(node.x ?? 0);\n\t\ty += Number(node.y ?? 0);\n\t}\n\trects[mapping.layoutNode.id] = {\n\t\tx: Math.round(x * 1e3) / 1e3,\n\t\ty: Math.round(y * 1e3) / 1e3,\n\t\twidth: Math.round(width * 1e3) / 1e3,\n\t\theight: Math.round(height * 1e3) / 1e3\n\t};\n\tsizes[mapping.layoutNode.id] = {\n\t\twidth: Math.round(width * 1e3) / 1e3,\n\t\theight: Math.round(height * 1e3) / 1e3\n\t};\n\tfor (const child of mapping.children) readLayout(child, x, y, rects, sizes);\n}\nfunction freeYogaTree(mapping) {\n\tfor (const child of mapping.children) freeYogaTree(child);\n\tmapping.yogaNode.free();\n}\n/** Deterministic layout (synchronous): document + viewport (+ measure) → rects. */\nfunction computeLayoutSync(yoga, input) {\n\tconst { layout, viewport, measure } = input;\n\tconst rects = {};\n\tconst sizesMap = {};\n\tfor (const root of layout) {\n\t\tconst wrapperNode = yoga.Node.create();\n\t\twrapperNode.setWidth(viewport.width);\n\t\twrapperNode.setHeight(viewport.height);\n\t\twrapperNode.setFlexDirection(yoga.FLEX_DIRECTION_COLUMN);\n\t\tconst mapping = buildYogaNode(yoga, root, {\n\t\t\twidth: viewport.width,\n\t\t\theight: viewport.height\n\t\t}, measure, null);\n\t\twrapperNode.insertChild(mapping.yogaNode, 0);\n\t\twrapperNode.calculateLayout(viewport.width, viewport.height);\n\t\tconst rootLayout = mapping.yogaNode.getComputedLayout();\n\t\tconst isRootAbsolute = root.position === \"absolute\" || root.position === void 0 && (root.x !== void 0 || root.y !== void 0);\n\t\tconst rootX = isRootAbsolute ? rootLayout.left : Number(root.x ?? 0);\n\t\tconst rootY = isRootAbsolute ? rootLayout.top : Number(root.y ?? 0);\n\t\trects[root.id] = {\n\t\t\tx: Math.round(rootX * 1e3) / 1e3,\n\t\t\ty: Math.round(rootY * 1e3) / 1e3,\n\t\t\twidth: Math.round(rootLayout.width * 1e3) / 1e3,\n\t\t\theight: Math.round(rootLayout.height * 1e3) / 1e3\n\t\t};\n\t\tsizesMap[root.id] = {\n\t\t\twidth: Math.round(rootLayout.width * 1e3) / 1e3,\n\t\t\theight: Math.round(rootLayout.height * 1e3) / 1e3\n\t\t};\n\t\tfor (const child of mapping.children) readLayout(child, rootX, rootY, rects, sizesMap);\n\t\tfreeYogaTree(mapping);\n\t\twrapperNode.free();\n\t}\n\treturn {\n\t\trects,\n\t\tsizes: sizesMap\n\t};\n}\n/** Deterministic layout: document + viewport (+ measure) → rects. */\nasync function computeLayout(input) {\n\treturn computeLayoutSync(await initLayout(), input);\n}\n\n//#endregion\n//#region src/program/animation.ts\nfunction evaluateEasingProgress(ease, t) {\n\tif (!ease) return t;\n\tconst ref = parseEase(ease);\n\tif (!ref || ref.name === \"none\") return t;\n\tconst { name, dir, params } = ref;\n\tconst s = Math.max(0, Math.min(1, t));\n\tconst applyDir = (fn) => {\n\t\tif (dir === \"in\") return fn(s);\n\t\tif (dir === \"out\") return 1 - fn(1 - s);\n\t\treturn s < .5 ? fn(s * 2) / 2 : 1 - fn((1 - s) * 2) / 2;\n\t};\n\tswitch (name) {\n\t\tcase \"power1\": return applyDir((x) => x * x);\n\t\tcase \"power2\": return applyDir((x) => x * x * x);\n\t\tcase \"power3\": return applyDir((x) => x * x * x * x);\n\t\tcase \"sine\": return applyDir((x) => 1 - Math.cos(x * Math.PI / 2));\n\t\tcase \"circ\": return applyDir((x) => 1 - Math.sqrt(Math.max(0, 1 - x * x)));\n\t\tcase \"expo\": return applyDir((x) => x === 0 ? 0 : 2 ** (10 * (x - 1)));\n\t\tcase \"back\": {\n\t\t\tconst c1 = params?.[0] ?? 1.70158;\n\t\t\tconst c3 = c1 + 1;\n\t\t\treturn applyDir((x) => c3 * x * x * x - c1 * x * x);\n\t\t}\n\t\tcase \"bounce\": {\n\t\t\tconst bounceOut = (x) => {\n\t\t\t\tconst n1 = 7.5625;\n\t\t\t\tconst d1 = 2.75;\n\t\t\t\tif (x < 1 / d1) return n1 * x * x;\n\t\t\t\tif (x < 2 / d1) {\n\t\t\t\t\tconst x2$1 = x - 1.5 / d1;\n\t\t\t\t\treturn n1 * x2$1 * x2$1 + .75;\n\t\t\t\t}\n\t\t\t\tif (x < 2.5 / d1) {\n\t\t\t\t\tconst x2$1 = x - 2.25 / d1;\n\t\t\t\t\treturn n1 * x2$1 * x2$1 + .9375;\n\t\t\t\t}\n\t\t\t\tconst x2 = x - 2.625 / d1;\n\t\t\t\treturn n1 * x2 * x2 + .984375;\n\t\t\t};\n\t\t\tif (dir === \"out\") return bounceOut(s);\n\t\t\tif (dir === \"in\") return 1 - bounceOut(1 - s);\n\t\t\treturn s < .5 ? (1 - bounceOut(1 - 2 * s)) / 2 : (1 + bounceOut(2 * s - 1)) / 2;\n\t\t}\n\t\tdefault: return s;\n\t}\n}\nfunction parseEase(ease) {\n\tif (!ease) return void 0;\n\tif (typeof ease === \"object\" && \"name\" in ease && \"dir\" in ease) return ease;\n\tif (typeof ease === \"string\") {\n\t\tconst trimmed = ease.trim();\n\t\tconst match = trimmed.match(/^([a-zA-Z0-9]+)(?:\\.([a-zA-Z]+))?(?:\\(([^)]+)\\))?$/);\n\t\tif (match) {\n\t\t\tconst rawName$1 = match[1].toLowerCase();\n\t\t\tconst name$1 = rawName$1 === \"linear\" ? \"none\" : rawName$1;\n\t\t\tconst rawDir$1 = (match[2] || \"out\").toLowerCase();\n\t\t\tlet dir$1 = \"out\";\n\t\t\tif (rawDir$1 === \"in\") dir$1 = \"in\";\n\t\t\telse if (rawDir$1 === \"out\") dir$1 = \"out\";\n\t\t\telse if (rawDir$1 === \"inout\") dir$1 = \"inOut\";\n\t\t\tlet params;\n\t\t\tif (match[3]) params = match[3].split(\",\").map((s) => Number.parseFloat(s.trim())).filter((n) => !Number.isNaN(n));\n\t\t\treturn {\n\t\t\t\tname: name$1,\n\t\t\t\tdir: dir$1,\n\t\t\t\t...params && params.length > 0 ? { params } : {}\n\t\t\t};\n\t\t}\n\t\tconst dotIdx = trimmed.indexOf(\".\");\n\t\tif (dotIdx === -1) {\n\t\t\tconst raw = trimmed.toLowerCase();\n\t\t\treturn {\n\t\t\t\tname: raw === \"linear\" ? \"none\" : raw,\n\t\t\t\tdir: \"out\"\n\t\t\t};\n\t\t}\n\t\tconst rawName = trimmed.slice(0, dotIdx).toLowerCase();\n\t\tconst name = rawName === \"linear\" ? \"none\" : rawName;\n\t\tconst rawDir = trimmed.slice(dotIdx + 1).toLowerCase();\n\t\tlet dir = \"out\";\n\t\tif (rawDir === \"in\") dir = \"in\";\n\t\telse if (rawDir === \"out\") dir = \"out\";\n\t\telse if (rawDir === \"inout\") dir = \"inOut\";\n\t\treturn {\n\t\t\tname,\n\t\t\tdir\n\t\t};\n\t}\n}\nfunction extractSignalHandleId(signalOrHandleId) {\n\tif (typeof signalOrHandleId === \"string\") return signalOrHandleId;\n\tif (signalOrHandleId && typeof signalOrHandleId === \"object\" && \"inputHandleId\" in signalOrHandleId && typeof signalOrHandleId.inputHandleId === \"string\") return signalOrHandleId.inputHandleId;\n\tif (signalOrHandleId && typeof signalOrHandleId === \"object\" && \"gpuBinding\" in signalOrHandleId && signalOrHandleId.gpuBinding?.nodeId) return signalOrHandleId.gpuBinding.nodeId;\n\treturn String(signalOrHandleId);\n}\n/**\n* Fluent builder and runtime representation for layer animations.\n* Supports chainable keyframes, reactive signal binding, Perlin wiggles, and springs.\n*/\nvar LayerAnimation = class LayerAnimation {\n\ttracks = [];\n\tconstructor(tracks = []) {\n\t\tthis.tracks = [...tracks];\n\t}\n\tstatic create() {\n\t\treturn new LayerAnimation();\n\t}\n\tstatic fromTo(prop, fromValue, toValue, options = {}) {\n\t\treturn new LayerAnimation().fromTo(prop, fromValue, toValue, options);\n\t}\n\tstatic signal(prop, signalOrHandleId, options = {}) {\n\t\treturn new LayerAnimation().signal(prop, signalOrHandleId, options);\n\t}\n\tstatic colorSignal(prop, signalOrHandleId, options) {\n\t\treturn new LayerAnimation().colorSignal(prop, signalOrHandleId, options);\n\t}\n\tstatic kineticSweep(fromOffset = -1, toOffset = 1, startFrame = 0, endFrame = 24, ease = \"power2.out\") {\n\t\treturn new LayerAnimation().kineticSweep(fromOffset, toOffset, startFrame, endFrame, ease);\n\t}\n\tstatic typewriter(startFrame = 0, endFrame = 30, ease = \"linear\") {\n\t\treturn new LayerAnimation().typewriter(startFrame, endFrame, ease);\n\t}\n\tstatic letterSpacing(fromSpacing, toSpacing, startFrame = 0, endFrame = 24, ease = \"power2.out\") {\n\t\treturn new LayerAnimation().letterSpacing(fromSpacing, toSpacing, startFrame, endFrame, ease);\n\t}\n\tstatic wiggle(prop, options = {}) {\n\t\treturn new LayerAnimation().wiggle(prop, options);\n\t}\n\tstatic spring(prop, options = {}) {\n\t\treturn new LayerAnimation().spring(prop, options);\n\t}\n\tstatic firstMargin(fromMargin, toMargin, options = {}) {\n\t\treturn new LayerAnimation().firstMargin(fromMargin, toMargin, options);\n\t}\n\tstatic strokeWidth(fromWidth, toWidth, options = {}) {\n\t\treturn new LayerAnimation().fromTo(\"strokeWidth\", fromWidth, toWidth, options);\n\t}\n\tstatic rotateX(fromAngle, toAngle, options = {}) {\n\t\treturn new LayerAnimation().fromTo(\"rotateX\", fromAngle, toAngle, options);\n\t}\n\tstatic rotateY(fromAngle, toAngle, options = {}) {\n\t\treturn new LayerAnimation().fromTo(\"rotateY\", fromAngle, toAngle, options);\n\t}\n\tstatic rotateZ(fromAngle, toAngle, options = {}) {\n\t\treturn new LayerAnimation().fromTo(\"rotateZ\", fromAngle, toAngle, options);\n\t}\n\tstatic rotation(fromAngle, toAngle, options = {}) {\n\t\treturn new LayerAnimation().fromTo(\"rotation\", fromAngle, toAngle, options);\n\t}\n\taddTrack(track) {\n\t\tthis.tracks.push(track);\n\t\treturn this;\n\t}\n\t/**\n\t* Creates a keyframed track animating from fromValue to toValue.\n\t*/\n\tfromTo(prop, fromValue, toValue, options = {}) {\n\t\tconst start = options.from ?? options.start ?? options.fromFrame ?? 0;\n\t\tconst end = options.to ?? options.end ?? options.toFrame ?? (options.durationFrames !== void 0 ? start + options.durationFrames : start + 24);\n\t\tconst ease = parseEase(options.ease);\n\t\tlet track = this.tracks.find((t) => t.prop === prop && (!t.source || t.source.type === \"keyframe\"));\n\t\tif (!track) {\n\t\t\ttrack = {\n\t\t\t\tid: `${prop}_fromTo_${this.tracks.length}`,\n\t\t\t\tprop,\n\t\t\t\tkeyframes: []\n\t\t\t};\n\t\t\tthis.tracks.push(track);\n\t\t}\n\t\tconst id = track.id;\n\t\tif (track.keyframes.length === 0 && start > 0) track.keyframes.push({\n\t\t\tid: `${id}_k0`,\n\t\t\tframe: 0,\n\t\t\tvalue: fromValue\n\t\t});\n\t\tif (track.keyframes.length === 0 || track.keyframes[track.keyframes.length - 1].frame < start) track.keyframes.push({\n\t\t\tid: `${id}_k_${start}`,\n\t\t\tframe: start,\n\t\t\tvalue: fromValue\n\t\t});\n\t\ttrack.keyframes.push({\n\t\t\tid: `${id}_k_${end}`,\n\t\t\tframe: end,\n\t\t\tvalue: toValue,\n\t\t\t...ease && { ease }\n\t\t});\n\t\ttrack.keyframes.sort((a, b) => a.frame - b.frame);\n\t\treturn this;\n\t}\n\t/**\n\t* Appends a keyframe to an existing track for prop, or creates a new track.\n\t*/\n\tkeyframe(prop, frame, value, ease) {\n\t\tlet track = this.tracks.find((t) => t.prop === prop && (!t.source || t.source.type === \"keyframe\"));\n\t\tif (!track) {\n\t\t\ttrack = {\n\t\t\t\tid: `${prop}_track_${this.tracks.length}`,\n\t\t\t\tprop,\n\t\t\t\tkeyframes: []\n\t\t\t};\n\t\t\tthis.tracks.push(track);\n\t\t}\n\t\tconst parsedEase = parseEase(ease);\n\t\ttrack.keyframes.push({\n\t\t\tid: `k_${track.keyframes.length}_f${frame}`,\n\t\t\tframe,\n\t\t\tvalue,\n\t\t\t...parsedEase && { ease: parsedEase }\n\t\t});\n\t\ttrack.keyframes.sort((a, b) => a.frame - b.frame);\n\t\treturn this;\n\t}\n\t/**\n\t* Animates opacity from 0 to 1 between startFrame and endFrame.\n\t*/\n\tfadeIn(startFrame = 0, endFrame = 20, ease = \"power2.out\") {\n\t\treturn this.fromTo(\"opacity\", 0, 1, {\n\t\t\tfrom: startFrame,\n\t\t\tto: endFrame,\n\t\t\tease\n\t\t});\n\t}\n\t/**\n\t* Animates opacity from 1 to 0 between startFrame and endFrame.\n\t*/\n\tfadeOut(startFrame, endFrame, ease = \"power2.in\") {\n\t\treturn this.fromTo(\"opacity\", 1, 0, {\n\t\t\tfrom: startFrame,\n\t\t\tto: endFrame,\n\t\t\tease\n\t\t});\n\t}\n\t/**\n\t* Animates chart write-on draw progress from fromVal to toVal.\n\t*/\n\tdrawProgress(fromVal = 0, toVal = 1, options = {}) {\n\t\treturn this.fromTo(\"drawProgress\", fromVal, toVal, options);\n\t}\n\t/**\n\t* Animates chartProgress from fromVal to toVal.\n\t*/\n\tchartProgress(fromVal = 0, toVal = 1, options = {}) {\n\t\treturn this.fromTo(\"chartProgress\", fromVal, toVal, options);\n\t}\n\t/**\n\t* Slides in Y coordinate from fromY to toY.\n\t*/\n\tslideInY(fromY, toY, startFrame = 0, endFrame = 24, ease = \"power2.out\") {\n\t\treturn this.fromTo(\"y\", fromY, toY, {\n\t\t\tfrom: startFrame,\n\t\t\tto: endFrame,\n\t\t\tease\n\t\t});\n\t}\n\t/**\n\t* Slides in X coordinate from fromX to toX.\n\t*/\n\tslideInX(fromX, toX, startFrame = 0, endFrame = 24, ease = \"power2.out\") {\n\t\treturn this.fromTo(\"x\", fromX, toX, {\n\t\t\tfrom: startFrame,\n\t\t\tto: endFrame,\n\t\t\tease\n\t\t});\n\t}\n\t/**\n\t* Sweeps kinetic typography animator offset from fromOffset to toOffset.\n\t* Cascades per-glyph or per-word transforms across the text.\n\t*/\n\tkineticSweep(fromOffset = -1, toOffset = 1, startFrame = 0, endFrame = 24, ease = \"power2.out\") {\n\t\treturn this.fromTo(\"offset\", fromOffset, toOffset, {\n\t\t\tfrom: startFrame,\n\t\t\tto: endFrame,\n\t\t\tease\n\t\t});\n\t}\n\t/**\n\t* Progressive character write-on / typewriter text reveal.\n\t*/\n\ttypewriter(startFrame = 0, endFrame = 30, ease = \"linear\") {\n\t\treturn this.fromTo(\"text\", 0, 1, {\n\t\t\tfrom: startFrame,\n\t\t\tto: endFrame,\n\t\t\tease\n\t\t});\n\t}\n\t/**\n\t* Animates letter-spacing (tracking expansion or compression).\n\t*/\n\tletterSpacing(fromSpacing, toSpacing, startFrame = 0, endFrame = 24, ease = \"power2.out\") {\n\t\treturn this.fromTo(\"letterSpacing\", fromSpacing, toSpacing, {\n\t\t\tfrom: startFrame,\n\t\t\tto: endFrame,\n\t\t\tease\n\t\t});\n\t}\n\t/**\n\t* Animates text position along a path via First Margin.\n\t*/\n\tfirstMargin(fromMargin, toMargin, options = {}) {\n\t\treturn this.fromTo(\"firstMargin\", fromMargin, toMargin, options);\n\t}\n\t/**\n\t* Animates Last Margin spatial limit along a path.\n\t*/\n\tlastMargin(fromMargin, toMargin, options = {}) {\n\t\treturn this.fromTo(\"lastMargin\", fromMargin, toMargin, options);\n\t}\n\t/**\n\t* Animates baseline shift perpendicular to curve tangent.\n\t*/\n\tbaselineShift(fromShift, toShift, options = {}) {\n\t\treturn this.fromTo(\"baselineShift\", fromShift, toShift, options);\n\t}\n\t/**\n\t* Animate rotateX from fromAngle to toAngle.\n\t*/\n\trotateX(fromAngle, toAngle, options = {}) {\n\t\treturn this.fromTo(\"rotateX\", fromAngle, toAngle, options);\n\t}\n\t/**\n\t* Animate rotateY from fromAngle to toAngle.\n\t*/\n\trotateY(fromAngle, toAngle, options = {}) {\n\t\treturn this.fromTo(\"rotateY\", fromAngle, toAngle, options);\n\t}\n\t/**\n\t* Animate rotateZ from fromAngle to toAngle.\n\t*/\n\trotateZ(fromAngle, toAngle, options = {}) {\n\t\treturn this.fromTo(\"rotateZ\", fromAngle, toAngle, options);\n\t}\n\t/**\n\t* Animate perspective camera distance in pixels.\n\t*/\n\tperspective(fromDist, toDist, options = {}) {\n\t\treturn this.fromTo(\"perspective\", fromDist, toDist, options);\n\t}\n\t/**\n\t* Animate depth translation (translateZ) in pixels.\n\t*/\n\ttranslateZ(fromZ, toZ, options = {}) {\n\t\treturn this.fromTo(\"translateZ\", fromZ, toZ, options);\n\t}\n\t/**\n\t* Composite helper to tilt a container across multiple 3D axes simultaneously.\n\t*/\n\ttilt3D(options) {\n\t\tconst start = options.start ?? options.fromFrame;\n\t\tconst end = options.end ?? options.toFrame;\n\t\tconst ease = options.ease;\n\t\tconst from = options.from ?? {};\n\t\tconst to = options.to;\n\t\tfor (const prop of [\n\t\t\t\"rotateX\",\n\t\t\t\"rotateY\",\n\t\t\t\"rotateZ\",\n\t\t\t\"translateZ\",\n\t\t\t\"perspective\"\n\t\t]) {\n\t\t\tconst toVal = to[prop];\n\t\t\tif (toVal !== void 0) {\n\t\t\t\tconst fromVal = from[prop] ?? 0;\n\t\t\t\tthis.fromTo(prop, fromVal, toVal, {\n\t\t\t\t\tfrom: start,\n\t\t\t\t\tto: end,\n\t\t\t\t\tfromFrame: start,\n\t\t\t\t\ttoFrame: end,\n\t\t\t\t\tease\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t* Binds an animatable property to a reactive continuous Signal (e.g. LFO, speech energy, audio pitch).\n\t*/\n\tsignal(prop, signalOrHandleId, options = {}) {\n\t\tconst handleId = extractSignalHandleId(signalOrHandleId);\n\t\tconst id = `${prop}_sig_${handleId}_${this.tracks.length}`;\n\t\tconst source = {\n\t\t\ttype: \"signal\",\n\t\t\tinputHandleId: handleId,\n\t\t\tmultiplier: options.multiplier ?? 1,\n\t\t\toffset: options.offset ?? 0,\n\t\t\tsmoothingWindowFrames: options.smoothing ?? 0,\n\t\t\tsignalMode: options.mode ?? \"continuous\",\n\t\t\tthreshold: options.threshold ?? .15,\n\t\t\taccumulateThreshold: options.threshold ?? .15,\n\t\t\tdebounceFrames: options.debounceFrames ?? 2,\n\t\t\tchannel: options.channel ?? \"primary\"\n\t\t};\n\t\tthis.tracks.push({\n\t\t\tid,\n\t\t\tprop,\n\t\t\tsource,\n\t\t\tkeyframes: []\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t* Modulates color interpolation based on an active signal.\n\t*/\n\tcolorSignal(prop, signalOrHandleId, options) {\n\t\tconst handleId = extractSignalHandleId(signalOrHandleId);\n\t\tconst id = `${prop}_colorSig_${handleId}_${this.tracks.length}`;\n\t\tconst source = {\n\t\t\ttype: \"signal\",\n\t\t\tinputHandleId: handleId,\n\t\t\tmultiplier: 1,\n\t\t\toffset: 0,\n\t\t\tsmoothingWindowFrames: options.smoothing ?? 0,\n\t\t\tcolorMode: options.colorMode ?? \"interpolate\",\n\t\t\tcolorA: options.colorA,\n\t\t\tcolorB: options.colorB,\n\t\t\tcolorThreshold: options.threshold,\n\t\t\tchannel: \"primary\"\n\t\t};\n\t\tthis.tracks.push({\n\t\t\tid,\n\t\t\tprop,\n\t\t\tsource,\n\t\t\tkeyframes: []\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t* Adds organic Perlin noise wiggling to a property.\n\t*/\n\twiggle(prop, options = {}) {\n\t\tconst id = `${prop}_wiggle_${this.tracks.length}`;\n\t\tconst source = {\n\t\t\ttype: \"wiggle\",\n\t\t\tfrequency: options.frequency ?? 2,\n\t\t\tamplitude: options.amplitude ?? 20,\n\t\t\toctaves: options.octaves ?? 1,\n\t\t\tseed: options.seed ?? 1234\n\t\t};\n\t\tthis.tracks.push({\n\t\t\tid,\n\t\t\tprop,\n\t\t\tsource,\n\t\t\tkeyframes: []\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t* Adds physical harmonic spring overshoot behavior to a property transition.\n\t*/\n\tspring(prop, options = {}) {\n\t\tconst id = `${prop}_spring_${this.tracks.length}`;\n\t\tconst source = {\n\t\t\ttype: \"springOvershoot\",\n\t\t\tdamping: options.damping ?? 12,\n\t\t\tstiffness: options.stiffness ?? 180,\n\t\t\tmass: options.mass ?? 1\n\t\t};\n\t\tthis.tracks.push({\n\t\t\tid,\n\t\t\tprop,\n\t\t\tsource,\n\t\t\tkeyframes: []\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t* Follows a 2D or 3D path with constant arc-length velocity, automatic orientation,\n\t* banking into turns, and optional easing.\n\t*/\n\tfollowPath(path, options = {}) {\n\t\tconst startFrame = options.start ?? options.fromFrame ?? 0;\n\t\tconst endFrame = options.end ?? options.toFrame ?? 60;\n\t\tconst duration = Math.max(1, endFrame - startFrame);\n\t\tconst sampleCount = options.samples ?? Math.max(8, Math.min(60, Math.round(duration / 2)));\n\t\tconst totalLen = path.totalLength ?? 1;\n\t\tlet fromProg = options.fromProgress ?? 0;\n\t\tlet toProg = options.toProgress ?? 1;\n\t\tif (options.fromDistance !== void 0 && totalLen > 0) fromProg = options.fromDistance / totalLen;\n\t\tif (options.toDistance !== void 0 && totalLen > 0) toProg = options.toDistance / totalLen;\n\t\tconst autoOrient = options.autoOrient ?? true;\n\t\tconst banking = options.banking ?? 0;\n\t\tconst pitchOffset = options.pitchOffset ?? 0;\n\t\tconst yawOffset = options.yawOffset ?? 0;\n\t\tconst rollOffset = options.rollOffset ?? 0;\n\t\tlet hasZ = false;\n\t\tlet hasRx = false;\n\t\tlet hasRy = false;\n\t\tconst samples = [];\n\t\tfor (let i = 0; i <= sampleCount; i++) {\n\t\t\tconst t = i / sampleCount;\n\t\t\tconst easedT = evaluateEasingProgress(options.ease, t);\n\t\t\tconst u = fromProg + easedT * (toProg - fromProg);\n\t\t\tconst f = Math.round(startFrame + t * duration);\n\t\t\tlet pos = [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t0\n\t\t\t];\n\t\t\tlet tan = [\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t\t0\n\t\t\t];\n\t\t\tlet rot = [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t0\n\t\t\t];\n\t\t\tif (typeof path.getFrameAt === \"function\") {\n\t\t\t\tconst frameData = path.getFrameAt(u);\n\t\t\t\tpos = frameData.position;\n\t\t\t\ttan = frameData.tangent;\n\t\t\t\trot = frameData.rotation ?? [\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\t0\n\t\t\t\t];\n\t\t\t} else {\n\t\t\t\tconst pt = path.getPointAt(u);\n\t\t\t\tpos = pt.position;\n\t\t\t\tif (pt.tangent) tan = pt.tangent;\n\t\t\t\trot = [\n\t\t\t\t\tMath.asin(Math.max(-1, Math.min(1, -tan[1]))) * (180 / Math.PI),\n\t\t\t\t\tMath.atan2(tan[0], tan[2]) * (180 / Math.PI),\n\t\t\t\t\tMath.atan2(tan[1], tan[0]) * (180 / Math.PI)\n\t\t\t\t];\n\t\t\t}\n\t\t\tconst rx = rot[0] + pitchOffset;\n\t\t\tconst ry = rot[1] + yawOffset;\n\t\t\tlet rz = (Math.abs(tan[2]) < 1e-4 ? Math.atan2(tan[1], tan[0]) * (180 / Math.PI) : rot[2]) + rollOffset;\n\t\t\tif (banking !== 0) {\n\t\t\t\tconst uAhead = Math.min(1, u + .02);\n\t\t\t\tconst uBehind = Math.max(0, u - .02);\n\t\t\t\tconst ptAhead = path.getPointAt(uAhead);\n\t\t\t\tconst ptBehind = path.getPointAt(uBehind);\n\t\t\t\tconst tAhead = ptAhead.tangent ?? [\n\t\t\t\t\t1,\n\t\t\t\t\t0,\n\t\t\t\t\t0\n\t\t\t\t];\n\t\t\t\tconst tBehind = ptBehind.tangent ?? [\n\t\t\t\t\t1,\n\t\t\t\t\t0,\n\t\t\t\t\t0\n\t\t\t\t];\n\t\t\t\tconst dYaw = Math.atan2(tAhead[0], tAhead[2]) - Math.atan2(tBehind[0], tBehind[2]);\n\t\t\t\trz -= dYaw * banking * 57.2958;\n\t\t\t}\n\t\t\tif (Math.abs(pos[2]) > 1e-4) hasZ = true;\n\t\t\tif (Math.abs(rx) > 1e-4) hasRx = true;\n\t\t\tif (Math.abs(ry) > 1e-4) hasRy = true;\n\t\t\tsamples.push({\n\t\t\t\tf,\n\t\t\t\tx: pos[0],\n\t\t\t\ty: pos[1],\n\t\t\t\tz: pos[2],\n\t\t\t\trx,\n\t\t\t\try,\n\t\t\t\trz\n\t\t\t});\n\t\t}\n\t\tfor (const s of samples) {\n\t\t\tthis.keyframe(\"x\", s.f, s.x);\n\t\t\tthis.keyframe(\"y\", s.f, s.y);\n\t\t\tif (hasZ) this.keyframe(\"z\", s.f, s.z);\n\t\t\tif (autoOrient) {\n\t\t\t\tthis.keyframe(\"rotateZ\", s.f, s.rz);\n\t\t\t\tif (hasRx) this.keyframe(\"rotateX\", s.f, s.rx);\n\t\t\t\tif (hasRy) this.keyframe(\"rotateY\", s.f, s.ry);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t* Attaches this animation to a target LayoutNode and returns the node.\n\t*/\n\tapplyTo(node) {\n\t\tnode.animation = this.toSpec();\n\t\treturn node;\n\t}\n\t/**\n\t* Returns the validated LayerAnimation specification object.\n\t*/\n\ttoSpec() {\n\t\treturn { tracks: this.tracks };\n\t}\n\ttoJSON() {\n\t\treturn this.toSpec();\n\t}\n};\nvar CameraAnimation = class CameraAnimation extends LayerAnimation {\n\tstatic camera() {\n\t\treturn new CameraAnimation();\n\t}\n\tdolly(fromDistanceOrOptions, toDistance, options = {}) {\n\t\tif (typeof fromDistanceOrOptions === \"object\") {\n\t\t\tconst opts = fromDistanceOrOptions;\n\t\t\tconst start = opts.start ?? opts.fromFrame ?? 0;\n\t\t\tconst end = opts.end ?? opts.toFrame ?? 0;\n\t\t\treturn this.fromTo(\"cameraZ\", opts.fromDistance, opts.toDistance, {\n\t\t\t\tfrom: start,\n\t\t\t\tto: end,\n\t\t\t\tease: opts.ease\n\t\t\t});\n\t\t}\n\t\treturn this.fromTo(\"cameraZ\", fromDistanceOrOptions, toDistance ?? fromDistanceOrOptions, options);\n\t}\n\torbit(options) {\n\t\tconst start = options.start ?? options.fromFrame ?? 0;\n\t\tconst end = options.end ?? options.toFrame ?? 0;\n\t\tif (options.azimuth) this.fromTo(\"orbitAzimuth\", options.azimuth.from ?? 0, options.azimuth.to, {\n\t\t\tfrom: start,\n\t\t\tto: end,\n\t\t\tease: options.ease\n\t\t});\n\t\tif (options.elevation) this.fromTo(\"orbitElevation\", options.elevation.from ?? 0, options.elevation.to, {\n\t\t\tfrom: start,\n\t\t\tto: end,\n\t\t\tease: options.ease\n\t\t});\n\t\tif (options.radius) this.fromTo(\"orbitRadius\", options.radius.from ?? 1500, options.radius.to, {\n\t\t\tfrom: start,\n\t\t\tto: end,\n\t\t\tease: options.ease\n\t\t});\n\t\treturn this;\n\t}\n\ttruck(fromX, toX, options = {}) {\n\t\treturn this.fromTo(\"cameraX\", fromX, toX, options);\n\t}\n\tpedestal(fromY, toY, options = {}) {\n\t\treturn this.fromTo(\"cameraY\", fromY, toY, options);\n\t}\n\tpan(fromAngleDeg, toAngleDeg, options = {}) {\n\t\treturn this.fromTo(\"cameraYaw\", fromAngleDeg, toAngleDeg, options);\n\t}\n\ttilt(fromAngleDeg, toAngleDeg, options = {}) {\n\t\treturn this.fromTo(\"cameraPitch\", fromAngleDeg, toAngleDeg, options);\n\t}\n\troll(fromAngleDeg, toAngleDeg, options = {}) {\n\t\treturn this.fromTo(\"cameraRoll\", fromAngleDeg, toAngleDeg, options);\n\t}\n\trackFocus(options) {\n\t\tconst start = options.start ?? options.fromFrame ?? 0;\n\t\tconst end = options.end ?? options.toFrame ?? 0;\n\t\tthis.fromTo(\"focusDistance\", options.fromDistance, options.toDistance, {\n\t\t\tfrom: start,\n\t\t\tto: end,\n\t\t\tease: options.ease ?? \"power2.inOut\"\n\t\t});\n\t\tif (options.toFStop !== void 0) this.fromTo(\"fStop\", options.fromFStop ?? 2.8, options.toFStop, {\n\t\t\tfrom: start,\n\t\t\tto: end,\n\t\t\tease: options.ease ?? \"power2.inOut\"\n\t\t});\n\t\treturn this;\n\t}\n\thandheld(options) {\n\t\tconst start = options.start ?? options.fromFrame ?? 0;\n\t\tconst end = options.end ?? options.toFrame ?? 0;\n\t\tthis.fromTo(\"shakeTranslation\", 0, options.translationAmplitude, {\n\t\t\tfrom: start,\n\t\t\tto: end\n\t\t});\n\t\tthis.fromTo(\"shakeRotation\", 0, options.rotationAmplitude, {\n\t\t\tfrom: start,\n\t\t\tto: end\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t* Animates camera eye and lookAt target along a 3D path with constant velocity,\n\t* leading target look-ahead, or path tangent orientation.\n\t*/\n\tfollowPath3D(path, options = {}) {\n\t\tconst startFrame = options.start ?? options.fromFrame ?? 0;\n\t\tconst endFrame = options.end ?? options.toFrame ?? 60;\n\t\tconst duration = Math.max(1, endFrame - startFrame);\n\t\tconst sampleCount = options.samples ?? Math.max(8, Math.min(60, Math.round(duration / 2)));\n\t\tconst mode = options.mode ?? (options.target ? \"lookAtTarget\" : \"leadTarget\");\n\t\tconst fromProg = options.fromProgress ?? 0;\n\t\tconst toProg = options.toProgress ?? 1;\n\t\tconst lookAhead = options.lookAhead ?? .05;\n\t\tfor (let i = 0; i <= sampleCount; i++) {\n\t\t\tconst t = i / sampleCount;\n\t\t\tconst u = fromProg + evaluateEasingProgress(options.ease, t) * (toProg - fromProg);\n\t\t\tconst f = Math.round(startFrame + t * duration);\n\t\t\tlet pos = [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t0\n\t\t\t];\n\t\t\tlet rot = [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t0\n\t\t\t];\n\t\t\tif (typeof path.getFrameAt === \"function\") {\n\t\t\t\tconst frameData = path.getFrameAt(u);\n\t\t\t\tpos = frameData.position;\n\t\t\t\trot = frameData.rotation ?? [\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\t0\n\t\t\t\t];\n\t\t\t} else pos = path.getPointAt(u).position;\n\t\t\tthis.keyframe(\"cameraX\", f, pos[0]);\n\t\t\tthis.keyframe(\"cameraY\", f, pos[1]);\n\t\t\tthis.keyframe(\"cameraZ\", f, pos[2]);\n\t\t\tif (mode === \"lookAtTarget\") {\n\t\t\t\tconst tgt = options.target ?? [\n\t\t\t\t\tpos[0],\n\t\t\t\t\tpos[1],\n\t\t\t\t\t0\n\t\t\t\t];\n\t\t\t\tthis.keyframe(\"targetX\", f, tgt[0]);\n\t\t\t\tthis.keyframe(\"targetY\", f, tgt[1]);\n\t\t\t\tthis.keyframe(\"targetZ\", f, tgt[2]);\n\t\t\t} else if (mode === \"leadTarget\") {\n\t\t\t\tconst leadU = Math.min(1, u + lookAhead);\n\t\t\t\tconst leadPt = path.getPointAt(leadU);\n\t\t\t\tthis.keyframe(\"targetX\", f, leadPt.position[0]);\n\t\t\t\tthis.keyframe(\"targetY\", f, leadPt.position[1]);\n\t\t\t\tthis.keyframe(\"targetZ\", f, leadPt.position[2]);\n\t\t\t} else if (mode === \"orientAlongPath\") {\n\t\t\t\tthis.keyframe(\"cameraPitch\", f, rot[0]);\n\t\t\t\tthis.keyframe(\"cameraYaw\", f, rot[1]);\n\t\t\t\tthis.keyframe(\"cameraRoll\", f, rot[2]);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n};\n\n//#endregion\n//#region src/program/evaluator.ts\nfunction hash1D(n, seed) {\n\tlet x = Math.floor(n) ^ seed * 1013 | 0;\n\tx = Math.imul(x ^ x >>> 15, x | 1);\n\tx ^= x + Math.imul(x ^ x >>> 7, x | 61);\n\treturn ((x ^ x >>> 14) >>> 0) / 4294967295 * 2 - 1;\n}\nfunction smoothNoise1D(x, seed) {\n\tconst i0 = Math.floor(x);\n\tconst i1 = i0 + 1;\n\tconst f = x - i0;\n\tconst u = f * f * (3 - 2 * f);\n\tconst g0 = hash1D(i0, seed);\n\tconst g1 = hash1D(i1, seed);\n\tconst v0 = g0 * f;\n\tconst v1 = g1 * (f - 1);\n\treturn (v0 * (1 - u) + v1 * u) * 2;\n}\n/**\n* Procedural wiggle generator using multi-octave coherent 1D gradient noise.\n*/\nfunction evaluateWiggle(source, tSec, baseValue = 0) {\n\tconst freq = source.frequency ?? 2;\n\tconst amp = source.amplitude ?? 50;\n\tconst octaves = Math.max(1, Math.min(4, source.octaves ?? 1));\n\tconst seed = source.seed ?? 1234;\n\tlet total = 0;\n\tlet maxAmp = 0;\n\tlet currentAmp = 1;\n\tlet currentFreq = freq;\n\tfor (let i = 0; i < octaves; i++) {\n\t\tconst noiseVal = smoothNoise1D(tSec * currentFreq, seed + i * 7919);\n\t\ttotal += noiseVal * currentAmp;\n\t\tmaxAmp += currentAmp;\n\t\tcurrentAmp *= .5;\n\t\tcurrentFreq *= 2;\n\t}\n\treturn baseValue + (maxAmp > 0 ? total / maxAmp : 0) * amp;\n}\n/**\n* Analytical solution to the second-order damped harmonic oscillator ODE:\n* m*x'' + c*x' + k*x = 0\n*/\nfunction evaluateSpringOvershoot(source, tSec, v0, v1) {\n\tif (tSec <= 0) return v0;\n\tconst m = Math.max(.001, source.mass ?? 1);\n\tconst k = Math.max(.001, source.stiffness ?? 180);\n\tconst c = Math.max(.001, source.damping ?? 12);\n\tconst w0 = Math.sqrt(k / m);\n\tconst zeta = c / (2 * Math.sqrt(k * m));\n\tlet progress = 1;\n\tif (zeta < 1) {\n\t\tconst wd = w0 * Math.sqrt(1 - zeta * zeta);\n\t\tconst A = -1;\n\t\tconst B = -zeta * w0 / wd;\n\t\tprogress = 1 + Math.exp(-zeta * w0 * tSec) * (A * Math.cos(wd * tSec) + B * Math.sin(wd * tSec));\n\t} else if (Math.abs(zeta - 1) < 1e-4) progress = 1 + Math.exp(-w0 * tSec) * (-1 - w0 * tSec);\n\telse {\n\t\tconst sq = Math.sqrt(zeta * zeta - 1);\n\t\tconst r1 = -w0 * (zeta - sq);\n\t\tconst r2 = -w0 * (zeta + sq);\n\t\tconst c1 = -1 / (1 - r1 / r2);\n\t\tconst c2 = -1 - c1;\n\t\tprogress = 1 + c1 * Math.exp(r1 * tSec) + c2 * Math.exp(r2 * tSec);\n\t}\n\treturn v0 + (v1 - v0) * progress;\n}\nfunction extractRawSignalSample(signalData, frame, fps) {\n\tif (signalData === null || signalData === void 0) return 0;\n\tif (typeof signalData === \"number\") return signalData;\n\tif (typeof signalData === \"function\") return Number(signalData(frame, fps)) || 0;\n\tif (Array.isArray(signalData) || ArrayBuffer.isView(signalData)) {\n\t\tconst arr = signalData;\n\t\tif (arr.length === 0) return 0;\n\t\tconst idx = Math.max(0, Math.min(arr.length - 1, Math.round(frame)));\n\t\treturn Number(arr[idx]) || 0;\n\t}\n\tif (typeof signalData === \"object\") {\n\t\tconst sd = signalData;\n\t\tif (typeof sd.get === \"function\") return Number(sd.get({\n\t\t\tframe,\n\t\t\tfps,\n\t\t\ttime: fps > 0 ? frame / fps : 0\n\t\t})) || 0;\n\t\tif (sd.type === \"Signal\" && sd.data) return extractRawSignalSample(sd.data, frame, fps);\n\t\tconst rawSamples = sd.samples ?? (typeof sd.channel === \"string\" && sd[sd.channel] !== void 0 ? sd[sd.channel] : void 0);\n\t\tif (Array.isArray(rawSamples) || ArrayBuffer.isView(rawSamples)) {\n\t\t\tconst arr = rawSamples;\n\t\t\tif (arr.length === 0) return 0;\n\t\t\tconst srcFps = Number(sd.fps) || 24;\n\t\t\tconst t = frame / (fps > 0 ? fps : 24);\n\t\t\tconst idx = Math.max(0, Math.min(arr.length - 1, Math.round(t * srcFps)));\n\t\t\treturn Number(arr[idx]) || 0;\n\t\t}\n\t\tif (sd.type === \"audio_extractor\" || sd.extractionMode !== void 0) {\n\t\t\tconst nodeId = sd.nodeId;\n\t\t\tif (nodeId) {\n\t\t\t\tconst ch = sd.channel ?? \"primary\";\n\t\t\t\tconst channelSamples = signalRegistry.getChannelSamples(nodeId, ch);\n\t\t\t\tif (channelSamples && channelSamples.length > 0) {\n\t\t\t\t\tconst srcFps = Number(sd.fps) || 24;\n\t\t\t\t\tconst t = frame / (fps > 0 ? fps : 24);\n\t\t\t\t\tconst idx = Math.max(0, Math.min(channelSamples.length - 1, Math.round(t * srcFps)));\n\t\t\t\t\treturn Number(channelSamples[idx]) || 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\t\tif (sd.type === \"generator\") {\n\t\t\tconst amp = typeof sd.amplitude === \"number\" ? sd.amplitude : 1;\n\t\t\tlet freq = typeof sd.frequency === \"number\" ? sd.frequency : 1;\n\t\t\tif (sd.syncToBpm && typeof sd.bpm === \"number\" && sd.bpm > 0) {\n\t\t\t\tconst bars = typeof sd.bars === \"number\" && sd.bars > 0 ? sd.bars : 1;\n\t\t\t\tfreq = sd.bpm / 60 / bars;\n\t\t\t}\n\t\t\tconst phase = typeof sd.phase === \"number\" ? sd.phase : 0;\n\t\t\tconst offset = typeof sd.offset === \"number\" ? sd.offset : 0;\n\t\t\tconst t = frame / (fps > 0 ? fps : 24);\n\t\t\tconst baseType = sd.baseType ?? \"sine\";\n\t\t\tconst fmEnabled = Boolean(sd.fmEnabled);\n\t\t\tlet tMod = t;\n\t\t\tif (fmEnabled) {\n\t\t\t\tconst fmAmp = Number(sd.fmAmplitude) || 1;\n\t\t\t\tconst fmFreq = Number(sd.fmFrequency) || .5;\n\t\t\t\ttMod = t + Math.sin(t * fmFreq * Math.PI * 2) * fmAmp;\n\t\t\t}\n\t\t\tlet val = 0;\n\t\t\tconst phaseNorm = (tMod * freq + phase / (Math.PI * 2)) % 1;\n\t\t\tconst normT = phaseNorm < 0 ? phaseNorm + 1 : phaseNorm;\n\t\t\tconst fract = (x) => (x % 1 + 1) % 1;\n\t\t\tswitch (baseType) {\n\t\t\t\tcase \"triangle\":\n\t\t\t\t\tval = 4 * Math.abs(normT - .5) - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"sawtooth\":\n\t\t\t\t\tval = 2 * normT - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"square\":\n\t\t\t\t\tval = normT < .5 ? 1 : -1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"constant\":\n\t\t\t\t\tval = 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"noise_smooth\": {\n\t\t\t\t\tconst noiseT = tMod * freq + phase;\n\t\t\t\t\tconst noiseI = Math.floor(noiseT);\n\t\t\t\t\tconst noiseF = noiseT - noiseI;\n\t\t\t\t\tconst noiseU = noiseF * noiseF * (3 - 2 * noiseF);\n\t\t\t\t\tconst n0 = fract(Math.sin(noiseI * 12.9898) * 43758.5453);\n\t\t\t\t\tconst n1 = fract(Math.sin((noiseI + 1) * 12.9898) * 43758.5453);\n\t\t\t\t\tval = (n0 * (1 - noiseU) + n1 * noiseU) * 2 - 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"noise_white\":\n\t\t\t\t\tval = fract(Math.sin(tMod * 12.9898 + phase) * 43758.5453) * 2 - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"pulse\": {\n\t\t\t\t\tconst pulseDuty = phase === 0 ? .5 : Math.max(.01, Math.min(.99, phase));\n\t\t\t\t\tval = fract(tMod * freq) < pulseDuty ? 1 : -1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"bounce\":\n\t\t\t\t\tval = Math.abs(Math.sin(tMod * freq * Math.PI + phase));\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"staircase\":\n\t\t\t\t\tval = Math.floor(normT * 8) / 7 * 2 - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tval = Math.sin(tMod * freq * Math.PI * 2 + phase);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn val * amp + offset;\n\t\t}\n\t\tif (sd.type === \"gate\") {\n\t\t\tconst source = sd.sourceSignal ?? sd.signal;\n\t\t\tconst thresh = typeof sd.threshold === \"number\" ? sd.threshold : .5;\n\t\t\tconst mode = sd.mode ?? \"gate\";\n\t\t\tconst invert = Boolean(sd.invert);\n\t\t\tconst debounceMs = typeof sd.debounceMs === \"number\" ? sd.debounceMs : 0;\n\t\t\tconst debounceFrames = Math.max(1, Math.round(debounceMs / 1e3 * fps));\n\t\t\tconst holdFrames = Math.max(1, Number(sd.holdFrames) || 4);\n\t\t\tlet output = 0;\n\t\t\tif (mode === \"gate\") output = extractRawSignalSample(source, frame, fps) >= thresh ? 1 : 0;\n\t\t\telse if (mode === \"trigger\") {\n\t\t\t\tlet lastTrigger = -Infinity;\n\t\t\t\tconst startF = Math.max(0, frame - 300);\n\t\t\t\tfor (let f = startF; f <= frame; f++) {\n\t\t\t\t\tconst val = extractRawSignalSample(source, f, fps);\n\t\t\t\t\tconst prev = f > 0 ? extractRawSignalSample(source, f - 1, fps) : 0;\n\t\t\t\t\tif (val >= thresh && prev < thresh && f - lastTrigger >= debounceFrames) lastTrigger = f;\n\t\t\t\t}\n\t\t\t\toutput = frame >= lastTrigger && frame < lastTrigger + holdFrames ? 1 : 0;\n\t\t\t} else if (mode === \"toggle\") {\n\t\t\t\tlet toggleCount = 0;\n\t\t\t\tlet lastTrigger = -Infinity;\n\t\t\t\tfor (let f = 0; f <= frame; f++) {\n\t\t\t\t\tconst val = extractRawSignalSample(source, f, fps);\n\t\t\t\t\tconst prev = f > 0 ? extractRawSignalSample(source, f - 1, fps) : 0;\n\t\t\t\t\tif (val >= thresh && prev < thresh && f - lastTrigger >= debounceFrames) {\n\t\t\t\t\t\ttoggleCount++;\n\t\t\t\t\t\tlastTrigger = f;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\toutput = toggleCount % 2 === 1 ? 1 : 0;\n\t\t\t}\n\t\t\treturn invert ? 1 - output : output;\n\t\t}\n\t\tif (sd.type === \"signal_math\") {\n\t\t\tconst valA = extractRawSignalSample(sd.signalA, frame, fps);\n\t\t\tconst valB = sd.signalB !== void 0 ? extractRawSignalSample(sd.signalB, frame, fps) : Number(sd.bValue) || 0;\n\t\t\tswitch (sd.operation) {\n\t\t\t\tcase \"add\": return valA + valB;\n\t\t\t\tcase \"subtract\": return valA - valB;\n\t\t\t\tcase \"multiply\": return valA * valB;\n\t\t\t\tcase \"divide\": return valB !== 0 ? valA / valB : 0;\n\t\t\t\tcase \"min\": return Math.min(valA, valB);\n\t\t\t\tcase \"max\": return Math.max(valA, valB);\n\t\t\t\tcase \"clamp\": {\n\t\t\t\t\tconst cMin = Number(sd.clampMin) || 0;\n\t\t\t\t\tconst cMax = Number(sd.clampMax) || 1;\n\t\t\t\t\treturn Math.max(cMin, Math.min(cMax, valA));\n\t\t\t\t}\n\t\t\t\tcase \"abs\": return Math.abs(valA);\n\t\t\t\tcase \"negate\": return -valA;\n\t\t\t\tcase \"invert\": return 1 - valA;\n\t\t\t\tcase \"power\": return valA ** (Number(sd.exponent) || 2);\n\t\t\t\tcase \"modulo\": return valB !== 0 ? valA % valB : 0;\n\t\t\t\tcase \"remap\": {\n\t\t\t\t\tconst inMin = Number(sd.inMin) || 0;\n\t\t\t\t\tconst inMax = Number(sd.inMax) || 1;\n\t\t\t\t\tconst outMin = Number(sd.outMin) || 0;\n\t\t\t\t\tconst outMax = Number(sd.outMax) || 1;\n\t\t\t\t\tconst rangeIn = inMax - inMin;\n\t\t\t\t\treturn outMin + (rangeIn !== 0 ? (valA - inMin) / rangeIn : 0) * (outMax - outMin);\n\t\t\t\t}\n\t\t\t\tcase \"normalize\": {\n\t\t\t\t\tconst minVal = Number(sd.aMin ?? sd.inMin) || 0;\n\t\t\t\t\tconst range = (Number(sd.aMax ?? sd.inMax) || 1) - minVal;\n\t\t\t\t\treturn range !== 0 ? Math.max(0, Math.min(1, (valA - minVal) / range)) : 0;\n\t\t\t\t}\n\t\t\t\tcase \"smoothstep\": {\n\t\t\t\t\tconst e0 = Number(sd.edge0) || 0;\n\t\t\t\t\tconst range = (Number(sd.edge1) || 1) - e0;\n\t\t\t\t\tconst x = range !== 0 ? Math.max(0, Math.min(1, (valA - e0) / range)) : 0;\n\t\t\t\t\treturn x * x * (3 - 2 * x);\n\t\t\t\t}\n\t\t\t\tcase \"custom\": return valA;\n\t\t\t\tdefault: return valA;\n\t\t\t}\n\t\t}\n\t\tif (typeof sd.value === \"number\") return sd.value;\n\t}\n\treturn 0;\n}\n/**\n* Evaluates an external Signal as an event accumulator / integrator.\n* On each rising edge above `threshold` (with `debounceFrames` guard),\n* the accumulator increments by 1.\n*/\nfunction evaluateSignalAccumulator(rawSource, currentFrame, fps, threshold = .15, debounceFrames = 2) {\n\tif (currentFrame < 0 || !rawSource) return 0;\n\tconst src = rawSource;\n\tlet count = 0;\n\tlet lastTriggerFrame = -Infinity;\n\tfor (let f = 0; f <= currentFrame; f++) {\n\t\tconst val = extractRawSignalSample(src, f, fps);\n\t\tconst prevVal = f > 0 ? extractRawSignalSample(src, f - 1, fps) : 0;\n\t\tif (val >= threshold && prevVal < threshold && f - lastTriggerFrame >= debounceFrames) {\n\t\t\tcount++;\n\t\t\tlastTriggerFrame = f;\n\t\t}\n\t}\n\treturn count;\n}\n/**\n* Evaluates an external Signal with smoothing window and linear remapping,\n* or as a discrete event accumulator.\n*/\nfunction evaluateSignal(source, frame, fps, signals = {}) {\n\tlet rawSource = signals[source.inputHandleId];\n\tif (rawSource === void 0 && signals) {\n\t\tconst signalKeys = Object.keys(signals);\n\t\tif (signalKeys.length === 1) rawSource = signals[signalKeys[0]];\n\t\telse if (signalKeys.length > 1) {\n\t\t\tconst matched = signalKeys.find((k) => k === source.inputHandleId);\n\t\t\trawSource = matched ? signals[matched] : signals[signalKeys[0]];\n\t\t}\n\t}\n\tif (source.channel && rawSource && typeof rawSource === \"object\") {\n\t\tconst candidate = rawSource[source.channel];\n\t\tif (candidate !== void 0) rawSource = candidate;\n\t\telse if (typeof rawSource.get !== \"function\") rawSource = {\n\t\t\t...rawSource,\n\t\t\tchannel: source.channel\n\t\t};\n\t}\n\tif (source.signalMode === \"accumulate\") {\n\t\tconst threshold = source.threshold ?? source.accumulateThreshold ?? .15;\n\t\tconst debounce = source.debounceFrames ?? 2;\n\t\tconst count$1 = evaluateSignalAccumulator(rawSource, frame, fps, threshold, debounce);\n\t\tconst mult = source.multiplier ?? 1;\n\t\tconst off = source.offset ?? 0;\n\t\treturn count$1 * mult + off;\n\t}\n\tconst multiplier = source.multiplier ?? 1;\n\tconst offset = source.offset ?? 0;\n\tconst windowFrames = Math.max(0, Math.round(source.smoothingWindowFrames ?? 0));\n\tif (windowFrames <= 1) return extractRawSignalSample(rawSource, frame, fps) * multiplier + offset;\n\tlet sum = 0;\n\tlet count = 0;\n\tconst startF = Math.max(0, frame - windowFrames + 1);\n\tfor (let f = startF; f <= frame; f++) {\n\t\tsum += extractRawSignalSample(rawSource, f, fps);\n\t\tcount++;\n\t}\n\treturn (count > 0 ? sum / count : 0) * multiplier + offset;\n}\nfunction lerp(a, b, t) {\n\treturn a + (b - a) * t;\n}\nfunction parseHexColor(hex) {\n\tlet h = hex.trim().replace(\"#\", \"\");\n\tif (h.length === 3) h = h[0] + h[0] + h[1] + h[1] + h[2] + h[2];\n\tif (h.length === 6) {\n\t\tconst num = parseInt(h, 16);\n\t\treturn [\n\t\t\tnum >> 16 & 255,\n\t\t\tnum >> 8 & 255,\n\t\t\tnum & 255,\n\t\t\t1\n\t\t];\n\t}\n\tif (h.length === 8) {\n\t\tconst num = parseInt(h, 16);\n\t\treturn [\n\t\t\tnum >> 24 & 255,\n\t\t\tnum >> 16 & 255,\n\t\t\tnum >> 8 & 255,\n\t\t\t(num & 255) / 255\n\t\t];\n\t}\n\treturn [\n\t\t255,\n\t\t255,\n\t\t255,\n\t\t1\n\t];\n}\nfunction lerpColor(c1, c2, t) {\n\tif (!c1.startsWith(\"#\") || !c2.startsWith(\"#\")) return t < .5 ? c1 : c2;\n\tconst [r1, g1, b1, a1] = parseHexColor(c1);\n\tconst [r2, g2, b2, a2] = parseHexColor(c2);\n\tconst r = Math.round(lerp(r1, r2, t));\n\tconst g = Math.round(lerp(g1, g2, t));\n\tconst b = Math.round(lerp(b1, b2, t));\n\tconst a = lerp(a1, a2, t);\n\tconst toHex = (n) => n.toString(16).padStart(2, \"0\");\n\tif (a >= .999) return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n\treturn `rgba(${r}, ${g}, ${b}, ${Math.round(a * 100) / 100})`;\n}\nfunction hueToRgb(p, q, t) {\n\tlet tt = t;\n\tif (tt < 0) tt += 1;\n\tif (tt > 1) tt -= 1;\n\tif (tt < 1 / 6) return p + (q - p) * 6 * tt;\n\tif (tt < 1 / 2) return q;\n\tif (tt < 2 / 3) return p + (q - p) * (2 / 3 - tt) * 6;\n\treturn p;\n}\nfunction rotateHue(hex, delta) {\n\tconst [r255, g255, b255, a] = parseHexColor(hex);\n\tconst r = r255 / 255;\n\tconst g = g255 / 255;\n\tconst b = b255 / 255;\n\tconst max = Math.max(r, g, b);\n\tconst min = Math.min(r, g, b);\n\tlet h = 0;\n\tlet s = 0;\n\tconst l = (max + min) / 2;\n\tif (max !== min) {\n\t\tconst d = max - min;\n\t\ts = l > .5 ? d / (2 - max - min) : d / (max + min);\n\t\tswitch (max) {\n\t\t\tcase r:\n\t\t\t\th = (g - b) / d + (g < b ? 6 : 0);\n\t\t\t\tbreak;\n\t\t\tcase g:\n\t\t\t\th = (b - r) / d + 2;\n\t\t\t\tbreak;\n\t\t\tcase b:\n\t\t\t\th = (r - g) / d + 4;\n\t\t\t\tbreak;\n\t\t}\n\t\th /= 6;\n\t}\n\th = (h + delta % 1 + 1) % 1;\n\tlet newR = l;\n\tlet newG = l;\n\tlet newB = l;\n\tif (s !== 0) {\n\t\tconst q = l < .5 ? l * (1 + s) : l + s - l * s;\n\t\tconst p = 2 * l - q;\n\t\tnewR = hueToRgb(p, q, h + 1 / 3);\n\t\tnewG = hueToRgb(p, q, h);\n\t\tnewB = hueToRgb(p, q, h - 1 / 3);\n\t}\n\tconst toHex = (n) => Math.round(Math.max(0, Math.min(255, n * 255))).toString(16).padStart(2, \"0\");\n\tif (a >= .999) return `#${toHex(newR)}${toHex(newG)}${toHex(newB)}`;\n\treturn `rgba(${Math.round(newR * 255)}, ${Math.round(newG * 255)}, ${Math.round(newB * 255)}, ${Math.round(a * 100) / 100})`;\n}\nconst COLOR_PROPS = new Set([\n\t\"fill\",\n\t\"fillColor\",\n\t\"strokeColor\",\n\t\"textBackgroundColor\",\n\t\"color\"\n]);\n/**\n* Standard keyframe track evaluation.\n*/\nfunction evaluateKeyframes(track, localFrame) {\n\tconst keyframes = track.keyframes ?? [];\n\tif (keyframes.length === 0) return 0;\n\tif (keyframes.length === 1) return keyframes[0].value;\n\tif (localFrame <= keyframes[0].frame) return keyframes[0].value;\n\tif (localFrame >= keyframes[keyframes.length - 1].frame) return keyframes[keyframes.length - 1].value;\n\tfor (let i = 0; i < keyframes.length - 1; i++) {\n\t\tconst kf0 = keyframes[i];\n\t\tconst kf1 = keyframes[i + 1];\n\t\tif (localFrame >= kf0.frame && localFrame <= kf1.frame) {\n\t\t\tconst delta = kf1.frame - kf0.frame;\n\t\t\tconst t = delta > 0 ? (localFrame - kf0.frame) / delta : 0;\n\t\t\tif (typeof kf0.value === \"boolean\") return t >= 1 ? kf1.value : kf0.value;\n\t\t\tif (typeof kf0.value === \"string\" && typeof kf1.value === \"string\") return lerpColor(kf0.value, kf1.value, t);\n\t\t\treturn lerp(Number(kf0.value) || 0, Number(kf1.value) || 0, t);\n\t\t}\n\t}\n\treturn keyframes[keyframes.length - 1].value;\n}\n/**\n* Evaluates an AnimationTrack at a given global or local frame.\n*/\nfunction evaluateTrackAtFrame(track, frame, fps = 24, context = {}) {\n\tconst localFrame = frame - (context.startFrame ?? 0);\n\tconst source = track.source ?? { type: \"keyframe\" };\n\tconst basePropVal = context.baseValues?.[track.prop];\n\tswitch (source.type) {\n\t\tcase \"keyframe\": return evaluateKeyframes(track, localFrame);\n\t\tcase \"wiggle\": {\n\t\t\tconst fallbackNum = typeof basePropVal === \"number\" ? basePropVal : 0;\n\t\t\tconst base = track.keyframes && track.keyframes.length > 0 ? Number(evaluateKeyframes(track, localFrame)) || 0 : fallbackNum;\n\t\t\treturn evaluateWiggle(source, localFrame / (fps > 0 ? fps : 24), base);\n\t\t}\n\t\tcase \"springOvershoot\": {\n\t\t\tlet v0 = 0;\n\t\t\tlet v1 = 1;\n\t\t\tif (track.keyframes && track.keyframes.length >= 2) {\n\t\t\t\tv0 = Number(track.keyframes[0].value) || 0;\n\t\t\t\tv1 = Number(track.keyframes[1].value) || 1;\n\t\t\t} else if (track.keyframes && track.keyframes.length === 1) {\n\t\t\t\tv0 = Number(basePropVal) || 0;\n\t\t\t\tv1 = Number(track.keyframes[0].value) || 0;\n\t\t\t} else if (typeof basePropVal === \"number\") {\n\t\t\t\tv0 = basePropVal;\n\t\t\t\tv1 = basePropVal;\n\t\t\t}\n\t\t\treturn evaluateSpringOvershoot(source, localFrame / (fps > 0 ? fps : 24), v0, v1);\n\t\t}\n\t\tcase \"signal\": {\n\t\t\tconst sigVal = evaluateSignal(source, frame, fps, context.signals);\n\t\t\tif (COLOR_PROPS.has(track.prop)) {\n\t\t\t\tconst src = source;\n\t\t\t\tconst colorA = src.colorA ?? \"#ffffff\";\n\t\t\t\tconst colorB = src.colorB ?? \"#ffffff\";\n\t\t\t\tconst mode = src.colorMode ?? \"interpolate\";\n\t\t\t\tif (mode === \"threshold\") return sigVal >= (src.colorThreshold ?? .5) ? colorB : colorA;\n\t\t\t\tif (mode === \"hueRotate\") return rotateHue(colorA, sigVal);\n\t\t\t\treturn lerpColor(colorA, colorB, Math.max(0, Math.min(1, sigVal)));\n\t\t\t}\n\t\t\treturn sigVal;\n\t\t}\n\t\tdefault: return evaluateKeyframes(track, localFrame);\n\t}\n}\n/**\n* Evaluates all animation tracks for a layer at `frame`.\n*/\nfunction evaluateAnimationAtFrame(animation, frame, fps = 24, context = {}) {\n\tconst result = {};\n\tif (!animation?.tracks) return result;\n\tfor (const track of animation.tracks) result[track.prop] = evaluateTrackAtFrame(track, frame, fps, context);\n\treturn result;\n}\n\n//#endregion\n//#region src/program/text-animations/advanced-builder.ts\n/**\n* Fluent Builder for Extended Text Animators.\n*/\nvar AdvancedTextAnimatorBuilder = class AdvancedTextAnimatorBuilder {\n\tname;\n\tprops = {};\n\tselectors = [];\n\tconstructor(name) {\n\t\tthis.name = name;\n\t}\n\tstatic create(name) {\n\t\treturn new AdvancedTextAnimatorBuilder(name);\n\t}\n\t/** Directional Skew */\n\tskew(angleDeg, axisDeg = 0) {\n\t\tthis.props.skew = angleDeg;\n\t\tthis.props.skewAxis = axisDeg;\n\t\treturn this;\n\t}\n\t/** Anchor Point Grouping and Preset Pivot */\n\tanchor(preset, grouping = \"character\", offsetX = 0, offsetY = 0) {\n\t\tthis.props.anchor = {\n\t\t\tgrouping,\n\t\t\tpreset,\n\t\t\tanchorX: .5,\n\t\t\tanchorY: .5,\n\t\t\toffsetX,\n\t\t\toffsetY\n\t\t};\n\t\treturn this;\n\t}\n\t/** Custom Anchor Point Coordinates (0 to 1 normalized) */\n\tanchorNormalized(ax, ay, grouping = \"character\") {\n\t\tthis.props.anchor = {\n\t\t\tgrouping,\n\t\t\tpreset: \"custom\",\n\t\t\tanchorX: ax,\n\t\t\tanchorY: ay,\n\t\t\toffsetX: 0,\n\t\t\toffsetY: 0\n\t\t};\n\t\treturn this;\n\t}\n\t/** 3D Spatial Z-Depth */\n\ttranslateZ(zPixels) {\n\t\tthis.props.translateZ = zPixels;\n\t\treturn this;\n\t}\n\t/** 3D Tilts */\n\ttilt3D(rx = 0, ry = 0, rz = 0) {\n\t\tthis.props.rotationX = rx;\n\t\tthis.props.rotationY = ry;\n\t\tthis.props.rotationZ = rz;\n\t\treturn this;\n\t}\n\t/** 3D Rotation along X axis */\n\trotationX(deg) {\n\t\tthis.props.rotationX = deg;\n\t\treturn this;\n\t}\n\t/** 3D Rotation along Y axis */\n\trotationY(deg) {\n\t\tthis.props.rotationY = deg;\n\t\treturn this;\n\t}\n\t/** 3D Rotation along Z axis */\n\trotationZ(deg) {\n\t\tthis.props.rotationZ = deg;\n\t\treturn this;\n\t}\n\t/** 3D Volumetric Formations */\n\tvolumetricFormation(mode = \"cylinder\", radius = 300, pitch = 120, totalAngle = 360, perspective = 1200, axis = \"y\") {\n\t\tthis.props.formation = {\n\t\t\tmode,\n\t\t\tradius,\n\t\t\tpitch,\n\t\t\ttotalAngle,\n\t\t\tperspective,\n\t\t\taxis\n\t\t};\n\t\treturn this;\n\t}\n\t/** Dynamic Line Spacing (Leading) */\n\tlineSpacing(extraLeadingPixels, lineAnchor = 0) {\n\t\tthis.props.lineSpacing = extraLeadingPixels;\n\t\tthis.props.lineAnchor = lineAnchor;\n\t\treturn this;\n\t}\n\t/** Normalized Line Anchor (0=top, 0.5=center, 1=bottom) */\n\tlineAnchor(anchor) {\n\t\tthis.props.lineAnchor = anchor;\n\t\treturn this;\n\t}\n\t/** Inertial Spring Settling Physics */\n\tspring(stiffness = 180, damping = 12, mass = 1, initialVelocity = 0) {\n\t\tthis.props.spring = {\n\t\t\tstiffness,\n\t\t\tdamping,\n\t\t\tmass,\n\t\t\tinitialVelocity,\n\t\t\tovershootMultiplier: 1\n\t\t};\n\t\treturn this;\n\t}\n\t/** Dynamic Stroke & Wireframe Properties */\n\tstroke(widthPixels, color = \"#ffffff\", fillOpacity = 1) {\n\t\tthis.props.stroke = {\n\t\t\tstrokeWidth: widthPixels,\n\t\t\tstrokeColor: color,\n\t\t\tstrokeAlign: \"center\",\n\t\t\tfillOpacity,\n\t\t\tdashOffset: 0\n\t\t};\n\t\treturn this;\n\t}\n\t/** Variable Font Axes */\n\tvariableFont(axes) {\n\t\tthis.props.variableAxes = axes;\n\t\treturn this;\n\t}\n\t/** Chromatic Aberration / Cyberpunk Glitch */\n\tchromaticGlitch(redShiftX, redShiftY = 0, blueShiftX = -redShiftX, blueShiftY = 0) {\n\t\tthis.props.chromaticGlitch = {\n\t\t\tredShiftX,\n\t\t\tredShiftY,\n\t\t\tblueShiftX,\n\t\t\tblueShiftY,\n\t\t\tsliceProbability: 0,\n\t\t\tsliceAmplitude: 0\n\t\t};\n\t\treturn this;\n\t}\n\t/** Multi-Band Audio Spectrum Equalizer */\n\taudioSpectrum(signalChannel, minFreqHz = 60, maxFreqHz = 16e3, maxScale = 2.5) {\n\t\tthis.props.audioSpectrum = {\n\t\t\tsignalChannel,\n\t\t\tminFreqHz,\n\t\t\tmaxFreqHz,\n\t\t\tscaleAxis: \"scaleY\",\n\t\t\tminScale: .2,\n\t\t\tmaxScale,\n\t\t\tpeakDecay: .8\n\t\t};\n\t\treturn this;\n\t}\n\t/** Long Shadow Extrusion */\n\tlongShadow(angle = 45, length = 40, color = \"#000000\", startOpacity = .8, endOpacity = 0, steps = 16) {\n\t\tthis.props.longShadow = {\n\t\t\tangle,\n\t\t\tlength,\n\t\t\tcolor,\n\t\t\tstartOpacity,\n\t\t\tendOpacity,\n\t\t\tsteps\n\t\t};\n\t\treturn this;\n\t}\n\t/** Particle Dust / Quantum Dissolve */\n\tparticleDissolve(progress = 0, dispersalAngle = 90, maxDisplacement = 120) {\n\t\tthis.props.particleDissolve = {\n\t\t\tprogress,\n\t\t\tdispersalAngle,\n\t\t\tmaxDisplacement,\n\t\t\tturbulence: .5,\n\t\t\tparticleSize: 2\n\t\t};\n\t\treturn this;\n\t}\n\t/** Add Expression Selector */\n\taddExpressionSelector(expression, mode = \"add\") {\n\t\tthis.selectors.push({\n\t\t\ttype: \"expression\",\n\t\t\texpression,\n\t\t\tmode,\n\t\t\tamount: 1\n\t\t});\n\t\treturn this;\n\t}\n\t/** Alias for addExpressionSelector */\n\texpressionSelector(expression, mode = \"add\") {\n\t\treturn this.addExpressionSelector(expression, mode);\n\t}\n\t/** Standard 2D Transforms */\n\tx(v) {\n\t\tthis.props.x = v;\n\t\treturn this;\n\t}\n\ty(v) {\n\t\tthis.props.y = v;\n\t\treturn this;\n\t}\n\tscale(v) {\n\t\tthis.props.scale = v;\n\t\treturn this;\n\t}\n\tscaleX(v) {\n\t\tthis.props.scaleX = v;\n\t\treturn this;\n\t}\n\tscaleY(v) {\n\t\tthis.props.scaleY = v;\n\t\treturn this;\n\t}\n\trotation(deg) {\n\t\tthis.props.rotation = deg;\n\t\treturn this;\n\t}\n\topacity(v) {\n\t\tthis.props.opacity = v;\n\t\treturn this;\n\t}\n\tblur(v) {\n\t\tthis.props.blur = v;\n\t\treturn this;\n\t}\n\tfillColor(hex) {\n\t\tthis.props.fillColor = hex;\n\t\treturn this;\n\t}\n\tbuild() {\n\t\treturn {\n\t\t\tname: this.name,\n\t\t\tselectors: this.selectors,\n\t\t\tprops: this.props\n\t\t};\n\t}\n};\n\n//#endregion\n//#region src/program/text-animations/advanced-types.ts\n/**\n* @file packages/compositions/src/program/text-animations/advanced-types.ts\n* Data contracts and Zod schemas for Advanced Motion Design & After Effects Extended Typography Engine.\n*/\nconst AnchorGroupingSchema = z.enum([\n\t\"character\",\n\t\"word\",\n\t\"line\",\n\t\"all\"\n]);\nconst AnchorPresetSchema = z.enum([\n\t\"center\",\n\t\"baseline\",\n\t\"bottom_left\",\n\t\"bottom_center\",\n\t\"bottom_right\",\n\t\"top_left\",\n\t\"top_center\",\n\t\"top_right\",\n\t\"custom\"\n]);\nconst TextAnchorConfigSchema = z.object({\n\tgrouping: AnchorGroupingSchema.default(\"character\"),\n\tpreset: AnchorPresetSchema.default(\"center\"),\n\tanchorX: z.number().default(.5),\n\tanchorY: z.number().default(.5),\n\toffsetX: z.number().default(0),\n\toffsetY: z.number().default(0)\n});\nconst SkewPropertiesSchema = z.object({\n\tskew: z.number().min(-90).max(90),\n\tskewAxis: z.number().default(0)\n});\nconst LineSpacingDynamicsSchema = z.object({\n\tlineSpacing: z.number(),\n\tlineAnchor: z.number().min(0).max(1).default(0)\n});\nconst VolumetricFormationModeSchema = z.enum([\n\t\"planar\",\n\t\"vortex\",\n\t\"cylinder\",\n\t\"helix\"\n]);\nconst VolumetricFormationConfigSchema = z.object({\n\tmode: VolumetricFormationModeSchema.default(\"planar\"),\n\tradius: z.number().default(300),\n\tpitch: z.number().default(120),\n\ttotalAngle: z.number().default(360),\n\taxis: z.enum([\n\t\t\"x\",\n\t\t\"y\",\n\t\t\"z\"\n\t]).default(\"y\"),\n\tperspective: z.number().positive().default(1200)\n});\nconst Spatial3DPropertiesSchema = z.object({\n\ttranslateZ: z.number().optional(),\n\trotationX: z.number().optional(),\n\trotationY: z.number().optional(),\n\trotationZ: z.number().optional(),\n\tformation: VolumetricFormationConfigSchema.optional()\n});\nconst SpringPhysicsSchema = z.object({\n\tstiffness: z.number().positive().default(180),\n\tdamping: z.number().positive().default(12),\n\tmass: z.number().positive().default(1),\n\tinitialVelocity: z.number().default(0),\n\tovershootMultiplier: z.number().min(.5).max(3).default(1)\n});\nconst ExpressionSelectorSchema = z.object({\n\ttype: z.literal(\"expression\"),\n\tname: z.string().optional(),\n\texpression: z.string(),\n\tmode: z.enum([\n\t\t\"add\",\n\t\t\"subtract\",\n\t\t\"intersect\",\n\t\t\"min\",\n\t\t\"max\",\n\t\t\"difference\"\n\t]).default(\"add\"),\n\tamount: z.number().default(1)\n});\nconst DynamicStrokePropertiesSchema = z.object({\n\tstrokeWidth: z.number().min(0).default(0),\n\tstrokeColor: z.string().default(\"#ffffff\"),\n\tstrokeAlign: z.enum([\n\t\t\"center\",\n\t\t\"inside\",\n\t\t\"outside\"\n\t]).default(\"center\"),\n\tfillOpacity: z.number().min(0).max(1).default(1),\n\tdashArray: z.tuple([z.number(), z.number()]).optional(),\n\tdashOffset: z.number().default(0)\n});\nconst KineticMarqueeConfigSchema = z.object({\n\tdirection: z.enum([\n\t\t\"left\",\n\t\t\"right\",\n\t\t\"up\",\n\t\t\"down\"\n\t]).default(\"left\"),\n\tvelocity: z.number().default(120),\n\tloop: z.boolean().default(true),\n\trepeatGap: z.number().default(80),\n\tsnap: z.object({\n\t\tenabled: z.boolean().default(false),\n\t\tgranularity: z.enum([\n\t\t\t\"character\",\n\t\t\t\"word\",\n\t\t\t\"line\"\n\t\t]).default(\"word\"),\n\t\tstopIndex: z.number().default(0),\n\t\tdecelEase: z.string().default(\"cubic.out\")\n\t}).optional()\n});\nconst VariableFontAxesSchema = z.object({\n\tweight: z.number().min(100).max(1e3).optional(),\n\twidth: z.number().min(50).max(200).optional(),\n\tslant: z.number().min(-25).max(25).optional(),\n\titalic: z.number().min(0).max(1).optional(),\n\topticalSize: z.number().min(6).max(144).optional()\n});\nconst ChromaticGlitchConfigSchema = z.object({\n\tredShiftX: z.number().default(0),\n\tredShiftY: z.number().default(0),\n\tblueShiftX: z.number().default(0),\n\tblueShiftY: z.number().default(0),\n\tsliceProbability: z.number().min(0).max(1).default(0),\n\tsliceAmplitude: z.number().default(0)\n});\nconst AudioSpectrumTypographySchema = z.object({\n\tsignalChannel: z.string(),\n\tminFreqHz: z.number().default(60),\n\tmaxFreqHz: z.number().default(16e3),\n\tscaleAxis: z.enum([\n\t\t\"scaleY\",\n\t\t\"scaleX\",\n\t\t\"scale\",\n\t\t\"y\"\n\t]).default(\"scaleY\"),\n\tminScale: z.number().default(.2),\n\tmaxScale: z.number().default(2.5),\n\tpeakDecay: z.number().min(0).max(.99).default(.8)\n});\nconst LongShadowConfigSchema = z.object({\n\tangle: z.number().default(45),\n\tlength: z.number().min(0).default(0),\n\tcolor: z.string().default(\"#000000\"),\n\tstartOpacity: z.number().min(0).max(1).default(.8),\n\tendOpacity: z.number().min(0).max(1).default(0),\n\tsteps: z.number().int().min(4).max(64).default(16)\n});\nconst ParticleDissolveConfigSchema = z.object({\n\tprogress: z.number().min(0).max(1).default(0),\n\tdispersalAngle: z.number().default(90),\n\tmaxDisplacement: z.number().default(120),\n\tturbulence: z.number().default(.5),\n\tparticleSize: z.number().default(2)\n});\nconst ExtendedGlyphPropertiesSchema = z.object({\n\tx: z.number().optional(),\n\ty: z.number().optional(),\n\ttranslateZ: z.number().optional(),\n\tscale: z.number().optional(),\n\tscaleX: z.number().optional(),\n\tscaleY: z.number().optional(),\n\trotation: z.number().optional(),\n\trotationX: z.number().optional(),\n\trotationY: z.number().optional(),\n\trotationZ: z.number().optional(),\n\tskew: z.number().optional(),\n\tskewAxis: z.number().optional(),\n\ttracking: z.number().optional(),\n\tlineSpacing: z.number().optional(),\n\tlineAnchor: z.number().optional(),\n\tanchor: TextAnchorConfigSchema.optional(),\n\topacity: z.number().optional(),\n\tblur: z.number().optional(),\n\tfillColor: z.string().optional(),\n\tstroke: DynamicStrokePropertiesSchema.optional(),\n\tvariableAxes: VariableFontAxesSchema.optional(),\n\tchromaticGlitch: ChromaticGlitchConfigSchema.optional(),\n\tlongShadow: LongShadowConfigSchema.optional(),\n\tparticleDissolve: ParticleDissolveConfigSchema.optional(),\n\taudioSpectrum: AudioSpectrumTypographySchema.optional(),\n\tspring: SpringPhysicsSchema.optional()\n});\nconst AdvancedTextAnimatorSchema = z.object({\n\tname: z.string().default(\"AdvancedAnimator\"),\n\tselectors: z.array(z.record(z.string(), z.unknown())).default([]),\n\tprops: ExtendedGlyphPropertiesSchema\n});\n\n//#endregion\n//#region src/program/text-animations/types.ts\n/**\n* @file packages/compositions/src/program/text-animations/types.ts\n* Data contracts and Zod schemas for After Effects Parity Text Animation Engine.\n*/\nconst Vec2Schema = z.object({\n\tx: z.number(),\n\ty: z.number()\n});\nconst CubicBezierSegmentSchema = z.object({\n\tp0: Vec2Schema,\n\tp1: Vec2Schema,\n\tp2: Vec2Schema,\n\tp3: Vec2Schema\n});\nconst TextPathSourceSchema = z.discriminatedUnion(\"type\", [\n\tz.object({\n\t\ttype: z.literal(\"svg\"),\n\t\td: z.string().min(1, \"SVG path string cannot be empty\")\n\t}),\n\tz.object({\n\t\ttype: z.literal(\"bezier\"),\n\t\tsegments: z.array(CubicBezierSegmentSchema).min(1)\n\t}),\n\tz.object({\n\t\ttype: z.literal(\"ellipse\"),\n\t\tcx: z.number(),\n\t\tcy: z.number(),\n\t\trx: z.number().positive(),\n\t\try: z.number().positive(),\n\t\tstartAngleDeg: z.number().default(0),\n\t\tendAngleDeg: z.number().default(360)\n\t}),\n\tz.object({\n\t\ttype: z.literal(\"wave\"),\n\t\tstartX: z.number(),\n\t\tstartY: z.number(),\n\t\tlength: z.number().positive(),\n\t\tamplitude: z.number(),\n\t\tfrequency: z.number().positive(),\n\t\tphaseDeg: z.number().default(0)\n\t})\n]);\nconst TextPathOptionsSchema = z.object({\n\tpath: TextPathSourceSchema,\n\tfirstMargin: z.number().default(0),\n\tlastMargin: z.number().default(0),\n\treversePath: z.boolean().default(false),\n\tperpendicularToPath: z.boolean().default(true),\n\tforceAlignment: z.boolean().default(false),\n\tloop: z.boolean().default(false),\n\tbaselineOffset: z.enum([\n\t\t\"baseline\",\n\t\t\"center\",\n\t\t\"ascender\",\n\t\t\"descender\"\n\t]).default(\"baseline\"),\n\tbaselineShift: z.number().default(0)\n});\nconst TextCursorStyleSchema = z.enum([\n\t\"bar\",\n\t\"underscore\",\n\t\"block\",\n\t\"custom\"\n]);\nconst TextCursorConfigSchema = z.object({\n\tenabled: z.boolean().default(true),\n\tstyle: TextCursorStyleSchema.default(\"bar\"),\n\tcustomChar: z.string().default(\"|\"),\n\tcolor: z.string().optional(),\n\tblinkFrequency: z.number().min(0).default(2),\n\thideOnComplete: z.boolean().default(false),\n\twidth: z.number().positive().default(2.5),\n\tspacing: z.number().default(3)\n});\nconst TypingCadenceSchema = z.discriminatedUnion(\"mode\", [z.object({ mode: z.literal(\"constant\") }), z.object({\n\tmode: z.literal(\"human\"),\n\tjitter: z.number().min(0).max(1).default(.35),\n\tcommaPauseMultiplier: z.number().min(1).default(3),\n\tsentencePauseMultiplier: z.number().min(1).default(5.5),\n\tparagraphPauseMultiplier: z.number().min(1).default(7)\n})]);\nconst TextScrambleConfigSchema = z.object({\n\tenabled: z.boolean().default(false),\n\tcharset: z.enum([\n\t\t\"ascii\",\n\t\t\"alphanumeric\",\n\t\t\"matrix\",\n\t\t\"binary\",\n\t\t\"hex\",\n\t\t\"custom\"\n\t]).default(\"alphanumeric\"),\n\tcustomCharset: z.string().optional(),\n\tscrambleFramesPerChar: z.number().int().min(1).default(8),\n\thighlightProbability: z.number().min(0).max(1).default(.25),\n\tscrambleColor: z.string().optional()\n});\nconst TypewriterAnimatorSchema = z.object({\n\tgranularity: z.enum([\n\t\t\"character\",\n\t\t\"word\",\n\t\t\"line\"\n\t]).default(\"character\"),\n\tcursor: TextCursorConfigSchema.default({\n\t\tenabled: true,\n\t\tstyle: \"bar\",\n\t\tcustomChar: \"|\",\n\t\tblinkFrequency: 2,\n\t\thideOnComplete: false,\n\t\twidth: 2.5,\n\t\tspacing: 3\n\t}),\n\tcadence: TypingCadenceSchema.default({\n\t\tmode: \"human\",\n\t\tjitter: .35,\n\t\tcommaPauseMultiplier: 3,\n\t\tsentencePauseMultiplier: 5.5,\n\t\tparagraphPauseMultiplier: 7\n\t}),\n\tscramble: TextScrambleConfigSchema.default({\n\t\tenabled: false,\n\t\tcharset: \"alphanumeric\",\n\t\tscrambleFramesPerChar: 8,\n\t\thighlightProbability: .25\n\t}),\n\tsoundSync: z.boolean().default(false)\n});\nconst SelectorBasedOnSchema = z.enum([\n\t\"characters\",\n\t\"characters_excluding_spaces\",\n\t\"words\",\n\t\"lines\"\n]);\nconst SelectorUnitsSchema = z.enum([\"percentage\", \"index\"]);\nconst SelectorShapeSchema = z.enum([\n\t\"square\",\n\t\"ramp_up\",\n\t\"ramp_down\",\n\t\"triangle\",\n\t\"round\",\n\t\"smooth\"\n]);\nconst SelectorModeSchema = z.enum([\n\t\"add\",\n\t\"subtract\",\n\t\"intersect\",\n\t\"min\",\n\t\"max\",\n\t\"difference\"\n]);\nconst TextRangeSelectorSchema = z.object({\n\ttype: z.literal(\"range\"),\n\tstart: z.number().default(0),\n\tend: z.number().default(1),\n\toffset: z.number().default(0),\n\tunits: SelectorUnitsSchema.default(\"percentage\"),\n\tbasedOn: SelectorBasedOnSchema.default(\"characters\"),\n\tshape: SelectorShapeSchema.default(\"square\"),\n\tmode: SelectorModeSchema.default(\"add\"),\n\tamount: z.number().min(-1).max(1).default(1),\n\teaseHigh: z.number().min(-1).max(1).default(0),\n\teaseLow: z.number().min(-1).max(1).default(0),\n\trandomizeOrder: z.boolean().default(false),\n\trandomSeed: z.number().int().default(12345)\n});\nconst TextWigglySelectorSchema = z.object({\n\ttype: z.literal(\"wiggly\"),\n\twigglesPerSecond: z.number().positive().default(2),\n\tcorrelation: z.number().min(0).max(1).default(.5),\n\ttemporalPhaseDeg: z.number().default(0),\n\tspatialPhaseDeg: z.number().default(0),\n\tminAmount: z.number().min(-1).max(1).default(-1),\n\tmaxAmount: z.number().min(-1).max(1).default(1),\n\trandomSeed: z.number().int().default(42),\n\tbasedOn: SelectorBasedOnSchema.default(\"characters\"),\n\tmode: SelectorModeSchema.default(\"intersect\")\n});\nconst TextSignalSelectorSchema = z.object({\n\ttype: z.literal(\"signal\"),\n\tsignalId: z.string(),\n\tmultiplier: z.number().default(1),\n\toffset: z.number().default(0),\n\tphaseSpread: z.number().default(0),\n\tbasedOn: SelectorBasedOnSchema.default(\"characters\"),\n\tmode: SelectorModeSchema.default(\"add\")\n});\nconst TextSelectorSchema = z.discriminatedUnion(\"type\", [\n\tTextRangeSelectorSchema,\n\tTextWigglySelectorSchema,\n\tTextSignalSelectorSchema\n]);\nconst AnimatableGlyphPropsSchema = z.object({\n\tx: z.number().optional(),\n\ty: z.number().optional(),\n\tz: z.number().optional(),\n\tscale: z.number().optional(),\n\tscaleX: z.number().optional(),\n\tscaleY: z.number().optional(),\n\trotation: z.number().optional(),\n\trotationX: z.number().optional(),\n\trotationY: z.number().optional(),\n\tskew: z.number().optional(),\n\tskewAxis: z.number().optional(),\n\ttracking: z.number().optional(),\n\tlineSpacing: z.number().optional(),\n\topacity: z.number().min(0).max(1).optional(),\n\tfillColor: z.string().optional(),\n\tstrokeColor: z.string().optional(),\n\tstrokeWidth: z.number().min(0).optional(),\n\tblur: z.number().min(0).optional(),\n\tcharacterOffset: z.number().int().optional()\n});\nconst GlyphAnchorGroupingSchema = z.enum([\n\t\"character\",\n\t\"word\",\n\t\"line\",\n\t\"all\"\n]);\nconst GlyphAnchorPointSchema = z.object({\n\tgrouping: GlyphAnchorGroupingSchema.default(\"character\"),\n\tanchorX: z.number().default(.5),\n\tanchorY: z.number().default(.8)\n});\nconst AETextAnimatorSchema = z.object({\n\tname: z.string().default(\"Animator\"),\n\tselectors: z.array(TextSelectorSchema).min(1),\n\tprops: AnimatableGlyphPropsSchema,\n\tanchor: GlyphAnchorPointSchema.default({\n\t\tgrouping: \"character\",\n\t\tanchorX: .5,\n\t\tanchorY: .8\n\t})\n});\nconst EnhancedTextNodeSchema = z.object({\n\ttext: z.string(),\n\tfontFamily: z.string().default(\"Inter\"),\n\tfontSize: z.number().positive().default(24),\n\tfontWeight: z.union([z.number(), z.string()]).default(400),\n\tfill: z.string().default(\"#ffffff\"),\n\tletterSpacing: z.number().default(0),\n\tlineHeight: z.number().positive().default(1.2),\n\ttextAlign: z.enum([\n\t\t\"left\",\n\t\t\"center\",\n\t\t\"right\"\n\t]).default(\"left\"),\n\tpathOptions: TextPathOptionsSchema.optional(),\n\ttypewriter: TypewriterAnimatorSchema.optional(),\n\tanimators: z.array(AETextAnimatorSchema).default([])\n});\n\n//#endregion\n//#region src/program/text-animations/builder.ts\n/**\n* @file packages/compositions/src/program/text-animations/builder.ts\n* Fluent builders for Path-Following Text and After Effects Text Animators.\n*/\n/**\n* Fluent builder for creating Path-Following Text configurations.\n*/\nvar TextPathBuilder = class TextPathBuilder {\n\toptions = {\n\t\tfirstMargin: 0,\n\t\tlastMargin: 0,\n\t\treversePath: false,\n\t\tperpendicularToPath: true,\n\t\tforceAlignment: false,\n\t\tloop: false,\n\t\tbaselineOffset: \"baseline\",\n\t\tbaselineShift: 0\n\t};\n\tstatic fromSvg(svgPath) {\n\t\tconst builder = new TextPathBuilder();\n\t\tbuilder.options.path = {\n\t\t\ttype: \"svg\",\n\t\t\td: svgPath\n\t\t};\n\t\treturn builder;\n\t}\n\tstatic fromBezier(segments) {\n\t\tconst builder = new TextPathBuilder();\n\t\tbuilder.options.path = {\n\t\t\ttype: \"bezier\",\n\t\t\tsegments\n\t\t};\n\t\treturn builder;\n\t}\n\tstatic fromCurve(curve) {\n\t\treturn TextPathBuilder.fromBezier([curve]);\n\t}\n\tstatic circularBadge(cx, cy, radius) {\n\t\tconst builder = new TextPathBuilder();\n\t\tbuilder.options.path = {\n\t\t\ttype: \"ellipse\",\n\t\t\tcx,\n\t\t\tcy,\n\t\t\trx: radius,\n\t\t\try: radius,\n\t\t\tstartAngleDeg: 0,\n\t\t\tendAngleDeg: 360\n\t\t};\n\t\tbuilder.options.loop = true;\n\t\treturn builder;\n\t}\n\tstatic ellipse(cx, cy, rx, ry, startAngleDeg = 0, endAngleDeg = 360) {\n\t\tconst builder = new TextPathBuilder();\n\t\tbuilder.options.path = {\n\t\t\ttype: \"ellipse\",\n\t\t\tcx,\n\t\t\tcy,\n\t\t\trx,\n\t\t\try,\n\t\t\tstartAngleDeg,\n\t\t\tendAngleDeg\n\t\t};\n\t\tbuilder.options.loop = Math.abs(endAngleDeg - startAngleDeg) >= 360;\n\t\treturn builder;\n\t}\n\tstatic wave(startX, startY, length, amplitude, frequency, phaseDeg = 0) {\n\t\tconst builder = new TextPathBuilder();\n\t\tbuilder.options.path = {\n\t\t\ttype: \"wave\",\n\t\t\tstartX,\n\t\t\tstartY,\n\t\t\tlength,\n\t\t\tamplitude,\n\t\t\tfrequency,\n\t\t\tphaseDeg\n\t\t};\n\t\treturn builder;\n\t}\n\tfirstMargin(margin) {\n\t\tthis.options.firstMargin = margin;\n\t\treturn this;\n\t}\n\tlastMargin(margin) {\n\t\tthis.options.lastMargin = margin;\n\t\treturn this;\n\t}\n\treversePath(reverse) {\n\t\tthis.options.reversePath = reverse;\n\t\treturn this;\n\t}\n\tperpendicularToPath(perpendicular) {\n\t\tthis.options.perpendicularToPath = perpendicular;\n\t\treturn this;\n\t}\n\tforceAlignment(force) {\n\t\tthis.options.forceAlignment = force;\n\t\treturn this;\n\t}\n\tloop(isLoop) {\n\t\tthis.options.loop = isLoop;\n\t\treturn this;\n\t}\n\tbaselineOffset(offset) {\n\t\tthis.options.baselineOffset = offset;\n\t\treturn this;\n\t}\n\tbaselineShift(shiftPixels) {\n\t\tthis.options.baselineShift = shiftPixels;\n\t\treturn this;\n\t}\n\tbuild() {\n\t\treturn TextPathOptionsSchema.parse(this.options);\n\t}\n};\n/**\n* Fluent builder for After Effects Range, Wiggly, and Signal Animators.\n*/\nvar TextAnimatorBuilder = class TextAnimatorBuilder {\n\tname = \"Animator\";\n\tselectors = [];\n\tprops = {};\n\tanchor = {\n\t\tgrouping: \"character\",\n\t\tanchorX: .5,\n\t\tanchorY: .8\n\t};\n\tstatic create(name) {\n\t\tconst builder = new TextAnimatorBuilder();\n\t\tbuilder.name = name;\n\t\treturn builder;\n\t}\n\t/** Adds an After Effects Range Selector */\n\taddRangeSelector(config) {\n\t\tconst rawHigh = config.easeHigh ?? 0;\n\t\tconst easeHigh = Math.abs(rawHigh) > 1 ? rawHigh / 100 : rawHigh;\n\t\tconst rawLow = config.easeLow ?? 0;\n\t\tconst easeLow = Math.abs(rawLow) > 1 ? rawLow / 100 : rawLow;\n\t\tthis.selectors.push({\n\t\t\ttype: \"range\",\n\t\t\tstart: config.start ?? 0,\n\t\t\tend: config.end ?? 1,\n\t\t\toffset: config.offset ?? 0,\n\t\t\tunits: \"percentage\",\n\t\t\tbasedOn: config.basedOn ?? \"characters\",\n\t\t\tshape: config.shape ?? \"smooth\",\n\t\t\tmode: config.mode ?? \"add\",\n\t\t\tamount: 1,\n\t\t\teaseHigh: Math.max(-1, Math.min(1, easeHigh)),\n\t\t\teaseLow: Math.max(-1, Math.min(1, easeLow)),\n\t\t\trandomizeOrder: config.randomizeOrder ?? false,\n\t\t\trandomSeed: config.randomSeed ?? 12345\n\t\t});\n\t\treturn this;\n\t}\n\t/** Adds an After Effects Wiggly Selector for procedural organic flutter */\n\taddWigglySelector(config) {\n\t\tthis.selectors.push({\n\t\t\ttype: \"wiggly\",\n\t\t\twigglesPerSecond: config.wigglesPerSecond ?? 2,\n\t\t\tcorrelation: config.correlation ?? .5,\n\t\t\ttemporalPhaseDeg: 0,\n\t\t\tspatialPhaseDeg: 0,\n\t\t\tminAmount: config.minAmount ?? -1,\n\t\t\tmaxAmount: config.maxAmount ?? 1,\n\t\t\trandomSeed: config.randomSeed ?? 42,\n\t\t\tbasedOn: \"characters\",\n\t\t\tmode: config.mode ?? \"intersect\"\n\t\t});\n\t\treturn this;\n\t}\n\t/** Adds a reactive signal selector */\n\taddSignalSelector(signalId, multiplier = 1, phaseSpread = 0, offset = 0, mode = \"add\") {\n\t\tthis.selectors.push({\n\t\t\ttype: \"signal\",\n\t\t\tsignalId,\n\t\t\tmultiplier,\n\t\t\toffset,\n\t\t\tphaseSpread,\n\t\t\tbasedOn: \"characters\",\n\t\t\tmode\n\t\t});\n\t\treturn this;\n\t}\n\tx(pixels) {\n\t\tthis.props.x = pixels;\n\t\treturn this;\n\t}\n\ty(pixels) {\n\t\tthis.props.y = pixels;\n\t\treturn this;\n\t}\n\tz(pixels) {\n\t\tthis.props.z = pixels;\n\t\treturn this;\n\t}\n\tscale(scaleValue) {\n\t\tthis.props.scale = scaleValue;\n\t\treturn this;\n\t}\n\tscaleX(scaleValue) {\n\t\tthis.props.scaleX = scaleValue;\n\t\treturn this;\n\t}\n\tscaleY(scaleValue) {\n\t\tthis.props.scaleY = scaleValue;\n\t\treturn this;\n\t}\n\trotation(degrees) {\n\t\tthis.props.rotation = degrees;\n\t\treturn this;\n\t}\n\trotationX(degrees) {\n\t\tthis.props.rotationX = degrees;\n\t\treturn this;\n\t}\n\trotationY(degrees) {\n\t\tthis.props.rotationY = degrees;\n\t\treturn this;\n\t}\n\tskew(degrees) {\n\t\tthis.props.skew = degrees;\n\t\treturn this;\n\t}\n\tskewAxis(degrees) {\n\t\tthis.props.skewAxis = degrees;\n\t\treturn this;\n\t}\n\topacity(value) {\n\t\tthis.props.opacity = value;\n\t\treturn this;\n\t}\n\tblur(pixels) {\n\t\tthis.props.blur = pixels;\n\t\treturn this;\n\t}\n\tfill(colorHex) {\n\t\treturn this.fillColor(colorHex);\n\t}\n\tfillColor(colorHex) {\n\t\tthis.props.fillColor = colorHex;\n\t\treturn this;\n\t}\n\tstrokeColor(colorHex) {\n\t\tthis.props.strokeColor = colorHex;\n\t\treturn this;\n\t}\n\tstrokeWidth(pixels) {\n\t\tthis.props.strokeWidth = pixels;\n\t\treturn this;\n\t}\n\ttracking(spacingPixels) {\n\t\tthis.props.tracking = spacingPixels;\n\t\treturn this;\n\t}\n\tlineSpacing(spacingPixels) {\n\t\tthis.props.lineSpacing = spacingPixels;\n\t\treturn this;\n\t}\n\tcharacterOffset(offset) {\n\t\tthis.props.characterOffset = offset;\n\t\treturn this;\n\t}\n\tanchorGrouping(grouping, anchorX = .5, anchorY = .8) {\n\t\tthis.anchor = {\n\t\t\tgrouping,\n\t\t\tanchorX,\n\t\t\tanchorY\n\t\t};\n\t\treturn this;\n\t}\n\tbuild() {\n\t\treturn AETextAnimatorSchema.parse({\n\t\t\tname: this.name,\n\t\t\tselectors: this.selectors,\n\t\t\tprops: this.props,\n\t\t\tanchor: this.anchor\n\t\t});\n\t}\n};\n\n//#endregion\n//#region src/program/text-animations/math.ts\n/**\n* Evaluates closed-form underdamped harmonic oscillator for spring physics:\n*\n* x(t) = target + (x0 - target) * exp(-zeta * omega_n * t) *\n* [ cos(omega_d * t) + (zeta / sqrt(1 - zeta^2)) * sin(omega_d * t) ]\n*\n* @param t Time in seconds since excitation\n* @param stiffness Spring stiffness (k)\n* @param damping Damping coefficient (c)\n* @param mass Mass of glyph (m)\n* @param initialVelocity Initial velocity (v0)\n* @returns Settled scalar progress in [0, 1] with overshoot\n*/\nfunction evaluateSpringProgress(t, stiffness = 180, damping = 12, mass = 1, initialVelocity = 0) {\n\tif (t <= 0) return 0;\n\tconst omega_n = Math.sqrt(Math.max(1e-4, stiffness) / Math.max(1e-4, mass));\n\tconst zeta = damping / (2 * Math.sqrt(Math.max(1e-4, stiffness * mass)));\n\tif (zeta < 1) {\n\t\tconst omega_d = omega_n * Math.sqrt(1 - zeta * zeta);\n\t\tconst decay = Math.exp(-zeta * omega_n * t);\n\t\tconst c1 = -1;\n\t\tconst c2 = (initialVelocity - zeta * omega_n * -1) / Math.max(1e-6, omega_d);\n\t\tconst displacement = decay * (c1 * Math.cos(omega_d * t) + c2 * Math.sin(omega_d * t));\n\t\treturn Math.min(2, Math.max(-1, 1 + displacement));\n\t} else if (Math.abs(zeta - 1) < 1e-4) {\n\t\tconst decay = Math.exp(-omega_n * t);\n\t\treturn 1 + (-1 + (initialVelocity - omega_n) * t) * decay;\n\t} else {\n\t\tconst s1 = -omega_n * (zeta - Math.sqrt(zeta * zeta - 1));\n\t\tconst s2 = -omega_n * (zeta + Math.sqrt(zeta * zeta - 1));\n\t\tconst c1 = (initialVelocity + s2) / Math.max(1e-6, s1 - s2);\n\t\tconst c2 = -1 - c1;\n\t\treturn 1 + (c1 * Math.exp(s1 * t) + c2 * Math.exp(s2 * t));\n\t}\n}\n/**\n* Evaluates 2D Directional Skew matrix components:\n*\n* S(theta, phi) = R(phi) * [ 1 tan(theta) ] * R(-phi)\n* [ 0 1 ]\n*\n* @param skewDeg Skew angle in degrees\n* @param skewAxisDeg Skew axis in degrees\n* @returns 2x2 affine shear matrix components [m00, m01, m10, m11]\n*/\nfunction evaluateSkewMatrix(skewDeg, skewAxisDeg = 0) {\n\tif (skewDeg === 0) return [\n\t\t1,\n\t\t0,\n\t\t0,\n\t\t1\n\t];\n\tconst theta = skewDeg * Math.PI / 180;\n\tconst phi = skewAxisDeg * Math.PI / 180;\n\tconst cosPhi = Math.cos(phi);\n\tconst sinPhi = Math.sin(phi);\n\tconst tanTheta = Math.tan(theta);\n\treturn [\n\t\t1 - tanTheta * cosPhi * sinPhi,\n\t\ttanTheta * cosPhi * cosPhi,\n\t\t-tanTheta * sinPhi * sinPhi,\n\t\t1 + tanTheta * sinPhi * cosPhi\n\t];\n}\n/**\n* Computes anchor pivot coordinates relative to glyph bounding box:\n*\n* @param bbox Glyph bounding box { width, height, ascender, descender }\n* @param config Text anchor configuration\n* @returns Pivot offset (px, py) relative to glyph quad center\n*/\nfunction computeAnchorPivotOffset(bbox, config) {\n\tlet normX = config.anchorX;\n\tlet normY = config.anchorY;\n\tswitch (config.preset) {\n\t\tcase \"center\":\n\t\t\tnormX = .5;\n\t\t\tnormY = .5;\n\t\t\tbreak;\n\t\tcase \"baseline\":\n\t\t\tnormX = .5;\n\t\t\tnormY = bbox.height > 0 ? bbox.ascender / bbox.height : .8;\n\t\t\tbreak;\n\t\tcase \"bottom_left\":\n\t\t\tnormX = 0;\n\t\t\tnormY = 1;\n\t\t\tbreak;\n\t\tcase \"bottom_center\":\n\t\t\tnormX = .5;\n\t\t\tnormY = 1;\n\t\t\tbreak;\n\t\tcase \"bottom_right\":\n\t\t\tnormX = 1;\n\t\t\tnormY = 1;\n\t\t\tbreak;\n\t\tcase \"top_left\":\n\t\t\tnormX = 0;\n\t\t\tnormY = 0;\n\t\t\tbreak;\n\t\tcase \"top_center\":\n\t\t\tnormX = .5;\n\t\t\tnormY = 0;\n\t\t\tbreak;\n\t\tcase \"top_right\":\n\t\t\tnormX = 1;\n\t\t\tnormY = 0;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tnormX = .5;\n\t\t\tnormY = .5;\n\t\t\tbreak;\n\t}\n\treturn {\n\t\tpx: (normX - .5) * bbox.width + config.offsetX,\n\t\tpy: (normY - .5) * bbox.height + config.offsetY\n\t};\n}\n/**\n* Computes leading displacement per line based on lineAnchor:\n*\n* @param lineIndex 0-based index of current line\n* @param lineCount Total lines in paragraph\n* @param lineSpacing Additional leading in pixels\n* @param lineAnchor Pivot line anchor in [0, 1]\n* @returns Y displacement in pixels\n*/\nfunction computeLineLeadingDisplacement(lineIndex, lineCount, lineSpacing, lineAnchor = 0) {\n\tif (lineSpacing === 0 || lineCount <= 1) return 0;\n\treturn (lineIndex - lineAnchor * (lineCount - 1)) * lineSpacing;\n}\n/**\n* Evaluates an Expression Selector formula safely in a sandboxed numeric scope.\n*\n* @param expression Formula string (e.g. \"Math.sin(time * 4 + textIndex * 0.2)\")\n* @param ctx Glyph evaluation context\n* @returns Numeric selector weight clamped to [-1, 1]\n*/\nfunction evaluateExpressionSelector(expression, ctx) {\n\ttry {\n\t\tconst scope = {\n\t\t\ttextIndex: ctx.charIndex,\n\t\t\ttextTotal: Math.max(1, ctx.totalChars),\n\t\t\twordIndex: ctx.wordIndex,\n\t\t\twordTotal: Math.max(1, ctx.totalWords),\n\t\t\tlineIndex: ctx.lineIndex,\n\t\t\tlineTotal: Math.max(1, ctx.totalLines),\n\t\t\ttime: ctx.time,\n\t\t\tframe: ctx.frame,\n\t\t\tfps: ctx.fps,\n\t\t\tsin: Math.sin,\n\t\t\tcos: Math.cos,\n\t\t\ttan: Math.tan,\n\t\t\texp: Math.exp,\n\t\t\tlog: Math.log,\n\t\t\tabs: Math.abs,\n\t\t\tmin: Math.min,\n\t\t\tmax: Math.max,\n\t\t\tsqrt: Math.sqrt,\n\t\t\tpow: Math.pow,\n\t\t\tfloor: Math.floor,\n\t\t\tceil: Math.ceil,\n\t\t\tround: Math.round,\n\t\t\tPI: Math.PI,\n\t\t\tclamp: (v, lo, hi) => Math.max(lo, Math.min(hi, v)),\n\t\t\tnoise: (seed) => {\n\t\t\t\tconst n = Math.sin(seed * 12.9898 + ctx.frame * .1) * 43758.5453;\n\t\t\t\treturn (n - Math.floor(n)) * 2 - 1;\n\t\t\t},\n\t\t\tsignals: ctx.signals ?? {}\n\t\t};\n\t\tconst keys = Object.keys(scope);\n\t\tconst values = Object.values(scope);\n\t\tconst fn = new Function(...keys, `return (${expression});`);\n\t\tconst result = Number(fn(...values));\n\t\treturn Number.isFinite(result) ? Math.max(-1, Math.min(1, result)) : 0;\n\t} catch {\n\t\treturn 0;\n\t}\n}\n/**\n* Evaluates 3D Volumetric Formation parametric coordinates.\n*/\nfunction evaluateVolumetricFormation(glyphIndex, totalGlyphs, config) {\n\tconst n = Math.max(1, totalGlyphs);\n\tconst norm = n > 1 ? glyphIndex / (n - 1) : 0;\n\tconst totalAngleRad = config.totalAngle * Math.PI / 180;\n\tconst phi = norm * totalAngleRad;\n\tlet x = 0;\n\tlet y = 0;\n\tlet z$1 = 0;\n\tlet rotX = 0;\n\tlet rotY = 0;\n\tlet rotZ = 0;\n\tlet depthOpacity = 1;\n\tswitch (config.mode) {\n\t\tcase \"cylinder\": {\n\t\t\tconst theta = config.totalAngle < 360 ? (norm - .5) * totalAngleRad : phi;\n\t\t\tif (config.axis === \"y\") {\n\t\t\t\tx = config.radius * Math.sin(theta);\n\t\t\t\tz$1 = config.radius * Math.cos(theta) - config.radius;\n\t\t\t\trotY = theta * 180 / Math.PI;\n\t\t\t} else if (config.axis === \"x\") {\n\t\t\t\ty = config.radius * Math.sin(theta);\n\t\t\t\tz$1 = config.radius * Math.cos(theta) - config.radius;\n\t\t\t\trotX = theta * 180 / Math.PI;\n\t\t\t} else {\n\t\t\t\tx = config.radius * Math.sin(theta);\n\t\t\t\ty = config.radius * Math.cos(theta);\n\t\t\t\trotZ = theta * 180 / Math.PI;\n\t\t\t}\n\t\t\tconst facing = Math.cos(theta);\n\t\t\tdepthOpacity = Math.max(.25, (facing + 1) * .5);\n\t\t\tbreak;\n\t\t}\n\t\tcase \"vortex\": {\n\t\t\tconst spiralPhi = -Math.PI / 2 + phi;\n\t\t\tconst r = config.radius * (1 - norm * .35);\n\t\t\tx = r * Math.cos(spiralPhi);\n\t\t\ty = r * Math.sin(spiralPhi);\n\t\t\tz$1 = -glyphIndex * config.pitch || 0;\n\t\t\tconst dr = -.35 * config.radius / (totalAngleRad || 1);\n\t\t\tconst dx = dr * Math.cos(spiralPhi) - r * Math.sin(spiralPhi);\n\t\t\tconst dy = dr * Math.sin(spiralPhi) + r * Math.cos(spiralPhi);\n\t\t\trotZ = Math.atan2(dy, dx) * 180 / Math.PI;\n\t\t\tdepthOpacity = Math.max(.65, 1 - norm * .35);\n\t\t\tbreak;\n\t\t}\n\t\tcase \"helix\":\n\t\t\tif (config.axis === \"x\") {\n\t\t\t\tconst pitchX = config.pitch > 10 ? config.pitch : 28;\n\t\t\t\tx = (glyphIndex - (n - 1) / 2) * pitchX;\n\t\t\t\ty = config.radius * Math.sin(phi);\n\t\t\t\tz$1 = config.radius * Math.cos(phi) - config.radius;\n\t\t\t\trotX = Math.sin(phi) * 22;\n\t\t\t\tdepthOpacity = .75 + .25 * ((Math.cos(phi) + 1) * .5);\n\t\t\t} else {\n\t\t\t\tconst theta = (norm - .5) * totalAngleRad;\n\t\t\t\tx = config.radius * Math.sin(theta);\n\t\t\t\ty = (glyphIndex - (n - 1) / 2) * config.pitch;\n\t\t\t\tz$1 = config.radius * Math.cos(theta) - config.radius;\n\t\t\t\trotY = theta * 180 / Math.PI;\n\t\t\t\tconst facing = Math.cos(theta);\n\t\t\t\tdepthOpacity = Math.max(.65, (facing + 1) * .5);\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tz$1 = 0;\n\t\t\tbreak;\n\t}\n\tconst perspective = Math.max(100, config.perspective ?? 1200);\n\tconst depthDist = perspective - z$1;\n\tconst scaleMult = depthDist > 1 ? perspective / depthDist : 1;\n\treturn {\n\t\tx: x * scaleMult,\n\t\ty: y * scaleMult,\n\t\tz: z$1,\n\t\trotX,\n\t\trotY,\n\t\trotZ,\n\t\tscaleMult: Math.max(.1, scaleMult),\n\t\tdepthOpacity\n\t};\n}\n/**\n* Evaluates infinite kinetic marquee translation and snapping.\n*/\nfunction evaluateMarqueeOffset(baseX, containerWidth, contentWidth, config, elapsedSec) {\n\tconst totalSpan = (containerWidth > 0 ? Math.max(containerWidth, contentWidth) : contentWidth) + config.repeatGap;\n\tif (totalSpan <= 0) return baseX;\n\tlet travel = config.velocity * elapsedSec;\n\tif (config.snap?.enabled) {\n\t\tconst targetPos = (config.snap.stopIndex ?? 0) * (config.snap.granularity === \"character\" ? 40 : 120);\n\t\tconst decelFactor = Math.min(1, elapsedSec * 1.5);\n\t\ttravel = travel * (1 - decelFactor) + targetPos * decelFactor;\n\t}\n\tif (config.direction === \"right\" || config.direction === \"down\") travel = -travel;\n\tif (config.loop) {\n\t\tconst wrapped = (baseX - travel) % totalSpan;\n\t\treturn wrapped < -contentWidth ? wrapped + totalSpan : wrapped;\n\t}\n\treturn baseX - travel;\n}\n/**\n* Samples audio FFT frequency bin and computes scale factor for Audio Spectrum Typography.\n*/\nfunction sampleAudioSpectrumScale(glyphIndex, totalGlyphs, config, signals, frame, fps) {\n\tconst n = Math.max(1, totalGlyphs);\n\tconst norm = n > 1 ? glyphIndex / (n - 1) : .5;\n\tconst minFreq = Math.max(20, config.minFreqHz);\n\tconst targetFreq = minFreq * (Math.max(minFreq + 100, config.maxFreqHz) / minFreq) ** norm;\n\tlet magnitude = 0;\n\tif (signals) {\n\t\tconst sig = signals[config.signalChannel];\n\t\tif (typeof sig === \"number\") magnitude = sig;\n\t\telse if (typeof sig === \"function\") magnitude = Number(sig(frame, fps, targetFreq)) || 0;\n\t\telse if (typeof sig === \"object\" && sig !== null) {\n\t\t\tconst sObj = sig;\n\t\t\tif (typeof sObj.get === \"function\") magnitude = Number(sObj.get({\n\t\t\t\tframe,\n\t\t\t\tfps,\n\t\t\t\tfreq: targetFreq\n\t\t\t})) || 0;\n\t\t\telse if (Array.isArray(sObj.samples) || ArrayBuffer.isView(sObj.samples)) {\n\t\t\t\tconst arr = sObj.samples;\n\t\t\t\tconst binIdx = Math.floor(norm * (arr.length - 1));\n\t\t\t\tmagnitude = Number(arr[binIdx]) || 0;\n\t\t\t}\n\t\t}\n\t}\n\tconst clampedMag = Math.max(0, Math.min(1, magnitude));\n\treturn config.minScale + clampedMag * (config.maxScale - config.minScale);\n}\n\n//#endregion\n//#region src/program/text-animations/path.ts\n/**\n* Evaluates a point on a cubic Bezier curve at parameter t in [0, 1].\n*/\nfunction evaluateCubicBezier(segment, t) {\n\tconst u = 1 - t;\n\tconst tt = t * t;\n\tconst uu = u * u;\n\tconst uuu = uu * u;\n\tconst ttt = tt * t;\n\treturn {\n\t\tx: uuu * segment.p0.x + 3 * uu * t * segment.p1.x + 3 * u * tt * segment.p2.x + ttt * segment.p3.x,\n\t\ty: uuu * segment.p0.y + 3 * uu * t * segment.p1.y + 3 * u * tt * segment.p2.y + ttt * segment.p3.y\n\t};\n}\n/**\n* Evaluates the first derivative (tangent velocity vector) of a cubic Bezier curve at parameter t.\n*/\nfunction evaluateCubicBezierDerivative(segment, t) {\n\tconst u = 1 - t;\n\treturn {\n\t\tx: 3 * u * u * (segment.p1.x - segment.p0.x) + 6 * u * t * (segment.p2.x - segment.p1.x) + 3 * t * t * (segment.p3.x - segment.p2.x),\n\t\ty: 3 * u * u * (segment.p1.y - segment.p0.y) + 6 * u * t * (segment.p2.y - segment.p1.y) + 3 * t * t * (segment.p3.y - segment.p2.y)\n\t};\n}\n/**\n* Generates an arc-length parameterization lookup table (LUT) for a cubic Bezier segment.\n* Ensures glyphs travel with uniform speed and do not bunch up on tight curve bends.\n*/\nfunction generateArcLengthLUT(segment, samples = 100) {\n\tconst lut = [{\n\t\tdistance: 0,\n\t\tt: 0\n\t}];\n\tlet accumulatedDist = 0;\n\tlet prevPoint = segment.p0;\n\tfor (let i = 1; i <= samples; i++) {\n\t\tconst t = i / samples;\n\t\tconst currentPoint = evaluateCubicBezier(segment, t);\n\t\tconst dx = currentPoint.x - prevPoint.x;\n\t\tconst dy = currentPoint.y - prevPoint.y;\n\t\taccumulatedDist += Math.hypot(dx, dy);\n\t\tlut.push({\n\t\t\tdistance: accumulatedDist,\n\t\t\tt\n\t\t});\n\t\tprevPoint = currentPoint;\n\t}\n\treturn {\n\t\tlut,\n\t\ttotalLength: accumulatedDist\n\t};\n}\n/**\n* Maps a distance along the curve (in pixels) to normalized curve parameter t via binary search on the LUT.\n*/\nfunction distanceToCurveParameter(lut, distance, totalLength) {\n\tif (distance <= 0) return 0;\n\tif (distance >= totalLength) return 1;\n\tlet low = 0;\n\tlet high = lut.length - 1;\n\twhile (low <= high) {\n\t\tconst mid = low + high >> 1;\n\t\tif (lut[mid].distance < distance) low = mid + 1;\n\t\telse high = mid - 1;\n\t}\n\tconst index = Math.max(1, Math.min(low, lut.length - 1));\n\tconst prev = lut[index - 1];\n\tconst curr = lut[index];\n\tconst segmentDist = curr.distance - prev.distance;\n\tif (segmentDist <= 1e-6) return prev.t;\n\tconst ratio = (distance - prev.distance) / segmentDist;\n\treturn prev.t + ratio * (curr.t - prev.t);\n}\n/**\n* Samples position and baseline tangent orientation angle along a curve at distance `dist`.\n*/\nfunction sampleCurveGeometry(segment, lut, totalLength, distance) {\n\tconst t = distanceToCurveParameter(lut, distance, totalLength);\n\tconst pos = evaluateCubicBezier(segment, t);\n\tconst deriv = evaluateCubicBezierDerivative(segment, t);\n\tconst length = Math.hypot(deriv.x, deriv.y);\n\tconst nx = length > 1e-6 ? -deriv.y / length : 0;\n\tconst ny = length > 1e-6 ? deriv.x / length : 1;\n\treturn {\n\t\tposition: pos,\n\t\ttangentAngleDeg: Math.atan2(deriv.y, deriv.x) * 180 / Math.PI,\n\t\tnormal: {\n\t\t\tx: nx,\n\t\t\ty: ny\n\t\t}\n\t};\n}\n/**\n* Builds a cumulative Arc-Length LUT across a chain of Cubic Bezier segments.\n*/\nfunction buildPathLUT(segments, samplesPerSegment = 50) {\n\tif (segments.length === 0) return {\n\t\ttotalLength: 0,\n\t\tentries: [{\n\t\t\tdistance: 0,\n\t\t\tsegmentIndex: 0,\n\t\t\tt: 0\n\t\t}],\n\t\tsegments: []\n\t};\n\tconst segLuts = [];\n\tconst entries = [];\n\tlet accumulatedDist = 0;\n\tfor (let segIdx = 0; segIdx < segments.length; segIdx++) {\n\t\tconst seg = segments[segIdx];\n\t\tconst { lut: segLut, totalLength: segLength } = generateArcLengthLUT(seg, samplesPerSegment);\n\t\tsegLuts.push({\n\t\t\tsegmentIndex: segIdx,\n\t\t\tstartDistance: accumulatedDist,\n\t\t\tlength: segLength,\n\t\t\tlut: segLut\n\t\t});\n\t\tfor (let i = 0; i < segLut.length; i++) entries.push({\n\t\t\tdistance: accumulatedDist + segLut[i].distance,\n\t\t\tsegmentIndex: segIdx,\n\t\t\tt: segLut[i].t\n\t\t});\n\t\taccumulatedDist += segLength;\n\t}\n\treturn {\n\t\ttotalLength: accumulatedDist,\n\t\tentries,\n\t\tsegments: segLuts\n\t};\n}\n/**\n* Samples position, tangent angle, and normal across a chain of Cubic Bezier segments.\n*/\nfunction samplePathChainGeometry(segments, chainLUT, distance) {\n\tif (segments.length === 0) return {\n\t\tposition: {\n\t\t\tx: 0,\n\t\t\ty: 0\n\t\t},\n\t\ttangentAngleDeg: 0,\n\t\tnormal: {\n\t\t\tx: 0,\n\t\t\ty: 1\n\t\t}\n\t};\n\tconst totalLength = chainLUT.totalLength;\n\tif (distance <= 0) {\n\t\tconst seg = segments[0];\n\t\tconst deriv$1 = evaluateCubicBezierDerivative(seg, 0);\n\t\tconst length$1 = Math.hypot(deriv$1.x, deriv$1.y);\n\t\tconst ux = length$1 > 1e-6 ? deriv$1.x / length$1 : 1;\n\t\tconst uy = length$1 > 1e-6 ? deriv$1.y / length$1 : 0;\n\t\tconst pos$1 = {\n\t\t\tx: seg.p0.x + ux * distance,\n\t\t\ty: seg.p0.y + uy * distance\n\t\t};\n\t\tconst nx$1 = length$1 > 1e-6 ? -deriv$1.y / length$1 : 0;\n\t\tconst ny$1 = length$1 > 1e-6 ? deriv$1.x / length$1 : 1;\n\t\treturn {\n\t\t\tposition: pos$1,\n\t\t\ttangentAngleDeg: Math.atan2(deriv$1.y, deriv$1.x) * 180 / Math.PI,\n\t\t\tnormal: {\n\t\t\t\tx: nx$1,\n\t\t\t\ty: ny$1\n\t\t\t}\n\t\t};\n\t}\n\tif (distance >= totalLength) {\n\t\tconst lastSeg = segments[segments.length - 1];\n\t\tconst deriv$1 = evaluateCubicBezierDerivative(lastSeg, 1);\n\t\tconst length$1 = Math.hypot(deriv$1.x, deriv$1.y);\n\t\tconst ux = length$1 > 1e-6 ? deriv$1.x / length$1 : 1;\n\t\tconst uy = length$1 > 1e-6 ? deriv$1.y / length$1 : 0;\n\t\tconst overflow = distance - totalLength;\n\t\tconst pos$1 = {\n\t\t\tx: lastSeg.p3.x + ux * overflow,\n\t\t\ty: lastSeg.p3.y + uy * overflow\n\t\t};\n\t\tconst nx$1 = length$1 > 1e-6 ? -deriv$1.y / length$1 : 0;\n\t\tconst ny$1 = length$1 > 1e-6 ? deriv$1.x / length$1 : 1;\n\t\treturn {\n\t\t\tposition: pos$1,\n\t\t\ttangentAngleDeg: Math.atan2(deriv$1.y, deriv$1.x) * 180 / Math.PI,\n\t\t\tnormal: {\n\t\t\t\tx: nx$1,\n\t\t\t\ty: ny$1\n\t\t\t}\n\t\t};\n\t}\n\tlet segIdx = 0;\n\tlet t = 0;\n\tif (chainLUT.segments && chainLUT.segments.length > 0) {\n\t\tlet low = 0;\n\t\tlet high = chainLUT.segments.length - 1;\n\t\twhile (low <= high) {\n\t\t\tconst mid = low + high >> 1;\n\t\t\tconst segLUT$1 = chainLUT.segments[mid];\n\t\t\tif (distance < segLUT$1.startDistance) high = mid - 1;\n\t\t\telse if (distance > segLUT$1.startDistance + segLUT$1.length) low = mid + 1;\n\t\t\telse {\n\t\t\t\tlow = mid;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tconst sIdx = Math.max(0, Math.min(low, chainLUT.segments.length - 1));\n\t\tconst segLUT = chainLUT.segments[sIdx];\n\t\tsegIdx = segLUT.segmentIndex;\n\t\tconst localDist = distance - segLUT.startDistance;\n\t\tt = distanceToCurveParameter(segLUT.lut, localDist, segLUT.length);\n\t} else {\n\t\tlet low = 0;\n\t\tlet high = chainLUT.entries.length - 1;\n\t\twhile (low <= high) {\n\t\t\tconst mid = low + high >> 1;\n\t\t\tif (chainLUT.entries[mid].distance < distance) low = mid + 1;\n\t\t\telse high = mid - 1;\n\t\t}\n\t\tconst index = Math.max(1, Math.min(low, chainLUT.entries.length - 1));\n\t\tconst prev = chainLUT.entries[index - 1];\n\t\tconst curr = chainLUT.entries[index];\n\t\tconst segmentDist = curr.distance - prev.distance;\n\t\tconst ratio = segmentDist > 1e-6 ? (distance - prev.distance) / segmentDist : 0;\n\t\tsegIdx = curr.segmentIndex;\n\t\tt = prev.segmentIndex === curr.segmentIndex ? prev.t + ratio * (curr.t - prev.t) : curr.t;\n\t}\n\tconst segment = segments[segIdx] ?? segments[0];\n\tconst pos = evaluateCubicBezier(segment, t);\n\tconst deriv = evaluateCubicBezierDerivative(segment, t);\n\tconst length = Math.hypot(deriv.x, deriv.y);\n\tconst nx = length > 1e-6 ? -deriv.y / length : 0;\n\tconst ny = length > 1e-6 ? deriv.x / length : 1;\n\treturn {\n\t\tposition: pos,\n\t\ttangentAngleDeg: Math.atan2(deriv.y, deriv.x) * 180 / Math.PI,\n\t\tnormal: {\n\t\t\tx: nx,\n\t\t\ty: ny\n\t\t}\n\t};\n}\n/**\n* Converts an ellipse arc into cubic Bezier segments (up to 90 degrees per segment).\n*/\nfunction ellipseToCubicBeziers(cx, cy, rx, ry, startAngleDeg = 0, endAngleDeg = 360) {\n\tconst startRad = startAngleDeg * Math.PI / 180;\n\tconst totalSweep = endAngleDeg * Math.PI / 180 - startRad;\n\tconst numSegments = Math.max(1, Math.ceil(Math.abs(totalSweep) / (Math.PI / 2)));\n\tconst sweepStep = totalSweep / numSegments;\n\tconst segments = [];\n\tfor (let i = 0; i < numSegments; i++) {\n\t\tconst a0 = startRad + i * sweepStep;\n\t\tconst a1 = a0 + sweepStep;\n\t\tconst halfSweep = sweepStep / 2;\n\t\tconst k = 4 / 3 * Math.tan(halfSweep / 2);\n\t\tconst cos0 = Math.cos(a0);\n\t\tconst sin0 = Math.sin(a0);\n\t\tconst cos1 = Math.cos(a1);\n\t\tconst sin1 = Math.sin(a1);\n\t\tconst p0 = {\n\t\t\tx: cx + rx * cos0,\n\t\t\ty: cy + ry * sin0\n\t\t};\n\t\tconst p1 = {\n\t\t\tx: p0.x - k * rx * sin0,\n\t\t\ty: p0.y + k * ry * cos0\n\t\t};\n\t\tconst p3 = {\n\t\t\tx: cx + rx * cos1,\n\t\t\ty: cy + ry * sin1\n\t\t};\n\t\tconst p2 = {\n\t\t\tx: p3.x + k * rx * sin1,\n\t\t\ty: p3.y - k * ry * cos1\n\t\t};\n\t\tsegments.push({\n\t\t\tp0,\n\t\t\tp1,\n\t\t\tp2,\n\t\t\tp3\n\t\t});\n\t}\n\treturn segments;\n}\n/**\n* Converts a sinusoidal wave into cubic Bezier segments per half-cycle.\n*/\nfunction waveToCubicBeziers(startX, startY, length, amplitude, frequency, phaseDeg = 0) {\n\tconst phaseRad = phaseDeg * Math.PI / 180;\n\tconst totalCycles = frequency < .1 && frequency * length >= .25 ? frequency * length : Math.max(.5, frequency);\n\tconst halfCycles = Math.max(1, Math.round(totalCycles * 2));\n\tconst dx = length / halfCycles;\n\tconst segments = [];\n\tfor (let i = 0; i < halfCycles; i++) {\n\t\tconst t0 = i / halfCycles * (2 * Math.PI * totalCycles) + phaseRad;\n\t\tconst t1 = (i + 1) / halfCycles * (2 * Math.PI * totalCycles) + phaseRad;\n\t\tconst x0 = startX + i * dx;\n\t\tconst x3 = startX + (i + 1) * dx;\n\t\tconst y0 = startY + amplitude * Math.sin(t0);\n\t\tconst y3 = startY + amplitude * Math.sin(t1);\n\t\tconst slope0 = amplitude * Math.cos(t0) * (Math.PI / 3);\n\t\tconst slope1 = amplitude * Math.cos(t1) * (Math.PI / 3);\n\t\tconst p0 = {\n\t\t\tx: x0,\n\t\t\ty: y0\n\t\t};\n\t\tconst p1 = {\n\t\t\tx: x0 + dx / 3,\n\t\t\ty: y0 + slope0\n\t\t};\n\t\tconst p2 = {\n\t\t\tx: x3 - dx / 3,\n\t\t\ty: y3 - slope1\n\t\t};\n\t\tconst p3 = {\n\t\t\tx: x3,\n\t\t\ty: y3\n\t\t};\n\t\tsegments.push({\n\t\t\tp0,\n\t\t\tp1,\n\t\t\tp2,\n\t\t\tp3\n\t\t});\n\t}\n\treturn segments;\n}\n/**\n* An SVG elliptical arc (endpoint form, SVG 1.1 F.6.5) as cubic Bezier\n* segments of at most 90° each.\n*/\nfunction svgArcToCubicBeziers(x1, y1, rxIn, ryIn, rotationDeg, largeArc, sweep, x2, y2) {\n\tif (x1 === x2 && y1 === y2) return [];\n\tlet rx = Math.abs(rxIn);\n\tlet ry = Math.abs(ryIn);\n\tif (rx === 0 || ry === 0) return [{\n\t\tp0: {\n\t\t\tx: x1,\n\t\t\ty: y1\n\t\t},\n\t\tp1: {\n\t\t\tx: x1 + (x2 - x1) / 3,\n\t\t\ty: y1 + (y2 - y1) / 3\n\t\t},\n\t\tp2: {\n\t\t\tx: x1 + 2 * (x2 - x1) / 3,\n\t\t\ty: y1 + 2 * (y2 - y1) / 3\n\t\t},\n\t\tp3: {\n\t\t\tx: x2,\n\t\t\ty: y2\n\t\t}\n\t}];\n\tconst phi = rotationDeg * Math.PI / 180;\n\tconst cosPhi = Math.cos(phi);\n\tconst sinPhi = Math.sin(phi);\n\tconst dx = (x1 - x2) / 2;\n\tconst dy = (y1 - y2) / 2;\n\tconst x1p = cosPhi * dx + sinPhi * dy;\n\tconst y1p = -sinPhi * dx + cosPhi * dy;\n\tconst lambda = x1p * x1p / (rx * rx) + y1p * y1p / (ry * ry);\n\tif (lambda > 1) {\n\t\trx *= Math.sqrt(lambda);\n\t\try *= Math.sqrt(lambda);\n\t}\n\tconst num = rx * rx * ry * ry - rx * rx * y1p * y1p - ry * ry * x1p * x1p;\n\tconst den = rx * rx * y1p * y1p + ry * ry * x1p * x1p;\n\tconst coef = (largeArc !== sweep ? 1 : -1) * Math.sqrt(Math.max(0, num / den));\n\tconst cxp = coef * rx * y1p / ry;\n\tconst cyp = -coef * ry * x1p / rx;\n\tconst cx = cosPhi * cxp - sinPhi * cyp + (x1 + x2) / 2;\n\tconst cy = sinPhi * cxp + cosPhi * cyp + (y1 + y2) / 2;\n\tconst angle = (ux, uy, vx, vy) => Math.atan2(ux * vy - uy * vx, ux * vx + uy * vy);\n\tconst theta1 = angle(1, 0, (x1p - cxp) / rx, (y1p - cyp) / ry);\n\tlet delta = angle((x1p - cxp) / rx, (y1p - cyp) / ry, (-x1p - cxp) / rx, (-y1p - cyp) / ry);\n\tif (!sweep && delta > 0) delta -= 2 * Math.PI;\n\tif (sweep && delta < 0) delta += 2 * Math.PI;\n\tconst n = Math.max(1, Math.ceil(Math.abs(delta) / (Math.PI / 2)));\n\tconst step = delta / n;\n\tconst k = 4 / 3 * Math.tan(step / 4);\n\tconst point = (a) => ({\n\t\tx: cx + rx * Math.cos(a) * cosPhi - ry * Math.sin(a) * sinPhi,\n\t\ty: cy + rx * Math.cos(a) * sinPhi + ry * Math.sin(a) * cosPhi\n\t});\n\tconst tangent = (a) => ({\n\t\tx: -rx * Math.sin(a) * cosPhi - ry * Math.cos(a) * sinPhi,\n\t\ty: -rx * Math.sin(a) * sinPhi + ry * Math.cos(a) * cosPhi\n\t});\n\tconst segments = [];\n\tfor (let s = 0; s < n; s++) {\n\t\tconst a0 = theta1 + s * step;\n\t\tconst a1 = a0 + step;\n\t\tconst p0 = point(a0);\n\t\tconst p3 = point(a1);\n\t\tconst t0 = tangent(a0);\n\t\tconst t1 = tangent(a1);\n\t\tsegments.push({\n\t\t\tp0,\n\t\t\tp1: {\n\t\t\t\tx: p0.x + k * t0.x,\n\t\t\t\ty: p0.y + k * t0.y\n\t\t\t},\n\t\t\tp2: {\n\t\t\t\tx: p3.x - k * t1.x,\n\t\t\t\ty: p3.y - k * t1.y\n\t\t\t},\n\t\t\tp3\n\t\t});\n\t}\n\tsegments[segments.length - 1].p3 = {\n\t\tx: x2,\n\t\ty: y2\n\t};\n\treturn segments;\n}\n/**\n* Converts SVG path data string into a chain of Cubic Bezier segments.\n*/\nfunction parseSvgPathToCubicBeziers(d) {\n\tconst segments = [];\n\tconst tokens = d.match(/[a-df-z]|[-+]?(?:\\d*\\.\\d+|\\d+)(?:[eE][-+]?\\d+)?/gi);\n\tif (!tokens || tokens.length === 0) return segments;\n\tlet currentX = 0;\n\tlet currentY = 0;\n\tlet startX = 0;\n\tlet startY = 0;\n\tlet lastControlX = 0;\n\tlet lastControlY = 0;\n\tlet lastCommand = \"\";\n\tlet i = 0;\n\tconst nextNum = () => {\n\t\tif (i >= tokens.length) return 0;\n\t\treturn Number.parseFloat(tokens[i++]);\n\t};\n\twhile (i < tokens.length) {\n\t\tconst token = tokens[i++];\n\t\tconst isCommand = /^[a-df-z]$/i.test(token);\n\t\tconst cmd = isCommand ? token : lastCommand;\n\t\tif (!isCommand) i--;\n\t\tswitch (cmd) {\n\t\t\tcase \"M\":\n\t\t\t\tcurrentX = nextNum();\n\t\t\t\tcurrentY = nextNum();\n\t\t\t\tstartX = currentX;\n\t\t\t\tstartY = currentY;\n\t\t\t\tlastCommand = \"L\";\n\t\t\t\tbreak;\n\t\t\tcase \"m\":\n\t\t\t\tcurrentX += nextNum();\n\t\t\t\tcurrentY += nextNum();\n\t\t\t\tstartX = currentX;\n\t\t\t\tstartY = currentY;\n\t\t\t\tlastCommand = \"l\";\n\t\t\t\tbreak;\n\t\t\tcase \"L\": {\n\t\t\t\tconst x = nextNum();\n\t\t\t\tconst y = nextNum();\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: currentX + (x - currentX) / 3,\n\t\t\t\t\t\ty: currentY + (y - currentY) / 3\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: currentX + 2 * (x - currentX) / 3,\n\t\t\t\t\t\ty: currentY + 2 * (y - currentY) / 3\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tcurrentX = x;\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastCommand = \"L\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"l\": {\n\t\t\t\tconst dx = nextNum();\n\t\t\t\tconst dy = nextNum();\n\t\t\t\tconst x = currentX + dx;\n\t\t\t\tconst y = currentY + dy;\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: currentX + dx / 3,\n\t\t\t\t\t\ty: currentY + dy / 3\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: currentX + 2 * dx / 3,\n\t\t\t\t\t\ty: currentY + 2 * dy / 3\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tcurrentX = x;\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastCommand = \"l\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"H\": {\n\t\t\t\tconst x = nextNum();\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: currentX + (x - currentX) / 3,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: currentX + 2 * (x - currentX) / 3,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tcurrentX = x;\n\t\t\t\tlastCommand = \"H\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"h\": {\n\t\t\t\tconst dx = nextNum();\n\t\t\t\tconst x = currentX + dx;\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: currentX + dx / 3,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: currentX + 2 * dx / 3,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tcurrentX = x;\n\t\t\t\tlastCommand = \"h\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"V\": {\n\t\t\t\tconst y = nextNum();\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY + (y - currentY) / 3\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY + 2 * (y - currentY) / 3\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastCommand = \"V\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"v\": {\n\t\t\t\tconst dy = nextNum();\n\t\t\t\tconst y = currentY + dy;\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY + dy / 3\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY + 2 * dy / 3\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastCommand = \"v\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"C\": {\n\t\t\t\tconst x1 = nextNum();\n\t\t\t\tconst y1 = nextNum();\n\t\t\t\tconst x2 = nextNum();\n\t\t\t\tconst y2 = nextNum();\n\t\t\t\tconst x = nextNum();\n\t\t\t\tconst y = nextNum();\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: x1,\n\t\t\t\t\t\ty: y1\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: x2,\n\t\t\t\t\t\ty: y2\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tlastControlX = x2;\n\t\t\t\tlastControlY = y2;\n\t\t\t\tcurrentX = x;\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastCommand = \"C\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"c\": {\n\t\t\t\tconst dx1 = nextNum();\n\t\t\t\tconst dy1 = nextNum();\n\t\t\t\tconst dx2 = nextNum();\n\t\t\t\tconst dy2 = nextNum();\n\t\t\t\tconst dx = nextNum();\n\t\t\t\tconst dy = nextNum();\n\t\t\t\tconst x1 = currentX + dx1;\n\t\t\t\tconst y1 = currentY + dy1;\n\t\t\t\tconst x2 = currentX + dx2;\n\t\t\t\tconst y2 = currentY + dy2;\n\t\t\t\tconst x = currentX + dx;\n\t\t\t\tconst y = currentY + dy;\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: x1,\n\t\t\t\t\t\ty: y1\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: x2,\n\t\t\t\t\t\ty: y2\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tlastControlX = x2;\n\t\t\t\tlastControlY = y2;\n\t\t\t\tcurrentX = x;\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastCommand = \"c\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"S\":\n\t\t\tcase \"s\": {\n\t\t\t\tconst isRel = cmd === \"s\";\n\t\t\t\tconst dx2 = nextNum();\n\t\t\t\tconst dy2 = nextNum();\n\t\t\t\tconst dx = nextNum();\n\t\t\t\tconst dy = nextNum();\n\t\t\t\tconst x2 = isRel ? currentX + dx2 : dx2;\n\t\t\t\tconst y2 = isRel ? currentY + dy2 : dy2;\n\t\t\t\tconst x = isRel ? currentX + dx : dx;\n\t\t\t\tconst y = isRel ? currentY + dy : dy;\n\t\t\t\tlet x1 = currentX;\n\t\t\t\tlet y1 = currentY;\n\t\t\t\tif (/^[cs]$/i.test(lastCommand)) {\n\t\t\t\t\tx1 = 2 * currentX - lastControlX;\n\t\t\t\t\ty1 = 2 * currentY - lastControlY;\n\t\t\t\t}\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: x1,\n\t\t\t\t\t\ty: y1\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: x2,\n\t\t\t\t\t\ty: y2\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tlastControlX = x2;\n\t\t\t\tlastControlY = y2;\n\t\t\t\tcurrentX = x;\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastCommand = cmd;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"Q\":\n\t\t\tcase \"q\": {\n\t\t\t\tconst isRel = cmd === \"q\";\n\t\t\t\tconst qx = nextNum();\n\t\t\t\tconst qy = nextNum();\n\t\t\t\tconst x = nextNum();\n\t\t\t\tconst y = nextNum();\n\t\t\t\tconst cx1 = isRel ? currentX + qx : qx;\n\t\t\t\tconst cy1 = isRel ? currentY + qy : qy;\n\t\t\t\tconst ex = isRel ? currentX + x : x;\n\t\t\t\tconst ey = isRel ? currentY + y : y;\n\t\t\t\tconst p1x = currentX + 2 / 3 * (cx1 - currentX);\n\t\t\t\tconst p1y = currentY + 2 / 3 * (cy1 - currentY);\n\t\t\t\tconst p2x = ex + 2 / 3 * (cx1 - ex);\n\t\t\t\tconst p2y = ey + 2 / 3 * (cy1 - ey);\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: p1x,\n\t\t\t\t\t\ty: p1y\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: p2x,\n\t\t\t\t\t\ty: p2y\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx: ex,\n\t\t\t\t\t\ty: ey\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tlastControlX = cx1;\n\t\t\t\tlastControlY = cy1;\n\t\t\t\tcurrentX = ex;\n\t\t\t\tcurrentY = ey;\n\t\t\t\tlastCommand = cmd;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"A\":\n\t\t\tcase \"a\": {\n\t\t\t\tconst rx = nextNum();\n\t\t\t\tconst ry = nextNum();\n\t\t\t\tconst rotation = nextNum();\n\t\t\t\tconst largeArc = nextNum() !== 0;\n\t\t\t\tconst sweep = nextNum() !== 0;\n\t\t\t\tlet x = nextNum();\n\t\t\t\tlet y = nextNum();\n\t\t\t\tif (cmd === \"a\") {\n\t\t\t\t\tx += currentX;\n\t\t\t\t\ty += currentY;\n\t\t\t\t}\n\t\t\t\tsegments.push(...svgArcToCubicBeziers(currentX, currentY, rx, ry, rotation, largeArc, sweep, x, y));\n\t\t\t\tcurrentX = x;\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastControlX = x;\n\t\t\t\tlastControlY = y;\n\t\t\t\tlastCommand = cmd;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"Z\":\n\t\t\tcase \"z\":\n\t\t\t\tif (currentX !== startX || currentY !== startY) {\n\t\t\t\t\tsegments.push({\n\t\t\t\t\t\tp0: {\n\t\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\t\ty: currentY\n\t\t\t\t\t\t},\n\t\t\t\t\t\tp1: {\n\t\t\t\t\t\t\tx: currentX + (startX - currentX) / 3,\n\t\t\t\t\t\t\ty: currentY + (startY - currentY) / 3\n\t\t\t\t\t\t},\n\t\t\t\t\t\tp2: {\n\t\t\t\t\t\t\tx: currentX + 2 * (startX - currentX) / 3,\n\t\t\t\t\t\t\ty: currentY + 2 * (startY - currentY) / 3\n\t\t\t\t\t\t},\n\t\t\t\t\t\tp3: {\n\t\t\t\t\t\t\tx: startX,\n\t\t\t\t\t\t\ty: startY\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tcurrentX = startX;\n\t\t\t\t\tcurrentY = startY;\n\t\t\t\t}\n\t\t\t\tlastCommand = cmd;\n\t\t\t\tbreak;\n\t\t\tdefault: break;\n\t\t}\n\t}\n\treturn segments;\n}\n/**\n* Universal path source converter to Cubic Bezier segments.\n*/\nfunction generatePathSegments(source) {\n\tswitch (source.type) {\n\t\tcase \"bezier\": return source.segments;\n\t\tcase \"svg\": return parseSvgPathToCubicBeziers(source.d);\n\t\tcase \"ellipse\": return ellipseToCubicBeziers(source.cx, source.cy, source.rx, source.ry, source.startAngleDeg ?? 0, source.endAngleDeg ?? 360);\n\t\tcase \"wave\": return waveToCubicBeziers(source.startX, source.startY, source.length, source.amplitude, source.frequency, source.phaseDeg ?? 0);\n\t}\n}\n\n//#endregion\n//#region src/program/text-animations/selectors.ts\n/**\n* Computes After Effects Range Selector weight for a single glyph index.\n*\n* @param index Normalized position of the glyph in the string (0.0 to 1.0)\n* @param start Start boundary (0.0 to 1.0)\n* @param end End boundary (0.0 to 1.0)\n* @param offset Window shift (-1.0 to 1.0)\n* @param shape Falloff curve\n* @param easeHigh Non-linear easing for high values\n* @param easeLow Non-linear easing for low values\n* @returns Weight in [0.0, 1.0]\n*/\nfunction computeRangeSelectorWeight(index, start, end, offset, shape, easeHigh = 0, easeLow = 0) {\n\tconst effStart = start + offset;\n\tconst effEnd = end + offset;\n\tif (effEnd <= effStart) return 0;\n\tconst relativePos = (index - effStart) / (effEnd - effStart);\n\tlet baseWeight = 0;\n\tswitch (shape) {\n\t\tcase \"square\":\n\t\t\tbaseWeight = relativePos >= 0 && relativePos <= 1 ? 1 : 0;\n\t\t\tbreak;\n\t\tcase \"ramp_up\":\n\t\t\tbaseWeight = Math.max(0, Math.min(1, relativePos));\n\t\t\tbreak;\n\t\tcase \"ramp_down\":\n\t\t\tbaseWeight = 1 - Math.max(0, Math.min(1, relativePos));\n\t\t\tbreak;\n\t\tcase \"triangle\":\n\t\t\tif (relativePos < 0 || relativePos > 1) baseWeight = 0;\n\t\t\telse if (relativePos < .5) baseWeight = relativePos * 2;\n\t\t\telse baseWeight = (1 - relativePos) * 2;\n\t\t\tbreak;\n\t\tcase \"round\":\n\t\t\tif (relativePos < 0 || relativePos > 1) baseWeight = 0;\n\t\t\telse baseWeight = .5 - .5 * Math.cos(relativePos * 2 * Math.PI);\n\t\t\tbreak;\n\t\tcase \"smooth\":\n\t\t\tif (relativePos <= 0) baseWeight = 0;\n\t\t\telse if (relativePos >= 1) baseWeight = 1;\n\t\t\telse baseWeight = relativePos * relativePos * (3 - 2 * relativePos);\n\t\t\tbreak;\n\t}\n\tif (baseWeight > 0 && baseWeight < 1) {\n\t\tif (easeHigh !== 0 && baseWeight > .5) baseWeight = .5 + .5 * ((baseWeight - .5) * 2) ** (easeHigh > 0 ? 1 + easeHigh * 3 : 1 / (1 - easeHigh * 3));\n\t\tif (easeLow !== 0 && baseWeight <= .5) baseWeight = .5 * (baseWeight * 2) ** (easeLow > 0 ? 1 + easeLow * 3 : 1 / (1 - easeLow * 3));\n\t}\n\treturn Math.max(0, Math.min(1, baseWeight));\n}\n/**\n* 1D Gradient deterministic hash noise for Wiggly Selectors.\n*/\nfunction deterministicWigglyNoise(seed, glyphIndex, phase, correlation) {\n\tconst coord = (glyphIndex * (1 - correlation) + correlation) * 12.9898 + phase + seed * 78.233;\n\tconst raw = Math.sin(coord) * 43758.5453;\n\treturn (raw - Math.floor(raw)) * 2 - 1;\n}\n/**\n* Deterministic pseudo-random number generator for seeded order shuffling.\n*/\nfunction getShuffledOrder(count, seed) {\n\tlet s = seed;\n\tconst nextRand = () => {\n\t\ts = (s * 9301 + 49297) % 233280;\n\t\treturn s / 233280;\n\t};\n\tconst arr = Array.from({ length: count }, (_, i) => i);\n\tfor (let i = arr.length - 1; i > 0; i--) {\n\t\tconst j = Math.floor(nextRand() * (i + 1));\n\t\tconst temp = arr[i];\n\t\tarr[i] = arr[j];\n\t\tarr[j] = temp;\n\t}\n\treturn arr;\n}\n/**\n* Combines consecutive selector weights using After Effects Selector Mode logic.\n*/\nfunction evaluateSelectorCombination(prevWeight, currWeight, mode) {\n\tswitch (mode) {\n\t\tcase \"add\": return Math.max(0, Math.min(1, prevWeight + currWeight));\n\t\tcase \"subtract\": return Math.max(0, Math.min(1, prevWeight - currWeight));\n\t\tcase \"intersect\": return prevWeight * currWeight;\n\t\tcase \"min\": return Math.min(prevWeight, currWeight);\n\t\tcase \"max\": return Math.max(prevWeight, currWeight);\n\t\tcase \"difference\": return Math.abs(prevWeight - currWeight);\n\t}\n}\n\n//#endregion\n//#region src/program/text-animations/typewriter.ts\nconst SCRAMBLE_POOLS = {\n\tascii: \"!@#$%^&*()_+{}[]:;<>,.?\",\n\talphanumeric: \"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\",\n\tmatrix: \"010101<>[]{}+=*~#%&!?/\\\\:;|X0123456789\",\n\tbinary: \"01\",\n\thex: \"0123456789ABCDEF\"\n};\nfunction getScramblePool(charset, customCharset) {\n\tif (charset === \"custom\" && customCharset && customCharset.length > 0) return customCharset;\n\treturn SCRAMBLE_POOLS[charset] ?? SCRAMBLE_POOLS.alphanumeric;\n}\n/**\n* Evaluates typewriter visible character count and scramble state for frame `currentFrame`.\n*/\nfunction evaluateTypewriterState(fullText, currentFrame, startFrame, durationFrames, cadence = {\n\tmode: \"human\",\n\tjitter: .35,\n\tcommaPauseMultiplier: 3,\n\tsentencePauseMultiplier: 5.5,\n\tparagraphPauseMultiplier: 7\n}, scramble = {\n\tenabled: false,\n\tcharset: \"alphanumeric\",\n\tscrambleFramesPerChar: 8,\n\thighlightProbability: .25\n}, blinkFrequency = 2, granularity = \"character\", progressOverride) {\n\tif (progressOverride === void 0 && currentFrame < startFrame) return {\n\t\tvisibleChars: 0,\n\t\tcurrentDisplayString: \"\",\n\t\tisCursorVisible: false\n\t};\n\tconst progress = progressOverride !== void 0 ? Math.max(0, Math.min(1, progressOverride)) : Math.min(1, (currentFrame - startFrame) / Math.max(1, durationFrames));\n\tconst elapsed = progressOverride !== void 0 ? progress * durationFrames : currentFrame - startFrame;\n\tconst totalChars = fullText.length;\n\tlet visibleCount = Math.floor(progress * totalChars);\n\tif (granularity === \"word\") {\n\t\tconst tokens = fullText.split(/(\\s+)/);\n\t\tconst wordIndices = [];\n\t\ttokens.forEach((t, i) => {\n\t\t\tif (t.trim().length > 0) wordIndices.push(i);\n\t\t});\n\t\tconst visibleWords = Math.min(wordIndices.length, Math.floor(progress * (wordIndices.length + 1)));\n\t\tif (visibleWords <= 0) visibleCount = 0;\n\t\telse {\n\t\t\tconst lastIdx = wordIndices[Math.min(wordIndices.length - 1, visibleWords - 1)];\n\t\t\tvisibleCount = tokens.slice(0, lastIdx + 1).join(\"\").length;\n\t\t}\n\t} else if (granularity === \"line\") {\n\t\tconst lines = fullText.split(\"\\n\");\n\t\tconst visibleLines = Math.min(lines.length, Math.floor(progress * (lines.length + 1)));\n\t\tvisibleCount = lines.slice(0, visibleLines).join(\"\\n\").length;\n\t} else if (cadence.mode === \"human\" && progress < 1) {\n\t\tlet simulatedCharIndex = 0;\n\t\tlet simulatedElapsed = 0;\n\t\tconst baseFramesPerChar = durationFrames / Math.max(1, totalChars);\n\t\tfor (let i = 0; i < totalChars; i++) {\n\t\t\tconst char = fullText[i];\n\t\t\tlet multiplier = 1;\n\t\t\tconst commaMult = cadence.commaPauseMultiplier ?? 3;\n\t\t\tconst sentenceMult = cadence.sentencePauseMultiplier ?? 5.5;\n\t\t\tconst paraMult = cadence.paragraphPauseMultiplier ?? 7;\n\t\t\tconst jitter = cadence.jitter ?? .35;\n\t\t\tif (char === \",\" || char === \";\") multiplier = commaMult;\n\t\t\telse if (char === \".\" || char === \"!\" || char === \"?\") multiplier = sentenceMult;\n\t\t\telse if (char === \"\\n\") multiplier = paraMult;\n\t\t\tconst jitterVal = 1 + Math.sin(i * 17.3 + 42) * .5 * jitter;\n\t\t\tconst charDuration = baseFramesPerChar * multiplier * jitterVal;\n\t\t\tsimulatedElapsed += charDuration;\n\t\t\tif (simulatedElapsed <= elapsed) simulatedCharIndex = i + 1;\n\t\t\telse break;\n\t\t}\n\t\tvisibleCount = Math.min(totalChars, simulatedCharIndex);\n\t}\n\tlet displayStr = fullText.slice(0, visibleCount);\n\tif (scramble.enabled && visibleCount < totalChars && visibleCount > 0) {\n\t\tconst pool = getScramblePool(scramble.charset, scramble.customCharset);\n\t\tconst trailCount = Math.min(visibleCount, Math.max(1, scramble.scrambleFramesPerChar > 4 ? 3 : 2));\n\t\tlet scrambledTail = \"\";\n\t\tfor (let t = 0; t < trailCount; t++) {\n\t\t\tconst idx = Math.floor(Math.abs(Math.sin(currentFrame * 7 + t * 13)) * pool.length) % pool.length;\n\t\t\tscrambledTail += pool[idx];\n\t\t}\n\t\tdisplayStr = displayStr.slice(0, displayStr.length - trailCount) + scrambledTail;\n\t}\n\tlet isCursorVisible = true;\n\tif (blinkFrequency > 0) {\n\t\tconst halfPeriodFrames = Math.max(1, Math.round(30 / (2 * blinkFrequency)));\n\t\tisCursorVisible = Math.floor(elapsed / halfPeriodFrames) % 2 === 0;\n\t}\n\treturn {\n\t\tvisibleChars: visibleCount,\n\t\tcurrentDisplayString: displayStr,\n\t\tisCursorVisible\n\t};\n}\n\n//#endregion\n//#region src/program/schema.ts\n/** number px | \"auto\" (intrinsic) | \"fit\" (shrink-wrap) | \"fill\" (parent extent). */\nconst SizeSpecSchema = z.union([\n\tz.number().min(0),\n\tz.enum([\n\t\t\"auto\",\n\t\t\"fit\",\n\t\t\"fill\"\n\t]),\n\tz.custom()\n]);\nconst ShapeTypeSchema = z.enum([\n\t\"rect\",\n\t\"circle\",\n\t\"ellipse\",\n\t\"polygon\",\n\t\"star\",\n\t\"arrow\",\n\t\"path\"\n]);\nconst AnimatablePropSchema = z.enum([\n\t\"x\",\n\t\"y\",\n\t\"scale\",\n\t\"rotation\",\n\t\"opacity\",\n\t\"width\",\n\t\"height\",\n\t\"volume\",\n\t\"hidden\",\n\t\"muted\",\n\t\"gap\",\n\t\"padding\",\n\t\"borderRadius\",\n\t\"fontSize\",\n\t\"text\",\n\t\"fill\",\n\t\"color\",\n\t\"letterSpacing\",\n\t\"trimStart\",\n\t\"trimEnd\",\n\t\"trimOffset\",\n\t\"strokeWidth\",\n\t\"strokeDashOffset\",\n\t\"cornerRadius\",\n\t\"starInnerRadiusRatio\",\n\t\"fillColor\",\n\t\"strokeColor\",\n\t\"borderColor\",\n\t\"borderWidth\",\n\t\"motionBlurShutter\",\n\t\"rangeStart\",\n\t\"rangeEnd\",\n\t\"offset\",\n\t\"animatorRangeStart\",\n\t\"animatorRangeEnd\",\n\t\"animatorOffset\",\n\t\"firstMargin\",\n\t\"lastMargin\",\n\t\"baselineShift\",\n\t\"rotateX\",\n\t\"rotateY\",\n\t\"rotateZ\",\n\t\"perspective\",\n\t\"translateZ\",\n\t\"perspectiveOriginX\",\n\t\"perspectiveOriginY\",\n\t\"progress\",\n\t\"drawProgress\",\n\t\"chartProgress\",\n\t\"cameraX\",\n\t\"cameraY\",\n\t\"cameraZ\",\n\t\"targetX\",\n\t\"targetY\",\n\t\"targetZ\",\n\t\"cameraPitch\",\n\t\"cameraYaw\",\n\t\"cameraRoll\",\n\t\"cameraFov\",\n\t\"cameraZoom\",\n\t\"focalLength\",\n\t\"focusDistance\",\n\t\"fStop\",\n\t\"maxBlurRadius\",\n\t\"shakeTranslation\",\n\t\"shakeRotation\",\n\t\"orbitRadius\",\n\t\"orbitAzimuth\",\n\t\"orbitElevation\",\n\t\"z\",\n\t\"scaleZ\",\n\t\"intensity\",\n\t\"angle\",\n\t\"radius\",\n\t\"penumbra\",\n\t\"decay\",\n\t\"shininess\",\n\t\"roughness\",\n\t\"specularIntensity\",\n\t\"ambientIntensity\",\n\t\"metallic\",\n\t\"ior\",\n\t\"dispersion\",\n\t\"transmission\",\n\t\"fresnelPower\",\n\t\"envIntensity\",\n\t\"animationProgress\",\n\t\"animationTime\",\n\t\"animationSpeed\",\n\t\"wireframe\",\n\t\"scaleX\",\n\t\"scaleY\"\n]);\nconst MaterialTypeSchema = z.enum([\n\t\"lit\",\n\t\"unlit\",\n\t\"toon\",\n\t\"glass\",\n\t\"acrylic\",\n\t\"frosted\",\n\t\"metallic\"\n]);\nconst EXTENDED_3D_ANIMATABLE_PROPS = [\n\t\"rotateX\",\n\t\"rotateY\",\n\t\"rotateZ\",\n\t\"perspective\",\n\t\"translateZ\",\n\t\"perspectiveOriginX\",\n\t\"perspectiveOriginY\",\n\t\"cameraX\",\n\t\"cameraY\",\n\t\"cameraZ\",\n\t\"targetX\",\n\t\"targetY\",\n\t\"targetZ\",\n\t\"cameraPitch\",\n\t\"cameraYaw\",\n\t\"cameraRoll\",\n\t\"cameraFov\",\n\t\"cameraZoom\",\n\t\"focalLength\",\n\t\"focusDistance\",\n\t\"fStop\",\n\t\"maxBlurRadius\",\n\t\"shakeTranslation\",\n\t\"shakeRotation\",\n\t\"orbitRadius\",\n\t\"orbitAzimuth\",\n\t\"orbitElevation\",\n\t\"z\",\n\t\"scaleZ\",\n\t\"intensity\",\n\t\"angle\",\n\t\"radius\",\n\t\"penumbra\",\n\t\"decay\",\n\t\"shininess\",\n\t\"roughness\",\n\t\"specularIntensity\",\n\t\"ambientIntensity\",\n\t\"metallic\"\n];\nconst SignalColorModeSchema = z.enum([\n\t\"interpolate\",\n\t\"hueRotate\",\n\t\"threshold\"\n]);\nconst EaseRefSchema = z.object({\n\tname: z.enum([\n\t\t\"none\",\n\t\t\"power1\",\n\t\t\"power2\",\n\t\t\"power3\",\n\t\t\"sine\",\n\t\t\"circ\",\n\t\t\"expo\",\n\t\t\"back\",\n\t\t\"elastic\",\n\t\t\"bounce\",\n\t\t\"spring\",\n\t\t\"cubic\",\n\t\t\"hold\"\n\t]),\n\tdir: z.enum([\n\t\t\"in\",\n\t\t\"out\",\n\t\t\"inOut\"\n\t]),\n\tparams: z.array(z.number()).optional()\n}).strict().superRefine((data, ctx) => {\n\tif (data.name === \"spring\" && data.params) {\n\t\tconst [damping, stiffness, mass] = data.params;\n\t\tif (damping !== void 0 && damping <= 0) ctx.addIssue({\n\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\tmessage: \"Spring damping must be greater than 0.\",\n\t\t\tpath: [\"params\", 0]\n\t\t});\n\t\tif (stiffness !== void 0 && stiffness <= 0) ctx.addIssue({\n\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\tmessage: \"Spring stiffness must be greater than 0.\",\n\t\t\tpath: [\"params\", 1]\n\t\t});\n\t\tif (mass !== void 0 && mass <= 0) ctx.addIssue({\n\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\tmessage: \"Spring mass must be greater than 0.\",\n\t\t\tpath: [\"params\", 2]\n\t\t});\n\t}\n});\nconst KeyframeSchema = z.object({\n\tid: z.string().min(1),\n\tframe: z.number().int().min(0),\n\tvalue: z.union([\n\t\tz.number(),\n\t\tz.boolean(),\n\t\tz.string()\n\t]),\n\tease: EaseRefSchema.optional(),\n\tpresetGroupId: z.string().optional(),\n\tpresetType: z.string().optional(),\n\tspatialTangentIn: z.object({\n\t\tx: z.number(),\n\t\ty: z.number()\n\t}).optional(),\n\tspatialTangentOut: z.object({\n\t\tx: z.number(),\n\t\ty: z.number()\n\t}).optional()\n}).strict();\nconst SignalModeSchema = z.enum([\"continuous\", \"accumulate\"]);\nconst RawTrackSourceSchema = z.discriminatedUnion(\"type\", [\n\tz.object({ type: z.literal(\"keyframe\") }),\n\tz.object({\n\t\ttype: z.literal(\"signal\"),\n\t\tinputHandleId: z.string(),\n\t\tmultiplier: z.number().default(1),\n\t\toffset: z.number().default(0),\n\t\tsmoothingWindowFrames: z.number().min(0).default(0),\n\t\tcolorMode: SignalColorModeSchema.optional(),\n\t\tcolorA: z.string().optional(),\n\t\tcolorB: z.string().optional(),\n\t\tcolorThreshold: z.number().optional(),\n\t\tsignalMode: SignalModeSchema.optional(),\n\t\tthreshold: z.number().optional(),\n\t\taccumulateThreshold: z.number().optional(),\n\t\tdebounceFrames: z.number().int().min(0).optional(),\n\t\tchannel: z.string().optional()\n\t}),\n\tz.object({\n\t\ttype: z.literal(\"wiggle\"),\n\t\tfrequency: z.number().default(2),\n\t\tamplitude: z.number().default(50),\n\t\toctaves: z.number().int().min(1).max(4).default(1),\n\t\tseed: z.number().default(1234)\n\t}),\n\tz.object({\n\t\ttype: z.literal(\"springOvershoot\"),\n\t\tdamping: z.number().default(12),\n\t\tstiffness: z.number().default(180),\n\t\tmass: z.number().default(1)\n\t})\n]);\nconst TrackSourceSchema = z.preprocess((val) => {\n\tif (!val || typeof val !== \"object\") return val;\n\tconst obj = val;\n\tif (obj.type === \"signal\") {\n\t\tconst thresh = typeof obj.threshold === \"number\" ? obj.threshold : typeof obj.accumulateThreshold === \"number\" ? obj.accumulateThreshold : .15;\n\t\treturn {\n\t\t\ttype: \"signal\",\n\t\t\tinputHandleId: obj.inputHandleId ?? obj.handleId,\n\t\t\tmultiplier: obj.multiplier ?? obj.amplitude ?? 1,\n\t\t\toffset: obj.offset ?? 0,\n\t\t\tsmoothingWindowFrames: obj.smoothingWindowFrames ?? obj.smoothing ?? 0,\n\t\t\tcolorMode: obj.colorMode,\n\t\t\tcolorA: obj.colorA,\n\t\t\tcolorB: obj.colorB,\n\t\t\tcolorThreshold: obj.colorThreshold,\n\t\t\tsignalMode: obj.signalMode ?? \"continuous\",\n\t\t\tthreshold: thresh,\n\t\t\taccumulateThreshold: thresh,\n\t\t\tdebounceFrames: obj.debounceFrames ?? 2,\n\t\t\tchannel: typeof obj.channel === \"string\" ? obj.channel : \"primary\"\n\t\t};\n\t}\n\treturn val;\n}, RawTrackSourceSchema);\nconst animationInvariants = (anim, ctx) => {\n\tif (!anim?.tracks) return;\n\tlet totalKeyframes = 0;\n\tfor (let tIdx = 0; tIdx < anim.tracks.length; tIdx++) {\n\t\tconst track = anim.tracks[tIdx];\n\t\tconst keyframes = track.keyframes ?? [];\n\t\ttotalKeyframes += keyframes.length;\n\t\tif ((!track.source || track.source.type === \"keyframe\") && keyframes.length < 1) ctx.addIssue({\n\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\tmessage: `Track for property '${track.prop}' must have at least 1 keyframe.`,\n\t\t\tpath: [\n\t\t\t\t\"tracks\",\n\t\t\t\ttIdx,\n\t\t\t\t\"keyframes\"\n\t\t\t]\n\t\t});\n\t\tconst isDiscrete = track.prop === \"hidden\" || track.prop === \"muted\";\n\t\tconst isColor = track.prop === \"fillColor\" || track.prop === \"strokeColor\" || track.prop === \"fill\" || track.prop === \"color\";\n\t\tfor (let kIdx = 0; kIdx < keyframes.length; kIdx++) {\n\t\t\tconst kf = keyframes[kIdx];\n\t\t\tif (kIdx > 0) {\n\t\t\t\tconst prevKf = keyframes[kIdx - 1];\n\t\t\t\tif (kf.frame < prevKf.frame) ctx.addIssue({\n\t\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\t\tmessage: \"Keyframes must be sorted in ascending order of frame.\",\n\t\t\t\t\tpath: [\n\t\t\t\t\t\t\"tracks\",\n\t\t\t\t\t\ttIdx,\n\t\t\t\t\t\t\"keyframes\",\n\t\t\t\t\t\tkIdx\n\t\t\t\t\t]\n\t\t\t\t});\n\t\t\t\telse if (kf.frame === prevKf.frame) ctx.addIssue({\n\t\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\t\tmessage: \"Duplicate keyframes at the same frame are not allowed.\",\n\t\t\t\t\tpath: [\n\t\t\t\t\t\t\"tracks\",\n\t\t\t\t\t\ttIdx,\n\t\t\t\t\t\t\"keyframes\",\n\t\t\t\t\t\tkIdx\n\t\t\t\t\t]\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst valType = typeof kf.value;\n\t\t\tif (isDiscrete) {\n\t\t\t\tif (valType !== \"boolean\") ctx.addIssue({\n\t\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\t\tmessage: `Keyframe value for discrete property '${track.prop}' must be a boolean.`,\n\t\t\t\t\tpath: [\n\t\t\t\t\t\t\"tracks\",\n\t\t\t\t\t\ttIdx,\n\t\t\t\t\t\t\"keyframes\",\n\t\t\t\t\t\tkIdx,\n\t\t\t\t\t\t\"value\"\n\t\t\t\t\t]\n\t\t\t\t});\n\t\t\t} else if (isColor) {\n\t\t\t\tif (valType !== \"string\") ctx.addIssue({\n\t\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\t\tmessage: `Keyframe value for color property '${track.prop}' must be a string.`,\n\t\t\t\t\tpath: [\n\t\t\t\t\t\t\"tracks\",\n\t\t\t\t\t\ttIdx,\n\t\t\t\t\t\t\"keyframes\",\n\t\t\t\t\t\tkIdx,\n\t\t\t\t\t\t\"value\"\n\t\t\t\t\t]\n\t\t\t\t});\n\t\t\t} else if (valType !== \"number\" || Number.isNaN(kf.value) || !Number.isFinite(kf.value)) ctx.addIssue({\n\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\tmessage: `Keyframe value for numeric property '${track.prop}' must be a finite number.`,\n\t\t\t\tpath: [\n\t\t\t\t\t\"tracks\",\n\t\t\t\t\ttIdx,\n\t\t\t\t\t\"keyframes\",\n\t\t\t\t\tkIdx,\n\t\t\t\t\t\"value\"\n\t\t\t\t]\n\t\t\t});\n\t\t\telse if ((track.prop === \"volume\" || track.prop === \"trimStart\" || track.prop === \"trimEnd\" || track.prop === \"progress\" || track.prop === \"drawProgress\" || track.prop === \"chartProgress\") && (kf.value < 0 || kf.value > 1)) ctx.addIssue({\n\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\tmessage: `Keyframe value for property '${track.prop}' must be between 0 and 1.`,\n\t\t\t\tpath: [\n\t\t\t\t\t\"tracks\",\n\t\t\t\t\ttIdx,\n\t\t\t\t\t\"keyframes\",\n\t\t\t\t\tkIdx,\n\t\t\t\t\t\"value\"\n\t\t\t\t]\n\t\t\t});\n\t\t}\n\t}\n\tif (totalKeyframes > 128) ctx.addIssue({\n\t\tcode: z.ZodIssueCode.custom,\n\t\tmessage: `Total keyframes across all tracks (${totalKeyframes}) exceeds the limit of 128.`,\n\t\tpath: [\"tracks\"]\n\t});\n};\nconst AnimationTrackSchema = z.object({\n\tid: z.string().min(1),\n\tprop: AnimatablePropSchema,\n\tsource: TrackSourceSchema.optional(),\n\tkeyframes: z.array(KeyframeSchema).default([]),\n\trepeat: z.number().int().optional(),\n\tyoyo: z.boolean().optional(),\n\tdurationFrames: z.number().int().min(1).optional()\n}).strict();\nconst LayerAnimationSchema = z.object({ tracks: z.array(AnimationTrackSchema).max(24) }).strict().superRefine(animationInvariants);\nconst BaseNodeFields = {\n\tid: z.string().min(1),\n\tinputHandleId: z.string().optional(),\n\tposition: z.enum([\"relative\", \"absolute\"]).default(\"relative\"),\n\tx: z.union([z.number(), z.custom()]).default(0),\n\ty: z.union([z.number(), z.custom()]).default(0),\n\twidth: SizeSpecSchema.optional(),\n\theight: SizeSpecSchema.optional(),\n\tgrow: z.number().min(0).optional(),\n\tflexShrink: z.number().min(0).optional(),\n\tflexBasis: z.number().min(0).optional(),\n\talignSelf: z.enum([\n\t\t\"auto\",\n\t\t\"start\",\n\t\t\"center\",\n\t\t\"end\",\n\t\t\"stretch\",\n\t\t\"baseline\"\n\t]).optional(),\n\taspectRatio: z.number().positive().optional(),\n\tzIndex: z.number().int().default(0),\n\thidden: z.boolean().default(false),\n\topacity: z.number().min(0).max(1).default(1),\n\tblendMode: z.string().optional(),\n\teffects: z.array(z.unknown()).optional(),\n\trotation: z.number().default(0),\n\tscale: z.number().min(0).default(1),\n\tanchorX: z.number().min(0).max(1).default(.5),\n\tanchorY: z.number().min(0).max(1).default(.5),\n\tstartFrame: z.number().int().min(0).default(0),\n\tdurationFrames: z.number().int().min(1).optional(),\n\tmotionBlurShutter: z.number().min(0).max(360).optional(),\n\trotateX: z.number().default(0),\n\trotateY: z.number().default(0),\n\trotateZ: z.number().default(0),\n\tperspective: z.number().min(0).default(0),\n\tperspectiveOriginX: z.number().default(.5),\n\tperspectiveOriginY: z.number().default(.5),\n\ttranslateZ: z.number().default(0),\n\tbackfaceVisibility: z.enum([\"visible\", \"hidden\"]).default(\"visible\"),\n\ttransformStyle: z.enum([\"flat\", \"preserve-3d\"]).default(\"flat\"),\n\tis3D: z.boolean().default(false),\n\tz: z.union([z.number(), z.custom()]).default(0),\n\tscaleZ: z.number().default(1),\n\ttwoSided: z.boolean().default(true),\n\tmaterial: MaterialTypeSchema.default(\"lit\"),\n\tior: z.number().min(1).max(3).optional(),\n\troughness: z.number().min(0).max(1).optional(),\n\tshininess: z.number().min(1).max(512).default(32),\n\tspecularIntensity: z.number().min(0).default(.5),\n\tmetallic: z.number().min(0).max(1).optional(),\n\tambientIntensity: z.number().min(0).default(1),\n\ttransmission: z.number().min(0).max(1).optional(),\n\tdispersion: z.number().min(0).max(1).optional(),\n\tfresnelPower: z.number().min(1).max(10).optional(),\n\tenvIntensity: z.number().min(0).max(10).optional(),\n\tanimation: LayerAnimationSchema.default({ tracks: [] }),\n\tyolo: z.unknown().optional(),\n\trelighting: z.unknown().optional()\n};\nconst TextShadowSchema = z.object({\n\tcolor: ColorSchema,\n\toffset: z.object({\n\t\tx: z.number(),\n\t\ty: z.number()\n\t}).optional(),\n\tblurRadius: z.number().min(0).optional()\n}).strict();\nconst TextAnimatorTransformSchema = z.object({\n\tx: z.number().optional(),\n\ty: z.number().optional(),\n\tscale: z.number().optional(),\n\tscaleX: z.number().optional(),\n\tscaleY: z.number().optional(),\n\trotation: z.number().optional(),\n\trotationX: z.number().optional(),\n\trotationY: z.number().optional(),\n\topacity: z.number().optional(),\n\tblur: z.number().optional(),\n\tcolor: z.string().optional()\n}).strict();\nconst TextAnimatorSchema = z.object({\n\tid: z.string(),\n\tunit: z.enum([\n\t\t\"character\",\n\t\t\"word\",\n\t\t\"line\"\n\t]).default(\"character\"),\n\trangeStart: z.number().min(0).max(1).default(0),\n\trangeEnd: z.number().min(0).max(1).default(1),\n\toffset: z.number().min(-1).max(1).default(0),\n\teasing: z.string().default(\"power2.out\"),\n\ttransform: TextAnimatorTransformSchema.optional()\n});\nconst TextAnimator = {\n\twaveRise(options = {}) {\n\t\treturn {\n\t\t\tid: options.id ?? \"wave-rise\",\n\t\t\tunit: options.unit ?? \"character\",\n\t\t\trangeStart: options.rangeStart ?? 0,\n\t\t\trangeEnd: options.rangeEnd ?? 1,\n\t\t\toffset: options.offset ?? -1,\n\t\t\teasing: options.easing ?? \"power2.out\",\n\t\t\ttransform: {\n\t\t\t\ty: options.y ?? 40,\n\t\t\t\trotationX: options.rotationX ?? 45,\n\t\t\t\topacity: options.opacity ?? 0,\n\t\t\t\tblur: options.blur ?? 0\n\t\t\t}\n\t\t};\n\t},\n\twordPop(options = {}) {\n\t\treturn {\n\t\t\tid: options.id ?? \"word-pop\",\n\t\t\tunit: \"word\",\n\t\t\trangeStart: 0,\n\t\t\trangeEnd: 1,\n\t\t\toffset: -1,\n\t\t\teasing: options.easing ?? \"back.out(1.6)\",\n\t\t\ttransform: {\n\t\t\t\tscale: options.scale ?? 0,\n\t\t\t\ty: options.y ?? 20,\n\t\t\t\topacity: 0\n\t\t\t}\n\t\t};\n\t},\n\tblurIn(options = {}) {\n\t\treturn {\n\t\t\tid: options.id ?? \"blur-in\",\n\t\t\tunit: options.unit ?? \"character\",\n\t\t\trangeStart: 0,\n\t\t\trangeEnd: 1,\n\t\t\toffset: -1,\n\t\t\teasing: options.easing ?? \"power3.out\",\n\t\t\ttransform: {\n\t\t\t\tblur: options.blur ?? 16,\n\t\t\t\ty: options.y ?? 20,\n\t\t\t\topacity: options.opacity ?? 0\n\t\t\t}\n\t\t};\n\t},\n\tflip3D(options = {}) {\n\t\treturn {\n\t\t\tid: options.id ?? \"flip-3d\",\n\t\t\tunit: options.unit ?? \"character\",\n\t\t\trangeStart: 0,\n\t\t\trangeEnd: 1,\n\t\t\toffset: -1,\n\t\t\teasing: options.easing ?? \"back.out(1.4)\",\n\t\t\ttransform: {\n\t\t\t\trotationX: options.rotationX ?? 90,\n\t\t\t\topacity: 0\n\t\t\t}\n\t\t};\n\t},\n\tcolorSweep(options) {\n\t\treturn {\n\t\t\tid: options.id ?? \"color-sweep\",\n\t\t\tunit: options.unit ?? \"character\",\n\t\t\trangeStart: 0,\n\t\t\trangeEnd: .5,\n\t\t\toffset: -.5,\n\t\t\teasing: options.easing ?? \"power2.inOut\",\n\t\t\ttransform: { color: options.color }\n\t\t};\n\t}\n};\nconst CameraLensSchema = z.object({\n\tfocalLength: z.number().min(5).max(500).default(50),\n\tfov: z.number().min(5).max(160).optional(),\n\tsensorWidth: z.number().default(36),\n\tnear: z.number().min(.1).default(1),\n\tfar: z.number().min(10).default(5e4),\n\tzoom: z.number().min(.01).default(1)\n}).strict();\nconst CameraDoFSchema = z.object({\n\tenabled: z.boolean().default(false),\n\tfocusDistance: z.number().min(1).default(1e3),\n\tfStop: z.number().min(.5).max(64).default(2.8),\n\tmaxBlurRadius: z.number().min(0).max(128).default(32),\n\tapertureBlades: z.number().int().min(0).max(12).default(0),\n\tanamorphicRatio: z.number().min(.5).max(3).default(1)\n}).strict();\nconst CameraShakeSchema = z.object({\n\ttranslationAmplitude: z.number().min(0).default(0),\n\trotationAmplitude: z.number().min(0).default(0),\n\tfrequency: z.number().min(.1).max(60).default(2.5),\n\toctaves: z.number().int().min(1).max(6).default(3),\n\tseed: z.number().default(42)\n}).strict();\nconst CameraNodeSchema = z.object({\n\tid: z.string().min(1),\n\tkind: z.literal(\"camera\"),\n\tmode: z.enum([\n\t\t\"lookAt\",\n\t\t\"free\",\n\t\t\"orbit\"\n\t]).default(\"lookAt\"),\n\tx: z.number().optional(),\n\ty: z.number().optional(),\n\tz: z.number().optional(),\n\ttargetX: z.number().optional(),\n\ttargetY: z.number().optional(),\n\ttargetZ: z.number().optional(),\n\tpitch: z.number().default(0),\n\tyaw: z.number().default(0),\n\troll: z.number().default(0),\n\tlens: CameraLensSchema.optional(),\n\tdof: CameraDoFSchema.optional(),\n\tshake: CameraShakeSchema.optional(),\n\tstartFrame: z.number().int().min(0).default(0),\n\tdurationFrames: z.number().int().min(1).optional(),\n\tanimation: LayerAnimationSchema.default({ tracks: [] })\n}).strict();\nconst LightTypeSchema = z.enum([\n\t\"ambient\",\n\t\"directional\",\n\t\"point\",\n\t\"spot\"\n]);\nconst LightNodeSchema = z.object({\n\tid: z.string().min(1),\n\tkind: z.literal(\"light\"),\n\tlightType: LightTypeSchema.default(\"directional\"),\n\tcolor: ColorSchema.default(\"#ffffff\"),\n\tintensity: z.number().default(1),\n\tx: z.number().optional(),\n\ty: z.number().optional(),\n\tz: z.number().optional(),\n\ttargetX: z.number().optional(),\n\ttargetY: z.number().optional(),\n\ttargetZ: z.number().optional(),\n\tdirection: z.tuple([\n\t\tz.number(),\n\t\tz.number(),\n\t\tz.number()\n\t]).optional(),\n\tradius: z.number().min(0).default(1e3),\n\tdecay: z.number().min(0).default(2),\n\tangle: z.number().min(0).max(180).default(45),\n\tpenumbra: z.number().min(0).max(1).default(.2),\n\tstartFrame: z.number().int().min(0).default(0),\n\tdurationFrames: z.number().int().min(1).optional(),\n\tanimation: LayerAnimationSchema.default({ tracks: [] })\n}).strict();\nconst containerChildren = () => z.array(z.lazy(() => LayoutNodeSchema));\nconst FlexNodeSchema = z.object({\n\t...BaseNodeFields,\n\tkind: z.literal(\"flex\"),\n\tdir: z.enum([\"row\", \"column\"]).default(\"row\"),\n\tgap: z.number().min(0).default(0),\n\tpadding: z.number().min(0).default(0),\n\tjustify: z.enum([\n\t\t\"start\",\n\t\t\"center\",\n\t\t\"end\",\n\t\t\"space-between\",\n\t\t\"space-around\"\n\t]).default(\"start\"),\n\talign: z.enum([\n\t\t\"start\",\n\t\t\"center\",\n\t\t\"end\",\n\t\t\"stretch\"\n\t]).default(\"start\"),\n\twrap: z.boolean().default(false),\n\tstaggerFrames: z.number().min(0).default(0),\n\tstaggerDirection: z.enum([\n\t\t\"forward\",\n\t\t\"reverse\",\n\t\t\"center-out\"\n\t]).default(\"forward\"),\n\toverflow: z.enum([\"visible\", \"hidden\"]).default(\"hidden\"),\n\tbackground: ColorSchema.optional(),\n\tborderRadius: z.number().min(0).optional(),\n\tborderColor: ColorSchema.optional(),\n\tborderWidth: z.number().min(0).optional(),\n\tstrokeAlign: z.enum([\n\t\t\"inside\",\n\t\t\"center\",\n\t\t\"outside\"\n\t]).optional(),\n\tstrokeRadius: z.number().min(0).optional(),\n\tchildren: containerChildren().optional()\n}).strict();\nconst BlockNodeSchema = z.object({\n\t...BaseNodeFields,\n\tkind: z.literal(\"block\"),\n\tgap: z.number().min(0).default(0),\n\tpadding: z.number().min(0).default(0),\n\talign: z.enum([\n\t\t\"start\",\n\t\t\"center\",\n\t\t\"end\",\n\t\t\"stretch\"\n\t]).default(\"start\"),\n\tstaggerFrames: z.number().min(0).default(0),\n\tstaggerDirection: z.enum([\n\t\t\"forward\",\n\t\t\"reverse\",\n\t\t\"center-out\"\n\t]).default(\"forward\"),\n\toverflow: z.enum([\"visible\", \"hidden\"]).default(\"hidden\"),\n\tbackground: ColorSchema.optional(),\n\tborderRadius: z.number().min(0).optional(),\n\tborderColor: ColorSchema.optional(),\n\tborderWidth: z.number().min(0).optional(),\n\tstrokeAlign: z.enum([\n\t\t\"inside\",\n\t\t\"center\",\n\t\t\"outside\"\n\t]).optional(),\n\tstrokeRadius: z.number().min(0).optional(),\n\tchildren: containerChildren().optional()\n}).strict();\nconst BoxNodeSchema = z.object({\n\t...BaseNodeFields,\n\tkind: z.literal(\"box\"),\n\tbackground: ColorSchema,\n\tborderRadius: z.number().min(0).optional(),\n\tpadding: z.number().min(0).default(0),\n\tstaggerFrames: z.number().min(0).default(0),\n\tstaggerDirection: z.enum([\n\t\t\"forward\",\n\t\t\"reverse\",\n\t\t\"center-out\"\n\t]).default(\"forward\"),\n\toverflow: z.enum([\"visible\", \"hidden\"]).default(\"hidden\"),\n\tborderColor: ColorSchema.optional(),\n\tborderWidth: z.number().min(0).optional(),\n\tstrokeAlign: z.enum([\n\t\t\"inside\",\n\t\t\"center\",\n\t\t\"outside\"\n\t]).optional(),\n\tstrokeRadius: z.number().min(0).optional(),\n\tchildren: containerChildren().optional()\n}).strict();\nconst TextSpanMarkSchema = z.object({\n\tbackground: ColorSchema,\n\tborderRadius: z.number().min(0).optional(),\n\tpaddingX: z.number().min(0).optional(),\n\tpaddingY: z.number().min(0).optional()\n}).strict();\nconst TextSpanSchema = z.object({\n\ttext: z.union([z.string(), z.custom((v) => Boolean(v && typeof v === \"object\" && \"get\" in v))]),\n\tfontFamily: z.string().optional(),\n\tfontSize: z.union([z.number().positive(), z.custom((v) => Boolean(v && typeof v === \"object\" && \"get\" in v))]).optional(),\n\tfontWeight: z.union([z.number().int(), z.string()]).optional(),\n\tfontStyle: z.enum([\"normal\", \"italic\"]).optional(),\n\tfill: z.union([ColorSchema, z.custom((v) => Boolean(v && typeof v === \"object\" && \"get\" in v))]).optional(),\n\tletterSpacing: z.number().optional(),\n\tbaselineShift: z.number().optional(),\n\topacity: z.union([z.number().min(0).max(1), z.custom((v) => Boolean(v && typeof v === \"object\" && \"get\" in v))]).optional(),\n\tmark: TextSpanMarkSchema.optional()\n}).strict();\nconst TextFields = {\n\ttext: z.string().default(\"\"),\n\tspans: z.array(TextSpanSchema).optional(),\n\tfontFamily: z.string().optional(),\n\tfontSize: z.number().positive().optional(),\n\tfontWeight: z.union([z.number().int(), z.string()]).optional(),\n\tfontStyle: z.string().optional(),\n\tfill: ColorSchema,\n\talign: z.enum([\n\t\t\"start\",\n\t\t\"center\",\n\t\t\"end\"\n\t]).optional(),\n\tverticalAlign: z.enum([\n\t\t\"top\",\n\t\t\"middle\",\n\t\t\"bottom\"\n\t]).optional(),\n\tlineHeight: z.number().positive().optional(),\n\tletterSpacing: z.number().optional(),\n\tbackground: ColorSchema,\n\tborderRadius: z.number().min(0).optional(),\n\tpadding: z.number().min(0).optional(),\n\tstroke: ColorSchema,\n\tstrokeWidth: z.number().min(0).optional(),\n\tstrokeAlign: z.enum([\n\t\t\"inside\",\n\t\t\"center\",\n\t\t\"outside\"\n\t]).optional(),\n\ttextShadow: z.string().optional(),\n\tshadows: z.array(TextShadowSchema).optional(),\n\tpathOptions: TextPathOptionsSchema.optional(),\n\ttypewriter: TypewriterAnimatorSchema.optional(),\n\tmarquee: KineticMarqueeConfigSchema.optional(),\n\tanimators: z.array(z.union([\n\t\tTextAnimatorSchema,\n\t\tAETextAnimatorSchema,\n\t\tAdvancedTextAnimatorSchema\n\t])).optional()\n};\nconst TextNodeSchema = z.object({\n\t...BaseNodeFields,\n\t...TextFields,\n\tkind: z.literal(\"text\")\n}).strict();\nconst MediaNodeSchema = z.object({\n\t...BaseNodeFields,\n\tkind: z.literal(\"media\"),\n\tinputHandleId: z.string().min(1),\n\tdataType: z.string().optional(),\n\tfit: z.enum([\n\t\t\"cover\",\n\t\t\"contain\",\n\t\t\"fill\",\n\t\t\"none\"\n\t]).default(\"contain\"),\n\tborderRadius: z.number().min(0).optional(),\n\tborderColor: ColorSchema.optional(),\n\tborderWidth: z.number().min(0).optional(),\n\tstrokeAlign: z.enum([\n\t\t\"inside\",\n\t\t\"center\",\n\t\t\"outside\"\n\t]).optional(),\n\tstrokeRadius: z.number().min(0).optional(),\n\tvolume: z.number().min(0).max(1).default(1),\n\tmuted: z.boolean().default(false),\n\ttrimStartSec: z.number().min(0).optional(),\n\tfontFamily: z.string().optional(),\n\tfontSize: z.number().positive().optional(),\n\tfontWeight: z.union([z.number().int(), z.string()]).optional(),\n\tfontStyle: z.string().optional(),\n\tfill: ColorSchema,\n\talign: z.enum([\n\t\t\"start\",\n\t\t\"center\",\n\t\t\"end\"\n\t]).optional(),\n\tverticalAlign: z.enum([\n\t\t\"top\",\n\t\t\"middle\",\n\t\t\"bottom\"\n\t]).optional(),\n\tlineHeight: z.number().positive().optional(),\n\tletterSpacing: z.number().optional(),\n\tbackground: ColorSchema,\n\tpadding: z.number().min(0).optional(),\n\tstroke: ColorSchema,\n\tstrokeWidth: z.number().min(0).optional(),\n\ttextShadow: z.string().optional(),\n\tshadows: z.array(TextShadowSchema).optional(),\n\tmaxWidth: z.number().optional()\n}).strict();\nconst ShapeFields = {\n\tshapeType: ShapeTypeSchema.default(\"rect\"),\n\tborderRadius: z.number().min(0).optional(),\n\tradiusTL: z.number().min(0).optional(),\n\tradiusTR: z.number().min(0).optional(),\n\tradiusBR: z.number().min(0).optional(),\n\tradiusBL: z.number().min(0).optional(),\n\tpolygonSides: z.number().int().min(3).max(64).optional(),\n\tstarPoints: z.number().int().min(3).max(64).optional(),\n\tstarInnerRadiusRatio: z.number().min(.01).max(.99).optional(),\n\tarrowHeadWidth: z.number().min(0).optional(),\n\tarrowHeadLength: z.number().min(0).optional(),\n\tarrowShaftWidth: z.number().min(1).optional(),\n\td: z.string().optional(),\n\tfillType: z.enum([\n\t\t\"solid\",\n\t\t\"linear\",\n\t\t\"radial\",\n\t\t\"none\"\n\t]).default(\"solid\"),\n\tfillColor: ColorSchema.default(\"#3b82f6\"),\n\tgradientEndColor: ColorSchema.optional(),\n\tgradientAngle: z.number().default(0),\n\tstrokeColor: ColorSchema.default(\"#ffffff\"),\n\tstrokeWidth: z.number().min(0).default(0),\n\tstrokeDashArray: z.string().optional(),\n\tstrokeDashOffset: z.number().default(0),\n\tstrokeLineCap: z.enum([\n\t\t\"butt\",\n\t\t\"round\",\n\t\t\"square\"\n\t]).default(\"round\"),\n\tstrokeLineJoin: z.enum([\n\t\t\"miter\",\n\t\t\"round\",\n\t\t\"bevel\"\n\t]).default(\"round\"),\n\tstrokeAlign: z.enum([\n\t\t\"inside\",\n\t\t\"center\",\n\t\t\"outside\"\n\t]).optional(),\n\ttrimStart: z.number().min(0).max(1).default(0),\n\ttrimEnd: z.number().min(0).max(1).default(1),\n\ttrimOffset: z.number().default(0)\n};\nconst ShapeNodeSchema = z.object({\n\t...BaseNodeFields,\n\t...ShapeFields,\n\tkind: z.literal(\"shape\")\n}).strict();\nconst ChartSeriesTypeSchema = z.enum([\n\t\"line\",\n\t\"area\",\n\t\"bar\",\n\t\"candlestick\",\n\t\"ohlc\",\n\t\"pie\",\n\t\"heatmap\",\n\t\"band\",\n\t\"errorBar\",\n\t\"impulse\",\n\t\"pointCloud3d\",\n\t\"surface3d\"\n]);\nconst ColorStopSchema = z.object({\n\toffset: z.number().min(0).max(1),\n\tcolor: z.string()\n});\nconst ChartLineStyleSchema = z.object({\n\tcolor: z.string().default(\"#3b82f6\"),\n\twidth: z.number().min(.5).default(2),\n\tsmooth: z.boolean().default(true),\n\tdash: z.array(z.number()).optional(),\n\topacity: z.number().min(0).max(1).default(1)\n}).strict();\nconst ChartAreaStyleSchema = z.object({\n\tcolor: z.string().optional(),\n\tgradient: z.object({\n\t\tdirection: z.enum([\"vertical\", \"horizontal\"]).default(\"vertical\"),\n\t\tstops: z.array(ColorStopSchema).min(2)\n\t}).optional(),\n\topacity: z.number().min(0).max(1).default(.35)\n}).strict();\nconst ChartPointStyleSchema = z.object({\n\tshow: z.boolean().default(false),\n\tsize: z.number().min(1).default(4),\n\tcolor: z.string().optional(),\n\tshape: z.enum([\n\t\t\"circle\",\n\t\t\"square\",\n\t\t\"diamond\"\n\t]).default(\"circle\")\n}).strict();\nconst ChartDataPoint2DSchema = z.union([z.tuple([z.number(), z.number()]), z.object({\n\tx: z.number(),\n\ty: z.number()\n})]);\nconst ChartDataPointOHLCSchema = z.union([z.tuple([\n\tz.number(),\n\tz.number(),\n\tz.number(),\n\tz.number(),\n\tz.number()\n]), z.object({\n\ttimestamp: z.number(),\n\topen: z.number(),\n\thigh: z.number(),\n\tlow: z.number(),\n\tclose: z.number()\n})]);\nconst ChartSeriesSchema = z.object({\n\tid: z.string().optional(),\n\tname: z.string().optional(),\n\ttype: ChartSeriesTypeSchema.default(\"line\"),\n\tdata: z.union([\n\t\tz.array(ChartDataPoint2DSchema),\n\t\tz.array(ChartDataPointOHLCSchema),\n\t\tz.array(z.number())\n\t]),\n\tlineStyle: ChartLineStyleSchema.optional(),\n\tareaStyle: ChartAreaStyleSchema.optional(),\n\titemStyle: ChartPointStyleSchema.optional(),\n\tyAxisIndex: z.number().int().min(0).default(0),\n\tvisible: z.boolean().default(true),\n\tprogress: z.number().min(0).max(1).default(1)\n}).strict();\nconst ChartAxisSchema = z.object({\n\tid: z.string().optional(),\n\ttype: z.enum([\n\t\t\"value\",\n\t\t\"category\",\n\t\t\"time\",\n\t\t\"log\"\n\t]).default(\"value\"),\n\tshow: z.boolean().default(true),\n\tmin: z.number().optional(),\n\tmax: z.number().optional(),\n\tgrid: z.object({\n\t\tshow: z.boolean().default(true),\n\t\tcolor: z.string().default(\"rgba(255, 255, 255, 0.08)\"),\n\t\twidth: z.number().default(1),\n\t\tdash: z.array(z.number()).optional()\n\t}).optional(),\n\tline: z.object({\n\t\tshow: z.boolean().default(true),\n\t\tcolor: z.string().default(\"rgba(255, 255, 255, 0.2)\"),\n\t\twidth: z.number().default(1)\n\t}).optional(),\n\tticks: z.object({\n\t\tshow: z.boolean().default(true),\n\t\tcount: z.number().int().min(2).max(50).optional()\n\t}).optional(),\n\tlabels: z.object({\n\t\tshow: z.boolean().default(true),\n\t\tfontFamily: z.string().default(\"Inter, sans-serif\"),\n\t\tfontSize: z.number().default(11),\n\t\tcolor: z.string().default(\"rgba(255, 255, 255, 0.6)\"),\n\t\tformat: z.string().optional()\n\t}).optional()\n}).strict();\nconst ChartGPUOptionsSchema = z.object({\n\ttheme: z.enum([\"dark\", \"light\"]).default(\"dark\"),\n\tbackgroundColor: z.string().default(\"transparent\"),\n\tpadding: z.object({\n\t\ttop: z.number().default(20),\n\t\tright: z.number().default(20),\n\t\tbottom: z.number().default(30),\n\t\tleft: z.number().default(40)\n\t}).default({\n\t\ttop: 20,\n\t\tright: 20,\n\t\tbottom: 30,\n\t\tleft: 40\n\t}),\n\txAxis: ChartAxisSchema.default({\n\t\ttype: \"category\",\n\t\tshow: true\n\t}),\n\tyAxis: z.union([ChartAxisSchema, z.array(ChartAxisSchema)]).default({\n\t\ttype: \"value\",\n\t\tshow: true\n\t}),\n\tseries: z.array(ChartSeriesSchema).min(1),\n\tdrawProgress: z.number().min(0).max(1).default(1),\n\tsamples: z.union([z.literal(1), z.literal(4)]).default(4)\n}).strict();\nconst ChartNodeSchema = z.object({\n\t...BaseNodeFields,\n\tkind: z.literal(\"chart\"),\n\tchartOptions: ChartGPUOptionsSchema,\n\tprogress: z.number().min(0).max(1).default(1),\n\tdrawProgress: z.number().min(0).max(1).default(1)\n}).strict();\nconst CompositionChartNodeSchema = ChartNodeSchema;\nconst Model3DNodeSchema = z.object({\n\t...BaseNodeFields,\n\tkind: z.literal(\"model3d\"),\n\tsrc: z.string().default(\"\"),\n\tmodelFormat: z.enum([\n\t\t\"obj\",\n\t\t\"fbx\",\n\t\t\"gltf\",\n\t\t\"glb\",\n\t\t\"stl\",\n\t\t\"ply\",\n\t\t\"vox\",\n\t\t\"3ds\",\n\t\t\"off\",\n\t\t\"auto\"\n\t]).default(\"auto\"),\n\tmodelData: z.unknown().optional(),\n\tanimationName: z.string().optional(),\n\tanimationProgress: z.number().min(0).max(1).default(0),\n\tanimationTime: z.number().min(0).default(0),\n\tanimationSpeed: z.number().default(1),\n\tloop: z.boolean().default(true),\n\twireframe: z.boolean().default(false),\n\ttexture: z.string().optional(),\n\tcenter: z.boolean().optional(),\n\tnormalizeSize: z.number().optional(),\n\tscaleX: z.number().default(1),\n\tscaleY: z.number().default(1),\n\taudioDeform: z.record(z.string(), z.unknown()).optional(),\n\ttext3dOptions: z.unknown().optional()\n}).strict();\nconst LayoutNodeSchema = z.lazy(() => z.union([\n\tFlexNodeSchema,\n\tBlockNodeSchema,\n\tBoxNodeSchema,\n\tTextNodeSchema,\n\tMediaNodeSchema,\n\tShapeNodeSchema,\n\tChartNodeSchema,\n\tCameraNodeSchema,\n\tLightNodeSchema,\n\tModel3DNodeSchema\n]));\nconst CompositorProgramSchema = z.object({\n\twidth: z.number().int().min(1).max(4096),\n\theight: z.number().int().min(1).max(4096),\n\tbackgroundColor: ColorSchema,\n\tvolume: z.number().min(0).max(1).default(1),\n\tfps: z.number().int().min(1).max(120).default(24),\n\tmode: z.enum([\"Video\", \"Image\"]).default(\"Video\"),\n\tlayout: z.array(LayoutNodeSchema).default([]),\n\tfonts: z.array(z.string()).optional(),\n\tsignals: z.record(z.string(), z.unknown()).optional(),\n\teffects: z.array(z.unknown()).optional(),\n\tyolo: z.unknown().optional(),\n\tonRequestFrame: z.custom().optional()\n}).strict();\n\n//#endregion\n//#region src/program/sequence.ts\n/**\n* @file program/sequence.ts\n* @module @gitframes/compositions/program/sequence\n*\n* Multi-Scene Timeline Orchestration, Camera Choreography & Carrier Match Cuts.\n* Complies with specs/cinematic-sequencing.ts.\n*/\n/**\n* Camera Transition Type across scene boundaries.\n*/\nconst SceneTransitionTypeSchema = z.enum([\n\t\"cut\",\n\t\"carrierMatchCut\",\n\t\"cameraWhip\",\n\t\"focusPullDissolve\",\n\t\"irisAperture\",\n\t\"pushDirectional\"\n]);\n/**\n* Carrier Object Handoff Configuration Schema.\n*/\nconst CarrierHandoffConfigSchema = z.object({\n\tsourceLayerId: z.string(),\n\ttargetLayerId: z.string(),\n\tmode: z.enum([\n\t\t\"exact\",\n\t\t\"preserveVelocity\",\n\t\t\"morph\"\n\t]).default(\"preserveVelocity\"),\n\tblendFrames: z.number().int().min(0).max(30).default(0)\n}).strict();\n/**\n* Individual Scene Definition Schema.\n*/\nconst SceneDefinitionSchema = z.object({\n\tid: z.string(),\n\tchapter: z.enum([\n\t\t\"hook\",\n\t\t\"tension\",\n\t\t\"solution\",\n\t\t\"feature_spotlight\",\n\t\t\"outro\",\n\t\t\"custom\"\n\t]).default(\"custom\"),\n\tdurationMs: z.number().positive().optional(),\n\tdurationFrames: z.number().int().positive().optional(),\n\ttransitionOut: z.object({\n\t\ttype: SceneTransitionTypeSchema.default(\"cut\"),\n\t\tdurationFrames: z.number().int().min(0).default(0),\n\t\tcarrier: CarrierHandoffConfigSchema.optional(),\n\t\twhipDirection: z.enum([\n\t\t\t\"left\",\n\t\t\t\"right\",\n\t\t\t\"up\",\n\t\t\t\"down\"\n\t\t]).default(\"left\")\n\t}).default({\n\t\ttype: \"cut\",\n\t\tdurationFrames: 0\n\t})\n}).passthrough();\nfunction computeCarrierContinuity(stateAtCut, targetInitialState) {\n\treturn {\n\t\tx: stateAtCut.x,\n\t\ty: stateAtCut.y,\n\t\tscale: stateAtCut.scale,\n\t\tvx: stateAtCut.vx,\n\t\tvy: stateAtCut.vy,\n\t\t...targetInitialState\n\t};\n}\n/**\n* Calculates global scene offsets and handoff frames across a sequence.\n*/\nfunction calculateSequenceTimeline(scenes, fps = 60) {\n\tlet accumulatedFrame = 0;\n\tconst offsets = [];\n\tfor (const scene of scenes) {\n\t\tconst startFrame = accumulatedFrame;\n\t\tconst dur = scene.durationFrames ?? (scene.durationMs ? Math.round(scene.durationMs / 1e3 * fps) : 60);\n\t\toffsets.push({\n\t\t\tsceneId: scene.id,\n\t\t\tstartFrame,\n\t\t\tdurationFrames: dur\n\t\t});\n\t\tconst overlap = scene.transitionOverlap ?? scene.transitionOut?.durationFrames ?? 0;\n\t\taccumulatedFrame += Math.max(1, dur - overlap);\n\t}\n\tconst totalFrames = accumulatedFrame;\n\treturn {\n\t\ttotalFrames,\n\t\ttotalDurationMs: Math.round(totalFrames / fps * 1e3),\n\t\tsceneOffsets: offsets\n\t};\n}\nvar Scene = class Scene {\n\tid;\n\tchapter;\n\tdurationMs;\n\tdurationFrames;\n\ttransitionOut;\n\tlayout;\n\tconstructor(options) {\n\t\tthis.id = options.id;\n\t\tthis.chapter = options.chapter ?? \"custom\";\n\t\tthis.durationMs = options.durationMs;\n\t\tthis.durationFrames = options.durationFrames;\n\t\tthis.transitionOut = {\n\t\t\ttype: options.transitionOut?.type ?? \"cut\",\n\t\t\tdurationFrames: options.transitionOut?.durationFrames ?? 0,\n\t\t\tcarrier: options.transitionOut?.carrier,\n\t\t\twhipDirection: options.transitionOut?.whipDirection ?? \"left\"\n\t\t};\n\t\tthis.layout = options.layout ?? [];\n\t}\n\tstatic create(options) {\n\t\treturn new Scene(options);\n\t}\n};\nvar Sequence = class Sequence {\n\tfps;\n\twidth;\n\theight;\n\tbackgroundColor;\n\tfonts;\n\tsignals;\n\tscenes = [];\n\tconstructor(options = {}) {\n\t\tthis.fps = options.fps ?? 60;\n\t\tthis.width = options.width ?? 1920;\n\t\tthis.height = options.height ?? 1080;\n\t\tthis.backgroundColor = options.backgroundColor ?? \"#ffffff\";\n\t\tthis.fonts = options.fonts;\n\t\tthis.signals = options.signals;\n\t\tif (options.scenes) for (const sc of options.scenes) this.addScene(sc);\n\t}\n\tstatic create(options = {}) {\n\t\treturn new Sequence(options);\n\t}\n\taddScene(scene) {\n\t\tconst s = scene instanceof Scene ? scene : new Scene(scene);\n\t\tthis.scenes.push(s);\n\t\treturn this;\n\t}\n\tgetScenes() {\n\t\treturn this.scenes;\n\t}\n\tcalculateTimeline() {\n\t\treturn calculateSequenceTimeline(this.scenes, this.fps);\n\t}\n\ttoProgram() {\n\t\tconst timeline = this.calculateTimeline();\n\t\tconst rootLayout = [];\n\t\tfor (let i = 0; i < this.scenes.length; i++) {\n\t\t\tconst scene = this.scenes[i];\n\t\t\tconst offset = timeline.sceneOffsets[i];\n\t\t\tif (!offset) continue;\n\t\t\tfor (const node of scene.layout) {\n\t\t\t\tconst cloned = { ...node };\n\t\t\t\tcloned.startFrame = (cloned.startFrame ?? 0) + offset.startFrame;\n\t\t\t\tif (cloned.durationFrames === void 0) cloned.durationFrames = offset.durationFrames;\n\t\t\t\trootLayout.push(cloned);\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\twidth: this.width,\n\t\t\theight: this.height,\n\t\t\tbackgroundColor: this.backgroundColor,\n\t\t\tfps: this.fps,\n\t\t\tvolume: 1,\n\t\t\tmode: \"Video\",\n\t\t\tlayout: rootLayout,\n\t\t\tfonts: this.fonts,\n\t\t\tsignals: this.signals\n\t\t};\n\t}\n};\n\n//#endregion\n//#region src/program/stagger.ts\n/**\n* Calculates the frame delay offset for a child at `index` in a container of `totalCount` items.\n*/\nfunction computeStaggerDelay(index, totalCount, staggerFrames, direction = \"forward\") {\n\tif (staggerFrames <= 0 || totalCount <= 1) return 0;\n\tswitch (direction) {\n\t\tcase \"reverse\": return (totalCount - 1 - index) * staggerFrames;\n\t\tcase \"center-out\": {\n\t\t\tconst center = (totalCount - 1) / 2;\n\t\t\tconst dist = Math.abs(index - center);\n\t\t\treturn Math.round(dist * staggerFrames);\n\t\t}\n\t\tcase \"forward\":\n\t\tdefault: return index * staggerFrames;\n\t}\n}\n/**\n* Applies stagger timing offsets to child nodes, returning cloned objects with adjusted `startFrame`.\n*/\nfunction applyStaggerToChildren(children, staggerFrames, direction = \"forward\", baseOffset = 0) {\n\tif (!children || children.length === 0) return [];\n\tif (staggerFrames <= 0 && baseOffset === 0) return [...children];\n\treturn children.map((child, idx) => {\n\t\tconst delay = computeStaggerDelay(idx, children.length, staggerFrames, direction);\n\t\tconst currentStart = child.startFrame ?? 0;\n\t\treturn {\n\t\t\t...child,\n\t\t\tstartFrame: currentStart + delay + baseOffset\n\t\t};\n\t});\n}\n\n//#endregion\n//#region src/program/to-virtual-media.ts\n/**\n* The ONE constructor from document to render tree (spec: SKILL.md).\n*\n* A validated v2 program (`CompositorProgramConfig`) becomes the\n* `VirtualMediaData` tree the compositor renderer consumes. Every layout node\n* becomes a `CompositorLayer` op carrying its document fields verbatim\n* (id/kind/style/timing/animation); containers carry nested node ops as\n* children; media nodes bind their graph source as the content child when\n* resolved.\n*\n* Pure + deterministic: same doc → same tree. No width/height resolution\n* here — geometry comes from `computeLayout` at render time.\n*/\nfunction nodeToVirtualMedia(node, resolveMedia, fps, inheritedOffset = 0, compDurationMs, inheritedDurationFrames) {\n\tlet children = [];\n\tconst sourceRef = node.src ?? node.inputHandleId;\n\tconst isDirectMediaSource = (s) => typeof s === \"string\" && (s.startsWith(\"http://\") || s.startsWith(\"https://\") || s.startsWith(\"file://\") || s.startsWith(\"/\") || s.startsWith(\"./\") || s.startsWith(\"blob:\") || s.startsWith(\"data:\") || /\\.(png|jpe?g|webp|gif|svg|mp4|webm|mov|mkv|mp3|wav|ogg|m4a|srt|vtt)$/i.test(s));\n\tlet media;\n\tif (node.kind === \"media\") {\n\t\tif (resolveMedia) media = resolveMedia(node.inputHandleId);\n\t\tif (!media && sourceRef && (isDirectMediaSource(sourceRef) || node.src)) media = createVirtualMedia(sourceRef, node.dataType ?? \"Video\");\n\t\tif (media && node.crop) {\n\t\t\tconst cropRaw = node.crop;\n\t\t\tconst cropOp = typeof cropRaw.toOperation === \"function\" ? cropRaw.toOperation() : cropRaw;\n\t\t\tmedia = {\n\t\t\t\tmetadata: { ...media.metadata },\n\t\t\t\toperation: {\n\t\t\t\t\top: \"Crop\",\n\t\t\t\t\t...cropOp,\n\t\t\t\t\tdataType: media.operation.dataType\n\t\t\t\t},\n\t\t\t\tchildren: [media]\n\t\t\t};\n\t\t}\n\t\tif (media && Array.isArray(node.effects)) for (const eff of node.effects) {\n\t\t\tconst effOp = typeof eff.toOperation === \"function\" ? eff.toOperation() : eff;\n\t\t\tmedia = {\n\t\t\t\tmetadata: { ...media.metadata },\n\t\t\t\toperation: {\n\t\t\t\t\tid: node.id ? `${node.id}-${effOp.op ?? \"effect\"}` : void 0,\n\t\t\t\t\teffect: eff,\n\t\t\t\t\t...effOp,\n\t\t\t\t\tdataType: media.operation.dataType\n\t\t\t\t},\n\t\t\t\tchildren: [media]\n\t\t\t};\n\t\t}\n\t\tif (media && node.yolo) {\n\t\t\tconst yoloRaw = node.yolo;\n\t\t\tconst yoloOp = typeof yoloRaw.toOperation === \"function\" ? yoloRaw.toOperation() : yoloRaw;\n\t\t\tmedia = {\n\t\t\t\tmetadata: { ...media.metadata },\n\t\t\t\toperation: {\n\t\t\t\t\top: \"Yolo\",\n\t\t\t\t\tid: node.id,\n\t\t\t\t\teffect: yoloRaw,\n\t\t\t\t\t...yoloOp,\n\t\t\t\t\tdataType: media.operation.dataType\n\t\t\t\t},\n\t\t\t\tchildren: [media]\n\t\t\t};\n\t\t}\n\t}\n\tif (node.kind === \"media\") children = media ? [media] : [];\n\telse if (\"children\" in node && node.children) {\n\t\tconst staggerFrames = \"staggerFrames\" in node && typeof node.staggerFrames === \"number\" ? node.staggerFrames : 0;\n\t\tconst staggerDirection = \"staggerDirection\" in node && typeof node.staggerDirection === \"string\" ? node.staggerDirection : \"forward\";\n\t\tconst nodeStart = typeof node.startFrame === \"number\" && Number.isFinite(node.startFrame) ? Math.round(node.startFrame) : 0;\n\t\tconst nodeDuration = typeof node.durationFrames === \"number\" && Number.isFinite(node.durationFrames) ? Math.round(node.durationFrames) : inheritedDurationFrames;\n\t\tchildren = node.children.map((c, idx) => {\n\t\t\tconst delay = computeStaggerDelay(idx, node.children.length, staggerFrames, staggerDirection);\n\t\t\treturn nodeToVirtualMedia(c, resolveMedia, fps, inheritedOffset + nodeStart + delay, compDurationMs, c.durationFrames === void 0 ? nodeDuration : void 0);\n\t\t});\n\t}\n\tlet dataType = \"Image\";\n\tlet limit;\n\tif (media) {\n\t\tdataType = media.operation?.dataType ?? \"Image\";\n\t\tconst durationMs$1 = dataType === \"Image\" || dataType === \"SVG\" ? void 0 : getActiveMediaMetadata(media)?.durationMs;\n\t\tif (durationMs$1 !== void 0 && durationMs$1 !== null) limit = Math.max(1, Math.round(durationMs$1 / 1e3 * fps));\n\t}\n\tconst isCaption = media?.operation?.dataType === \"Caption\";\n\tconst isContainer = node.kind === \"flex\" || node.kind === \"block\" || node.kind === \"box\";\n\tconst startFrame = (typeof node.startFrame === \"number\" && Number.isFinite(node.startFrame) && node.startFrame >= 0 ? Math.round(node.startFrame) : 0) + inheritedOffset;\n\tlet dur = typeof node.durationFrames === \"number\" && Number.isFinite(node.durationFrames) && node.durationFrames > 0 ? Math.round(node.durationFrames) : void 0;\n\tconst defaultCompDuration = inheritedDurationFrames ?? Math.round((compDurationMs ?? 1e4) / 1e3 * fps);\n\tif (isContainer && children.length > 0) {\n\t\tif (node.durationFrames === void 0) {\n\t\t\tconst childEnds = children.map((c) => (c.operation?.startFrame ?? 0) + (c.operation?.durationFrames ?? defaultCompDuration));\n\t\t\tdur = Math.max(1, Math.max(...childEnds) - startFrame);\n\t\t}\n\t} else if (isCaption && limit !== void 0 && limit > 0) dur = limit;\n\telse if (dur !== void 0) {\n\t\tif ((dataType === \"Video\" || dataType === \"Audio\") && limit !== void 0 && limit > 0) dur = Math.min(dur, limit);\n\t} else dur = limit ?? inheritedDurationFrames ?? Math.round((compDurationMs ?? 1e4) / 1e3 * fps);\n\tconst durationMs = dur / fps * 1e3;\n\tif (node.kind === \"media\" && media) {\n\t\tif (!media.metadata?.durationMs || media.metadata.durationMs <= 0) {\n\t\t\tif (!media.metadata) media.metadata = {};\n\t\t\tmedia.metadata.durationMs = durationMs;\n\t\t}\n\t}\n\treturn {\n\t\tmetadata: { durationMs },\n\t\toperation: {\n\t\t\top: \"CompositorLayer\",\n\t\t\t...node,\n\t\t\tstartFrame,\n\t\t\tdurationFrames: dur,\n\t\t\tdataType\n\t\t},\n\t\tchildren\n\t};\n}\nfunction compositorToProgram(config, options) {\n\tconst { isVideoMode, fps, durationMs, resolveMedia, signals } = options;\n\tlet rootMedia = {\n\t\tmetadata: {\n\t\t\twidth: config.width,\n\t\t\theight: config.height,\n\t\t\tfps,\n\t\t\t...durationMs !== void 0 && { durationMs }\n\t\t},\n\t\toperation: {\n\t\t\top: \"Compositor\",\n\t\t\twidth: config.width,\n\t\t\theight: config.height,\n\t\t\tfps,\n\t\t\tmode: config.mode ?? \"Video\",\n\t\t\tbackgroundColor: config.backgroundColor,\n\t\t\tvolume: config.volume ?? 1,\n\t\t\tdataType: isVideoMode ? \"Video\" : \"Image\",\n\t\t\tlayout: config.layout,\n\t\t\tsignals: signals ?? config.signals ?? {},\n\t\t\t...(config.onRequestFrame || options.onRequestFrame) && { onRequestFrame: config.onRequestFrame ?? options.onRequestFrame }\n\t\t},\n\t\tchildren: config.layout.map((n) => nodeToVirtualMedia(n, resolveMedia, fps, 0, durationMs))\n\t};\n\tconst effectsList = Array.isArray(options.effects) ? options.effects : Array.isArray(config.effects) ? config.effects : [];\n\tfor (const eff of effectsList) {\n\t\tconst effOp = typeof eff.toOperation === \"function\" ? eff.toOperation() : eff;\n\t\trootMedia = {\n\t\t\tmetadata: { ...rootMedia.metadata },\n\t\t\toperation: {\n\t\t\t\t...effOp,\n\t\t\t\tdataType: rootMedia.operation.dataType\n\t\t\t},\n\t\t\tchildren: [rootMedia]\n\t\t};\n\t}\n\tconst yoloRaw = config.yolo ?? options.yolo;\n\tif (yoloRaw) {\n\t\tconst yoloOp = typeof yoloRaw.toOperation === \"function\" ? yoloRaw.toOperation() : yoloRaw;\n\t\trootMedia = {\n\t\t\tmetadata: { ...rootMedia.metadata },\n\t\t\toperation: {\n\t\t\t\top: \"Yolo\",\n\t\t\t\t...yoloOp,\n\t\t\t\tdataType: rootMedia.operation.dataType\n\t\t\t},\n\t\t\tchildren: [rootMedia]\n\t\t};\n\t}\n\treturn rootMedia;\n}\n/** Recursively gather every node op from a render tree (in order). */\nfunction collectNodeOps(nodes) {\n\tconst out = [];\n\tconst walk = (vm) => {\n\t\tif (vm?.operation?.op === \"CompositorLayer\") out.push(vm);\n\t\tfor (const c of vm?.children ?? []) walk(c);\n\t};\n\tfor (const n of nodes) walk(n);\n\treturn out;\n}\n\n//#endregion\n//#region src/program/validate.ts\n/**\n* Coded validation for the v2 program document (spec: SKILL.md).\n*\n* Runs on the RAW input BEFORE zod: zod strips unknown keys silently, so\n* v1 shapes (`layers`, `layerUpdates`, `FPS`) and structural errors must be\n* caught in a pre-parse walk or the E-codes never fire. The zod schema then\n* handles shape/refinement errors (mapped to E1xxx-style issues).\n*/\nconst KIND_SET = new Set([\n\t\"flex\",\n\t\"block\",\n\t\"box\",\n\t\"text\",\n\t\"media\",\n\t\"shape\",\n\t\"chart\"\n]);\nconst MAX_NODES = 512;\nconst MAX_DEPTH = 64;\nconst issue = (code, path, message) => ({\n\tcode,\n\tpath,\n\tmessage\n});\nfunction validateLayoutProgram(raw) {\n\tconst issues = [];\n\tif (!raw || typeof raw !== \"object\" || Array.isArray(raw)) return {\n\t\tok: false,\n\t\tissues: [issue(\"E1001\", [], \"Compositor config must be an object.\")]\n\t};\n\tconst obj = raw;\n\tif (\"layers\" in obj) issues.push(issue(\"E1001\", [\"layers\"], \"Config v2 uses `layout` — `layers` is removed.\"));\n\tif (\"layerUpdates\" in obj) issues.push(issue(\"E1001\", [\"layerUpdates\"], \"Config v2 uses `layout` — `layerUpdates` is removed.\"));\n\tif (\"FPS\" in obj) issues.push(issue(\"E1001\", [\"FPS\"], \"Config v2 uses `fps` — `FPS` is removed.\"));\n\tconst seenIds = /* @__PURE__ */ new Set();\n\tlet nodeCount = 0;\n\tconst isImageMode = obj.mode === \"Image\";\n\tconst walk = (node, path, depth) => {\n\t\tif (depth > MAX_DEPTH) {\n\t\t\tissues.push(issue(\"E1212\", [...path, \"children\"], `Layout nesting exceeds ${MAX_DEPTH} levels.`));\n\t\t\treturn;\n\t\t}\n\t\tif (!node || typeof node !== \"object\" || Array.isArray(node)) {\n\t\t\tissues.push(issue(\"E1201\", path, \"Layout node must be an object.\"));\n\t\t\treturn;\n\t\t}\n\t\tnodeCount += 1;\n\t\tif (nodeCount > MAX_NODES) {\n\t\t\tissues.push(issue(\"E1211\", path, `Composition exceeds ${MAX_NODES} nodes.`));\n\t\t\treturn;\n\t\t}\n\t\tconst n = node;\n\t\tconst kind = n.kind;\n\t\tif (typeof kind !== \"string\" || !KIND_SET.has(kind)) issues.push(issue(\"E1201\", [...path, \"kind\"], `Unknown layout node kind '${String(kind)}'. Expected one of: flex, block, box, text, media, shape, chart.`));\n\t\tconst id = n.id;\n\t\tif (typeof id !== \"string\" || id.length === 0) issues.push(issue(\"E1203\", [...path, \"id\"], \"Layout node requires a non-empty `id`.\"));\n\t\telse if (seenIds.has(id)) issues.push(issue(\"E1202\", [...path, \"id\"], `Duplicate node id '${id}'.`));\n\t\telse seenIds.add(id);\n\t\tfor (const axis of [\"width\", \"height\"]) {\n\t\t\tconst v = n[axis];\n\t\t\tif (typeof v === \"number\" && (!Number.isFinite(v) || v < 0)) issues.push(issue(\"E1205\", [...path, axis], `SizeSpec must be a finite number >= 0 or one of \"auto\" | \"fit\" | \"fill\".`));\n\t\t\telse if (typeof v === \"string\" && v !== \"auto\" && v !== \"fit\" && v !== \"fill\") issues.push(issue(\"E1205\", [...path, axis], `SizeSpec must be a finite number >= 0 or one of \"auto\" | \"fit\" | \"fill\".`));\n\t\t}\n\t\tif (n.position === \"absolute\") {\n\t\t\tif (typeof n.x !== \"number\" || typeof n.y !== \"number\") issues.push(issue(\"E1206\", [...path], \"An absolute node requires numeric `x` and `y`.\"));\n\t\t\tif (n.grow !== void 0) issues.push(issue(\"E1209\", [...path, \"grow\"], \"`grow` is not allowed on an absolute node (it is out of flow).\"));\n\t\t}\n\t\tif (kind === \"media\" && (typeof n.inputHandleId !== \"string\" || n.inputHandleId.length === 0)) issues.push(issue(\"E1204\", [...path, \"inputHandleId\"], \"A media node requires a non-empty `inputHandleId`.\"));\n\t\tif (kind === \"text\" && typeof n.fontSize === \"number\" && n.fontSize <= 0) issues.push(issue(\"E1210\", [...path, \"fontSize\"], \"A text node requires fontSize > 0.\"));\n\t\tif (kind === \"shape\") {\n\t\t\tif (n.trimStart !== void 0) {\n\t\t\t\tconst ts = n.trimStart;\n\t\t\t\tif (typeof ts !== \"number\" || !Number.isFinite(ts) || Number.isNaN(ts) || ts < 0 || ts > 1) issues.push(issue(\"E1208\", [...path, \"trimStart\"], \"`trimStart` must be a finite number between 0 and 1.\"));\n\t\t\t}\n\t\t\tif (n.trimEnd !== void 0) {\n\t\t\t\tconst te = n.trimEnd;\n\t\t\t\tif (typeof te !== \"number\" || !Number.isFinite(te) || Number.isNaN(te) || te < 0 || te > 1) issues.push(issue(\"E1208\", [...path, \"trimEnd\"], \"`trimEnd` must be a finite number between 0 and 1.\"));\n\t\t\t}\n\t\t}\n\t\tif (!isImageMode) {\n\t\t\tif (n.durationFrames !== void 0) {\n\t\t\t\tconst df = n.durationFrames;\n\t\t\t\tif (typeof df !== \"number\" || !Number.isFinite(df) || Number.isNaN(df) || df < 1 || !Number.isInteger(df)) issues.push(issue(\"E1207\", [...path, \"durationFrames\"], `\\`durationFrames\\` must be a positive integer (>= 1). Received: ${String(df)}.`));\n\t\t\t}\n\t\t\tif (n.startFrame !== void 0) {\n\t\t\t\tconst sf = n.startFrame;\n\t\t\t\tif (typeof sf !== \"number\" || !Number.isFinite(sf) || Number.isNaN(sf) || sf < 0 || !Number.isInteger(sf)) issues.push(issue(\"E1207\", [...path, \"startFrame\"], `\\`startFrame\\` must be a non-negative integer (>= 0). Received: ${String(sf)}.`));\n\t\t\t}\n\t\t}\n\t\tif (n.opacity !== void 0) {\n\t\t\tconst op = n.opacity;\n\t\t\tif (typeof op !== \"number\" || !Number.isFinite(op) || Number.isNaN(op) || op < 0 || op > 1) issues.push(issue(\"E1213\", [...path, \"opacity\"], `\\`opacity\\` must be a number between 0 and 1. Received: ${String(op)}.`));\n\t\t}\n\t\tconst anim = n.animation;\n\t\tif (anim && Array.isArray(anim.tracks) && kind !== void 0) {\n\t\t\tconst props = /* @__PURE__ */ new Set();\n\t\t\tfor (let tIdx = 0; tIdx < anim.tracks.length; tIdx++) {\n\t\t\t\tconst prop = anim.tracks[tIdx]?.prop;\n\t\t\t\tif (typeof prop === \"string\") {\n\t\t\t\t\tif (props.has(prop)) issues.push(issue(\"E1208\", [\n\t\t\t\t\t\t...path,\n\t\t\t\t\t\t\"animation\",\n\t\t\t\t\t\t\"tracks\",\n\t\t\t\t\t\ttIdx\n\t\t\t\t\t], `Duplicate track property '${prop}' on node '${String(id)}'.`));\n\t\t\t\t\tprops.add(prop);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst children = n.children;\n\t\tif (Array.isArray(children)) for (let i = 0; i < children.length; i++) walk(children[i], [\n\t\t\t...path,\n\t\t\t\"children\",\n\t\t\ti\n\t\t], depth + 1);\n\t};\n\tconst layout = obj.layout;\n\tif (Array.isArray(layout)) for (let i = 0; i < layout.length; i++) walk(layout[i], [\"layout\", i], 0);\n\telse if (layout !== void 0) issues.push(issue(\"E1001\", [\"layout\"], \"`layout` must be an array of nodes.\"));\n\tif (issues.length > 0) return {\n\t\tok: false,\n\t\tissues\n\t};\n\treturn { ok: true };\n}\nfunction cleanImageModeTiming(raw) {\n\tif (!raw || typeof raw !== \"object\" || Array.isArray(raw)) return raw;\n\tconst obj = raw;\n\tif (obj.mode !== \"Image\" || !Array.isArray(obj.layout)) return raw;\n\tconst sanitizeNode = (node) => {\n\t\tif (!node || typeof node !== \"object\" || Array.isArray(node)) return node;\n\t\tconst n = { ...node };\n\t\tif (n.durationFrames !== void 0 && (typeof n.durationFrames !== \"number\" || !Number.isFinite(n.durationFrames) || n.durationFrames < 1 || !Number.isInteger(n.durationFrames))) delete n.durationFrames;\n\t\tif (n.startFrame !== void 0 && (typeof n.startFrame !== \"number\" || !Number.isFinite(n.startFrame) || n.startFrame < 0 || !Number.isInteger(n.startFrame))) delete n.startFrame;\n\t\tif (Array.isArray(n.children)) n.children = n.children.map(sanitizeNode);\n\t\treturn n;\n\t};\n\treturn {\n\t\t...obj,\n\t\tlayout: obj.layout.map(sanitizeNode)\n\t};\n}\n/** Fast-fail shape gate used by processors: validate raw config then parse. */\nfunction parseProgram(raw) {\n\tconst pre = validateLayoutProgram(raw);\n\tif (!pre.ok) return {\n\t\tok: false,\n\t\tissues: pre.issues\n\t};\n\tconst cleaned = cleanImageModeTiming(raw);\n\tconst parsed = CompositorProgramSchema.safeParse(cleaned);\n\tif (!parsed.success) return {\n\t\tok: false,\n\t\tissues: parsed.error.issues.map((i) => issue(\"E1001\", i.path.map((p) => typeof p === \"symbol\" ? p.toString() : p), i.message))\n\t};\n\treturn {\n\t\tok: true,\n\t\tconfig: parsed.data\n\t};\n}\n/** Collect every node id in the tree (depth-first, in order). */\nfunction collectNodeIds(nodes) {\n\tconst ids = [];\n\tconst walk = (n) => {\n\t\tids.push(n.id);\n\t\tif (\"children\" in n && n.children) walkChildren(n.children);\n\t};\n\tconst walkChildren = (list) => {\n\t\tfor (const n of list) walk(n);\n\t};\n\twalkChildren(nodes);\n\treturn ids;\n}\n/** Collect media node bindings: inputHandleId -> node id. */\nfunction collectMediaBindings(nodes) {\n\tconst bindings = /* @__PURE__ */ new Map();\n\tconst walk = (n) => {\n\t\tif (n.kind === \"media\") bindings.set(n.inputHandleId, n.id);\n\t\tif (\"children\" in n && n.children) for (const c of n.children) walk(c);\n\t};\n\tfor (const n of nodes) walk(n);\n\treturn bindings;\n}\n\n//#endregion\nexport { AETextAnimatorSchema, AdvancedTextAnimatorBuilder, AdvancedTextAnimatorSchema, AnchorGroupingSchema, AnchorPresetSchema, AnimatableGlyphPropsSchema, AnimatablePropSchema, AnimationTrackSchema, AudioSpectrumTypographySchema, BlockNodeSchema, BoxNodeSchema, CameraAnimation, CameraDoFSchema, CameraLensSchema, CameraNodeSchema, CameraShakeSchema, CarrierHandoffConfigSchema, ChartAreaStyleSchema, ChartAxisSchema, ChartDataPoint2DSchema, ChartDataPointOHLCSchema, ChartGPUOptionsSchema, ChartLineStyleSchema, ChartNodeSchema, ChartPointStyleSchema, ChartSeriesSchema, ChartSeriesTypeSchema, ChromaticGlitchConfigSchema, ColorStopSchema, CompositionChartNodeSchema, CompositorProgramSchema, CubicBezierSegmentSchema, DynamicStrokePropertiesSchema, EXTENDED_3D_ANIMATABLE_PROPS, EaseRefSchema, EnhancedTextNodeSchema, ExpressionSelectorSchema, ExtendedGlyphPropertiesSchema, FlexNodeSchema, GlyphAnchorGroupingSchema, GlyphAnchorPointSchema, KeyframeSchema, KineticMarqueeConfigSchema, LayerAnimation, LayerAnimationSchema, LayoutNodeSchema, LightNodeSchema, LightTypeSchema, LineSpacingDynamicsSchema, LongShadowConfigSchema, MaterialTypeSchema, MediaNodeSchema, Model3DNodeSchema, ParticleDissolveConfigSchema, Scene, SceneDefinitionSchema, SceneTransitionTypeSchema, SelectorBasedOnSchema, SelectorModeSchema, SelectorShapeSchema, SelectorUnitsSchema, Sequence, ShapeFields, ShapeNodeSchema, ShapeTypeSchema, SignalColorModeSchema, SignalModeSchema, SizeSpecSchema, SkewPropertiesSchema, Spatial3DPropertiesSchema, SpringPhysicsSchema, TextAnchorConfigSchema, TextAnimator, TextAnimatorBuilder, TextAnimatorSchema, TextAnimatorTransformSchema, TextCursorConfigSchema, TextCursorStyleSchema, TextNodeSchema, TextPathBuilder, TextPathOptionsSchema, TextPathSourceSchema, TextRangeSelectorSchema, TextScrambleConfigSchema, TextSelectorSchema, TextShadowSchema, TextSignalSelectorSchema, TextSpanMarkSchema, TextSpanSchema, TextWigglySelectorSchema, TrackSourceSchema, TypewriterAnimatorSchema, TypingCadenceSchema, VariableFontAxesSchema, Vec2Schema, VolumetricFormationConfigSchema, VolumetricFormationModeSchema, applyStaggerToChildren, buildPathLUT, calculateSequenceTimeline, collectMediaBindings, collectNodeIds, collectNodeOps, compositorToProgram, computeAnchorPivotOffset, computeCarrierContinuity, computeLayout, computeLayoutSync, computeLineLeadingDisplacement, computeRangeSelectorWeight, computeStaggerDelay, containerChildren, deterministicWigglyNoise, distanceToCurveParameter, ellipseToCubicBeziers, evaluateAnimationAtFrame, evaluateCubicBezier, evaluateCubicBezierDerivative, evaluateExpressionSelector, evaluateKeyframes, evaluateMarqueeOffset, evaluateSelectorCombination, evaluateSignal, evaluateSignalAccumulator, evaluateSkewMatrix, evaluateSpringOvershoot, evaluateSpringProgress, evaluateTrackAtFrame, evaluateTypewriterState, evaluateVolumetricFormation, evaluateWiggle, generateArcLengthLUT, generatePathSegments, getScramblePool, getShuffledOrder, initLayout, parseProgram, parseSvgPathToCubicBeziers, rotateHue, sampleAudioSpectrumScale, sampleCurveGeometry, samplePathChainGeometry, svgArcToCubicBeziers, validateLayoutProgram, waveToCubicBeziers };\n//# sourceMappingURL=index.mjs.map","import type {\n\tBoxNode,\n\tLayoutNode,\n\tMaterialType,\n\tModel3DNode,\n\tTextNode,\n} from \"@gitframes/compositions/program\";\nimport {\n\tgenerateExtrudedTextGeometry,\n\ttype Model3DData,\n\tSlugFontCache,\n} from \"@gitframes/webgpu-renderers\";\nimport { type AnimatableNode, Layer } from \"./index.js\";\n\nexport interface CubeFaceConfig {\n\tbackground?: string;\n\tborderRadius?: number;\n\tborderWidth?: number;\n\tborderColor?: string;\n\topacity?: number;\n\tmaterial?: MaterialType;\n\tshininess?: number;\n\troughness?: number;\n\tspecularIntensity?: number;\n\tmetallic?: number;\n\tambientIntensity?: number;\n\tior?: number;\n\ttransmission?: number;\n\tdispersion?: number;\n\tfresnelPower?: number;\n\tenvIntensity?: number;\n\tchildren?: LayoutNode[];\n}\n\nexport type CubeFaceInput = CubeFaceConfig | LayoutNode | string;\n\nexport interface Cube3DOptions {\n\tid?: string;\n\tsize: number | [number, number, number];\n\tx?: number;\n\ty?: number;\n\tz?: number;\n\trotateX?: number;\n\trotateY?: number;\n\trotateZ?: number;\n\tfaces?: {\n\t\tfront?: CubeFaceInput;\n\t\tback?: CubeFaceInput;\n\t\tleft?: CubeFaceInput;\n\t\tright?: CubeFaceInput;\n\t\ttop?: CubeFaceInput;\n\t\tbottom?: CubeFaceInput;\n\t};\n\ttwoSided?: boolean;\n\tmaterial?: MaterialType;\n\tshininess?: number;\n\troughness?: number;\n\tspecularIntensity?: number;\n\tmetallic?: number;\n\tambientIntensity?: number;\n\tior?: number;\n\ttransmission?: number;\n\tdispersion?: number;\n\tfresnelPower?: number;\n\tenvIntensity?: number;\n\topacity?: number;\n}\n\nexport interface Carousel3DOptions {\n\tid?: string;\n\tradius: number;\n\titems: LayoutNode[];\n\tx?: number;\n\ty?: number;\n\tz?: number;\n\trotateX?: number;\n\trotateY?: number;\n\trotateZ?: number;\n\tfaceInward?: boolean;\n\titemWidth?: number;\n\titemHeight?: number;\n\ttwoSided?: boolean;\n\topacity?: number;\n}\n\nexport interface Prism3DOptions {\n\tid?: string;\n\tsides: number;\n\tradius: number;\n\theight: number;\n\tx?: number;\n\ty?: number;\n\tz?: number;\n\trotateX?: number;\n\trotateY?: number;\n\trotateZ?: number;\n\tsideConfigs?: Array<CubeFaceInput>;\n\ttwoSided?: boolean;\n\tmaterial?: MaterialType;\n\tshininess?: number;\n\troughness?: number;\n\tspecularIntensity?: number;\n\tmetallic?: number;\n\tambientIntensity?: number;\n\tior?: number;\n\ttransmission?: number;\n\tdispersion?: number;\n\tfresnelPower?: number;\n\tenvIntensity?: number;\n\topacity?: number;\n}\n\nexport interface Plane3DOptions {\n\tid?: string;\n\twidth: number;\n\theight: number;\n\tx?: number;\n\ty?: number;\n\tz?: number;\n\trotateX?: number;\n\trotateY?: number;\n\trotateZ?: number;\n\tbackground?: string;\n\tborderRadius?: number;\n\ttwoSided?: boolean;\n\tmaterial?: MaterialType;\n\tshininess?: number;\n\troughness?: number;\n\tspecularIntensity?: number;\n\tmetallic?: number;\n\tambientIntensity?: number;\n\tior?: number;\n\ttransmission?: number;\n\tdispersion?: number;\n\tfresnelPower?: number;\n\tenvIntensity?: number;\n\topacity?: number;\n\tchildren?: LayoutNode[];\n}\n\nexport interface Grid3DOptions {\n\tid?: string;\n\twidth: number;\n\theight: number;\n\tdivisions?: number;\n\tcolor?: string;\n\t/** Line thickness in world pixels (default 2). */\n\tlineWidth?: number;\n\tx?: number;\n\ty?: number;\n\tz?: number;\n\trotateX?: number;\n\trotateY?: number;\n\trotateZ?: number;\n\topacity?: number;\n}\n\nexport interface Text3DOptions {\n\tid?: string;\n\ttext: string;\n\tfontSize?: number;\n\tfontFamily?: string;\n\tfontWeight?: number | string;\n\tfontStyle?: string;\n\tfill?: string;\n\tx?: number;\n\ty?: number;\n\tz?: number;\n\trotateX?: number;\n\trotateY?: number;\n\trotateZ?: number;\n\talign?: \"start\" | \"center\" | \"end\" | \"left\" | \"right\";\n\tverticalAlign?: \"top\" | \"middle\" | \"bottom\";\n\tletterSpacing?: number;\n\tlineHeight?: number;\n\tis3D?: boolean;\n\ttwoSided?: boolean;\n\tmaterial?: MaterialType;\n\tshininess?: number;\n\troughness?: number;\n\tspecularIntensity?: number;\n\tambientIntensity?: number;\n\tmetallic?: number;\n\tior?: number;\n\ttransmission?: number;\n\tdispersion?: number;\n\tfresnelPower?: number;\n\tenvIntensity?: number;\n\topacity?: number;\n\tbackground?: string;\n\tborderRadius?: number;\n\tpadding?: number;\n\tstroke?: string;\n\tstrokeWidth?: number;\n\textrusionDepth?: number;\n\textrusionSteps?: number;\n\tbevelColor?: string;\n}\n\nexport interface ExtrudedText3DOptions extends Text3DOptions {\n\tdepth: number;\n\tslices?: number;\n\tcurveSegments?: number;\n}\n\nexport type Shape3DContainer = AnimatableNode<BoxNode> & {\n\tfaces?: AnimatableNode<BoxNode>[];\n\titems?: LayoutNode[];\n\t[Symbol.iterator](): Iterator<LayoutNode>;\n};\n\nexport const Layer3D = {\n\t/**\n\t * Creates a true 3D volumetric cube with 6 textured or colored faces.\n\t * Returns a preserve-3d container that can be transformed in 3D camera space.\n\t */\n\tcube(options: Cube3DOptions): Shape3DContainer {\n\t\tconst size = options.size;\n\t\tconst [w, h, d] = typeof size === \"number\" ? [size, size, size] : size;\n\t\tconst twoSided = options.twoSided ?? true;\n\t\tconst defaultColors = {\n\t\t\tfront: \"#3b82f6\",\n\t\t\tback: \"#1d4ed8\",\n\t\t\tleft: \"#2563eb\",\n\t\t\tright: \"#1e40af\",\n\t\t\ttop: \"#60a5fa\",\n\t\t\tbottom: \"#172554\",\n\t\t};\n\n\t\tconst buildFace = (\n\t\t\tfaceId: string,\n\t\t\tinput: CubeFaceInput | undefined,\n\t\t\tdefaultColor: string,\n\t\t\tfaceW: number,\n\t\t\tfaceH: number,\n\t\t\tfaceProps: Partial<BoxNode>,\n\t\t): AnimatableNode<BoxNode> => {\n\t\t\tif (input && typeof input === \"object\" && \"kind\" in input) {\n\t\t\t\tconst node = input as AnimatableNode<BoxNode>;\n\t\t\t\tnode.position = \"absolute\";\n\t\t\t\tnode.is3D = true;\n\t\t\t\tnode.twoSided = twoSided;\n\t\t\t\tnode.material = node.material ?? options.material ?? \"lit\";\n\t\t\t\tnode.shininess = node.shininess ?? options.shininess ?? 32;\n\t\t\t\tnode.specularIntensity =\n\t\t\t\t\tnode.specularIntensity ?? options.specularIntensity ?? 0.5;\n\t\t\t\tif (options.roughness !== undefined && node.roughness === undefined) {\n\t\t\t\t\tnode.roughness = options.roughness;\n\t\t\t\t}\n\t\t\t\tif (options.metallic !== undefined && node.metallic === undefined) {\n\t\t\t\t\tnode.metallic = options.metallic;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\toptions.ambientIntensity !== undefined &&\n\t\t\t\t\tnode.ambientIntensity === undefined\n\t\t\t\t) {\n\t\t\t\t\tnode.ambientIntensity = options.ambientIntensity;\n\t\t\t\t}\n\t\t\t\tObject.assign(node, faceProps);\n\t\t\t\treturn node;\n\t\t\t}\n\t\t\tconst cfg: CubeFaceConfig =\n\t\t\t\ttypeof input === \"string\"\n\t\t\t\t\t? { background: input }\n\t\t\t\t\t: (input ?? { background: defaultColor });\n\n\t\t\treturn Layer.box({\n\t\t\t\tid: `${options.id ?? \"cube\"}-${faceId}`,\n\t\t\t\tposition: \"absolute\",\n\t\t\t\twidth: faceW,\n\t\t\t\theight: faceH,\n\t\t\t\tis3D: true,\n\t\t\t\ttwoSided,\n\t\t\t\tmaterial: cfg.material ?? options.material ?? \"lit\",\n\t\t\t\tshininess: cfg.shininess ?? options.shininess ?? 32,\n\t\t\t\tspecularIntensity:\n\t\t\t\t\tcfg.specularIntensity ?? options.specularIntensity ?? 0.5,\n\t\t\t\troughness: cfg.roughness ?? options.roughness,\n\t\t\t\tmetallic: cfg.metallic ?? options.metallic,\n\t\t\t\tambientIntensity:\n\t\t\t\t\tcfg.ambientIntensity ?? options.ambientIntensity ?? 1.0,\n\t\t\t\tbackground: cfg.background ?? defaultColor,\n\t\t\t\tborderRadius: cfg.borderRadius ?? 0,\n\t\t\t\tborderWidth: cfg.borderWidth,\n\t\t\t\tborderColor: cfg.borderColor,\n\t\t\t\topacity: cfg.opacity ?? 1,\n\t\t\t\tchildren: cfg.children ?? [],\n\t\t\t\t...faceProps,\n\t\t\t});\n\t\t};\n\n\t\tconst halfW = w / 2;\n\t\tconst halfH = h / 2;\n\t\tconst halfD = d / 2;\n\n\t\tconst faces: AnimatableNode<BoxNode>[] = [\n\t\t\tbuildFace(\"front\", options.faces?.front, defaultColors.front, w, h, {\n\t\t\t\tx: 0,\n\t\t\t\ty: 0,\n\t\t\t\tz: -halfD,\n\t\t\t\trotateX: 0,\n\t\t\t\trotateY: 0,\n\t\t\t\trotateZ: 0,\n\t\t\t}),\n\t\t\tbuildFace(\"back\", options.faces?.back, defaultColors.back, w, h, {\n\t\t\t\tx: 0,\n\t\t\t\ty: 0,\n\t\t\t\tz: halfD,\n\t\t\t\trotateX: 0,\n\t\t\t\trotateY: 180,\n\t\t\t\trotateZ: 0,\n\t\t\t}),\n\t\t\tbuildFace(\"left\", options.faces?.left, defaultColors.left, d, h, {\n\t\t\t\tx: -halfW,\n\t\t\t\ty: 0,\n\t\t\t\tz: 0,\n\t\t\t\trotateX: 0,\n\t\t\t\trotateY: 90,\n\t\t\t\trotateZ: 0,\n\t\t\t}),\n\t\t\tbuildFace(\"right\", options.faces?.right, defaultColors.right, d, h, {\n\t\t\t\tx: halfW,\n\t\t\t\ty: 0,\n\t\t\t\tz: 0,\n\t\t\t\trotateX: 0,\n\t\t\t\trotateY: -90,\n\t\t\t\trotateZ: 0,\n\t\t\t}),\n\t\t\tbuildFace(\"top\", options.faces?.top, defaultColors.top, w, d, {\n\t\t\t\tx: 0,\n\t\t\t\ty: -halfH,\n\t\t\t\tz: 0,\n\t\t\t\trotateX: -90,\n\t\t\t\trotateY: 0,\n\t\t\t\trotateZ: 0,\n\t\t\t}),\n\t\t\tbuildFace(\"bottom\", options.faces?.bottom, defaultColors.bottom, w, d, {\n\t\t\t\tx: 0,\n\t\t\t\ty: halfH,\n\t\t\t\tz: 0,\n\t\t\t\trotateX: 90,\n\t\t\t\trotateY: 0,\n\t\t\t\trotateZ: 0,\n\t\t\t}),\n\t\t];\n\n\t\tconst container = Layer.box({\n\t\t\tid: options.id ?? \"cube-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tposition: \"absolute\",\n\t\t\tx: options.x ?? 0,\n\t\t\ty: options.y ?? 0,\n\t\t\tz: options.z ?? 0,\n\t\t\twidth: w,\n\t\t\theight: h,\n\t\t\tis3D: true,\n\t\t\ttransformStyle: \"preserve-3d\",\n\t\t\trotateX: options.rotateX ?? 0,\n\t\t\trotateY: options.rotateY ?? 0,\n\t\t\trotateZ: options.rotateZ ?? 0,\n\t\t\topacity: options.opacity ?? 1,\n\t\t\tbackground: \"transparent\",\n\t\t\tchildren: faces,\n\t\t});\n\n\t\treturn Object.assign(container, {\n\t\t\tfaces,\n\t\t\t[Symbol.iterator]: function* () {\n\t\t\t\tyield* faces;\n\t\t\t},\n\t\t});\n\t},\n\n\t/**\n\t * Creates a 3D cylindrical carousel of items arranged radially around a center point.\n\t */\n\tcarousel(options: Carousel3DOptions): Shape3DContainer {\n\t\tconst { items, radius, faceInward = false, twoSided = true } = options;\n\t\tconst n = items.length;\n\t\tconst angleStep = n > 0 ? 360 / n : 0;\n\n\t\tconst transformedItems = items.map((item, idx) => {\n\t\t\t// Item 0 sits nearest the default camera (-z) and the ring runs clockwise\n\t\t\t// seen from above. A face's front normal is (-sin ry, 0, -cos ry) (the\n\t\t\t// cube's convention: rotateY 90 faces -x), so the outward normal\n\t\t\t// (sin a, 0, -cos a) needs ry = -a, and inward needs 180 - a.\n\t\t\tconst angleDeg = idx * angleStep;\n\t\t\tconst rad = (angleDeg * Math.PI) / 180;\n\t\t\tconst x = radius * Math.sin(rad);\n\t\t\tconst z = -radius * Math.cos(rad);\n\t\t\tconst ry = faceInward ? 180 - angleDeg : -angleDeg;\n\n\t\t\tconst node = item as AnimatableNode<BoxNode>;\n\t\t\tnode.position = \"absolute\";\n\t\t\tnode.is3D = true;\n\t\t\tnode.twoSided = twoSided;\n\t\t\tnode.x = x;\n\t\t\tnode.y = 0;\n\t\t\tnode.z = z;\n\t\t\tnode.rotateY = ry;\n\t\t\treturn node;\n\t\t});\n\n\t\tconst container = Layer.box({\n\t\t\tid: options.id ?? \"carousel-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tposition: \"absolute\",\n\t\t\tx: options.x ?? 0,\n\t\t\ty: options.y ?? 0,\n\t\t\tz: options.z ?? 0,\n\t\t\twidth: (options.itemWidth ?? 200) as any,\n\t\t\theight: (options.itemHeight ?? 200) as any,\n\t\t\tis3D: true,\n\t\t\ttransformStyle: \"preserve-3d\",\n\t\t\trotateX: options.rotateX ?? 0,\n\t\t\trotateY: options.rotateY ?? 0,\n\t\t\trotateZ: options.rotateZ ?? 0,\n\t\t\topacity: options.opacity ?? 1,\n\t\t\tbackground: \"transparent\",\n\t\t\tchildren: transformedItems,\n\t\t});\n\n\t\treturn Object.assign(container, {\n\t\t\titems: transformedItems,\n\t\t\t[Symbol.iterator]: function* () {\n\t\t\t\tyield* transformedItems;\n\t\t\t},\n\t\t});\n\t},\n\n\t/**\n\t * Creates an N-sided regular polygonal 3D prism.\n\t */\n\tprism(options: Prism3DOptions): Shape3DContainer {\n\t\tconst { sides, radius, height, twoSided = true } = options;\n\t\tconst n = Math.max(3, sides);\n\t\tconst sideWidth = 2 * radius * Math.tan(Math.PI / n);\n\t\tconst angleStep = 360 / n;\n\t\tconst panels: AnimatableNode<BoxNode>[] = [];\n\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tconst angleDeg = i * angleStep;\n\t\t\tconst rad = (angleDeg * Math.PI) / 180;\n\t\t\tconst x = radius * Math.sin(rad);\n\t\t\tconst z = radius * Math.cos(rad);\n\t\t\tconst cfg = options.sideConfigs?.[i];\n\t\t\tconst color =\n\t\t\t\ttypeof cfg === \"string\"\n\t\t\t\t\t? cfg\n\t\t\t\t\t: (cfg?.background ?? `hsl(${(i * 360) / n}, 70%, 50%)`);\n\n\t\t\tpanels.push(\n\t\t\t\tLayer.box({\n\t\t\t\t\tid: `${options.id ?? \"prism\"}-panel-${i}`,\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\twidth: sideWidth,\n\t\t\t\t\theight,\n\t\t\t\t\tis3D: true,\n\t\t\t\t\ttwoSided,\n\t\t\t\t\tx,\n\t\t\t\t\ty: 0,\n\t\t\t\t\tz,\n\t\t\t\t\trotateY: angleDeg,\n\t\t\t\t\tbackground: color,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tconst container = Layer.box({\n\t\t\tid: options.id ?? \"prism-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tposition: \"absolute\",\n\t\t\tx: options.x ?? 0,\n\t\t\ty: options.y ?? 0,\n\t\t\tz: options.z ?? 0,\n\t\t\twidth: sideWidth,\n\t\t\theight,\n\t\t\tis3D: true,\n\t\t\ttransformStyle: \"preserve-3d\",\n\t\t\trotateX: options.rotateX ?? 0,\n\t\t\trotateY: options.rotateY ?? 0,\n\t\t\trotateZ: options.rotateZ ?? 0,\n\t\t\topacity: options.opacity ?? 1,\n\t\t\tbackground: \"transparent\",\n\t\t\tchildren: panels,\n\t\t});\n\n\t\treturn Object.assign(container, {\n\t\t\tfaces: panels,\n\t\t\t[Symbol.iterator]: function* () {\n\t\t\t\tyield* panels;\n\t\t\t},\n\t\t});\n\t},\n\n\t/**\n\t * Creates a standalone planar 3D card/quad.\n\t */\n\tplane(options: Plane3DOptions): AnimatableNode<BoxNode> {\n\t\treturn Layer.box({\n\t\t\tid: options.id ?? \"plane-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tposition: \"absolute\",\n\t\t\twidth: options.width,\n\t\t\theight: options.height,\n\t\t\tx: options.x ?? 0,\n\t\t\ty: options.y ?? 0,\n\t\t\tz: options.z ?? 0,\n\t\t\tis3D: true,\n\t\t\ttwoSided: options.twoSided ?? true,\n\t\t\trotateX: options.rotateX ?? 0,\n\t\t\trotateY: options.rotateY ?? 0,\n\t\t\trotateZ: options.rotateZ ?? 0,\n\t\t\tbackground: options.background ?? \"#3b82f6\",\n\t\t\tborderRadius: options.borderRadius ?? 0,\n\t\t\topacity: options.opacity ?? 1,\n\t\t\tchildren: options.children ?? [],\n\t\t});\n\t},\n\n\t/**\n\t * Creates a 3D perspective ground grid: `divisions` cells per side, each\n\t * line its own unlit quad so it stays crisp at any camera distance.\n\t */\n\tgrid(options: Grid3DOptions): AnimatableNode<BoxNode> {\n\t\tconst { width, height } = options;\n\t\tconst id = options.id ?? \"grid-\" + Math.random().toString(36).slice(2, 9);\n\t\tconst divisions = Math.max(1, Math.round(options.divisions ?? 10));\n\t\tconst lineWidth = options.lineWidth ?? 2;\n\t\tconst color = options.color ?? \"rgba(59, 130, 246, 0.5)\";\n\t\tconst line = (\n\t\t\tlineId: string,\n\t\t\tx: number,\n\t\t\ty: number,\n\t\t\tw: number,\n\t\t\th: number,\n\t\t): AnimatableNode<BoxNode> =>\n\t\t\tLayer.box({\n\t\t\t\tid: `${id}-${lineId}`,\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t\tz: 0,\n\t\t\t\twidth: w,\n\t\t\t\theight: h,\n\t\t\t\tis3D: true,\n\t\t\t\ttwoSided: true,\n\t\t\t\tmaterial: \"unlit\",\n\t\t\t\tbackground: color,\n\t\t\t});\n\t\t// Every quad is backed by a texture of its own size, so long lines are\n\t\t// split into segments that stay well inside the GPU's texture limit.\n\t\tconst MAX_SEGMENT = 4096;\n\t\tconst lines: AnimatableNode<BoxNode>[] = [];\n\t\tconst vSegments = Math.ceil(height / MAX_SEGMENT);\n\t\tconst hSegments = Math.ceil(width / MAX_SEGMENT);\n\t\tfor (let i = 0; i <= divisions; i++) {\n\t\t\tconst u = i / divisions - 0.5;\n\t\t\tfor (let k = 0; k < vSegments; k++) {\n\t\t\t\tconst len = height / vSegments;\n\t\t\t\tconst y = -height / 2 + len * (k + 0.5);\n\t\t\t\tlines.push(line(`v${i}-${k}`, u * width, y, lineWidth, len));\n\t\t\t}\n\t\t\tfor (let k = 0; k < hSegments; k++) {\n\t\t\t\tconst len = width / hSegments;\n\t\t\t\tconst x = -width / 2 + len * (k + 0.5);\n\t\t\t\tlines.push(line(`h${i}-${k}`, x, u * height, len, lineWidth));\n\t\t\t}\n\t\t}\n\t\treturn Layer.box({\n\t\t\tid,\n\t\t\tposition: \"absolute\",\n\t\t\twidth,\n\t\t\theight,\n\t\t\tx: options.x ?? 0,\n\t\t\ty: options.y ?? 0,\n\t\t\tz: options.z ?? 0,\n\t\t\tis3D: true,\n\t\t\ttransformStyle: \"preserve-3d\",\n\t\t\trotateX: options.rotateX ?? 90,\n\t\t\trotateY: options.rotateY ?? 0,\n\t\t\trotateZ: options.rotateZ ?? 0,\n\t\t\tbackground: \"transparent\",\n\t\t\topacity: options.opacity ?? 1,\n\t\t\tchildren: lines,\n\t\t});\n\t},\n\n\t/**\n\t * Creates a standalone planar 3D text node or multi-slice extruded 3D text.\n\t */\n\ttext(options: Text3DOptions): AnimatableNode<LayoutNode> {\n\t\tif (options.extrusionDepth && options.extrusionDepth > 0) {\n\t\t\treturn Layer3D.extrudedText({\n\t\t\t\t...options,\n\t\t\t\tdepth: options.extrusionDepth,\n\t\t\t\tslices: options.extrusionSteps,\n\t\t\t});\n\t\t}\n\n\t\treturn Layer.text(options.text, {\n\t\t\tid: options.id ?? \"text3d-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tposition: \"absolute\",\n\t\t\tx: options.x ?? 0,\n\t\t\ty: options.y ?? 0,\n\t\t\tz: options.z ?? 0,\n\t\t\tis3D: true,\n\t\t\ttwoSided: options.twoSided ?? true,\n\t\t\trotateX: options.rotateX ?? 0,\n\t\t\trotateY: options.rotateY ?? 0,\n\t\t\trotateZ: options.rotateZ ?? 0,\n\t\t\tfontSize: options.fontSize ?? 48,\n\t\t\tfontFamily: options.fontFamily,\n\t\t\tfontWeight: options.fontWeight ?? \"bold\",\n\t\t\tfontStyle: options.fontStyle,\n\t\t\tfill: options.fill ?? \"#ffffff\",\n\t\t\talign: (options.align as any) ?? \"center\",\n\t\t\tverticalAlign: options.verticalAlign ?? \"middle\",\n\t\t\tletterSpacing: options.letterSpacing,\n\t\t\tlineHeight: options.lineHeight,\n\t\t\tmaterial: options.material ?? \"lit\",\n\t\t\tshininess: options.shininess ?? 64,\n\t\t\troughness: options.roughness,\n\t\t\tspecularIntensity: options.specularIntensity ?? 0.8,\n\t\t\tambientIntensity: options.ambientIntensity ?? 1.0,\n\t\t\tmetallic: options.metallic,\n\t\t\topacity: options.opacity ?? 1,\n\t\t\tbackground: options.background,\n\t\t\tborderRadius: options.borderRadius,\n\t\t\tpadding: options.padding,\n\t\t\tstroke: options.stroke,\n\t\t\tstrokeWidth: options.strokeWidth,\n\t\t});\n\t},\n\n\t/**\n\t * Creates multi-slice volumetric extruded 3D typography with depth shading.\n\t */\n\textrudedText(options: ExtrudedText3DOptions): Shape3DContainer {\n\t\tconst { depth, text, fill = \"#ffffff\", bevelColor } = options;\n\n\t\tlet modelData: Model3DData | undefined;\n\t\tconst parsedFont =\n\t\t\t(options.fontFamily\n\t\t\t\t? SlugFontCache.getParsed(options.fontFamily)\n\t\t\t\t: null) ??\n\t\t\tSlugFontCache.getParsed(\"Inter\") ??\n\t\t\tSlugFontCache.getParsed(\"Unbounded\") ??\n\t\t\tSlugFontCache.getFirstParsed();\n\n\t\tif (parsedFont) {\n\t\t\tconst res = generateExtrudedTextGeometry({\n\t\t\t\ttext,\n\t\t\t\tfont: parsedFont,\n\t\t\t\tfontSize: options.fontSize ?? 48,\n\t\t\t\tdepth,\n\t\t\t\tfill,\n\t\t\t\tbevelColor,\n\t\t\t\tcurveSegments: options.curveSegments ?? 5,\n\t\t\t\talign: options.align,\n\t\t\t\tverticalAlign: options.verticalAlign,\n\t\t\t\tletterSpacing: options.letterSpacing,\n\t\t\t\tmaterial: options.material,\n\t\t\t\tshininess: options.shininess,\n\t\t\t\troughness: options.roughness,\n\t\t\t\tspecularIntensity: options.specularIntensity,\n\t\t\t\tambientIntensity: options.ambientIntensity,\n\t\t\t\tmetallic: options.metallic,\n\t\t\t});\n\t\t\tmodelData = res.modelData;\n\t\t}\n\n\t\tconst modelNode = Layer.model({\n\t\t\tid:\n\t\t\t\toptions.id ?? `extruded-text-${Math.random().toString(36).slice(2, 9)}`,\n\t\t\tmodelData,\n\t\t\tis3D: true,\n\t\t\tx: options.x ?? 0,\n\t\t\ty: options.y ?? 0,\n\t\t\tz: options.z ?? 0,\n\t\t\trotateX: options.rotateX ?? 0,\n\t\t\trotateY: options.rotateY ?? 0,\n\t\t\trotateZ: options.rotateZ ?? 0,\n\t\t\tscale: options.scale ?? 1,\n\t\t\tscaleX: options.scaleX ?? 1,\n\t\t\tscaleY: options.scaleY ?? 1,\n\t\t\tscaleZ: options.scaleZ ?? 1,\n\t\t\topacity: options.opacity ?? 1,\n\t\t\tmaterial: options.material,\n\t\t\tshininess: options.shininess ?? 32,\n\t\t\troughness: options.roughness,\n\t\t\tspecularIntensity: options.specularIntensity ?? 0.8,\n\t\t\tambientIntensity: options.ambientIntensity ?? 1.0,\n\t\t\tmetallic: options.metallic,\n\t\t\ttwoSided: options.twoSided ?? true,\n\t\t\ttext3dOptions: options,\n\t\t});\n\n\t\treturn Object.assign(modelNode, {\n\t\t\tfaces: [modelNode] as AnimatableNode<BoxNode>[],\n\t\t\titems: [modelNode],\n\t\t\t[Symbol.iterator]: function* () {\n\t\t\t\tyield modelNode;\n\t\t\t},\n\t\t}) as unknown as Shape3DContainer;\n\t},\n\n\t/**\n\t * Creates a 3D model node rendered natively with WebGPU mesh shaders.\n\t */\n\tmodel(options: Partial<Model3DNode> = {}): AnimatableNode<Model3DNode> {\n\t\treturn Layer.model(options);\n\t},\n\n\t/**\n\t * Convenience helper to create a 3D Wavefront OBJ model node.\n\t */\n\tobj(\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> {\n\t\treturn Layer.obj(src, options);\n\t},\n\n\t/**\n\t * Convenience helper to create a 3D Autodesk FBX model node with skeletal animation support.\n\t */\n\tfbx(\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> {\n\t\treturn Layer.fbx(src, options);\n\t},\n\n\t/**\n\t * Convenience helper to create a 3D glTF 2.0 model node.\n\t */\n\tgltf(\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> {\n\t\treturn Layer.gltf(src, options);\n\t},\n\n\t/**\n\t * Convenience helper to create a 3D GLB binary container model node.\n\t */\n\tglb(\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> {\n\t\treturn Layer.glb(src, options);\n\t},\n\n\t/**\n\t * Convenience helper to create a 3D STL CAD / 3D printing model node.\n\t */\n\tstl(\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> {\n\t\treturn Layer.stl(src, options);\n\t},\n\n\t/**\n\t * Convenience helper to create a 3D Stanford PLY scan model node.\n\t */\n\tply(\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> {\n\t\treturn Layer.ply(src, options);\n\t},\n\n\t/**\n\t * Convenience helper to create a 3D MagicaVoxel VOX model node.\n\t */\n\tvox(\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> {\n\t\treturn Layer.vox(src, options);\n\t},\n\n\t/**\n\t * Convenience helper to create a 3D Studio (3DS) binary model node.\n\t */\n\tthreeDS(\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> {\n\t\treturn Layer.threeDS(src, options);\n\t},\n\n\t/**\n\t * Convenience helper to create a 3D Object File Format (OFF) model node.\n\t */\n\toff(\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> {\n\t\treturn Layer.off(src, options);\n\t},\n};\n","export {\n\tAudioSignal,\n\ttype AudioSignalOptions,\n\tcomputed,\n\tcosineSignal,\n\ttype ExtractedAudioSignalsBundle,\n\ttype FrameSignal,\n\tSignal,\n\ttype SignalContext,\n\ttype SignalValue,\n\ttype SineSignalOptions,\n\tsignal,\n\tsignalBuilder,\n\tsignalRegistry,\n\tsineSignal,\n} from \"./signals/index.js\";\n\nimport {\n\tFontManager,\n\ttype RegisteredFont,\n\ttype RegisterFontOptions,\n} from \"./fonts/index.js\";\nimport { normalizeTextSpans, type TextSpan } from \"./rich-text.js\";\n\nexport {\n\tencodeStereoWav,\n\tmixAudioTracks,\n\tmixSfxInto,\n\ttype RenderedSfx,\n\trenderSfx,\n\ttype SfxRenderContext,\n\ttype SfxTrigger,\n\tsoftLimit,\n} from \"./audio/index.js\";\nexport {\n\taccent,\n\tbold,\n\tcode,\n\tcolor,\n\titalic,\n\ttype MarkOptions,\n\tmark,\n\tnormalizeTextSpans,\n\tparseMarkup,\n\trich,\n\tsize,\n\tspan,\n\tsub,\n\tsup,\n\ttype TextSpan,\n\ttype TextSpanItem,\n\ttype TextSpanMark,\n} from \"./rich-text.js\";\nexport { FontManager, type RegisteredFont, type RegisterFontOptions };\n\nexport {\n\tCannyComputePipeline,\n\ttype CannyOptions,\n\ttype ControlNetConditioningOutputs,\n\tControlNetMultiplexer,\n\ttype DeflickerOptions,\n\tDepthNormalsComputePipeline,\n\ttype DepthNormalsOptions,\n\ttype NormalRelightingOptions,\n\tOpticalFlowComputePipeline,\n\ttype OpticalFlowOptions,\n\tTemporalDeflickerPipeline,\n\ttype TensorDimensions,\n\ttype TensorFormat,\n\ttype TensorNode,\n\tTensorPipeline,\n\ttype TensorPipelineConfig,\n\ttype TensorSource,\n\ttype TensorViewExport,\n} from \"@gitframes/tensor-webgpu\";\nexport {\n\t// Shared vision types (engine-agnostic, re-exported by @gitframes/yolo from @gitframes/core)\n\ttype DetectedObject,\n\ttype Landmark3D,\n\ttype LandmarkCoordinateSignals,\n\ttype MaskTrackSignals,\n\t// YOLO engine surface\n\tMEDIAPIPE_TO_YOLO_POSE_INDEX,\n\ttype NormalizedLandmarkList,\n\ttype ObjectAnchorName,\n\ttype ObjectAnchorsSignals,\n\ttype ObjectBoundingBox,\n\ttype ObjectBoundingBoxSignals,\n\ttype ObjectCollectionSignals,\n\ttype ObjectKinematicsSignals,\n\ttype ObjectTrackSignals,\n\ttype ObjectTrackSignals,\n\ttype PinToLandmarkOptions,\n\ttype PinToObjectOptions,\n\tPOSE_LANDMARKS_YOLO,\n\ttype PoseLandmarkSignals,\n\tPoseSkeletonRenderer,\n\tpinNodeToLandmark,\n\tpinNodeToObject,\n\tSegmentationTexturePool,\n\tSpatialLandmarkTransformer,\n\tTemporalObjectTracker,\n\ttype TrackedObject,\n\tYOLO_COCO17_BONES,\n\tYOLO_POSE_KEYPOINT_NAMES,\n\ttype YoloConfig,\n\ttype YoloInstanceMask,\n\tYoloNode,\n\ttype YoloOBBResult,\n\ttype YoloPoseResult,\n\ttype YoloSegmentationResult,\n\tYoloVisionBundle,\n\tYoloVisionRunner,\n} from \"@gitframes/yolo\";\n\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n\ttype AnimationTrack,\n\ttype BoxNode,\n\ttype CameraNode,\n\ttype ChartGPUOptions,\n\ttype ChartNode,\n\ttype CompositorProgramConfig,\n\ttype CompositorToProgramOptions,\n\tcompositorToProgram,\n\ttype FlexNode,\n\tLayerAnimation,\n\ttype LayoutNode,\n\ttype LightNode,\n\ttype MediaNode,\n\ttype Model3DNode,\n\ttype ShapeNode,\n\ttype TextNode,\n} from \"@gitframes/compositions/program\";\nimport {\n\tappendOperation,\n\tEffect as CoreEffect,\n\tcreateVirtualMedia,\n\ttype DataType,\n\ttype FrameContext,\n\ttype MediaMetadata,\n\ttype MediaOperation,\n\ttype MediaSourceInput,\n\ttype MeshAudioDeformConfig,\n\tProgrammaticSignal,\n\ttype Signal,\n\ttype VirtualMediaData,\n} from \"@gitframes/core\";\nimport {\n\tanalyzeSequence as analyzeYoloSequence,\n\ttype LandmarkCoordinateSignals,\n\ttype ObjectTrackSignals,\n\ttype PinToLandmarkOptions,\n\ttype PinToObjectOptions,\n\tpinNodeToLandmark,\n\tpinNodeToObject,\n\ttype VisionAnalysisReport,\n\tYoloNode,\n\tYoloVisionBundle,\n\tYoloVisionRunner,\n} from \"@gitframes/yolo\";\n\nexport {\n\tanalyzeSequence,\n\ttype VisionAnalysisReport,\n} from \"@gitframes/yolo\";\n\nimport {\n\ttype DeflickerOptions,\n\ttype NormalRelightingOptions,\n\tTensorPipeline,\n} from \"@gitframes/tensor-webgpu\";\nimport { inputStore, mediaDecoderCache } from \"@gitframes/webgpu-renderers\";\nimport {\n\tApplyLUT,\n\ttype ApplyLUTProps,\n\tBlur,\n\ttype BlurProps,\n\tColorBalance,\n\ttype ColorBalanceProps,\n\tColorKey,\n\ttype ColorKeyProps,\n\tCrop,\n\ttype CropProps,\n\tCurves,\n\ttype CurvesProps,\n\tCustomEffect,\n\ttype DeflickerProps,\n\tDepthOfField,\n\ttype DepthOfFieldProps,\n\tFilmGrain,\n\ttype FilmGrainProps,\n\tGradientMap,\n\ttype GradientMapProps,\n\tHalftoneScreen,\n\ttype HalftoneScreenProps,\n\tHighPass,\n\ttype HighPassProps,\n\tLevels,\n\ttype LevelsProps,\n\tMediaPipe,\n\ttype MediaPipeProps,\n\tModulate,\n\ttype ModulateProps,\n\tMotionBlur,\n\ttype MotionBlurProps,\n\tPBRGlass,\n\ttype PBRGlassProps,\n\tRelight3D,\n\ttype Relight3DProps,\n\tSelectiveColor,\n\ttype SelectiveColorProps,\n\tShadowsHighlights,\n\ttype ShadowsHighlightsProps,\n\tSSAO,\n\ttype SSAOProps,\n\tTemporalDeflicker,\n\tTileOffset,\n\ttype TileOffsetProps,\n\tUnsharpMask,\n\ttype UnsharpMaskProps,\n\tVignette,\n\ttype VignetteProps,\n\tYolo,\n\ttype YoloProps,\n} from \"./effects/index.js\";\nimport {\n\ttype FrameGridOptions,\n\tHeadlessMediaRenderer,\n\trenderFrameGrid,\n} from \"./renderer/index.js\";\nimport {\n\ttype Carousel3DOptions,\n\ttype Cube3DOptions,\n\tLayer3D,\n\ttype Plane3DOptions,\n\ttype Prism3DOptions,\n} from \"./shapes3d.js\";\n\nexport interface SectionOptions {\n\treadonly id?: string;\n\treadonly position?: \"absolute\" | \"relative\";\n\treadonly source?: string | MediaNode;\n\treadonly effects?: unknown[];\n\treadonly padding?: number;\n\treadonly borderRadius?: number;\n\treadonly borderColor?: string;\n\treadonly borderWidth?: number;\n\treadonly opacity?: number | unknown;\n\treadonly blendMode?: string;\n\treadonly fit?: \"cover\" | \"contain\";\n\treadonly width?: number | unknown;\n\treadonly height?: number | unknown;\n\treadonly x?: number | unknown;\n\treadonly y?: number | unknown;\n\treadonly hideWhenLost?: boolean;\n\treadonly smoothFrames?: number;\n\treadonly children?: LayoutNode[];\n\treadonly [key: string]: unknown;\n}\n\nexport type SectionNode = AnimatableNode<BoxNode> & {\n\treadonly innerMedia: AnimatableNode<MediaNode>;\n\treadonly effects: Effect[];\n\taddEffect(effect: Effect): SectionNode;\n\twithEffect(effect: Effect): SectionNode;\n\twithEffects(effects: Effect[]): SectionNode;\n};\n\nexport type TrackedRegionOptions = SectionOptions;\n\nfunction decorateTrackSignals<T extends ObjectTrackSignals>(\n\ttrack: T,\n\tsource?: string | MediaNode,\n): T {\n\tif (!track) return track;\n\tif (source && !track.source) {\n\t\tObject.defineProperty(track, \"source\", {\n\t\t\tvalue: source,\n\t\t\tenumerable: true,\n\t\t\twritable: true,\n\t\t\tconfigurable: true,\n\t\t});\n\t}\n\tif (typeof track.section !== \"function\") {\n\t\tObject.defineProperty(track, \"section\", {\n\t\t\tvalue: (\n\t\t\t\tsourceOrOptions?: string | MediaNode | SectionOptions,\n\t\t\t\toptions?: SectionOptions,\n\t\t\t) => {\n\t\t\t\tif (\n\t\t\t\t\ttypeof sourceOrOptions === \"object\" &&\n\t\t\t\t\tsourceOrOptions !== null &&\n\t\t\t\t\t!(\"kind\" in sourceOrOptions) &&\n\t\t\t\t\t!(\"inputHandleId\" in sourceOrOptions) &&\n\t\t\t\t\t!(\"src\" in sourceOrOptions)\n\t\t\t\t) {\n\t\t\t\t\tconst resolvedSource =\n\t\t\t\t\t\t(sourceOrOptions as SectionOptions).source ??\n\t\t\t\t\t\t(track.source as string | MediaNode | undefined) ??\n\t\t\t\t\t\tsource;\n\t\t\t\t\treturn Layer.section(\n\t\t\t\t\t\tresolvedSource as string | MediaNode,\n\t\t\t\t\t\ttrack,\n\t\t\t\t\t\tsourceOrOptions as SectionOptions,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst resolvedSource =\n\t\t\t\t\tsourceOrOptions ??\n\t\t\t\t\t(track.source as string | MediaNode | undefined) ??\n\t\t\t\t\tsource;\n\t\t\t\treturn Layer.section(\n\t\t\t\t\tresolvedSource as string | MediaNode,\n\t\t\t\t\ttrack,\n\t\t\t\t\toptions,\n\t\t\t\t);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t\twritable: true,\n\t\t\tconfigurable: true,\n\t\t});\n\t}\n\tif (typeof track.blurEffect !== \"function\") {\n\t\tObject.defineProperty(track, \"blurEffect\", {\n\t\t\tvalue: (options?: Partial<BlurProps>) => new Blur({ track, ...options }),\n\t\t\tenumerable: false,\n\t\t\twritable: true,\n\t\t\tconfigurable: true,\n\t\t});\n\t}\n\tif (typeof track.isolate !== \"function\") {\n\t\tObject.defineProperty(track, \"isolate\", {\n\t\t\tvalue: (sourceArg: string | MediaNode, options?: TrackedRegionOptions) =>\n\t\t\t\tLayer.section(sourceArg, track, options),\n\t\t\tenumerable: false,\n\t\t\twritable: true,\n\t\t\tconfigurable: true,\n\t\t});\n\t}\n\treturn track;\n}\n\nconst origYoloAttach = YoloNode.attach;\nYoloNode.attach = function (\n\tsource: Parameters<typeof origYoloAttach>[0],\n\tconfig?: Parameters<typeof origYoloAttach>[1],\n\tbundleOptions?: Parameters<typeof origYoloAttach>[2],\n): ReturnType<typeof origYoloAttach> {\n\tconst bundle = origYoloAttach.call(this, source, config, bundleOptions);\n\tif (bundle?.objects) {\n\t\tconst src = source as string | MediaNode;\n\t\tconst origGet = bundle.objects.get.bind(bundle.objects);\n\t\tbundle.objects.get = (id: number) => decorateTrackSignals(origGet(id), src);\n\n\t\tconst origByCategory = bundle.objects.byCategory.bind(bundle.objects);\n\t\tbundle.objects.byCategory = (cat: string, rank?: number) =>\n\t\t\tdecorateTrackSignals(origByCategory(cat, rank), src);\n\n\t\tif (bundle.objects.primary) {\n\t\t\tdecorateTrackSignals(bundle.objects.primary, src);\n\t\t}\n\t}\n\treturn bundle;\n};\n\nexport {\n\ttype AdvancedTextAnimator,\n\tAdvancedTextAnimatorBuilder,\n\tAdvancedTextAnimatorSchema,\n\t// Text Animations & After Effects Parity\n\ttype AETextAnimator,\n\tAETextAnimatorSchema,\n\ttype AnchorGrouping,\n\tAnchorGroupingSchema,\n\ttype AnchorPreset,\n\tAnchorPresetSchema,\n\ttype AnimatableGlyphProps,\n\tAnimatableGlyphPropsSchema,\n\ttype AnimatableProp,\n\ttype AnimationTrack,\n\ttype ArcLengthLUTEntry,\n\ttype AudioSpectrumTypography,\n\tAudioSpectrumTypographySchema,\n\tapplyStaggerToChildren,\n\ttype BlockNode,\n\ttype BoxNode,\n\tBoxNodeSchema,\n\tbuildPathLUT,\n\tCameraAnimation,\n\ttype CameraDoF,\n\ttype CameraLens,\n\ttype CameraNode,\n\tCameraNodeSchema,\n\ttype CameraShake,\n\ttype CarrierHandoffConfig,\n\tCarrierHandoffConfigSchema,\n\ttype CarrierState,\n\ttype ChartAreaStyle,\n\tChartAreaStyleSchema,\n\ttype ChartAxis,\n\tChartAxisSchema,\n\ttype ChartDataPoint2D,\n\tChartDataPoint2DSchema,\n\ttype ChartDataPointOHLC,\n\tChartDataPointOHLCSchema,\n\ttype ChartGPUOptions,\n\tChartGPUOptionsSchema,\n\ttype ChartLineStyle,\n\tChartLineStyleSchema,\n\ttype ChartNode,\n\tChartNodeSchema,\n\ttype ChartPointStyle,\n\tChartPointStyleSchema,\n\ttype ChartSeries,\n\tChartSeriesSchema,\n\ttype ChartSeriesType,\n\tChartSeriesTypeSchema,\n\ttype ChromaticGlitchConfig,\n\tChromaticGlitchConfigSchema,\n\ttype ColorSignalOptions,\n\ttype ColorStop,\n\tColorStopSchema,\n\tCompositionChartNodeSchema,\n\ttype CompositorProgramConfig,\n\tCompositorProgramSchema,\n\ttype CompositorToProgramOptions,\n\ttype CubicBezierSegment,\n\tCubicBezierSegmentSchema,\n\tcalculateSequenceTimeline,\n\tcollectNodeOps,\n\tcompositorToProgram,\n\tcomputeAnchorPivotOffset,\n\tcomputeCarrierContinuity,\n\tcomputeLayout,\n\tcomputeLayoutSync,\n\tcomputeLineLeadingDisplacement,\n\tcomputeRangeSelectorWeight,\n\tcomputeStaggerDelay,\n\ttype DynamicStrokeProperties,\n\tDynamicStrokePropertiesSchema,\n\tdeterministicWigglyNoise,\n\tdistanceToCurveParameter,\n\ttype EaseRef,\n\ttype EnhancedTextNode,\n\tEnhancedTextNodeSchema,\n\ttype ExpressionEvaluationContext,\n\ttype ExpressionSelector,\n\tExpressionSelectorSchema,\n\ttype ExtendedGlyphProperties,\n\tExtendedGlyphPropertiesSchema,\n\tellipseToCubicBeziers,\n\tevaluateAnimationAtFrame,\n\tevaluateCubicBezier,\n\tevaluateCubicBezierDerivative,\n\tevaluateExpressionSelector,\n\tevaluateMarqueeOffset,\n\tevaluateSelectorCombination,\n\tevaluateSkewMatrix,\n\tevaluateSpringProgress,\n\tevaluateTrackAtFrame,\n\tevaluateTypewriterState,\n\tevaluateVolumetricFormation,\n\ttype FlexNode,\n\tFlexNodeSchema,\n\ttype FromToOptions,\n\ttype GlyphAnchorGrouping,\n\tGlyphAnchorGroupingSchema,\n\ttype GlyphAnchorPoint,\n\tGlyphAnchorPointSchema,\n\tgenerateArcLengthLUT,\n\tgeneratePathSegments,\n\tgetScramblePool,\n\tgetShuffledOrder,\n\ttype Keyframe,\n\ttype KineticMarqueeConfig,\n\tKineticMarqueeConfigSchema,\n\tLayerAnimation,\n\ttype LayoutNode,\n\tLayoutNodeSchema,\n\ttype LightNode,\n\tLightNodeSchema,\n\ttype LightType,\n\tLightTypeSchema,\n\ttype LineSpacingDynamics,\n\tLineSpacingDynamicsSchema,\n\ttype LongShadowConfig,\n\tLongShadowConfigSchema,\n\ttype MaterialType,\n\tMaterialTypeSchema,\n\ttype MediaNode,\n\tMediaNodeSchema,\n\ttype Model3DNode,\n\tModel3DNodeSchema,\n\ttype ParticleDissolveConfig,\n\tParticleDissolveConfigSchema,\n\ttype PathChainLUT,\n\ttype PathChainLUTEntry,\n\tparseSvgPathToCubicBeziers,\n\tScene,\n\ttype SceneDefinition,\n\tSceneDefinitionSchema,\n\ttype SceneOptions,\n\ttype SceneTransitionType,\n\tSceneTransitionTypeSchema,\n\ttype SelectorBasedOn,\n\tSelectorBasedOnSchema,\n\ttype SelectorMode,\n\tSelectorModeSchema,\n\ttype SelectorShape,\n\tSelectorShapeSchema,\n\ttype SelectorUnits,\n\tSelectorUnitsSchema,\n\tSequence,\n\ttype SequenceOptions,\n\ttype SequenceTimelineResult,\n\ttype ShapeNode,\n\tShapeNodeSchema,\n\ttype SignalTrackOptions,\n\ttype SkewProperties,\n\tSkewPropertiesSchema,\n\ttype Spatial3DProperties,\n\tSpatial3DPropertiesSchema,\n\ttype SpringOptions,\n\ttype SpringPhysics,\n\tSpringPhysicsSchema,\n\tsampleAudioSpectrumScale,\n\tsampleCurveGeometry,\n\tsamplePathChainGeometry,\n\ttype TextAnchorConfig,\n\tTextAnchorConfigSchema,\n\tTextAnimator,\n\tTextAnimatorBuilder,\n\tTextAnimatorSchema,\n\ttype TextCursorConfig,\n\tTextCursorConfigSchema,\n\ttype TextCursorStyle,\n\tTextCursorStyleSchema,\n\ttype TextNode,\n\tTextNodeSchema,\n\tTextPathBuilder,\n\ttype TextPathOptions,\n\tTextPathOptionsSchema,\n\ttype TextPathSource,\n\tTextPathSourceSchema,\n\ttype TextRangeSelector,\n\tTextRangeSelectorSchema,\n\ttype TextScrambleConfig,\n\tTextScrambleConfigSchema,\n\ttype TextSelector,\n\tTextSelectorSchema,\n\ttype TextSignalSelector,\n\tTextSignalSelectorSchema,\n\tTextSpanMarkSchema,\n\tTextSpanSchema,\n\ttype TextWigglySelector,\n\tTextWigglySelectorSchema,\n\ttype TrackSource,\n\ttype TypewriterAnimator,\n\tTypewriterAnimatorSchema,\n\ttype TypingCadence,\n\tTypingCadenceSchema,\n\ttype VariableFontAxes,\n\tVariableFontAxesSchema,\n\ttype Vec2,\n\tVec2Schema,\n\ttype VolumetricFormationConfig,\n\tVolumetricFormationConfigSchema,\n\ttype VolumetricFormationMode,\n\tVolumetricFormationModeSchema,\n\ttype WiggleOptions,\n\twaveToCubicBeziers,\n} from \"@gitframes/compositions/program\";\nexport * from \"@gitframes/core\";\nexport * from \"@gitframes/renderers\";\nexport {\n\ttype AnimationClip3D,\n\ttype AudioLatentData,\n\tAudioLatentEngine,\n\tAudioLatentTrackCache,\n\tAudioMeshDeformPipeline,\n\ttype BlendMode,\n\ttype Bone3D,\n\tCamera3D,\n\tChartGPUEngineBridge,\n\ttype ChartNodeProps,\n\tchartBridgeCache,\n\tdrawChartNode,\n\tEffectPipeline,\n\tensureDevice,\n\tGlassPipeline,\n\ttype GPULightData,\n\tHeadlessChartCanvasElementMock,\n\tHeadlessChartContainerMock,\n\ttype HeadlessChartTarget,\n\tHeadlessGPUCanvasContextMock,\n\tinputStore,\n\tLight3D,\n\ttype Light3DOptions,\n\ttype LoadModelOptions,\n\tloadFBX,\n\tloadModel3D,\n\tloadOBJ,\n\tlutStore,\n\ttype Material3D,\n\ttype Mesh3DData,\n\ttype Model3DData,\n\tMotionBlurPipeline,\n\ttype NodeAnimationTrack3D,\n\tPath3D,\n\tparseFBX,\n\tparseMTL,\n\tparseOBJ,\n\ttype RenderContextValue,\n\tRenderer2D,\n\tRenderer3D,\n\tShadowPipeline,\n\ttype Skeleton3D,\n\tSlugFontCache,\n\tSlugPipeline,\n\tSSAOPipeline,\n\tshaderStore,\n\ttextureCache,\n} from \"@gitframes/webgpu-renderers\";\nexport {\n\tApplyLUT,\n\ttype ApplyLUTProps,\n\tAudioSignalExtractor,\n\ttype AudioSignalExtractorProps,\n\tBlur,\n\ttype BlurProps,\n\tColorBalance,\n\ttype ColorBalanceProps,\n\tColorKey,\n\ttype ColorKeyProps,\n\tCrop,\n\ttype CropProps,\n\tCurves,\n\ttype CurvesChannelPoint,\n\ttype CurvesProps,\n\tCustomEffect,\n\ttype DeflickerProps,\n\tDepthOfField,\n\ttype DepthOfFieldProps,\n\tFilmGrain,\n\ttype FilmGrainProps,\n\tGradientMap,\n\ttype GradientMapProps,\n\ttype GradientMapStop,\n\ttype HalftoneDotShape,\n\ttype HalftoneMode,\n\tHalftoneScreen,\n\ttype HalftoneScreenProps,\n\tHighPass,\n\ttype HighPassProps,\n\ttype LevelChannel,\n\tLevels,\n\ttype LevelsProps,\n\tMediaPipe,\n\ttype MediaPipeProps,\n\tModulate,\n\ttype ModulateProps,\n\tMotionBlur,\n\ttype MotionBlurProps,\n\tPBRGlass,\n\ttype PBRGlassProps,\n\tRelight3D,\n\ttype Relight3DProps,\n\tSelectiveColor,\n\ttype SelectiveColorAdjustment,\n\ttype SelectiveColorProps,\n\tShadowsHighlights,\n\ttype ShadowsHighlightsProps,\n\tSSAO,\n\ttype SSAOProps,\n\tTemporalDeflicker,\n\tTileOffset,\n\ttype TileOffsetEdgeMode,\n\ttype TileOffsetProps,\n\tUnsharpMask,\n\ttype UnsharpMaskProps,\n\tVignette,\n\ttype VignetteProps,\n\tYolo,\n\ttype YoloProps,\n} from \"./effects/index.js\";\nexport {\n\ttype Carousel3DOptions,\n\ttype Cube3DOptions,\n\ttype CubeFaceConfig,\n\ttype CubeFaceInput,\n\ttype ExtrudedText3DOptions,\n\ttype Grid3DOptions,\n\tLayer3D,\n\ttype Plane3DOptions,\n\ttype Prism3DOptions,\n\ttype Shape3DContainer,\n\ttype Text3DOptions,\n} from \"./shapes3d.js\";\n\nexport interface CompositionOptions {\n\twidth: number;\n\theight: number;\n\tfps?: number;\n\tdurationMs?: number;\n\tdurationFrames?: number;\n\tbackgroundColor?: string;\n\tfonts?: string[];\n\tsignals?: Record<string, unknown>;\n}\n\n/**\n * Fluent builder for single clips and chained visual/audio effect pipelines.\n */\nexport class Media {\n\tpublic readonly virtualMedia: VirtualMediaData;\n\n\tconstructor(source: MediaSourceInput, type: DataType = \"Video\") {\n\t\tthis.virtualMedia = createVirtualMedia(source, type);\n\t}\n\n\tstatic video(source: MediaSourceInput, meta?: Partial<MediaMetadata>): Media {\n\t\tconst m = new Media(source, \"Video\");\n\t\tif (meta) Object.assign(m.virtualMedia.metadata, meta);\n\t\treturn m;\n\t}\n\n\tstatic image(source: MediaSourceInput, meta?: Partial<MediaMetadata>): Media {\n\t\tconst m = new Media(source, \"Image\");\n\t\tif (meta) Object.assign(m.virtualMedia.metadata, meta);\n\t\treturn m;\n\t}\n\n\tstatic audio(source: MediaSourceInput, meta?: Partial<MediaMetadata>): Media {\n\t\tconst m = new Media(source, \"Audio\");\n\t\tif (meta) Object.assign(m.virtualMedia.metadata, meta);\n\t\treturn m;\n\t}\n\n\t/**\n\t * Appends any Effect instance or shader operation onto the current media AST.\n\t */\n\tpublic apply<TProps extends object>(effect: Effect<TProps>): Media;\n\tpublic apply<\n\t\tTConfig extends Record<string, unknown> = Record<string, unknown>,\n\t>(op: string, config?: TConfig): Media;\n\tpublic apply(\n\t\teffectOrOp: Effect<object> | string,\n\t\tconfig: Record<string, unknown> = {},\n\t): Media {\n\t\tlet opPayload: Record<string, unknown>;\n\t\tif (\n\t\t\teffectOrOp instanceof Effect ||\n\t\t\t(typeof effectOrOp === \"object\" &&\n\t\t\t\teffectOrOp !== null &&\n\t\t\t\t\"op\" in effectOrOp)\n\t\t) {\n\t\t\topPayload = (effectOrOp as Effect<object>).toOperation();\n\t\t} else {\n\t\t\topPayload = {\n\t\t\t\top: effectOrOp,\n\t\t\t\t...config,\n\t\t\t};\n\t\t}\n\n\t\tconst nextVM = appendOperation(this.virtualMedia, {\n\t\t\t...opPayload,\n\t\t\tdataType: this.virtualMedia.operation.dataType,\n\t\t} as MediaOperation);\n\t\treturn new Media(nextVM);\n\t}\n\n\t/**\n\t * Returns the underlying VirtualMediaData AST node ready for rendering.\n\t */\n\tpublic toVirtualMedia(): VirtualMediaData {\n\t\treturn this.virtualMedia;\n\t}\n\n\t/**\n\t * Renders a single frame from this media pipeline to a PNG Buffer.\n\t * Can render either by timestamp in milliseconds (`atMs`) or by frame index (`frame`).\n\t */\n\tpublic async renderFrame(\n\t\toptions: {\n\t\t\tatMs?: number;\n\t\t\tframe?: number;\n\t\t\tfps?: number;\n\t\t\trenderer?: HeadlessMediaRenderer;\n\t\t} = {},\n\t): Promise<Buffer> {\n\t\tconst renderer = options.renderer ?? new HeadlessMediaRenderer();\n\t\treturn renderer.renderFrame(this.virtualMedia, options);\n\t}\n\n\tget fps(): number | undefined {\n\t\treturn this.virtualMedia.metadata?.fps ?? undefined;\n\t}\n\n\tget durationMs(): number | undefined {\n\t\treturn this.virtualMedia.metadata?.durationMs ?? undefined;\n\t}\n\n\tget width(): number | undefined {\n\t\treturn this.virtualMedia.metadata?.width ?? undefined;\n\t}\n\n\tget height(): number | undefined {\n\t\treturn this.virtualMedia.metadata?.height ?? undefined;\n\t}\n\n\t/**\n\t * Renders an image grid of sequential frames across a given frame or millisecond range.\n\t * Ideal for automated visual inspection of animation motion, easing curves, and layout stability.\n\t */\n\tpublic async renderFrameGrid(\n\t\toptions: FrameGridOptions = {},\n\t): Promise<Buffer> {\n\t\treturn renderFrameGrid(this, options);\n\t}\n\n\t/**\n\t * Renders this media pipeline into an MP4/WebM video file with audio.\n\t */\n\tpublic async renderVideo(\n\t\toutputPathOrOptions:\n\t\t\t| string\n\t\t\t| {\n\t\t\t\t\tcodec?: string;\n\t\t\t\t\taudioCodec?: string;\n\t\t\t\t\tquality?: string;\n\t\t\t\t\tconcurrency?: number;\n\t\t\t\t\toutputPath?: string;\n\t\t\t\t\trenderer?: HeadlessMediaRenderer;\n\t\t\t } = {},\n\t\toptions: {\n\t\t\tcodec?: string;\n\t\t\taudioCodec?: string;\n\t\t\tquality?: string;\n\t\t\tconcurrency?: number;\n\t\t\toutputPath?: string;\n\t\t\trenderer?: HeadlessMediaRenderer;\n\t\t} = {},\n\t): Promise<{ filePath: string; cleanup: () => Promise<void> }> {\n\t\tconst opts =\n\t\t\ttypeof outputPathOrOptions === \"string\"\n\t\t\t\t? { ...options, outputPath: outputPathOrOptions }\n\t\t\t\t: outputPathOrOptions;\n\t\tconst renderer = opts.renderer ?? new HeadlessMediaRenderer();\n\t\tconst result = await renderer.renderVideo(this.virtualMedia, opts);\n\t\tif (opts.outputPath) {\n\t\t\tawait fs.mkdir(path.dirname(opts.outputPath), { recursive: true });\n\t\t\tawait fs.copyFile(result.filePath, opts.outputPath);\n\t\t}\n\t\treturn result;\n\t}\n}\n\nexport interface SubjectSandwichOptions {\n\treadonly source: string | MediaNode;\n\treadonly subject?: MaskTrackSignals | ObjectTrackSignals;\n\treadonly behind: readonly LayoutNode[];\n\treadonly feather?: number;\n\treadonly fit?: \"cover\" | \"contain\" | \"fill\";\n\treadonly variant?: \"n\" | \"s\" | \"m\" | \"l\" | \"x\";\n\treadonly confidence?: number;\n\treadonly keyBackground?: boolean;\n\treadonly backgroundKeyThreshold?: number;\n\treadonly muted?: boolean;\n\treadonly volume?: number;\n}\n\nexport interface SmartFramingOptions {\n\treadonly source: string | MediaNode;\n\treadonly targetAspect?: number;\n\treadonly sourceAspect?: number;\n\treadonly target: ObjectTrackSignals | MaskTrackSignals;\n\treadonly damping?: number;\n\treadonly leadHeadroom?: number;\n\treadonly fit?: \"cover\" | \"contain\" | \"fill\";\n\treadonly variant?: \"n\" | \"s\" | \"m\" | \"l\" | \"x\";\n\treadonly muted?: boolean;\n\treadonly volume?: number;\n}\n\nexport interface SubjectOutlineOptions {\n\treadonly source?: string | MediaNode;\n\treadonly color?: string;\n\treadonly width?: number;\n\treadonly blur?: number;\n\treadonly pulseSignal?: ProgrammaticSignal | Signal<number>;\n\treadonly muted?: boolean;\n\treadonly volume?: number;\n}\n\n/**\n * High-level programmatic builder for multi-layer Gitframes compositions.\n */\nexport class Composition {\n\tpublic width: number;\n\tpublic height: number;\n\tpublic fps: number;\n\tpublic durationMs?: number;\n\tpublic backgroundColor: string;\n\tpublic fonts: string[];\n\tpublic children: LayoutNode[] = [];\n\tpublic audioTracks: MediaNode[] = [];\n\tpublic signals: Record<string, unknown> = {};\n\tprivate _frameHooks: Array<(ctx: FrameContext) => void> = [];\n\tprivate _yoloConfig?: YoloProps | Yolo;\n\tprivate _yoloBundle?: YoloVisionBundle;\n\tprivate _effects: unknown[] = [];\n\n\t/**\n\t * Applies a whole-composition post-processing effect or vision pipeline.\n\t */\n\tpublic apply(effect: unknown): this {\n\t\tif (\n\t\t\teffect &&\n\t\t\ttypeof effect === \"object\" &&\n\t\t\t((effect as { op?: string }).op === \"MediaPipe\" ||\n\t\t\t\t(effect as { op?: string }).op === \"Yolo\")\n\t\t) {\n\t\t\tthis.withYolo(effect as Yolo);\n\t\t\treturn this;\n\t\t}\n\t\tthis._effects.push(effect);\n\t\treturn this;\n\t}\n\n\t/**\n\t * @deprecated Use `withYolo`. Alias that maps the legacy MediaPipe config onto the YOLO\n\t * engine; the legacy option shape (`enablePoseLandmarks`, `enableSegmentation`, …) is accepted.\n\t */\n\tpublic withMediaPipe(\n\t\tconfig: MediaPipeProps | MediaPipe = {},\n\t): YoloVisionBundle {\n\t\tconst props =\n\t\t\tconfig instanceof MediaPipe ? (config.config as MediaPipeProps) : config;\n\t\treturn this.withYolo(new MediaPipe(props));\n\t}\n\n\t/**\n\t * Attaches YOLO11 on top of the whole composition in one go — the rendered frame\n\t * (composition, blur, modulate, crop — anything upstream) is the inference input.\n\t * Models are LAZY: nothing downloads until the first frame actually runs a task.\n\t * Returns a reactive YoloVisionBundle (objects / masks / pose / classes signals).\n\t */\n\tpublic withYolo(config: YoloProps | Yolo = {}): YoloVisionBundle {\n\t\tif (!this._yoloBundle) {\n\t\t\tthis._yoloBundle = new YoloVisionBundle({\n\t\t\t\twidth: this.width,\n\t\t\t\theight: this.height,\n\t\t\t\tfps: this.fps,\n\t\t\t});\n\t\t}\n\t\tconst rawConfig =\n\t\t\tconfig instanceof Yolo\n\t\t\t\t? (config as unknown as { config: YoloProps }).config\n\t\t\t\t: config;\n\t\tthis._yoloConfig = {\n\t\t\t...rawConfig,\n\t\t\tvisionBundle: this._yoloBundle,\n\t\t};\n\t\treturn this._yoloBundle;\n\t}\n\n\t/**\n\t * One-shot, ffmpeg-free vision analysis of a media source (specs/yolov4plan.ts §Phase C).\n\t *\n\t * Decodes frames through the same mediabunny pipeline the renderer uses, runs the requested\n\t * YOLO tasks lazily (only those models download), temporally tracks detections, and returns\n\t * a zod-serializable report. The decoder is released and the runner closed on completion.\n\t */\n\tpublic async analyzeVisionSequence(\n\t\tsource: string,\n\t\toptions: {\n\t\t\ttasks?: readonly (\"detect\" | \"segment\" | \"pose\" | \"obb\" | \"classify\")[];\n\t\t\tcategories?: readonly string[];\n\t\t\tfps?: number;\n\t\t\ttotalFrames?: number;\n\t\t\tpathStride?: number;\n\t\t\tincludeMasks?: boolean;\n\t\t\tmodelsDir?: string;\n\t\t\tbaseUrl?: string;\n\t\t\tconfidence?: number;\n\t\t\tiouThreshold?: number;\n\t\t} = {},\n\t): Promise<VisionAnalysisReport> {\n\t\tconst fps = options.fps ?? this.fps;\n\t\tconst durationMs = this.durationMs ?? (await this.computeDuration());\n\t\tconst totalFrames =\n\t\t\toptions.totalFrames ?? Math.max(1, Math.round((durationMs / 1000) * fps));\n\n\t\tconst runner = YoloVisionRunner.create({\n\t\t\t...(options.modelsDir !== undefined\n\t\t\t\t? { modelsDir: options.modelsDir }\n\t\t\t\t: {}),\n\t\t\t...(options.baseUrl !== undefined ? { baseUrl: options.baseUrl } : {}),\n\t\t\t...(options.confidence !== undefined\n\t\t\t\t? { confidence: options.confidence }\n\t\t\t\t: {}),\n\t\t\t...(options.iouThreshold !== undefined\n\t\t\t\t? { iouThreshold: options.iouThreshold }\n\t\t\t\t: {}),\n\t\t});\n\n\t\tconst decoder = mediaDecoderCache.getVideo(source, true);\n\t\tasync function* frameSource(): AsyncGenerator<{\n\t\t\tdata: Uint8Array;\n\t\t\twidth: number;\n\t\t\theight: number;\n\t\t}> {\n\t\t\tfor (let i = 0; i < totalFrames; i++) {\n\t\t\t\tconst frame = await decoder.getFrame(i / fps);\n\t\t\t\tif (frame?.buffer && frame.width > 0 && frame.height > 0) {\n\t\t\t\t\tyield {\n\t\t\t\t\t\tdata: frame.buffer,\n\t\t\t\t\t\twidth: frame.width,\n\t\t\t\t\t\theight: frame.height,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\treturn await analyzeYoloSequence(frameSource(), {\n\t\t\t\trunner,\n\t\t\t\tsource,\n\t\t\t\tfps,\n\t\t\t\t...(options.tasks !== undefined ? { tasks: options.tasks } : {}),\n\t\t\t\t...(options.categories !== undefined\n\t\t\t\t\t? { categories: options.categories }\n\t\t\t\t\t: {}),\n\t\t\t\t...(options.pathStride !== undefined\n\t\t\t\t\t? { pathStride: options.pathStride }\n\t\t\t\t\t: {}),\n\t\t\t\t...(options.includeMasks !== undefined\n\t\t\t\t\t? { includeMasks: options.includeMasks }\n\t\t\t\t\t: {}),\n\t\t\t\t...(options.iouThreshold !== undefined\n\t\t\t\t\t? { iouThreshold: options.iouThreshold }\n\t\t\t\t\t: {}),\n\t\t\t});\n\t\t} finally {\n\t\t\trunner.close();\n\t\t\tdecoder.destroy();\n\t\t}\n\t}\n\n\t/**\n\t * Game-engine per-frame lifecycle hook for the composition.\n\t * Invoked before rendering each frame so scripts or agents can mutate properties and signals.\n\t */\n\tpublic onRequestFrame(callback: (ctx: FrameContext) => void): this {\n\t\tthis._frameHooks.push(callback);\n\t\treturn this;\n\t}\n\n\tpublic notifyFrame(ctx: FrameContext): void {\n\t\tfor (const hook of this._frameHooks) {\n\t\t\thook(ctx);\n\t\t}\n\t}\n\n\tconstructor(options: CompositionOptions) {\n\t\tthis.width = options.width;\n\t\tthis.height = options.height;\n\t\tthis.fps = options.fps ?? 60;\n\t\tthis.durationMs =\n\t\t\toptions.durationMs ??\n\t\t\t(options.durationFrames !== undefined\n\t\t\t\t? (options.durationFrames / this.fps) * 1000\n\t\t\t\t: undefined);\n\t\tthis.backgroundColor = options.backgroundColor ?? \"#000000\";\n\t\tthis.fonts = options.fonts ?? [];\n\t\tthis.signals = options.signals ?? {};\n\t}\n\n\tpublic static create(options: CompositionOptions): Composition {\n\t\treturn new Composition(options);\n\t}\n\n\tpublic addSignal(name: string, signal: unknown): this {\n\t\tthis.signals[name] = signal;\n\t\treturn this;\n\t}\n\n\tpublic add(\n\t\tlayerOrFirst:\n\t\t\t| LayoutNode\n\t\t\t| LayoutNode[]\n\t\t\t| TensorPipeline\n\t\t\t| YoloNode\n\t\t\t| { node: unknown },\n\t\t...rest: Array<\n\t\t\t| LayoutNode\n\t\t\t| LayoutNode[]\n\t\t\t| TensorPipeline\n\t\t\t| YoloNode\n\t\t\t| { node: unknown }\n\t\t\t| LayerAnimation\n\t\t\t| { tracks: AnimationTrack[] }\n\t\t>\n\t): this {\n\t\tif (layerOrFirst instanceof TensorPipeline) {\n\t\t\tthis.children.push(layerOrFirst.toNode() as unknown as LayoutNode);\n\t\t} else if (layerOrFirst instanceof YoloNode) {\n\t\t\tthis.children.push(layerOrFirst.toNode() as unknown as LayoutNode);\n\t\t} else if (\n\t\t\tlayerOrFirst &&\n\t\t\ttypeof layerOrFirst === \"object\" &&\n\t\t\t\"node\" in layerOrFirst\n\t\t) {\n\t\t\tthis.add(\n\t\t\t\t(\n\t\t\t\t\tlayerOrFirst as {\n\t\t\t\t\t\tnode: LayoutNode | TensorPipeline | { node: unknown };\n\t\t\t\t\t}\n\t\t\t\t).node as LayoutNode,\n\t\t\t\t...rest,\n\t\t\t);\n\t\t\treturn this;\n\t\t} else if (Array.isArray(layerOrFirst)) {\n\t\t\tfor (const l of layerOrFirst) {\n\t\t\t\tthis.add(l);\n\t\t\t}\n\t\t} else {\n\t\t\tconst targetNode = layerOrFirst as LayoutNode;\n\t\t\tconst animCandidate = rest[0];\n\t\t\tif (\n\t\t\t\tanimCandidate &&\n\t\t\t\t!(animCandidate instanceof TensorPipeline) &&\n\t\t\t\t!Array.isArray(animCandidate) &&\n\t\t\t\t(animCandidate instanceof LayerAnimation || \"tracks\" in animCandidate)\n\t\t\t) {\n\t\t\t\ttargetNode.animation =\n\t\t\t\t\tanimCandidate instanceof LayerAnimation\n\t\t\t\t\t\t? animCandidate.toSpec()\n\t\t\t\t\t\t: animCandidate;\n\t\t\t\tthis.children.push(targetNode);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tthis.children.push(targetNode);\n\t\t}\n\n\t\tfor (const item of rest) {\n\t\t\tif (item && !(item instanceof LayerAnimation) && !(\"tracks\" in item)) {\n\t\t\t\tthis.add(\n\t\t\t\t\titem as\n\t\t\t\t\t\t| LayoutNode\n\t\t\t\t\t\t| LayoutNode[]\n\t\t\t\t\t\t| TensorPipeline\n\t\t\t\t\t\t| { node: unknown },\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tpublic addAudio(track: MediaNode): this {\n\t\tthis.audioTracks.push(track);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Turnkey \"Text Behind Subject\" (\"Sandwich\") Primitive.\n\t * Lowers into:\n\t * 1. Bottom Layer: Full background video plate\n\t * 2. Middle Layer: User-supplied `behind` nodes\n\t * 3. Top Layer: Subject cutout video with continuous matte alpha registered at identical coordinates\n\t */\n\tpublic addSubjectSandwich(options: SubjectSandwichOptions): this {\n\t\tconst src =\n\t\t\ttypeof options.source === \"string\"\n\t\t\t\t? options.source\n\t\t\t\t: (options.source.src ?? \"\");\n\t\tconst fit = options.fit ?? \"cover\";\n\t\tconst feather = options.feather ?? 4;\n\t\tconst featherVal = feather > 1 ? feather / 100 : feather;\n\t\tconst variant = options.variant ?? \"s\";\n\n\t\t// 1. Bottom Layer: Full background video plate\n\t\tconst bottomPlate = Layer.video(src, {\n\t\t\twidth: this.width,\n\t\t\theight: this.height,\n\t\t\tposition: \"absolute\",\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\tfit,\n\t\t\tmuted: options.muted ?? false,\n\t\t\tvolume: options.muted ? 0 : (options.volume ?? 1),\n\t\t});\n\t\tthis.add(bottomPlate);\n\n\t\t// 2. Middle Layer: User-supplied `behind` nodes\n\t\tfor (const node of options.behind) {\n\t\t\tthis.add(node);\n\t\t}\n\n\t\t// 3. Top Layer: Subject cutout video with continuous matte alpha registered at identical coordinates\n\t\tconst topPlate = Layer.video(src, {\n\t\t\twidth: this.width,\n\t\t\theight: this.height,\n\t\t\tposition: \"absolute\",\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\tfit,\n\t\t\tmuted: true,\n\t\t\tvolume: 0,\n\t\t}).withYolo({\n\t\t\tmode: \"matte\",\n\t\t\tenableSegmentation: true,\n\t\t\tvariant,\n\t\t\tconfidence: options.confidence ?? 0.25,\n\t\t\tfeatherRadius: featherVal,\n\t\t\tkeyBackground: options.keyBackground ?? true,\n\t\t\tbackgroundKeyThreshold: options.backgroundKeyThreshold,\n\t\t});\n\t\tthis.add(topPlate);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Dynamic Smart Re-Framing (16:9 → 9:16 Auto-Crop).\n\t * Automatically transforms landscape footage into vertical shorts/reels by framing the\n\t * tracked subject with smooth camera physics and lead headroom.\n\t */\n\tpublic addSmartFraming(options: SmartFramingOptions): this {\n\t\tconst src =\n\t\t\ttypeof options.source === \"string\"\n\t\t\t\t? options.source\n\t\t\t\t: (options.source.src ?? \"\");\n\t\tconst damping = Math.max(0, Math.min(0.99, options.damping ?? 0.8));\n\t\tconst headroom = options.leadHeadroom ?? 0.18;\n\t\tconst compW = this.width;\n\t\tconst compH = this.height;\n\n\t\tconst sourceAspect = options.sourceAspect ?? 16 / 9;\n\t\tconst compAspect = compW / compH;\n\n\t\t// Calculate canvas coverage dimensions to avoid black bars during pan\n\t\tconst plateWidth =\n\t\t\tcompAspect < sourceAspect ? Math.round(compH * sourceAspect) : compW;\n\t\tconst plateHeight =\n\t\t\tcompAspect < sourceAspect ? compH : Math.round(compW / sourceAspect);\n\n\t\tconst minOffsetX = compW - plateWidth; // <= 0\n\t\tconst minOffsetY = compH - plateHeight; // <= 0\n\n\t\tconst targetObj = options.target as unknown as {\n\t\t\tcenter?: {\n\t\t\t\tx?: ProgrammaticSignal;\n\t\t\t\ty?: ProgrammaticSignal;\n\t\t\t\tscreenX?: ProgrammaticSignal;\n\t\t\t\tscreenY?: ProgrammaticSignal;\n\t\t\t};\n\t\t\tbounds?: {\n\t\t\t\tx?: ProgrammaticSignal;\n\t\t\t\ty?: ProgrammaticSignal;\n\t\t\t\twidth?: ProgrammaticSignal;\n\t\t\t\theight?: ProgrammaticSignal;\n\t\t\t\tcenterX?: ProgrammaticSignal;\n\t\t\t\tcenterY?: ProgrammaticSignal;\n\t\t\t};\n\t\t};\n\n\t\tconst rawOffsetX = new ProgrammaticSignal(\n\t\t\t(ctx) => {\n\t\t\t\tif (minOffsetX >= 0) return 0;\n\t\t\t\tconst normX = targetObj.center?.x\n\t\t\t\t\t? targetObj.center.x.get(ctx)\n\t\t\t\t\t: targetObj.bounds?.centerX\n\t\t\t\t\t\t? targetObj.bounds.centerX.get(ctx) / compW\n\t\t\t\t\t\t: targetObj.center?.screenX\n\t\t\t\t\t\t\t? targetObj.center.screenX.get(ctx) / compW\n\t\t\t\t\t\t\t: 0.5;\n\t\t\t\tconst clampedNormX = Math.max(0, Math.min(1, normX));\n\t\t\t\tconst targetPx = clampedNormX * plateWidth;\n\t\t\t\tconst desired = compW / 2 - targetPx;\n\t\t\t\treturn Math.max(minOffsetX, Math.min(0, desired));\n\t\t\t},\n\t\t\t{ fps: this.fps, label: \"smart_framing_pan_x\" },\n\t\t);\n\n\t\tconst rawOffsetY = new ProgrammaticSignal(\n\t\t\t(ctx) => {\n\t\t\t\tif (minOffsetY >= 0) return 0;\n\t\t\t\tconst normY = targetObj.center?.y\n\t\t\t\t\t? targetObj.center.y.get(ctx)\n\t\t\t\t\t: targetObj.bounds?.centerY\n\t\t\t\t\t\t? targetObj.bounds.centerY.get(ctx) / compH\n\t\t\t\t\t\t: targetObj.center?.screenY\n\t\t\t\t\t\t\t? targetObj.center.screenY.get(ctx) / compH\n\t\t\t\t\t\t\t: 0.5;\n\t\t\t\tconst clampedNormY = Math.max(0, Math.min(1, normY));\n\t\t\t\tconst targetPy = clampedNormY * plateHeight;\n\t\t\t\tconst desired = compH * headroom - targetPy;\n\t\t\t\treturn Math.max(minOffsetY, Math.min(0, desired));\n\t\t\t},\n\t\t\t{ fps: this.fps, label: \"smart_framing_pan_y\" },\n\t\t);\n\n\t\t// Damped camera smoothing\n\t\tconst smoothOffsetX = new ProgrammaticSignal(\n\t\t\t(ctx) => {\n\t\t\t\tconst targetFrame = ctx.frame;\n\t\t\t\tif (targetFrame <= 0) return rawOffsetX.get(ctx);\n\t\t\t\tlet filtered = rawOffsetX.get({ ...ctx, frame: 0, time: 0 });\n\t\t\t\tconst alpha = 1.0 - damping;\n\t\t\t\tfor (let f = 1; f <= targetFrame; f++) {\n\t\t\t\t\tconst val = rawOffsetX.get({ ...ctx, frame: f, time: f / ctx.fps });\n\t\t\t\t\tfiltered = filtered + alpha * (val - filtered);\n\t\t\t\t}\n\t\t\t\treturn filtered;\n\t\t\t},\n\t\t\t{ fps: this.fps, label: \"smart_framing_smooth_x\" },\n\t\t);\n\n\t\tconst smoothOffsetY = new ProgrammaticSignal(\n\t\t\t(ctx) => {\n\t\t\t\tconst targetFrame = ctx.frame;\n\t\t\t\tif (targetFrame <= 0) return rawOffsetY.get(ctx);\n\t\t\t\tlet filtered = rawOffsetY.get({ ...ctx, frame: 0, time: 0 });\n\t\t\t\tconst alpha = 1.0 - damping;\n\t\t\t\tfor (let f = 1; f <= targetFrame; f++) {\n\t\t\t\t\tconst val = rawOffsetY.get({ ...ctx, frame: f, time: f / ctx.fps });\n\t\t\t\t\tfiltered = filtered + alpha * (val - filtered);\n\t\t\t\t}\n\t\t\t\treturn filtered;\n\t\t\t},\n\t\t\t{ fps: this.fps, label: \"smart_framing_smooth_y\" },\n\t\t);\n\n\t\tconst container = Layer.box({\n\t\t\twidth: compW,\n\t\t\theight: compH,\n\t\t\toverflow: \"hidden\",\n\t\t\tposition: \"relative\",\n\t\t});\n\n\t\tconst videoPlate = Layer.video(src, {\n\t\t\twidth: plateWidth,\n\t\t\theight: plateHeight,\n\t\t\tposition: \"absolute\",\n\t\t\tx: smoothOffsetX as unknown as number,\n\t\t\ty: smoothOffsetY as unknown as number,\n\t\t\tfit: options.fit ?? \"cover\",\n\t\t\tmuted: options.muted ?? false,\n\t\t\tvolume: options.muted ? 0 : (options.volume ?? 1),\n\t\t});\n\n\t\tcontainer.children.push(videoPlate);\n\t\tthis.add(container);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Subject Contour Glow & Neon Outline.\n\t * Strokes the silhouette boundary with a stylized bloom/glow and optional audio-reactive pulse.\n\t */\n\tpublic addSubjectOutline(\n\t\t_subject: MaskTrackSignals | ObjectTrackSignals,\n\t\toptions: SubjectOutlineOptions = {},\n\t): this {\n\t\tconst blur = options.blur ?? 12;\n\t\tconst compW = this.width;\n\t\tconst compH = this.height;\n\n\t\tconst pulse = options.pulseSignal;\n\t\tconst baseOpacity = pulse\n\t\t\t? new ProgrammaticSignal(\n\t\t\t\t\t(ctx) => Math.max(0, Math.min(1, Number(pulse.get(ctx)) || 0)),\n\t\t\t\t\t{ fps: this.fps, label: \"outline_pulse\" },\n\t\t\t\t)\n\t\t\t: 1.0;\n\n\t\tconst src =\n\t\t\ttypeof options.source === \"string\"\n\t\t\t\t? options.source\n\t\t\t\t: (options.source?.src ?? \"\");\n\n\t\tconst outlineLayer = Layer.box({\n\t\t\twidth: compW,\n\t\t\theight: compH,\n\t\t\tposition: \"absolute\",\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\topacity: baseOpacity as unknown as number,\n\t\t});\n\n\t\tif (src) {\n\t\t\tconst maskVideo = Layer.video(src, {\n\t\t\t\twidth: compW,\n\t\t\t\theight: compH,\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tx: 0,\n\t\t\t\ty: 0,\n\t\t\t\tfit: \"cover\",\n\t\t\t\tmuted: true,\n\t\t\t\tvolume: 0,\n\t\t\t}).withYolo({\n\t\t\t\tmode: \"mask\",\n\t\t\t\tenableSegmentation: true,\n\t\t\t});\n\t\t\toutlineLayer.children.push(maskVideo);\n\t\t}\n\n\t\toutlineLayer.apply(\n\t\t\tnew Blur({\n\t\t\t\tstrength: blur,\n\t\t\t\tblurType: \"Gaussian\",\n\t\t\t}),\n\t\t);\n\n\t\tthis.add(outlineLayer);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Creates an isolated, styled section of the composition or underlying source plate.\n\t * Any WebGPU effects (Blur, FilmGrain, Curves, Vignette, etc.) can be applied to this section.\n\t */\n\tpublic section(\n\t\tsourceOrTargetOrOptions?:\n\t\t\t| string\n\t\t\t| MediaNode\n\t\t\t| ObjectTrackSignals\n\t\t\t| SectionOptions,\n\t\ttargetOrOptions?: ObjectTrackSignals | SectionOptions,\n\t\toptions?: SectionOptions,\n\t): SectionNode {\n\t\tlet source: string | MediaNode | undefined;\n\t\tlet target: ObjectTrackSignals | undefined;\n\t\tlet opts: SectionOptions = {};\n\n\t\tconst isFirstTrack =\n\t\t\tsourceOrTargetOrOptions !== null &&\n\t\t\ttypeof sourceOrTargetOrOptions === \"object\" &&\n\t\t\t\"bounds\" in sourceOrTargetOrOptions;\n\n\t\tconst isFirstMedia =\n\t\t\ttypeof sourceOrTargetOrOptions === \"string\" ||\n\t\t\t(sourceOrTargetOrOptions !== null &&\n\t\t\t\ttypeof sourceOrTargetOrOptions === \"object\" &&\n\t\t\t\t(\"kind\" in sourceOrTargetOrOptions ||\n\t\t\t\t\t\"src\" in sourceOrTargetOrOptions ||\n\t\t\t\t\t\"inputHandleId\" in sourceOrTargetOrOptions));\n\n\t\tif (\n\t\t\tisFirstMedia &&\n\t\t\ttargetOrOptions &&\n\t\t\ttypeof targetOrOptions === \"object\" &&\n\t\t\t\"bounds\" in targetOrOptions\n\t\t) {\n\t\t\tsource = sourceOrTargetOrOptions as string | MediaNode;\n\t\t\ttarget = targetOrOptions as ObjectTrackSignals;\n\t\t\topts = options ?? {};\n\t\t} else if (isFirstMedia && targetOrOptions) {\n\t\t\tsource = sourceOrTargetOrOptions as string | MediaNode;\n\t\t\topts = targetOrOptions as SectionOptions;\n\t\t} else if (isFirstTrack) {\n\t\t\ttarget = sourceOrTargetOrOptions as ObjectTrackSignals;\n\t\t\topts = (targetOrOptions as SectionOptions) ?? {};\n\t\t\tsource = opts.source ?? (target.source as string | MediaNode | undefined);\n\t\t} else if (\n\t\t\tsourceOrTargetOrOptions &&\n\t\t\ttypeof sourceOrTargetOrOptions === \"object\"\n\t\t) {\n\t\t\topts = sourceOrTargetOrOptions as SectionOptions;\n\t\t\tsource = opts.source;\n\t\t}\n\n\t\tif (!source) {\n\t\t\tconst mediaChild = this.children.find(\n\t\t\t\t(c) =>\n\t\t\t\t\tc.kind === \"media\" &&\n\t\t\t\t\t(c.dataType === \"Video\" || c.dataType === \"Image\"),\n\t\t\t) as MediaNode | undefined;\n\t\t\tif (mediaChild) {\n\t\t\t\tsource = mediaChild;\n\t\t\t}\n\t\t}\n\n\t\treturn Layer.section(source ?? \"\", target ?? opts, {\n\t\t\tcompositionWidth: this.width,\n\t\t\tcompositionHeight: this.height,\n\t\t\t...opts,\n\t\t});\n\t}\n\n\t/**\n\t * Creates a section and immediately adds it to the composition layout tree.\n\t */\n\tpublic addSection(\n\t\tsourceOrTargetOrOptions?:\n\t\t\t| string\n\t\t\t| MediaNode\n\t\t\t| ObjectTrackSignals\n\t\t\t| SectionOptions,\n\t\ttargetOrOptions?: ObjectTrackSignals | SectionOptions,\n\t\toptions?: SectionOptions,\n\t): SectionNode {\n\t\tconst node = this.section(\n\t\t\tsourceOrTargetOrOptions,\n\t\t\ttargetOrOptions,\n\t\t\toptions,\n\t\t);\n\t\tthis.add(node);\n\t\treturn node;\n\t}\n\n\t/**\n\t * Dynamically calculates composition duration from the longest media or animation layer.\n\t */\n\tpublic async computeDuration(): Promise<number> {\n\t\tif (this.durationMs !== undefined) return this.durationMs;\n\t\tlet maxDurationMs = 0;\n\t\tconst mediaSources: string[] = [];\n\n\t\tfor (const node of [...this.children, ...this.audioTracks]) {\n\t\t\tif (node.kind === \"media\") {\n\t\t\t\tconst src = node.inputHandleId;\n\t\t\t\tif (\n\t\t\t\t\ttypeof src === \"string\" &&\n\t\t\t\t\t(node.dataType === \"Video\" || node.dataType === \"Audio\")\n\t\t\t\t) {\n\t\t\t\t\tmediaSources.push(src);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (typeof node.durationFrames === \"number\") {\n\t\t\t\tconst start = typeof node.startFrame === \"number\" ? node.startFrame : 0;\n\t\t\t\tconst durMs = ((start + node.durationFrames) / this.fps) * 1000;\n\t\t\t\tif (durMs > maxDurationMs) maxDurationMs = durMs;\n\t\t\t}\n\t\t}\n\n\t\tfor (const src of mediaSources) {\n\t\t\ttry {\n\t\t\t\tconst input = await inputStore.acquire(src);\n\t\t\t\tconst sec = await input.computeDuration();\n\t\t\t\tif (Number.isFinite(sec) && sec > 0) {\n\t\t\t\t\tconst ms = Math.round(sec * 1000);\n\t\t\t\t\tif (ms > maxDurationMs) maxDurationMs = ms;\n\t\t\t\t}\n\t\t\t} catch (_) {}\n\t\t}\n\n\t\treturn maxDurationMs > 0 ? maxDurationMs : 5000;\n\t}\n\n\tpublic async registerFont(\n\t\toptionsOrFamilyOrSource: RegisterFontOptions | string,\n\t\tsource?: string | Uint8Array,\n\t): Promise<this> {\n\t\tconst reg = await FontManager.register(optionsOrFamilyOrSource, source);\n\t\tif (reg.filePath && !this.fonts.includes(reg.filePath)) {\n\t\t\tthis.fonts.push(reg.filePath);\n\t\t}\n\t\treturn this;\n\t}\n\n\tpublic toSpec(): CompositorProgramConfig {\n\t\tconst layoutItems: LayoutNode[] = [...this.children, ...this.audioTracks];\n\t\tconst registeredPaths = FontManager.getRegisteredFontPaths();\n\t\tconst mergedFonts = Array.from(\n\t\t\tnew Set([...this.fonts, ...registeredPaths]),\n\t\t);\n\t\treturn {\n\t\t\twidth: this.width,\n\t\t\theight: this.height,\n\t\t\tfps: this.fps,\n\t\t\tmode: \"Video\",\n\t\t\tbackgroundColor: this.backgroundColor,\n\t\t\tlayout: layoutItems,\n\t\t\tfonts: mergedFonts,\n\t\t\tsignals: this.signals,\n\t\t\t...(this._effects.length > 0 && { effects: this._effects }),\n\t\t\t...(this._yoloConfig && { yolo: this._yoloConfig }),\n\t\t\t...(this._frameHooks.length > 0 && {\n\t\t\t\tonRequestFrame: (ctx: FrameContext) => this.notifyFrame(ctx),\n\t\t\t}),\n\t\t} as unknown as CompositorProgramConfig;\n\t}\n\n\t/**\n\t * Compiles the composition into a VirtualMediaData AST ready for WebGPU rendering.\n\t */\n\tpublic toVirtualMedia(\n\t\toptions: Partial<CompositorToProgramOptions> = {},\n\t): VirtualMediaData {\n\t\treturn compositorToProgram(this.toSpec(), {\n\t\t\tisVideoMode: true,\n\t\t\tfps: this.fps,\n\t\t\tdurationMs: options.durationMs ?? this.durationMs,\n\t\t\tsignals: options.signals ?? this.signals,\n\t\t\t...(this._effects.length > 0 && { effects: this._effects }),\n\t\t\t...(this._yoloConfig && { yolo: this._yoloConfig }),\n\t\t\t...options,\n\t\t});\n\t}\n\n\t/**\n\t * Compiles the composition into a VirtualMediaData AST with dynamically resolved duration.\n\t */\n\tpublic async toVirtualMediaAsync(\n\t\toptions: Partial<CompositorToProgramOptions> = {},\n\t): Promise<VirtualMediaData> {\n\t\tconst durationMs =\n\t\t\toptions.durationMs ?? this.durationMs ?? (await this.computeDuration());\n\t\tthis.durationMs = durationMs;\n\t\treturn compositorToProgram(this.toSpec(), {\n\t\t\tisVideoMode: true,\n\t\t\tfps: this.fps,\n\t\t\tdurationMs,\n\t\t\tsignals: options.signals ?? this.signals,\n\t\t\t...(this._effects.length > 0 && { effects: this._effects }),\n\t\t\t...(this._yoloConfig && { yolo: this._yoloConfig }),\n\t\t\t...options,\n\t\t});\n\t}\n\n\t/**\n\t * Renders a single frame from the composition to a PNG Buffer.\n\t * Can render either by timestamp in milliseconds (`atMs`) or by frame index (`frame`).\n\t */\n\tpublic async renderFrame(\n\t\toptions: {\n\t\t\tatMs?: number;\n\t\t\tframe?: number;\n\t\t\trenderer?: HeadlessMediaRenderer;\n\t\t} = {},\n\t): Promise<Buffer> {\n\t\tif (this._frameHooks.length > 0) {\n\t\t\tconst targetFrame =\n\t\t\t\toptions.frame ??\n\t\t\t\t(options.atMs !== undefined\n\t\t\t\t\t? Math.round((options.atMs / 1000) * this.fps)\n\t\t\t\t\t: 0);\n\t\t\tthis.notifyFrame({\n\t\t\t\tframe: targetFrame,\n\t\t\t\tfps: this.fps,\n\t\t\t\ttime: this.fps > 0 ? targetFrame / this.fps : 0,\n\t\t\t\tduration: (this.durationMs ?? 0) / 1000,\n\t\t\t\tdurationMs: this.durationMs ?? 0,\n\t\t\t\tprogress:\n\t\t\t\t\tthis.durationMs && this.durationMs > 0\n\t\t\t\t\t\t? Math.max(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tMath.min(\n\t\t\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t\t\t((targetFrame / this.fps) * 1000) / this.durationMs,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: 0,\n\t\t\t\tdeltaTime: this.fps > 0 ? 1 / this.fps : 0,\n\t\t\t});\n\t\t}\n\t\tconst renderer = options.renderer ?? new HeadlessMediaRenderer();\n\t\treturn renderer.renderFrame(this.toVirtualMedia(), {\n\t\t\tfps: this.fps,\n\t\t\t...options,\n\t\t});\n\t}\n\n\t/**\n\t * Renders an image grid of sequential frames across a given frame or millisecond range.\n\t * Ideal for automated visual inspection of animation motion, easing curves, and layout stability.\n\t */\n\tpublic async renderFrameGrid(\n\t\toptions: FrameGridOptions = {},\n\t): Promise<Buffer> {\n\t\treturn renderFrameGrid(this, options);\n\t}\n\n\t/**\n\t * Renders this composition into an MP4/WebM video file with audio.\n\t */\n\tpublic async renderVideo(\n\t\toutputPathOrOptions:\n\t\t\t| string\n\t\t\t| {\n\t\t\t\t\tcodec?: string;\n\t\t\t\t\taudioCodec?: string;\n\t\t\t\t\tquality?: string;\n\t\t\t\t\tconcurrency?: number;\n\t\t\t\t\toutputPath?: string;\n\t\t\t\t\trenderer?: HeadlessMediaRenderer;\n\t\t\t } = {},\n\t\toptions: {\n\t\t\tcodec?: string;\n\t\t\taudioCodec?: string;\n\t\t\tquality?: string;\n\t\t\tconcurrency?: number;\n\t\t\toutputPath?: string;\n\t\t\trenderer?: HeadlessMediaRenderer;\n\t\t} = {},\n\t): Promise<{ filePath: string; cleanup: () => Promise<void> }> {\n\t\tconst opts =\n\t\t\ttypeof outputPathOrOptions === \"string\"\n\t\t\t\t? { ...options, outputPath: outputPathOrOptions }\n\t\t\t\t: outputPathOrOptions;\n\t\tconst renderer = opts.renderer ?? new HeadlessMediaRenderer();\n\t\tconst result = await renderer.renderVideo(this.toVirtualMedia(), opts);\n\t\tif (opts.outputPath) {\n\t\t\tawait fs.mkdir(path.dirname(opts.outputPath), { recursive: true });\n\t\t\tawait fs.copyFile(result.filePath, opts.outputPath);\n\t\t}\n\t\treturn result;\n\t}\n}\n\n/**\n * Layer helpers for constructing composition nodes with clean URL/path strings.\n */\n\nexport type AnimatableNode<T extends LayoutNode> = T & {\n\tblendshapes?: Record<string, unknown>;\n\thasBlendshapes?: boolean;\n\tmask?: unknown;\n\tglass?: Record<string, unknown>;\n\taudioDeform?: MeshAudioDeformConfig | Record<string, unknown>;\n\tcrop?: CropProps | Crop;\n\tyolo?: YoloProps | Yolo;\n\trelighting?: NormalRelightingOptions;\n\tdeflicker?: DeflickerOptions;\n\teffects?: unknown[];\n\tblurRegions?: unknown[];\n\t[key: string]: unknown;\n\tanimate(\n\t\t...anim: (\n\t\t\t| LayerAnimation\n\t\t\t| { tracks: AnimationTrack[] }\n\t\t\t| LayerAnimation[]\n\t\t)[]\n\t): AnimatableNode<T>;\n\tpinToLandmark(\n\t\ttarget:\n\t\t\t| LandmarkCoordinateSignals\n\t\t\t| {\n\t\t\t\t\tx: number;\n\t\t\t\t\ty: number;\n\t\t\t\t\tz?: number;\n\t\t\t\t\tscreenX?: number;\n\t\t\t\t\tscreenY?: number;\n\t\t\t },\n\t\toptions?: PinToLandmarkOptions,\n\t): AnimatableNode<T>;\n\tpinToObject(\n\t\ttarget:\n\t\t\t| ObjectTrackSignals\n\t\t\t| LandmarkCoordinateSignals\n\t\t\t| {\n\t\t\t\t\tx: number;\n\t\t\t\t\ty: number;\n\t\t\t\t\tz?: number;\n\t\t\t\t\tscreenX?: number;\n\t\t\t\t\tscreenY?: number;\n\t\t\t },\n\t\toptions?: PinToObjectOptions,\n\t): AnimatableNode<T>;\n\t/** @deprecated Face blendshapes were removed with MediaPipe; accepted but a no-op. */\n\tdriveBlendshapes(blendshapes: Record<string, unknown>): AnimatableNode<T>;\n\twithMask(mask: unknown): AnimatableNode<T>;\n\twithPbrGlass(options?: Record<string, unknown>): AnimatableNode<T>;\n\tdeformWithAudio(\n\t\tconfig?: MeshAudioDeformConfig | Record<string, unknown>,\n\t): AnimatableNode<T>;\n\twithCrop(cropConfig: CropProps | Crop): AnimatableNode<T>;\n\twithMediaPipe(config?: MediaPipeProps | MediaPipe): AnimatableNode<T>;\n\twithYolo(config?: YoloProps | Yolo): AnimatableNode<T>;\n\twithRelighting(options?: NormalRelightingOptions): AnimatableNode<T>;\n\trelight(options?: NormalRelightingOptions): AnimatableNode<T>;\n\twithDeflicker(options?: DeflickerOptions): AnimatableNode<T>;\n\tapply(effect: unknown): AnimatableNode<T>;\n\twithEffect(effect: unknown): AnimatableNode<T>;\n\twithEffects(effects: unknown[]): AnimatableNode<T>;\n\tblurRegion(\n\t\ttrackTarget: ObjectTrackSignals,\n\t\toptions?: Partial<BlurProps>,\n\t): AnimatableNode<T>;\n\twithBlurRegion(\n\t\ttrackTarget: ObjectTrackSignals,\n\t\toptions?: Partial<BlurProps>,\n\t): AnimatableNode<T>;\n};\n\nfunction withAnimation<T extends LayoutNode>(node: T): AnimatableNode<T> {\n\tconst target = node as AnimatableNode<T>;\n\tObject.defineProperty(target, \"animate\", {\n\t\tvalue: (\n\t\t\t...anims: (\n\t\t\t\t| LayerAnimation\n\t\t\t\t| { tracks: AnimationTrack[] }\n\t\t\t\t| LayerAnimation[]\n\t\t\t)[]\n\t\t) => {\n\t\t\tconst flatAnims = anims.flat();\n\t\t\tif (\n\t\t\t\tflatAnims.length > 1 ||\n\t\t\t\t(flatAnims.length === 1 && Array.isArray(anims[0]))\n\t\t\t) {\n\t\t\t\tconst allTracks = flatAnims.flatMap((a) =>\n\t\t\t\t\ta instanceof LayerAnimation\n\t\t\t\t\t\t? a.tracks\n\t\t\t\t\t\t: ((a as { tracks?: AnimationTrack[] }).tracks ?? []),\n\t\t\t\t);\n\t\t\t\ttarget.animation = { tracks: allTracks };\n\t\t\t} else if (flatAnims.length === 1) {\n\t\t\t\tconst anim = flatAnims[0];\n\t\t\t\ttarget.animation =\n\t\t\t\t\tanim instanceof LayerAnimation\n\t\t\t\t\t\t? anim.toSpec()\n\t\t\t\t\t\t: (anim as { tracks: AnimationTrack[] });\n\t\t\t}\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"pinToLandmark\", {\n\t\tvalue: (\n\t\t\tlandmarkTarget:\n\t\t\t\t| LandmarkCoordinateSignals\n\t\t\t\t| {\n\t\t\t\t\t\tx: number;\n\t\t\t\t\t\ty: number;\n\t\t\t\t\t\tz?: number;\n\t\t\t\t\t\tscreenX?: number;\n\t\t\t\t\t\tscreenY?: number;\n\t\t\t\t },\n\t\t\toptions?: PinToLandmarkOptions,\n\t\t) => {\n\t\t\tpinNodeToLandmark(\n\t\t\t\ttarget as unknown as { x?: unknown; y?: unknown; z?: unknown },\n\t\t\t\tlandmarkTarget,\n\t\t\t\toptions,\n\t\t\t);\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"pinToObject\", {\n\t\tvalue: (\n\t\t\tobjectTarget:\n\t\t\t\t| ObjectTrackSignals\n\t\t\t\t| LandmarkCoordinateSignals\n\t\t\t\t| {\n\t\t\t\t\t\tx: number;\n\t\t\t\t\t\ty: number;\n\t\t\t\t\t\tz?: number;\n\t\t\t\t\t\tscreenX?: number;\n\t\t\t\t\t\tscreenY?: number;\n\t\t\t\t },\n\t\t\toptions?: PinToObjectOptions,\n\t\t) => {\n\t\t\tpinNodeToObject(\n\t\t\t\ttarget as unknown as {\n\t\t\t\t\tx?: unknown;\n\t\t\t\t\ty?: unknown;\n\t\t\t\t\tz?: unknown;\n\t\t\t\t\twidth?: unknown;\n\t\t\t\t\theight?: unknown;\n\t\t\t\t\topacity?: unknown;\n\t\t\t\t},\n\t\t\t\tobjectTarget,\n\t\t\t\toptions,\n\t\t\t);\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"driveBlendshapes\", {\n\t\tvalue: (blendshapes: Record<string, unknown>) => {\n\t\t\ttarget.blendshapes = blendshapes;\n\t\t\ttarget.hasBlendshapes = true;\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"withMask\", {\n\t\tvalue: (mask: unknown) => {\n\t\t\ttarget.mask = mask;\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"withPbrGlass\", {\n\t\tvalue: (options?: Record<string, unknown>) => {\n\t\t\ttarget.glass = options ?? {};\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"deformWithAudio\", {\n\t\tvalue: (config?: MeshAudioDeformConfig | Record<string, unknown>) => {\n\t\t\ttarget.audioDeform = config ?? {};\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"withCrop\", {\n\t\tvalue: (cropConfig: CropProps | Crop) => {\n\t\t\ttarget.crop =\n\t\t\t\tcropConfig instanceof Crop ? cropConfig : new Crop(cropConfig);\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"withMediaPipe\", {\n\t\tvalue: (config?: MediaPipeProps | MediaPipe) => {\n\t\t\t// Deprecated alias — routes through the YOLO engine (`target.yolo`).\n\t\t\ttarget.yolo =\n\t\t\t\tconfig instanceof MediaPipe ? config : new MediaPipe(config);\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"withYolo\", {\n\t\tvalue: (config?: YoloProps | Yolo) => {\n\t\t\ttarget.yolo = config instanceof Yolo ? config : new Yolo(config);\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"withRelighting\", {\n\t\tvalue: (options?: NormalRelightingOptions) => {\n\t\t\ttarget.relighting = options ?? {};\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"relight\", {\n\t\tvalue: (options?: NormalRelightingOptions) => {\n\t\t\ttarget.relighting = options ?? {};\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"withDeflicker\", {\n\t\tvalue: (options?: DeflickerOptions) => {\n\t\t\ttarget.deflicker = options ?? {};\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"apply\", {\n\t\tvalue: (effect: unknown) => {\n\t\t\tif (!target.effects) {\n\t\t\t\ttarget.effects = [];\n\t\t\t}\n\t\t\ttarget.effects.push(effect);\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"withEffect\", {\n\t\tvalue: (effect: unknown) => {\n\t\t\tif (!target.effects) {\n\t\t\t\ttarget.effects = [];\n\t\t\t}\n\t\t\ttarget.effects.push(effect);\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"withEffects\", {\n\t\tvalue: (effects: unknown[]) => {\n\t\t\tif (!target.effects) {\n\t\t\t\ttarget.effects = [];\n\t\t\t}\n\t\t\ttarget.effects.push(...effects);\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"section\", {\n\t\tvalue: (\n\t\t\ttargetOrOptions: ObjectTrackSignals | SectionOptions = {},\n\t\t\toptions?: SectionOptions,\n\t\t) => {\n\t\t\tif (\n\t\t\t\ttargetOrOptions !== null &&\n\t\t\t\ttypeof targetOrOptions === \"object\" &&\n\t\t\t\t\"bounds\" in targetOrOptions\n\t\t\t) {\n\t\t\t\treturn Layer.section(\n\t\t\t\t\ttarget as MediaNode,\n\t\t\t\t\ttargetOrOptions as ObjectTrackSignals,\n\t\t\t\t\toptions,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn Layer.section(\n\t\t\t\ttarget as MediaNode,\n\t\t\t\ttargetOrOptions as SectionOptions,\n\t\t\t);\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"blurRegion\", {\n\t\tvalue: (trackTarget: ObjectTrackSignals, options?: Partial<BlurProps>) => {\n\t\t\tconst blur = new Blur({\n\t\t\t\ttrack: trackTarget,\n\t\t\t\tstrength: options?.strength ?? 25,\n\t\t\t\tshape: options?.shape ?? \"ellipse\",\n\t\t\t\t...options,\n\t\t\t});\n\t\t\tif (!target.effects) {\n\t\t\t\ttarget.effects = [];\n\t\t\t}\n\t\t\ttarget.effects.push(blur);\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"withBlurRegion\", {\n\t\tvalue: (trackTarget: ObjectTrackSignals, options?: Partial<BlurProps>) => {\n\t\t\treturn (\n\t\t\t\ttarget as {\n\t\t\t\t\tblurRegion: (\n\t\t\t\t\t\tt: ObjectTrackSignals,\n\t\t\t\t\t\to?: Partial<BlurProps>,\n\t\t\t\t\t) => unknown;\n\t\t\t\t}\n\t\t\t).blurRegion(trackTarget, options);\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\treturn target;\n}\n\nexport const Layer = {\n\tvideo: (\n\t\tsrc: string,\n\t\toptions: Partial<MediaNode> = {},\n\t): AnimatableNode<MediaNode> =>\n\t\twithAnimation({\n\t\t\tid: options.id ?? \"video-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"media\",\n\t\t\tinputHandleId: src,\n\t\t\tdataType: \"Video\",\n\t\t\tfit: options.fit ?? \"cover\",\n\t\t\t...options,\n\t\t}),\n\timage: (\n\t\tsrc: string,\n\t\toptions: Partial<MediaNode> = {},\n\t): AnimatableNode<MediaNode> =>\n\t\twithAnimation({\n\t\t\tid: options.id ?? \"img-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"media\",\n\t\t\tinputHandleId: src,\n\t\t\tdataType: \"Image\",\n\t\t\tfit: options.fit ?? \"cover\",\n\t\t\t...options,\n\t\t}),\n\tsvg: (\n\t\tsrc: string,\n\t\toptions: Partial<MediaNode> = {},\n\t): AnimatableNode<MediaNode> =>\n\t\twithAnimation({\n\t\t\tid: options.id ?? \"svg-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"media\",\n\t\t\tinputHandleId: src,\n\t\t\tdataType: \"SVG\",\n\t\t\tfit: options.fit ?? \"contain\",\n\t\t\t...options,\n\t\t}),\n\tlottie: (\n\t\tsrc: string,\n\t\toptions: Partial<MediaNode> = {},\n\t): AnimatableNode<MediaNode> =>\n\t\twithAnimation({\n\t\t\tid: options.id ?? \"lottie-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"media\",\n\t\t\tinputHandleId: src,\n\t\t\tdataType: \"Lottie\",\n\t\t\tfit: options.fit ?? \"contain\",\n\t\t\t...options,\n\t\t}),\n\taudio: (\n\t\tsrc: string,\n\t\toptions: Partial<MediaNode> = {},\n\t): AnimatableNode<MediaNode> =>\n\t\twithAnimation({\n\t\t\tid: options.id ?? \"audio-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"media\",\n\t\t\tinputHandleId: src,\n\t\t\tdataType: \"Audio\",\n\t\t\tvolume: options.volume ?? 1,\n\t\t\t...options,\n\t\t}),\n\ttext: (\n\t\tcontentOrOptions:\n\t\t\t| string\n\t\t\t| TextSpan[]\n\t\t\t| (string | TextSpan)[]\n\t\t\t| Partial<TextNode>,\n\t\tmaybeOptions: Partial<TextNode> = {},\n\t): AnimatableNode<TextNode> => {\n\t\tconst isArray = Array.isArray(contentOrOptions);\n\t\tconst isObj =\n\t\t\t!isArray &&\n\t\t\ttypeof contentOrOptions === \"object\" &&\n\t\t\tcontentOrOptions !== null;\n\t\tconst options = isObj\n\t\t\t? (contentOrOptions as Partial<TextNode>)\n\t\t\t: maybeOptions;\n\n\t\tlet textContent = \"\";\n\t\tlet spans: TextSpan[] | undefined = options.spans;\n\n\t\tif (isArray) {\n\t\t\tconst normalized = normalizeTextSpans(\n\t\t\t\tcontentOrOptions as (string | TextSpan)[],\n\t\t\t);\n\t\t\ttextContent = normalized.text;\n\t\t\tspans = normalized.spans;\n\t\t} else if (isObj) {\n\t\t\tif (options.spans && !options.text) {\n\t\t\t\tconst normalized = normalizeTextSpans(options.spans);\n\t\t\t\ttextContent = normalized.text;\n\t\t\t} else {\n\t\t\t\ttextContent = (options.text as string) ?? \"\";\n\t\t\t}\n\t\t} else {\n\t\t\ttextContent =\n\t\t\t\ttypeof contentOrOptions === \"string\"\n\t\t\t\t\t? contentOrOptions\n\t\t\t\t\t: String(contentOrOptions ?? \"\");\n\t\t}\n\n\t\treturn withAnimation({\n\t\t\tid: options.id ?? \"text-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"text\",\n\t\t\tfontFamily:\n\t\t\t\toptions.fontFamily ?? FontManager.getAll()[0]?.family ?? \"Inter\",\n\t\t\tfontSize: options.fontSize ?? 48,\n\t\t\tfill: options.fill ?? \"#ffffff\",\n\t\t\t...options,\n\t\t\ttext: options.text ?? textContent,\n\t\t\tspans: options.spans ?? spans,\n\t\t});\n\t},\n\tcaption: (\n\t\tsrc: string,\n\t\toptions: Partial<MediaNode> = {},\n\t): AnimatableNode<MediaNode> =>\n\t\twithAnimation({\n\t\t\tid: options.id ?? \"caption-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"media\",\n\t\t\tinputHandleId: src,\n\t\t\tdataType: options.dataType ?? \"Caption\",\n\t\t\tfontFamily:\n\t\t\t\toptions.fontFamily ?? FontManager.getAll()[0]?.family ?? \"Inter\",\n\t\t\tfontSize: options.fontSize ?? 48,\n\t\t\tfill: options.fill ?? \"#ffffff\",\n\t\t\t...options,\n\t\t}),\n\tshape: (\n\t\tshapeType:\n\t\t\t| \"rect\"\n\t\t\t| \"circle\"\n\t\t\t| \"ellipse\"\n\t\t\t| \"polygon\"\n\t\t\t| \"star\"\n\t\t\t| \"arrow\"\n\t\t\t| \"path\" = \"rect\",\n\t\toptions: Partial<ShapeNode> = {},\n\t): AnimatableNode<ShapeNode> =>\n\t\twithAnimation({\n\t\t\tid: options.id ?? \"shape-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"shape\",\n\t\t\tshapeType: options.shapeType ?? shapeType,\n\t\t\tfillColor: options.fillColor ?? \"#3b82f6\",\n\t\t\t...options,\n\t\t}),\n\tflex: (options: Partial<FlexNode> = {}): AnimatableNode<FlexNode> =>\n\t\twithAnimation({\n\t\t\tid: options.id ?? \"flex-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"flex\",\n\t\t\tdir: options.dir ?? \"column\",\n\t\t\tchildren: options.children ?? [],\n\t\t\t...options,\n\t\t}),\n\tbox: (options: Partial<BoxNode> = {}): AnimatableNode<BoxNode> =>\n\t\twithAnimation({\n\t\t\tid: options.id ?? \"box-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"box\",\n\t\t\tbackground: options.background ?? \"transparent\",\n\t\t\tchildren: options.children ?? [],\n\t\t\t...options,\n\t\t}),\n\tsection: (\n\t\tsource: string | MediaNode | Composition,\n\t\ttargetOrOptions: ObjectTrackSignals | SectionOptions = {},\n\t\toptions: SectionOptions = {},\n\t): SectionNode => {\n\t\tlet realSource: string | MediaNode = source as string | MediaNode;\n\t\tif (\n\t\t\tsource &&\n\t\t\ttypeof source === \"object\" &&\n\t\t\t\"toSpec\" in source &&\n\t\t\t\"children\" in source\n\t\t) {\n\t\t\tconst compMedia = (\n\t\t\t\t((source as Composition).children || []) as LayoutNode[]\n\t\t\t).find(\n\t\t\t\t(c) =>\n\t\t\t\t\tc.kind === \"media\" &&\n\t\t\t\t\t(c.dataType === \"Video\" || c.dataType === \"Image\"),\n\t\t\t) as MediaNode | undefined;\n\t\t\tif (compMedia) {\n\t\t\t\trealSource = compMedia;\n\t\t\t}\n\t\t}\n\n\t\tconst isTracked =\n\t\t\ttargetOrOptions !== null &&\n\t\t\ttypeof targetOrOptions === \"object\" &&\n\t\t\t\"bounds\" in targetOrOptions;\n\t\tconst opts: SectionOptions = isTracked\n\t\t\t? options\n\t\t\t: (targetOrOptions as SectionOptions);\n\t\tconst target = isTracked\n\t\t\t? (targetOrOptions as ObjectTrackSignals)\n\t\t\t: undefined;\n\n\t\tconst padding = opts.padding ?? 0;\n\t\tconst src =\n\t\t\ttypeof realSource === \"string\"\n\t\t\t\t? realSource\n\t\t\t\t: (realSource?.inputHandleId ??\n\t\t\t\t\t(realSource as { src?: string })?.src ??\n\t\t\t\t\t\"\");\n\t\tconst dataType =\n\t\t\ttypeof realSource === \"object\" && realSource?.dataType\n\t\t\t\t? realSource.dataType\n\t\t\t\t: \"Video\";\n\t\tconst compW =\n\t\t\t(opts.compositionWidth as number) ??\n\t\t\t(opts.compWidth as number) ??\n\t\t\t(isTracked ? (opts.width as number) : undefined) ??\n\t\t\t1920;\n\t\tconst compH =\n\t\t\t(opts.compositionHeight as number) ??\n\t\t\t(opts.compHeight as number) ??\n\t\t\t(isTracked ? (opts.height as number) : undefined) ??\n\t\t\t1080;\n\n\t\tconst effList: Effect[] = Array.isArray(opts.effects)\n\t\t\t? ([...opts.effects] as Effect[])\n\t\t\t: opts.effects\n\t\t\t\t? [opts.effects as Effect]\n\t\t\t\t: [];\n\n\t\tconst innerX = target\n\t\t\t? target.bounds.screenX.multiply(-1).add(padding)\n\t\t\t: typeof opts.x === \"number\"\n\t\t\t\t? -opts.x\n\t\t\t\t: opts.x &&\n\t\t\t\t\t\ttypeof (opts.x as { multiply?: unknown }).multiply === \"function\"\n\t\t\t\t\t? (opts.x as { multiply: (n: number) => unknown }).multiply(-1)\n\t\t\t\t\t: 0;\n\n\t\tconst innerY = target\n\t\t\t? target.bounds.screenY.multiply(-1).add(padding)\n\t\t\t: typeof opts.y === \"number\"\n\t\t\t\t? -opts.y\n\t\t\t\t: opts.y &&\n\t\t\t\t\t\ttypeof (opts.y as { multiply?: unknown }).multiply === \"function\"\n\t\t\t\t\t? (opts.y as { multiply: (n: number) => unknown }).multiply(-1)\n\t\t\t\t\t: 0;\n\n\t\tconst innerMedia = (\n\t\t\tdataType === \"Image\"\n\t\t\t\t? Layer.image(src, {\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\twidth: compW,\n\t\t\t\t\t\theight: compH,\n\t\t\t\t\t\tfit: opts.fit ?? \"cover\",\n\t\t\t\t\t\tx: innerX as number,\n\t\t\t\t\t\ty: innerY as number,\n\t\t\t\t\t})\n\t\t\t\t: Layer.video(src, {\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\twidth: compW,\n\t\t\t\t\t\theight: compH,\n\t\t\t\t\t\tfit: opts.fit ?? \"cover\",\n\t\t\t\t\t\tx: innerX as number,\n\t\t\t\t\t\ty: innerY as number,\n\t\t\t\t\t})\n\t\t).withEffects(effList);\n\n\t\tconst boxWidth = target\n\t\t\t? target.bounds.screenWidth.add(padding * 2)\n\t\t\t: opts.width !== undefined\n\t\t\t\t? opts.width\n\t\t\t\t: compW;\n\n\t\tconst boxHeight = target\n\t\t\t? target.bounds.screenHeight.add(padding * 2)\n\t\t\t: opts.height !== undefined\n\t\t\t\t? opts.height\n\t\t\t\t: compH;\n\n\t\tconst boxChildren = [innerMedia, ...(opts.children ?? [])];\n\n\t\tconst boxId =\n\t\t\topts.id ??\n\t\t\t(target\n\t\t\t\t? `section-track-${target.trackId}-${Math.random().toString(36).slice(2, 8)}`\n\t\t\t\t: `section-${Math.random().toString(36).slice(2, 8)}`);\n\n\t\tlet box = Layer.box({\n\t\t\tid: boxId,\n\t\t\tposition: (opts.position as \"absolute\" | \"relative\") ?? \"absolute\",\n\t\t\twidth: boxWidth as number,\n\t\t\theight: boxHeight as number,\n\t\t\tx: target ? undefined : (opts.x as number),\n\t\t\ty: target ? undefined : (opts.y as number),\n\t\t\tborderRadius: opts.borderRadius ?? 0,\n\t\t\tborderColor: opts.borderColor,\n\t\t\tborderWidth: opts.borderWidth,\n\t\t\topacity: (opts.opacity as number) ?? 1,\n\t\t\toverflow: \"hidden\",\n\t\t\tchildren: boxChildren,\n\t\t});\n\n\t\tif (target) {\n\t\t\tbox = box.pinToObject(target, {\n\t\t\t\tanchor: \"topLeft\",\n\t\t\t\toffsetX: -padding,\n\t\t\t\toffsetY: -padding,\n\t\t\t\thideWhenLost: opts.hideWhenLost ?? true,\n\t\t\t\tsmoothFrames: opts.smoothFrames,\n\t\t\t});\n\t\t}\n\n\t\tconst sectionNode = box as SectionNode;\n\t\tObject.defineProperty(sectionNode, \"innerMedia\", {\n\t\t\tvalue: innerMedia,\n\t\t\tenumerable: true,\n\t\t\twritable: false,\n\t\t});\n\t\tObject.defineProperty(sectionNode, \"effects\", {\n\t\t\tget: () => effList,\n\t\t\tenumerable: true,\n\t\t});\n\t\tObject.defineProperty(sectionNode, \"addEffect\", {\n\t\t\tvalue: (effect: Effect) => {\n\t\t\t\teffList.push(effect);\n\t\t\t\tinnerMedia.effects = effList;\n\t\t\t\treturn sectionNode;\n\t\t\t},\n\t\t\tenumerable: true,\n\t\t\twritable: false,\n\t\t});\n\t\tObject.defineProperty(sectionNode, \"withEffect\", {\n\t\t\tvalue: (effect: Effect) => sectionNode.addEffect(effect),\n\t\t\tenumerable: true,\n\t\t\twritable: false,\n\t\t});\n\t\tObject.defineProperty(sectionNode, \"withEffects\", {\n\t\t\tvalue: (effects: Effect[]) => {\n\t\t\t\tfor (const eff of effects) {\n\t\t\t\t\tsectionNode.addEffect(eff);\n\t\t\t\t}\n\t\t\t\treturn sectionNode;\n\t\t\t},\n\t\t\tenumerable: true,\n\t\t\twritable: false,\n\t\t});\n\n\t\treturn sectionNode;\n\t},\n\ttrackedRegion: (\n\t\tsource: string | MediaNode,\n\t\ttarget: ObjectTrackSignals,\n\t\toptions: TrackedRegionOptions = {},\n\t): SectionNode => {\n\t\treturn Layer.section(source, target, options);\n\t},\n\tblurTrackedRegion: (\n\t\tsource: string | MediaNode,\n\t\ttarget: ObjectTrackSignals,\n\t\toptions: Partial<BlurProps> & {\n\t\t\tborderRadius?: number;\n\t\t\tpadding?: number;\n\t\t\tborderColor?: string;\n\t\t\tborderWidth?: number;\n\t\t} = {},\n\t): SectionNode => {\n\t\t// Section styling is not a Blur prop; keep it out of the effect config.\n\t\tconst { padding, borderRadius, borderColor, borderWidth, ...blurOptions } =\n\t\t\toptions;\n\t\treturn Layer.section(source, target, {\n\t\t\tpadding: padding ?? 8,\n\t\t\tborderRadius: borderRadius ?? 12,\n\t\t\tborderColor,\n\t\t\tborderWidth,\n\t\t\teffects: [\n\t\t\t\tnew Blur({\n\t\t\t\t\tstrength: blurOptions.strength ?? 25,\n\t\t\t\t\tblurType: blurOptions.blurType ?? \"Gaussian\",\n\t\t\t\t\t...blurOptions,\n\t\t\t\t}),\n\t\t\t],\n\t\t});\n\t},\n\tchart: (\n\t\toptions: ChartGPUOptions,\n\t\tprops: Partial<ChartNode> = {},\n\t): AnimatableNode<ChartNode> =>\n\t\twithAnimation({\n\t\t\tid: props.id ?? \"chart-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"chart\",\n\t\t\tchartOptions: options,\n\t\t\t...props,\n\t\t}),\n\tcamera: (options: Partial<CameraNode> = {}): AnimatableNode<CameraNode> =>\n\t\twithAnimation<CameraNode>({\n\t\t\tid: options.id ?? \"camera-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"camera\",\n\t\t\tmode: options.mode ?? \"lookAt\",\n\t\t\tpitch: options.pitch ?? 0,\n\t\t\tyaw: options.yaw ?? 0,\n\t\t\troll: options.roll ?? 0,\n\t\t\t...options,\n\t\t}),\n\tlight: (options: Partial<LightNode> = {}): AnimatableNode<LightNode> =>\n\t\twithAnimation<LightNode>({\n\t\t\tid: options.id ?? \"light-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"light\",\n\t\t\tlightType: options.lightType ?? \"point\",\n\t\t\tcolor: options.color ?? \"#ffffff\",\n\t\t\tintensity: options.intensity ?? 1.0,\n\t\t\t...options,\n\t\t}),\n\tambientLight: (\n\t\tcolor: string = \"#ffffff\",\n\t\tintensity: number = 0.5,\n\t\toptions: Partial<LightNode> = {},\n\t): AnimatableNode<LightNode> => Light.ambient(color, intensity, options),\n\tdirectionalLight: (\n\t\toptions: Partial<LightNode> = {},\n\t): AnimatableNode<LightNode> => Light.directional(options),\n\tpointLight: (options: Partial<LightNode> = {}): AnimatableNode<LightNode> =>\n\t\tLight.point(options),\n\tspotLight: (options: Partial<LightNode> = {}): AnimatableNode<LightNode> =>\n\t\tLight.spot(options),\n\tcube: (options: Cube3DOptions): AnimatableNode<BoxNode> =>\n\t\tLayer3D.cube(options),\n\tcarousel3d: (options: Carousel3DOptions): AnimatableNode<BoxNode> =>\n\t\tLayer3D.carousel(options),\n\tplane3d: (options: Plane3DOptions): AnimatableNode<BoxNode> =>\n\t\tLayer3D.plane(options),\n\tprism3d: (options: Prism3DOptions): AnimatableNode<BoxNode> =>\n\t\tLayer3D.prism(options),\n\tmodel: (options: Partial<Model3DNode> = {}): AnimatableNode<Model3DNode> =>\n\t\twithAnimation({\n\t\t\tid: options.id ?? \"model3d-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"model3d\",\n\t\t\tis3D: options.is3D ?? true,\n\t\t\tmodelFormat: options.modelFormat ?? \"auto\",\n\t\t\tloop: options.loop ?? true,\n\t\t\tscale: options.scale ?? 1.0,\n\t\t\tscaleX: options.scaleX ?? 1.0,\n\t\t\tscaleY: options.scaleY ?? 1.0,\n\t\t\tscaleZ: options.scaleZ ?? 1.0,\n\t\t\topacity: options.opacity ?? 1.0,\n\t\t\t// material and twoSided stay unset unless given: the model's own\n\t\t\t// materials (toon, single-sided, …) decide, falling back to lit.\n\t\t\t...options,\n\t\t}),\n\tobj: (\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> =>\n\t\tLayer.model({\n\t\t\tsrc,\n\t\t\tmodelFormat: \"obj\",\n\t\t\t...options,\n\t\t}),\n\tfbx: (\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> =>\n\t\tLayer.model({\n\t\t\tsrc,\n\t\t\tmodelFormat: \"fbx\",\n\t\t\t...options,\n\t\t}),\n\tgltf: (\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> =>\n\t\tLayer.model({\n\t\t\tsrc,\n\t\t\tmodelFormat: \"gltf\",\n\t\t\t...options,\n\t\t}),\n\tglb: (\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> =>\n\t\tLayer.model({\n\t\t\tsrc,\n\t\t\tmodelFormat: \"glb\",\n\t\t\t...options,\n\t\t}),\n\tstl: (\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> =>\n\t\tLayer.model({\n\t\t\tsrc,\n\t\t\tmodelFormat: \"stl\",\n\t\t\t...options,\n\t\t}),\n\tply: (\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> =>\n\t\tLayer.model({\n\t\t\tsrc,\n\t\t\tmodelFormat: \"ply\",\n\t\t\t...options,\n\t\t}),\n\tvox: (\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> =>\n\t\tLayer.model({\n\t\t\tsrc,\n\t\t\tmodelFormat: \"vox\",\n\t\t\t...options,\n\t\t}),\n\tthreeDS: (\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> =>\n\t\tLayer.model({\n\t\t\tsrc,\n\t\t\tmodelFormat: \"3ds\",\n\t\t\t...options,\n\t\t}),\n\toff: (\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> =>\n\t\tLayer.model({\n\t\t\tsrc,\n\t\t\tmodelFormat: \"off\",\n\t\t\t...options,\n\t\t}),\n};\n\nexport const Light = {\n\tambient: (\n\t\tcolor: string = \"#ffffff\",\n\t\tintensity: number = 0.5,\n\t\toptions: Partial<LightNode> = {},\n\t): AnimatableNode<LightNode> =>\n\t\twithAnimation({\n\t\t\tid:\n\t\t\t\toptions.id ?? \"light-ambient-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"light\",\n\t\t\tlightType: \"ambient\",\n\t\t\tcolor,\n\t\t\tintensity,\n\t\t\t...options,\n\t\t}),\n\tdirectional: (options: Partial<LightNode> = {}): AnimatableNode<LightNode> =>\n\t\twithAnimation({\n\t\t\tid:\n\t\t\t\toptions.id ??\n\t\t\t\t\"light-directional-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"light\",\n\t\t\tlightType: \"directional\",\n\t\t\tcolor: options.color ?? \"#ffffff\",\n\t\t\tintensity: options.intensity ?? 1.0,\n\t\t\tx: options.x ?? 0,\n\t\t\ty: options.y ?? -1000,\n\t\t\tz: options.z ?? -1000,\n\t\t\ttargetX: options.targetX ?? 0,\n\t\t\ttargetY: options.targetY ?? 0,\n\t\t\ttargetZ: options.targetZ ?? 0,\n\t\t\t...options,\n\t\t}),\n\tpoint: (options: Partial<LightNode> = {}): AnimatableNode<LightNode> =>\n\t\twithAnimation({\n\t\t\tid: options.id ?? \"light-point-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"light\",\n\t\t\tlightType: \"point\",\n\t\t\tcolor: options.color ?? \"#ffffff\",\n\t\t\tintensity: options.intensity ?? 1.0,\n\t\t\tx: options.x ?? 0,\n\t\t\ty: options.y ?? 0,\n\t\t\tz: options.z ?? -500,\n\t\t\tradius: options.radius ?? 1000,\n\t\t\tdecay: options.decay ?? 1.0,\n\t\t\t...options,\n\t\t}),\n\tspot: (options: Partial<LightNode> = {}): AnimatableNode<LightNode> =>\n\t\twithAnimation({\n\t\t\tid: options.id ?? \"light-spot-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"light\",\n\t\t\tlightType: \"spot\",\n\t\t\tcolor: options.color ?? \"#ffffff\",\n\t\t\tintensity: options.intensity ?? 1.0,\n\t\t\tx: options.x ?? 0,\n\t\t\ty: options.y ?? -500,\n\t\t\tz: options.z ?? -1000,\n\t\t\ttargetX: options.targetX ?? 0,\n\t\t\ttargetY: options.targetY ?? 0,\n\t\t\ttargetZ: options.targetZ ?? 0,\n\t\t\tangle: options.angle ?? 45,\n\t\t\tpenumbra: options.penumbra ?? 0.2,\n\t\t\tradius: options.radius ?? 2000,\n\t\t\tdecay: options.decay ?? 1.0,\n\t\t\t...options,\n\t\t}),\n};\n\nexport {\n\tcomputeGridLayout,\n\ttype FrameGridOptions,\n\ttype FrameGridRenderable,\n\ttype FrameSamplePoint,\n\tHeadlessMediaRenderer,\n\tHeadlessWebGPURenderer,\n\trenderFrameGrid,\n\trenderSemaphore,\n\tresolveSamplePoints,\n} from \"./renderer/index.js\";\n\nexport function section(\n\tsource: string | MediaNode | Composition,\n\ttargetOrOptions: ObjectTrackSignals | SectionOptions = {},\n\toptions: SectionOptions = {},\n): SectionNode {\n\treturn Layer.section(source, targetOrOptions, options);\n}\n\nexport function blurRegion(\n\tsourceOrLayer: string | AnimatableNode<MediaNode>,\n\ttarget: ObjectTrackSignals,\n\toptions: Partial<BlurProps> & {\n\t\tborderRadius?: number;\n\t\tpadding?: number;\n\t\tborderColor?: string;\n\t\tborderWidth?: number;\n\t} = {},\n): AnimatableNode<MediaNode> | AnimatableNode<BoxNode> {\n\tif (typeof sourceOrLayer === \"object\" && \"blurRegion\" in sourceOrLayer) {\n\t\treturn (sourceOrLayer as AnimatableNode<MediaNode>).blurRegion(\n\t\t\ttarget,\n\t\t\toptions,\n\t\t);\n\t}\n\treturn Layer.blurTrackedRegion(sourceOrLayer as string, target, options);\n}\n\nexport function editTrackedRegion(\n\tsource: string | MediaNode,\n\ttarget: ObjectTrackSignals,\n\toptions: TrackedRegionOptions = {},\n): SectionNode {\n\treturn Layer.section(source, target, options);\n}\n\nexport const Effect = Object.assign(CoreEffect, {\n\tblur: (config?: BlurProps) => new Blur(config),\n\tvignette: (config?: VignetteProps) => new Vignette(config),\n\tcolorBalance: (config?: ColorBalanceProps) => new ColorBalance(config),\n\tcolorKey: (config?: ColorKeyProps) => new ColorKey(config),\n\tlevels: (config?: LevelsProps) => new Levels(config),\n\tfilmGrain: (config?: FilmGrainProps) => new FilmGrain(config),\n\tcurves: (config?: CurvesProps) => new Curves(config),\n\tselectiveColor: (config?: SelectiveColorProps) => new SelectiveColor(config),\n\tgradientMap: (config?: GradientMapProps) => new GradientMap(config),\n\tshadowsHighlights: (config?: ShadowsHighlightsProps) =>\n\t\tnew ShadowsHighlights(config),\n\tapplyLut: (config?: ApplyLUTProps) => new ApplyLUT(config),\n\tunsharpMask: (config?: UnsharpMaskProps) => new UnsharpMask(config),\n\thighPass: (config?: HighPassProps) => new HighPass(config),\n\thalftoneScreen: (config?: HalftoneScreenProps) => new HalftoneScreen(config),\n\ttileOffset: (config?: TileOffsetProps) => new TileOffset(config),\n\tmotionBlur: (config?: MotionBlurProps) => new MotionBlur(config),\n\tssao: (config?: SSAOProps) => new SSAO(config),\n\tpbrGlass: (config?: PBRGlassProps) => new PBRGlass(config),\n\tdepthOfField: (config?: DepthOfFieldProps) => new DepthOfField(config),\n\tcrop: (config?: CropProps) => new Crop(config),\n\tmediaPipe: (config?: MediaPipeProps) => new MediaPipe(config),\n\tyolo: (config?: YoloProps) => new Yolo(config),\n\trelight3d: (config?: Relight3DProps) => new Relight3D(config),\n\tmodulate: (config?: ModulateProps) => new Modulate(config),\n\tdeflicker: (config?: DeflickerProps) => new TemporalDeflicker(config),\n\tcustom: (op: string, config: Record<string, unknown> = {}) =>\n\t\tnew CustomEffect(op, config),\n});\n\nexport type Effect<TConfig extends object = Record<string, unknown>> =\n\tCoreEffect<TConfig>;\n"],"mappings":"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AAgB,CAAC;AAC3E,oBAAkB,KAAK,MAAM,UAAU,iBAAiB,GAAG,MAAM;;AAElE,QAAO;EACN,cAAc;EACd,sBAAsB;EACtB;EACA;;;AAMF,MAAM,iBAAiB,EAAE,MAAM;CAC9B,EAAE,QAAQ,CAAC,IAAI,EAAE;CACjB,EAAE,KAAK;EACN;EACA;EACA;EACA,CAAC;CACF,EAAE,QAAQ;CACV,CAAC;AACF,MAAM,kBAAkB,EAAE,KAAK;CAC9B;CACA;CACA;CACA;CACA;CACA;CACA;CACA,CAAC;AACF,MAAM,uBAAuB,EAAE,KAAK;CACnC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,CAAC;AACF,MAAM,qBAAqB,EAAE,KAAK;CACjC;CACA;CACA;CACA;CACA;CACA;CACA;CACA,CAAC;AA0CF,MAAM,wBAAwB,EAAE,KAAK;CACpC;CACA;CACA;CACA,CAAC;AACF,MAAM,gBAAgB,EAAE,OAAO;CAC9B,MAAM,EAAE,KAAK;EACZ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,CAAC;CACF,KAAK,EAAE,KAAK;EACX;EACA;EACA;EACA,CAAC;CACF,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,UAAU;CACtC,CAAC,CAAC,QAAQ,CAAC,aAAa,MAAM,QAAQ;AACtC,KAAI,KAAK,SAAS,Y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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["LayerAnimation","path","CameraAnimation","AdvancedTextAnimatorBuilder","color","TextPathBuilder","TextAnimatorBuilder","z$1","Scene","Sequence","size","z","color","resolvedSource","analyzeVisionFrames","signal","color","CoreEffect"],"sources":["../src/rich-text.ts","../../compositions/dist/program/index.mjs","../src/shapes3d.ts","../src/index.ts"],"sourcesContent":["import type { Signal, TextSpan, TextSpanMark } from \"@gitframes/core\";\n\nexport type { TextSpan, TextSpanMark };\n\nexport type TextSpanItem =\n\t| string\n\t| number\n\t| boolean\n\t| Signal<unknown>\n\t| TextSpan\n\t| (string | TextSpan)[]\n\t| null\n\t| undefined;\n\n/**\n * Tagged template literal for authoring rich, multi-style text runs.\n *\n * Interpolates strings, numbers, reactive signals, and typed span modifiers\n * directly into a structured TextSpan[] array with zero runtime parsing.\n *\n * @example\n * rich`Scale ${bold(\"10x\", { fill: \"#6366f1\" })} faster with ${mark(\"120 FPS\", { bg: \"#10b98133\" })}`\n */\nexport function rich(\n\tstrings: TemplateStringsArray,\n\t...values: TextSpanItem[]\n): TextSpan[] {\n\tconst spans: TextSpan[] = [];\n\n\tfor (let i = 0; i < strings.length; i++) {\n\t\tconst str = strings[i];\n\t\tif (str) {\n\t\t\tspans.push({ text: str });\n\t\t}\n\n\t\tif (i < values.length) {\n\t\t\tconst val = values[i];\n\t\t\tif (val === null || val === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (Array.isArray(val)) {\n\t\t\t\tfor (const item of val) {\n\t\t\t\t\tif (typeof item === \"string\") {\n\t\t\t\t\t\tif (item) spans.push({ text: item });\n\t\t\t\t\t} else if (item && typeof item === \"object\" && \"text\" in item) {\n\t\t\t\t\t\tspans.push(item as TextSpan);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (typeof val === \"object\" && \"text\" in val) {\n\t\t\t\tspans.push(val as TextSpan);\n\t\t\t} else if (\n\t\t\t\ttypeof val === \"object\" &&\n\t\t\t\t\"get\" in val &&\n\t\t\t\ttypeof (val as { get: unknown }).get === \"function\"\n\t\t\t) {\n\t\t\t\tspans.push({ text: val as Signal<string> });\n\t\t\t} else {\n\t\t\t\tspans.push({ text: String(val) });\n\t\t\t}\n\t\t}\n\t}\n\n\treturn spans;\n}\n\nexport function span(\n\ttext: string | Signal<string>,\n\toptions: Omit<TextSpan, \"text\"> = {},\n): TextSpan {\n\treturn { text, ...options };\n}\n\nexport function bold(\n\ttext: string | Signal<string>,\n\toptions: Omit<TextSpan, \"text\"> = {},\n): TextSpan {\n\treturn { text, fontWeight: options.fontWeight ?? 700, ...options };\n}\n\nexport function italic(\n\ttext: string | Signal<string>,\n\toptions: Omit<TextSpan, \"text\"> = {},\n): TextSpan {\n\treturn { text, fontStyle: \"italic\", ...options };\n}\n\nexport function accent(\n\ttext: string | Signal<string>,\n\toptions: Omit<TextSpan, \"text\"> = {},\n): TextSpan {\n\treturn { text, fill: options.fill ?? \"#6366f1\", ...options };\n}\n\nexport function color(\n\ttext: string | Signal<string>,\n\tfill: string | Signal<string>,\n\toptions: Omit<TextSpan, \"text\" | \"fill\"> = {},\n): TextSpan {\n\treturn { text, fill, ...options };\n}\n\nexport function size(\n\ttext: string | Signal<string>,\n\tfontSize: number | Signal<number>,\n\toptions: Omit<TextSpan, \"text\" | \"fontSize\"> = {},\n): TextSpan {\n\treturn { text, fontSize, ...options };\n}\n\nexport interface MarkOptions extends Omit<TextSpan, \"text\" | \"mark\" | \"fill\"> {\n\tbg?: string | Signal<string>;\n\tfill?: string | Signal<string>;\n\tradius?: number;\n\tpaddingX?: number;\n\tpaddingY?: number;\n}\n\nexport function mark(\n\ttext: string | Signal<string>,\n\toptions: MarkOptions = {},\n): TextSpan {\n\tconst { bg, fill, radius, paddingX, paddingY, ...rest } = options;\n\treturn {\n\t\ttext,\n\t\tfill,\n\t\tmark: {\n\t\t\tbackground: bg ?? \"#6366f133\",\n\t\t\tborderRadius: radius ?? 4,\n\t\t\tpaddingX: paddingX ?? 6,\n\t\t\tpaddingY: paddingY ?? 2,\n\t\t},\n\t\t...rest,\n\t};\n}\n\nexport function sup(\n\ttext: string | Signal<string>,\n\toptions: Omit<TextSpan, \"text\"> = {},\n): TextSpan {\n\treturn {\n\t\ttext,\n\t\tbaselineShift: options.baselineShift ?? -8,\n\t\t...options,\n\t};\n}\n\nexport function sub(\n\ttext: string | Signal<string>,\n\toptions: Omit<TextSpan, \"text\"> = {},\n): TextSpan {\n\treturn {\n\t\ttext,\n\t\tbaselineShift: options.baselineShift ?? 6,\n\t\t...options,\n\t};\n}\n\nexport function code(\n\ttext: string | Signal<string>,\n\toptions: Omit<TextSpan, \"text\"> = {},\n): TextSpan {\n\treturn {\n\t\ttext,\n\t\tfontFamily: options.fontFamily ?? \"JetBrains Mono\",\n\t\tmark: options.mark ?? {\n\t\t\tbackground: \"#ffffff18\",\n\t\t\tborderRadius: 4,\n\t\t\tpaddingX: 6,\n\t\t\tpaddingY: 2,\n\t\t},\n\t\t...options,\n\t};\n}\n\n/**\n * Normalizes string, TextSpan[], or array of mixed strings/spans into plain text and spans.\n */\nexport function normalizeTextSpans(\n\tinput: string | TextSpan[] | (string | TextSpan)[],\n): { text: string; spans?: TextSpan[] } {\n\tif (typeof input === \"string\") {\n\t\treturn { text: input };\n\t}\n\n\tif (!Array.isArray(input)) {\n\t\treturn { text: String(input) };\n\t}\n\n\tconst spans: TextSpan[] = [];\n\tlet plainText = \"\";\n\n\tfor (const item of input) {\n\t\tif (typeof item === \"string\") {\n\t\t\tif (item) {\n\t\t\t\tspans.push({ text: item });\n\t\t\t\tplainText += item;\n\t\t\t}\n\t\t} else if (item && typeof item === \"object\" && \"text\" in item) {\n\t\t\tconst s = item as TextSpan;\n\t\t\tspans.push(s);\n\t\t\tconst piece =\n\t\t\t\ttypeof s.text === \"string\"\n\t\t\t\t\t? s.text\n\t\t\t\t\t: s.text &&\n\t\t\t\t\t\t\ttypeof s.text === \"object\" &&\n\t\t\t\t\t\t\t\"get\" in s.text &&\n\t\t\t\t\t\t\ttypeof (s.text as { get: () => unknown }).get === \"function\"\n\t\t\t\t\t\t? String((s.text as { get: () => unknown }).get())\n\t\t\t\t\t\t: String(s.text ?? \"\");\n\t\t\tplainText += piece;\n\t\t}\n\t}\n\n\treturn {\n\t\ttext: plainText,\n\t\tspans: spans.length > 0 ? spans : undefined,\n\t};\n}\n\n/**\n * Upfront parser for external CMS or subtitle strings containing basic tags\n * (<b>, <i>, <span>, <color>, <mark>, <accent>, <code>, <sup>, <sub>).\n *\n * Compiles string markup into clean TextSpan[] before entering the composition pipeline.\n */\nexport function parseMarkup(markup: string): TextSpan[] {\n\tif (!markup || !markup.includes(\"<\")) {\n\t\treturn [{ text: markup }];\n\t}\n\n\tconst spans: TextSpan[] = [];\n\tconst tagRegex = /<(\\/?[a-zA-Z0-9_-]+)([^>]*)>/g;\n\tlet lastIndex = 0;\n\n\tinterface StyleState {\n\t\ttag: string;\n\t\tstyle: Partial<TextSpan>;\n\t}\n\tconst stack: StyleState[] = [];\n\n\tconst getCurrentStyle = (): Partial<TextSpan> => {\n\t\tconst merged: Partial<TextSpan> = {};\n\t\tfor (const state of stack) {\n\t\t\tObject.assign(merged, state.style);\n\t\t}\n\t\treturn merged;\n\t};\n\n\tfor (;;) {\n\t\tconst match = tagRegex.exec(markup);\n\t\tif (!match) {\n\t\t\tbreak;\n\t\t}\n\t\tconst textBefore = markup.slice(lastIndex, match.index);\n\t\tif (textBefore) {\n\t\t\tspans.push({ text: textBefore, ...getCurrentStyle() });\n\t\t}\n\t\tlastIndex = match.index + match[0].length;\n\n\t\tconst tagName = match[1].toLowerCase();\n\t\tconst rawAttrs = match[2];\n\n\t\tif (tagName.startsWith(\"/\")) {\n\t\t\tconst closingTag = tagName.slice(1);\n\t\t\tfor (let i = stack.length - 1; i >= 0; i--) {\n\t\t\t\tif (stack[i].tag === closingTag) {\n\t\t\t\t\tstack.splice(i, 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst attrs: Record<string, string> = {};\n\t\t\tconst attrRegex = /([a-zA-Z0-9_-]+)=[\"']([^\"']*)[\"']/g;\n\t\t\tfor (;;) {\n\t\t\t\tconst attrMatch = attrRegex.exec(rawAttrs);\n\t\t\t\tif (!attrMatch) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tattrs[attrMatch[1].toLowerCase()] = attrMatch[2];\n\t\t\t}\n\n\t\t\tconst style: Partial<TextSpan> = {};\n\n\t\t\tif (tagName === \"b\" || tagName === \"strong\") {\n\t\t\t\tstyle.fontWeight = 700;\n\t\t\t\tif (attrs.color || attrs.fill) style.fill = attrs.color ?? attrs.fill;\n\t\t\t} else if (tagName === \"i\" || tagName === \"em\") {\n\t\t\t\tstyle.fontStyle = \"italic\";\n\t\t\t\tif (attrs.color || attrs.fill) style.fill = attrs.color ?? attrs.fill;\n\t\t\t} else if (tagName === \"accent\") {\n\t\t\t\tstyle.fill = \"#6366f1\";\n\t\t\t} else if (tagName === \"color\") {\n\t\t\t\tstyle.fill = attrs.value ?? attrs.hex ?? attrs.fill;\n\t\t\t} else if (tagName === \"size\") {\n\t\t\t\tconst num = parseFloat(attrs.value ?? attrs.px ?? attrs.pt ?? \"0\");\n\t\t\t\tif (num > 0) style.fontSize = num;\n\t\t\t} else if (tagName === \"mark\") {\n\t\t\t\tstyle.mark = {\n\t\t\t\t\tbackground: attrs.bg ?? attrs.background ?? \"#6366f133\",\n\t\t\t\t\tborderRadius: attrs.radius ? parseFloat(attrs.radius) : 4,\n\t\t\t\t\tpaddingX: attrs.paddingx ? parseFloat(attrs.paddingx) : 6,\n\t\t\t\t\tpaddingY: attrs.paddingy ? parseFloat(attrs.paddingy) : 2,\n\t\t\t\t};\n\t\t\t\tif (attrs.color || attrs.fill) style.fill = attrs.color ?? attrs.fill;\n\t\t\t} else if (tagName === \"sup\") {\n\t\t\t\tstyle.baselineShift = -8;\n\t\t\t} else if (tagName === \"sub\") {\n\t\t\t\tstyle.baselineShift = 6;\n\t\t\t} else if (tagName === \"code\") {\n\t\t\t\tstyle.fontFamily = \"JetBrains Mono\";\n\t\t\t\tstyle.mark = {\n\t\t\t\t\tbackground: attrs.bg ?? \"#ffffff18\",\n\t\t\t\t\tborderRadius: 4,\n\t\t\t\t\tpaddingX: 6,\n\t\t\t\t\tpaddingY: 2,\n\t\t\t\t};\n\t\t\t} else if (tagName === \"span\") {\n\t\t\t\tif (attrs.color || attrs.fill) style.fill = attrs.color ?? attrs.fill;\n\t\t\t\tif (attrs.fontfamily) style.fontFamily = attrs.fontfamily;\n\t\t\t\tif (attrs.fontsize) style.fontSize = parseFloat(attrs.fontsize);\n\t\t\t\tif (attrs.fontweight) {\n\t\t\t\t\tconst nw = parseInt(attrs.fontweight, 10);\n\t\t\t\t\tstyle.fontWeight = Number.isNaN(nw) ? attrs.fontweight : nw;\n\t\t\t\t}\n\t\t\t\tif (attrs.fontstyle === \"italic\" || attrs.fontstyle === \"normal\") {\n\t\t\t\t\tstyle.fontStyle = attrs.fontstyle;\n\t\t\t\t}\n\t\t\t\tif (attrs.letterspacing)\n\t\t\t\t\tstyle.letterSpacing = parseFloat(attrs.letterspacing);\n\t\t\t\tif (attrs.baselineshift)\n\t\t\t\t\tstyle.baselineShift = parseFloat(attrs.baselineshift);\n\t\t\t\tif (attrs.opacity) style.opacity = parseFloat(attrs.opacity);\n\t\t\t}\n\n\t\t\tstack.push({ tag: tagName, style });\n\t\t}\n\t}\n\n\tconst remainingText = markup.slice(lastIndex);\n\tif (remainingText) {\n\t\tspans.push({ text: remainingText, ...getCurrentStyle() });\n\t}\n\n\treturn spans;\n}\n","import { createVirtualMedia, getActiveMediaMetadata } from \"@gitframes/core\";\nimport { signalRegistry } from \"@gitframes/webgpu-renderers\";\nimport { ColorSchema } from \"@gitframes/node-sdk\";\nimport { loadYoga } from \"yoga-layout/load\";\nimport { z } from \"zod\";\n\n//#region src/utils/layout/resolve-layout.ts\nlet yogaInstance = null;\n/**\n* Ensure the Yoga WASM module is loaded. Safe to call multiple times —\n* subsequent calls return the cached instance immediately.\n*/\nasync function initLayout() {\n\tif (yogaInstance) return yogaInstance;\n\tyogaInstance = await loadYoga();\n\treturn yogaInstance;\n}\nfunction mapJustify(yoga, value) {\n\tswitch (value) {\n\t\tcase \"center\": return yoga.JUSTIFY_CENTER;\n\t\tcase \"end\": return yoga.JUSTIFY_FLEX_END;\n\t\tcase \"space-between\": return yoga.JUSTIFY_SPACE_BETWEEN;\n\t\tcase \"space-around\": return yoga.JUSTIFY_SPACE_AROUND;\n\t\tdefault: return yoga.JUSTIFY_FLEX_START;\n\t}\n}\nfunction mapAlign(yoga, value) {\n\tswitch (value) {\n\t\tcase \"center\": return yoga.ALIGN_CENTER;\n\t\tcase \"end\": return yoga.ALIGN_FLEX_END;\n\t\tcase \"stretch\": return yoga.ALIGN_STRETCH;\n\t\tdefault: return yoga.ALIGN_FLEX_START;\n\t}\n}\nfunction mapAlignSelf(yoga, value) {\n\tswitch (value) {\n\t\tcase \"start\": return yoga.ALIGN_FLEX_START;\n\t\tcase \"center\": return yoga.ALIGN_CENTER;\n\t\tcase \"end\": return yoga.ALIGN_FLEX_END;\n\t\tcase \"stretch\": return yoga.ALIGN_STRETCH;\n\t\tcase \"baseline\": return yoga.ALIGN_BASELINE;\n\t\tdefault: return yoga.ALIGN_AUTO;\n\t}\n}\nfunction toYogaValue(val) {\n\tif (val === void 0 || val === null) return void 0;\n\tif (typeof val === \"number\" || typeof val === \"string\") return val;\n\tif (typeof val === \"object\") {\n\t\tif (\"unit\" in val && typeof val.unit === \"number\") return val;\n\t\tconst num = Number(val);\n\t\tif (!Number.isNaN(num)) return num;\n\t}\n}\n/** Container main dir; leaves return null. */\nfunction dirOf(node) {\n\tswitch (node.kind) {\n\t\tcase \"flex\": return node.dir ?? \"row\";\n\t\tcase \"block\": return \"column\";\n\t\tcase \"box\": return node.children && node.children.length > 0 ? \"column\" : null;\n\t\tdefault: return null;\n\t}\n}\n/** Container default width spec (block fills like HTML). */\nfunction defaultWidthSpec(node) {\n\tif (node.kind === \"block\") return \"fill\";\n}\nfunction containerStyle(node) {\n\tlet gap = 0;\n\tif (node.kind === \"flex\" || node.kind === \"block\") {\n\t\tconst g = toYogaValue(node.gap);\n\t\tgap = typeof g === \"number\" ? g : 0;\n\t}\n\tlet padding = 0;\n\tif (node.kind === \"flex\" || node.kind === \"block\" || node.kind === \"box\" || node.kind === \"text\") {\n\t\tconst p = toYogaValue(node.padding);\n\t\tpadding = typeof p === \"number\" ? p : 0;\n\t}\n\tlet justify = \"start\";\n\tif (node.kind === \"flex\") justify = node.justify ?? \"start\";\n\tlet align = \"start\";\n\tif (node.kind === \"flex\" || node.kind === \"block\") align = node.align ?? \"start\";\n\tlet wrap = false;\n\tif (node.kind === \"flex\") wrap = typeof node.wrap === \"boolean\" ? node.wrap : false;\n\treturn {\n\t\tgap,\n\t\tpadding,\n\t\tjustify,\n\t\talign,\n\t\twrap\n\t};\n}\nfunction isAbsolutePositioned(node) {\n\treturn node.position === \"absolute\" || node.position === void 0 && (node.x !== void 0 || node.y !== void 0);\n}\n/** Flow children (non-absolute). */\nfunction flowChildren(node) {\n\tif (\"children\" in node && node.children) return node.children.filter((c) => !isAbsolutePositioned(c));\n\treturn [];\n}\nfunction absoluteChildren(node) {\n\tif (\"children\" in node && node.children) return node.children.filter((c) => isAbsolutePositioned(c));\n\treturn [];\n}\nfunction buildYogaNode(yoga, node, parentExtent, measure, parentDir) {\n\tconst yn = yoga.Node.create();\n\tconst dir = dirOf(node);\n\tconst isContainer = dir !== null;\n\tconst children = [];\n\tif (isAbsolutePositioned(node)) {\n\t\tyn.setPositionType(yoga.POSITION_TYPE_ABSOLUTE);\n\t\tconst posX = toYogaValue(node.x);\n\t\tconst posY = toYogaValue(node.y);\n\t\tif (posX !== void 0) yn.setPosition(yoga.EDGE_LEFT, posX);\n\t\tif (posY !== void 0) yn.setPosition(yoga.EDGE_TOP, posY);\n\t} else yn.setPositionType(yoga.POSITION_TYPE_RELATIVE);\n\tconst grow = toYogaValue(node.grow);\n\tif (grow !== void 0) yn.setFlexGrow(typeof grow === \"number\" ? grow : parseFloat(grow));\n\tconst flexShrink = toYogaValue(node.flexShrink);\n\tif (flexShrink !== void 0) yn.setFlexShrink(typeof flexShrink === \"number\" ? flexShrink : parseFloat(flexShrink));\n\telse yn.setFlexShrink(parentDir !== null ? 1 : 0);\n\tif (node.flexBasis !== void 0) yn.setFlexBasis(node.flexBasis);\n\tif (node.alignSelf !== void 0) yn.setAlignSelf(mapAlignSelf(yoga, node.alignSelf));\n\tconst wSpec = node.width ?? defaultWidthSpec(node);\n\tconst hSpec = node.height;\n\tconst isWidthMain = parentDir === \"row\";\n\tconst isHeightMain = parentDir === \"column\";\n\tapplySizeSpec(yn, \"width\", wSpec, parentExtent?.width, isWidthMain);\n\tapplySizeSpec(yn, \"height\", hSpec, parentExtent?.height, isHeightMain);\n\tif (isContainer) {\n\t\tconst cs = containerStyle(node);\n\t\tyn.setFlexDirection(dir === \"row\" ? yoga.FLEX_DIRECTION_ROW : yoga.FLEX_DIRECTION_COLUMN);\n\t\tyn.setJustifyContent(mapJustify(yoga, cs.justify));\n\t\tyn.setAlignItems(mapAlign(yoga, cs.align));\n\t\tyn.setFlexWrap(cs.wrap ? yoga.WRAP_WRAP : yoga.WRAP_NO_WRAP);\n\t\tif (cs.padding > 0) yn.setPadding(yoga.EDGE_ALL, cs.padding);\n\t\tif (cs.gap > 0) yn.setGap(yoga.GUTTER_ALL, cs.gap);\n\t\tconst flow = flowChildren(node);\n\t\tconst abs = absoluteChildren(node);\n\t\tconst allChildren = [...flow, ...abs];\n\t\tfor (let i = 0; i < allChildren.length; i++) {\n\t\t\tconst childMapping = buildYogaNode(yoga, allChildren[i], void 0, measure, isAbsolutePositioned(node) ? null : dir);\n\t\t\tyn.insertChild(childMapping.yogaNode, i);\n\t\t\tchildren.push(childMapping);\n\t\t}\n\t} else if (node.kind === \"text\" || node.kind === \"media\" && node.dataType === \"Caption\") yn.setMeasureFunc((width, widthMode, height, heightMode) => {\n\t\tlet constraintWidth;\n\t\tif (widthMode === 1 || widthMode === 2) constraintWidth = width;\n\t\tconst measured = measure?.(node, constraintWidth) ?? {\n\t\t\twidth: 0,\n\t\t\theight: 0\n\t\t};\n\t\tlet resolvedWidth = measured.width;\n\t\tlet resolvedHeight = measured.height;\n\t\tif (widthMode === 1) resolvedWidth = width;\n\t\tif (heightMode === 1) resolvedHeight = height;\n\t\treturn {\n\t\t\twidth: resolvedWidth,\n\t\t\theight: resolvedHeight\n\t\t};\n\t});\n\telse {\n\t\tconst measured = measure?.(node) ?? null;\n\t\tif (measured) {\n\t\t\tconst hasRatio = node.aspectRatio !== void 0;\n\t\t\tconst isCaption = node.dataType === \"Caption\";\n\t\t\tconst intrinsicRatio = measured.height > 0 ? measured.width / measured.height : 1;\n\t\t\tif (node.kind === \"media\" && !isCaption && !hasRatio) yn.setAspectRatio(intrinsicRatio);\n\t\t\tconst isWAuto = wSpec === void 0 || wSpec === \"auto\" || wSpec === \"fit\";\n\t\t\tconst isHAuto = hSpec === void 0 || hSpec === \"auto\" || hSpec === \"fit\";\n\t\t\tif (isWAuto && isHAuto) {\n\t\t\t\tconst ar = node.aspectRatio ?? (node.kind === \"media\" ? intrinsicRatio : void 0) ?? 1;\n\t\t\t\tyn.setMeasureFunc((width, widthMode, height, heightMode) => {\n\t\t\t\t\tlet resW = measured.width;\n\t\t\t\t\tlet resH = measured.height;\n\t\t\t\t\tif (widthMode === 1 && heightMode === 1) {\n\t\t\t\t\t\tresW = width;\n\t\t\t\t\t\tresH = height;\n\t\t\t\t\t} else if (widthMode === 1) {\n\t\t\t\t\t\tresW = width;\n\t\t\t\t\t\tresH = ar > 0 ? Math.round(width / ar) : measured.height;\n\t\t\t\t\t} else if (heightMode === 1) {\n\t\t\t\t\t\tresH = height;\n\t\t\t\t\t\tresW = ar > 0 ? Math.round(height * ar) : measured.width;\n\t\t\t\t\t} else if (widthMode === 2 && heightMode === 2) {\n\t\t\t\t\t\tconst scale = Math.min(1, width / measured.width, height / measured.height);\n\t\t\t\t\t\tresW = Math.round(measured.width * scale);\n\t\t\t\t\t\tresH = Math.round(measured.height * scale);\n\t\t\t\t\t} else if (widthMode === 2) {\n\t\t\t\t\t\tif (measured.width > width) {\n\t\t\t\t\t\t\tresW = width;\n\t\t\t\t\t\t\tresH = ar > 0 ? Math.round(width / ar) : measured.height;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (heightMode === 2) {\n\t\t\t\t\t\tif (measured.height > height) {\n\t\t\t\t\t\t\tresH = height;\n\t\t\t\t\t\t\tresW = ar > 0 ? Math.round(height * ar) : measured.width;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\twidth: resW,\n\t\t\t\t\t\theight: resH\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t} else if (isWAuto) {\n\t\t\t\tconst ar = node.aspectRatio ?? (node.kind === \"media\" ? intrinsicRatio : void 0);\n\t\t\t\tif (ar === void 0 || ar <= 0) yn.setWidth(measured.width);\n\t\t\t} else if (isHAuto) {\n\t\t\t\tconst ar = node.aspectRatio ?? (node.kind === \"media\" ? intrinsicRatio : void 0);\n\t\t\t\tif (ar === void 0 || ar <= 0) yn.setHeight(measured.height);\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\tyogaNode: yn,\n\t\tlayoutNode: node,\n\t\tchildren\n\t};\n}\nfunction applySizeSpec(yn, dim, spec, parentExtent, isFlexChild) {\n\tif (spec === void 0 || spec === \"auto\" || spec === \"fit\") return;\n\tconst resolvedSpec = toYogaValue(spec);\n\tif (typeof resolvedSpec === \"number\") {\n\t\tif (dim === \"width\") yn.setWidth(resolvedSpec);\n\t\telse yn.setHeight(resolvedSpec);\n\t\treturn;\n\t}\n\tif (resolvedSpec === \"fill\") {\n\t\tif (isFlexChild) {\n\t\t\tif (yn.getFlexGrow() === 0) yn.setFlexGrow(1);\n\t\t\tyn.setFlexBasis(0);\n\t\t\treturn;\n\t\t}\n\t\tif (parentExtent !== void 0) if (dim === \"width\") yn.setWidth(parentExtent);\n\t\telse yn.setHeight(parentExtent);\n\t\telse if (dim === \"width\") yn.setWidthPercent(100);\n\t\telse yn.setHeightPercent(100);\n\t}\n}\nfunction readLayout(mapping, parentX, parentY, rects, sizes) {\n\tconst layout = mapping.yogaNode.getComputedLayout();\n\tlet x = parentX + layout.left;\n\tlet y = parentY + layout.top;\n\tconst width = layout.width;\n\tconst height = layout.height;\n\tconst node = mapping.layoutNode;\n\tif (!isAbsolutePositioned(node)) {\n\t\tx += Number(node.x ?? 0);\n\t\ty += Number(node.y ?? 0);\n\t}\n\trects[mapping.layoutNode.id] = {\n\t\tx: Math.round(x * 1e3) / 1e3,\n\t\ty: Math.round(y * 1e3) / 1e3,\n\t\twidth: Math.round(width * 1e3) / 1e3,\n\t\theight: Math.round(height * 1e3) / 1e3\n\t};\n\tsizes[mapping.layoutNode.id] = {\n\t\twidth: Math.round(width * 1e3) / 1e3,\n\t\theight: Math.round(height * 1e3) / 1e3\n\t};\n\tfor (const child of mapping.children) readLayout(child, x, y, rects, sizes);\n}\nfunction freeYogaTree(mapping) {\n\tfor (const child of mapping.children) freeYogaTree(child);\n\tmapping.yogaNode.free();\n}\n/** Deterministic layout (synchronous): document + viewport (+ measure) → rects. */\nfunction computeLayoutSync(yoga, input) {\n\tconst { layout, viewport, measure } = input;\n\tconst rects = {};\n\tconst sizesMap = {};\n\tfor (const root of layout) {\n\t\tconst wrapperNode = yoga.Node.create();\n\t\twrapperNode.setWidth(viewport.width);\n\t\twrapperNode.setHeight(viewport.height);\n\t\twrapperNode.setFlexDirection(yoga.FLEX_DIRECTION_COLUMN);\n\t\tconst mapping = buildYogaNode(yoga, root, {\n\t\t\twidth: viewport.width,\n\t\t\theight: viewport.height\n\t\t}, measure, null);\n\t\twrapperNode.insertChild(mapping.yogaNode, 0);\n\t\twrapperNode.calculateLayout(viewport.width, viewport.height);\n\t\tconst rootLayout = mapping.yogaNode.getComputedLayout();\n\t\tconst isRootAbsolute = root.position === \"absolute\" || root.position === void 0 && (root.x !== void 0 || root.y !== void 0);\n\t\tconst rootX = isRootAbsolute ? rootLayout.left : Number(root.x ?? 0);\n\t\tconst rootY = isRootAbsolute ? rootLayout.top : Number(root.y ?? 0);\n\t\trects[root.id] = {\n\t\t\tx: Math.round(rootX * 1e3) / 1e3,\n\t\t\ty: Math.round(rootY * 1e3) / 1e3,\n\t\t\twidth: Math.round(rootLayout.width * 1e3) / 1e3,\n\t\t\theight: Math.round(rootLayout.height * 1e3) / 1e3\n\t\t};\n\t\tsizesMap[root.id] = {\n\t\t\twidth: Math.round(rootLayout.width * 1e3) / 1e3,\n\t\t\theight: Math.round(rootLayout.height * 1e3) / 1e3\n\t\t};\n\t\tfor (const child of mapping.children) readLayout(child, rootX, rootY, rects, sizesMap);\n\t\tfreeYogaTree(mapping);\n\t\twrapperNode.free();\n\t}\n\treturn {\n\t\trects,\n\t\tsizes: sizesMap\n\t};\n}\n/** Deterministic layout: document + viewport (+ measure) → rects. */\nasync function computeLayout(input) {\n\treturn computeLayoutSync(await initLayout(), input);\n}\n\n//#endregion\n//#region src/program/animation.ts\nfunction evaluateEasingProgress(ease, t) {\n\tif (!ease) return t;\n\tconst ref = parseEase(ease);\n\tif (!ref || ref.name === \"none\") return t;\n\tconst { name, dir, params } = ref;\n\tconst s = Math.max(0, Math.min(1, t));\n\tconst applyDir = (fn) => {\n\t\tif (dir === \"in\") return fn(s);\n\t\tif (dir === \"out\") return 1 - fn(1 - s);\n\t\treturn s < .5 ? fn(s * 2) / 2 : 1 - fn((1 - s) * 2) / 2;\n\t};\n\tswitch (name) {\n\t\tcase \"power1\": return applyDir((x) => x * x);\n\t\tcase \"power2\": return applyDir((x) => x * x * x);\n\t\tcase \"power3\": return applyDir((x) => x * x * x * x);\n\t\tcase \"sine\": return applyDir((x) => 1 - Math.cos(x * Math.PI / 2));\n\t\tcase \"circ\": return applyDir((x) => 1 - Math.sqrt(Math.max(0, 1 - x * x)));\n\t\tcase \"expo\": return applyDir((x) => x === 0 ? 0 : 2 ** (10 * (x - 1)));\n\t\tcase \"back\": {\n\t\t\tconst c1 = params?.[0] ?? 1.70158;\n\t\t\tconst c3 = c1 + 1;\n\t\t\treturn applyDir((x) => c3 * x * x * x - c1 * x * x);\n\t\t}\n\t\tcase \"bounce\": {\n\t\t\tconst bounceOut = (x) => {\n\t\t\t\tconst n1 = 7.5625;\n\t\t\t\tconst d1 = 2.75;\n\t\t\t\tif (x < 1 / d1) return n1 * x * x;\n\t\t\t\tif (x < 2 / d1) {\n\t\t\t\t\tconst x2$1 = x - 1.5 / d1;\n\t\t\t\t\treturn n1 * x2$1 * x2$1 + .75;\n\t\t\t\t}\n\t\t\t\tif (x < 2.5 / d1) {\n\t\t\t\t\tconst x2$1 = x - 2.25 / d1;\n\t\t\t\t\treturn n1 * x2$1 * x2$1 + .9375;\n\t\t\t\t}\n\t\t\t\tconst x2 = x - 2.625 / d1;\n\t\t\t\treturn n1 * x2 * x2 + .984375;\n\t\t\t};\n\t\t\tif (dir === \"out\") return bounceOut(s);\n\t\t\tif (dir === \"in\") return 1 - bounceOut(1 - s);\n\t\t\treturn s < .5 ? (1 - bounceOut(1 - 2 * s)) / 2 : (1 + bounceOut(2 * s - 1)) / 2;\n\t\t}\n\t\tdefault: return s;\n\t}\n}\nfunction parseEase(ease) {\n\tif (!ease) return void 0;\n\tif (typeof ease === \"object\" && \"name\" in ease && \"dir\" in ease) return ease;\n\tif (typeof ease === \"string\") {\n\t\tconst trimmed = ease.trim();\n\t\tconst match = trimmed.match(/^([a-zA-Z0-9]+)(?:\\.([a-zA-Z]+))?(?:\\(([^)]+)\\))?$/);\n\t\tif (match) {\n\t\t\tconst rawName$1 = match[1].toLowerCase();\n\t\t\tconst name$1 = rawName$1 === \"linear\" ? \"none\" : rawName$1;\n\t\t\tconst rawDir$1 = (match[2] || \"out\").toLowerCase();\n\t\t\tlet dir$1 = \"out\";\n\t\t\tif (rawDir$1 === \"in\") dir$1 = \"in\";\n\t\t\telse if (rawDir$1 === \"out\") dir$1 = \"out\";\n\t\t\telse if (rawDir$1 === \"inout\") dir$1 = \"inOut\";\n\t\t\tlet params;\n\t\t\tif (match[3]) params = match[3].split(\",\").map((s) => Number.parseFloat(s.trim())).filter((n) => !Number.isNaN(n));\n\t\t\treturn {\n\t\t\t\tname: name$1,\n\t\t\t\tdir: dir$1,\n\t\t\t\t...params && params.length > 0 ? { params } : {}\n\t\t\t};\n\t\t}\n\t\tconst dotIdx = trimmed.indexOf(\".\");\n\t\tif (dotIdx === -1) {\n\t\t\tconst raw = trimmed.toLowerCase();\n\t\t\treturn {\n\t\t\t\tname: raw === \"linear\" ? \"none\" : raw,\n\t\t\t\tdir: \"out\"\n\t\t\t};\n\t\t}\n\t\tconst rawName = trimmed.slice(0, dotIdx).toLowerCase();\n\t\tconst name = rawName === \"linear\" ? \"none\" : rawName;\n\t\tconst rawDir = trimmed.slice(dotIdx + 1).toLowerCase();\n\t\tlet dir = \"out\";\n\t\tif (rawDir === \"in\") dir = \"in\";\n\t\telse if (rawDir === \"out\") dir = \"out\";\n\t\telse if (rawDir === \"inout\") dir = \"inOut\";\n\t\treturn {\n\t\t\tname,\n\t\t\tdir\n\t\t};\n\t}\n}\nfunction extractSignalHandleId(signalOrHandleId) {\n\tif (typeof signalOrHandleId === \"string\") return signalOrHandleId;\n\tif (signalOrHandleId && typeof signalOrHandleId === \"object\" && \"inputHandleId\" in signalOrHandleId && typeof signalOrHandleId.inputHandleId === \"string\") return signalOrHandleId.inputHandleId;\n\tif (signalOrHandleId && typeof signalOrHandleId === \"object\" && \"gpuBinding\" in signalOrHandleId && signalOrHandleId.gpuBinding?.nodeId) return signalOrHandleId.gpuBinding.nodeId;\n\treturn String(signalOrHandleId);\n}\n/**\n* Fluent builder and runtime representation for layer animations.\n* Supports chainable keyframes, reactive signal binding, Perlin wiggles, and springs.\n*/\nvar LayerAnimation = class LayerAnimation {\n\ttracks = [];\n\tconstructor(tracks = []) {\n\t\tthis.tracks = [...tracks];\n\t}\n\tstatic create() {\n\t\treturn new LayerAnimation();\n\t}\n\tstatic fromTo(prop, fromValue, toValue, options = {}) {\n\t\treturn new LayerAnimation().fromTo(prop, fromValue, toValue, options);\n\t}\n\tstatic signal(prop, signalOrHandleId, options = {}) {\n\t\treturn new LayerAnimation().signal(prop, signalOrHandleId, options);\n\t}\n\tstatic colorSignal(prop, signalOrHandleId, options) {\n\t\treturn new LayerAnimation().colorSignal(prop, signalOrHandleId, options);\n\t}\n\tstatic kineticSweep(fromOffset = -1, toOffset = 1, startFrame = 0, endFrame = 24, ease = \"power2.out\") {\n\t\treturn new LayerAnimation().kineticSweep(fromOffset, toOffset, startFrame, endFrame, ease);\n\t}\n\tstatic typewriter(startFrame = 0, endFrame = 30, ease = \"linear\") {\n\t\treturn new LayerAnimation().typewriter(startFrame, endFrame, ease);\n\t}\n\tstatic letterSpacing(fromSpacing, toSpacing, startFrame = 0, endFrame = 24, ease = \"power2.out\") {\n\t\treturn new LayerAnimation().letterSpacing(fromSpacing, toSpacing, startFrame, endFrame, ease);\n\t}\n\tstatic wiggle(prop, options = {}) {\n\t\treturn new LayerAnimation().wiggle(prop, options);\n\t}\n\tstatic spring(prop, options = {}) {\n\t\treturn new LayerAnimation().spring(prop, options);\n\t}\n\tstatic firstMargin(fromMargin, toMargin, options = {}) {\n\t\treturn new LayerAnimation().firstMargin(fromMargin, toMargin, options);\n\t}\n\tstatic strokeWidth(fromWidth, toWidth, options = {}) {\n\t\treturn new LayerAnimation().fromTo(\"strokeWidth\", fromWidth, toWidth, options);\n\t}\n\tstatic rotateX(fromAngle, toAngle, options = {}) {\n\t\treturn new LayerAnimation().fromTo(\"rotateX\", fromAngle, toAngle, options);\n\t}\n\tstatic rotateY(fromAngle, toAngle, options = {}) {\n\t\treturn new LayerAnimation().fromTo(\"rotateY\", fromAngle, toAngle, options);\n\t}\n\tstatic rotateZ(fromAngle, toAngle, options = {}) {\n\t\treturn new LayerAnimation().fromTo(\"rotateZ\", fromAngle, toAngle, options);\n\t}\n\tstatic rotation(fromAngle, toAngle, options = {}) {\n\t\treturn new LayerAnimation().fromTo(\"rotation\", fromAngle, toAngle, options);\n\t}\n\taddTrack(track) {\n\t\tthis.tracks.push(track);\n\t\treturn this;\n\t}\n\t/**\n\t* Creates a keyframed track animating from fromValue to toValue.\n\t*/\n\tfromTo(prop, fromValue, toValue, options = {}) {\n\t\tconst start = options.from ?? options.start ?? options.fromFrame ?? 0;\n\t\tconst end = options.to ?? options.end ?? options.toFrame ?? (options.durationFrames !== void 0 ? start + options.durationFrames : start + 24);\n\t\tconst ease = parseEase(options.ease);\n\t\tlet track = this.tracks.find((t) => t.prop === prop && (!t.source || t.source.type === \"keyframe\"));\n\t\tif (!track) {\n\t\t\ttrack = {\n\t\t\t\tid: `${prop}_fromTo_${this.tracks.length}`,\n\t\t\t\tprop,\n\t\t\t\tkeyframes: []\n\t\t\t};\n\t\t\tthis.tracks.push(track);\n\t\t}\n\t\tconst id = track.id;\n\t\tif (track.keyframes.length === 0 && start > 0) track.keyframes.push({\n\t\t\tid: `${id}_k0`,\n\t\t\tframe: 0,\n\t\t\tvalue: fromValue\n\t\t});\n\t\tif (track.keyframes.length === 0 || track.keyframes[track.keyframes.length - 1].frame < start) track.keyframes.push({\n\t\t\tid: `${id}_k_${start}`,\n\t\t\tframe: start,\n\t\t\tvalue: fromValue\n\t\t});\n\t\ttrack.keyframes.push({\n\t\t\tid: `${id}_k_${end}`,\n\t\t\tframe: end,\n\t\t\tvalue: toValue,\n\t\t\t...ease && { ease }\n\t\t});\n\t\ttrack.keyframes.sort((a, b) => a.frame - b.frame);\n\t\treturn this;\n\t}\n\t/**\n\t* Appends a keyframe to an existing track for prop, or creates a new track.\n\t*/\n\tkeyframe(prop, frame, value, ease) {\n\t\tlet track = this.tracks.find((t) => t.prop === prop && (!t.source || t.source.type === \"keyframe\"));\n\t\tif (!track) {\n\t\t\ttrack = {\n\t\t\t\tid: `${prop}_track_${this.tracks.length}`,\n\t\t\t\tprop,\n\t\t\t\tkeyframes: []\n\t\t\t};\n\t\t\tthis.tracks.push(track);\n\t\t}\n\t\tconst parsedEase = parseEase(ease);\n\t\ttrack.keyframes.push({\n\t\t\tid: `k_${track.keyframes.length}_f${frame}`,\n\t\t\tframe,\n\t\t\tvalue,\n\t\t\t...parsedEase && { ease: parsedEase }\n\t\t});\n\t\ttrack.keyframes.sort((a, b) => a.frame - b.frame);\n\t\treturn this;\n\t}\n\t/**\n\t* Animates opacity from 0 to 1 between startFrame and endFrame.\n\t*/\n\tfadeIn(startFrame = 0, endFrame = 20, ease = \"power2.out\") {\n\t\treturn this.fromTo(\"opacity\", 0, 1, {\n\t\t\tfrom: startFrame,\n\t\t\tto: endFrame,\n\t\t\tease\n\t\t});\n\t}\n\t/**\n\t* Animates opacity from 1 to 0 between startFrame and endFrame.\n\t*/\n\tfadeOut(startFrame, endFrame, ease = \"power2.in\") {\n\t\treturn this.fromTo(\"opacity\", 1, 0, {\n\t\t\tfrom: startFrame,\n\t\t\tto: endFrame,\n\t\t\tease\n\t\t});\n\t}\n\t/**\n\t* Animates chart write-on draw progress from fromVal to toVal.\n\t*/\n\tdrawProgress(fromVal = 0, toVal = 1, options = {}) {\n\t\treturn this.fromTo(\"drawProgress\", fromVal, toVal, options);\n\t}\n\t/**\n\t* Animates chartProgress from fromVal to toVal.\n\t*/\n\tchartProgress(fromVal = 0, toVal = 1, options = {}) {\n\t\treturn this.fromTo(\"chartProgress\", fromVal, toVal, options);\n\t}\n\t/**\n\t* Slides in Y coordinate from fromY to toY.\n\t*/\n\tslideInY(fromY, toY, startFrame = 0, endFrame = 24, ease = \"power2.out\") {\n\t\treturn this.fromTo(\"y\", fromY, toY, {\n\t\t\tfrom: startFrame,\n\t\t\tto: endFrame,\n\t\t\tease\n\t\t});\n\t}\n\t/**\n\t* Slides in X coordinate from fromX to toX.\n\t*/\n\tslideInX(fromX, toX, startFrame = 0, endFrame = 24, ease = \"power2.out\") {\n\t\treturn this.fromTo(\"x\", fromX, toX, {\n\t\t\tfrom: startFrame,\n\t\t\tto: endFrame,\n\t\t\tease\n\t\t});\n\t}\n\t/**\n\t* Sweeps kinetic typography animator offset from fromOffset to toOffset.\n\t* Cascades per-glyph or per-word transforms across the text.\n\t*/\n\tkineticSweep(fromOffset = -1, toOffset = 1, startFrame = 0, endFrame = 24, ease = \"power2.out\") {\n\t\treturn this.fromTo(\"offset\", fromOffset, toOffset, {\n\t\t\tfrom: startFrame,\n\t\t\tto: endFrame,\n\t\t\tease\n\t\t});\n\t}\n\t/**\n\t* Progressive character write-on / typewriter text reveal.\n\t*/\n\ttypewriter(startFrame = 0, endFrame = 30, ease = \"linear\") {\n\t\treturn this.fromTo(\"text\", 0, 1, {\n\t\t\tfrom: startFrame,\n\t\t\tto: endFrame,\n\t\t\tease\n\t\t});\n\t}\n\t/**\n\t* Animates letter-spacing (tracking expansion or compression).\n\t*/\n\tletterSpacing(fromSpacing, toSpacing, startFrame = 0, endFrame = 24, ease = \"power2.out\") {\n\t\treturn this.fromTo(\"letterSpacing\", fromSpacing, toSpacing, {\n\t\t\tfrom: startFrame,\n\t\t\tto: endFrame,\n\t\t\tease\n\t\t});\n\t}\n\t/**\n\t* Animates text position along a path via First Margin.\n\t*/\n\tfirstMargin(fromMargin, toMargin, options = {}) {\n\t\treturn this.fromTo(\"firstMargin\", fromMargin, toMargin, options);\n\t}\n\t/**\n\t* Animates Last Margin spatial limit along a path.\n\t*/\n\tlastMargin(fromMargin, toMargin, options = {}) {\n\t\treturn this.fromTo(\"lastMargin\", fromMargin, toMargin, options);\n\t}\n\t/**\n\t* Animates baseline shift perpendicular to curve tangent.\n\t*/\n\tbaselineShift(fromShift, toShift, options = {}) {\n\t\treturn this.fromTo(\"baselineShift\", fromShift, toShift, options);\n\t}\n\t/**\n\t* Animate rotateX from fromAngle to toAngle.\n\t*/\n\trotateX(fromAngle, toAngle, options = {}) {\n\t\treturn this.fromTo(\"rotateX\", fromAngle, toAngle, options);\n\t}\n\t/**\n\t* Animate rotateY from fromAngle to toAngle.\n\t*/\n\trotateY(fromAngle, toAngle, options = {}) {\n\t\treturn this.fromTo(\"rotateY\", fromAngle, toAngle, options);\n\t}\n\t/**\n\t* Animate rotateZ from fromAngle to toAngle.\n\t*/\n\trotateZ(fromAngle, toAngle, options = {}) {\n\t\treturn this.fromTo(\"rotateZ\", fromAngle, toAngle, options);\n\t}\n\t/**\n\t* Animate perspective camera distance in pixels.\n\t*/\n\tperspective(fromDist, toDist, options = {}) {\n\t\treturn this.fromTo(\"perspective\", fromDist, toDist, options);\n\t}\n\t/**\n\t* Animate depth translation (translateZ) in pixels.\n\t*/\n\ttranslateZ(fromZ, toZ, options = {}) {\n\t\treturn this.fromTo(\"translateZ\", fromZ, toZ, options);\n\t}\n\t/**\n\t* Composite helper to tilt a container across multiple 3D axes simultaneously.\n\t*/\n\ttilt3D(options) {\n\t\tconst start = options.start ?? options.fromFrame;\n\t\tconst end = options.end ?? options.toFrame;\n\t\tconst ease = options.ease;\n\t\tconst from = options.from ?? {};\n\t\tconst to = options.to;\n\t\tfor (const prop of [\n\t\t\t\"rotateX\",\n\t\t\t\"rotateY\",\n\t\t\t\"rotateZ\",\n\t\t\t\"translateZ\",\n\t\t\t\"perspective\"\n\t\t]) {\n\t\t\tconst toVal = to[prop];\n\t\t\tif (toVal !== void 0) {\n\t\t\t\tconst fromVal = from[prop] ?? 0;\n\t\t\t\tthis.fromTo(prop, fromVal, toVal, {\n\t\t\t\t\tfrom: start,\n\t\t\t\t\tto: end,\n\t\t\t\t\tfromFrame: start,\n\t\t\t\t\ttoFrame: end,\n\t\t\t\t\tease\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t* Binds an animatable property to a reactive continuous Signal (e.g. LFO, speech energy, audio pitch).\n\t*/\n\tsignal(prop, signalOrHandleId, options = {}) {\n\t\tconst handleId = extractSignalHandleId(signalOrHandleId);\n\t\tconst id = `${prop}_sig_${handleId}_${this.tracks.length}`;\n\t\tconst source = {\n\t\t\ttype: \"signal\",\n\t\t\tinputHandleId: handleId,\n\t\t\tmultiplier: options.multiplier ?? 1,\n\t\t\toffset: options.offset ?? 0,\n\t\t\tsmoothingWindowFrames: options.smoothing ?? 0,\n\t\t\tsignalMode: options.mode ?? \"continuous\",\n\t\t\tthreshold: options.threshold ?? .15,\n\t\t\taccumulateThreshold: options.threshold ?? .15,\n\t\t\tdebounceFrames: options.debounceFrames ?? 2,\n\t\t\tchannel: options.channel ?? \"primary\"\n\t\t};\n\t\tthis.tracks.push({\n\t\t\tid,\n\t\t\tprop,\n\t\t\tsource,\n\t\t\tkeyframes: []\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t* Modulates color interpolation based on an active signal.\n\t*/\n\tcolorSignal(prop, signalOrHandleId, options) {\n\t\tconst handleId = extractSignalHandleId(signalOrHandleId);\n\t\tconst id = `${prop}_colorSig_${handleId}_${this.tracks.length}`;\n\t\tconst source = {\n\t\t\ttype: \"signal\",\n\t\t\tinputHandleId: handleId,\n\t\t\tmultiplier: 1,\n\t\t\toffset: 0,\n\t\t\tsmoothingWindowFrames: options.smoothing ?? 0,\n\t\t\tcolorMode: options.colorMode ?? \"interpolate\",\n\t\t\tcolorA: options.colorA,\n\t\t\tcolorB: options.colorB,\n\t\t\tcolorThreshold: options.threshold,\n\t\t\tchannel: \"primary\"\n\t\t};\n\t\tthis.tracks.push({\n\t\t\tid,\n\t\t\tprop,\n\t\t\tsource,\n\t\t\tkeyframes: []\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t* Adds organic Perlin noise wiggling to a property.\n\t*/\n\twiggle(prop, options = {}) {\n\t\tconst id = `${prop}_wiggle_${this.tracks.length}`;\n\t\tconst source = {\n\t\t\ttype: \"wiggle\",\n\t\t\tfrequency: options.frequency ?? 2,\n\t\t\tamplitude: options.amplitude ?? 20,\n\t\t\toctaves: options.octaves ?? 1,\n\t\t\tseed: options.seed ?? 1234\n\t\t};\n\t\tthis.tracks.push({\n\t\t\tid,\n\t\t\tprop,\n\t\t\tsource,\n\t\t\tkeyframes: []\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t* Adds physical harmonic spring overshoot behavior to a property transition.\n\t*/\n\tspring(prop, options = {}) {\n\t\tconst id = `${prop}_spring_${this.tracks.length}`;\n\t\tconst source = {\n\t\t\ttype: \"springOvershoot\",\n\t\t\tdamping: options.damping ?? 12,\n\t\t\tstiffness: options.stiffness ?? 180,\n\t\t\tmass: options.mass ?? 1\n\t\t};\n\t\tthis.tracks.push({\n\t\t\tid,\n\t\t\tprop,\n\t\t\tsource,\n\t\t\tkeyframes: []\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t* Follows a 2D or 3D path with constant arc-length velocity, automatic orientation,\n\t* banking into turns, and optional easing.\n\t*/\n\tfollowPath(path, options = {}) {\n\t\tconst startFrame = options.start ?? options.fromFrame ?? 0;\n\t\tconst endFrame = options.end ?? options.toFrame ?? 60;\n\t\tconst duration = Math.max(1, endFrame - startFrame);\n\t\tconst sampleCount = options.samples ?? Math.max(8, Math.min(60, Math.round(duration / 2)));\n\t\tconst totalLen = path.totalLength ?? 1;\n\t\tlet fromProg = options.fromProgress ?? 0;\n\t\tlet toProg = options.toProgress ?? 1;\n\t\tif (options.fromDistance !== void 0 && totalLen > 0) fromProg = options.fromDistance / totalLen;\n\t\tif (options.toDistance !== void 0 && totalLen > 0) toProg = options.toDistance / totalLen;\n\t\tconst autoOrient = options.autoOrient ?? true;\n\t\tconst banking = options.banking ?? 0;\n\t\tconst pitchOffset = options.pitchOffset ?? 0;\n\t\tconst yawOffset = options.yawOffset ?? 0;\n\t\tconst rollOffset = options.rollOffset ?? 0;\n\t\tlet hasZ = false;\n\t\tlet hasRx = false;\n\t\tlet hasRy = false;\n\t\tconst samples = [];\n\t\tfor (let i = 0; i <= sampleCount; i++) {\n\t\t\tconst t = i / sampleCount;\n\t\t\tconst easedT = evaluateEasingProgress(options.ease, t);\n\t\t\tconst u = fromProg + easedT * (toProg - fromProg);\n\t\t\tconst f = Math.round(startFrame + t * duration);\n\t\t\tlet pos = [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t0\n\t\t\t];\n\t\t\tlet tan = [\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t\t0\n\t\t\t];\n\t\t\tlet rot = [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t0\n\t\t\t];\n\t\t\tif (typeof path.getFrameAt === \"function\") {\n\t\t\t\tconst frameData = path.getFrameAt(u);\n\t\t\t\tpos = frameData.position;\n\t\t\t\ttan = frameData.tangent;\n\t\t\t\trot = frameData.rotation ?? [\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\t0\n\t\t\t\t];\n\t\t\t} else {\n\t\t\t\tconst pt = path.getPointAt(u);\n\t\t\t\tpos = pt.position;\n\t\t\t\tif (pt.tangent) tan = pt.tangent;\n\t\t\t\trot = [\n\t\t\t\t\tMath.asin(Math.max(-1, Math.min(1, -tan[1]))) * (180 / Math.PI),\n\t\t\t\t\tMath.atan2(tan[0], tan[2]) * (180 / Math.PI),\n\t\t\t\t\tMath.atan2(tan[1], tan[0]) * (180 / Math.PI)\n\t\t\t\t];\n\t\t\t}\n\t\t\tconst rx = rot[0] + pitchOffset;\n\t\t\tconst ry = rot[1] + yawOffset;\n\t\t\tlet rz = (Math.abs(tan[2]) < 1e-4 ? Math.atan2(tan[1], tan[0]) * (180 / Math.PI) : rot[2]) + rollOffset;\n\t\t\tif (banking !== 0) {\n\t\t\t\tconst uAhead = Math.min(1, u + .02);\n\t\t\t\tconst uBehind = Math.max(0, u - .02);\n\t\t\t\tconst ptAhead = path.getPointAt(uAhead);\n\t\t\t\tconst ptBehind = path.getPointAt(uBehind);\n\t\t\t\tconst tAhead = ptAhead.tangent ?? [\n\t\t\t\t\t1,\n\t\t\t\t\t0,\n\t\t\t\t\t0\n\t\t\t\t];\n\t\t\t\tconst tBehind = ptBehind.tangent ?? [\n\t\t\t\t\t1,\n\t\t\t\t\t0,\n\t\t\t\t\t0\n\t\t\t\t];\n\t\t\t\tconst dYaw = Math.atan2(tAhead[0], tAhead[2]) - Math.atan2(tBehind[0], tBehind[2]);\n\t\t\t\trz -= dYaw * banking * 57.2958;\n\t\t\t}\n\t\t\tif (Math.abs(pos[2]) > 1e-4) hasZ = true;\n\t\t\tif (Math.abs(rx) > 1e-4) hasRx = true;\n\t\t\tif (Math.abs(ry) > 1e-4) hasRy = true;\n\t\t\tsamples.push({\n\t\t\t\tf,\n\t\t\t\tx: pos[0],\n\t\t\t\ty: pos[1],\n\t\t\t\tz: pos[2],\n\t\t\t\trx,\n\t\t\t\try,\n\t\t\t\trz\n\t\t\t});\n\t\t}\n\t\tfor (const s of samples) {\n\t\t\tthis.keyframe(\"x\", s.f, s.x);\n\t\t\tthis.keyframe(\"y\", s.f, s.y);\n\t\t\tif (hasZ) this.keyframe(\"z\", s.f, s.z);\n\t\t\tif (autoOrient) {\n\t\t\t\tthis.keyframe(\"rotateZ\", s.f, s.rz);\n\t\t\t\tif (hasRx) this.keyframe(\"rotateX\", s.f, s.rx);\n\t\t\t\tif (hasRy) this.keyframe(\"rotateY\", s.f, s.ry);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t* Attaches this animation to a target LayoutNode and returns the node.\n\t*/\n\tapplyTo(node) {\n\t\tnode.animation = this.toSpec();\n\t\treturn node;\n\t}\n\t/**\n\t* Returns the validated LayerAnimation specification object.\n\t*/\n\ttoSpec() {\n\t\treturn { tracks: this.tracks };\n\t}\n\ttoJSON() {\n\t\treturn this.toSpec();\n\t}\n};\nvar CameraAnimation = class CameraAnimation extends LayerAnimation {\n\tstatic camera() {\n\t\treturn new CameraAnimation();\n\t}\n\tdolly(fromDistanceOrOptions, toDistance, options = {}) {\n\t\tif (typeof fromDistanceOrOptions === \"object\") {\n\t\t\tconst opts = fromDistanceOrOptions;\n\t\t\tconst start = opts.start ?? opts.fromFrame ?? 0;\n\t\t\tconst end = opts.end ?? opts.toFrame ?? 0;\n\t\t\treturn this.fromTo(\"cameraZ\", opts.fromDistance, opts.toDistance, {\n\t\t\t\tfrom: start,\n\t\t\t\tto: end,\n\t\t\t\tease: opts.ease\n\t\t\t});\n\t\t}\n\t\treturn this.fromTo(\"cameraZ\", fromDistanceOrOptions, toDistance ?? fromDistanceOrOptions, options);\n\t}\n\torbit(options) {\n\t\tconst start = options.start ?? options.fromFrame ?? 0;\n\t\tconst end = options.end ?? options.toFrame ?? 0;\n\t\tif (options.azimuth) this.fromTo(\"orbitAzimuth\", options.azimuth.from ?? 0, options.azimuth.to, {\n\t\t\tfrom: start,\n\t\t\tto: end,\n\t\t\tease: options.ease\n\t\t});\n\t\tif (options.elevation) this.fromTo(\"orbitElevation\", options.elevation.from ?? 0, options.elevation.to, {\n\t\t\tfrom: start,\n\t\t\tto: end,\n\t\t\tease: options.ease\n\t\t});\n\t\tif (options.radius) this.fromTo(\"orbitRadius\", options.radius.from ?? 1500, options.radius.to, {\n\t\t\tfrom: start,\n\t\t\tto: end,\n\t\t\tease: options.ease\n\t\t});\n\t\treturn this;\n\t}\n\ttruck(fromX, toX, options = {}) {\n\t\treturn this.fromTo(\"cameraX\", fromX, toX, options);\n\t}\n\tpedestal(fromY, toY, options = {}) {\n\t\treturn this.fromTo(\"cameraY\", fromY, toY, options);\n\t}\n\tpan(fromAngleDeg, toAngleDeg, options = {}) {\n\t\treturn this.fromTo(\"cameraYaw\", fromAngleDeg, toAngleDeg, options);\n\t}\n\ttilt(fromAngleDeg, toAngleDeg, options = {}) {\n\t\treturn this.fromTo(\"cameraPitch\", fromAngleDeg, toAngleDeg, options);\n\t}\n\troll(fromAngleDeg, toAngleDeg, options = {}) {\n\t\treturn this.fromTo(\"cameraRoll\", fromAngleDeg, toAngleDeg, options);\n\t}\n\trackFocus(options) {\n\t\tconst start = options.start ?? options.fromFrame ?? 0;\n\t\tconst end = options.end ?? options.toFrame ?? 0;\n\t\tthis.fromTo(\"focusDistance\", options.fromDistance, options.toDistance, {\n\t\t\tfrom: start,\n\t\t\tto: end,\n\t\t\tease: options.ease ?? \"power2.inOut\"\n\t\t});\n\t\tif (options.toFStop !== void 0) this.fromTo(\"fStop\", options.fromFStop ?? 2.8, options.toFStop, {\n\t\t\tfrom: start,\n\t\t\tto: end,\n\t\t\tease: options.ease ?? \"power2.inOut\"\n\t\t});\n\t\treturn this;\n\t}\n\thandheld(options) {\n\t\tconst start = options.start ?? options.fromFrame ?? 0;\n\t\tconst end = options.end ?? options.toFrame ?? 0;\n\t\tthis.fromTo(\"shakeTranslation\", 0, options.translationAmplitude, {\n\t\t\tfrom: start,\n\t\t\tto: end\n\t\t});\n\t\tthis.fromTo(\"shakeRotation\", 0, options.rotationAmplitude, {\n\t\t\tfrom: start,\n\t\t\tto: end\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t* Animates camera eye and lookAt target along a 3D path with constant velocity,\n\t* leading target look-ahead, or path tangent orientation.\n\t*/\n\tfollowPath3D(path, options = {}) {\n\t\tconst startFrame = options.start ?? options.fromFrame ?? 0;\n\t\tconst endFrame = options.end ?? options.toFrame ?? 60;\n\t\tconst duration = Math.max(1, endFrame - startFrame);\n\t\tconst sampleCount = options.samples ?? Math.max(8, Math.min(60, Math.round(duration / 2)));\n\t\tconst mode = options.mode ?? (options.target ? \"lookAtTarget\" : \"leadTarget\");\n\t\tconst fromProg = options.fromProgress ?? 0;\n\t\tconst toProg = options.toProgress ?? 1;\n\t\tconst lookAhead = options.lookAhead ?? .05;\n\t\tfor (let i = 0; i <= sampleCount; i++) {\n\t\t\tconst t = i / sampleCount;\n\t\t\tconst u = fromProg + evaluateEasingProgress(options.ease, t) * (toProg - fromProg);\n\t\t\tconst f = Math.round(startFrame + t * duration);\n\t\t\tlet pos = [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t0\n\t\t\t];\n\t\t\tlet rot = [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t0\n\t\t\t];\n\t\t\tif (typeof path.getFrameAt === \"function\") {\n\t\t\t\tconst frameData = path.getFrameAt(u);\n\t\t\t\tpos = frameData.position;\n\t\t\t\trot = frameData.rotation ?? [\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\t0\n\t\t\t\t];\n\t\t\t} else pos = path.getPointAt(u).position;\n\t\t\tthis.keyframe(\"cameraX\", f, pos[0]);\n\t\t\tthis.keyframe(\"cameraY\", f, pos[1]);\n\t\t\tthis.keyframe(\"cameraZ\", f, pos[2]);\n\t\t\tif (mode === \"lookAtTarget\") {\n\t\t\t\tconst tgt = options.target ?? [\n\t\t\t\t\tpos[0],\n\t\t\t\t\tpos[1],\n\t\t\t\t\t0\n\t\t\t\t];\n\t\t\t\tthis.keyframe(\"targetX\", f, tgt[0]);\n\t\t\t\tthis.keyframe(\"targetY\", f, tgt[1]);\n\t\t\t\tthis.keyframe(\"targetZ\", f, tgt[2]);\n\t\t\t} else if (mode === \"leadTarget\") {\n\t\t\t\tconst leadU = Math.min(1, u + lookAhead);\n\t\t\t\tconst leadPt = path.getPointAt(leadU);\n\t\t\t\tthis.keyframe(\"targetX\", f, leadPt.position[0]);\n\t\t\t\tthis.keyframe(\"targetY\", f, leadPt.position[1]);\n\t\t\t\tthis.keyframe(\"targetZ\", f, leadPt.position[2]);\n\t\t\t} else if (mode === \"orientAlongPath\") {\n\t\t\t\tthis.keyframe(\"cameraPitch\", f, rot[0]);\n\t\t\t\tthis.keyframe(\"cameraYaw\", f, rot[1]);\n\t\t\t\tthis.keyframe(\"cameraRoll\", f, rot[2]);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n};\n\n//#endregion\n//#region src/program/evaluator.ts\nfunction hash1D(n, seed) {\n\tlet x = Math.floor(n) ^ seed * 1013 | 0;\n\tx = Math.imul(x ^ x >>> 15, x | 1);\n\tx ^= x + Math.imul(x ^ x >>> 7, x | 61);\n\treturn ((x ^ x >>> 14) >>> 0) / 4294967295 * 2 - 1;\n}\nfunction smoothNoise1D(x, seed) {\n\tconst i0 = Math.floor(x);\n\tconst i1 = i0 + 1;\n\tconst f = x - i0;\n\tconst u = f * f * (3 - 2 * f);\n\tconst g0 = hash1D(i0, seed);\n\tconst g1 = hash1D(i1, seed);\n\tconst v0 = g0 * f;\n\tconst v1 = g1 * (f - 1);\n\treturn (v0 * (1 - u) + v1 * u) * 2;\n}\n/**\n* Procedural wiggle generator using multi-octave coherent 1D gradient noise.\n*/\nfunction evaluateWiggle(source, tSec, baseValue = 0) {\n\tconst freq = source.frequency ?? 2;\n\tconst amp = source.amplitude ?? 50;\n\tconst octaves = Math.max(1, Math.min(4, source.octaves ?? 1));\n\tconst seed = source.seed ?? 1234;\n\tlet total = 0;\n\tlet maxAmp = 0;\n\tlet currentAmp = 1;\n\tlet currentFreq = freq;\n\tfor (let i = 0; i < octaves; i++) {\n\t\tconst noiseVal = smoothNoise1D(tSec * currentFreq, seed + i * 7919);\n\t\ttotal += noiseVal * currentAmp;\n\t\tmaxAmp += currentAmp;\n\t\tcurrentAmp *= .5;\n\t\tcurrentFreq *= 2;\n\t}\n\treturn baseValue + (maxAmp > 0 ? total / maxAmp : 0) * amp;\n}\n/**\n* Analytical solution to the second-order damped harmonic oscillator ODE:\n* m*x'' + c*x' + k*x = 0\n*/\nfunction evaluateSpringOvershoot(source, tSec, v0, v1) {\n\tif (tSec <= 0) return v0;\n\tconst m = Math.max(.001, source.mass ?? 1);\n\tconst k = Math.max(.001, source.stiffness ?? 180);\n\tconst c = Math.max(.001, source.damping ?? 12);\n\tconst w0 = Math.sqrt(k / m);\n\tconst zeta = c / (2 * Math.sqrt(k * m));\n\tlet progress = 1;\n\tif (zeta < 1) {\n\t\tconst wd = w0 * Math.sqrt(1 - zeta * zeta);\n\t\tconst A = -1;\n\t\tconst B = -zeta * w0 / wd;\n\t\tprogress = 1 + Math.exp(-zeta * w0 * tSec) * (A * Math.cos(wd * tSec) + B * Math.sin(wd * tSec));\n\t} else if (Math.abs(zeta - 1) < 1e-4) progress = 1 + Math.exp(-w0 * tSec) * (-1 - w0 * tSec);\n\telse {\n\t\tconst sq = Math.sqrt(zeta * zeta - 1);\n\t\tconst r1 = -w0 * (zeta - sq);\n\t\tconst r2 = -w0 * (zeta + sq);\n\t\tconst c1 = -1 / (1 - r1 / r2);\n\t\tconst c2 = -1 - c1;\n\t\tprogress = 1 + c1 * Math.exp(r1 * tSec) + c2 * Math.exp(r2 * tSec);\n\t}\n\treturn v0 + (v1 - v0) * progress;\n}\nfunction extractRawSignalSample(signalData, frame, fps) {\n\tif (signalData === null || signalData === void 0) return 0;\n\tif (typeof signalData === \"number\") return signalData;\n\tif (typeof signalData === \"function\") return Number(signalData(frame, fps)) || 0;\n\tif (Array.isArray(signalData) || ArrayBuffer.isView(signalData)) {\n\t\tconst arr = signalData;\n\t\tif (arr.length === 0) return 0;\n\t\tconst idx = Math.max(0, Math.min(arr.length - 1, Math.round(frame)));\n\t\treturn Number(arr[idx]) || 0;\n\t}\n\tif (typeof signalData === \"object\") {\n\t\tconst sd = signalData;\n\t\tif (typeof sd.get === \"function\") return Number(sd.get({\n\t\t\tframe,\n\t\t\tfps,\n\t\t\ttime: fps > 0 ? frame / fps : 0\n\t\t})) || 0;\n\t\tif (sd.type === \"Signal\" && sd.data) return extractRawSignalSample(sd.data, frame, fps);\n\t\tconst rawSamples = sd.samples ?? (typeof sd.channel === \"string\" && sd[sd.channel] !== void 0 ? sd[sd.channel] : void 0);\n\t\tif (Array.isArray(rawSamples) || ArrayBuffer.isView(rawSamples)) {\n\t\t\tconst arr = rawSamples;\n\t\t\tif (arr.length === 0) return 0;\n\t\t\tconst srcFps = Number(sd.fps) || 24;\n\t\t\tconst t = frame / (fps > 0 ? fps : 24);\n\t\t\tconst idx = Math.max(0, Math.min(arr.length - 1, Math.round(t * srcFps)));\n\t\t\treturn Number(arr[idx]) || 0;\n\t\t}\n\t\tif (sd.type === \"audio_extractor\" || sd.extractionMode !== void 0) {\n\t\t\tconst nodeId = sd.nodeId;\n\t\t\tif (nodeId) {\n\t\t\t\tconst ch = sd.channel ?? \"primary\";\n\t\t\t\tconst channelSamples = signalRegistry.getChannelSamples(nodeId, ch);\n\t\t\t\tif (channelSamples && channelSamples.length > 0) {\n\t\t\t\t\tconst srcFps = Number(sd.fps) || 24;\n\t\t\t\t\tconst t = frame / (fps > 0 ? fps : 24);\n\t\t\t\t\tconst idx = Math.max(0, Math.min(channelSamples.length - 1, Math.round(t * srcFps)));\n\t\t\t\t\treturn Number(channelSamples[idx]) || 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\t\tif (sd.type === \"generator\") {\n\t\t\tconst amp = typeof sd.amplitude === \"number\" ? sd.amplitude : 1;\n\t\t\tlet freq = typeof sd.frequency === \"number\" ? sd.frequency : 1;\n\t\t\tif (sd.syncToBpm && typeof sd.bpm === \"number\" && sd.bpm > 0) {\n\t\t\t\tconst bars = typeof sd.bars === \"number\" && sd.bars > 0 ? sd.bars : 1;\n\t\t\t\tfreq = sd.bpm / 60 / bars;\n\t\t\t}\n\t\t\tconst phase = typeof sd.phase === \"number\" ? sd.phase : 0;\n\t\t\tconst offset = typeof sd.offset === \"number\" ? sd.offset : 0;\n\t\t\tconst t = frame / (fps > 0 ? fps : 24);\n\t\t\tconst baseType = sd.baseType ?? \"sine\";\n\t\t\tconst fmEnabled = Boolean(sd.fmEnabled);\n\t\t\tlet tMod = t;\n\t\t\tif (fmEnabled) {\n\t\t\t\tconst fmAmp = Number(sd.fmAmplitude) || 1;\n\t\t\t\tconst fmFreq = Number(sd.fmFrequency) || .5;\n\t\t\t\ttMod = t + Math.sin(t * fmFreq * Math.PI * 2) * fmAmp;\n\t\t\t}\n\t\t\tlet val = 0;\n\t\t\tconst phaseNorm = (tMod * freq + phase / (Math.PI * 2)) % 1;\n\t\t\tconst normT = phaseNorm < 0 ? phaseNorm + 1 : phaseNorm;\n\t\t\tconst fract = (x) => (x % 1 + 1) % 1;\n\t\t\tswitch (baseType) {\n\t\t\t\tcase \"triangle\":\n\t\t\t\t\tval = 4 * Math.abs(normT - .5) - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"sawtooth\":\n\t\t\t\t\tval = 2 * normT - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"square\":\n\t\t\t\t\tval = normT < .5 ? 1 : -1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"constant\":\n\t\t\t\t\tval = 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"noise_smooth\": {\n\t\t\t\t\tconst noiseT = tMod * freq + phase;\n\t\t\t\t\tconst noiseI = Math.floor(noiseT);\n\t\t\t\t\tconst noiseF = noiseT - noiseI;\n\t\t\t\t\tconst noiseU = noiseF * noiseF * (3 - 2 * noiseF);\n\t\t\t\t\tconst n0 = fract(Math.sin(noiseI * 12.9898) * 43758.5453);\n\t\t\t\t\tconst n1 = fract(Math.sin((noiseI + 1) * 12.9898) * 43758.5453);\n\t\t\t\t\tval = (n0 * (1 - noiseU) + n1 * noiseU) * 2 - 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"noise_white\":\n\t\t\t\t\tval = fract(Math.sin(tMod * 12.9898 + phase) * 43758.5453) * 2 - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"pulse\": {\n\t\t\t\t\tconst pulseDuty = phase === 0 ? .5 : Math.max(.01, Math.min(.99, phase));\n\t\t\t\t\tval = fract(tMod * freq) < pulseDuty ? 1 : -1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"bounce\":\n\t\t\t\t\tval = Math.abs(Math.sin(tMod * freq * Math.PI + phase));\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"staircase\":\n\t\t\t\t\tval = Math.floor(normT * 8) / 7 * 2 - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tval = Math.sin(tMod * freq * Math.PI * 2 + phase);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn val * amp + offset;\n\t\t}\n\t\tif (sd.type === \"gate\") {\n\t\t\tconst source = sd.sourceSignal ?? sd.signal;\n\t\t\tconst thresh = typeof sd.threshold === \"number\" ? sd.threshold : .5;\n\t\t\tconst mode = sd.mode ?? \"gate\";\n\t\t\tconst invert = Boolean(sd.invert);\n\t\t\tconst debounceMs = typeof sd.debounceMs === \"number\" ? sd.debounceMs : 0;\n\t\t\tconst debounceFrames = Math.max(1, Math.round(debounceMs / 1e3 * fps));\n\t\t\tconst holdFrames = Math.max(1, Number(sd.holdFrames) || 4);\n\t\t\tlet output = 0;\n\t\t\tif (mode === \"gate\") output = extractRawSignalSample(source, frame, fps) >= thresh ? 1 : 0;\n\t\t\telse if (mode === \"trigger\") {\n\t\t\t\tlet lastTrigger = -Infinity;\n\t\t\t\tconst startF = Math.max(0, frame - 300);\n\t\t\t\tfor (let f = startF; f <= frame; f++) {\n\t\t\t\t\tconst val = extractRawSignalSample(source, f, fps);\n\t\t\t\t\tconst prev = f > 0 ? extractRawSignalSample(source, f - 1, fps) : 0;\n\t\t\t\t\tif (val >= thresh && prev < thresh && f - lastTrigger >= debounceFrames) lastTrigger = f;\n\t\t\t\t}\n\t\t\t\toutput = frame >= lastTrigger && frame < lastTrigger + holdFrames ? 1 : 0;\n\t\t\t} else if (mode === \"toggle\") {\n\t\t\t\tlet toggleCount = 0;\n\t\t\t\tlet lastTrigger = -Infinity;\n\t\t\t\tfor (let f = 0; f <= frame; f++) {\n\t\t\t\t\tconst val = extractRawSignalSample(source, f, fps);\n\t\t\t\t\tconst prev = f > 0 ? extractRawSignalSample(source, f - 1, fps) : 0;\n\t\t\t\t\tif (val >= thresh && prev < thresh && f - lastTrigger >= debounceFrames) {\n\t\t\t\t\t\ttoggleCount++;\n\t\t\t\t\t\tlastTrigger = f;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\toutput = toggleCount % 2 === 1 ? 1 : 0;\n\t\t\t}\n\t\t\treturn invert ? 1 - output : output;\n\t\t}\n\t\tif (sd.type === \"signal_math\") {\n\t\t\tconst valA = extractRawSignalSample(sd.signalA, frame, fps);\n\t\t\tconst valB = sd.signalB !== void 0 ? extractRawSignalSample(sd.signalB, frame, fps) : Number(sd.bValue) || 0;\n\t\t\tswitch (sd.operation) {\n\t\t\t\tcase \"add\": return valA + valB;\n\t\t\t\tcase \"subtract\": return valA - valB;\n\t\t\t\tcase \"multiply\": return valA * valB;\n\t\t\t\tcase \"divide\": return valB !== 0 ? valA / valB : 0;\n\t\t\t\tcase \"min\": return Math.min(valA, valB);\n\t\t\t\tcase \"max\": return Math.max(valA, valB);\n\t\t\t\tcase \"clamp\": {\n\t\t\t\t\tconst cMin = Number(sd.clampMin) || 0;\n\t\t\t\t\tconst cMax = Number(sd.clampMax) || 1;\n\t\t\t\t\treturn Math.max(cMin, Math.min(cMax, valA));\n\t\t\t\t}\n\t\t\t\tcase \"abs\": return Math.abs(valA);\n\t\t\t\tcase \"negate\": return -valA;\n\t\t\t\tcase \"invert\": return 1 - valA;\n\t\t\t\tcase \"power\": return valA ** (Number(sd.exponent) || 2);\n\t\t\t\tcase \"modulo\": return valB !== 0 ? valA % valB : 0;\n\t\t\t\tcase \"remap\": {\n\t\t\t\t\tconst inMin = Number(sd.inMin) || 0;\n\t\t\t\t\tconst inMax = Number(sd.inMax) || 1;\n\t\t\t\t\tconst outMin = Number(sd.outMin) || 0;\n\t\t\t\t\tconst outMax = Number(sd.outMax) || 1;\n\t\t\t\t\tconst rangeIn = inMax - inMin;\n\t\t\t\t\treturn outMin + (rangeIn !== 0 ? (valA - inMin) / rangeIn : 0) * (outMax - outMin);\n\t\t\t\t}\n\t\t\t\tcase \"normalize\": {\n\t\t\t\t\tconst minVal = Number(sd.aMin ?? sd.inMin) || 0;\n\t\t\t\t\tconst range = (Number(sd.aMax ?? sd.inMax) || 1) - minVal;\n\t\t\t\t\treturn range !== 0 ? Math.max(0, Math.min(1, (valA - minVal) / range)) : 0;\n\t\t\t\t}\n\t\t\t\tcase \"smoothstep\": {\n\t\t\t\t\tconst e0 = Number(sd.edge0) || 0;\n\t\t\t\t\tconst range = (Number(sd.edge1) || 1) - e0;\n\t\t\t\t\tconst x = range !== 0 ? Math.max(0, Math.min(1, (valA - e0) / range)) : 0;\n\t\t\t\t\treturn x * x * (3 - 2 * x);\n\t\t\t\t}\n\t\t\t\tcase \"custom\": return valA;\n\t\t\t\tdefault: return valA;\n\t\t\t}\n\t\t}\n\t\tif (typeof sd.value === \"number\") return sd.value;\n\t}\n\treturn 0;\n}\n/**\n* Evaluates an external Signal as an event accumulator / integrator.\n* On each rising edge above `threshold` (with `debounceFrames` guard),\n* the accumulator increments by 1.\n*/\nfunction evaluateSignalAccumulator(rawSource, currentFrame, fps, threshold = .15, debounceFrames = 2) {\n\tif (currentFrame < 0 || !rawSource) return 0;\n\tconst src = rawSource;\n\tlet count = 0;\n\tlet lastTriggerFrame = -Infinity;\n\tfor (let f = 0; f <= currentFrame; f++) {\n\t\tconst val = extractRawSignalSample(src, f, fps);\n\t\tconst prevVal = f > 0 ? extractRawSignalSample(src, f - 1, fps) : 0;\n\t\tif (val >= threshold && prevVal < threshold && f - lastTriggerFrame >= debounceFrames) {\n\t\t\tcount++;\n\t\t\tlastTriggerFrame = f;\n\t\t}\n\t}\n\treturn count;\n}\n/**\n* Evaluates an external Signal with smoothing window and linear remapping,\n* or as a discrete event accumulator.\n*/\nfunction evaluateSignal(source, frame, fps, signals = {}) {\n\tlet rawSource = signals[source.inputHandleId];\n\tif (rawSource === void 0 && signals) {\n\t\tconst signalKeys = Object.keys(signals);\n\t\tif (signalKeys.length === 1) rawSource = signals[signalKeys[0]];\n\t\telse if (signalKeys.length > 1) {\n\t\t\tconst matched = signalKeys.find((k) => k === source.inputHandleId);\n\t\t\trawSource = matched ? signals[matched] : signals[signalKeys[0]];\n\t\t}\n\t}\n\tif (source.channel && rawSource && typeof rawSource === \"object\") {\n\t\tconst candidate = rawSource[source.channel];\n\t\tif (candidate !== void 0) rawSource = candidate;\n\t\telse if (typeof rawSource.get !== \"function\") rawSource = {\n\t\t\t...rawSource,\n\t\t\tchannel: source.channel\n\t\t};\n\t}\n\tif (source.signalMode === \"accumulate\") {\n\t\tconst threshold = source.threshold ?? source.accumulateThreshold ?? .15;\n\t\tconst debounce = source.debounceFrames ?? 2;\n\t\tconst count$1 = evaluateSignalAccumulator(rawSource, frame, fps, threshold, debounce);\n\t\tconst mult = source.multiplier ?? 1;\n\t\tconst off = source.offset ?? 0;\n\t\treturn count$1 * mult + off;\n\t}\n\tconst multiplier = source.multiplier ?? 1;\n\tconst offset = source.offset ?? 0;\n\tconst windowFrames = Math.max(0, Math.round(source.smoothingWindowFrames ?? 0));\n\tif (windowFrames <= 1) return extractRawSignalSample(rawSource, frame, fps) * multiplier + offset;\n\tlet sum = 0;\n\tlet count = 0;\n\tconst startF = Math.max(0, frame - windowFrames + 1);\n\tfor (let f = startF; f <= frame; f++) {\n\t\tsum += extractRawSignalSample(rawSource, f, fps);\n\t\tcount++;\n\t}\n\treturn (count > 0 ? sum / count : 0) * multiplier + offset;\n}\nfunction lerp(a, b, t) {\n\treturn a + (b - a) * t;\n}\nfunction parseHexColor(hex) {\n\tlet h = hex.trim().replace(\"#\", \"\");\n\tif (h.length === 3) h = h[0] + h[0] + h[1] + h[1] + h[2] + h[2];\n\tif (h.length === 6) {\n\t\tconst num = parseInt(h, 16);\n\t\treturn [\n\t\t\tnum >> 16 & 255,\n\t\t\tnum >> 8 & 255,\n\t\t\tnum & 255,\n\t\t\t1\n\t\t];\n\t}\n\tif (h.length === 8) {\n\t\tconst num = parseInt(h, 16);\n\t\treturn [\n\t\t\tnum >> 24 & 255,\n\t\t\tnum >> 16 & 255,\n\t\t\tnum >> 8 & 255,\n\t\t\t(num & 255) / 255\n\t\t];\n\t}\n\treturn [\n\t\t255,\n\t\t255,\n\t\t255,\n\t\t1\n\t];\n}\nfunction lerpColor(c1, c2, t) {\n\tif (!c1.startsWith(\"#\") || !c2.startsWith(\"#\")) return t < .5 ? c1 : c2;\n\tconst [r1, g1, b1, a1] = parseHexColor(c1);\n\tconst [r2, g2, b2, a2] = parseHexColor(c2);\n\tconst r = Math.round(lerp(r1, r2, t));\n\tconst g = Math.round(lerp(g1, g2, t));\n\tconst b = Math.round(lerp(b1, b2, t));\n\tconst a = lerp(a1, a2, t);\n\tconst toHex = (n) => n.toString(16).padStart(2, \"0\");\n\tif (a >= .999) return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n\treturn `rgba(${r}, ${g}, ${b}, ${Math.round(a * 100) / 100})`;\n}\nfunction hueToRgb(p, q, t) {\n\tlet tt = t;\n\tif (tt < 0) tt += 1;\n\tif (tt > 1) tt -= 1;\n\tif (tt < 1 / 6) return p + (q - p) * 6 * tt;\n\tif (tt < 1 / 2) return q;\n\tif (tt < 2 / 3) return p + (q - p) * (2 / 3 - tt) * 6;\n\treturn p;\n}\nfunction rotateHue(hex, delta) {\n\tconst [r255, g255, b255, a] = parseHexColor(hex);\n\tconst r = r255 / 255;\n\tconst g = g255 / 255;\n\tconst b = b255 / 255;\n\tconst max = Math.max(r, g, b);\n\tconst min = Math.min(r, g, b);\n\tlet h = 0;\n\tlet s = 0;\n\tconst l = (max + min) / 2;\n\tif (max !== min) {\n\t\tconst d = max - min;\n\t\ts = l > .5 ? d / (2 - max - min) : d / (max + min);\n\t\tswitch (max) {\n\t\t\tcase r:\n\t\t\t\th = (g - b) / d + (g < b ? 6 : 0);\n\t\t\t\tbreak;\n\t\t\tcase g:\n\t\t\t\th = (b - r) / d + 2;\n\t\t\t\tbreak;\n\t\t\tcase b:\n\t\t\t\th = (r - g) / d + 4;\n\t\t\t\tbreak;\n\t\t}\n\t\th /= 6;\n\t}\n\th = (h + delta % 1 + 1) % 1;\n\tlet newR = l;\n\tlet newG = l;\n\tlet newB = l;\n\tif (s !== 0) {\n\t\tconst q = l < .5 ? l * (1 + s) : l + s - l * s;\n\t\tconst p = 2 * l - q;\n\t\tnewR = hueToRgb(p, q, h + 1 / 3);\n\t\tnewG = hueToRgb(p, q, h);\n\t\tnewB = hueToRgb(p, q, h - 1 / 3);\n\t}\n\tconst toHex = (n) => Math.round(Math.max(0, Math.min(255, n * 255))).toString(16).padStart(2, \"0\");\n\tif (a >= .999) return `#${toHex(newR)}${toHex(newG)}${toHex(newB)}`;\n\treturn `rgba(${Math.round(newR * 255)}, ${Math.round(newG * 255)}, ${Math.round(newB * 255)}, ${Math.round(a * 100) / 100})`;\n}\nconst COLOR_PROPS = new Set([\n\t\"fill\",\n\t\"fillColor\",\n\t\"strokeColor\",\n\t\"textBackgroundColor\",\n\t\"color\"\n]);\n/**\n* Standard keyframe track evaluation.\n*/\nfunction evaluateKeyframes(track, localFrame) {\n\tconst keyframes = track.keyframes ?? [];\n\tif (keyframes.length === 0) return 0;\n\tif (keyframes.length === 1) return keyframes[0].value;\n\tif (localFrame <= keyframes[0].frame) return keyframes[0].value;\n\tif (localFrame >= keyframes[keyframes.length - 1].frame) return keyframes[keyframes.length - 1].value;\n\tfor (let i = 0; i < keyframes.length - 1; i++) {\n\t\tconst kf0 = keyframes[i];\n\t\tconst kf1 = keyframes[i + 1];\n\t\tif (localFrame >= kf0.frame && localFrame <= kf1.frame) {\n\t\t\tconst delta = kf1.frame - kf0.frame;\n\t\t\tconst t = delta > 0 ? (localFrame - kf0.frame) / delta : 0;\n\t\t\tif (typeof kf0.value === \"boolean\") return t >= 1 ? kf1.value : kf0.value;\n\t\t\tif (typeof kf0.value === \"string\" && typeof kf1.value === \"string\") return lerpColor(kf0.value, kf1.value, t);\n\t\t\treturn lerp(Number(kf0.value) || 0, Number(kf1.value) || 0, t);\n\t\t}\n\t}\n\treturn keyframes[keyframes.length - 1].value;\n}\n/**\n* Evaluates an AnimationTrack at a given global or local frame.\n*/\nfunction evaluateTrackAtFrame(track, frame, fps = 24, context = {}) {\n\tconst localFrame = frame - (context.startFrame ?? 0);\n\tconst source = track.source ?? { type: \"keyframe\" };\n\tconst basePropVal = context.baseValues?.[track.prop];\n\tswitch (source.type) {\n\t\tcase \"keyframe\": return evaluateKeyframes(track, localFrame);\n\t\tcase \"wiggle\": {\n\t\t\tconst fallbackNum = typeof basePropVal === \"number\" ? basePropVal : 0;\n\t\t\tconst base = track.keyframes && track.keyframes.length > 0 ? Number(evaluateKeyframes(track, localFrame)) || 0 : fallbackNum;\n\t\t\treturn evaluateWiggle(source, localFrame / (fps > 0 ? fps : 24), base);\n\t\t}\n\t\tcase \"springOvershoot\": {\n\t\t\tlet v0 = 0;\n\t\t\tlet v1 = 1;\n\t\t\tif (track.keyframes && track.keyframes.length >= 2) {\n\t\t\t\tv0 = Number(track.keyframes[0].value) || 0;\n\t\t\t\tv1 = Number(track.keyframes[1].value) || 1;\n\t\t\t} else if (track.keyframes && track.keyframes.length === 1) {\n\t\t\t\tv0 = Number(basePropVal) || 0;\n\t\t\t\tv1 = Number(track.keyframes[0].value) || 0;\n\t\t\t} else if (typeof basePropVal === \"number\") {\n\t\t\t\tv0 = basePropVal;\n\t\t\t\tv1 = basePropVal;\n\t\t\t}\n\t\t\treturn evaluateSpringOvershoot(source, localFrame / (fps > 0 ? fps : 24), v0, v1);\n\t\t}\n\t\tcase \"signal\": {\n\t\t\tconst sigVal = evaluateSignal(source, frame, fps, context.signals);\n\t\t\tif (COLOR_PROPS.has(track.prop)) {\n\t\t\t\tconst src = source;\n\t\t\t\tconst colorA = src.colorA ?? \"#ffffff\";\n\t\t\t\tconst colorB = src.colorB ?? \"#ffffff\";\n\t\t\t\tconst mode = src.colorMode ?? \"interpolate\";\n\t\t\t\tif (mode === \"threshold\") return sigVal >= (src.colorThreshold ?? .5) ? colorB : colorA;\n\t\t\t\tif (mode === \"hueRotate\") return rotateHue(colorA, sigVal);\n\t\t\t\treturn lerpColor(colorA, colorB, Math.max(0, Math.min(1, sigVal)));\n\t\t\t}\n\t\t\treturn sigVal;\n\t\t}\n\t\tdefault: return evaluateKeyframes(track, localFrame);\n\t}\n}\n/**\n* Evaluates all animation tracks for a layer at `frame`.\n*/\nfunction evaluateAnimationAtFrame(animation, frame, fps = 24, context = {}) {\n\tconst result = {};\n\tif (!animation?.tracks) return result;\n\tfor (const track of animation.tracks) result[track.prop] = evaluateTrackAtFrame(track, frame, fps, context);\n\treturn result;\n}\n\n//#endregion\n//#region src/program/text-animations/advanced-builder.ts\n/**\n* Fluent Builder for Extended Text Animators.\n*/\nvar AdvancedTextAnimatorBuilder = class AdvancedTextAnimatorBuilder {\n\tname;\n\tprops = {};\n\tselectors = [];\n\tconstructor(name) {\n\t\tthis.name = name;\n\t}\n\tstatic create(name) {\n\t\treturn new AdvancedTextAnimatorBuilder(name);\n\t}\n\t/** Directional Skew */\n\tskew(angleDeg, axisDeg = 0) {\n\t\tthis.props.skew = angleDeg;\n\t\tthis.props.skewAxis = axisDeg;\n\t\treturn this;\n\t}\n\t/** Anchor Point Grouping and Preset Pivot */\n\tanchor(preset, grouping = \"character\", offsetX = 0, offsetY = 0) {\n\t\tthis.props.anchor = {\n\t\t\tgrouping,\n\t\t\tpreset,\n\t\t\tanchorX: .5,\n\t\t\tanchorY: .5,\n\t\t\toffsetX,\n\t\t\toffsetY\n\t\t};\n\t\treturn this;\n\t}\n\t/** Custom Anchor Point Coordinates (0 to 1 normalized) */\n\tanchorNormalized(ax, ay, grouping = \"character\") {\n\t\tthis.props.anchor = {\n\t\t\tgrouping,\n\t\t\tpreset: \"custom\",\n\t\t\tanchorX: ax,\n\t\t\tanchorY: ay,\n\t\t\toffsetX: 0,\n\t\t\toffsetY: 0\n\t\t};\n\t\treturn this;\n\t}\n\t/** 3D Spatial Z-Depth */\n\ttranslateZ(zPixels) {\n\t\tthis.props.translateZ = zPixels;\n\t\treturn this;\n\t}\n\t/** 3D Tilts */\n\ttilt3D(rx = 0, ry = 0, rz = 0) {\n\t\tthis.props.rotationX = rx;\n\t\tthis.props.rotationY = ry;\n\t\tthis.props.rotationZ = rz;\n\t\treturn this;\n\t}\n\t/** 3D Rotation along X axis */\n\trotationX(deg) {\n\t\tthis.props.rotationX = deg;\n\t\treturn this;\n\t}\n\t/** 3D Rotation along Y axis */\n\trotationY(deg) {\n\t\tthis.props.rotationY = deg;\n\t\treturn this;\n\t}\n\t/** 3D Rotation along Z axis */\n\trotationZ(deg) {\n\t\tthis.props.rotationZ = deg;\n\t\treturn this;\n\t}\n\t/** 3D Volumetric Formations */\n\tvolumetricFormation(mode = \"cylinder\", radius = 300, pitch = 120, totalAngle = 360, perspective = 1200, axis = \"y\") {\n\t\tthis.props.formation = {\n\t\t\tmode,\n\t\t\tradius,\n\t\t\tpitch,\n\t\t\ttotalAngle,\n\t\t\tperspective,\n\t\t\taxis\n\t\t};\n\t\treturn this;\n\t}\n\t/** Dynamic Line Spacing (Leading) */\n\tlineSpacing(extraLeadingPixels, lineAnchor = 0) {\n\t\tthis.props.lineSpacing = extraLeadingPixels;\n\t\tthis.props.lineAnchor = lineAnchor;\n\t\treturn this;\n\t}\n\t/** Normalized Line Anchor (0=top, 0.5=center, 1=bottom) */\n\tlineAnchor(anchor) {\n\t\tthis.props.lineAnchor = anchor;\n\t\treturn this;\n\t}\n\t/** Inertial Spring Settling Physics */\n\tspring(stiffness = 180, damping = 12, mass = 1, initialVelocity = 0) {\n\t\tthis.props.spring = {\n\t\t\tstiffness,\n\t\t\tdamping,\n\t\t\tmass,\n\t\t\tinitialVelocity,\n\t\t\tovershootMultiplier: 1\n\t\t};\n\t\treturn this;\n\t}\n\t/** Dynamic Stroke & Wireframe Properties */\n\tstroke(widthPixels, color = \"#ffffff\", fillOpacity = 1) {\n\t\tthis.props.stroke = {\n\t\t\tstrokeWidth: widthPixels,\n\t\t\tstrokeColor: color,\n\t\t\tstrokeAlign: \"center\",\n\t\t\tfillOpacity,\n\t\t\tdashOffset: 0\n\t\t};\n\t\treturn this;\n\t}\n\t/** Variable Font Axes */\n\tvariableFont(axes) {\n\t\tthis.props.variableAxes = axes;\n\t\treturn this;\n\t}\n\t/** Chromatic Aberration / Cyberpunk Glitch */\n\tchromaticGlitch(redShiftX, redShiftY = 0, blueShiftX = -redShiftX, blueShiftY = 0) {\n\t\tthis.props.chromaticGlitch = {\n\t\t\tredShiftX,\n\t\t\tredShiftY,\n\t\t\tblueShiftX,\n\t\t\tblueShiftY,\n\t\t\tsliceProbability: 0,\n\t\t\tsliceAmplitude: 0\n\t\t};\n\t\treturn this;\n\t}\n\t/** Multi-Band Audio Spectrum Equalizer */\n\taudioSpectrum(signalChannel, minFreqHz = 60, maxFreqHz = 16e3, maxScale = 2.5) {\n\t\tthis.props.audioSpectrum = {\n\t\t\tsignalChannel,\n\t\t\tminFreqHz,\n\t\t\tmaxFreqHz,\n\t\t\tscaleAxis: \"scaleY\",\n\t\t\tminScale: .2,\n\t\t\tmaxScale,\n\t\t\tpeakDecay: .8\n\t\t};\n\t\treturn this;\n\t}\n\t/** Long Shadow Extrusion */\n\tlongShadow(angle = 45, length = 40, color = \"#000000\", startOpacity = .8, endOpacity = 0, steps = 16) {\n\t\tthis.props.longShadow = {\n\t\t\tangle,\n\t\t\tlength,\n\t\t\tcolor,\n\t\t\tstartOpacity,\n\t\t\tendOpacity,\n\t\t\tsteps\n\t\t};\n\t\treturn this;\n\t}\n\t/** Particle Dust / Quantum Dissolve */\n\tparticleDissolve(progress = 0, dispersalAngle = 90, maxDisplacement = 120) {\n\t\tthis.props.particleDissolve = {\n\t\t\tprogress,\n\t\t\tdispersalAngle,\n\t\t\tmaxDisplacement,\n\t\t\tturbulence: .5,\n\t\t\tparticleSize: 2\n\t\t};\n\t\treturn this;\n\t}\n\t/** Add Expression Selector */\n\taddExpressionSelector(expression, mode = \"add\") {\n\t\tthis.selectors.push({\n\t\t\ttype: \"expression\",\n\t\t\texpression,\n\t\t\tmode,\n\t\t\tamount: 1\n\t\t});\n\t\treturn this;\n\t}\n\t/** Alias for addExpressionSelector */\n\texpressionSelector(expression, mode = \"add\") {\n\t\treturn this.addExpressionSelector(expression, mode);\n\t}\n\t/** Standard 2D Transforms */\n\tx(v) {\n\t\tthis.props.x = v;\n\t\treturn this;\n\t}\n\ty(v) {\n\t\tthis.props.y = v;\n\t\treturn this;\n\t}\n\tscale(v) {\n\t\tthis.props.scale = v;\n\t\treturn this;\n\t}\n\tscaleX(v) {\n\t\tthis.props.scaleX = v;\n\t\treturn this;\n\t}\n\tscaleY(v) {\n\t\tthis.props.scaleY = v;\n\t\treturn this;\n\t}\n\trotation(deg) {\n\t\tthis.props.rotation = deg;\n\t\treturn this;\n\t}\n\topacity(v) {\n\t\tthis.props.opacity = v;\n\t\treturn this;\n\t}\n\tblur(v) {\n\t\tthis.props.blur = v;\n\t\treturn this;\n\t}\n\tfillColor(hex) {\n\t\tthis.props.fillColor = hex;\n\t\treturn this;\n\t}\n\tbuild() {\n\t\treturn {\n\t\t\tname: this.name,\n\t\t\tselectors: this.selectors,\n\t\t\tprops: this.props\n\t\t};\n\t}\n};\n\n//#endregion\n//#region src/program/text-animations/advanced-types.ts\n/**\n* @file packages/compositions/src/program/text-animations/advanced-types.ts\n* Data contracts and Zod schemas for Advanced Motion Design & After Effects Extended Typography Engine.\n*/\nconst AnchorGroupingSchema = z.enum([\n\t\"character\",\n\t\"word\",\n\t\"line\",\n\t\"all\"\n]);\nconst AnchorPresetSchema = z.enum([\n\t\"center\",\n\t\"baseline\",\n\t\"bottom_left\",\n\t\"bottom_center\",\n\t\"bottom_right\",\n\t\"top_left\",\n\t\"top_center\",\n\t\"top_right\",\n\t\"custom\"\n]);\nconst TextAnchorConfigSchema = z.object({\n\tgrouping: AnchorGroupingSchema.default(\"character\"),\n\tpreset: AnchorPresetSchema.default(\"center\"),\n\tanchorX: z.number().default(.5),\n\tanchorY: z.number().default(.5),\n\toffsetX: z.number().default(0),\n\toffsetY: z.number().default(0)\n});\nconst SkewPropertiesSchema = z.object({\n\tskew: z.number().min(-90).max(90),\n\tskewAxis: z.number().default(0)\n});\nconst LineSpacingDynamicsSchema = z.object({\n\tlineSpacing: z.number(),\n\tlineAnchor: z.number().min(0).max(1).default(0)\n});\nconst VolumetricFormationModeSchema = z.enum([\n\t\"planar\",\n\t\"vortex\",\n\t\"cylinder\",\n\t\"helix\"\n]);\nconst VolumetricFormationConfigSchema = z.object({\n\tmode: VolumetricFormationModeSchema.default(\"planar\"),\n\tradius: z.number().default(300),\n\tpitch: z.number().default(120),\n\ttotalAngle: z.number().default(360),\n\taxis: z.enum([\n\t\t\"x\",\n\t\t\"y\",\n\t\t\"z\"\n\t]).default(\"y\"),\n\tperspective: z.number().positive().default(1200)\n});\nconst Spatial3DPropertiesSchema = z.object({\n\ttranslateZ: z.number().optional(),\n\trotationX: z.number().optional(),\n\trotationY: z.number().optional(),\n\trotationZ: z.number().optional(),\n\tformation: VolumetricFormationConfigSchema.optional()\n});\nconst SpringPhysicsSchema = z.object({\n\tstiffness: z.number().positive().default(180),\n\tdamping: z.number().positive().default(12),\n\tmass: z.number().positive().default(1),\n\tinitialVelocity: z.number().default(0),\n\tovershootMultiplier: z.number().min(.5).max(3).default(1)\n});\nconst ExpressionSelectorSchema = z.object({\n\ttype: z.literal(\"expression\"),\n\tname: z.string().optional(),\n\texpression: z.string(),\n\tmode: z.enum([\n\t\t\"add\",\n\t\t\"subtract\",\n\t\t\"intersect\",\n\t\t\"min\",\n\t\t\"max\",\n\t\t\"difference\"\n\t]).default(\"add\"),\n\tamount: z.number().default(1)\n});\nconst DynamicStrokePropertiesSchema = z.object({\n\tstrokeWidth: z.number().min(0).default(0),\n\tstrokeColor: z.string().default(\"#ffffff\"),\n\tstrokeAlign: z.enum([\n\t\t\"center\",\n\t\t\"inside\",\n\t\t\"outside\"\n\t]).default(\"center\"),\n\tfillOpacity: z.number().min(0).max(1).default(1),\n\tdashArray: z.tuple([z.number(), z.number()]).optional(),\n\tdashOffset: z.number().default(0)\n});\nconst KineticMarqueeConfigSchema = z.object({\n\tdirection: z.enum([\n\t\t\"left\",\n\t\t\"right\",\n\t\t\"up\",\n\t\t\"down\"\n\t]).default(\"left\"),\n\tvelocity: z.number().default(120),\n\tloop: z.boolean().default(true),\n\trepeatGap: z.number().default(80),\n\tsnap: z.object({\n\t\tenabled: z.boolean().default(false),\n\t\tgranularity: z.enum([\n\t\t\t\"character\",\n\t\t\t\"word\",\n\t\t\t\"line\"\n\t\t]).default(\"word\"),\n\t\tstopIndex: z.number().default(0),\n\t\tdecelEase: z.string().default(\"cubic.out\")\n\t}).optional()\n});\nconst VariableFontAxesSchema = z.object({\n\tweight: z.number().min(100).max(1e3).optional(),\n\twidth: z.number().min(50).max(200).optional(),\n\tslant: z.number().min(-25).max(25).optional(),\n\titalic: z.number().min(0).max(1).optional(),\n\topticalSize: z.number().min(6).max(144).optional()\n});\nconst ChromaticGlitchConfigSchema = z.object({\n\tredShiftX: z.number().default(0),\n\tredShiftY: z.number().default(0),\n\tblueShiftX: z.number().default(0),\n\tblueShiftY: z.number().default(0),\n\tsliceProbability: z.number().min(0).max(1).default(0),\n\tsliceAmplitude: z.number().default(0)\n});\nconst AudioSpectrumTypographySchema = z.object({\n\tsignalChannel: z.string(),\n\tminFreqHz: z.number().default(60),\n\tmaxFreqHz: z.number().default(16e3),\n\tscaleAxis: z.enum([\n\t\t\"scaleY\",\n\t\t\"scaleX\",\n\t\t\"scale\",\n\t\t\"y\"\n\t]).default(\"scaleY\"),\n\tminScale: z.number().default(.2),\n\tmaxScale: z.number().default(2.5),\n\tpeakDecay: z.number().min(0).max(.99).default(.8)\n});\nconst LongShadowConfigSchema = z.object({\n\tangle: z.number().default(45),\n\tlength: z.number().min(0).default(0),\n\tcolor: z.string().default(\"#000000\"),\n\tstartOpacity: z.number().min(0).max(1).default(.8),\n\tendOpacity: z.number().min(0).max(1).default(0),\n\tsteps: z.number().int().min(4).max(64).default(16)\n});\nconst ParticleDissolveConfigSchema = z.object({\n\tprogress: z.number().min(0).max(1).default(0),\n\tdispersalAngle: z.number().default(90),\n\tmaxDisplacement: z.number().default(120),\n\tturbulence: z.number().default(.5),\n\tparticleSize: z.number().default(2)\n});\nconst ExtendedGlyphPropertiesSchema = z.object({\n\tx: z.number().optional(),\n\ty: z.number().optional(),\n\ttranslateZ: z.number().optional(),\n\tscale: z.number().optional(),\n\tscaleX: z.number().optional(),\n\tscaleY: z.number().optional(),\n\trotation: z.number().optional(),\n\trotationX: z.number().optional(),\n\trotationY: z.number().optional(),\n\trotationZ: z.number().optional(),\n\tskew: z.number().optional(),\n\tskewAxis: z.number().optional(),\n\ttracking: z.number().optional(),\n\tlineSpacing: z.number().optional(),\n\tlineAnchor: z.number().optional(),\n\tanchor: TextAnchorConfigSchema.optional(),\n\topacity: z.number().optional(),\n\tblur: z.number().optional(),\n\tfillColor: z.string().optional(),\n\tstroke: DynamicStrokePropertiesSchema.optional(),\n\tvariableAxes: VariableFontAxesSchema.optional(),\n\tchromaticGlitch: ChromaticGlitchConfigSchema.optional(),\n\tlongShadow: LongShadowConfigSchema.optional(),\n\tparticleDissolve: ParticleDissolveConfigSchema.optional(),\n\taudioSpectrum: AudioSpectrumTypographySchema.optional(),\n\tspring: SpringPhysicsSchema.optional()\n});\nconst AdvancedTextAnimatorSchema = z.object({\n\tname: z.string().default(\"AdvancedAnimator\"),\n\tselectors: z.array(z.record(z.string(), z.unknown())).default([]),\n\tprops: ExtendedGlyphPropertiesSchema\n});\n\n//#endregion\n//#region src/program/text-animations/types.ts\n/**\n* @file packages/compositions/src/program/text-animations/types.ts\n* Data contracts and Zod schemas for After Effects Parity Text Animation Engine.\n*/\nconst Vec2Schema = z.object({\n\tx: z.number(),\n\ty: z.number()\n});\nconst CubicBezierSegmentSchema = z.object({\n\tp0: Vec2Schema,\n\tp1: Vec2Schema,\n\tp2: Vec2Schema,\n\tp3: Vec2Schema\n});\nconst TextPathSourceSchema = z.discriminatedUnion(\"type\", [\n\tz.object({\n\t\ttype: z.literal(\"svg\"),\n\t\td: z.string().min(1, \"SVG path string cannot be empty\")\n\t}),\n\tz.object({\n\t\ttype: z.literal(\"bezier\"),\n\t\tsegments: z.array(CubicBezierSegmentSchema).min(1)\n\t}),\n\tz.object({\n\t\ttype: z.literal(\"ellipse\"),\n\t\tcx: z.number(),\n\t\tcy: z.number(),\n\t\trx: z.number().positive(),\n\t\try: z.number().positive(),\n\t\tstartAngleDeg: z.number().default(0),\n\t\tendAngleDeg: z.number().default(360)\n\t}),\n\tz.object({\n\t\ttype: z.literal(\"wave\"),\n\t\tstartX: z.number(),\n\t\tstartY: z.number(),\n\t\tlength: z.number().positive(),\n\t\tamplitude: z.number(),\n\t\tfrequency: z.number().positive(),\n\t\tphaseDeg: z.number().default(0)\n\t})\n]);\nconst TextPathOptionsSchema = z.object({\n\tpath: TextPathSourceSchema,\n\tfirstMargin: z.number().default(0),\n\tlastMargin: z.number().default(0),\n\treversePath: z.boolean().default(false),\n\tperpendicularToPath: z.boolean().default(true),\n\tforceAlignment: z.boolean().default(false),\n\tloop: z.boolean().default(false),\n\tbaselineOffset: z.enum([\n\t\t\"baseline\",\n\t\t\"center\",\n\t\t\"ascender\",\n\t\t\"descender\"\n\t]).default(\"baseline\"),\n\tbaselineShift: z.number().default(0)\n});\nconst TextCursorStyleSchema = z.enum([\n\t\"bar\",\n\t\"underscore\",\n\t\"block\",\n\t\"custom\"\n]);\nconst TextCursorConfigSchema = z.object({\n\tenabled: z.boolean().default(true),\n\tstyle: TextCursorStyleSchema.default(\"bar\"),\n\tcustomChar: z.string().default(\"|\"),\n\tcolor: z.string().optional(),\n\tblinkFrequency: z.number().min(0).default(2),\n\thideOnComplete: z.boolean().default(false),\n\twidth: z.number().positive().default(2.5),\n\tspacing: z.number().default(3)\n});\nconst TypingCadenceSchema = z.discriminatedUnion(\"mode\", [z.object({ mode: z.literal(\"constant\") }), z.object({\n\tmode: z.literal(\"human\"),\n\tjitter: z.number().min(0).max(1).default(.35),\n\tcommaPauseMultiplier: z.number().min(1).default(3),\n\tsentencePauseMultiplier: z.number().min(1).default(5.5),\n\tparagraphPauseMultiplier: z.number().min(1).default(7)\n})]);\nconst TextScrambleConfigSchema = z.object({\n\tenabled: z.boolean().default(false),\n\tcharset: z.enum([\n\t\t\"ascii\",\n\t\t\"alphanumeric\",\n\t\t\"matrix\",\n\t\t\"binary\",\n\t\t\"hex\",\n\t\t\"custom\"\n\t]).default(\"alphanumeric\"),\n\tcustomCharset: z.string().optional(),\n\tscrambleFramesPerChar: z.number().int().min(1).default(8),\n\thighlightProbability: z.number().min(0).max(1).default(.25),\n\tscrambleColor: z.string().optional()\n});\nconst TypewriterAnimatorSchema = z.object({\n\tgranularity: z.enum([\n\t\t\"character\",\n\t\t\"word\",\n\t\t\"line\"\n\t]).default(\"character\"),\n\tcursor: TextCursorConfigSchema.default({\n\t\tenabled: true,\n\t\tstyle: \"bar\",\n\t\tcustomChar: \"|\",\n\t\tblinkFrequency: 2,\n\t\thideOnComplete: false,\n\t\twidth: 2.5,\n\t\tspacing: 3\n\t}),\n\tcadence: TypingCadenceSchema.default({\n\t\tmode: \"human\",\n\t\tjitter: .35,\n\t\tcommaPauseMultiplier: 3,\n\t\tsentencePauseMultiplier: 5.5,\n\t\tparagraphPauseMultiplier: 7\n\t}),\n\tscramble: TextScrambleConfigSchema.default({\n\t\tenabled: false,\n\t\tcharset: \"alphanumeric\",\n\t\tscrambleFramesPerChar: 8,\n\t\thighlightProbability: .25\n\t}),\n\tsoundSync: z.boolean().default(false)\n});\nconst SelectorBasedOnSchema = z.enum([\n\t\"characters\",\n\t\"characters_excluding_spaces\",\n\t\"words\",\n\t\"lines\"\n]);\nconst SelectorUnitsSchema = z.enum([\"percentage\", \"index\"]);\nconst SelectorShapeSchema = z.enum([\n\t\"square\",\n\t\"ramp_up\",\n\t\"ramp_down\",\n\t\"triangle\",\n\t\"round\",\n\t\"smooth\"\n]);\nconst SelectorModeSchema = z.enum([\n\t\"add\",\n\t\"subtract\",\n\t\"intersect\",\n\t\"min\",\n\t\"max\",\n\t\"difference\"\n]);\nconst TextRangeSelectorSchema = z.object({\n\ttype: z.literal(\"range\"),\n\tstart: z.number().default(0),\n\tend: z.number().default(1),\n\toffset: z.number().default(0),\n\tunits: SelectorUnitsSchema.default(\"percentage\"),\n\tbasedOn: SelectorBasedOnSchema.default(\"characters\"),\n\tshape: SelectorShapeSchema.default(\"square\"),\n\tmode: SelectorModeSchema.default(\"add\"),\n\tamount: z.number().min(-1).max(1).default(1),\n\teaseHigh: z.number().min(-1).max(1).default(0),\n\teaseLow: z.number().min(-1).max(1).default(0),\n\trandomizeOrder: z.boolean().default(false),\n\trandomSeed: z.number().int().default(12345)\n});\nconst TextWigglySelectorSchema = z.object({\n\ttype: z.literal(\"wiggly\"),\n\twigglesPerSecond: z.number().positive().default(2),\n\tcorrelation: z.number().min(0).max(1).default(.5),\n\ttemporalPhaseDeg: z.number().default(0),\n\tspatialPhaseDeg: z.number().default(0),\n\tminAmount: z.number().min(-1).max(1).default(-1),\n\tmaxAmount: z.number().min(-1).max(1).default(1),\n\trandomSeed: z.number().int().default(42),\n\tbasedOn: SelectorBasedOnSchema.default(\"characters\"),\n\tmode: SelectorModeSchema.default(\"intersect\")\n});\nconst TextSignalSelectorSchema = z.object({\n\ttype: z.literal(\"signal\"),\n\tsignalId: z.string(),\n\tmultiplier: z.number().default(1),\n\toffset: z.number().default(0),\n\tphaseSpread: z.number().default(0),\n\tbasedOn: SelectorBasedOnSchema.default(\"characters\"),\n\tmode: SelectorModeSchema.default(\"add\")\n});\nconst TextSelectorSchema = z.discriminatedUnion(\"type\", [\n\tTextRangeSelectorSchema,\n\tTextWigglySelectorSchema,\n\tTextSignalSelectorSchema\n]);\nconst AnimatableGlyphPropsSchema = z.object({\n\tx: z.number().optional(),\n\ty: z.number().optional(),\n\tz: z.number().optional(),\n\tscale: z.number().optional(),\n\tscaleX: z.number().optional(),\n\tscaleY: z.number().optional(),\n\trotation: z.number().optional(),\n\trotationX: z.number().optional(),\n\trotationY: z.number().optional(),\n\tskew: z.number().optional(),\n\tskewAxis: z.number().optional(),\n\ttracking: z.number().optional(),\n\tlineSpacing: z.number().optional(),\n\topacity: z.number().min(0).max(1).optional(),\n\tfillColor: z.string().optional(),\n\tstrokeColor: z.string().optional(),\n\tstrokeWidth: z.number().min(0).optional(),\n\tblur: z.number().min(0).optional(),\n\tcharacterOffset: z.number().int().optional()\n});\nconst GlyphAnchorGroupingSchema = z.enum([\n\t\"character\",\n\t\"word\",\n\t\"line\",\n\t\"all\"\n]);\nconst GlyphAnchorPointSchema = z.object({\n\tgrouping: GlyphAnchorGroupingSchema.default(\"character\"),\n\tanchorX: z.number().default(.5),\n\tanchorY: z.number().default(.8)\n});\nconst AETextAnimatorSchema = z.object({\n\tname: z.string().default(\"Animator\"),\n\tselectors: z.array(TextSelectorSchema).min(1),\n\tprops: AnimatableGlyphPropsSchema,\n\tanchor: GlyphAnchorPointSchema.default({\n\t\tgrouping: \"character\",\n\t\tanchorX: .5,\n\t\tanchorY: .8\n\t})\n});\nconst EnhancedTextNodeSchema = z.object({\n\ttext: z.string(),\n\tfontFamily: z.string().default(\"Inter\"),\n\tfontSize: z.number().positive().default(24),\n\tfontWeight: z.union([z.number(), z.string()]).default(400),\n\tfill: z.string().default(\"#ffffff\"),\n\tletterSpacing: z.number().default(0),\n\tlineHeight: z.number().positive().default(1.2),\n\ttextAlign: z.enum([\n\t\t\"left\",\n\t\t\"center\",\n\t\t\"right\"\n\t]).default(\"left\"),\n\tpathOptions: TextPathOptionsSchema.optional(),\n\ttypewriter: TypewriterAnimatorSchema.optional(),\n\tanimators: z.array(AETextAnimatorSchema).default([])\n});\n\n//#endregion\n//#region src/program/text-animations/builder.ts\n/**\n* @file packages/compositions/src/program/text-animations/builder.ts\n* Fluent builders for Path-Following Text and After Effects Text Animators.\n*/\n/**\n* Fluent builder for creating Path-Following Text configurations.\n*/\nvar TextPathBuilder = class TextPathBuilder {\n\toptions = {\n\t\tfirstMargin: 0,\n\t\tlastMargin: 0,\n\t\treversePath: false,\n\t\tperpendicularToPath: true,\n\t\tforceAlignment: false,\n\t\tloop: false,\n\t\tbaselineOffset: \"baseline\",\n\t\tbaselineShift: 0\n\t};\n\tstatic fromSvg(svgPath) {\n\t\tconst builder = new TextPathBuilder();\n\t\tbuilder.options.path = {\n\t\t\ttype: \"svg\",\n\t\t\td: svgPath\n\t\t};\n\t\treturn builder;\n\t}\n\tstatic fromBezier(segments) {\n\t\tconst builder = new TextPathBuilder();\n\t\tbuilder.options.path = {\n\t\t\ttype: \"bezier\",\n\t\t\tsegments\n\t\t};\n\t\treturn builder;\n\t}\n\tstatic fromCurve(curve) {\n\t\treturn TextPathBuilder.fromBezier([curve]);\n\t}\n\tstatic circularBadge(cx, cy, radius) {\n\t\tconst builder = new TextPathBuilder();\n\t\tbuilder.options.path = {\n\t\t\ttype: \"ellipse\",\n\t\t\tcx,\n\t\t\tcy,\n\t\t\trx: radius,\n\t\t\try: radius,\n\t\t\tstartAngleDeg: 0,\n\t\t\tendAngleDeg: 360\n\t\t};\n\t\tbuilder.options.loop = true;\n\t\treturn builder;\n\t}\n\tstatic ellipse(cx, cy, rx, ry, startAngleDeg = 0, endAngleDeg = 360) {\n\t\tconst builder = new TextPathBuilder();\n\t\tbuilder.options.path = {\n\t\t\ttype: \"ellipse\",\n\t\t\tcx,\n\t\t\tcy,\n\t\t\trx,\n\t\t\try,\n\t\t\tstartAngleDeg,\n\t\t\tendAngleDeg\n\t\t};\n\t\tbuilder.options.loop = Math.abs(endAngleDeg - startAngleDeg) >= 360;\n\t\treturn builder;\n\t}\n\tstatic wave(startX, startY, length, amplitude, frequency, phaseDeg = 0) {\n\t\tconst builder = new TextPathBuilder();\n\t\tbuilder.options.path = {\n\t\t\ttype: \"wave\",\n\t\t\tstartX,\n\t\t\tstartY,\n\t\t\tlength,\n\t\t\tamplitude,\n\t\t\tfrequency,\n\t\t\tphaseDeg\n\t\t};\n\t\treturn builder;\n\t}\n\tfirstMargin(margin) {\n\t\tthis.options.firstMargin = margin;\n\t\treturn this;\n\t}\n\tlastMargin(margin) {\n\t\tthis.options.lastMargin = margin;\n\t\treturn this;\n\t}\n\treversePath(reverse) {\n\t\tthis.options.reversePath = reverse;\n\t\treturn this;\n\t}\n\tperpendicularToPath(perpendicular) {\n\t\tthis.options.perpendicularToPath = perpendicular;\n\t\treturn this;\n\t}\n\tforceAlignment(force) {\n\t\tthis.options.forceAlignment = force;\n\t\treturn this;\n\t}\n\tloop(isLoop) {\n\t\tthis.options.loop = isLoop;\n\t\treturn this;\n\t}\n\tbaselineOffset(offset) {\n\t\tthis.options.baselineOffset = offset;\n\t\treturn this;\n\t}\n\tbaselineShift(shiftPixels) {\n\t\tthis.options.baselineShift = shiftPixels;\n\t\treturn this;\n\t}\n\tbuild() {\n\t\treturn TextPathOptionsSchema.parse(this.options);\n\t}\n};\n/**\n* Fluent builder for After Effects Range, Wiggly, and Signal Animators.\n*/\nvar TextAnimatorBuilder = class TextAnimatorBuilder {\n\tname = \"Animator\";\n\tselectors = [];\n\tprops = {};\n\tanchor = {\n\t\tgrouping: \"character\",\n\t\tanchorX: .5,\n\t\tanchorY: .8\n\t};\n\tstatic create(name) {\n\t\tconst builder = new TextAnimatorBuilder();\n\t\tbuilder.name = name;\n\t\treturn builder;\n\t}\n\t/** Adds an After Effects Range Selector */\n\taddRangeSelector(config) {\n\t\tconst rawHigh = config.easeHigh ?? 0;\n\t\tconst easeHigh = Math.abs(rawHigh) > 1 ? rawHigh / 100 : rawHigh;\n\t\tconst rawLow = config.easeLow ?? 0;\n\t\tconst easeLow = Math.abs(rawLow) > 1 ? rawLow / 100 : rawLow;\n\t\tthis.selectors.push({\n\t\t\ttype: \"range\",\n\t\t\tstart: config.start ?? 0,\n\t\t\tend: config.end ?? 1,\n\t\t\toffset: config.offset ?? 0,\n\t\t\tunits: \"percentage\",\n\t\t\tbasedOn: config.basedOn ?? \"characters\",\n\t\t\tshape: config.shape ?? \"smooth\",\n\t\t\tmode: config.mode ?? \"add\",\n\t\t\tamount: 1,\n\t\t\teaseHigh: Math.max(-1, Math.min(1, easeHigh)),\n\t\t\teaseLow: Math.max(-1, Math.min(1, easeLow)),\n\t\t\trandomizeOrder: config.randomizeOrder ?? false,\n\t\t\trandomSeed: config.randomSeed ?? 12345\n\t\t});\n\t\treturn this;\n\t}\n\t/** Adds an After Effects Wiggly Selector for procedural organic flutter */\n\taddWigglySelector(config) {\n\t\tthis.selectors.push({\n\t\t\ttype: \"wiggly\",\n\t\t\twigglesPerSecond: config.wigglesPerSecond ?? 2,\n\t\t\tcorrelation: config.correlation ?? .5,\n\t\t\ttemporalPhaseDeg: 0,\n\t\t\tspatialPhaseDeg: 0,\n\t\t\tminAmount: config.minAmount ?? -1,\n\t\t\tmaxAmount: config.maxAmount ?? 1,\n\t\t\trandomSeed: config.randomSeed ?? 42,\n\t\t\tbasedOn: \"characters\",\n\t\t\tmode: config.mode ?? \"intersect\"\n\t\t});\n\t\treturn this;\n\t}\n\t/** Adds a reactive signal selector */\n\taddSignalSelector(signalId, multiplier = 1, phaseSpread = 0, offset = 0, mode = \"add\") {\n\t\tthis.selectors.push({\n\t\t\ttype: \"signal\",\n\t\t\tsignalId,\n\t\t\tmultiplier,\n\t\t\toffset,\n\t\t\tphaseSpread,\n\t\t\tbasedOn: \"characters\",\n\t\t\tmode\n\t\t});\n\t\treturn this;\n\t}\n\tx(pixels) {\n\t\tthis.props.x = pixels;\n\t\treturn this;\n\t}\n\ty(pixels) {\n\t\tthis.props.y = pixels;\n\t\treturn this;\n\t}\n\tz(pixels) {\n\t\tthis.props.z = pixels;\n\t\treturn this;\n\t}\n\tscale(scaleValue) {\n\t\tthis.props.scale = scaleValue;\n\t\treturn this;\n\t}\n\tscaleX(scaleValue) {\n\t\tthis.props.scaleX = scaleValue;\n\t\treturn this;\n\t}\n\tscaleY(scaleValue) {\n\t\tthis.props.scaleY = scaleValue;\n\t\treturn this;\n\t}\n\trotation(degrees) {\n\t\tthis.props.rotation = degrees;\n\t\treturn this;\n\t}\n\trotationX(degrees) {\n\t\tthis.props.rotationX = degrees;\n\t\treturn this;\n\t}\n\trotationY(degrees) {\n\t\tthis.props.rotationY = degrees;\n\t\treturn this;\n\t}\n\tskew(degrees) {\n\t\tthis.props.skew = degrees;\n\t\treturn this;\n\t}\n\tskewAxis(degrees) {\n\t\tthis.props.skewAxis = degrees;\n\t\treturn this;\n\t}\n\topacity(value) {\n\t\tthis.props.opacity = value;\n\t\treturn this;\n\t}\n\tblur(pixels) {\n\t\tthis.props.blur = pixels;\n\t\treturn this;\n\t}\n\tfill(colorHex) {\n\t\treturn this.fillColor(colorHex);\n\t}\n\tfillColor(colorHex) {\n\t\tthis.props.fillColor = colorHex;\n\t\treturn this;\n\t}\n\tstrokeColor(colorHex) {\n\t\tthis.props.strokeColor = colorHex;\n\t\treturn this;\n\t}\n\tstrokeWidth(pixels) {\n\t\tthis.props.strokeWidth = pixels;\n\t\treturn this;\n\t}\n\ttracking(spacingPixels) {\n\t\tthis.props.tracking = spacingPixels;\n\t\treturn this;\n\t}\n\tlineSpacing(spacingPixels) {\n\t\tthis.props.lineSpacing = spacingPixels;\n\t\treturn this;\n\t}\n\tcharacterOffset(offset) {\n\t\tthis.props.characterOffset = offset;\n\t\treturn this;\n\t}\n\tanchorGrouping(grouping, anchorX = .5, anchorY = .8) {\n\t\tthis.anchor = {\n\t\t\tgrouping,\n\t\t\tanchorX,\n\t\t\tanchorY\n\t\t};\n\t\treturn this;\n\t}\n\tbuild() {\n\t\treturn AETextAnimatorSchema.parse({\n\t\t\tname: this.name,\n\t\t\tselectors: this.selectors,\n\t\t\tprops: this.props,\n\t\t\tanchor: this.anchor\n\t\t});\n\t}\n};\n\n//#endregion\n//#region src/program/text-animations/math.ts\n/**\n* Evaluates closed-form underdamped harmonic oscillator for spring physics:\n*\n* x(t) = target + (x0 - target) * exp(-zeta * omega_n * t) *\n* [ cos(omega_d * t) + (zeta / sqrt(1 - zeta^2)) * sin(omega_d * t) ]\n*\n* @param t Time in seconds since excitation\n* @param stiffness Spring stiffness (k)\n* @param damping Damping coefficient (c)\n* @param mass Mass of glyph (m)\n* @param initialVelocity Initial velocity (v0)\n* @returns Settled scalar progress in [0, 1] with overshoot\n*/\nfunction evaluateSpringProgress(t, stiffness = 180, damping = 12, mass = 1, initialVelocity = 0) {\n\tif (t <= 0) return 0;\n\tconst omega_n = Math.sqrt(Math.max(1e-4, stiffness) / Math.max(1e-4, mass));\n\tconst zeta = damping / (2 * Math.sqrt(Math.max(1e-4, stiffness * mass)));\n\tif (zeta < 1) {\n\t\tconst omega_d = omega_n * Math.sqrt(1 - zeta * zeta);\n\t\tconst decay = Math.exp(-zeta * omega_n * t);\n\t\tconst c1 = -1;\n\t\tconst c2 = (initialVelocity - zeta * omega_n * -1) / Math.max(1e-6, omega_d);\n\t\tconst displacement = decay * (c1 * Math.cos(omega_d * t) + c2 * Math.sin(omega_d * t));\n\t\treturn Math.min(2, Math.max(-1, 1 + displacement));\n\t} else if (Math.abs(zeta - 1) < 1e-4) {\n\t\tconst decay = Math.exp(-omega_n * t);\n\t\treturn 1 + (-1 + (initialVelocity - omega_n) * t) * decay;\n\t} else {\n\t\tconst s1 = -omega_n * (zeta - Math.sqrt(zeta * zeta - 1));\n\t\tconst s2 = -omega_n * (zeta + Math.sqrt(zeta * zeta - 1));\n\t\tconst c1 = (initialVelocity + s2) / Math.max(1e-6, s1 - s2);\n\t\tconst c2 = -1 - c1;\n\t\treturn 1 + (c1 * Math.exp(s1 * t) + c2 * Math.exp(s2 * t));\n\t}\n}\n/**\n* Evaluates 2D Directional Skew matrix components:\n*\n* S(theta, phi) = R(phi) * [ 1 tan(theta) ] * R(-phi)\n* [ 0 1 ]\n*\n* @param skewDeg Skew angle in degrees\n* @param skewAxisDeg Skew axis in degrees\n* @returns 2x2 affine shear matrix components [m00, m01, m10, m11]\n*/\nfunction evaluateSkewMatrix(skewDeg, skewAxisDeg = 0) {\n\tif (skewDeg === 0) return [\n\t\t1,\n\t\t0,\n\t\t0,\n\t\t1\n\t];\n\tconst theta = skewDeg * Math.PI / 180;\n\tconst phi = skewAxisDeg * Math.PI / 180;\n\tconst cosPhi = Math.cos(phi);\n\tconst sinPhi = Math.sin(phi);\n\tconst tanTheta = Math.tan(theta);\n\treturn [\n\t\t1 - tanTheta * cosPhi * sinPhi,\n\t\ttanTheta * cosPhi * cosPhi,\n\t\t-tanTheta * sinPhi * sinPhi,\n\t\t1 + tanTheta * sinPhi * cosPhi\n\t];\n}\n/**\n* Computes anchor pivot coordinates relative to glyph bounding box:\n*\n* @param bbox Glyph bounding box { width, height, ascender, descender }\n* @param config Text anchor configuration\n* @returns Pivot offset (px, py) relative to glyph quad center\n*/\nfunction computeAnchorPivotOffset(bbox, config) {\n\tlet normX = config.anchorX;\n\tlet normY = config.anchorY;\n\tswitch (config.preset) {\n\t\tcase \"center\":\n\t\t\tnormX = .5;\n\t\t\tnormY = .5;\n\t\t\tbreak;\n\t\tcase \"baseline\":\n\t\t\tnormX = .5;\n\t\t\tnormY = bbox.height > 0 ? bbox.ascender / bbox.height : .8;\n\t\t\tbreak;\n\t\tcase \"bottom_left\":\n\t\t\tnormX = 0;\n\t\t\tnormY = 1;\n\t\t\tbreak;\n\t\tcase \"bottom_center\":\n\t\t\tnormX = .5;\n\t\t\tnormY = 1;\n\t\t\tbreak;\n\t\tcase \"bottom_right\":\n\t\t\tnormX = 1;\n\t\t\tnormY = 1;\n\t\t\tbreak;\n\t\tcase \"top_left\":\n\t\t\tnormX = 0;\n\t\t\tnormY = 0;\n\t\t\tbreak;\n\t\tcase \"top_center\":\n\t\t\tnormX = .5;\n\t\t\tnormY = 0;\n\t\t\tbreak;\n\t\tcase \"top_right\":\n\t\t\tnormX = 1;\n\t\t\tnormY = 0;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tnormX = .5;\n\t\t\tnormY = .5;\n\t\t\tbreak;\n\t}\n\treturn {\n\t\tpx: (normX - .5) * bbox.width + config.offsetX,\n\t\tpy: (normY - .5) * bbox.height + config.offsetY\n\t};\n}\n/**\n* Computes leading displacement per line based on lineAnchor:\n*\n* @param lineIndex 0-based index of current line\n* @param lineCount Total lines in paragraph\n* @param lineSpacing Additional leading in pixels\n* @param lineAnchor Pivot line anchor in [0, 1]\n* @returns Y displacement in pixels\n*/\nfunction computeLineLeadingDisplacement(lineIndex, lineCount, lineSpacing, lineAnchor = 0) {\n\tif (lineSpacing === 0 || lineCount <= 1) return 0;\n\treturn (lineIndex - lineAnchor * (lineCount - 1)) * lineSpacing;\n}\n/**\n* Evaluates an Expression Selector formula safely in a sandboxed numeric scope.\n*\n* @param expression Formula string (e.g. \"Math.sin(time * 4 + textIndex * 0.2)\")\n* @param ctx Glyph evaluation context\n* @returns Numeric selector weight clamped to [-1, 1]\n*/\nfunction evaluateExpressionSelector(expression, ctx) {\n\ttry {\n\t\tconst scope = {\n\t\t\ttextIndex: ctx.charIndex,\n\t\t\ttextTotal: Math.max(1, ctx.totalChars),\n\t\t\twordIndex: ctx.wordIndex,\n\t\t\twordTotal: Math.max(1, ctx.totalWords),\n\t\t\tlineIndex: ctx.lineIndex,\n\t\t\tlineTotal: Math.max(1, ctx.totalLines),\n\t\t\ttime: ctx.time,\n\t\t\tframe: ctx.frame,\n\t\t\tfps: ctx.fps,\n\t\t\tsin: Math.sin,\n\t\t\tcos: Math.cos,\n\t\t\ttan: Math.tan,\n\t\t\texp: Math.exp,\n\t\t\tlog: Math.log,\n\t\t\tabs: Math.abs,\n\t\t\tmin: Math.min,\n\t\t\tmax: Math.max,\n\t\t\tsqrt: Math.sqrt,\n\t\t\tpow: Math.pow,\n\t\t\tfloor: Math.floor,\n\t\t\tceil: Math.ceil,\n\t\t\tround: Math.round,\n\t\t\tPI: Math.PI,\n\t\t\tclamp: (v, lo, hi) => Math.max(lo, Math.min(hi, v)),\n\t\t\tnoise: (seed) => {\n\t\t\t\tconst n = Math.sin(seed * 12.9898 + ctx.frame * .1) * 43758.5453;\n\t\t\t\treturn (n - Math.floor(n)) * 2 - 1;\n\t\t\t},\n\t\t\tsignals: ctx.signals ?? {}\n\t\t};\n\t\tconst keys = Object.keys(scope);\n\t\tconst values = Object.values(scope);\n\t\tconst fn = new Function(...keys, `return (${expression});`);\n\t\tconst result = Number(fn(...values));\n\t\treturn Number.isFinite(result) ? Math.max(-1, Math.min(1, result)) : 0;\n\t} catch {\n\t\treturn 0;\n\t}\n}\n/**\n* Evaluates 3D Volumetric Formation parametric coordinates.\n*/\nfunction evaluateVolumetricFormation(glyphIndex, totalGlyphs, config) {\n\tconst n = Math.max(1, totalGlyphs);\n\tconst norm = n > 1 ? glyphIndex / (n - 1) : 0;\n\tconst totalAngleRad = config.totalAngle * Math.PI / 180;\n\tconst phi = norm * totalAngleRad;\n\tlet x = 0;\n\tlet y = 0;\n\tlet z$1 = 0;\n\tlet rotX = 0;\n\tlet rotY = 0;\n\tlet rotZ = 0;\n\tlet depthOpacity = 1;\n\tswitch (config.mode) {\n\t\tcase \"cylinder\": {\n\t\t\tconst theta = config.totalAngle < 360 ? (norm - .5) * totalAngleRad : phi;\n\t\t\tif (config.axis === \"y\") {\n\t\t\t\tx = config.radius * Math.sin(theta);\n\t\t\t\tz$1 = config.radius * Math.cos(theta) - config.radius;\n\t\t\t\trotY = theta * 180 / Math.PI;\n\t\t\t} else if (config.axis === \"x\") {\n\t\t\t\ty = config.radius * Math.sin(theta);\n\t\t\t\tz$1 = config.radius * Math.cos(theta) - config.radius;\n\t\t\t\trotX = theta * 180 / Math.PI;\n\t\t\t} else {\n\t\t\t\tx = config.radius * Math.sin(theta);\n\t\t\t\ty = config.radius * Math.cos(theta);\n\t\t\t\trotZ = theta * 180 / Math.PI;\n\t\t\t}\n\t\t\tconst facing = Math.cos(theta);\n\t\t\tdepthOpacity = Math.max(.25, (facing + 1) * .5);\n\t\t\tbreak;\n\t\t}\n\t\tcase \"vortex\": {\n\t\t\tconst spiralPhi = -Math.PI / 2 + phi;\n\t\t\tconst r = config.radius * (1 - norm * .35);\n\t\t\tx = r * Math.cos(spiralPhi);\n\t\t\ty = r * Math.sin(spiralPhi);\n\t\t\tz$1 = -glyphIndex * config.pitch || 0;\n\t\t\tconst dr = -.35 * config.radius / (totalAngleRad || 1);\n\t\t\tconst dx = dr * Math.cos(spiralPhi) - r * Math.sin(spiralPhi);\n\t\t\tconst dy = dr * Math.sin(spiralPhi) + r * Math.cos(spiralPhi);\n\t\t\trotZ = Math.atan2(dy, dx) * 180 / Math.PI;\n\t\t\tdepthOpacity = Math.max(.65, 1 - norm * .35);\n\t\t\tbreak;\n\t\t}\n\t\tcase \"helix\":\n\t\t\tif (config.axis === \"x\") {\n\t\t\t\tconst pitchX = config.pitch > 10 ? config.pitch : 28;\n\t\t\t\tx = (glyphIndex - (n - 1) / 2) * pitchX;\n\t\t\t\ty = config.radius * Math.sin(phi);\n\t\t\t\tz$1 = config.radius * Math.cos(phi) - config.radius;\n\t\t\t\trotX = Math.sin(phi) * 22;\n\t\t\t\tdepthOpacity = .75 + .25 * ((Math.cos(phi) + 1) * .5);\n\t\t\t} else {\n\t\t\t\tconst theta = (norm - .5) * totalAngleRad;\n\t\t\t\tx = config.radius * Math.sin(theta);\n\t\t\t\ty = (glyphIndex - (n - 1) / 2) * config.pitch;\n\t\t\t\tz$1 = config.radius * Math.cos(theta) - config.radius;\n\t\t\t\trotY = theta * 180 / Math.PI;\n\t\t\t\tconst facing = Math.cos(theta);\n\t\t\t\tdepthOpacity = Math.max(.65, (facing + 1) * .5);\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tz$1 = 0;\n\t\t\tbreak;\n\t}\n\tconst perspective = Math.max(100, config.perspective ?? 1200);\n\tconst depthDist = perspective - z$1;\n\tconst scaleMult = depthDist > 1 ? perspective / depthDist : 1;\n\treturn {\n\t\tx: x * scaleMult,\n\t\ty: y * scaleMult,\n\t\tz: z$1,\n\t\trotX,\n\t\trotY,\n\t\trotZ,\n\t\tscaleMult: Math.max(.1, scaleMult),\n\t\tdepthOpacity\n\t};\n}\n/**\n* Evaluates infinite kinetic marquee translation and snapping.\n*/\nfunction evaluateMarqueeOffset(baseX, containerWidth, contentWidth, config, elapsedSec) {\n\tconst totalSpan = (containerWidth > 0 ? Math.max(containerWidth, contentWidth) : contentWidth) + config.repeatGap;\n\tif (totalSpan <= 0) return baseX;\n\tlet travel = config.velocity * elapsedSec;\n\tif (config.snap?.enabled) {\n\t\tconst targetPos = (config.snap.stopIndex ?? 0) * (config.snap.granularity === \"character\" ? 40 : 120);\n\t\tconst decelFactor = Math.min(1, elapsedSec * 1.5);\n\t\ttravel = travel * (1 - decelFactor) + targetPos * decelFactor;\n\t}\n\tif (config.direction === \"right\" || config.direction === \"down\") travel = -travel;\n\tif (config.loop) {\n\t\tconst wrapped = (baseX - travel) % totalSpan;\n\t\treturn wrapped < -contentWidth ? wrapped + totalSpan : wrapped;\n\t}\n\treturn baseX - travel;\n}\n/**\n* Samples audio FFT frequency bin and computes scale factor for Audio Spectrum Typography.\n*/\nfunction sampleAudioSpectrumScale(glyphIndex, totalGlyphs, config, signals, frame, fps) {\n\tconst n = Math.max(1, totalGlyphs);\n\tconst norm = n > 1 ? glyphIndex / (n - 1) : .5;\n\tconst minFreq = Math.max(20, config.minFreqHz);\n\tconst targetFreq = minFreq * (Math.max(minFreq + 100, config.maxFreqHz) / minFreq) ** norm;\n\tlet magnitude = 0;\n\tif (signals) {\n\t\tconst sig = signals[config.signalChannel];\n\t\tif (typeof sig === \"number\") magnitude = sig;\n\t\telse if (typeof sig === \"function\") magnitude = Number(sig(frame, fps, targetFreq)) || 0;\n\t\telse if (typeof sig === \"object\" && sig !== null) {\n\t\t\tconst sObj = sig;\n\t\t\tif (typeof sObj.get === \"function\") magnitude = Number(sObj.get({\n\t\t\t\tframe,\n\t\t\t\tfps,\n\t\t\t\tfreq: targetFreq\n\t\t\t})) || 0;\n\t\t\telse if (Array.isArray(sObj.samples) || ArrayBuffer.isView(sObj.samples)) {\n\t\t\t\tconst arr = sObj.samples;\n\t\t\t\tconst binIdx = Math.floor(norm * (arr.length - 1));\n\t\t\t\tmagnitude = Number(arr[binIdx]) || 0;\n\t\t\t}\n\t\t}\n\t}\n\tconst clampedMag = Math.max(0, Math.min(1, magnitude));\n\treturn config.minScale + clampedMag * (config.maxScale - config.minScale);\n}\n\n//#endregion\n//#region src/program/text-animations/path.ts\n/**\n* Evaluates a point on a cubic Bezier curve at parameter t in [0, 1].\n*/\nfunction evaluateCubicBezier(segment, t) {\n\tconst u = 1 - t;\n\tconst tt = t * t;\n\tconst uu = u * u;\n\tconst uuu = uu * u;\n\tconst ttt = tt * t;\n\treturn {\n\t\tx: uuu * segment.p0.x + 3 * uu * t * segment.p1.x + 3 * u * tt * segment.p2.x + ttt * segment.p3.x,\n\t\ty: uuu * segment.p0.y + 3 * uu * t * segment.p1.y + 3 * u * tt * segment.p2.y + ttt * segment.p3.y\n\t};\n}\n/**\n* Evaluates the first derivative (tangent velocity vector) of a cubic Bezier curve at parameter t.\n*/\nfunction evaluateCubicBezierDerivative(segment, t) {\n\tconst u = 1 - t;\n\treturn {\n\t\tx: 3 * u * u * (segment.p1.x - segment.p0.x) + 6 * u * t * (segment.p2.x - segment.p1.x) + 3 * t * t * (segment.p3.x - segment.p2.x),\n\t\ty: 3 * u * u * (segment.p1.y - segment.p0.y) + 6 * u * t * (segment.p2.y - segment.p1.y) + 3 * t * t * (segment.p3.y - segment.p2.y)\n\t};\n}\n/**\n* Generates an arc-length parameterization lookup table (LUT) for a cubic Bezier segment.\n* Ensures glyphs travel with uniform speed and do not bunch up on tight curve bends.\n*/\nfunction generateArcLengthLUT(segment, samples = 100) {\n\tconst lut = [{\n\t\tdistance: 0,\n\t\tt: 0\n\t}];\n\tlet accumulatedDist = 0;\n\tlet prevPoint = segment.p0;\n\tfor (let i = 1; i <= samples; i++) {\n\t\tconst t = i / samples;\n\t\tconst currentPoint = evaluateCubicBezier(segment, t);\n\t\tconst dx = currentPoint.x - prevPoint.x;\n\t\tconst dy = currentPoint.y - prevPoint.y;\n\t\taccumulatedDist += Math.hypot(dx, dy);\n\t\tlut.push({\n\t\t\tdistance: accumulatedDist,\n\t\t\tt\n\t\t});\n\t\tprevPoint = currentPoint;\n\t}\n\treturn {\n\t\tlut,\n\t\ttotalLength: accumulatedDist\n\t};\n}\n/**\n* Maps a distance along the curve (in pixels) to normalized curve parameter t via binary search on the LUT.\n*/\nfunction distanceToCurveParameter(lut, distance, totalLength) {\n\tif (distance <= 0) return 0;\n\tif (distance >= totalLength) return 1;\n\tlet low = 0;\n\tlet high = lut.length - 1;\n\twhile (low <= high) {\n\t\tconst mid = low + high >> 1;\n\t\tif (lut[mid].distance < distance) low = mid + 1;\n\t\telse high = mid - 1;\n\t}\n\tconst index = Math.max(1, Math.min(low, lut.length - 1));\n\tconst prev = lut[index - 1];\n\tconst curr = lut[index];\n\tconst segmentDist = curr.distance - prev.distance;\n\tif (segmentDist <= 1e-6) return prev.t;\n\tconst ratio = (distance - prev.distance) / segmentDist;\n\treturn prev.t + ratio * (curr.t - prev.t);\n}\n/**\n* Samples position and baseline tangent orientation angle along a curve at distance `dist`.\n*/\nfunction sampleCurveGeometry(segment, lut, totalLength, distance) {\n\tconst t = distanceToCurveParameter(lut, distance, totalLength);\n\tconst pos = evaluateCubicBezier(segment, t);\n\tconst deriv = evaluateCubicBezierDerivative(segment, t);\n\tconst length = Math.hypot(deriv.x, deriv.y);\n\tconst nx = length > 1e-6 ? -deriv.y / length : 0;\n\tconst ny = length > 1e-6 ? deriv.x / length : 1;\n\treturn {\n\t\tposition: pos,\n\t\ttangentAngleDeg: Math.atan2(deriv.y, deriv.x) * 180 / Math.PI,\n\t\tnormal: {\n\t\t\tx: nx,\n\t\t\ty: ny\n\t\t}\n\t};\n}\n/**\n* Builds a cumulative Arc-Length LUT across a chain of Cubic Bezier segments.\n*/\nfunction buildPathLUT(segments, samplesPerSegment = 50) {\n\tif (segments.length === 0) return {\n\t\ttotalLength: 0,\n\t\tentries: [{\n\t\t\tdistance: 0,\n\t\t\tsegmentIndex: 0,\n\t\t\tt: 0\n\t\t}],\n\t\tsegments: []\n\t};\n\tconst segLuts = [];\n\tconst entries = [];\n\tlet accumulatedDist = 0;\n\tfor (let segIdx = 0; segIdx < segments.length; segIdx++) {\n\t\tconst seg = segments[segIdx];\n\t\tconst { lut: segLut, totalLength: segLength } = generateArcLengthLUT(seg, samplesPerSegment);\n\t\tsegLuts.push({\n\t\t\tsegmentIndex: segIdx,\n\t\t\tstartDistance: accumulatedDist,\n\t\t\tlength: segLength,\n\t\t\tlut: segLut\n\t\t});\n\t\tfor (let i = 0; i < segLut.length; i++) entries.push({\n\t\t\tdistance: accumulatedDist + segLut[i].distance,\n\t\t\tsegmentIndex: segIdx,\n\t\t\tt: segLut[i].t\n\t\t});\n\t\taccumulatedDist += segLength;\n\t}\n\treturn {\n\t\ttotalLength: accumulatedDist,\n\t\tentries,\n\t\tsegments: segLuts\n\t};\n}\n/**\n* Samples position, tangent angle, and normal across a chain of Cubic Bezier segments.\n*/\nfunction samplePathChainGeometry(segments, chainLUT, distance) {\n\tif (segments.length === 0) return {\n\t\tposition: {\n\t\t\tx: 0,\n\t\t\ty: 0\n\t\t},\n\t\ttangentAngleDeg: 0,\n\t\tnormal: {\n\t\t\tx: 0,\n\t\t\ty: 1\n\t\t}\n\t};\n\tconst totalLength = chainLUT.totalLength;\n\tif (distance <= 0) {\n\t\tconst seg = segments[0];\n\t\tconst deriv$1 = evaluateCubicBezierDerivative(seg, 0);\n\t\tconst length$1 = Math.hypot(deriv$1.x, deriv$1.y);\n\t\tconst ux = length$1 > 1e-6 ? deriv$1.x / length$1 : 1;\n\t\tconst uy = length$1 > 1e-6 ? deriv$1.y / length$1 : 0;\n\t\tconst pos$1 = {\n\t\t\tx: seg.p0.x + ux * distance,\n\t\t\ty: seg.p0.y + uy * distance\n\t\t};\n\t\tconst nx$1 = length$1 > 1e-6 ? -deriv$1.y / length$1 : 0;\n\t\tconst ny$1 = length$1 > 1e-6 ? deriv$1.x / length$1 : 1;\n\t\treturn {\n\t\t\tposition: pos$1,\n\t\t\ttangentAngleDeg: Math.atan2(deriv$1.y, deriv$1.x) * 180 / Math.PI,\n\t\t\tnormal: {\n\t\t\t\tx: nx$1,\n\t\t\t\ty: ny$1\n\t\t\t}\n\t\t};\n\t}\n\tif (distance >= totalLength) {\n\t\tconst lastSeg = segments[segments.length - 1];\n\t\tconst deriv$1 = evaluateCubicBezierDerivative(lastSeg, 1);\n\t\tconst length$1 = Math.hypot(deriv$1.x, deriv$1.y);\n\t\tconst ux = length$1 > 1e-6 ? deriv$1.x / length$1 : 1;\n\t\tconst uy = length$1 > 1e-6 ? deriv$1.y / length$1 : 0;\n\t\tconst overflow = distance - totalLength;\n\t\tconst pos$1 = {\n\t\t\tx: lastSeg.p3.x + ux * overflow,\n\t\t\ty: lastSeg.p3.y + uy * overflow\n\t\t};\n\t\tconst nx$1 = length$1 > 1e-6 ? -deriv$1.y / length$1 : 0;\n\t\tconst ny$1 = length$1 > 1e-6 ? deriv$1.x / length$1 : 1;\n\t\treturn {\n\t\t\tposition: pos$1,\n\t\t\ttangentAngleDeg: Math.atan2(deriv$1.y, deriv$1.x) * 180 / Math.PI,\n\t\t\tnormal: {\n\t\t\t\tx: nx$1,\n\t\t\t\ty: ny$1\n\t\t\t}\n\t\t};\n\t}\n\tlet segIdx = 0;\n\tlet t = 0;\n\tif (chainLUT.segments && chainLUT.segments.length > 0) {\n\t\tlet low = 0;\n\t\tlet high = chainLUT.segments.length - 1;\n\t\twhile (low <= high) {\n\t\t\tconst mid = low + high >> 1;\n\t\t\tconst segLUT$1 = chainLUT.segments[mid];\n\t\t\tif (distance < segLUT$1.startDistance) high = mid - 1;\n\t\t\telse if (distance > segLUT$1.startDistance + segLUT$1.length) low = mid + 1;\n\t\t\telse {\n\t\t\t\tlow = mid;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tconst sIdx = Math.max(0, Math.min(low, chainLUT.segments.length - 1));\n\t\tconst segLUT = chainLUT.segments[sIdx];\n\t\tsegIdx = segLUT.segmentIndex;\n\t\tconst localDist = distance - segLUT.startDistance;\n\t\tt = distanceToCurveParameter(segLUT.lut, localDist, segLUT.length);\n\t} else {\n\t\tlet low = 0;\n\t\tlet high = chainLUT.entries.length - 1;\n\t\twhile (low <= high) {\n\t\t\tconst mid = low + high >> 1;\n\t\t\tif (chainLUT.entries[mid].distance < distance) low = mid + 1;\n\t\t\telse high = mid - 1;\n\t\t}\n\t\tconst index = Math.max(1, Math.min(low, chainLUT.entries.length - 1));\n\t\tconst prev = chainLUT.entries[index - 1];\n\t\tconst curr = chainLUT.entries[index];\n\t\tconst segmentDist = curr.distance - prev.distance;\n\t\tconst ratio = segmentDist > 1e-6 ? (distance - prev.distance) / segmentDist : 0;\n\t\tsegIdx = curr.segmentIndex;\n\t\tt = prev.segmentIndex === curr.segmentIndex ? prev.t + ratio * (curr.t - prev.t) : curr.t;\n\t}\n\tconst segment = segments[segIdx] ?? segments[0];\n\tconst pos = evaluateCubicBezier(segment, t);\n\tconst deriv = evaluateCubicBezierDerivative(segment, t);\n\tconst length = Math.hypot(deriv.x, deriv.y);\n\tconst nx = length > 1e-6 ? -deriv.y / length : 0;\n\tconst ny = length > 1e-6 ? deriv.x / length : 1;\n\treturn {\n\t\tposition: pos,\n\t\ttangentAngleDeg: Math.atan2(deriv.y, deriv.x) * 180 / Math.PI,\n\t\tnormal: {\n\t\t\tx: nx,\n\t\t\ty: ny\n\t\t}\n\t};\n}\n/**\n* Converts an ellipse arc into cubic Bezier segments (up to 90 degrees per segment).\n*/\nfunction ellipseToCubicBeziers(cx, cy, rx, ry, startAngleDeg = 0, endAngleDeg = 360) {\n\tconst startRad = startAngleDeg * Math.PI / 180;\n\tconst totalSweep = endAngleDeg * Math.PI / 180 - startRad;\n\tconst numSegments = Math.max(1, Math.ceil(Math.abs(totalSweep) / (Math.PI / 2)));\n\tconst sweepStep = totalSweep / numSegments;\n\tconst segments = [];\n\tfor (let i = 0; i < numSegments; i++) {\n\t\tconst a0 = startRad + i * sweepStep;\n\t\tconst a1 = a0 + sweepStep;\n\t\tconst halfSweep = sweepStep / 2;\n\t\tconst k = 4 / 3 * Math.tan(halfSweep / 2);\n\t\tconst cos0 = Math.cos(a0);\n\t\tconst sin0 = Math.sin(a0);\n\t\tconst cos1 = Math.cos(a1);\n\t\tconst sin1 = Math.sin(a1);\n\t\tconst p0 = {\n\t\t\tx: cx + rx * cos0,\n\t\t\ty: cy + ry * sin0\n\t\t};\n\t\tconst p1 = {\n\t\t\tx: p0.x - k * rx * sin0,\n\t\t\ty: p0.y + k * ry * cos0\n\t\t};\n\t\tconst p3 = {\n\t\t\tx: cx + rx * cos1,\n\t\t\ty: cy + ry * sin1\n\t\t};\n\t\tconst p2 = {\n\t\t\tx: p3.x + k * rx * sin1,\n\t\t\ty: p3.y - k * ry * cos1\n\t\t};\n\t\tsegments.push({\n\t\t\tp0,\n\t\t\tp1,\n\t\t\tp2,\n\t\t\tp3\n\t\t});\n\t}\n\treturn segments;\n}\n/**\n* Converts a sinusoidal wave into cubic Bezier segments per half-cycle.\n*/\nfunction waveToCubicBeziers(startX, startY, length, amplitude, frequency, phaseDeg = 0) {\n\tconst phaseRad = phaseDeg * Math.PI / 180;\n\tconst totalCycles = frequency < .1 && frequency * length >= .25 ? frequency * length : Math.max(.5, frequency);\n\tconst halfCycles = Math.max(1, Math.round(totalCycles * 2));\n\tconst dx = length / halfCycles;\n\tconst segments = [];\n\tfor (let i = 0; i < halfCycles; i++) {\n\t\tconst t0 = i / halfCycles * (2 * Math.PI * totalCycles) + phaseRad;\n\t\tconst t1 = (i + 1) / halfCycles * (2 * Math.PI * totalCycles) + phaseRad;\n\t\tconst x0 = startX + i * dx;\n\t\tconst x3 = startX + (i + 1) * dx;\n\t\tconst y0 = startY + amplitude * Math.sin(t0);\n\t\tconst y3 = startY + amplitude * Math.sin(t1);\n\t\tconst slope0 = amplitude * Math.cos(t0) * (Math.PI / 3);\n\t\tconst slope1 = amplitude * Math.cos(t1) * (Math.PI / 3);\n\t\tconst p0 = {\n\t\t\tx: x0,\n\t\t\ty: y0\n\t\t};\n\t\tconst p1 = {\n\t\t\tx: x0 + dx / 3,\n\t\t\ty: y0 + slope0\n\t\t};\n\t\tconst p2 = {\n\t\t\tx: x3 - dx / 3,\n\t\t\ty: y3 - slope1\n\t\t};\n\t\tconst p3 = {\n\t\t\tx: x3,\n\t\t\ty: y3\n\t\t};\n\t\tsegments.push({\n\t\t\tp0,\n\t\t\tp1,\n\t\t\tp2,\n\t\t\tp3\n\t\t});\n\t}\n\treturn segments;\n}\n/**\n* An SVG elliptical arc (endpoint form, SVG 1.1 F.6.5) as cubic Bezier\n* segments of at most 90° each.\n*/\nfunction svgArcToCubicBeziers(x1, y1, rxIn, ryIn, rotationDeg, largeArc, sweep, x2, y2) {\n\tif (x1 === x2 && y1 === y2) return [];\n\tlet rx = Math.abs(rxIn);\n\tlet ry = Math.abs(ryIn);\n\tif (rx === 0 || ry === 0) return [{\n\t\tp0: {\n\t\t\tx: x1,\n\t\t\ty: y1\n\t\t},\n\t\tp1: {\n\t\t\tx: x1 + (x2 - x1) / 3,\n\t\t\ty: y1 + (y2 - y1) / 3\n\t\t},\n\t\tp2: {\n\t\t\tx: x1 + 2 * (x2 - x1) / 3,\n\t\t\ty: y1 + 2 * (y2 - y1) / 3\n\t\t},\n\t\tp3: {\n\t\t\tx: x2,\n\t\t\ty: y2\n\t\t}\n\t}];\n\tconst phi = rotationDeg * Math.PI / 180;\n\tconst cosPhi = Math.cos(phi);\n\tconst sinPhi = Math.sin(phi);\n\tconst dx = (x1 - x2) / 2;\n\tconst dy = (y1 - y2) / 2;\n\tconst x1p = cosPhi * dx + sinPhi * dy;\n\tconst y1p = -sinPhi * dx + cosPhi * dy;\n\tconst lambda = x1p * x1p / (rx * rx) + y1p * y1p / (ry * ry);\n\tif (lambda > 1) {\n\t\trx *= Math.sqrt(lambda);\n\t\try *= Math.sqrt(lambda);\n\t}\n\tconst num = rx * rx * ry * ry - rx * rx * y1p * y1p - ry * ry * x1p * x1p;\n\tconst den = rx * rx * y1p * y1p + ry * ry * x1p * x1p;\n\tconst coef = (largeArc !== sweep ? 1 : -1) * Math.sqrt(Math.max(0, num / den));\n\tconst cxp = coef * rx * y1p / ry;\n\tconst cyp = -coef * ry * x1p / rx;\n\tconst cx = cosPhi * cxp - sinPhi * cyp + (x1 + x2) / 2;\n\tconst cy = sinPhi * cxp + cosPhi * cyp + (y1 + y2) / 2;\n\tconst angle = (ux, uy, vx, vy) => Math.atan2(ux * vy - uy * vx, ux * vx + uy * vy);\n\tconst theta1 = angle(1, 0, (x1p - cxp) / rx, (y1p - cyp) / ry);\n\tlet delta = angle((x1p - cxp) / rx, (y1p - cyp) / ry, (-x1p - cxp) / rx, (-y1p - cyp) / ry);\n\tif (!sweep && delta > 0) delta -= 2 * Math.PI;\n\tif (sweep && delta < 0) delta += 2 * Math.PI;\n\tconst n = Math.max(1, Math.ceil(Math.abs(delta) / (Math.PI / 2)));\n\tconst step = delta / n;\n\tconst k = 4 / 3 * Math.tan(step / 4);\n\tconst point = (a) => ({\n\t\tx: cx + rx * Math.cos(a) * cosPhi - ry * Math.sin(a) * sinPhi,\n\t\ty: cy + rx * Math.cos(a) * sinPhi + ry * Math.sin(a) * cosPhi\n\t});\n\tconst tangent = (a) => ({\n\t\tx: -rx * Math.sin(a) * cosPhi - ry * Math.cos(a) * sinPhi,\n\t\ty: -rx * Math.sin(a) * sinPhi + ry * Math.cos(a) * cosPhi\n\t});\n\tconst segments = [];\n\tfor (let s = 0; s < n; s++) {\n\t\tconst a0 = theta1 + s * step;\n\t\tconst a1 = a0 + step;\n\t\tconst p0 = point(a0);\n\t\tconst p3 = point(a1);\n\t\tconst t0 = tangent(a0);\n\t\tconst t1 = tangent(a1);\n\t\tsegments.push({\n\t\t\tp0,\n\t\t\tp1: {\n\t\t\t\tx: p0.x + k * t0.x,\n\t\t\t\ty: p0.y + k * t0.y\n\t\t\t},\n\t\t\tp2: {\n\t\t\t\tx: p3.x - k * t1.x,\n\t\t\t\ty: p3.y - k * t1.y\n\t\t\t},\n\t\t\tp3\n\t\t});\n\t}\n\tsegments[segments.length - 1].p3 = {\n\t\tx: x2,\n\t\ty: y2\n\t};\n\treturn segments;\n}\n/**\n* Converts SVG path data string into a chain of Cubic Bezier segments.\n*/\nfunction parseSvgPathToCubicBeziers(d) {\n\tconst segments = [];\n\tconst tokens = d.match(/[a-df-z]|[-+]?(?:\\d*\\.\\d+|\\d+)(?:[eE][-+]?\\d+)?/gi);\n\tif (!tokens || tokens.length === 0) return segments;\n\tlet currentX = 0;\n\tlet currentY = 0;\n\tlet startX = 0;\n\tlet startY = 0;\n\tlet lastControlX = 0;\n\tlet lastControlY = 0;\n\tlet lastCommand = \"\";\n\tlet i = 0;\n\tconst nextNum = () => {\n\t\tif (i >= tokens.length) return 0;\n\t\treturn Number.parseFloat(tokens[i++]);\n\t};\n\twhile (i < tokens.length) {\n\t\tconst token = tokens[i++];\n\t\tconst isCommand = /^[a-df-z]$/i.test(token);\n\t\tconst cmd = isCommand ? token : lastCommand;\n\t\tif (!isCommand) i--;\n\t\tswitch (cmd) {\n\t\t\tcase \"M\":\n\t\t\t\tcurrentX = nextNum();\n\t\t\t\tcurrentY = nextNum();\n\t\t\t\tstartX = currentX;\n\t\t\t\tstartY = currentY;\n\t\t\t\tlastCommand = \"L\";\n\t\t\t\tbreak;\n\t\t\tcase \"m\":\n\t\t\t\tcurrentX += nextNum();\n\t\t\t\tcurrentY += nextNum();\n\t\t\t\tstartX = currentX;\n\t\t\t\tstartY = currentY;\n\t\t\t\tlastCommand = \"l\";\n\t\t\t\tbreak;\n\t\t\tcase \"L\": {\n\t\t\t\tconst x = nextNum();\n\t\t\t\tconst y = nextNum();\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: currentX + (x - currentX) / 3,\n\t\t\t\t\t\ty: currentY + (y - currentY) / 3\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: currentX + 2 * (x - currentX) / 3,\n\t\t\t\t\t\ty: currentY + 2 * (y - currentY) / 3\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tcurrentX = x;\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastCommand = \"L\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"l\": {\n\t\t\t\tconst dx = nextNum();\n\t\t\t\tconst dy = nextNum();\n\t\t\t\tconst x = currentX + dx;\n\t\t\t\tconst y = currentY + dy;\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: currentX + dx / 3,\n\t\t\t\t\t\ty: currentY + dy / 3\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: currentX + 2 * dx / 3,\n\t\t\t\t\t\ty: currentY + 2 * dy / 3\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tcurrentX = x;\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastCommand = \"l\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"H\": {\n\t\t\t\tconst x = nextNum();\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: currentX + (x - currentX) / 3,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: currentX + 2 * (x - currentX) / 3,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tcurrentX = x;\n\t\t\t\tlastCommand = \"H\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"h\": {\n\t\t\t\tconst dx = nextNum();\n\t\t\t\tconst x = currentX + dx;\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: currentX + dx / 3,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: currentX + 2 * dx / 3,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tcurrentX = x;\n\t\t\t\tlastCommand = \"h\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"V\": {\n\t\t\t\tconst y = nextNum();\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY + (y - currentY) / 3\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY + 2 * (y - currentY) / 3\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastCommand = \"V\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"v\": {\n\t\t\t\tconst dy = nextNum();\n\t\t\t\tconst y = currentY + dy;\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY + dy / 3\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY + 2 * dy / 3\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastCommand = \"v\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"C\": {\n\t\t\t\tconst x1 = nextNum();\n\t\t\t\tconst y1 = nextNum();\n\t\t\t\tconst x2 = nextNum();\n\t\t\t\tconst y2 = nextNum();\n\t\t\t\tconst x = nextNum();\n\t\t\t\tconst y = nextNum();\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: x1,\n\t\t\t\t\t\ty: y1\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: x2,\n\t\t\t\t\t\ty: y2\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tlastControlX = x2;\n\t\t\t\tlastControlY = y2;\n\t\t\t\tcurrentX = x;\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastCommand = \"C\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"c\": {\n\t\t\t\tconst dx1 = nextNum();\n\t\t\t\tconst dy1 = nextNum();\n\t\t\t\tconst dx2 = nextNum();\n\t\t\t\tconst dy2 = nextNum();\n\t\t\t\tconst dx = nextNum();\n\t\t\t\tconst dy = nextNum();\n\t\t\t\tconst x1 = currentX + dx1;\n\t\t\t\tconst y1 = currentY + dy1;\n\t\t\t\tconst x2 = currentX + dx2;\n\t\t\t\tconst y2 = currentY + dy2;\n\t\t\t\tconst x = currentX + dx;\n\t\t\t\tconst y = currentY + dy;\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: x1,\n\t\t\t\t\t\ty: y1\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: x2,\n\t\t\t\t\t\ty: y2\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tlastControlX = x2;\n\t\t\t\tlastControlY = y2;\n\t\t\t\tcurrentX = x;\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastCommand = \"c\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"S\":\n\t\t\tcase \"s\": {\n\t\t\t\tconst isRel = cmd === \"s\";\n\t\t\t\tconst dx2 = nextNum();\n\t\t\t\tconst dy2 = nextNum();\n\t\t\t\tconst dx = nextNum();\n\t\t\t\tconst dy = nextNum();\n\t\t\t\tconst x2 = isRel ? currentX + dx2 : dx2;\n\t\t\t\tconst y2 = isRel ? currentY + dy2 : dy2;\n\t\t\t\tconst x = isRel ? currentX + dx : dx;\n\t\t\t\tconst y = isRel ? currentY + dy : dy;\n\t\t\t\tlet x1 = currentX;\n\t\t\t\tlet y1 = currentY;\n\t\t\t\tif (/^[cs]$/i.test(lastCommand)) {\n\t\t\t\t\tx1 = 2 * currentX - lastControlX;\n\t\t\t\t\ty1 = 2 * currentY - lastControlY;\n\t\t\t\t}\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: x1,\n\t\t\t\t\t\ty: y1\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: x2,\n\t\t\t\t\t\ty: y2\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tlastControlX = x2;\n\t\t\t\tlastControlY = y2;\n\t\t\t\tcurrentX = x;\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastCommand = cmd;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"Q\":\n\t\t\tcase \"q\": {\n\t\t\t\tconst isRel = cmd === \"q\";\n\t\t\t\tconst qx = nextNum();\n\t\t\t\tconst qy = nextNum();\n\t\t\t\tconst x = nextNum();\n\t\t\t\tconst y = nextNum();\n\t\t\t\tconst cx1 = isRel ? currentX + qx : qx;\n\t\t\t\tconst cy1 = isRel ? currentY + qy : qy;\n\t\t\t\tconst ex = isRel ? currentX + x : x;\n\t\t\t\tconst ey = isRel ? currentY + y : y;\n\t\t\t\tconst p1x = currentX + 2 / 3 * (cx1 - currentX);\n\t\t\t\tconst p1y = currentY + 2 / 3 * (cy1 - currentY);\n\t\t\t\tconst p2x = ex + 2 / 3 * (cx1 - ex);\n\t\t\t\tconst p2y = ey + 2 / 3 * (cy1 - ey);\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: p1x,\n\t\t\t\t\t\ty: p1y\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: p2x,\n\t\t\t\t\t\ty: p2y\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx: ex,\n\t\t\t\t\t\ty: ey\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tlastControlX = cx1;\n\t\t\t\tlastControlY = cy1;\n\t\t\t\tcurrentX = ex;\n\t\t\t\tcurrentY = ey;\n\t\t\t\tlastCommand = cmd;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"A\":\n\t\t\tcase \"a\": {\n\t\t\t\tconst rx = nextNum();\n\t\t\t\tconst ry = nextNum();\n\t\t\t\tconst rotation = nextNum();\n\t\t\t\tconst largeArc = nextNum() !== 0;\n\t\t\t\tconst sweep = nextNum() !== 0;\n\t\t\t\tlet x = nextNum();\n\t\t\t\tlet y = nextNum();\n\t\t\t\tif (cmd === \"a\") {\n\t\t\t\t\tx += currentX;\n\t\t\t\t\ty += currentY;\n\t\t\t\t}\n\t\t\t\tsegments.push(...svgArcToCubicBeziers(currentX, currentY, rx, ry, rotation, largeArc, sweep, x, y));\n\t\t\t\tcurrentX = x;\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastControlX = x;\n\t\t\t\tlastControlY = y;\n\t\t\t\tlastCommand = cmd;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"Z\":\n\t\t\tcase \"z\":\n\t\t\t\tif (currentX !== startX || currentY !== startY) {\n\t\t\t\t\tsegments.push({\n\t\t\t\t\t\tp0: {\n\t\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\t\ty: currentY\n\t\t\t\t\t\t},\n\t\t\t\t\t\tp1: {\n\t\t\t\t\t\t\tx: currentX + (startX - currentX) / 3,\n\t\t\t\t\t\t\ty: currentY + (startY - currentY) / 3\n\t\t\t\t\t\t},\n\t\t\t\t\t\tp2: {\n\t\t\t\t\t\t\tx: currentX + 2 * (startX - currentX) / 3,\n\t\t\t\t\t\t\ty: currentY + 2 * (startY - currentY) / 3\n\t\t\t\t\t\t},\n\t\t\t\t\t\tp3: {\n\t\t\t\t\t\t\tx: startX,\n\t\t\t\t\t\t\ty: startY\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tcurrentX = startX;\n\t\t\t\t\tcurrentY = startY;\n\t\t\t\t}\n\t\t\t\tlastCommand = cmd;\n\t\t\t\tbreak;\n\t\t\tdefault: break;\n\t\t}\n\t}\n\treturn segments;\n}\n/**\n* Universal path source converter to Cubic Bezier segments.\n*/\nfunction generatePathSegments(source) {\n\tswitch (source.type) {\n\t\tcase \"bezier\": return source.segments;\n\t\tcase \"svg\": return parseSvgPathToCubicBeziers(source.d);\n\t\tcase \"ellipse\": return ellipseToCubicBeziers(source.cx, source.cy, source.rx, source.ry, source.startAngleDeg ?? 0, source.endAngleDeg ?? 360);\n\t\tcase \"wave\": return waveToCubicBeziers(source.startX, source.startY, source.length, source.amplitude, source.frequency, source.phaseDeg ?? 0);\n\t}\n}\n\n//#endregion\n//#region src/program/text-animations/selectors.ts\n/**\n* Computes After Effects Range Selector weight for a single glyph index.\n*\n* @param index Normalized position of the glyph in the string (0.0 to 1.0)\n* @param start Start boundary (0.0 to 1.0)\n* @param end End boundary (0.0 to 1.0)\n* @param offset Window shift (-1.0 to 1.0)\n* @param shape Falloff curve\n* @param easeHigh Non-linear easing for high values\n* @param easeLow Non-linear easing for low values\n* @returns Weight in [0.0, 1.0]\n*/\nfunction computeRangeSelectorWeight(index, start, end, offset, shape, easeHigh = 0, easeLow = 0) {\n\tconst effStart = start + offset;\n\tconst effEnd = end + offset;\n\tif (effEnd <= effStart) return 0;\n\tconst relativePos = (index - effStart) / (effEnd - effStart);\n\tlet baseWeight = 0;\n\tswitch (shape) {\n\t\tcase \"square\":\n\t\t\tbaseWeight = relativePos >= 0 && relativePos <= 1 ? 1 : 0;\n\t\t\tbreak;\n\t\tcase \"ramp_up\":\n\t\t\tbaseWeight = Math.max(0, Math.min(1, relativePos));\n\t\t\tbreak;\n\t\tcase \"ramp_down\":\n\t\t\tbaseWeight = 1 - Math.max(0, Math.min(1, relativePos));\n\t\t\tbreak;\n\t\tcase \"triangle\":\n\t\t\tif (relativePos < 0 || relativePos > 1) baseWeight = 0;\n\t\t\telse if (relativePos < .5) baseWeight = relativePos * 2;\n\t\t\telse baseWeight = (1 - relativePos) * 2;\n\t\t\tbreak;\n\t\tcase \"round\":\n\t\t\tif (relativePos < 0 || relativePos > 1) baseWeight = 0;\n\t\t\telse baseWeight = .5 - .5 * Math.cos(relativePos * 2 * Math.PI);\n\t\t\tbreak;\n\t\tcase \"smooth\":\n\t\t\tif (relativePos <= 0) baseWeight = 0;\n\t\t\telse if (relativePos >= 1) baseWeight = 1;\n\t\t\telse baseWeight = relativePos * relativePos * (3 - 2 * relativePos);\n\t\t\tbreak;\n\t}\n\tif (baseWeight > 0 && baseWeight < 1) {\n\t\tif (easeHigh !== 0 && baseWeight > .5) baseWeight = .5 + .5 * ((baseWeight - .5) * 2) ** (easeHigh > 0 ? 1 + easeHigh * 3 : 1 / (1 - easeHigh * 3));\n\t\tif (easeLow !== 0 && baseWeight <= .5) baseWeight = .5 * (baseWeight * 2) ** (easeLow > 0 ? 1 + easeLow * 3 : 1 / (1 - easeLow * 3));\n\t}\n\treturn Math.max(0, Math.min(1, baseWeight));\n}\n/**\n* 1D Gradient deterministic hash noise for Wiggly Selectors.\n*/\nfunction deterministicWigglyNoise(seed, glyphIndex, phase, correlation) {\n\tconst coord = (glyphIndex * (1 - correlation) + correlation) * 12.9898 + phase + seed * 78.233;\n\tconst raw = Math.sin(coord) * 43758.5453;\n\treturn (raw - Math.floor(raw)) * 2 - 1;\n}\n/**\n* Deterministic pseudo-random number generator for seeded order shuffling.\n*/\nfunction getShuffledOrder(count, seed) {\n\tlet s = seed;\n\tconst nextRand = () => {\n\t\ts = (s * 9301 + 49297) % 233280;\n\t\treturn s / 233280;\n\t};\n\tconst arr = Array.from({ length: count }, (_, i) => i);\n\tfor (let i = arr.length - 1; i > 0; i--) {\n\t\tconst j = Math.floor(nextRand() * (i + 1));\n\t\tconst temp = arr[i];\n\t\tarr[i] = arr[j];\n\t\tarr[j] = temp;\n\t}\n\treturn arr;\n}\n/**\n* Combines consecutive selector weights using After Effects Selector Mode logic.\n*/\nfunction evaluateSelectorCombination(prevWeight, currWeight, mode) {\n\tswitch (mode) {\n\t\tcase \"add\": return Math.max(0, Math.min(1, prevWeight + currWeight));\n\t\tcase \"subtract\": return Math.max(0, Math.min(1, prevWeight - currWeight));\n\t\tcase \"intersect\": return prevWeight * currWeight;\n\t\tcase \"min\": return Math.min(prevWeight, currWeight);\n\t\tcase \"max\": return Math.max(prevWeight, currWeight);\n\t\tcase \"difference\": return Math.abs(prevWeight - currWeight);\n\t}\n}\n\n//#endregion\n//#region src/program/text-animations/typewriter.ts\nconst SCRAMBLE_POOLS = {\n\tascii: \"!@#$%^&*()_+{}[]:;<>,.?\",\n\talphanumeric: \"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\",\n\tmatrix: \"010101<>[]{}+=*~#%&!?/\\\\:;|X0123456789\",\n\tbinary: \"01\",\n\thex: \"0123456789ABCDEF\"\n};\nfunction getScramblePool(charset, customCharset) {\n\tif (charset === \"custom\" && customCharset && customCharset.length > 0) return customCharset;\n\treturn SCRAMBLE_POOLS[charset] ?? SCRAMBLE_POOLS.alphanumeric;\n}\n/**\n* Evaluates typewriter visible character count and scramble state for frame `currentFrame`.\n*/\nfunction evaluateTypewriterState(fullText, currentFrame, startFrame, durationFrames, cadence = {\n\tmode: \"human\",\n\tjitter: .35,\n\tcommaPauseMultiplier: 3,\n\tsentencePauseMultiplier: 5.5,\n\tparagraphPauseMultiplier: 7\n}, scramble = {\n\tenabled: false,\n\tcharset: \"alphanumeric\",\n\tscrambleFramesPerChar: 8,\n\thighlightProbability: .25\n}, blinkFrequency = 2, granularity = \"character\", progressOverride) {\n\tif (progressOverride === void 0 && currentFrame < startFrame) return {\n\t\tvisibleChars: 0,\n\t\tcurrentDisplayString: \"\",\n\t\tisCursorVisible: false\n\t};\n\tconst progress = progressOverride !== void 0 ? Math.max(0, Math.min(1, progressOverride)) : Math.min(1, (currentFrame - startFrame) / Math.max(1, durationFrames));\n\tconst elapsed = progressOverride !== void 0 ? progress * durationFrames : currentFrame - startFrame;\n\tconst totalChars = fullText.length;\n\tlet visibleCount = Math.floor(progress * totalChars);\n\tif (granularity === \"word\") {\n\t\tconst tokens = fullText.split(/(\\s+)/);\n\t\tconst wordIndices = [];\n\t\ttokens.forEach((t, i) => {\n\t\t\tif (t.trim().length > 0) wordIndices.push(i);\n\t\t});\n\t\tconst visibleWords = Math.min(wordIndices.length, Math.floor(progress * (wordIndices.length + 1)));\n\t\tif (visibleWords <= 0) visibleCount = 0;\n\t\telse {\n\t\t\tconst lastIdx = wordIndices[Math.min(wordIndices.length - 1, visibleWords - 1)];\n\t\t\tvisibleCount = tokens.slice(0, lastIdx + 1).join(\"\").length;\n\t\t}\n\t} else if (granularity === \"line\") {\n\t\tconst lines = fullText.split(\"\\n\");\n\t\tconst visibleLines = Math.min(lines.length, Math.floor(progress * (lines.length + 1)));\n\t\tvisibleCount = lines.slice(0, visibleLines).join(\"\\n\").length;\n\t} else if (cadence.mode === \"human\" && progress < 1) {\n\t\tlet simulatedCharIndex = 0;\n\t\tlet simulatedElapsed = 0;\n\t\tconst baseFramesPerChar = durationFrames / Math.max(1, totalChars);\n\t\tfor (let i = 0; i < totalChars; i++) {\n\t\t\tconst char = fullText[i];\n\t\t\tlet multiplier = 1;\n\t\t\tconst commaMult = cadence.commaPauseMultiplier ?? 3;\n\t\t\tconst sentenceMult = cadence.sentencePauseMultiplier ?? 5.5;\n\t\t\tconst paraMult = cadence.paragraphPauseMultiplier ?? 7;\n\t\t\tconst jitter = cadence.jitter ?? .35;\n\t\t\tif (char === \",\" || char === \";\") multiplier = commaMult;\n\t\t\telse if (char === \".\" || char === \"!\" || char === \"?\") multiplier = sentenceMult;\n\t\t\telse if (char === \"\\n\") multiplier = paraMult;\n\t\t\tconst jitterVal = 1 + Math.sin(i * 17.3 + 42) * .5 * jitter;\n\t\t\tconst charDuration = baseFramesPerChar * multiplier * jitterVal;\n\t\t\tsimulatedElapsed += charDuration;\n\t\t\tif (simulatedElapsed <= elapsed) simulatedCharIndex = i + 1;\n\t\t\telse break;\n\t\t}\n\t\tvisibleCount = Math.min(totalChars, simulatedCharIndex);\n\t}\n\tlet displayStr = fullText.slice(0, visibleCount);\n\tif (scramble.enabled && visibleCount < totalChars && visibleCount > 0) {\n\t\tconst pool = getScramblePool(scramble.charset, scramble.customCharset);\n\t\tconst trailCount = Math.min(visibleCount, Math.max(1, scramble.scrambleFramesPerChar > 4 ? 3 : 2));\n\t\tlet scrambledTail = \"\";\n\t\tfor (let t = 0; t < trailCount; t++) {\n\t\t\tconst idx = Math.floor(Math.abs(Math.sin(currentFrame * 7 + t * 13)) * pool.length) % pool.length;\n\t\t\tscrambledTail += pool[idx];\n\t\t}\n\t\tdisplayStr = displayStr.slice(0, displayStr.length - trailCount) + scrambledTail;\n\t}\n\tlet isCursorVisible = true;\n\tif (blinkFrequency > 0) {\n\t\tconst halfPeriodFrames = Math.max(1, Math.round(30 / (2 * blinkFrequency)));\n\t\tisCursorVisible = Math.floor(elapsed / halfPeriodFrames) % 2 === 0;\n\t}\n\treturn {\n\t\tvisibleChars: visibleCount,\n\t\tcurrentDisplayString: displayStr,\n\t\tisCursorVisible\n\t};\n}\n\n//#endregion\n//#region src/program/schema.ts\n/** number px | \"auto\" (intrinsic) | \"fit\" (shrink-wrap) | \"fill\" (parent extent). */\nconst SizeSpecSchema = z.union([\n\tz.number().min(0),\n\tz.enum([\n\t\t\"auto\",\n\t\t\"fit\",\n\t\t\"fill\"\n\t]),\n\tz.custom()\n]);\nconst ShapeTypeSchema = z.enum([\n\t\"rect\",\n\t\"circle\",\n\t\"ellipse\",\n\t\"polygon\",\n\t\"star\",\n\t\"arrow\",\n\t\"path\"\n]);\nconst AnimatablePropSchema = z.enum([\n\t\"x\",\n\t\"y\",\n\t\"scale\",\n\t\"rotation\",\n\t\"opacity\",\n\t\"width\",\n\t\"height\",\n\t\"volume\",\n\t\"hidden\",\n\t\"muted\",\n\t\"gap\",\n\t\"padding\",\n\t\"borderRadius\",\n\t\"fontSize\",\n\t\"text\",\n\t\"fill\",\n\t\"color\",\n\t\"letterSpacing\",\n\t\"trimStart\",\n\t\"trimEnd\",\n\t\"trimOffset\",\n\t\"strokeWidth\",\n\t\"strokeDashOffset\",\n\t\"cornerRadius\",\n\t\"starInnerRadiusRatio\",\n\t\"fillColor\",\n\t\"strokeColor\",\n\t\"borderColor\",\n\t\"borderWidth\",\n\t\"motionBlurShutter\",\n\t\"rangeStart\",\n\t\"rangeEnd\",\n\t\"offset\",\n\t\"animatorRangeStart\",\n\t\"animatorRangeEnd\",\n\t\"animatorOffset\",\n\t\"firstMargin\",\n\t\"lastMargin\",\n\t\"baselineShift\",\n\t\"rotateX\",\n\t\"rotateY\",\n\t\"rotateZ\",\n\t\"perspective\",\n\t\"translateZ\",\n\t\"perspectiveOriginX\",\n\t\"perspectiveOriginY\",\n\t\"progress\",\n\t\"drawProgress\",\n\t\"chartProgress\",\n\t\"cameraX\",\n\t\"cameraY\",\n\t\"cameraZ\",\n\t\"targetX\",\n\t\"targetY\",\n\t\"targetZ\",\n\t\"cameraPitch\",\n\t\"cameraYaw\",\n\t\"cameraRoll\",\n\t\"cameraFov\",\n\t\"cameraZoom\",\n\t\"focalLength\",\n\t\"focusDistance\",\n\t\"fStop\",\n\t\"maxBlurRadius\",\n\t\"shakeTranslation\",\n\t\"shakeRotation\",\n\t\"orbitRadius\",\n\t\"orbitAzimuth\",\n\t\"orbitElevation\",\n\t\"z\",\n\t\"scaleZ\",\n\t\"intensity\",\n\t\"angle\",\n\t\"radius\",\n\t\"penumbra\",\n\t\"decay\",\n\t\"shininess\",\n\t\"roughness\",\n\t\"specularIntensity\",\n\t\"ambientIntensity\",\n\t\"metallic\",\n\t\"ior\",\n\t\"dispersion\",\n\t\"transmission\",\n\t\"fresnelPower\",\n\t\"envIntensity\",\n\t\"animationProgress\",\n\t\"animationTime\",\n\t\"animationSpeed\",\n\t\"wireframe\",\n\t\"scaleX\",\n\t\"scaleY\"\n]);\nconst MaterialTypeSchema = z.enum([\n\t\"lit\",\n\t\"unlit\",\n\t\"toon\",\n\t\"glass\",\n\t\"acrylic\",\n\t\"frosted\",\n\t\"metallic\"\n]);\nconst EXTENDED_3D_ANIMATABLE_PROPS = [\n\t\"rotateX\",\n\t\"rotateY\",\n\t\"rotateZ\",\n\t\"perspective\",\n\t\"translateZ\",\n\t\"perspectiveOriginX\",\n\t\"perspectiveOriginY\",\n\t\"cameraX\",\n\t\"cameraY\",\n\t\"cameraZ\",\n\t\"targetX\",\n\t\"targetY\",\n\t\"targetZ\",\n\t\"cameraPitch\",\n\t\"cameraYaw\",\n\t\"cameraRoll\",\n\t\"cameraFov\",\n\t\"cameraZoom\",\n\t\"focalLength\",\n\t\"focusDistance\",\n\t\"fStop\",\n\t\"maxBlurRadius\",\n\t\"shakeTranslation\",\n\t\"shakeRotation\",\n\t\"orbitRadius\",\n\t\"orbitAzimuth\",\n\t\"orbitElevation\",\n\t\"z\",\n\t\"scaleZ\",\n\t\"intensity\",\n\t\"angle\",\n\t\"radius\",\n\t\"penumbra\",\n\t\"decay\",\n\t\"shininess\",\n\t\"roughness\",\n\t\"specularIntensity\",\n\t\"ambientIntensity\",\n\t\"metallic\"\n];\nconst SignalColorModeSchema = z.enum([\n\t\"interpolate\",\n\t\"hueRotate\",\n\t\"threshold\"\n]);\nconst EaseRefSchema = z.object({\n\tname: z.enum([\n\t\t\"none\",\n\t\t\"power1\",\n\t\t\"power2\",\n\t\t\"power3\",\n\t\t\"sine\",\n\t\t\"circ\",\n\t\t\"expo\",\n\t\t\"back\",\n\t\t\"elastic\",\n\t\t\"bounce\",\n\t\t\"spring\",\n\t\t\"cubic\",\n\t\t\"hold\"\n\t]),\n\tdir: z.enum([\n\t\t\"in\",\n\t\t\"out\",\n\t\t\"inOut\"\n\t]),\n\tparams: z.array(z.number()).optional()\n}).strict().superRefine((data, ctx) => {\n\tif (data.name === \"spring\" && data.params) {\n\t\tconst [damping, stiffness, mass] = data.params;\n\t\tif (damping !== void 0 && damping <= 0) ctx.addIssue({\n\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\tmessage: \"Spring damping must be greater than 0.\",\n\t\t\tpath: [\"params\", 0]\n\t\t});\n\t\tif (stiffness !== void 0 && stiffness <= 0) ctx.addIssue({\n\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\tmessage: \"Spring stiffness must be greater than 0.\",\n\t\t\tpath: [\"params\", 1]\n\t\t});\n\t\tif (mass !== void 0 && mass <= 0) ctx.addIssue({\n\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\tmessage: \"Spring mass must be greater than 0.\",\n\t\t\tpath: [\"params\", 2]\n\t\t});\n\t}\n});\nconst KeyframeSchema = z.object({\n\tid: z.string().min(1),\n\tframe: z.number().int().min(0),\n\tvalue: z.union([\n\t\tz.number(),\n\t\tz.boolean(),\n\t\tz.string()\n\t]),\n\tease: EaseRefSchema.optional(),\n\tpresetGroupId: z.string().optional(),\n\tpresetType: z.string().optional(),\n\tspatialTangentIn: z.object({\n\t\tx: z.number(),\n\t\ty: z.number()\n\t}).optional(),\n\tspatialTangentOut: z.object({\n\t\tx: z.number(),\n\t\ty: z.number()\n\t}).optional()\n}).strict();\nconst SignalModeSchema = z.enum([\"continuous\", \"accumulate\"]);\nconst RawTrackSourceSchema = z.discriminatedUnion(\"type\", [\n\tz.object({ type: z.literal(\"keyframe\") }),\n\tz.object({\n\t\ttype: z.literal(\"signal\"),\n\t\tinputHandleId: z.string(),\n\t\tmultiplier: z.number().default(1),\n\t\toffset: z.number().default(0),\n\t\tsmoothingWindowFrames: z.number().min(0).default(0),\n\t\tcolorMode: SignalColorModeSchema.optional(),\n\t\tcolorA: z.string().optional(),\n\t\tcolorB: z.string().optional(),\n\t\tcolorThreshold: z.number().optional(),\n\t\tsignalMode: SignalModeSchema.optional(),\n\t\tthreshold: z.number().optional(),\n\t\taccumulateThreshold: z.number().optional(),\n\t\tdebounceFrames: z.number().int().min(0).optional(),\n\t\tchannel: z.string().optional()\n\t}),\n\tz.object({\n\t\ttype: z.literal(\"wiggle\"),\n\t\tfrequency: z.number().default(2),\n\t\tamplitude: z.number().default(50),\n\t\toctaves: z.number().int().min(1).max(4).default(1),\n\t\tseed: z.number().default(1234)\n\t}),\n\tz.object({\n\t\ttype: z.literal(\"springOvershoot\"),\n\t\tdamping: z.number().default(12),\n\t\tstiffness: z.number().default(180),\n\t\tmass: z.number().default(1)\n\t})\n]);\nconst TrackSourceSchema = z.preprocess((val) => {\n\tif (!val || typeof val !== \"object\") return val;\n\tconst obj = val;\n\tif (obj.type === \"signal\") {\n\t\tconst thresh = typeof obj.threshold === \"number\" ? obj.threshold : typeof obj.accumulateThreshold === \"number\" ? obj.accumulateThreshold : .15;\n\t\treturn {\n\t\t\ttype: \"signal\",\n\t\t\tinputHandleId: obj.inputHandleId ?? obj.handleId,\n\t\t\tmultiplier: obj.multiplier ?? obj.amplitude ?? 1,\n\t\t\toffset: obj.offset ?? 0,\n\t\t\tsmoothingWindowFrames: obj.smoothingWindowFrames ?? obj.smoothing ?? 0,\n\t\t\tcolorMode: obj.colorMode,\n\t\t\tcolorA: obj.colorA,\n\t\t\tcolorB: obj.colorB,\n\t\t\tcolorThreshold: obj.colorThreshold,\n\t\t\tsignalMode: obj.signalMode ?? \"continuous\",\n\t\t\tthreshold: thresh,\n\t\t\taccumulateThreshold: thresh,\n\t\t\tdebounceFrames: obj.debounceFrames ?? 2,\n\t\t\tchannel: typeof obj.channel === \"string\" ? obj.channel : \"primary\"\n\t\t};\n\t}\n\treturn val;\n}, RawTrackSourceSchema);\nconst animationInvariants = (anim, ctx) => {\n\tif (!anim?.tracks) return;\n\tlet totalKeyframes = 0;\n\tfor (let tIdx = 0; tIdx < anim.tracks.length; tIdx++) {\n\t\tconst track = anim.tracks[tIdx];\n\t\tconst keyframes = track.keyframes ?? [];\n\t\ttotalKeyframes += keyframes.length;\n\t\tif ((!track.source || track.source.type === \"keyframe\") && keyframes.length < 1) ctx.addIssue({\n\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\tmessage: `Track for property '${track.prop}' must have at least 1 keyframe.`,\n\t\t\tpath: [\n\t\t\t\t\"tracks\",\n\t\t\t\ttIdx,\n\t\t\t\t\"keyframes\"\n\t\t\t]\n\t\t});\n\t\tconst isDiscrete = track.prop === \"hidden\" || track.prop === \"muted\";\n\t\tconst isColor = track.prop === \"fillColor\" || track.prop === \"strokeColor\" || track.prop === \"fill\" || track.prop === \"color\";\n\t\tfor (let kIdx = 0; kIdx < keyframes.length; kIdx++) {\n\t\t\tconst kf = keyframes[kIdx];\n\t\t\tif (kIdx > 0) {\n\t\t\t\tconst prevKf = keyframes[kIdx - 1];\n\t\t\t\tif (kf.frame < prevKf.frame) ctx.addIssue({\n\t\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\t\tmessage: \"Keyframes must be sorted in ascending order of frame.\",\n\t\t\t\t\tpath: [\n\t\t\t\t\t\t\"tracks\",\n\t\t\t\t\t\ttIdx,\n\t\t\t\t\t\t\"keyframes\",\n\t\t\t\t\t\tkIdx\n\t\t\t\t\t]\n\t\t\t\t});\n\t\t\t\telse if (kf.frame === prevKf.frame) ctx.addIssue({\n\t\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\t\tmessage: \"Duplicate keyframes at the same frame are not allowed.\",\n\t\t\t\t\tpath: [\n\t\t\t\t\t\t\"tracks\",\n\t\t\t\t\t\ttIdx,\n\t\t\t\t\t\t\"keyframes\",\n\t\t\t\t\t\tkIdx\n\t\t\t\t\t]\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst valType = typeof kf.value;\n\t\t\tif (isDiscrete) {\n\t\t\t\tif (valType !== \"boolean\") ctx.addIssue({\n\t\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\t\tmessage: `Keyframe value for discrete property '${track.prop}' must be a boolean.`,\n\t\t\t\t\tpath: [\n\t\t\t\t\t\t\"tracks\",\n\t\t\t\t\t\ttIdx,\n\t\t\t\t\t\t\"keyframes\",\n\t\t\t\t\t\tkIdx,\n\t\t\t\t\t\t\"value\"\n\t\t\t\t\t]\n\t\t\t\t});\n\t\t\t} else if (isColor) {\n\t\t\t\tif (valType !== \"string\") ctx.addIssue({\n\t\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\t\tmessage: `Keyframe value for color property '${track.prop}' must be a string.`,\n\t\t\t\t\tpath: [\n\t\t\t\t\t\t\"tracks\",\n\t\t\t\t\t\ttIdx,\n\t\t\t\t\t\t\"keyframes\",\n\t\t\t\t\t\tkIdx,\n\t\t\t\t\t\t\"value\"\n\t\t\t\t\t]\n\t\t\t\t});\n\t\t\t} else if (valType !== \"number\" || Number.isNaN(kf.value) || !Number.isFinite(kf.value)) ctx.addIssue({\n\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\tmessage: `Keyframe value for numeric property '${track.prop}' must be a finite number.`,\n\t\t\t\tpath: [\n\t\t\t\t\t\"tracks\",\n\t\t\t\t\ttIdx,\n\t\t\t\t\t\"keyframes\",\n\t\t\t\t\tkIdx,\n\t\t\t\t\t\"value\"\n\t\t\t\t]\n\t\t\t});\n\t\t\telse if ((track.prop === \"volume\" || track.prop === \"trimStart\" || track.prop === \"trimEnd\" || track.prop === \"progress\" || track.prop === \"drawProgress\" || track.prop === \"chartProgress\") && (kf.value < 0 || kf.value > 1)) ctx.addIssue({\n\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\tmessage: `Keyframe value for property '${track.prop}' must be between 0 and 1.`,\n\t\t\t\tpath: [\n\t\t\t\t\t\"tracks\",\n\t\t\t\t\ttIdx,\n\t\t\t\t\t\"keyframes\",\n\t\t\t\t\tkIdx,\n\t\t\t\t\t\"value\"\n\t\t\t\t]\n\t\t\t});\n\t\t}\n\t}\n\tif (totalKeyframes > 128) ctx.addIssue({\n\t\tcode: z.ZodIssueCode.custom,\n\t\tmessage: `Total keyframes across all tracks (${totalKeyframes}) exceeds the limit of 128.`,\n\t\tpath: [\"tracks\"]\n\t});\n};\nconst AnimationTrackSchema = z.object({\n\tid: z.string().min(1),\n\tprop: AnimatablePropSchema,\n\tsource: TrackSourceSchema.optional(),\n\tkeyframes: z.array(KeyframeSchema).default([]),\n\trepeat: z.number().int().optional(),\n\tyoyo: z.boolean().optional(),\n\tdurationFrames: z.number().int().min(1).optional()\n}).strict();\nconst LayerAnimationSchema = z.object({ tracks: z.array(AnimationTrackSchema).max(24) }).strict().superRefine(animationInvariants);\nconst BaseNodeFields = {\n\tid: z.string().min(1),\n\tinputHandleId: z.string().optional(),\n\tposition: z.enum([\"relative\", \"absolute\"]).default(\"relative\"),\n\tx: z.union([z.number(), z.custom()]).default(0),\n\ty: z.union([z.number(), z.custom()]).default(0),\n\twidth: SizeSpecSchema.optional(),\n\theight: SizeSpecSchema.optional(),\n\tgrow: z.number().min(0).optional(),\n\tflexShrink: z.number().min(0).optional(),\n\tflexBasis: z.number().min(0).optional(),\n\talignSelf: z.enum([\n\t\t\"auto\",\n\t\t\"start\",\n\t\t\"center\",\n\t\t\"end\",\n\t\t\"stretch\",\n\t\t\"baseline\"\n\t]).optional(),\n\taspectRatio: z.number().positive().optional(),\n\tzIndex: z.number().int().default(0),\n\thidden: z.boolean().default(false),\n\topacity: z.number().min(0).max(1).default(1),\n\tblendMode: z.string().optional(),\n\teffects: z.array(z.unknown()).optional(),\n\trotation: z.number().default(0),\n\tscale: z.number().min(0).default(1),\n\tanchorX: z.number().min(0).max(1).default(.5),\n\tanchorY: z.number().min(0).max(1).default(.5),\n\tstartFrame: z.number().int().min(0).default(0),\n\tdurationFrames: z.number().int().min(1).optional(),\n\tmotionBlurShutter: z.number().min(0).max(360).optional(),\n\trotateX: z.number().default(0),\n\trotateY: z.number().default(0),\n\trotateZ: z.number().default(0),\n\tperspective: z.number().min(0).default(0),\n\tperspectiveOriginX: z.number().default(.5),\n\tperspectiveOriginY: z.number().default(.5),\n\ttranslateZ: z.number().default(0),\n\tbackfaceVisibility: z.enum([\"visible\", \"hidden\"]).default(\"visible\"),\n\ttransformStyle: z.enum([\"flat\", \"preserve-3d\"]).default(\"flat\"),\n\tis3D: z.boolean().default(false),\n\tz: z.union([z.number(), z.custom()]).default(0),\n\tscaleZ: z.number().default(1),\n\ttwoSided: z.boolean().default(true),\n\tmaterial: MaterialTypeSchema.default(\"lit\"),\n\tior: z.number().min(1).max(3).optional(),\n\troughness: z.number().min(0).max(1).optional(),\n\tshininess: z.number().min(1).max(512).default(32),\n\tspecularIntensity: z.number().min(0).default(.5),\n\tmetallic: z.number().min(0).max(1).optional(),\n\tambientIntensity: z.number().min(0).default(1),\n\ttransmission: z.number().min(0).max(1).optional(),\n\tdispersion: z.number().min(0).max(1).optional(),\n\tfresnelPower: z.number().min(1).max(10).optional(),\n\tenvIntensity: z.number().min(0).max(10).optional(),\n\tanimation: LayerAnimationSchema.default({ tracks: [] }),\n\tvision: z.unknown().optional(),\n\trelighting: z.unknown().optional()\n};\nconst TextShadowSchema = z.object({\n\tcolor: ColorSchema,\n\toffset: z.object({\n\t\tx: z.number(),\n\t\ty: z.number()\n\t}).optional(),\n\tblurRadius: z.number().min(0).optional()\n}).strict();\nconst TextAnimatorTransformSchema = z.object({\n\tx: z.number().optional(),\n\ty: z.number().optional(),\n\tscale: z.number().optional(),\n\tscaleX: z.number().optional(),\n\tscaleY: z.number().optional(),\n\trotation: z.number().optional(),\n\trotationX: z.number().optional(),\n\trotationY: z.number().optional(),\n\topacity: z.number().optional(),\n\tblur: z.number().optional(),\n\tcolor: z.string().optional()\n}).strict();\nconst TextAnimatorSchema = z.object({\n\tid: z.string(),\n\tunit: z.enum([\n\t\t\"character\",\n\t\t\"word\",\n\t\t\"line\"\n\t]).default(\"character\"),\n\trangeStart: z.number().min(0).max(1).default(0),\n\trangeEnd: z.number().min(0).max(1).default(1),\n\toffset: z.number().min(-1).max(1).default(0),\n\teasing: z.string().default(\"power2.out\"),\n\ttransform: TextAnimatorTransformSchema.optional()\n});\nconst TextAnimator = {\n\twaveRise(options = {}) {\n\t\treturn {\n\t\t\tid: options.id ?? \"wave-rise\",\n\t\t\tunit: options.unit ?? \"character\",\n\t\t\trangeStart: options.rangeStart ?? 0,\n\t\t\trangeEnd: options.rangeEnd ?? 1,\n\t\t\toffset: options.offset ?? -1,\n\t\t\teasing: options.easing ?? \"power2.out\",\n\t\t\ttransform: {\n\t\t\t\ty: options.y ?? 40,\n\t\t\t\trotationX: options.rotationX ?? 45,\n\t\t\t\topacity: options.opacity ?? 0,\n\t\t\t\tblur: options.blur ?? 0\n\t\t\t}\n\t\t};\n\t},\n\twordPop(options = {}) {\n\t\treturn {\n\t\t\tid: options.id ?? \"word-pop\",\n\t\t\tunit: \"word\",\n\t\t\trangeStart: 0,\n\t\t\trangeEnd: 1,\n\t\t\toffset: -1,\n\t\t\teasing: options.easing ?? \"back.out(1.6)\",\n\t\t\ttransform: {\n\t\t\t\tscale: options.scale ?? 0,\n\t\t\t\ty: options.y ?? 20,\n\t\t\t\topacity: 0\n\t\t\t}\n\t\t};\n\t},\n\tblurIn(options = {}) {\n\t\treturn {\n\t\t\tid: options.id ?? \"blur-in\",\n\t\t\tunit: options.unit ?? \"character\",\n\t\t\trangeStart: 0,\n\t\t\trangeEnd: 1,\n\t\t\toffset: -1,\n\t\t\teasing: options.easing ?? \"power3.out\",\n\t\t\ttransform: {\n\t\t\t\tblur: options.blur ?? 16,\n\t\t\t\ty: options.y ?? 20,\n\t\t\t\topacity: options.opacity ?? 0\n\t\t\t}\n\t\t};\n\t},\n\tflip3D(options = {}) {\n\t\treturn {\n\t\t\tid: options.id ?? \"flip-3d\",\n\t\t\tunit: options.unit ?? \"character\",\n\t\t\trangeStart: 0,\n\t\t\trangeEnd: 1,\n\t\t\toffset: -1,\n\t\t\teasing: options.easing ?? \"back.out(1.4)\",\n\t\t\ttransform: {\n\t\t\t\trotationX: options.rotationX ?? 90,\n\t\t\t\topacity: 0\n\t\t\t}\n\t\t};\n\t},\n\tcolorSweep(options) {\n\t\treturn {\n\t\t\tid: options.id ?? \"color-sweep\",\n\t\t\tunit: options.unit ?? \"character\",\n\t\t\trangeStart: 0,\n\t\t\trangeEnd: .5,\n\t\t\toffset: -.5,\n\t\t\teasing: options.easing ?? \"power2.inOut\",\n\t\t\ttransform: { color: options.color }\n\t\t};\n\t}\n};\nconst CameraLensSchema = z.object({\n\tfocalLength: z.number().min(5).max(500).default(50),\n\tfov: z.number().min(5).max(160).optional(),\n\tsensorWidth: z.number().default(36),\n\tnear: z.number().min(.1).default(1),\n\tfar: z.number().min(10).default(5e4),\n\tzoom: z.number().min(.01).default(1)\n}).strict();\nconst CameraDoFSchema = z.object({\n\tenabled: z.boolean().default(false),\n\tfocusDistance: z.number().min(1).default(1e3),\n\tfStop: z.number().min(.5).max(64).default(2.8),\n\tmaxBlurRadius: z.number().min(0).max(128).default(32),\n\tapertureBlades: z.number().int().min(0).max(12).default(0),\n\tanamorphicRatio: z.number().min(.5).max(3).default(1)\n}).strict();\nconst CameraShakeSchema = z.object({\n\ttranslationAmplitude: z.number().min(0).default(0),\n\trotationAmplitude: z.number().min(0).default(0),\n\tfrequency: z.number().min(.1).max(60).default(2.5),\n\toctaves: z.number().int().min(1).max(6).default(3),\n\tseed: z.number().default(42)\n}).strict();\nconst CameraNodeSchema = z.object({\n\tid: z.string().min(1),\n\tkind: z.literal(\"camera\"),\n\tmode: z.enum([\n\t\t\"lookAt\",\n\t\t\"free\",\n\t\t\"orbit\"\n\t]).default(\"lookAt\"),\n\tx: z.number().optional(),\n\ty: z.number().optional(),\n\tz: z.number().optional(),\n\ttargetX: z.number().optional(),\n\ttargetY: z.number().optional(),\n\ttargetZ: z.number().optional(),\n\tpitch: z.number().default(0),\n\tyaw: z.number().default(0),\n\troll: z.number().default(0),\n\tlens: CameraLensSchema.optional(),\n\tdof: CameraDoFSchema.optional(),\n\tshake: CameraShakeSchema.optional(),\n\tstartFrame: z.number().int().min(0).default(0),\n\tdurationFrames: z.number().int().min(1).optional(),\n\tanimation: LayerAnimationSchema.default({ tracks: [] })\n}).strict();\nconst LightTypeSchema = z.enum([\n\t\"ambient\",\n\t\"directional\",\n\t\"point\",\n\t\"spot\"\n]);\nconst LightNodeSchema = z.object({\n\tid: z.string().min(1),\n\tkind: z.literal(\"light\"),\n\tlightType: LightTypeSchema.default(\"directional\"),\n\tcolor: ColorSchema.default(\"#ffffff\"),\n\tintensity: z.number().default(1),\n\tx: z.number().optional(),\n\ty: z.number().optional(),\n\tz: z.number().optional(),\n\ttargetX: z.number().optional(),\n\ttargetY: z.number().optional(),\n\ttargetZ: z.number().optional(),\n\tdirection: z.tuple([\n\t\tz.number(),\n\t\tz.number(),\n\t\tz.number()\n\t]).optional(),\n\tradius: z.number().min(0).default(1e3),\n\tdecay: z.number().min(0).default(2),\n\tangle: z.number().min(0).max(180).default(45),\n\tpenumbra: z.number().min(0).max(1).default(.2),\n\tstartFrame: z.number().int().min(0).default(0),\n\tdurationFrames: z.number().int().min(1).optional(),\n\tanimation: LayerAnimationSchema.default({ tracks: [] })\n}).strict();\nconst containerChildren = () => z.array(z.lazy(() => LayoutNodeSchema));\nconst FlexNodeSchema = z.object({\n\t...BaseNodeFields,\n\tkind: z.literal(\"flex\"),\n\tdir: z.enum([\"row\", \"column\"]).default(\"row\"),\n\tgap: z.number().min(0).default(0),\n\tpadding: z.number().min(0).default(0),\n\tjustify: z.enum([\n\t\t\"start\",\n\t\t\"center\",\n\t\t\"end\",\n\t\t\"space-between\",\n\t\t\"space-around\"\n\t]).default(\"start\"),\n\talign: z.enum([\n\t\t\"start\",\n\t\t\"center\",\n\t\t\"end\",\n\t\t\"stretch\"\n\t]).default(\"start\"),\n\twrap: z.boolean().default(false),\n\tstaggerFrames: z.number().min(0).default(0),\n\tstaggerDirection: z.enum([\n\t\t\"forward\",\n\t\t\"reverse\",\n\t\t\"center-out\"\n\t]).default(\"forward\"),\n\toverflow: z.enum([\"visible\", \"hidden\"]).default(\"hidden\"),\n\tbackground: ColorSchema.optional(),\n\tborderRadius: z.number().min(0).optional(),\n\tborderColor: ColorSchema.optional(),\n\tborderWidth: z.number().min(0).optional(),\n\tstrokeAlign: z.enum([\n\t\t\"inside\",\n\t\t\"center\",\n\t\t\"outside\"\n\t]).optional(),\n\tstrokeRadius: z.number().min(0).optional(),\n\tchildren: containerChildren().optional()\n}).strict();\nconst BlockNodeSchema = z.object({\n\t...BaseNodeFields,\n\tkind: z.literal(\"block\"),\n\tgap: z.number().min(0).default(0),\n\tpadding: z.number().min(0).default(0),\n\talign: z.enum([\n\t\t\"start\",\n\t\t\"center\",\n\t\t\"end\",\n\t\t\"stretch\"\n\t]).default(\"start\"),\n\tstaggerFrames: z.number().min(0).default(0),\n\tstaggerDirection: z.enum([\n\t\t\"forward\",\n\t\t\"reverse\",\n\t\t\"center-out\"\n\t]).default(\"forward\"),\n\toverflow: z.enum([\"visible\", \"hidden\"]).default(\"hidden\"),\n\tbackground: ColorSchema.optional(),\n\tborderRadius: z.number().min(0).optional(),\n\tborderColor: ColorSchema.optional(),\n\tborderWidth: z.number().min(0).optional(),\n\tstrokeAlign: z.enum([\n\t\t\"inside\",\n\t\t\"center\",\n\t\t\"outside\"\n\t]).optional(),\n\tstrokeRadius: z.number().min(0).optional(),\n\tchildren: containerChildren().optional()\n}).strict();\nconst BoxNodeSchema = z.object({\n\t...BaseNodeFields,\n\tkind: z.literal(\"box\"),\n\tbackground: ColorSchema,\n\tborderRadius: z.number().min(0).optional(),\n\tpadding: z.number().min(0).default(0),\n\tstaggerFrames: z.number().min(0).default(0),\n\tstaggerDirection: z.enum([\n\t\t\"forward\",\n\t\t\"reverse\",\n\t\t\"center-out\"\n\t]).default(\"forward\"),\n\toverflow: z.enum([\"visible\", \"hidden\"]).default(\"hidden\"),\n\tborderColor: ColorSchema.optional(),\n\tborderWidth: z.number().min(0).optional(),\n\tstrokeAlign: z.enum([\n\t\t\"inside\",\n\t\t\"center\",\n\t\t\"outside\"\n\t]).optional(),\n\tstrokeRadius: z.number().min(0).optional(),\n\tchildren: containerChildren().optional()\n}).strict();\nconst TextSpanMarkSchema = z.object({\n\tbackground: ColorSchema,\n\tborderRadius: z.number().min(0).optional(),\n\tpaddingX: z.number().min(0).optional(),\n\tpaddingY: z.number().min(0).optional()\n}).strict();\nconst TextSpanSchema = z.object({\n\ttext: z.union([z.string(), z.custom((v) => Boolean(v && typeof v === \"object\" && \"get\" in v))]),\n\tfontFamily: z.string().optional(),\n\tfontSize: z.union([z.number().positive(), z.custom((v) => Boolean(v && typeof v === \"object\" && \"get\" in v))]).optional(),\n\tfontWeight: z.union([z.number().int(), z.string()]).optional(),\n\tfontStyle: z.enum([\"normal\", \"italic\"]).optional(),\n\tfill: z.union([ColorSchema, z.custom((v) => Boolean(v && typeof v === \"object\" && \"get\" in v))]).optional(),\n\tletterSpacing: z.number().optional(),\n\tbaselineShift: z.number().optional(),\n\topacity: z.union([z.number().min(0).max(1), z.custom((v) => Boolean(v && typeof v === \"object\" && \"get\" in v))]).optional(),\n\tmark: TextSpanMarkSchema.optional()\n}).strict();\nconst TextFields = {\n\ttext: z.string().default(\"\"),\n\tspans: z.array(TextSpanSchema).optional(),\n\tfontFamily: z.string().optional(),\n\tfontSize: z.number().positive().optional(),\n\tfontWeight: z.union([z.number().int(), z.string()]).optional(),\n\tfontStyle: z.string().optional(),\n\tfill: ColorSchema,\n\talign: z.enum([\n\t\t\"start\",\n\t\t\"center\",\n\t\t\"end\"\n\t]).optional(),\n\tverticalAlign: z.enum([\n\t\t\"top\",\n\t\t\"middle\",\n\t\t\"bottom\"\n\t]).optional(),\n\tlineHeight: z.number().positive().optional(),\n\tletterSpacing: z.number().optional(),\n\tbackground: ColorSchema,\n\tborderRadius: z.number().min(0).optional(),\n\tpadding: z.number().min(0).optional(),\n\tstroke: ColorSchema,\n\tstrokeWidth: z.number().min(0).optional(),\n\tstrokeAlign: z.enum([\n\t\t\"inside\",\n\t\t\"center\",\n\t\t\"outside\"\n\t]).optional(),\n\ttextShadow: z.string().optional(),\n\tshadows: z.array(TextShadowSchema).optional(),\n\tpathOptions: TextPathOptionsSchema.optional(),\n\ttypewriter: TypewriterAnimatorSchema.optional(),\n\tmarquee: KineticMarqueeConfigSchema.optional(),\n\tanimators: z.array(z.union([\n\t\tTextAnimatorSchema,\n\t\tAETextAnimatorSchema,\n\t\tAdvancedTextAnimatorSchema\n\t])).optional()\n};\nconst TextNodeSchema = z.object({\n\t...BaseNodeFields,\n\t...TextFields,\n\tkind: z.literal(\"text\")\n}).strict();\nconst MediaNodeSchema = z.object({\n\t...BaseNodeFields,\n\tkind: z.literal(\"media\"),\n\tinputHandleId: z.string().min(1),\n\tdataType: z.string().optional(),\n\tfit: z.enum([\n\t\t\"cover\",\n\t\t\"contain\",\n\t\t\"fill\",\n\t\t\"none\"\n\t]).default(\"contain\"),\n\tborderRadius: z.number().min(0).optional(),\n\tborderColor: ColorSchema.optional(),\n\tborderWidth: z.number().min(0).optional(),\n\tstrokeAlign: z.enum([\n\t\t\"inside\",\n\t\t\"center\",\n\t\t\"outside\"\n\t]).optional(),\n\tstrokeRadius: z.number().min(0).optional(),\n\tvolume: z.number().min(0).max(1).default(1),\n\tmuted: z.boolean().default(false),\n\ttrimStartSec: z.number().min(0).optional(),\n\tfontFamily: z.string().optional(),\n\tfontSize: z.number().positive().optional(),\n\tfontWeight: z.union([z.number().int(), z.string()]).optional(),\n\tfontStyle: z.string().optional(),\n\tfill: ColorSchema,\n\talign: z.enum([\n\t\t\"start\",\n\t\t\"center\",\n\t\t\"end\"\n\t]).optional(),\n\tverticalAlign: z.enum([\n\t\t\"top\",\n\t\t\"middle\",\n\t\t\"bottom\"\n\t]).optional(),\n\tlineHeight: z.number().positive().optional(),\n\tletterSpacing: z.number().optional(),\n\tbackground: ColorSchema,\n\tpadding: z.number().min(0).optional(),\n\tstroke: ColorSchema,\n\tstrokeWidth: z.number().min(0).optional(),\n\ttextShadow: z.string().optional(),\n\tshadows: z.array(TextShadowSchema).optional(),\n\tmaxWidth: z.number().optional()\n}).strict();\nconst ShapeFields = {\n\tshapeType: ShapeTypeSchema.default(\"rect\"),\n\tborderRadius: z.number().min(0).optional(),\n\tradiusTL: z.number().min(0).optional(),\n\tradiusTR: z.number().min(0).optional(),\n\tradiusBR: z.number().min(0).optional(),\n\tradiusBL: z.number().min(0).optional(),\n\tpolygonSides: z.number().int().min(3).max(64).optional(),\n\tstarPoints: z.number().int().min(3).max(64).optional(),\n\tstarInnerRadiusRatio: z.number().min(.01).max(.99).optional(),\n\tarrowHeadWidth: z.number().min(0).optional(),\n\tarrowHeadLength: z.number().min(0).optional(),\n\tarrowShaftWidth: z.number().min(1).optional(),\n\td: z.string().optional(),\n\tfillType: z.enum([\n\t\t\"solid\",\n\t\t\"linear\",\n\t\t\"radial\",\n\t\t\"none\"\n\t]).default(\"solid\"),\n\tfillColor: ColorSchema.default(\"#3b82f6\"),\n\tgradientEndColor: ColorSchema.optional(),\n\tgradientAngle: z.number().default(0),\n\tstrokeColor: ColorSchema.default(\"#ffffff\"),\n\tstrokeWidth: z.number().min(0).default(0),\n\tstrokeDashArray: z.string().optional(),\n\tstrokeDashOffset: z.number().default(0),\n\tstrokeLineCap: z.enum([\n\t\t\"butt\",\n\t\t\"round\",\n\t\t\"square\"\n\t]).default(\"round\"),\n\tstrokeLineJoin: z.enum([\n\t\t\"miter\",\n\t\t\"round\",\n\t\t\"bevel\"\n\t]).default(\"round\"),\n\tstrokeAlign: z.enum([\n\t\t\"inside\",\n\t\t\"center\",\n\t\t\"outside\"\n\t]).optional(),\n\ttrimStart: z.number().min(0).max(1).default(0),\n\ttrimEnd: z.number().min(0).max(1).default(1),\n\ttrimOffset: z.number().default(0)\n};\nconst ShapeNodeSchema = z.object({\n\t...BaseNodeFields,\n\t...ShapeFields,\n\tkind: z.literal(\"shape\")\n}).strict();\nconst ChartSeriesTypeSchema = z.enum([\n\t\"line\",\n\t\"area\",\n\t\"bar\",\n\t\"candlestick\",\n\t\"ohlc\",\n\t\"pie\",\n\t\"heatmap\",\n\t\"band\",\n\t\"errorBar\",\n\t\"impulse\",\n\t\"pointCloud3d\",\n\t\"surface3d\"\n]);\nconst ColorStopSchema = z.object({\n\toffset: z.number().min(0).max(1),\n\tcolor: z.string()\n});\nconst ChartLineStyleSchema = z.object({\n\tcolor: z.string().default(\"#3b82f6\"),\n\twidth: z.number().min(.5).default(2),\n\tsmooth: z.boolean().default(true),\n\tdash: z.array(z.number()).optional(),\n\topacity: z.number().min(0).max(1).default(1)\n}).strict();\nconst ChartAreaStyleSchema = z.object({\n\tcolor: z.string().optional(),\n\tgradient: z.object({\n\t\tdirection: z.enum([\"vertical\", \"horizontal\"]).default(\"vertical\"),\n\t\tstops: z.array(ColorStopSchema).min(2)\n\t}).optional(),\n\topacity: z.number().min(0).max(1).default(.35)\n}).strict();\nconst ChartPointStyleSchema = z.object({\n\tshow: z.boolean().default(false),\n\tsize: z.number().min(1).default(4),\n\tcolor: z.string().optional(),\n\tshape: z.enum([\n\t\t\"circle\",\n\t\t\"square\",\n\t\t\"diamond\"\n\t]).default(\"circle\")\n}).strict();\nconst ChartDataPoint2DSchema = z.union([z.tuple([z.number(), z.number()]), z.object({\n\tx: z.number(),\n\ty: z.number()\n})]);\nconst ChartDataPointOHLCSchema = z.union([z.tuple([\n\tz.number(),\n\tz.number(),\n\tz.number(),\n\tz.number(),\n\tz.number()\n]), z.object({\n\ttimestamp: z.number(),\n\topen: z.number(),\n\thigh: z.number(),\n\tlow: z.number(),\n\tclose: z.number()\n})]);\nconst ChartSeriesSchema = z.object({\n\tid: z.string().optional(),\n\tname: z.string().optional(),\n\ttype: ChartSeriesTypeSchema.default(\"line\"),\n\tdata: z.union([\n\t\tz.array(ChartDataPoint2DSchema),\n\t\tz.array(ChartDataPointOHLCSchema),\n\t\tz.array(z.number())\n\t]),\n\tlineStyle: ChartLineStyleSchema.optional(),\n\tareaStyle: ChartAreaStyleSchema.optional(),\n\titemStyle: ChartPointStyleSchema.optional(),\n\tyAxisIndex: z.number().int().min(0).default(0),\n\tvisible: z.boolean().default(true),\n\tprogress: z.number().min(0).max(1).default(1)\n}).strict();\nconst ChartAxisSchema = z.object({\n\tid: z.string().optional(),\n\ttype: z.enum([\n\t\t\"value\",\n\t\t\"category\",\n\t\t\"time\",\n\t\t\"log\"\n\t]).default(\"value\"),\n\tshow: z.boolean().default(true),\n\tmin: z.number().optional(),\n\tmax: z.number().optional(),\n\tgrid: z.object({\n\t\tshow: z.boolean().default(true),\n\t\tcolor: z.string().default(\"rgba(255, 255, 255, 0.08)\"),\n\t\twidth: z.number().default(1),\n\t\tdash: z.array(z.number()).optional()\n\t}).optional(),\n\tline: z.object({\n\t\tshow: z.boolean().default(true),\n\t\tcolor: z.string().default(\"rgba(255, 255, 255, 0.2)\"),\n\t\twidth: z.number().default(1)\n\t}).optional(),\n\tticks: z.object({\n\t\tshow: z.boolean().default(true),\n\t\tcount: z.number().int().min(2).max(50).optional()\n\t}).optional(),\n\tlabels: z.object({\n\t\tshow: z.boolean().default(true),\n\t\tfontFamily: z.string().default(\"Inter, sans-serif\"),\n\t\tfontSize: z.number().default(11),\n\t\tcolor: z.string().default(\"rgba(255, 255, 255, 0.6)\"),\n\t\tformat: z.string().optional()\n\t}).optional()\n}).strict();\nconst ChartGPUOptionsSchema = z.object({\n\ttheme: z.enum([\"dark\", \"light\"]).default(\"dark\"),\n\tbackgroundColor: z.string().default(\"transparent\"),\n\tpadding: z.object({\n\t\ttop: z.number().default(20),\n\t\tright: z.number().default(20),\n\t\tbottom: z.number().default(30),\n\t\tleft: z.number().default(40)\n\t}).default({\n\t\ttop: 20,\n\t\tright: 20,\n\t\tbottom: 30,\n\t\tleft: 40\n\t}),\n\txAxis: ChartAxisSchema.default({\n\t\ttype: \"category\",\n\t\tshow: true\n\t}),\n\tyAxis: z.union([ChartAxisSchema, z.array(ChartAxisSchema)]).default({\n\t\ttype: \"value\",\n\t\tshow: true\n\t}),\n\tseries: z.array(ChartSeriesSchema).min(1),\n\tdrawProgress: z.number().min(0).max(1).default(1),\n\tsamples: z.union([z.literal(1), z.literal(4)]).default(4)\n}).strict();\nconst ChartNodeSchema = z.object({\n\t...BaseNodeFields,\n\tkind: z.literal(\"chart\"),\n\tchartOptions: ChartGPUOptionsSchema,\n\tprogress: z.number().min(0).max(1).default(1),\n\tdrawProgress: z.number().min(0).max(1).default(1)\n}).strict();\nconst CompositionChartNodeSchema = ChartNodeSchema;\nconst Model3DNodeSchema = z.object({\n\t...BaseNodeFields,\n\tkind: z.literal(\"model3d\"),\n\tsrc: z.string().default(\"\"),\n\tmodelFormat: z.enum([\n\t\t\"obj\",\n\t\t\"fbx\",\n\t\t\"gltf\",\n\t\t\"glb\",\n\t\t\"stl\",\n\t\t\"ply\",\n\t\t\"vox\",\n\t\t\"3ds\",\n\t\t\"off\",\n\t\t\"auto\"\n\t]).default(\"auto\"),\n\tmodelData: z.unknown().optional(),\n\tanimationName: z.string().optional(),\n\tanimationProgress: z.number().min(0).max(1).default(0),\n\tanimationTime: z.number().min(0).default(0),\n\tanimationSpeed: z.number().default(1),\n\tloop: z.boolean().default(true),\n\twireframe: z.boolean().default(false),\n\ttexture: z.string().optional(),\n\tcenter: z.boolean().optional(),\n\tnormalizeSize: z.number().optional(),\n\tscaleX: z.number().default(1),\n\tscaleY: z.number().default(1),\n\taudioDeform: z.record(z.string(), z.unknown()).optional(),\n\ttext3dOptions: z.unknown().optional()\n}).strict();\nconst LayoutNodeSchema = z.lazy(() => z.union([\n\tFlexNodeSchema,\n\tBlockNodeSchema,\n\tBoxNodeSchema,\n\tTextNodeSchema,\n\tMediaNodeSchema,\n\tShapeNodeSchema,\n\tChartNodeSchema,\n\tCameraNodeSchema,\n\tLightNodeSchema,\n\tModel3DNodeSchema\n]));\nconst CompositorProgramSchema = z.object({\n\twidth: z.number().int().min(1).max(4096),\n\theight: z.number().int().min(1).max(4096),\n\tbackgroundColor: ColorSchema,\n\tvolume: z.number().min(0).max(1).default(1),\n\tfps: z.number().int().min(1).max(120).default(24),\n\tmode: z.enum([\"Video\", \"Image\"]).default(\"Video\"),\n\tlayout: z.array(LayoutNodeSchema).default([]),\n\tfonts: z.array(z.string()).optional(),\n\tsignals: z.record(z.string(), z.unknown()).optional(),\n\teffects: z.array(z.unknown()).optional(),\n\tvision: z.unknown().optional(),\n\tonRequestFrame: z.custom().optional()\n}).strict();\n\n//#endregion\n//#region src/program/sequence.ts\n/**\n* @file program/sequence.ts\n* @module @gitframes/compositions/program/sequence\n*\n* Multi-Scene Timeline Orchestration, Camera Choreography & Carrier Match Cuts.\n* Complies with specs/cinematic-sequencing.ts.\n*/\n/**\n* Camera Transition Type across scene boundaries.\n*/\nconst SceneTransitionTypeSchema = z.enum([\n\t\"cut\",\n\t\"carrierMatchCut\",\n\t\"cameraWhip\",\n\t\"focusPullDissolve\",\n\t\"irisAperture\",\n\t\"pushDirectional\"\n]);\n/**\n* Carrier Object Handoff Configuration Schema.\n*/\nconst CarrierHandoffConfigSchema = z.object({\n\tsourceLayerId: z.string(),\n\ttargetLayerId: z.string(),\n\tmode: z.enum([\n\t\t\"exact\",\n\t\t\"preserveVelocity\",\n\t\t\"morph\"\n\t]).default(\"preserveVelocity\"),\n\tblendFrames: z.number().int().min(0).max(30).default(0)\n}).strict();\n/**\n* Individual Scene Definition Schema.\n*/\nconst SceneDefinitionSchema = z.object({\n\tid: z.string(),\n\tchapter: z.enum([\n\t\t\"hook\",\n\t\t\"tension\",\n\t\t\"solution\",\n\t\t\"feature_spotlight\",\n\t\t\"outro\",\n\t\t\"custom\"\n\t]).default(\"custom\"),\n\tdurationMs: z.number().positive().optional(),\n\tdurationFrames: z.number().int().positive().optional(),\n\ttransitionOut: z.object({\n\t\ttype: SceneTransitionTypeSchema.default(\"cut\"),\n\t\tdurationFrames: z.number().int().min(0).default(0),\n\t\tcarrier: CarrierHandoffConfigSchema.optional(),\n\t\twhipDirection: z.enum([\n\t\t\t\"left\",\n\t\t\t\"right\",\n\t\t\t\"up\",\n\t\t\t\"down\"\n\t\t]).default(\"left\")\n\t}).default({\n\t\ttype: \"cut\",\n\t\tdurationFrames: 0\n\t})\n}).passthrough();\nfunction computeCarrierContinuity(stateAtCut, targetInitialState) {\n\treturn {\n\t\tx: stateAtCut.x,\n\t\ty: stateAtCut.y,\n\t\tscale: stateAtCut.scale,\n\t\tvx: stateAtCut.vx,\n\t\tvy: stateAtCut.vy,\n\t\t...targetInitialState\n\t};\n}\n/**\n* Calculates global scene offsets and handoff frames across a sequence.\n*/\nfunction calculateSequenceTimeline(scenes, fps = 60) {\n\tlet accumulatedFrame = 0;\n\tconst offsets = [];\n\tfor (const scene of scenes) {\n\t\tconst startFrame = accumulatedFrame;\n\t\tconst dur = scene.durationFrames ?? (scene.durationMs ? Math.round(scene.durationMs / 1e3 * fps) : 60);\n\t\toffsets.push({\n\t\t\tsceneId: scene.id,\n\t\t\tstartFrame,\n\t\t\tdurationFrames: dur\n\t\t});\n\t\tconst overlap = scene.transitionOverlap ?? scene.transitionOut?.durationFrames ?? 0;\n\t\taccumulatedFrame += Math.max(1, dur - overlap);\n\t}\n\tconst totalFrames = accumulatedFrame;\n\treturn {\n\t\ttotalFrames,\n\t\ttotalDurationMs: Math.round(totalFrames / fps * 1e3),\n\t\tsceneOffsets: offsets\n\t};\n}\nvar Scene = class Scene {\n\tid;\n\tchapter;\n\tdurationMs;\n\tdurationFrames;\n\ttransitionOut;\n\tlayout;\n\tconstructor(options) {\n\t\tthis.id = options.id;\n\t\tthis.chapter = options.chapter ?? \"custom\";\n\t\tthis.durationMs = options.durationMs;\n\t\tthis.durationFrames = options.durationFrames;\n\t\tthis.transitionOut = {\n\t\t\ttype: options.transitionOut?.type ?? \"cut\",\n\t\t\tdurationFrames: options.transitionOut?.durationFrames ?? 0,\n\t\t\tcarrier: options.transitionOut?.carrier,\n\t\t\twhipDirection: options.transitionOut?.whipDirection ?? \"left\"\n\t\t};\n\t\tthis.layout = options.layout ?? [];\n\t}\n\tstatic create(options) {\n\t\treturn new Scene(options);\n\t}\n};\nvar Sequence = class Sequence {\n\tfps;\n\twidth;\n\theight;\n\tbackgroundColor;\n\tfonts;\n\tsignals;\n\tscenes = [];\n\tconstructor(options = {}) {\n\t\tthis.fps = options.fps ?? 60;\n\t\tthis.width = options.width ?? 1920;\n\t\tthis.height = options.height ?? 1080;\n\t\tthis.backgroundColor = options.backgroundColor ?? \"#ffffff\";\n\t\tthis.fonts = options.fonts;\n\t\tthis.signals = options.signals;\n\t\tif (options.scenes) for (const sc of options.scenes) this.addScene(sc);\n\t}\n\tstatic create(options = {}) {\n\t\treturn new Sequence(options);\n\t}\n\taddScene(scene) {\n\t\tconst s = scene instanceof Scene ? scene : new Scene(scene);\n\t\tthis.scenes.push(s);\n\t\treturn this;\n\t}\n\tgetScenes() {\n\t\treturn this.scenes;\n\t}\n\tcalculateTimeline() {\n\t\treturn calculateSequenceTimeline(this.scenes, this.fps);\n\t}\n\ttoProgram() {\n\t\tconst timeline = this.calculateTimeline();\n\t\tconst rootLayout = [];\n\t\tfor (let i = 0; i < this.scenes.length; i++) {\n\t\t\tconst scene = this.scenes[i];\n\t\t\tconst offset = timeline.sceneOffsets[i];\n\t\t\tif (!offset) continue;\n\t\t\tfor (const node of scene.layout) {\n\t\t\t\tconst cloned = { ...node };\n\t\t\t\tcloned.startFrame = (cloned.startFrame ?? 0) + offset.startFrame;\n\t\t\t\tif (cloned.durationFrames === void 0) cloned.durationFrames = offset.durationFrames;\n\t\t\t\trootLayout.push(cloned);\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\twidth: this.width,\n\t\t\theight: this.height,\n\t\t\tbackgroundColor: this.backgroundColor,\n\t\t\tfps: this.fps,\n\t\t\tvolume: 1,\n\t\t\tmode: \"Video\",\n\t\t\tlayout: rootLayout,\n\t\t\tfonts: this.fonts,\n\t\t\tsignals: this.signals\n\t\t};\n\t}\n};\n\n//#endregion\n//#region src/program/stagger.ts\n/**\n* Calculates the frame delay offset for a child at `index` in a container of `totalCount` items.\n*/\nfunction computeStaggerDelay(index, totalCount, staggerFrames, direction = \"forward\") {\n\tif (staggerFrames <= 0 || totalCount <= 1) return 0;\n\tswitch (direction) {\n\t\tcase \"reverse\": return (totalCount - 1 - index) * staggerFrames;\n\t\tcase \"center-out\": {\n\t\t\tconst center = (totalCount - 1) / 2;\n\t\t\tconst dist = Math.abs(index - center);\n\t\t\treturn Math.round(dist * staggerFrames);\n\t\t}\n\t\tcase \"forward\":\n\t\tdefault: return index * staggerFrames;\n\t}\n}\n/**\n* Applies stagger timing offsets to child nodes, returning cloned objects with adjusted `startFrame`.\n*/\nfunction applyStaggerToChildren(children, staggerFrames, direction = \"forward\", baseOffset = 0) {\n\tif (!children || children.length === 0) return [];\n\tif (staggerFrames <= 0 && baseOffset === 0) return [...children];\n\treturn children.map((child, idx) => {\n\t\tconst delay = computeStaggerDelay(idx, children.length, staggerFrames, direction);\n\t\tconst currentStart = child.startFrame ?? 0;\n\t\treturn {\n\t\t\t...child,\n\t\t\tstartFrame: currentStart + delay + baseOffset\n\t\t};\n\t});\n}\n\n//#endregion\n//#region src/program/to-virtual-media.ts\n/**\n* The ONE constructor from document to render tree (spec: SKILL.md).\n*\n* A validated v2 program (`CompositorProgramConfig`) becomes the\n* `VirtualMediaData` tree the compositor renderer consumes. Every layout node\n* becomes a `CompositorLayer` op carrying its document fields verbatim\n* (id/kind/style/timing/animation); containers carry nested node ops as\n* children; media nodes bind their graph source as the content child when\n* resolved.\n*\n* Pure + deterministic: same doc → same tree. No width/height resolution\n* here — geometry comes from `computeLayout` at render time.\n*/\nfunction nodeToVirtualMedia(node, resolveMedia, fps, inheritedOffset = 0, compDurationMs, inheritedDurationFrames) {\n\tlet children = [];\n\tconst sourceRef = node.src ?? node.inputHandleId;\n\tconst isDirectMediaSource = (s) => typeof s === \"string\" && (s.startsWith(\"http://\") || s.startsWith(\"https://\") || s.startsWith(\"file://\") || s.startsWith(\"/\") || s.startsWith(\"./\") || s.startsWith(\"blob:\") || s.startsWith(\"data:\") || /\\.(png|jpe?g|webp|gif|svg|mp4|webm|mov|mkv|mp3|wav|ogg|m4a|srt|vtt)$/i.test(s));\n\tlet media;\n\tif (node.kind === \"media\") {\n\t\tif (resolveMedia) media = resolveMedia(node.inputHandleId);\n\t\tif (!media && sourceRef && (isDirectMediaSource(sourceRef) || node.src)) media = createVirtualMedia(sourceRef, node.dataType ?? \"Video\");\n\t\tif (media && node.crop) {\n\t\t\tconst cropRaw = node.crop;\n\t\t\tconst cropOp = typeof cropRaw.toOperation === \"function\" ? cropRaw.toOperation() : cropRaw;\n\t\t\tmedia = {\n\t\t\t\tmetadata: { ...media.metadata },\n\t\t\t\toperation: {\n\t\t\t\t\top: \"Crop\",\n\t\t\t\t\t...cropOp,\n\t\t\t\t\tdataType: media.operation.dataType\n\t\t\t\t},\n\t\t\t\tchildren: [media]\n\t\t\t};\n\t\t}\n\t\tif (media && Array.isArray(node.effects)) for (const eff of node.effects) {\n\t\t\tconst effOp = typeof eff.toOperation === \"function\" ? eff.toOperation() : eff;\n\t\t\tmedia = {\n\t\t\t\tmetadata: { ...media.metadata },\n\t\t\t\toperation: {\n\t\t\t\t\tid: node.id ? `${node.id}-${effOp.op ?? \"effect\"}` : void 0,\n\t\t\t\t\teffect: eff,\n\t\t\t\t\t...effOp,\n\t\t\t\t\tdataType: media.operation.dataType\n\t\t\t\t},\n\t\t\t\tchildren: [media]\n\t\t\t};\n\t\t}\n\t\tif (media && node.vision) {\n\t\t\tconst visionRaw = node.vision;\n\t\t\tconst visionOp = typeof visionRaw.toOperation === \"function\" ? visionRaw.toOperation() : visionRaw;\n\t\t\tmedia = {\n\t\t\t\tmetadata: { ...media.metadata },\n\t\t\t\toperation: {\n\t\t\t\t\top: \"Vision\",\n\t\t\t\t\tid: node.id,\n\t\t\t\t\teffect: visionRaw,\n\t\t\t\t\t...visionOp,\n\t\t\t\t\tdataType: media.operation.dataType\n\t\t\t\t},\n\t\t\t\tchildren: [media]\n\t\t\t};\n\t\t}\n\t}\n\tif (node.kind === \"media\") children = media ? [media] : [];\n\telse if (\"children\" in node && node.children) {\n\t\tconst staggerFrames = \"staggerFrames\" in node && typeof node.staggerFrames === \"number\" ? node.staggerFrames : 0;\n\t\tconst staggerDirection = \"staggerDirection\" in node && typeof node.staggerDirection === \"string\" ? node.staggerDirection : \"forward\";\n\t\tconst nodeStart = typeof node.startFrame === \"number\" && Number.isFinite(node.startFrame) ? Math.round(node.startFrame) : 0;\n\t\tconst nodeDuration = typeof node.durationFrames === \"number\" && Number.isFinite(node.durationFrames) ? Math.round(node.durationFrames) : inheritedDurationFrames;\n\t\tchildren = node.children.map((c, idx) => {\n\t\t\tconst delay = computeStaggerDelay(idx, node.children.length, staggerFrames, staggerDirection);\n\t\t\treturn nodeToVirtualMedia(c, resolveMedia, fps, inheritedOffset + nodeStart + delay, compDurationMs, c.durationFrames === void 0 ? nodeDuration : void 0);\n\t\t});\n\t}\n\tlet dataType = \"Image\";\n\tlet limit;\n\tif (media) {\n\t\tdataType = media.operation?.dataType ?? \"Image\";\n\t\tconst durationMs$1 = dataType === \"Image\" || dataType === \"SVG\" ? void 0 : getActiveMediaMetadata(media)?.durationMs;\n\t\tif (durationMs$1 !== void 0 && durationMs$1 !== null) limit = Math.max(1, Math.round(durationMs$1 / 1e3 * fps));\n\t}\n\tconst isCaption = media?.operation?.dataType === \"Caption\";\n\tconst isContainer = node.kind === \"flex\" || node.kind === \"block\" || node.kind === \"box\";\n\tconst startFrame = (typeof node.startFrame === \"number\" && Number.isFinite(node.startFrame) && node.startFrame >= 0 ? Math.round(node.startFrame) : 0) + inheritedOffset;\n\tlet dur = typeof node.durationFrames === \"number\" && Number.isFinite(node.durationFrames) && node.durationFrames > 0 ? Math.round(node.durationFrames) : void 0;\n\tconst defaultCompDuration = inheritedDurationFrames ?? Math.round((compDurationMs ?? 1e4) / 1e3 * fps);\n\tif (isContainer && children.length > 0) {\n\t\tif (node.durationFrames === void 0) {\n\t\t\tconst childEnds = children.map((c) => (c.operation?.startFrame ?? 0) + (c.operation?.durationFrames ?? defaultCompDuration));\n\t\t\tdur = Math.max(1, Math.max(...childEnds) - startFrame);\n\t\t}\n\t} else if (isCaption && limit !== void 0 && limit > 0) dur = limit;\n\telse if (dur !== void 0) {\n\t\tif ((dataType === \"Video\" || dataType === \"Audio\") && limit !== void 0 && limit > 0) dur = Math.min(dur, limit);\n\t} else dur = limit ?? inheritedDurationFrames ?? Math.round((compDurationMs ?? 1e4) / 1e3 * fps);\n\tconst durationMs = dur / fps * 1e3;\n\tif (node.kind === \"media\" && media) {\n\t\tif (!media.metadata?.durationMs || media.metadata.durationMs <= 0) {\n\t\t\tif (!media.metadata) media.metadata = {};\n\t\t\tmedia.metadata.durationMs = durationMs;\n\t\t}\n\t}\n\treturn {\n\t\tmetadata: { durationMs },\n\t\toperation: {\n\t\t\top: \"CompositorLayer\",\n\t\t\t...node,\n\t\t\tstartFrame,\n\t\t\tdurationFrames: dur,\n\t\t\tdataType\n\t\t},\n\t\tchildren\n\t};\n}\nfunction compositorToProgram(config, options) {\n\tconst { isVideoMode, fps, durationMs, resolveMedia, signals } = options;\n\tlet rootMedia = {\n\t\tmetadata: {\n\t\t\twidth: config.width,\n\t\t\theight: config.height,\n\t\t\tfps,\n\t\t\t...durationMs !== void 0 && { durationMs }\n\t\t},\n\t\toperation: {\n\t\t\top: \"Compositor\",\n\t\t\twidth: config.width,\n\t\t\theight: config.height,\n\t\t\tfps,\n\t\t\tmode: config.mode ?? \"Video\",\n\t\t\tbackgroundColor: config.backgroundColor,\n\t\t\tvolume: config.volume ?? 1,\n\t\t\tdataType: isVideoMode ? \"Video\" : \"Image\",\n\t\t\tlayout: config.layout,\n\t\t\tsignals: signals ?? config.signals ?? {},\n\t\t\t...(config.onRequestFrame || options.onRequestFrame) && { onRequestFrame: config.onRequestFrame ?? options.onRequestFrame }\n\t\t},\n\t\tchildren: config.layout.map((n) => nodeToVirtualMedia(n, resolveMedia, fps, 0, durationMs))\n\t};\n\tconst effectsList = Array.isArray(options.effects) ? options.effects : Array.isArray(config.effects) ? config.effects : [];\n\tfor (const eff of effectsList) {\n\t\tconst effOp = typeof eff.toOperation === \"function\" ? eff.toOperation() : eff;\n\t\trootMedia = {\n\t\t\tmetadata: { ...rootMedia.metadata },\n\t\t\toperation: {\n\t\t\t\t...effOp,\n\t\t\t\tdataType: rootMedia.operation.dataType\n\t\t\t},\n\t\t\tchildren: [rootMedia]\n\t\t};\n\t}\n\tconst visionRaw = config.vision ?? options.vision;\n\tif (visionRaw) {\n\t\tconst visionOp = typeof visionRaw.toOperation === \"function\" ? visionRaw.toOperation() : visionRaw;\n\t\trootMedia = {\n\t\t\tmetadata: { ...rootMedia.metadata },\n\t\t\toperation: {\n\t\t\t\top: \"Vision\",\n\t\t\t\t...visionOp,\n\t\t\t\tdataType: rootMedia.operation.dataType\n\t\t\t},\n\t\t\tchildren: [rootMedia]\n\t\t};\n\t}\n\treturn rootMedia;\n}\n/** Recursively gather every node op from a render tree (in order). */\nfunction collectNodeOps(nodes) {\n\tconst out = [];\n\tconst walk = (vm) => {\n\t\tif (vm?.operation?.op === \"CompositorLayer\") out.push(vm);\n\t\tfor (const c of vm?.children ?? []) walk(c);\n\t};\n\tfor (const n of nodes) walk(n);\n\treturn out;\n}\n\n//#endregion\n//#region src/program/validate.ts\n/**\n* Coded validation for the v2 program document (spec: SKILL.md).\n*\n* Runs on the RAW input BEFORE zod: zod strips unknown keys silently, so\n* v1 shapes (`layers`, `layerUpdates`, `FPS`) and structural errors must be\n* caught in a pre-parse walk or the E-codes never fire. The zod schema then\n* handles shape/refinement errors (mapped to E1xxx-style issues).\n*/\nconst KIND_SET = new Set([\n\t\"flex\",\n\t\"block\",\n\t\"box\",\n\t\"text\",\n\t\"media\",\n\t\"shape\",\n\t\"chart\"\n]);\nconst MAX_NODES = 512;\nconst MAX_DEPTH = 64;\nconst issue = (code, path, message) => ({\n\tcode,\n\tpath,\n\tmessage\n});\nfunction validateLayoutProgram(raw) {\n\tconst issues = [];\n\tif (!raw || typeof raw !== \"object\" || Array.isArray(raw)) return {\n\t\tok: false,\n\t\tissues: [issue(\"E1001\", [], \"Compositor config must be an object.\")]\n\t};\n\tconst obj = raw;\n\tif (\"layers\" in obj) issues.push(issue(\"E1001\", [\"layers\"], \"Config v2 uses `layout` — `layers` is removed.\"));\n\tif (\"layerUpdates\" in obj) issues.push(issue(\"E1001\", [\"layerUpdates\"], \"Config v2 uses `layout` — `layerUpdates` is removed.\"));\n\tif (\"FPS\" in obj) issues.push(issue(\"E1001\", [\"FPS\"], \"Config v2 uses `fps` — `FPS` is removed.\"));\n\tconst seenIds = /* @__PURE__ */ new Set();\n\tlet nodeCount = 0;\n\tconst isImageMode = obj.mode === \"Image\";\n\tconst walk = (node, path, depth) => {\n\t\tif (depth > MAX_DEPTH) {\n\t\t\tissues.push(issue(\"E1212\", [...path, \"children\"], `Layout nesting exceeds ${MAX_DEPTH} levels.`));\n\t\t\treturn;\n\t\t}\n\t\tif (!node || typeof node !== \"object\" || Array.isArray(node)) {\n\t\t\tissues.push(issue(\"E1201\", path, \"Layout node must be an object.\"));\n\t\t\treturn;\n\t\t}\n\t\tnodeCount += 1;\n\t\tif (nodeCount > MAX_NODES) {\n\t\t\tissues.push(issue(\"E1211\", path, `Composition exceeds ${MAX_NODES} nodes.`));\n\t\t\treturn;\n\t\t}\n\t\tconst n = node;\n\t\tconst kind = n.kind;\n\t\tif (typeof kind !== \"string\" || !KIND_SET.has(kind)) issues.push(issue(\"E1201\", [...path, \"kind\"], `Unknown layout node kind '${String(kind)}'. Expected one of: flex, block, box, text, media, shape, chart.`));\n\t\tconst id = n.id;\n\t\tif (typeof id !== \"string\" || id.length === 0) issues.push(issue(\"E1203\", [...path, \"id\"], \"Layout node requires a non-empty `id`.\"));\n\t\telse if (seenIds.has(id)) issues.push(issue(\"E1202\", [...path, \"id\"], `Duplicate node id '${id}'.`));\n\t\telse seenIds.add(id);\n\t\tfor (const axis of [\"width\", \"height\"]) {\n\t\t\tconst v = n[axis];\n\t\t\tif (typeof v === \"number\" && (!Number.isFinite(v) || v < 0)) issues.push(issue(\"E1205\", [...path, axis], `SizeSpec must be a finite number >= 0 or one of \"auto\" | \"fit\" | \"fill\".`));\n\t\t\telse if (typeof v === \"string\" && v !== \"auto\" && v !== \"fit\" && v !== \"fill\") issues.push(issue(\"E1205\", [...path, axis], `SizeSpec must be a finite number >= 0 or one of \"auto\" | \"fit\" | \"fill\".`));\n\t\t}\n\t\tif (n.position === \"absolute\") {\n\t\t\tif (typeof n.x !== \"number\" || typeof n.y !== \"number\") issues.push(issue(\"E1206\", [...path], \"An absolute node requires numeric `x` and `y`.\"));\n\t\t\tif (n.grow !== void 0) issues.push(issue(\"E1209\", [...path, \"grow\"], \"`grow` is not allowed on an absolute node (it is out of flow).\"));\n\t\t}\n\t\tif (kind === \"media\" && (typeof n.inputHandleId !== \"string\" || n.inputHandleId.length === 0)) issues.push(issue(\"E1204\", [...path, \"inputHandleId\"], \"A media node requires a non-empty `inputHandleId`.\"));\n\t\tif (kind === \"text\" && typeof n.fontSize === \"number\" && n.fontSize <= 0) issues.push(issue(\"E1210\", [...path, \"fontSize\"], \"A text node requires fontSize > 0.\"));\n\t\tif (kind === \"shape\") {\n\t\t\tif (n.trimStart !== void 0) {\n\t\t\t\tconst ts = n.trimStart;\n\t\t\t\tif (typeof ts !== \"number\" || !Number.isFinite(ts) || Number.isNaN(ts) || ts < 0 || ts > 1) issues.push(issue(\"E1208\", [...path, \"trimStart\"], \"`trimStart` must be a finite number between 0 and 1.\"));\n\t\t\t}\n\t\t\tif (n.trimEnd !== void 0) {\n\t\t\t\tconst te = n.trimEnd;\n\t\t\t\tif (typeof te !== \"number\" || !Number.isFinite(te) || Number.isNaN(te) || te < 0 || te > 1) issues.push(issue(\"E1208\", [...path, \"trimEnd\"], \"`trimEnd` must be a finite number between 0 and 1.\"));\n\t\t\t}\n\t\t}\n\t\tif (!isImageMode) {\n\t\t\tif (n.durationFrames !== void 0) {\n\t\t\t\tconst df = n.durationFrames;\n\t\t\t\tif (typeof df !== \"number\" || !Number.isFinite(df) || Number.isNaN(df) || df < 1 || !Number.isInteger(df)) issues.push(issue(\"E1207\", [...path, \"durationFrames\"], `\\`durationFrames\\` must be a positive integer (>= 1). Received: ${String(df)}.`));\n\t\t\t}\n\t\t\tif (n.startFrame !== void 0) {\n\t\t\t\tconst sf = n.startFrame;\n\t\t\t\tif (typeof sf !== \"number\" || !Number.isFinite(sf) || Number.isNaN(sf) || sf < 0 || !Number.isInteger(sf)) issues.push(issue(\"E1207\", [...path, \"startFrame\"], `\\`startFrame\\` must be a non-negative integer (>= 0). Received: ${String(sf)}.`));\n\t\t\t}\n\t\t}\n\t\tif (n.opacity !== void 0) {\n\t\t\tconst op = n.opacity;\n\t\t\tif (typeof op !== \"number\" || !Number.isFinite(op) || Number.isNaN(op) || op < 0 || op > 1) issues.push(issue(\"E1213\", [...path, \"opacity\"], `\\`opacity\\` must be a number between 0 and 1. Received: ${String(op)}.`));\n\t\t}\n\t\tconst anim = n.animation;\n\t\tif (anim && Array.isArray(anim.tracks) && kind !== void 0) {\n\t\t\tconst props = /* @__PURE__ */ new Set();\n\t\t\tfor (let tIdx = 0; tIdx < anim.tracks.length; tIdx++) {\n\t\t\t\tconst prop = anim.tracks[tIdx]?.prop;\n\t\t\t\tif (typeof prop === \"string\") {\n\t\t\t\t\tif (props.has(prop)) issues.push(issue(\"E1208\", [\n\t\t\t\t\t\t...path,\n\t\t\t\t\t\t\"animation\",\n\t\t\t\t\t\t\"tracks\",\n\t\t\t\t\t\ttIdx\n\t\t\t\t\t], `Duplicate track property '${prop}' on node '${String(id)}'.`));\n\t\t\t\t\tprops.add(prop);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst children = n.children;\n\t\tif (Array.isArray(children)) for (let i = 0; i < children.length; i++) walk(children[i], [\n\t\t\t...path,\n\t\t\t\"children\",\n\t\t\ti\n\t\t], depth + 1);\n\t};\n\tconst layout = obj.layout;\n\tif (Array.isArray(layout)) for (let i = 0; i < layout.length; i++) walk(layout[i], [\"layout\", i], 0);\n\telse if (layout !== void 0) issues.push(issue(\"E1001\", [\"layout\"], \"`layout` must be an array of nodes.\"));\n\tif (issues.length > 0) return {\n\t\tok: false,\n\t\tissues\n\t};\n\treturn { ok: true };\n}\nfunction cleanImageModeTiming(raw) {\n\tif (!raw || typeof raw !== \"object\" || Array.isArray(raw)) return raw;\n\tconst obj = raw;\n\tif (obj.mode !== \"Image\" || !Array.isArray(obj.layout)) return raw;\n\tconst sanitizeNode = (node) => {\n\t\tif (!node || typeof node !== \"object\" || Array.isArray(node)) return node;\n\t\tconst n = { ...node };\n\t\tif (n.durationFrames !== void 0 && (typeof n.durationFrames !== \"number\" || !Number.isFinite(n.durationFrames) || n.durationFrames < 1 || !Number.isInteger(n.durationFrames))) delete n.durationFrames;\n\t\tif (n.startFrame !== void 0 && (typeof n.startFrame !== \"number\" || !Number.isFinite(n.startFrame) || n.startFrame < 0 || !Number.isInteger(n.startFrame))) delete n.startFrame;\n\t\tif (Array.isArray(n.children)) n.children = n.children.map(sanitizeNode);\n\t\treturn n;\n\t};\n\treturn {\n\t\t...obj,\n\t\tlayout: obj.layout.map(sanitizeNode)\n\t};\n}\n/** Fast-fail shape gate used by processors: validate raw config then parse. */\nfunction parseProgram(raw) {\n\tconst pre = validateLayoutProgram(raw);\n\tif (!pre.ok) return {\n\t\tok: false,\n\t\tissues: pre.issues\n\t};\n\tconst cleaned = cleanImageModeTiming(raw);\n\tconst parsed = CompositorProgramSchema.safeParse(cleaned);\n\tif (!parsed.success) return {\n\t\tok: false,\n\t\tissues: parsed.error.issues.map((i) => issue(\"E1001\", i.path.map((p) => typeof p === \"symbol\" ? p.toString() : p), i.message))\n\t};\n\treturn {\n\t\tok: true,\n\t\tconfig: parsed.data\n\t};\n}\n/** Collect every node id in the tree (depth-first, in order). */\nfunction collectNodeIds(nodes) {\n\tconst ids = [];\n\tconst walk = (n) => {\n\t\tids.push(n.id);\n\t\tif (\"children\" in n && n.children) walkChildren(n.children);\n\t};\n\tconst walkChildren = (list) => {\n\t\tfor (const n of list) walk(n);\n\t};\n\twalkChildren(nodes);\n\treturn ids;\n}\n/** Collect media node bindings: inputHandleId -> node id. */\nfunction collectMediaBindings(nodes) {\n\tconst bindings = /* @__PURE__ */ new Map();\n\tconst walk = (n) => {\n\t\tif (n.kind === \"media\") bindings.set(n.inputHandleId, n.id);\n\t\tif (\"children\" in n && n.children) for (const c of n.children) walk(c);\n\t};\n\tfor (const n of nodes) walk(n);\n\treturn bindings;\n}\n\n//#endregion\nexport { AETextAnimatorSchema, AdvancedTextAnimatorBuilder, AdvancedTextAnimatorSchema, AnchorGroupingSchema, AnchorPresetSchema, AnimatableGlyphPropsSchema, AnimatablePropSchema, AnimationTrackSchema, AudioSpectrumTypographySchema, BlockNodeSchema, BoxNodeSchema, CameraAnimation, CameraDoFSchema, CameraLensSchema, CameraNodeSchema, CameraShakeSchema, CarrierHandoffConfigSchema, ChartAreaStyleSchema, ChartAxisSchema, ChartDataPoint2DSchema, ChartDataPointOHLCSchema, ChartGPUOptionsSchema, ChartLineStyleSchema, ChartNodeSchema, ChartPointStyleSchema, ChartSeriesSchema, ChartSeriesTypeSchema, ChromaticGlitchConfigSchema, ColorStopSchema, CompositionChartNodeSchema, CompositorProgramSchema, CubicBezierSegmentSchema, DynamicStrokePropertiesSchema, EXTENDED_3D_ANIMATABLE_PROPS, EaseRefSchema, EnhancedTextNodeSchema, ExpressionSelectorSchema, ExtendedGlyphPropertiesSchema, FlexNodeSchema, GlyphAnchorGroupingSchema, GlyphAnchorPointSchema, KeyframeSchema, KineticMarqueeConfigSchema, LayerAnimation, LayerAnimationSchema, LayoutNodeSchema, LightNodeSchema, LightTypeSchema, LineSpacingDynamicsSchema, LongShadowConfigSchema, MaterialTypeSchema, MediaNodeSchema, Model3DNodeSchema, ParticleDissolveConfigSchema, Scene, SceneDefinitionSchema, SceneTransitionTypeSchema, SelectorBasedOnSchema, SelectorModeSchema, SelectorShapeSchema, SelectorUnitsSchema, Sequence, ShapeFields, ShapeNodeSchema, ShapeTypeSchema, SignalColorModeSchema, SignalModeSchema, SizeSpecSchema, SkewPropertiesSchema, Spatial3DPropertiesSchema, SpringPhysicsSchema, TextAnchorConfigSchema, TextAnimator, TextAnimatorBuilder, TextAnimatorSchema, TextAnimatorTransformSchema, TextCursorConfigSchema, TextCursorStyleSchema, TextNodeSchema, TextPathBuilder, TextPathOptionsSchema, TextPathSourceSchema, TextRangeSelectorSchema, TextScrambleConfigSchema, TextSelectorSchema, TextShadowSchema, TextSignalSelectorSchema, TextSpanMarkSchema, TextSpanSchema, TextWigglySelectorSchema, TrackSourceSchema, TypewriterAnimatorSchema, TypingCadenceSchema, VariableFontAxesSchema, Vec2Schema, VolumetricFormationConfigSchema, VolumetricFormationModeSchema, applyStaggerToChildren, buildPathLUT, calculateSequenceTimeline, collectMediaBindings, collectNodeIds, collectNodeOps, compositorToProgram, computeAnchorPivotOffset, computeCarrierContinuity, computeLayout, computeLayoutSync, computeLineLeadingDisplacement, computeRangeSelectorWeight, computeStaggerDelay, containerChildren, deterministicWigglyNoise, distanceToCurveParameter, ellipseToCubicBeziers, evaluateAnimationAtFrame, evaluateCubicBezier, evaluateCubicBezierDerivative, evaluateExpressionSelector, evaluateKeyframes, evaluateMarqueeOffset, evaluateSelectorCombination, evaluateSignal, evaluateSignalAccumulator, evaluateSkewMatrix, evaluateSpringOvershoot, evaluateSpringProgress, evaluateTrackAtFrame, evaluateTypewriterState, evaluateVolumetricFormation, evaluateWiggle, generateArcLengthLUT, generatePathSegments, getScramblePool, getShuffledOrder, initLayout, parseProgram, parseSvgPathToCubicBeziers, rotateHue, sampleAudioSpectrumScale, sampleCurveGeometry, samplePathChainGeometry, svgArcToCubicBeziers, validateLayoutProgram, waveToCubicBeziers };\n//# sourceMappingURL=index.mjs.map","import type {\n\tBoxNode,\n\tLayoutNode,\n\tMaterialType,\n\tModel3DNode,\n\tTextNode,\n} from \"@gitframes/compositions/program\";\nimport {\n\tgenerateExtrudedTextGeometry,\n\ttype Model3DData,\n\tSlugFontCache,\n} from \"@gitframes/webgpu-renderers\";\nimport { type AnimatableNode, Layer } from \"./index.js\";\n\nexport interface CubeFaceConfig {\n\tbackground?: string;\n\tborderRadius?: number;\n\tborderWidth?: number;\n\tborderColor?: string;\n\topacity?: number;\n\tmaterial?: MaterialType;\n\tshininess?: number;\n\troughness?: number;\n\tspecularIntensity?: number;\n\tmetallic?: number;\n\tambientIntensity?: number;\n\tior?: number;\n\ttransmission?: number;\n\tdispersion?: number;\n\tfresnelPower?: number;\n\tenvIntensity?: number;\n\tchildren?: LayoutNode[];\n}\n\nexport type CubeFaceInput = CubeFaceConfig | LayoutNode | string;\n\nexport interface Cube3DOptions {\n\tid?: string;\n\tsize: number | [number, number, number];\n\tx?: number;\n\ty?: number;\n\tz?: number;\n\trotateX?: number;\n\trotateY?: number;\n\trotateZ?: number;\n\tfaces?: {\n\t\tfront?: CubeFaceInput;\n\t\tback?: CubeFaceInput;\n\t\tleft?: CubeFaceInput;\n\t\tright?: CubeFaceInput;\n\t\ttop?: CubeFaceInput;\n\t\tbottom?: CubeFaceInput;\n\t};\n\ttwoSided?: boolean;\n\tmaterial?: MaterialType;\n\tshininess?: number;\n\troughness?: number;\n\tspecularIntensity?: number;\n\tmetallic?: number;\n\tambientIntensity?: number;\n\tior?: number;\n\ttransmission?: number;\n\tdispersion?: number;\n\tfresnelPower?: number;\n\tenvIntensity?: number;\n\topacity?: number;\n}\n\nexport interface Carousel3DOptions {\n\tid?: string;\n\tradius: number;\n\titems: LayoutNode[];\n\tx?: number;\n\ty?: number;\n\tz?: number;\n\trotateX?: number;\n\trotateY?: number;\n\trotateZ?: number;\n\tfaceInward?: boolean;\n\titemWidth?: number;\n\titemHeight?: number;\n\ttwoSided?: boolean;\n\topacity?: number;\n}\n\nexport interface Prism3DOptions {\n\tid?: string;\n\tsides: number;\n\tradius: number;\n\theight: number;\n\tx?: number;\n\ty?: number;\n\tz?: number;\n\trotateX?: number;\n\trotateY?: number;\n\trotateZ?: number;\n\tsideConfigs?: Array<CubeFaceInput>;\n\ttwoSided?: boolean;\n\tmaterial?: MaterialType;\n\tshininess?: number;\n\troughness?: number;\n\tspecularIntensity?: number;\n\tmetallic?: number;\n\tambientIntensity?: number;\n\tior?: number;\n\ttransmission?: number;\n\tdispersion?: number;\n\tfresnelPower?: number;\n\tenvIntensity?: number;\n\topacity?: number;\n}\n\nexport interface Plane3DOptions {\n\tid?: string;\n\twidth: number;\n\theight: number;\n\tx?: number;\n\ty?: number;\n\tz?: number;\n\trotateX?: number;\n\trotateY?: number;\n\trotateZ?: number;\n\tbackground?: string;\n\tborderRadius?: number;\n\ttwoSided?: boolean;\n\tmaterial?: MaterialType;\n\tshininess?: number;\n\troughness?: number;\n\tspecularIntensity?: number;\n\tmetallic?: number;\n\tambientIntensity?: number;\n\tior?: number;\n\ttransmission?: number;\n\tdispersion?: number;\n\tfresnelPower?: number;\n\tenvIntensity?: number;\n\topacity?: number;\n\tchildren?: LayoutNode[];\n}\n\nexport interface Grid3DOptions {\n\tid?: string;\n\twidth: number;\n\theight: number;\n\tdivisions?: number;\n\tcolor?: string;\n\t/** Line thickness in world pixels (default 2). */\n\tlineWidth?: number;\n\tx?: number;\n\ty?: number;\n\tz?: number;\n\trotateX?: number;\n\trotateY?: number;\n\trotateZ?: number;\n\topacity?: number;\n}\n\nexport interface Text3DOptions {\n\tid?: string;\n\ttext: string;\n\tfontSize?: number;\n\tfontFamily?: string;\n\tfontWeight?: number | string;\n\tfontStyle?: string;\n\tfill?: string;\n\tx?: number;\n\ty?: number;\n\tz?: number;\n\trotateX?: number;\n\trotateY?: number;\n\trotateZ?: number;\n\talign?: \"start\" | \"center\" | \"end\" | \"left\" | \"right\";\n\tverticalAlign?: \"top\" | \"middle\" | \"bottom\";\n\tletterSpacing?: number;\n\tlineHeight?: number;\n\tis3D?: boolean;\n\ttwoSided?: boolean;\n\tmaterial?: MaterialType;\n\tshininess?: number;\n\troughness?: number;\n\tspecularIntensity?: number;\n\tambientIntensity?: number;\n\tmetallic?: number;\n\tior?: number;\n\ttransmission?: number;\n\tdispersion?: number;\n\tfresnelPower?: number;\n\tenvIntensity?: number;\n\topacity?: number;\n\tbackground?: string;\n\tborderRadius?: number;\n\tpadding?: number;\n\tstroke?: string;\n\tstrokeWidth?: number;\n\textrusionDepth?: number;\n\textrusionSteps?: number;\n\tbevelColor?: string;\n}\n\nexport interface ExtrudedText3DOptions extends Text3DOptions {\n\tdepth: number;\n\tslices?: number;\n\tcurveSegments?: number;\n}\n\nexport type Shape3DContainer = AnimatableNode<BoxNode> & {\n\tfaces?: AnimatableNode<BoxNode>[];\n\titems?: LayoutNode[];\n\t[Symbol.iterator](): Iterator<LayoutNode>;\n};\n\nexport const Layer3D = {\n\t/**\n\t * Creates a true 3D volumetric cube with 6 textured or colored faces.\n\t * Returns a preserve-3d container that can be transformed in 3D camera space.\n\t */\n\tcube(options: Cube3DOptions): Shape3DContainer {\n\t\tconst size = options.size;\n\t\tconst [w, h, d] = typeof size === \"number\" ? [size, size, size] : size;\n\t\tconst twoSided = options.twoSided ?? true;\n\t\tconst defaultColors = {\n\t\t\tfront: \"#3b82f6\",\n\t\t\tback: \"#1d4ed8\",\n\t\t\tleft: \"#2563eb\",\n\t\t\tright: \"#1e40af\",\n\t\t\ttop: \"#60a5fa\",\n\t\t\tbottom: \"#172554\",\n\t\t};\n\n\t\tconst buildFace = (\n\t\t\tfaceId: string,\n\t\t\tinput: CubeFaceInput | undefined,\n\t\t\tdefaultColor: string,\n\t\t\tfaceW: number,\n\t\t\tfaceH: number,\n\t\t\tfaceProps: Partial<BoxNode>,\n\t\t): AnimatableNode<BoxNode> => {\n\t\t\tif (input && typeof input === \"object\" && \"kind\" in input) {\n\t\t\t\tconst node = input as AnimatableNode<BoxNode>;\n\t\t\t\tnode.position = \"absolute\";\n\t\t\t\tnode.is3D = true;\n\t\t\t\tnode.twoSided = twoSided;\n\t\t\t\tnode.material = node.material ?? options.material ?? \"lit\";\n\t\t\t\tnode.shininess = node.shininess ?? options.shininess ?? 32;\n\t\t\t\tnode.specularIntensity =\n\t\t\t\t\tnode.specularIntensity ?? options.specularIntensity ?? 0.5;\n\t\t\t\tif (options.roughness !== undefined && node.roughness === undefined) {\n\t\t\t\t\tnode.roughness = options.roughness;\n\t\t\t\t}\n\t\t\t\tif (options.metallic !== undefined && node.metallic === undefined) {\n\t\t\t\t\tnode.metallic = options.metallic;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\toptions.ambientIntensity !== undefined &&\n\t\t\t\t\tnode.ambientIntensity === undefined\n\t\t\t\t) {\n\t\t\t\t\tnode.ambientIntensity = options.ambientIntensity;\n\t\t\t\t}\n\t\t\t\tObject.assign(node, faceProps);\n\t\t\t\treturn node;\n\t\t\t}\n\t\t\tconst cfg: CubeFaceConfig =\n\t\t\t\ttypeof input === \"string\"\n\t\t\t\t\t? { background: input }\n\t\t\t\t\t: (input ?? { background: defaultColor });\n\n\t\t\treturn Layer.box({\n\t\t\t\tid: `${options.id ?? \"cube\"}-${faceId}`,\n\t\t\t\tposition: \"absolute\",\n\t\t\t\twidth: faceW,\n\t\t\t\theight: faceH,\n\t\t\t\tis3D: true,\n\t\t\t\ttwoSided,\n\t\t\t\tmaterial: cfg.material ?? options.material ?? \"lit\",\n\t\t\t\tshininess: cfg.shininess ?? options.shininess ?? 32,\n\t\t\t\tspecularIntensity:\n\t\t\t\t\tcfg.specularIntensity ?? options.specularIntensity ?? 0.5,\n\t\t\t\troughness: cfg.roughness ?? options.roughness,\n\t\t\t\tmetallic: cfg.metallic ?? options.metallic,\n\t\t\t\tambientIntensity:\n\t\t\t\t\tcfg.ambientIntensity ?? options.ambientIntensity ?? 1.0,\n\t\t\t\tbackground: cfg.background ?? defaultColor,\n\t\t\t\tborderRadius: cfg.borderRadius ?? 0,\n\t\t\t\tborderWidth: cfg.borderWidth,\n\t\t\t\tborderColor: cfg.borderColor,\n\t\t\t\topacity: cfg.opacity ?? 1,\n\t\t\t\tchildren: cfg.children ?? [],\n\t\t\t\t...faceProps,\n\t\t\t});\n\t\t};\n\n\t\tconst halfW = w / 2;\n\t\tconst halfH = h / 2;\n\t\tconst halfD = d / 2;\n\n\t\tconst faces: AnimatableNode<BoxNode>[] = [\n\t\t\tbuildFace(\"front\", options.faces?.front, defaultColors.front, w, h, {\n\t\t\t\tx: 0,\n\t\t\t\ty: 0,\n\t\t\t\tz: -halfD,\n\t\t\t\trotateX: 0,\n\t\t\t\trotateY: 0,\n\t\t\t\trotateZ: 0,\n\t\t\t}),\n\t\t\tbuildFace(\"back\", options.faces?.back, defaultColors.back, w, h, {\n\t\t\t\tx: 0,\n\t\t\t\ty: 0,\n\t\t\t\tz: halfD,\n\t\t\t\trotateX: 0,\n\t\t\t\trotateY: 180,\n\t\t\t\trotateZ: 0,\n\t\t\t}),\n\t\t\tbuildFace(\"left\", options.faces?.left, defaultColors.left, d, h, {\n\t\t\t\tx: -halfW,\n\t\t\t\ty: 0,\n\t\t\t\tz: 0,\n\t\t\t\trotateX: 0,\n\t\t\t\trotateY: 90,\n\t\t\t\trotateZ: 0,\n\t\t\t}),\n\t\t\tbuildFace(\"right\", options.faces?.right, defaultColors.right, d, h, {\n\t\t\t\tx: halfW,\n\t\t\t\ty: 0,\n\t\t\t\tz: 0,\n\t\t\t\trotateX: 0,\n\t\t\t\trotateY: -90,\n\t\t\t\trotateZ: 0,\n\t\t\t}),\n\t\t\tbuildFace(\"top\", options.faces?.top, defaultColors.top, w, d, {\n\t\t\t\tx: 0,\n\t\t\t\ty: -halfH,\n\t\t\t\tz: 0,\n\t\t\t\trotateX: -90,\n\t\t\t\trotateY: 0,\n\t\t\t\trotateZ: 0,\n\t\t\t}),\n\t\t\tbuildFace(\"bottom\", options.faces?.bottom, defaultColors.bottom, w, d, {\n\t\t\t\tx: 0,\n\t\t\t\ty: halfH,\n\t\t\t\tz: 0,\n\t\t\t\trotateX: 90,\n\t\t\t\trotateY: 0,\n\t\t\t\trotateZ: 0,\n\t\t\t}),\n\t\t];\n\n\t\tconst container = Layer.box({\n\t\t\tid: options.id ?? \"cube-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tposition: \"absolute\",\n\t\t\tx: options.x ?? 0,\n\t\t\ty: options.y ?? 0,\n\t\t\tz: options.z ?? 0,\n\t\t\twidth: w,\n\t\t\theight: h,\n\t\t\tis3D: true,\n\t\t\ttransformStyle: \"preserve-3d\",\n\t\t\trotateX: options.rotateX ?? 0,\n\t\t\trotateY: options.rotateY ?? 0,\n\t\t\trotateZ: options.rotateZ ?? 0,\n\t\t\topacity: options.opacity ?? 1,\n\t\t\tbackground: \"transparent\",\n\t\t\tchildren: faces,\n\t\t});\n\n\t\treturn Object.assign(container, {\n\t\t\tfaces,\n\t\t\t[Symbol.iterator]: function* () {\n\t\t\t\tyield* faces;\n\t\t\t},\n\t\t});\n\t},\n\n\t/**\n\t * Creates a 3D cylindrical carousel of items arranged radially around a center point.\n\t */\n\tcarousel(options: Carousel3DOptions): Shape3DContainer {\n\t\tconst { items, radius, faceInward = false, twoSided = true } = options;\n\t\tconst n = items.length;\n\t\tconst angleStep = n > 0 ? 360 / n : 0;\n\n\t\tconst transformedItems = items.map((item, idx) => {\n\t\t\t// Item 0 sits nearest the default camera (-z) and the ring runs clockwise\n\t\t\t// seen from above. A face's front normal is (-sin ry, 0, -cos ry) (the\n\t\t\t// cube's convention: rotateY 90 faces -x), so the outward normal\n\t\t\t// (sin a, 0, -cos a) needs ry = -a, and inward needs 180 - a.\n\t\t\tconst angleDeg = idx * angleStep;\n\t\t\tconst rad = (angleDeg * Math.PI) / 180;\n\t\t\tconst x = radius * Math.sin(rad);\n\t\t\tconst z = -radius * Math.cos(rad);\n\t\t\tconst ry = faceInward ? 180 - angleDeg : -angleDeg;\n\n\t\t\tconst node = item as AnimatableNode<BoxNode>;\n\t\t\tnode.position = \"absolute\";\n\t\t\tnode.is3D = true;\n\t\t\tnode.twoSided = twoSided;\n\t\t\tnode.x = x;\n\t\t\tnode.y = 0;\n\t\t\tnode.z = z;\n\t\t\tnode.rotateY = ry;\n\t\t\treturn node;\n\t\t});\n\n\t\tconst container = Layer.box({\n\t\t\tid: options.id ?? \"carousel-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tposition: \"absolute\",\n\t\t\tx: options.x ?? 0,\n\t\t\ty: options.y ?? 0,\n\t\t\tz: options.z ?? 0,\n\t\t\twidth: (options.itemWidth ?? 200) as any,\n\t\t\theight: (options.itemHeight ?? 200) as any,\n\t\t\tis3D: true,\n\t\t\ttransformStyle: \"preserve-3d\",\n\t\t\trotateX: options.rotateX ?? 0,\n\t\t\trotateY: options.rotateY ?? 0,\n\t\t\trotateZ: options.rotateZ ?? 0,\n\t\t\topacity: options.opacity ?? 1,\n\t\t\tbackground: \"transparent\",\n\t\t\tchildren: transformedItems,\n\t\t});\n\n\t\treturn Object.assign(container, {\n\t\t\titems: transformedItems,\n\t\t\t[Symbol.iterator]: function* () {\n\t\t\t\tyield* transformedItems;\n\t\t\t},\n\t\t});\n\t},\n\n\t/**\n\t * Creates an N-sided regular polygonal 3D prism.\n\t */\n\tprism(options: Prism3DOptions): Shape3DContainer {\n\t\tconst { sides, radius, height, twoSided = true } = options;\n\t\tconst n = Math.max(3, sides);\n\t\tconst sideWidth = 2 * radius * Math.tan(Math.PI / n);\n\t\tconst angleStep = 360 / n;\n\t\tconst panels: AnimatableNode<BoxNode>[] = [];\n\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tconst angleDeg = i * angleStep;\n\t\t\tconst rad = (angleDeg * Math.PI) / 180;\n\t\t\tconst x = radius * Math.sin(rad);\n\t\t\tconst z = radius * Math.cos(rad);\n\t\t\tconst cfg = options.sideConfigs?.[i];\n\t\t\tconst color =\n\t\t\t\ttypeof cfg === \"string\"\n\t\t\t\t\t? cfg\n\t\t\t\t\t: (cfg?.background ?? `hsl(${(i * 360) / n}, 70%, 50%)`);\n\n\t\t\tpanels.push(\n\t\t\t\tLayer.box({\n\t\t\t\t\tid: `${options.id ?? \"prism\"}-panel-${i}`,\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\twidth: sideWidth,\n\t\t\t\t\theight,\n\t\t\t\t\tis3D: true,\n\t\t\t\t\ttwoSided,\n\t\t\t\t\tx,\n\t\t\t\t\ty: 0,\n\t\t\t\t\tz,\n\t\t\t\t\trotateY: angleDeg,\n\t\t\t\t\tbackground: color,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tconst container = Layer.box({\n\t\t\tid: options.id ?? \"prism-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tposition: \"absolute\",\n\t\t\tx: options.x ?? 0,\n\t\t\ty: options.y ?? 0,\n\t\t\tz: options.z ?? 0,\n\t\t\twidth: sideWidth,\n\t\t\theight,\n\t\t\tis3D: true,\n\t\t\ttransformStyle: \"preserve-3d\",\n\t\t\trotateX: options.rotateX ?? 0,\n\t\t\trotateY: options.rotateY ?? 0,\n\t\t\trotateZ: options.rotateZ ?? 0,\n\t\t\topacity: options.opacity ?? 1,\n\t\t\tbackground: \"transparent\",\n\t\t\tchildren: panels,\n\t\t});\n\n\t\treturn Object.assign(container, {\n\t\t\tfaces: panels,\n\t\t\t[Symbol.iterator]: function* () {\n\t\t\t\tyield* panels;\n\t\t\t},\n\t\t});\n\t},\n\n\t/**\n\t * Creates a standalone planar 3D card/quad.\n\t */\n\tplane(options: Plane3DOptions): AnimatableNode<BoxNode> {\n\t\treturn Layer.box({\n\t\t\tid: options.id ?? \"plane-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tposition: \"absolute\",\n\t\t\twidth: options.width,\n\t\t\theight: options.height,\n\t\t\tx: options.x ?? 0,\n\t\t\ty: options.y ?? 0,\n\t\t\tz: options.z ?? 0,\n\t\t\tis3D: true,\n\t\t\ttwoSided: options.twoSided ?? true,\n\t\t\trotateX: options.rotateX ?? 0,\n\t\t\trotateY: options.rotateY ?? 0,\n\t\t\trotateZ: options.rotateZ ?? 0,\n\t\t\tbackground: options.background ?? \"#3b82f6\",\n\t\t\tborderRadius: options.borderRadius ?? 0,\n\t\t\topacity: options.opacity ?? 1,\n\t\t\tchildren: options.children ?? [],\n\t\t});\n\t},\n\n\t/**\n\t * Creates a 3D perspective ground grid: `divisions` cells per side, each\n\t * line its own unlit quad so it stays crisp at any camera distance.\n\t */\n\tgrid(options: Grid3DOptions): AnimatableNode<BoxNode> {\n\t\tconst { width, height } = options;\n\t\tconst id = options.id ?? \"grid-\" + Math.random().toString(36).slice(2, 9);\n\t\tconst divisions = Math.max(1, Math.round(options.divisions ?? 10));\n\t\tconst lineWidth = options.lineWidth ?? 2;\n\t\tconst color = options.color ?? \"rgba(59, 130, 246, 0.5)\";\n\t\tconst line = (\n\t\t\tlineId: string,\n\t\t\tx: number,\n\t\t\ty: number,\n\t\t\tw: number,\n\t\t\th: number,\n\t\t): AnimatableNode<BoxNode> =>\n\t\t\tLayer.box({\n\t\t\t\tid: `${id}-${lineId}`,\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t\tz: 0,\n\t\t\t\twidth: w,\n\t\t\t\theight: h,\n\t\t\t\tis3D: true,\n\t\t\t\ttwoSided: true,\n\t\t\t\tmaterial: \"unlit\",\n\t\t\t\tbackground: color,\n\t\t\t});\n\t\t// Every quad is backed by a texture of its own size, so long lines are\n\t\t// split into segments that stay well inside the GPU's texture limit.\n\t\tconst MAX_SEGMENT = 4096;\n\t\tconst lines: AnimatableNode<BoxNode>[] = [];\n\t\tconst vSegments = Math.ceil(height / MAX_SEGMENT);\n\t\tconst hSegments = Math.ceil(width / MAX_SEGMENT);\n\t\tfor (let i = 0; i <= divisions; i++) {\n\t\t\tconst u = i / divisions - 0.5;\n\t\t\tfor (let k = 0; k < vSegments; k++) {\n\t\t\t\tconst len = height / vSegments;\n\t\t\t\tconst y = -height / 2 + len * (k + 0.5);\n\t\t\t\tlines.push(line(`v${i}-${k}`, u * width, y, lineWidth, len));\n\t\t\t}\n\t\t\tfor (let k = 0; k < hSegments; k++) {\n\t\t\t\tconst len = width / hSegments;\n\t\t\t\tconst x = -width / 2 + len * (k + 0.5);\n\t\t\t\tlines.push(line(`h${i}-${k}`, x, u * height, len, lineWidth));\n\t\t\t}\n\t\t}\n\t\treturn Layer.box({\n\t\t\tid,\n\t\t\tposition: \"absolute\",\n\t\t\twidth,\n\t\t\theight,\n\t\t\tx: options.x ?? 0,\n\t\t\ty: options.y ?? 0,\n\t\t\tz: options.z ?? 0,\n\t\t\tis3D: true,\n\t\t\ttransformStyle: \"preserve-3d\",\n\t\t\trotateX: options.rotateX ?? 90,\n\t\t\trotateY: options.rotateY ?? 0,\n\t\t\trotateZ: options.rotateZ ?? 0,\n\t\t\tbackground: \"transparent\",\n\t\t\topacity: options.opacity ?? 1,\n\t\t\tchildren: lines,\n\t\t});\n\t},\n\n\t/**\n\t * Creates a standalone planar 3D text node or multi-slice extruded 3D text.\n\t */\n\ttext(options: Text3DOptions): AnimatableNode<LayoutNode> {\n\t\tif (options.extrusionDepth && options.extrusionDepth > 0) {\n\t\t\treturn Layer3D.extrudedText({\n\t\t\t\t...options,\n\t\t\t\tdepth: options.extrusionDepth,\n\t\t\t\tslices: options.extrusionSteps,\n\t\t\t});\n\t\t}\n\n\t\treturn Layer.text(options.text, {\n\t\t\tid: options.id ?? \"text3d-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tposition: \"absolute\",\n\t\t\tx: options.x ?? 0,\n\t\t\ty: options.y ?? 0,\n\t\t\tz: options.z ?? 0,\n\t\t\tis3D: true,\n\t\t\ttwoSided: options.twoSided ?? true,\n\t\t\trotateX: options.rotateX ?? 0,\n\t\t\trotateY: options.rotateY ?? 0,\n\t\t\trotateZ: options.rotateZ ?? 0,\n\t\t\tfontSize: options.fontSize ?? 48,\n\t\t\tfontFamily: options.fontFamily,\n\t\t\tfontWeight: options.fontWeight ?? \"bold\",\n\t\t\tfontStyle: options.fontStyle,\n\t\t\tfill: options.fill ?? \"#ffffff\",\n\t\t\talign: (options.align as any) ?? \"center\",\n\t\t\tverticalAlign: options.verticalAlign ?? \"middle\",\n\t\t\tletterSpacing: options.letterSpacing,\n\t\t\tlineHeight: options.lineHeight,\n\t\t\tmaterial: options.material ?? \"lit\",\n\t\t\tshininess: options.shininess ?? 64,\n\t\t\troughness: options.roughness,\n\t\t\tspecularIntensity: options.specularIntensity ?? 0.8,\n\t\t\tambientIntensity: options.ambientIntensity ?? 1.0,\n\t\t\tmetallic: options.metallic,\n\t\t\topacity: options.opacity ?? 1,\n\t\t\tbackground: options.background,\n\t\t\tborderRadius: options.borderRadius,\n\t\t\tpadding: options.padding,\n\t\t\tstroke: options.stroke,\n\t\t\tstrokeWidth: options.strokeWidth,\n\t\t});\n\t},\n\n\t/**\n\t * Creates multi-slice volumetric extruded 3D typography with depth shading.\n\t */\n\textrudedText(options: ExtrudedText3DOptions): Shape3DContainer {\n\t\tconst { depth, text, fill = \"#ffffff\", bevelColor } = options;\n\n\t\tlet modelData: Model3DData | undefined;\n\t\tconst parsedFont =\n\t\t\t(options.fontFamily\n\t\t\t\t? SlugFontCache.getParsed(options.fontFamily)\n\t\t\t\t: null) ??\n\t\t\tSlugFontCache.getParsed(\"Inter\") ??\n\t\t\tSlugFontCache.getParsed(\"Unbounded\") ??\n\t\t\tSlugFontCache.getFirstParsed();\n\n\t\tif (parsedFont) {\n\t\t\tconst res = generateExtrudedTextGeometry({\n\t\t\t\ttext,\n\t\t\t\tfont: parsedFont,\n\t\t\t\tfontSize: options.fontSize ?? 48,\n\t\t\t\tdepth,\n\t\t\t\tfill,\n\t\t\t\tbevelColor,\n\t\t\t\tcurveSegments: options.curveSegments ?? 5,\n\t\t\t\talign: options.align,\n\t\t\t\tverticalAlign: options.verticalAlign,\n\t\t\t\tletterSpacing: options.letterSpacing,\n\t\t\t\tmaterial: options.material,\n\t\t\t\tshininess: options.shininess,\n\t\t\t\troughness: options.roughness,\n\t\t\t\tspecularIntensity: options.specularIntensity,\n\t\t\t\tambientIntensity: options.ambientIntensity,\n\t\t\t\tmetallic: options.metallic,\n\t\t\t});\n\t\t\tmodelData = res.modelData;\n\t\t}\n\n\t\tconst modelNode = Layer.model({\n\t\t\tid:\n\t\t\t\toptions.id ?? `extruded-text-${Math.random().toString(36).slice(2, 9)}`,\n\t\t\tmodelData,\n\t\t\tis3D: true,\n\t\t\tx: options.x ?? 0,\n\t\t\ty: options.y ?? 0,\n\t\t\tz: options.z ?? 0,\n\t\t\trotateX: options.rotateX ?? 0,\n\t\t\trotateY: options.rotateY ?? 0,\n\t\t\trotateZ: options.rotateZ ?? 0,\n\t\t\tscale: options.scale ?? 1,\n\t\t\tscaleX: options.scaleX ?? 1,\n\t\t\tscaleY: options.scaleY ?? 1,\n\t\t\tscaleZ: options.scaleZ ?? 1,\n\t\t\topacity: options.opacity ?? 1,\n\t\t\tmaterial: options.material,\n\t\t\tshininess: options.shininess ?? 32,\n\t\t\troughness: options.roughness,\n\t\t\tspecularIntensity: options.specularIntensity ?? 0.8,\n\t\t\tambientIntensity: options.ambientIntensity ?? 1.0,\n\t\t\tmetallic: options.metallic,\n\t\t\ttwoSided: options.twoSided ?? true,\n\t\t\ttext3dOptions: options,\n\t\t});\n\n\t\treturn Object.assign(modelNode, {\n\t\t\tfaces: [modelNode] as AnimatableNode<BoxNode>[],\n\t\t\titems: [modelNode],\n\t\t\t[Symbol.iterator]: function* () {\n\t\t\t\tyield modelNode;\n\t\t\t},\n\t\t}) as unknown as Shape3DContainer;\n\t},\n\n\t/**\n\t * Creates a 3D model node rendered natively with WebGPU mesh shaders.\n\t */\n\tmodel(options: Partial<Model3DNode> = {}): AnimatableNode<Model3DNode> {\n\t\treturn Layer.model(options);\n\t},\n\n\t/**\n\t * Convenience helper to create a 3D Wavefront OBJ model node.\n\t */\n\tobj(\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> {\n\t\treturn Layer.obj(src, options);\n\t},\n\n\t/**\n\t * Convenience helper to create a 3D Autodesk FBX model node with skeletal animation support.\n\t */\n\tfbx(\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> {\n\t\treturn Layer.fbx(src, options);\n\t},\n\n\t/**\n\t * Convenience helper to create a 3D glTF 2.0 model node.\n\t */\n\tgltf(\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> {\n\t\treturn Layer.gltf(src, options);\n\t},\n\n\t/**\n\t * Convenience helper to create a 3D GLB binary container model node.\n\t */\n\tglb(\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> {\n\t\treturn Layer.glb(src, options);\n\t},\n\n\t/**\n\t * Convenience helper to create a 3D STL CAD / 3D printing model node.\n\t */\n\tstl(\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> {\n\t\treturn Layer.stl(src, options);\n\t},\n\n\t/**\n\t * Convenience helper to create a 3D Stanford PLY scan model node.\n\t */\n\tply(\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> {\n\t\treturn Layer.ply(src, options);\n\t},\n\n\t/**\n\t * Convenience helper to create a 3D MagicaVoxel VOX model node.\n\t */\n\tvox(\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> {\n\t\treturn Layer.vox(src, options);\n\t},\n\n\t/**\n\t * Convenience helper to create a 3D Studio (3DS) binary model node.\n\t */\n\tthreeDS(\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> {\n\t\treturn Layer.threeDS(src, options);\n\t},\n\n\t/**\n\t * Convenience helper to create a 3D Object File Format (OFF) model node.\n\t */\n\toff(\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> {\n\t\treturn Layer.off(src, options);\n\t},\n};\n","export {\n\tAudioSignal,\n\ttype AudioSignalOptions,\n\tcomputed,\n\tcosineSignal,\n\ttype ExtractedAudioSignalsBundle,\n\ttype FrameSignal,\n\tSignal,\n\ttype SignalContext,\n\ttype SignalValue,\n\ttype SineSignalOptions,\n\tsignal,\n\tsignalBuilder,\n\tsignalRegistry,\n\tsineSignal,\n} from \"./signals/index.js\";\n\nimport {\n\tFontManager,\n\ttype RegisteredFont,\n\ttype RegisterFontOptions,\n} from \"./fonts/index.js\";\nimport { normalizeTextSpans, type TextSpan } from \"./rich-text.js\";\n\nexport {\n\tencodeStereoWav,\n\tmixAudioTracks,\n\tmixSfxInto,\n\ttype RenderedSfx,\n\trenderSfx,\n\ttype SfxRenderContext,\n\ttype SfxTrigger,\n\tsoftLimit,\n} from \"./audio/index.js\";\nexport {\n\taccent,\n\tbold,\n\tcode,\n\tcolor,\n\titalic,\n\ttype MarkOptions,\n\tmark,\n\tnormalizeTextSpans,\n\tparseMarkup,\n\trich,\n\tsize,\n\tspan,\n\tsub,\n\tsup,\n\ttype TextSpan,\n\ttype TextSpanItem,\n\ttype TextSpanMark,\n} from \"./rich-text.js\";\nexport { FontManager, type RegisteredFont, type RegisterFontOptions };\n\nexport {\n\tCannyComputePipeline,\n\ttype CannyOptions,\n\ttype ControlNetConditioningOutputs,\n\tControlNetMultiplexer,\n\ttype DeflickerOptions,\n\tDepthNormalsComputePipeline,\n\ttype DepthNormalsOptions,\n\ttype NormalRelightingOptions,\n\tOpticalFlowComputePipeline,\n\ttype OpticalFlowOptions,\n\tTemporalDeflickerPipeline,\n\ttype TensorDimensions,\n\ttype TensorFormat,\n\ttype TensorNode,\n\tTensorPipeline,\n\ttype TensorPipelineConfig,\n\ttype TensorSource,\n\ttype TensorViewExport,\n} from \"@gitframes/tensor-webgpu\";\nexport {\n\tCOCO_CLASSES,\n\tCOCO17_BONES,\n\tCOCO17_KEYPOINT_NAMES,\n\tCOCO17_KEYPOINTS,\n\ttype DetectedObject,\n\ttype InstanceMask,\n\ttype Landmark3D,\n\ttype LandmarkCoordinateSignals,\n\ttype MaskTrackSignals,\n\ttype NormalizedLandmarkList,\n\ttype ObjectAnchorName,\n\ttype ObjectAnchorsSignals,\n\ttype ObjectBoundingBox,\n\ttype ObjectBoundingBoxSignals,\n\ttype ObjectCollectionSignals,\n\ttype ObjectKinematicsSignals,\n\ttype ObjectTrackSignals,\n\ttype PersonMatte,\n\ttype PinToLandmarkOptions,\n\ttype PinToObjectOptions,\n\ttype PoseLandmarkSignals,\n\ttype PoseResult,\n\tPoseSkeletonRenderer,\n\tpinNodeToLandmark,\n\tpinNodeToObject,\n\ttype SegmentationResult,\n\tSegmentationTexturePool,\n\tSpatialLandmarkTransformer,\n\tTemporalObjectTracker,\n\ttype TrackedObject,\n\tVisionBundle,\n\ttype VisionConfig,\n\tVisionNode,\n\tVisionRunner,\n\ttype VisionTask,\n\ttype VisionVariant,\n} from \"@gitframes/vision\";\n\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n\ttype AnimationTrack,\n\ttype BoxNode,\n\ttype CameraNode,\n\ttype ChartGPUOptions,\n\ttype ChartNode,\n\ttype CompositorProgramConfig,\n\ttype CompositorToProgramOptions,\n\tcompositorToProgram,\n\ttype FlexNode,\n\tLayerAnimation,\n\ttype LayoutNode,\n\ttype LightNode,\n\ttype MediaNode,\n\ttype Model3DNode,\n\ttype ShapeNode,\n\ttype TextNode,\n} from \"@gitframes/compositions/program\";\nimport {\n\tappendOperation,\n\tEffect as CoreEffect,\n\tcreateVirtualMedia,\n\ttype DataType,\n\ttype FrameContext,\n\ttype MediaMetadata,\n\ttype MediaOperation,\n\ttype MediaSourceInput,\n\ttype MeshAudioDeformConfig,\n\tProgrammaticSignal,\n\ttype Signal,\n\ttype VirtualMediaData,\n} from \"@gitframes/core\";\nimport {\n\tanalyzeSequence as analyzeVisionFrames,\n\ttype LandmarkCoordinateSignals,\n\ttype ObjectTrackSignals,\n\ttype PinToLandmarkOptions,\n\ttype PinToObjectOptions,\n\tpinNodeToLandmark,\n\tpinNodeToObject,\n\ttype VisionAnalysisReport,\n\tVisionBundle,\n\tVisionNode,\n\tVisionRunner,\n\ttype VisionTask,\n} from \"@gitframes/vision\";\n\nexport {\n\tanalyzeSequence,\n\ttype VisionAnalysisReport,\n} from \"@gitframes/vision\";\n\nimport {\n\ttype DeflickerOptions,\n\ttype NormalRelightingOptions,\n\tTensorPipeline,\n} from \"@gitframes/tensor-webgpu\";\nimport { inputStore, mediaDecoderCache } from \"@gitframes/webgpu-renderers\";\nimport {\n\tApplyLUT,\n\ttype ApplyLUTProps,\n\tBlur,\n\ttype BlurProps,\n\tColorBalance,\n\ttype ColorBalanceProps,\n\tColorKey,\n\ttype ColorKeyProps,\n\tCrop,\n\ttype CropProps,\n\tCurves,\n\ttype CurvesProps,\n\tCustomEffect,\n\ttype DeflickerProps,\n\tDepthOfField,\n\ttype DepthOfFieldProps,\n\tFilmGrain,\n\ttype FilmGrainProps,\n\tGradientMap,\n\ttype GradientMapProps,\n\tHalftoneScreen,\n\ttype HalftoneScreenProps,\n\tHighPass,\n\ttype HighPassProps,\n\tLevels,\n\ttype LevelsProps,\n\tModulate,\n\ttype ModulateProps,\n\tMotionBlur,\n\ttype MotionBlurProps,\n\tPBRGlass,\n\ttype PBRGlassProps,\n\tRelight3D,\n\ttype Relight3DProps,\n\tSelectiveColor,\n\ttype SelectiveColorProps,\n\tShadowsHighlights,\n\ttype ShadowsHighlightsProps,\n\tSSAO,\n\ttype SSAOProps,\n\tTemporalDeflicker,\n\tTileOffset,\n\ttype TileOffsetProps,\n\tUnsharpMask,\n\ttype UnsharpMaskProps,\n\tVignette,\n\ttype VignetteProps,\n\tVision,\n\ttype VisionProps,\n} from \"./effects/index.js\";\nimport {\n\ttype FrameGridOptions,\n\tHeadlessMediaRenderer,\n\trenderFrameGrid,\n} from \"./renderer/index.js\";\nimport {\n\ttype Carousel3DOptions,\n\ttype Cube3DOptions,\n\tLayer3D,\n\ttype Plane3DOptions,\n\ttype Prism3DOptions,\n} from \"./shapes3d.js\";\n\nexport interface SectionOptions {\n\treadonly id?: string;\n\treadonly position?: \"absolute\" | \"relative\";\n\treadonly source?: string | MediaNode;\n\treadonly effects?: unknown[];\n\treadonly padding?: number;\n\treadonly borderRadius?: number;\n\treadonly borderColor?: string;\n\treadonly borderWidth?: number;\n\treadonly opacity?: number | unknown;\n\treadonly blendMode?: string;\n\treadonly fit?: \"cover\" | \"contain\";\n\treadonly width?: number | unknown;\n\treadonly height?: number | unknown;\n\treadonly x?: number | unknown;\n\treadonly y?: number | unknown;\n\treadonly hideWhenLost?: boolean;\n\treadonly smoothFrames?: number;\n\treadonly children?: LayoutNode[];\n\treadonly [key: string]: unknown;\n}\n\nexport type SectionNode = AnimatableNode<BoxNode> & {\n\treadonly innerMedia: AnimatableNode<MediaNode>;\n\treadonly effects: Effect[];\n\taddEffect(effect: Effect): SectionNode;\n\twithEffect(effect: Effect): SectionNode;\n\twithEffects(effects: Effect[]): SectionNode;\n};\n\nexport type TrackedRegionOptions = SectionOptions;\n\nfunction decorateTrackSignals<T extends ObjectTrackSignals>(\n\ttrack: T,\n\tsource?: string | MediaNode,\n): T {\n\tif (!track) return track;\n\tif (source && !track.source) {\n\t\tObject.defineProperty(track, \"source\", {\n\t\t\tvalue: source,\n\t\t\tenumerable: true,\n\t\t\twritable: true,\n\t\t\tconfigurable: true,\n\t\t});\n\t}\n\tif (typeof track.section !== \"function\") {\n\t\tObject.defineProperty(track, \"section\", {\n\t\t\tvalue: (\n\t\t\t\tsourceOrOptions?: string | MediaNode | SectionOptions,\n\t\t\t\toptions?: SectionOptions,\n\t\t\t) => {\n\t\t\t\tif (\n\t\t\t\t\ttypeof sourceOrOptions === \"object\" &&\n\t\t\t\t\tsourceOrOptions !== null &&\n\t\t\t\t\t!(\"kind\" in sourceOrOptions) &&\n\t\t\t\t\t!(\"inputHandleId\" in sourceOrOptions) &&\n\t\t\t\t\t!(\"src\" in sourceOrOptions)\n\t\t\t\t) {\n\t\t\t\t\tconst resolvedSource =\n\t\t\t\t\t\t(sourceOrOptions as SectionOptions).source ??\n\t\t\t\t\t\t(track.source as string | MediaNode | undefined) ??\n\t\t\t\t\t\tsource;\n\t\t\t\t\treturn Layer.section(\n\t\t\t\t\t\tresolvedSource as string | MediaNode,\n\t\t\t\t\t\ttrack,\n\t\t\t\t\t\tsourceOrOptions as SectionOptions,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst resolvedSource =\n\t\t\t\t\tsourceOrOptions ??\n\t\t\t\t\t(track.source as string | MediaNode | undefined) ??\n\t\t\t\t\tsource;\n\t\t\t\treturn Layer.section(\n\t\t\t\t\tresolvedSource as string | MediaNode,\n\t\t\t\t\ttrack,\n\t\t\t\t\toptions,\n\t\t\t\t);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t\twritable: true,\n\t\t\tconfigurable: true,\n\t\t});\n\t}\n\tif (typeof track.blurEffect !== \"function\") {\n\t\tObject.defineProperty(track, \"blurEffect\", {\n\t\t\tvalue: (options?: Partial<BlurProps>) => new Blur({ track, ...options }),\n\t\t\tenumerable: false,\n\t\t\twritable: true,\n\t\t\tconfigurable: true,\n\t\t});\n\t}\n\tif (typeof track.isolate !== \"function\") {\n\t\tObject.defineProperty(track, \"isolate\", {\n\t\t\tvalue: (sourceArg: string | MediaNode, options?: TrackedRegionOptions) =>\n\t\t\t\tLayer.section(sourceArg, track, options),\n\t\t\tenumerable: false,\n\t\t\twritable: true,\n\t\t\tconfigurable: true,\n\t\t});\n\t}\n\treturn track;\n}\n\nconst origVisionAttach = VisionNode.attach;\nVisionNode.attach = function (\n\tsource: Parameters<typeof origVisionAttach>[0],\n\tconfig?: Parameters<typeof origVisionAttach>[1],\n\tbundleOptions?: Parameters<typeof origVisionAttach>[2],\n): ReturnType<typeof origVisionAttach> {\n\tconst bundle = origVisionAttach.call(this, source, config, bundleOptions);\n\tif (bundle?.objects) {\n\t\tconst src = source as string | MediaNode;\n\t\tconst origGet = bundle.objects.get.bind(bundle.objects);\n\t\tbundle.objects.get = (id: number) => decorateTrackSignals(origGet(id), src);\n\n\t\tconst origByCategory = bundle.objects.byCategory.bind(bundle.objects);\n\t\tbundle.objects.byCategory = (cat: string, rank?: number) =>\n\t\t\tdecorateTrackSignals(origByCategory(cat, rank), src);\n\n\t\tif (bundle.objects.primary) {\n\t\t\tdecorateTrackSignals(bundle.objects.primary, src);\n\t\t}\n\t}\n\treturn bundle;\n};\n\nexport {\n\ttype AdvancedTextAnimator,\n\tAdvancedTextAnimatorBuilder,\n\tAdvancedTextAnimatorSchema,\n\t// Text Animations & After Effects Parity\n\ttype AETextAnimator,\n\tAETextAnimatorSchema,\n\ttype AnchorGrouping,\n\tAnchorGroupingSchema,\n\ttype AnchorPreset,\n\tAnchorPresetSchema,\n\ttype AnimatableGlyphProps,\n\tAnimatableGlyphPropsSchema,\n\ttype AnimatableProp,\n\ttype AnimationTrack,\n\ttype ArcLengthLUTEntry,\n\ttype AudioSpectrumTypography,\n\tAudioSpectrumTypographySchema,\n\tapplyStaggerToChildren,\n\ttype BlockNode,\n\ttype BoxNode,\n\tBoxNodeSchema,\n\tbuildPathLUT,\n\tCameraAnimation,\n\ttype CameraDoF,\n\ttype CameraLens,\n\ttype CameraNode,\n\tCameraNodeSchema,\n\ttype CameraShake,\n\ttype CarrierHandoffConfig,\n\tCarrierHandoffConfigSchema,\n\ttype CarrierState,\n\ttype ChartAreaStyle,\n\tChartAreaStyleSchema,\n\ttype ChartAxis,\n\tChartAxisSchema,\n\ttype ChartDataPoint2D,\n\tChartDataPoint2DSchema,\n\ttype ChartDataPointOHLC,\n\tChartDataPointOHLCSchema,\n\ttype ChartGPUOptions,\n\tChartGPUOptionsSchema,\n\ttype ChartLineStyle,\n\tChartLineStyleSchema,\n\ttype ChartNode,\n\tChartNodeSchema,\n\ttype ChartPointStyle,\n\tChartPointStyleSchema,\n\ttype ChartSeries,\n\tChartSeriesSchema,\n\ttype ChartSeriesType,\n\tChartSeriesTypeSchema,\n\ttype ChromaticGlitchConfig,\n\tChromaticGlitchConfigSchema,\n\ttype ColorSignalOptions,\n\ttype ColorStop,\n\tColorStopSchema,\n\tCompositionChartNodeSchema,\n\ttype CompositorProgramConfig,\n\tCompositorProgramSchema,\n\ttype CompositorToProgramOptions,\n\ttype CubicBezierSegment,\n\tCubicBezierSegmentSchema,\n\tcalculateSequenceTimeline,\n\tcollectNodeOps,\n\tcompositorToProgram,\n\tcomputeAnchorPivotOffset,\n\tcomputeCarrierContinuity,\n\tcomputeLayout,\n\tcomputeLayoutSync,\n\tcomputeLineLeadingDisplacement,\n\tcomputeRangeSelectorWeight,\n\tcomputeStaggerDelay,\n\ttype DynamicStrokeProperties,\n\tDynamicStrokePropertiesSchema,\n\tdeterministicWigglyNoise,\n\tdistanceToCurveParameter,\n\ttype EaseRef,\n\ttype EnhancedTextNode,\n\tEnhancedTextNodeSchema,\n\ttype ExpressionEvaluationContext,\n\ttype ExpressionSelector,\n\tExpressionSelectorSchema,\n\ttype ExtendedGlyphProperties,\n\tExtendedGlyphPropertiesSchema,\n\tellipseToCubicBeziers,\n\tevaluateAnimationAtFrame,\n\tevaluateCubicBezier,\n\tevaluateCubicBezierDerivative,\n\tevaluateExpressionSelector,\n\tevaluateMarqueeOffset,\n\tevaluateSelectorCombination,\n\tevaluateSkewMatrix,\n\tevaluateSpringProgress,\n\tevaluateTrackAtFrame,\n\tevaluateTypewriterState,\n\tevaluateVolumetricFormation,\n\ttype FlexNode,\n\tFlexNodeSchema,\n\ttype FromToOptions,\n\ttype GlyphAnchorGrouping,\n\tGlyphAnchorGroupingSchema,\n\ttype GlyphAnchorPoint,\n\tGlyphAnchorPointSchema,\n\tgenerateArcLengthLUT,\n\tgeneratePathSegments,\n\tgetScramblePool,\n\tgetShuffledOrder,\n\ttype Keyframe,\n\ttype KineticMarqueeConfig,\n\tKineticMarqueeConfigSchema,\n\tLayerAnimation,\n\ttype LayoutNode,\n\tLayoutNodeSchema,\n\ttype LightNode,\n\tLightNodeSchema,\n\ttype LightType,\n\tLightTypeSchema,\n\ttype LineSpacingDynamics,\n\tLineSpacingDynamicsSchema,\n\ttype LongShadowConfig,\n\tLongShadowConfigSchema,\n\ttype MaterialType,\n\tMaterialTypeSchema,\n\ttype MediaNode,\n\tMediaNodeSchema,\n\ttype Model3DNode,\n\tModel3DNodeSchema,\n\ttype ParticleDissolveConfig,\n\tParticleDissolveConfigSchema,\n\ttype PathChainLUT,\n\ttype PathChainLUTEntry,\n\tparseSvgPathToCubicBeziers,\n\tScene,\n\ttype SceneDefinition,\n\tSceneDefinitionSchema,\n\ttype SceneOptions,\n\ttype SceneTransitionType,\n\tSceneTransitionTypeSchema,\n\ttype SelectorBasedOn,\n\tSelectorBasedOnSchema,\n\ttype SelectorMode,\n\tSelectorModeSchema,\n\ttype SelectorShape,\n\tSelectorShapeSchema,\n\ttype SelectorUnits,\n\tSelectorUnitsSchema,\n\tSequence,\n\ttype SequenceOptions,\n\ttype SequenceTimelineResult,\n\ttype ShapeNode,\n\tShapeNodeSchema,\n\ttype SignalTrackOptions,\n\ttype SkewProperties,\n\tSkewPropertiesSchema,\n\ttype Spatial3DProperties,\n\tSpatial3DPropertiesSchema,\n\ttype SpringOptions,\n\ttype SpringPhysics,\n\tSpringPhysicsSchema,\n\tsampleAudioSpectrumScale,\n\tsampleCurveGeometry,\n\tsamplePathChainGeometry,\n\ttype TextAnchorConfig,\n\tTextAnchorConfigSchema,\n\tTextAnimator,\n\tTextAnimatorBuilder,\n\tTextAnimatorSchema,\n\ttype TextCursorConfig,\n\tTextCursorConfigSchema,\n\ttype TextCursorStyle,\n\tTextCursorStyleSchema,\n\ttype TextNode,\n\tTextNodeSchema,\n\tTextPathBuilder,\n\ttype TextPathOptions,\n\tTextPathOptionsSchema,\n\ttype TextPathSource,\n\tTextPathSourceSchema,\n\ttype TextRangeSelector,\n\tTextRangeSelectorSchema,\n\ttype TextScrambleConfig,\n\tTextScrambleConfigSchema,\n\ttype TextSelector,\n\tTextSelectorSchema,\n\ttype TextSignalSelector,\n\tTextSignalSelectorSchema,\n\tTextSpanMarkSchema,\n\tTextSpanSchema,\n\ttype TextWigglySelector,\n\tTextWigglySelectorSchema,\n\ttype TrackSource,\n\ttype TypewriterAnimator,\n\tTypewriterAnimatorSchema,\n\ttype TypingCadence,\n\tTypingCadenceSchema,\n\ttype VariableFontAxes,\n\tVariableFontAxesSchema,\n\ttype Vec2,\n\tVec2Schema,\n\ttype VolumetricFormationConfig,\n\tVolumetricFormationConfigSchema,\n\ttype VolumetricFormationMode,\n\tVolumetricFormationModeSchema,\n\ttype WiggleOptions,\n\twaveToCubicBeziers,\n} from \"@gitframes/compositions/program\";\nexport * from \"@gitframes/core\";\nexport * from \"@gitframes/renderers\";\nexport {\n\ttype AnimationClip3D,\n\ttype AudioLatentData,\n\tAudioLatentEngine,\n\tAudioLatentTrackCache,\n\tAudioMeshDeformPipeline,\n\ttype BlendMode,\n\ttype Bone3D,\n\tCamera3D,\n\tChartGPUEngineBridge,\n\ttype ChartNodeProps,\n\tchartBridgeCache,\n\tdrawChartNode,\n\tEffectPipeline,\n\tensureDevice,\n\tGlassPipeline,\n\ttype GPULightData,\n\tHeadlessChartCanvasElementMock,\n\tHeadlessChartContainerMock,\n\ttype HeadlessChartTarget,\n\tHeadlessGPUCanvasContextMock,\n\tinputStore,\n\tLight3D,\n\ttype Light3DOptions,\n\ttype LoadModelOptions,\n\tloadFBX,\n\tloadModel3D,\n\tloadOBJ,\n\tlutStore,\n\ttype Material3D,\n\ttype Mesh3DData,\n\ttype Model3DData,\n\tMotionBlurPipeline,\n\ttype NodeAnimationTrack3D,\n\tPath3D,\n\tparseFBX,\n\tparseMTL,\n\tparseOBJ,\n\ttype RenderContextValue,\n\tRenderer2D,\n\tRenderer3D,\n\tShadowPipeline,\n\ttype Skeleton3D,\n\tSlugFontCache,\n\tSlugPipeline,\n\tSSAOPipeline,\n\tshaderStore,\n\ttextureCache,\n} from \"@gitframes/webgpu-renderers\";\nexport {\n\tApplyLUT,\n\ttype ApplyLUTProps,\n\tAudioSignalExtractor,\n\ttype AudioSignalExtractorProps,\n\tBlur,\n\ttype BlurProps,\n\tColorBalance,\n\ttype ColorBalanceProps,\n\tColorKey,\n\ttype ColorKeyProps,\n\tCrop,\n\ttype CropProps,\n\tCurves,\n\ttype CurvesChannelPoint,\n\ttype CurvesProps,\n\tCustomEffect,\n\ttype DeflickerProps,\n\tDepthOfField,\n\ttype DepthOfFieldProps,\n\tFilmGrain,\n\ttype FilmGrainProps,\n\tGradientMap,\n\ttype GradientMapProps,\n\ttype GradientMapStop,\n\ttype HalftoneDotShape,\n\ttype HalftoneMode,\n\tHalftoneScreen,\n\ttype HalftoneScreenProps,\n\tHighPass,\n\ttype HighPassProps,\n\ttype LevelChannel,\n\tLevels,\n\ttype LevelsProps,\n\tModulate,\n\ttype ModulateProps,\n\tMotionBlur,\n\ttype MotionBlurProps,\n\tPBRGlass,\n\ttype PBRGlassProps,\n\tRelight3D,\n\ttype Relight3DProps,\n\tSelectiveColor,\n\ttype SelectiveColorAdjustment,\n\ttype SelectiveColorProps,\n\tShadowsHighlights,\n\ttype ShadowsHighlightsProps,\n\tSSAO,\n\ttype SSAOProps,\n\tTemporalDeflicker,\n\tTileOffset,\n\ttype TileOffsetEdgeMode,\n\ttype TileOffsetProps,\n\tUnsharpMask,\n\ttype UnsharpMaskProps,\n\tVignette,\n\ttype VignetteProps,\n\tVision,\n\ttype VisionProps,\n} from \"./effects/index.js\";\nexport {\n\ttype Carousel3DOptions,\n\ttype Cube3DOptions,\n\ttype CubeFaceConfig,\n\ttype CubeFaceInput,\n\ttype ExtrudedText3DOptions,\n\ttype Grid3DOptions,\n\tLayer3D,\n\ttype Plane3DOptions,\n\ttype Prism3DOptions,\n\ttype Shape3DContainer,\n\ttype Text3DOptions,\n} from \"./shapes3d.js\";\n\nexport interface CompositionOptions {\n\twidth: number;\n\theight: number;\n\tfps?: number;\n\tdurationMs?: number;\n\tdurationFrames?: number;\n\tbackgroundColor?: string;\n\tfonts?: string[];\n\tsignals?: Record<string, unknown>;\n}\n\n/**\n * Fluent builder for single clips and chained visual/audio effect pipelines.\n */\nexport class Media {\n\tpublic readonly virtualMedia: VirtualMediaData;\n\n\tconstructor(source: MediaSourceInput, type: DataType = \"Video\") {\n\t\tthis.virtualMedia = createVirtualMedia(source, type);\n\t}\n\n\tstatic video(source: MediaSourceInput, meta?: Partial<MediaMetadata>): Media {\n\t\tconst m = new Media(source, \"Video\");\n\t\tif (meta) Object.assign(m.virtualMedia.metadata, meta);\n\t\treturn m;\n\t}\n\n\tstatic image(source: MediaSourceInput, meta?: Partial<MediaMetadata>): Media {\n\t\tconst m = new Media(source, \"Image\");\n\t\tif (meta) Object.assign(m.virtualMedia.metadata, meta);\n\t\treturn m;\n\t}\n\n\tstatic audio(source: MediaSourceInput, meta?: Partial<MediaMetadata>): Media {\n\t\tconst m = new Media(source, \"Audio\");\n\t\tif (meta) Object.assign(m.virtualMedia.metadata, meta);\n\t\treturn m;\n\t}\n\n\t/**\n\t * Appends any Effect instance or shader operation onto the current media AST.\n\t */\n\tpublic apply<TProps extends object>(effect: Effect<TProps>): Media;\n\tpublic apply<\n\t\tTConfig extends Record<string, unknown> = Record<string, unknown>,\n\t>(op: string, config?: TConfig): Media;\n\tpublic apply(\n\t\teffectOrOp: Effect<object> | string,\n\t\tconfig: Record<string, unknown> = {},\n\t): Media {\n\t\tlet opPayload: Record<string, unknown>;\n\t\tif (\n\t\t\teffectOrOp instanceof Effect ||\n\t\t\t(typeof effectOrOp === \"object\" &&\n\t\t\t\teffectOrOp !== null &&\n\t\t\t\t\"op\" in effectOrOp)\n\t\t) {\n\t\t\topPayload = (effectOrOp as Effect<object>).toOperation();\n\t\t} else {\n\t\t\topPayload = {\n\t\t\t\top: effectOrOp,\n\t\t\t\t...config,\n\t\t\t};\n\t\t}\n\n\t\tconst nextVM = appendOperation(this.virtualMedia, {\n\t\t\t...opPayload,\n\t\t\tdataType: this.virtualMedia.operation.dataType,\n\t\t} as MediaOperation);\n\t\treturn new Media(nextVM);\n\t}\n\n\t/**\n\t * Returns the underlying VirtualMediaData AST node ready for rendering.\n\t */\n\tpublic toVirtualMedia(): VirtualMediaData {\n\t\treturn this.virtualMedia;\n\t}\n\n\t/**\n\t * Renders a single frame from this media pipeline to a PNG Buffer.\n\t * Can render either by timestamp in milliseconds (`atMs`) or by frame index (`frame`).\n\t */\n\tpublic async renderFrame(\n\t\toptions: {\n\t\t\tatMs?: number;\n\t\t\tframe?: number;\n\t\t\tfps?: number;\n\t\t\trenderer?: HeadlessMediaRenderer;\n\t\t} = {},\n\t): Promise<Buffer> {\n\t\tconst renderer = options.renderer ?? new HeadlessMediaRenderer();\n\t\treturn renderer.renderFrame(this.virtualMedia, options);\n\t}\n\n\tget fps(): number | undefined {\n\t\treturn this.virtualMedia.metadata?.fps ?? undefined;\n\t}\n\n\tget durationMs(): number | undefined {\n\t\treturn this.virtualMedia.metadata?.durationMs ?? undefined;\n\t}\n\n\tget width(): number | undefined {\n\t\treturn this.virtualMedia.metadata?.width ?? undefined;\n\t}\n\n\tget height(): number | undefined {\n\t\treturn this.virtualMedia.metadata?.height ?? undefined;\n\t}\n\n\t/**\n\t * Renders an image grid of sequential frames across a given frame or millisecond range.\n\t * Ideal for automated visual inspection of animation motion, easing curves, and layout stability.\n\t */\n\tpublic async renderFrameGrid(\n\t\toptions: FrameGridOptions = {},\n\t): Promise<Buffer> {\n\t\treturn renderFrameGrid(this, options);\n\t}\n\n\t/**\n\t * Renders this media pipeline into an MP4/WebM video file with audio.\n\t */\n\tpublic async renderVideo(\n\t\toutputPathOrOptions:\n\t\t\t| string\n\t\t\t| {\n\t\t\t\t\tcodec?: string;\n\t\t\t\t\taudioCodec?: string;\n\t\t\t\t\tquality?: string;\n\t\t\t\t\tconcurrency?: number;\n\t\t\t\t\toutputPath?: string;\n\t\t\t\t\trenderer?: HeadlessMediaRenderer;\n\t\t\t } = {},\n\t\toptions: {\n\t\t\tcodec?: string;\n\t\t\taudioCodec?: string;\n\t\t\tquality?: string;\n\t\t\tconcurrency?: number;\n\t\t\toutputPath?: string;\n\t\t\trenderer?: HeadlessMediaRenderer;\n\t\t} = {},\n\t): Promise<{ filePath: string; cleanup: () => Promise<void> }> {\n\t\tconst opts =\n\t\t\ttypeof outputPathOrOptions === \"string\"\n\t\t\t\t? { ...options, outputPath: outputPathOrOptions }\n\t\t\t\t: outputPathOrOptions;\n\t\tconst renderer = opts.renderer ?? new HeadlessMediaRenderer();\n\t\tconst result = await renderer.renderVideo(this.virtualMedia, opts);\n\t\tif (opts.outputPath) {\n\t\t\tawait fs.mkdir(path.dirname(opts.outputPath), { recursive: true });\n\t\t\tawait fs.copyFile(result.filePath, opts.outputPath);\n\t\t}\n\t\treturn result;\n\t}\n}\n\nexport interface SubjectSandwichOptions {\n\treadonly source: string | MediaNode;\n\treadonly subject?: MaskTrackSignals | ObjectTrackSignals;\n\treadonly behind: readonly LayoutNode[];\n\treadonly feather?: number;\n\treadonly fit?: \"cover\" | \"contain\" | \"fill\";\n\treadonly variant?: VisionProps[\"variant\"];\n\treadonly confidence?: number;\n\treadonly keyBackground?: boolean;\n\treadonly backgroundKeyThreshold?: number;\n\treadonly muted?: boolean;\n\treadonly volume?: number;\n}\n\nexport interface SmartFramingOptions {\n\treadonly source: string | MediaNode;\n\treadonly targetAspect?: number;\n\treadonly sourceAspect?: number;\n\treadonly target: ObjectTrackSignals | MaskTrackSignals;\n\treadonly damping?: number;\n\treadonly leadHeadroom?: number;\n\treadonly fit?: \"cover\" | \"contain\" | \"fill\";\n\treadonly variant?: VisionProps[\"variant\"];\n\treadonly muted?: boolean;\n\treadonly volume?: number;\n}\n\nexport interface SubjectOutlineOptions {\n\treadonly source?: string | MediaNode;\n\treadonly color?: string;\n\treadonly width?: number;\n\treadonly blur?: number;\n\treadonly pulseSignal?: ProgrammaticSignal | Signal<number>;\n\treadonly muted?: boolean;\n\treadonly volume?: number;\n}\n\n/**\n * High-level programmatic builder for multi-layer Gitframes compositions.\n */\nexport class Composition {\n\tpublic width: number;\n\tpublic height: number;\n\tpublic fps: number;\n\tpublic durationMs?: number;\n\tpublic backgroundColor: string;\n\tpublic fonts: string[];\n\tpublic children: LayoutNode[] = [];\n\tpublic audioTracks: MediaNode[] = [];\n\tpublic signals: Record<string, unknown> = {};\n\tprivate _frameHooks: Array<(ctx: FrameContext) => void> = [];\n\tprivate _visionConfig?: VisionProps;\n\tprivate _visionBundle?: VisionBundle;\n\tprivate _effects: unknown[] = [];\n\n\t/**\n\t * Applies a whole-composition post-processing effect or vision pipeline.\n\t */\n\tpublic apply(effect: unknown): this {\n\t\tif (effect instanceof Vision) {\n\t\t\tthis.withVision(effect);\n\t\t\treturn this;\n\t\t}\n\t\tthis._effects.push(effect);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Runs vision on the whole composition — the rendered frame (composition, blur, crop,\n\t * anything upstream) is the inference input. Models are LAZY: nothing downloads until\n\t * the first frame actually runs a task.\n\t * Returns the reactive VisionBundle (objects / masks / pose / classes signals).\n\t */\n\tpublic withVision(config: VisionProps | Vision = {}): VisionBundle {\n\t\tthis._visionBundle ??= new VisionBundle({\n\t\t\twidth: this.width,\n\t\t\theight: this.height,\n\t\t\tfps: this.fps,\n\t\t});\n\t\tconst rawConfig =\n\t\t\tconfig instanceof Vision ? (config.config as VisionProps) : config;\n\t\tthis._visionConfig = {\n\t\t\t...rawConfig,\n\t\t\tvisionBundle: this._visionBundle,\n\t\t};\n\t\treturn this._visionBundle;\n\t}\n\n\t/**\n\t * One-shot, ffmpeg-free vision analysis of a media source.\n\t *\n\t * Decodes frames through the same mediabunny pipeline the renderer uses, runs the requested\n\t * tasks lazily (only those models download), temporally tracks detections, and returns a\n\t * zod-serializable report. The decoder is released and the runner closed on completion.\n\t */\n\tpublic async analyzeVisionSequence(\n\t\tsource: string,\n\t\toptions: {\n\t\t\ttasks?: readonly VisionTask[];\n\t\t\tcategories?: readonly string[];\n\t\t\tfps?: number;\n\t\t\ttotalFrames?: number;\n\t\t\tpathStride?: number;\n\t\t\tincludeMasks?: boolean;\n\t\t\tmodelsDir?: string;\n\t\t\tbaseUrl?: string;\n\t\t\tconfidence?: number;\n\t\t\tvariant?: VisionProps[\"variant\"];\n\t\t\t/** Tracker box-association IoU. Default 0.25. */\n\t\t\tiouThreshold?: number;\n\t\t} = {},\n\t): Promise<VisionAnalysisReport> {\n\t\tconst fps = options.fps ?? this.fps;\n\t\tconst durationMs = this.durationMs ?? (await this.computeDuration());\n\t\tconst totalFrames =\n\t\t\toptions.totalFrames ?? Math.max(1, Math.round((durationMs / 1000) * fps));\n\n\t\tconst runner = VisionRunner.create({\n\t\t\tmodelsDir: options.modelsDir,\n\t\t\tbaseUrl: options.baseUrl,\n\t\t\t...(options.confidence !== undefined\n\t\t\t\t? { confidence: options.confidence }\n\t\t\t\t: {}),\n\t\t\t...(options.variant !== undefined ? { variant: options.variant } : {}),\n\t\t});\n\n\t\tconst decoder = mediaDecoderCache.getVideo(source, true);\n\t\tasync function* frameSource(): AsyncGenerator<{\n\t\t\tdata: Uint8Array;\n\t\t\twidth: number;\n\t\t\theight: number;\n\t\t}> {\n\t\t\tfor (let i = 0; i < totalFrames; i++) {\n\t\t\t\tconst frame = await decoder.getFrame(i / fps);\n\t\t\t\tif (frame?.buffer && frame.width > 0 && frame.height > 0) {\n\t\t\t\t\tyield {\n\t\t\t\t\t\tdata: frame.buffer,\n\t\t\t\t\t\twidth: frame.width,\n\t\t\t\t\t\theight: frame.height,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\treturn await analyzeVisionFrames(frameSource(), {\n\t\t\t\trunner,\n\t\t\t\tsource,\n\t\t\t\tfps,\n\t\t\t\t...(options.tasks !== undefined ? { tasks: options.tasks } : {}),\n\t\t\t\t...(options.categories !== undefined\n\t\t\t\t\t? { categories: options.categories }\n\t\t\t\t\t: {}),\n\t\t\t\t...(options.pathStride !== undefined\n\t\t\t\t\t? { pathStride: options.pathStride }\n\t\t\t\t\t: {}),\n\t\t\t\t...(options.includeMasks !== undefined\n\t\t\t\t\t? { includeMasks: options.includeMasks }\n\t\t\t\t\t: {}),\n\t\t\t\t...(options.iouThreshold !== undefined\n\t\t\t\t\t? { iouThreshold: options.iouThreshold }\n\t\t\t\t\t: {}),\n\t\t\t});\n\t\t} finally {\n\t\t\trunner.close();\n\t\t\tdecoder.destroy();\n\t\t}\n\t}\n\n\t/**\n\t * Game-engine per-frame lifecycle hook for the composition.\n\t * Invoked before rendering each frame so scripts or agents can mutate properties and signals.\n\t */\n\tpublic onRequestFrame(callback: (ctx: FrameContext) => void): this {\n\t\tthis._frameHooks.push(callback);\n\t\treturn this;\n\t}\n\n\tpublic notifyFrame(ctx: FrameContext): void {\n\t\tfor (const hook of this._frameHooks) {\n\t\t\thook(ctx);\n\t\t}\n\t}\n\n\tconstructor(options: CompositionOptions) {\n\t\tthis.width = options.width;\n\t\tthis.height = options.height;\n\t\tthis.fps = options.fps ?? 60;\n\t\tthis.durationMs =\n\t\t\toptions.durationMs ??\n\t\t\t(options.durationFrames !== undefined\n\t\t\t\t? (options.durationFrames / this.fps) * 1000\n\t\t\t\t: undefined);\n\t\tthis.backgroundColor = options.backgroundColor ?? \"#000000\";\n\t\tthis.fonts = options.fonts ?? [];\n\t\tthis.signals = options.signals ?? {};\n\t}\n\n\tpublic static create(options: CompositionOptions): Composition {\n\t\treturn new Composition(options);\n\t}\n\n\tpublic addSignal(name: string, signal: unknown): this {\n\t\tthis.signals[name] = signal;\n\t\treturn this;\n\t}\n\n\tpublic add(\n\t\tlayerOrFirst:\n\t\t\t| LayoutNode\n\t\t\t| LayoutNode[]\n\t\t\t| TensorPipeline\n\t\t\t| VisionNode\n\t\t\t| { node: unknown },\n\t\t...rest: Array<\n\t\t\t| LayoutNode\n\t\t\t| LayoutNode[]\n\t\t\t| TensorPipeline\n\t\t\t| VisionNode\n\t\t\t| { node: unknown }\n\t\t\t| LayerAnimation\n\t\t\t| { tracks: AnimationTrack[] }\n\t\t>\n\t): this {\n\t\tif (layerOrFirst instanceof TensorPipeline) {\n\t\t\tthis.children.push(layerOrFirst.toNode() as unknown as LayoutNode);\n\t\t} else if (layerOrFirst instanceof VisionNode) {\n\t\t\tthis.children.push(layerOrFirst.toNode() as unknown as LayoutNode);\n\t\t} else if (\n\t\t\tlayerOrFirst &&\n\t\t\ttypeof layerOrFirst === \"object\" &&\n\t\t\t\"node\" in layerOrFirst\n\t\t) {\n\t\t\tthis.add(\n\t\t\t\t(\n\t\t\t\t\tlayerOrFirst as {\n\t\t\t\t\t\tnode: LayoutNode | TensorPipeline | { node: unknown };\n\t\t\t\t\t}\n\t\t\t\t).node as LayoutNode,\n\t\t\t\t...rest,\n\t\t\t);\n\t\t\treturn this;\n\t\t} else if (Array.isArray(layerOrFirst)) {\n\t\t\tfor (const l of layerOrFirst) {\n\t\t\t\tthis.add(l);\n\t\t\t}\n\t\t} else {\n\t\t\tconst targetNode = layerOrFirst as LayoutNode;\n\t\t\tconst animCandidate = rest[0];\n\t\t\tif (\n\t\t\t\tanimCandidate &&\n\t\t\t\t!(animCandidate instanceof TensorPipeline) &&\n\t\t\t\t!Array.isArray(animCandidate) &&\n\t\t\t\t(animCandidate instanceof LayerAnimation || \"tracks\" in animCandidate)\n\t\t\t) {\n\t\t\t\ttargetNode.animation =\n\t\t\t\t\tanimCandidate instanceof LayerAnimation\n\t\t\t\t\t\t? animCandidate.toSpec()\n\t\t\t\t\t\t: animCandidate;\n\t\t\t\tthis.children.push(targetNode);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tthis.children.push(targetNode);\n\t\t}\n\n\t\tfor (const item of rest) {\n\t\t\tif (item && !(item instanceof LayerAnimation) && !(\"tracks\" in item)) {\n\t\t\t\tthis.add(\n\t\t\t\t\titem as\n\t\t\t\t\t\t| LayoutNode\n\t\t\t\t\t\t| LayoutNode[]\n\t\t\t\t\t\t| TensorPipeline\n\t\t\t\t\t\t| { node: unknown },\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tpublic addAudio(track: MediaNode): this {\n\t\tthis.audioTracks.push(track);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Turnkey \"Text Behind Subject\" (\"Sandwich\") Primitive.\n\t * Lowers into:\n\t * 1. Bottom Layer: Full background video plate\n\t * 2. Middle Layer: User-supplied `behind` nodes\n\t * 3. Top Layer: Subject cutout video with continuous matte alpha registered at identical coordinates\n\t */\n\tpublic addSubjectSandwich(options: SubjectSandwichOptions): this {\n\t\tconst src =\n\t\t\ttypeof options.source === \"string\"\n\t\t\t\t? options.source\n\t\t\t\t: (options.source.src ?? \"\");\n\t\tconst fit = options.fit ?? \"cover\";\n\t\tconst feather = options.feather ?? 4;\n\t\tconst featherVal = feather > 1 ? feather / 100 : feather;\n\t\tconst variant = options.variant ?? \"s\";\n\n\t\t// 1. Bottom Layer: Full background video plate\n\t\tconst bottomPlate = Layer.video(src, {\n\t\t\twidth: this.width,\n\t\t\theight: this.height,\n\t\t\tposition: \"absolute\",\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\tfit,\n\t\t\tmuted: options.muted ?? false,\n\t\t\tvolume: options.muted ? 0 : (options.volume ?? 1),\n\t\t});\n\t\tthis.add(bottomPlate);\n\n\t\t// 2. Middle Layer: User-supplied `behind` nodes\n\t\tfor (const node of options.behind) {\n\t\t\tthis.add(node);\n\t\t}\n\n\t\t// 3. Top Layer: Subject cutout video with continuous matte alpha registered at identical coordinates\n\t\tconst topPlate = Layer.video(src, {\n\t\t\twidth: this.width,\n\t\t\theight: this.height,\n\t\t\tposition: \"absolute\",\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\tfit,\n\t\t\tmuted: true,\n\t\t\tvolume: 0,\n\t\t}).withVision({\n\t\t\tmode: \"matte\",\n\t\t\tenableSegmentation: true,\n\t\t\tvariant,\n\t\t\tconfidence: options.confidence ?? 0.25,\n\t\t\tfeatherRadius: featherVal,\n\t\t\tkeyBackground: options.keyBackground ?? true,\n\t\t\tbackgroundKeyThreshold: options.backgroundKeyThreshold,\n\t\t});\n\t\tthis.add(topPlate);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Dynamic Smart Re-Framing (16:9 → 9:16 Auto-Crop).\n\t * Automatically transforms landscape footage into vertical shorts/reels by framing the\n\t * tracked subject with smooth camera physics and lead headroom.\n\t */\n\tpublic addSmartFraming(options: SmartFramingOptions): this {\n\t\tconst src =\n\t\t\ttypeof options.source === \"string\"\n\t\t\t\t? options.source\n\t\t\t\t: (options.source.src ?? \"\");\n\t\tconst damping = Math.max(0, Math.min(0.99, options.damping ?? 0.8));\n\t\tconst headroom = options.leadHeadroom ?? 0.18;\n\t\tconst compW = this.width;\n\t\tconst compH = this.height;\n\n\t\tconst sourceAspect = options.sourceAspect ?? 16 / 9;\n\t\tconst compAspect = compW / compH;\n\n\t\t// Calculate canvas coverage dimensions to avoid black bars during pan\n\t\tconst plateWidth =\n\t\t\tcompAspect < sourceAspect ? Math.round(compH * sourceAspect) : compW;\n\t\tconst plateHeight =\n\t\t\tcompAspect < sourceAspect ? compH : Math.round(compW / sourceAspect);\n\n\t\tconst minOffsetX = compW - plateWidth; // <= 0\n\t\tconst minOffsetY = compH - plateHeight; // <= 0\n\n\t\tconst targetObj = options.target as unknown as {\n\t\t\tcenter?: {\n\t\t\t\tx?: ProgrammaticSignal;\n\t\t\t\ty?: ProgrammaticSignal;\n\t\t\t\tscreenX?: ProgrammaticSignal;\n\t\t\t\tscreenY?: ProgrammaticSignal;\n\t\t\t};\n\t\t\tbounds?: {\n\t\t\t\tx?: ProgrammaticSignal;\n\t\t\t\ty?: ProgrammaticSignal;\n\t\t\t\twidth?: ProgrammaticSignal;\n\t\t\t\theight?: ProgrammaticSignal;\n\t\t\t\tcenterX?: ProgrammaticSignal;\n\t\t\t\tcenterY?: ProgrammaticSignal;\n\t\t\t};\n\t\t};\n\n\t\tconst rawOffsetX = new ProgrammaticSignal(\n\t\t\t(ctx) => {\n\t\t\t\tif (minOffsetX >= 0) return 0;\n\t\t\t\tconst normX = targetObj.center?.x\n\t\t\t\t\t? targetObj.center.x.get(ctx)\n\t\t\t\t\t: targetObj.bounds?.centerX\n\t\t\t\t\t\t? targetObj.bounds.centerX.get(ctx) / compW\n\t\t\t\t\t\t: targetObj.center?.screenX\n\t\t\t\t\t\t\t? targetObj.center.screenX.get(ctx) / compW\n\t\t\t\t\t\t\t: 0.5;\n\t\t\t\tconst clampedNormX = Math.max(0, Math.min(1, normX));\n\t\t\t\tconst targetPx = clampedNormX * plateWidth;\n\t\t\t\tconst desired = compW / 2 - targetPx;\n\t\t\t\treturn Math.max(minOffsetX, Math.min(0, desired));\n\t\t\t},\n\t\t\t{ fps: this.fps, label: \"smart_framing_pan_x\" },\n\t\t);\n\n\t\tconst rawOffsetY = new ProgrammaticSignal(\n\t\t\t(ctx) => {\n\t\t\t\tif (minOffsetY >= 0) return 0;\n\t\t\t\tconst normY = targetObj.center?.y\n\t\t\t\t\t? targetObj.center.y.get(ctx)\n\t\t\t\t\t: targetObj.bounds?.centerY\n\t\t\t\t\t\t? targetObj.bounds.centerY.get(ctx) / compH\n\t\t\t\t\t\t: targetObj.center?.screenY\n\t\t\t\t\t\t\t? targetObj.center.screenY.get(ctx) / compH\n\t\t\t\t\t\t\t: 0.5;\n\t\t\t\tconst clampedNormY = Math.max(0, Math.min(1, normY));\n\t\t\t\tconst targetPy = clampedNormY * plateHeight;\n\t\t\t\tconst desired = compH * headroom - targetPy;\n\t\t\t\treturn Math.max(minOffsetY, Math.min(0, desired));\n\t\t\t},\n\t\t\t{ fps: this.fps, label: \"smart_framing_pan_y\" },\n\t\t);\n\n\t\t// Damped camera smoothing\n\t\tconst smoothOffsetX = new ProgrammaticSignal(\n\t\t\t(ctx) => {\n\t\t\t\tconst targetFrame = ctx.frame;\n\t\t\t\tif (targetFrame <= 0) return rawOffsetX.get(ctx);\n\t\t\t\tlet filtered = rawOffsetX.get({ ...ctx, frame: 0, time: 0 });\n\t\t\t\tconst alpha = 1.0 - damping;\n\t\t\t\tfor (let f = 1; f <= targetFrame; f++) {\n\t\t\t\t\tconst val = rawOffsetX.get({ ...ctx, frame: f, time: f / ctx.fps });\n\t\t\t\t\tfiltered = filtered + alpha * (val - filtered);\n\t\t\t\t}\n\t\t\t\treturn filtered;\n\t\t\t},\n\t\t\t{ fps: this.fps, label: \"smart_framing_smooth_x\" },\n\t\t);\n\n\t\tconst smoothOffsetY = new ProgrammaticSignal(\n\t\t\t(ctx) => {\n\t\t\t\tconst targetFrame = ctx.frame;\n\t\t\t\tif (targetFrame <= 0) return rawOffsetY.get(ctx);\n\t\t\t\tlet filtered = rawOffsetY.get({ ...ctx, frame: 0, time: 0 });\n\t\t\t\tconst alpha = 1.0 - damping;\n\t\t\t\tfor (let f = 1; f <= targetFrame; f++) {\n\t\t\t\t\tconst val = rawOffsetY.get({ ...ctx, frame: f, time: f / ctx.fps });\n\t\t\t\t\tfiltered = filtered + alpha * (val - filtered);\n\t\t\t\t}\n\t\t\t\treturn filtered;\n\t\t\t},\n\t\t\t{ fps: this.fps, label: \"smart_framing_smooth_y\" },\n\t\t);\n\n\t\tconst container = Layer.box({\n\t\t\twidth: compW,\n\t\t\theight: compH,\n\t\t\toverflow: \"hidden\",\n\t\t\tposition: \"relative\",\n\t\t});\n\n\t\tconst videoPlate = Layer.video(src, {\n\t\t\twidth: plateWidth,\n\t\t\theight: plateHeight,\n\t\t\tposition: \"absolute\",\n\t\t\tx: smoothOffsetX as unknown as number,\n\t\t\ty: smoothOffsetY as unknown as number,\n\t\t\tfit: options.fit ?? \"cover\",\n\t\t\tmuted: options.muted ?? false,\n\t\t\tvolume: options.muted ? 0 : (options.volume ?? 1),\n\t\t});\n\n\t\tcontainer.children.push(videoPlate);\n\t\tthis.add(container);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Subject Contour Glow & Neon Outline.\n\t * Strokes the silhouette boundary with a stylized bloom/glow and optional audio-reactive pulse.\n\t */\n\tpublic addSubjectOutline(\n\t\t_subject: MaskTrackSignals | ObjectTrackSignals,\n\t\toptions: SubjectOutlineOptions = {},\n\t): this {\n\t\tconst blur = options.blur ?? 12;\n\t\tconst compW = this.width;\n\t\tconst compH = this.height;\n\n\t\tconst pulse = options.pulseSignal;\n\t\tconst baseOpacity = pulse\n\t\t\t? new ProgrammaticSignal(\n\t\t\t\t\t(ctx) => Math.max(0, Math.min(1, Number(pulse.get(ctx)) || 0)),\n\t\t\t\t\t{ fps: this.fps, label: \"outline_pulse\" },\n\t\t\t\t)\n\t\t\t: 1.0;\n\n\t\tconst src =\n\t\t\ttypeof options.source === \"string\"\n\t\t\t\t? options.source\n\t\t\t\t: (options.source?.src ?? \"\");\n\n\t\tconst outlineLayer = Layer.box({\n\t\t\twidth: compW,\n\t\t\theight: compH,\n\t\t\tposition: \"absolute\",\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\topacity: baseOpacity as unknown as number,\n\t\t});\n\n\t\tif (src) {\n\t\t\tconst maskVideo = Layer.video(src, {\n\t\t\t\twidth: compW,\n\t\t\t\theight: compH,\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tx: 0,\n\t\t\t\ty: 0,\n\t\t\t\tfit: \"cover\",\n\t\t\t\tmuted: true,\n\t\t\t\tvolume: 0,\n\t\t\t}).withVision({\n\t\t\t\tmode: \"mask\",\n\t\t\t\tenableSegmentation: true,\n\t\t\t});\n\t\t\toutlineLayer.children.push(maskVideo);\n\t\t}\n\n\t\toutlineLayer.apply(\n\t\t\tnew Blur({\n\t\t\t\tstrength: blur,\n\t\t\t\tblurType: \"Gaussian\",\n\t\t\t}),\n\t\t);\n\n\t\tthis.add(outlineLayer);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Creates an isolated, styled section of the composition or underlying source plate.\n\t * Any WebGPU effects (Blur, FilmGrain, Curves, Vignette, etc.) can be applied to this section.\n\t */\n\tpublic section(\n\t\tsourceOrTargetOrOptions?:\n\t\t\t| string\n\t\t\t| MediaNode\n\t\t\t| ObjectTrackSignals\n\t\t\t| SectionOptions,\n\t\ttargetOrOptions?: ObjectTrackSignals | SectionOptions,\n\t\toptions?: SectionOptions,\n\t): SectionNode {\n\t\tlet source: string | MediaNode | undefined;\n\t\tlet target: ObjectTrackSignals | undefined;\n\t\tlet opts: SectionOptions = {};\n\n\t\tconst isFirstTrack =\n\t\t\tsourceOrTargetOrOptions !== null &&\n\t\t\ttypeof sourceOrTargetOrOptions === \"object\" &&\n\t\t\t\"bounds\" in sourceOrTargetOrOptions;\n\n\t\tconst isFirstMedia =\n\t\t\ttypeof sourceOrTargetOrOptions === \"string\" ||\n\t\t\t(sourceOrTargetOrOptions !== null &&\n\t\t\t\ttypeof sourceOrTargetOrOptions === \"object\" &&\n\t\t\t\t(\"kind\" in sourceOrTargetOrOptions ||\n\t\t\t\t\t\"src\" in sourceOrTargetOrOptions ||\n\t\t\t\t\t\"inputHandleId\" in sourceOrTargetOrOptions));\n\n\t\tif (\n\t\t\tisFirstMedia &&\n\t\t\ttargetOrOptions &&\n\t\t\ttypeof targetOrOptions === \"object\" &&\n\t\t\t\"bounds\" in targetOrOptions\n\t\t) {\n\t\t\tsource = sourceOrTargetOrOptions as string | MediaNode;\n\t\t\ttarget = targetOrOptions as ObjectTrackSignals;\n\t\t\topts = options ?? {};\n\t\t} else if (isFirstMedia && targetOrOptions) {\n\t\t\tsource = sourceOrTargetOrOptions as string | MediaNode;\n\t\t\topts = targetOrOptions as SectionOptions;\n\t\t} else if (isFirstTrack) {\n\t\t\ttarget = sourceOrTargetOrOptions as ObjectTrackSignals;\n\t\t\topts = (targetOrOptions as SectionOptions) ?? {};\n\t\t\tsource = opts.source ?? (target.source as string | MediaNode | undefined);\n\t\t} else if (\n\t\t\tsourceOrTargetOrOptions &&\n\t\t\ttypeof sourceOrTargetOrOptions === \"object\"\n\t\t) {\n\t\t\topts = sourceOrTargetOrOptions as SectionOptions;\n\t\t\tsource = opts.source;\n\t\t}\n\n\t\tif (!source) {\n\t\t\tconst mediaChild = this.children.find(\n\t\t\t\t(c) =>\n\t\t\t\t\tc.kind === \"media\" &&\n\t\t\t\t\t(c.dataType === \"Video\" || c.dataType === \"Image\"),\n\t\t\t) as MediaNode | undefined;\n\t\t\tif (mediaChild) {\n\t\t\t\tsource = mediaChild;\n\t\t\t}\n\t\t}\n\n\t\treturn Layer.section(source ?? \"\", target ?? opts, {\n\t\t\tcompositionWidth: this.width,\n\t\t\tcompositionHeight: this.height,\n\t\t\t...opts,\n\t\t});\n\t}\n\n\t/**\n\t * Creates a section and immediately adds it to the composition layout tree.\n\t */\n\tpublic addSection(\n\t\tsourceOrTargetOrOptions?:\n\t\t\t| string\n\t\t\t| MediaNode\n\t\t\t| ObjectTrackSignals\n\t\t\t| SectionOptions,\n\t\ttargetOrOptions?: ObjectTrackSignals | SectionOptions,\n\t\toptions?: SectionOptions,\n\t): SectionNode {\n\t\tconst node = this.section(\n\t\t\tsourceOrTargetOrOptions,\n\t\t\ttargetOrOptions,\n\t\t\toptions,\n\t\t);\n\t\tthis.add(node);\n\t\treturn node;\n\t}\n\n\t/**\n\t * Dynamically calculates composition duration from the longest media or animation layer.\n\t */\n\tpublic async computeDuration(): Promise<number> {\n\t\tif (this.durationMs !== undefined) return this.durationMs;\n\t\tlet maxDurationMs = 0;\n\t\tconst mediaSources: string[] = [];\n\n\t\tfor (const node of [...this.children, ...this.audioTracks]) {\n\t\t\tif (node.kind === \"media\") {\n\t\t\t\tconst src = node.inputHandleId;\n\t\t\t\tif (\n\t\t\t\t\ttypeof src === \"string\" &&\n\t\t\t\t\t(node.dataType === \"Video\" || node.dataType === \"Audio\")\n\t\t\t\t) {\n\t\t\t\t\tmediaSources.push(src);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (typeof node.durationFrames === \"number\") {\n\t\t\t\tconst start = typeof node.startFrame === \"number\" ? node.startFrame : 0;\n\t\t\t\tconst durMs = ((start + node.durationFrames) / this.fps) * 1000;\n\t\t\t\tif (durMs > maxDurationMs) maxDurationMs = durMs;\n\t\t\t}\n\t\t}\n\n\t\tfor (const src of mediaSources) {\n\t\t\ttry {\n\t\t\t\tconst input = await inputStore.acquire(src);\n\t\t\t\tconst sec = await input.computeDuration();\n\t\t\t\tif (Number.isFinite(sec) && sec > 0) {\n\t\t\t\t\tconst ms = Math.round(sec * 1000);\n\t\t\t\t\tif (ms > maxDurationMs) maxDurationMs = ms;\n\t\t\t\t}\n\t\t\t} catch (_) {}\n\t\t}\n\n\t\treturn maxDurationMs > 0 ? maxDurationMs : 5000;\n\t}\n\n\tpublic async registerFont(\n\t\toptionsOrFamilyOrSource: RegisterFontOptions | string,\n\t\tsource?: string | Uint8Array,\n\t): Promise<this> {\n\t\tconst reg = await FontManager.register(optionsOrFamilyOrSource, source);\n\t\tif (reg.filePath && !this.fonts.includes(reg.filePath)) {\n\t\t\tthis.fonts.push(reg.filePath);\n\t\t}\n\t\treturn this;\n\t}\n\n\tpublic toSpec(): CompositorProgramConfig {\n\t\tconst layoutItems: LayoutNode[] = [...this.children, ...this.audioTracks];\n\t\tconst registeredPaths = FontManager.getRegisteredFontPaths();\n\t\tconst mergedFonts = Array.from(\n\t\t\tnew Set([...this.fonts, ...registeredPaths]),\n\t\t);\n\t\treturn {\n\t\t\twidth: this.width,\n\t\t\theight: this.height,\n\t\t\tfps: this.fps,\n\t\t\tmode: \"Video\",\n\t\t\tbackgroundColor: this.backgroundColor,\n\t\t\tlayout: layoutItems,\n\t\t\tfonts: mergedFonts,\n\t\t\tsignals: this.signals,\n\t\t\t...(this._effects.length > 0 && { effects: this._effects }),\n\t\t\t...(this._visionConfig && { vision: this._visionConfig }),\n\t\t\t...(this._frameHooks.length > 0 && {\n\t\t\t\tonRequestFrame: (ctx: FrameContext) => this.notifyFrame(ctx),\n\t\t\t}),\n\t\t} as unknown as CompositorProgramConfig;\n\t}\n\n\t/**\n\t * Compiles the composition into a VirtualMediaData AST ready for WebGPU rendering.\n\t */\n\tpublic toVirtualMedia(\n\t\toptions: Partial<CompositorToProgramOptions> = {},\n\t): VirtualMediaData {\n\t\treturn compositorToProgram(this.toSpec(), {\n\t\t\tisVideoMode: true,\n\t\t\tfps: this.fps,\n\t\t\tdurationMs: options.durationMs ?? this.durationMs,\n\t\t\tsignals: options.signals ?? this.signals,\n\t\t\t...(this._effects.length > 0 && { effects: this._effects }),\n\t\t\t...(this._visionConfig && { vision: this._visionConfig }),\n\t\t\t...options,\n\t\t});\n\t}\n\n\t/**\n\t * Compiles the composition into a VirtualMediaData AST with dynamically resolved duration.\n\t */\n\tpublic async toVirtualMediaAsync(\n\t\toptions: Partial<CompositorToProgramOptions> = {},\n\t): Promise<VirtualMediaData> {\n\t\tconst durationMs =\n\t\t\toptions.durationMs ?? this.durationMs ?? (await this.computeDuration());\n\t\tthis.durationMs = durationMs;\n\t\treturn compositorToProgram(this.toSpec(), {\n\t\t\tisVideoMode: true,\n\t\t\tfps: this.fps,\n\t\t\tdurationMs,\n\t\t\tsignals: options.signals ?? this.signals,\n\t\t\t...(this._effects.length > 0 && { effects: this._effects }),\n\t\t\t...(this._visionConfig && { vision: this._visionConfig }),\n\t\t\t...options,\n\t\t});\n\t}\n\n\t/**\n\t * Renders a single frame from the composition to a PNG Buffer.\n\t * Can render either by timestamp in milliseconds (`atMs`) or by frame index (`frame`).\n\t */\n\tpublic async renderFrame(\n\t\toptions: {\n\t\t\tatMs?: number;\n\t\t\tframe?: number;\n\t\t\trenderer?: HeadlessMediaRenderer;\n\t\t} = {},\n\t): Promise<Buffer> {\n\t\tif (this._frameHooks.length > 0) {\n\t\t\tconst targetFrame =\n\t\t\t\toptions.frame ??\n\t\t\t\t(options.atMs !== undefined\n\t\t\t\t\t? Math.round((options.atMs / 1000) * this.fps)\n\t\t\t\t\t: 0);\n\t\t\tthis.notifyFrame({\n\t\t\t\tframe: targetFrame,\n\t\t\t\tfps: this.fps,\n\t\t\t\ttime: this.fps > 0 ? targetFrame / this.fps : 0,\n\t\t\t\tduration: (this.durationMs ?? 0) / 1000,\n\t\t\t\tdurationMs: this.durationMs ?? 0,\n\t\t\t\tprogress:\n\t\t\t\t\tthis.durationMs && this.durationMs > 0\n\t\t\t\t\t\t? Math.max(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tMath.min(\n\t\t\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t\t\t((targetFrame / this.fps) * 1000) / this.durationMs,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: 0,\n\t\t\t\tdeltaTime: this.fps > 0 ? 1 / this.fps : 0,\n\t\t\t});\n\t\t}\n\t\tconst renderer = options.renderer ?? new HeadlessMediaRenderer();\n\t\treturn renderer.renderFrame(this.toVirtualMedia(), {\n\t\t\tfps: this.fps,\n\t\t\t...options,\n\t\t});\n\t}\n\n\t/**\n\t * Renders an image grid of sequential frames across a given frame or millisecond range.\n\t * Ideal for automated visual inspection of animation motion, easing curves, and layout stability.\n\t */\n\tpublic async renderFrameGrid(\n\t\toptions: FrameGridOptions = {},\n\t): Promise<Buffer> {\n\t\treturn renderFrameGrid(this, options);\n\t}\n\n\t/**\n\t * Renders this composition into an MP4/WebM video file with audio.\n\t */\n\tpublic async renderVideo(\n\t\toutputPathOrOptions:\n\t\t\t| string\n\t\t\t| {\n\t\t\t\t\tcodec?: string;\n\t\t\t\t\taudioCodec?: string;\n\t\t\t\t\tquality?: string;\n\t\t\t\t\tconcurrency?: number;\n\t\t\t\t\toutputPath?: string;\n\t\t\t\t\trenderer?: HeadlessMediaRenderer;\n\t\t\t } = {},\n\t\toptions: {\n\t\t\tcodec?: string;\n\t\t\taudioCodec?: string;\n\t\t\tquality?: string;\n\t\t\tconcurrency?: number;\n\t\t\toutputPath?: string;\n\t\t\trenderer?: HeadlessMediaRenderer;\n\t\t} = {},\n\t): Promise<{ filePath: string; cleanup: () => Promise<void> }> {\n\t\tconst opts =\n\t\t\ttypeof outputPathOrOptions === \"string\"\n\t\t\t\t? { ...options, outputPath: outputPathOrOptions }\n\t\t\t\t: outputPathOrOptions;\n\t\tconst renderer = opts.renderer ?? new HeadlessMediaRenderer();\n\t\tconst result = await renderer.renderVideo(this.toVirtualMedia(), opts);\n\t\tif (opts.outputPath) {\n\t\t\tawait fs.mkdir(path.dirname(opts.outputPath), { recursive: true });\n\t\t\tawait fs.copyFile(result.filePath, opts.outputPath);\n\t\t}\n\t\treturn result;\n\t}\n}\n\n/**\n * Layer helpers for constructing composition nodes with clean URL/path strings.\n */\n\nexport type AnimatableNode<T extends LayoutNode> = T & {\n\tmask?: unknown;\n\tglass?: Record<string, unknown>;\n\taudioDeform?: MeshAudioDeformConfig | Record<string, unknown>;\n\tcrop?: CropProps | Crop;\n\tvision?: Vision;\n\trelighting?: NormalRelightingOptions;\n\tdeflicker?: DeflickerOptions;\n\teffects?: unknown[];\n\tblurRegions?: unknown[];\n\t[key: string]: unknown;\n\tanimate(\n\t\t...anim: (\n\t\t\t| LayerAnimation\n\t\t\t| { tracks: AnimationTrack[] }\n\t\t\t| LayerAnimation[]\n\t\t)[]\n\t): AnimatableNode<T>;\n\tpinToLandmark(\n\t\ttarget:\n\t\t\t| LandmarkCoordinateSignals\n\t\t\t| {\n\t\t\t\t\tx: number;\n\t\t\t\t\ty: number;\n\t\t\t\t\tz?: number;\n\t\t\t\t\tscreenX?: number;\n\t\t\t\t\tscreenY?: number;\n\t\t\t },\n\t\toptions?: PinToLandmarkOptions,\n\t): AnimatableNode<T>;\n\tpinToObject(\n\t\ttarget:\n\t\t\t| ObjectTrackSignals\n\t\t\t| LandmarkCoordinateSignals\n\t\t\t| {\n\t\t\t\t\tx: number;\n\t\t\t\t\ty: number;\n\t\t\t\t\tz?: number;\n\t\t\t\t\tscreenX?: number;\n\t\t\t\t\tscreenY?: number;\n\t\t\t },\n\t\toptions?: PinToObjectOptions,\n\t): AnimatableNode<T>;\n\twithMask(mask: unknown): AnimatableNode<T>;\n\twithPbrGlass(options?: Record<string, unknown>): AnimatableNode<T>;\n\tdeformWithAudio(\n\t\tconfig?: MeshAudioDeformConfig | Record<string, unknown>,\n\t): AnimatableNode<T>;\n\twithCrop(cropConfig: CropProps | Crop): AnimatableNode<T>;\n\t/** Runs vision on this node's rendered output (see `Vision` for options and modes). */\n\twithVision(config?: VisionProps | Vision): AnimatableNode<T>;\n\twithRelighting(options?: NormalRelightingOptions): AnimatableNode<T>;\n\trelight(options?: NormalRelightingOptions): AnimatableNode<T>;\n\twithDeflicker(options?: DeflickerOptions): AnimatableNode<T>;\n\tapply(effect: unknown): AnimatableNode<T>;\n\twithEffect(effect: unknown): AnimatableNode<T>;\n\twithEffects(effects: unknown[]): AnimatableNode<T>;\n\tblurRegion(\n\t\ttrackTarget: ObjectTrackSignals,\n\t\toptions?: Partial<BlurProps>,\n\t): AnimatableNode<T>;\n\twithBlurRegion(\n\t\ttrackTarget: ObjectTrackSignals,\n\t\toptions?: Partial<BlurProps>,\n\t): AnimatableNode<T>;\n};\n\nfunction withAnimation<T extends LayoutNode>(node: T): AnimatableNode<T> {\n\tconst target = node as AnimatableNode<T>;\n\tObject.defineProperty(target, \"animate\", {\n\t\tvalue: (\n\t\t\t...anims: (\n\t\t\t\t| LayerAnimation\n\t\t\t\t| { tracks: AnimationTrack[] }\n\t\t\t\t| LayerAnimation[]\n\t\t\t)[]\n\t\t) => {\n\t\t\tconst flatAnims = anims.flat();\n\t\t\tif (\n\t\t\t\tflatAnims.length > 1 ||\n\t\t\t\t(flatAnims.length === 1 && Array.isArray(anims[0]))\n\t\t\t) {\n\t\t\t\tconst allTracks = flatAnims.flatMap((a) =>\n\t\t\t\t\ta instanceof LayerAnimation\n\t\t\t\t\t\t? a.tracks\n\t\t\t\t\t\t: ((a as { tracks?: AnimationTrack[] }).tracks ?? []),\n\t\t\t\t);\n\t\t\t\ttarget.animation = { tracks: allTracks };\n\t\t\t} else if (flatAnims.length === 1) {\n\t\t\t\tconst anim = flatAnims[0];\n\t\t\t\ttarget.animation =\n\t\t\t\t\tanim instanceof LayerAnimation\n\t\t\t\t\t\t? anim.toSpec()\n\t\t\t\t\t\t: (anim as { tracks: AnimationTrack[] });\n\t\t\t}\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"pinToLandmark\", {\n\t\tvalue: (\n\t\t\tlandmarkTarget:\n\t\t\t\t| LandmarkCoordinateSignals\n\t\t\t\t| {\n\t\t\t\t\t\tx: number;\n\t\t\t\t\t\ty: number;\n\t\t\t\t\t\tz?: number;\n\t\t\t\t\t\tscreenX?: number;\n\t\t\t\t\t\tscreenY?: number;\n\t\t\t\t },\n\t\t\toptions?: PinToLandmarkOptions,\n\t\t) => {\n\t\t\tpinNodeToLandmark(\n\t\t\t\ttarget as unknown as { x?: unknown; y?: unknown; z?: unknown },\n\t\t\t\tlandmarkTarget,\n\t\t\t\toptions,\n\t\t\t);\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"pinToObject\", {\n\t\tvalue: (\n\t\t\tobjectTarget:\n\t\t\t\t| ObjectTrackSignals\n\t\t\t\t| LandmarkCoordinateSignals\n\t\t\t\t| {\n\t\t\t\t\t\tx: number;\n\t\t\t\t\t\ty: number;\n\t\t\t\t\t\tz?: number;\n\t\t\t\t\t\tscreenX?: number;\n\t\t\t\t\t\tscreenY?: number;\n\t\t\t\t },\n\t\t\toptions?: PinToObjectOptions,\n\t\t) => {\n\t\t\tpinNodeToObject(\n\t\t\t\ttarget as unknown as {\n\t\t\t\t\tx?: unknown;\n\t\t\t\t\ty?: unknown;\n\t\t\t\t\tz?: unknown;\n\t\t\t\t\twidth?: unknown;\n\t\t\t\t\theight?: unknown;\n\t\t\t\t\topacity?: unknown;\n\t\t\t\t},\n\t\t\t\tobjectTarget,\n\t\t\t\toptions,\n\t\t\t);\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"withMask\", {\n\t\tvalue: (mask: unknown) => {\n\t\t\ttarget.mask = mask;\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"withPbrGlass\", {\n\t\tvalue: (options?: Record<string, unknown>) => {\n\t\t\ttarget.glass = options ?? {};\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"deformWithAudio\", {\n\t\tvalue: (config?: MeshAudioDeformConfig | Record<string, unknown>) => {\n\t\t\ttarget.audioDeform = config ?? {};\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"withCrop\", {\n\t\tvalue: (cropConfig: CropProps | Crop) => {\n\t\t\ttarget.crop =\n\t\t\t\tcropConfig instanceof Crop ? cropConfig : new Crop(cropConfig);\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"withVision\", {\n\t\tvalue: (config?: VisionProps | Vision) => {\n\t\t\ttarget.vision = config instanceof Vision ? config : new Vision(config);\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"withRelighting\", {\n\t\tvalue: (options?: NormalRelightingOptions) => {\n\t\t\ttarget.relighting = options ?? {};\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"relight\", {\n\t\tvalue: (options?: NormalRelightingOptions) => {\n\t\t\ttarget.relighting = options ?? {};\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"withDeflicker\", {\n\t\tvalue: (options?: DeflickerOptions) => {\n\t\t\ttarget.deflicker = options ?? {};\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"apply\", {\n\t\tvalue: (effect: unknown) => {\n\t\t\tif (!target.effects) {\n\t\t\t\ttarget.effects = [];\n\t\t\t}\n\t\t\ttarget.effects.push(effect);\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"withEffect\", {\n\t\tvalue: (effect: unknown) => {\n\t\t\tif (!target.effects) {\n\t\t\t\ttarget.effects = [];\n\t\t\t}\n\t\t\ttarget.effects.push(effect);\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"withEffects\", {\n\t\tvalue: (effects: unknown[]) => {\n\t\t\tif (!target.effects) {\n\t\t\t\ttarget.effects = [];\n\t\t\t}\n\t\t\ttarget.effects.push(...effects);\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"section\", {\n\t\tvalue: (\n\t\t\ttargetOrOptions: ObjectTrackSignals | SectionOptions = {},\n\t\t\toptions?: SectionOptions,\n\t\t) => {\n\t\t\tif (\n\t\t\t\ttargetOrOptions !== null &&\n\t\t\t\ttypeof targetOrOptions === \"object\" &&\n\t\t\t\t\"bounds\" in targetOrOptions\n\t\t\t) {\n\t\t\t\treturn Layer.section(\n\t\t\t\t\ttarget as MediaNode,\n\t\t\t\t\ttargetOrOptions as ObjectTrackSignals,\n\t\t\t\t\toptions,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn Layer.section(\n\t\t\t\ttarget as MediaNode,\n\t\t\t\ttargetOrOptions as SectionOptions,\n\t\t\t);\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"blurRegion\", {\n\t\tvalue: (trackTarget: ObjectTrackSignals, options?: Partial<BlurProps>) => {\n\t\t\tconst blur = new Blur({\n\t\t\t\ttrack: trackTarget,\n\t\t\t\tstrength: options?.strength ?? 25,\n\t\t\t\tshape: options?.shape ?? \"ellipse\",\n\t\t\t\t...options,\n\t\t\t});\n\t\t\tif (!target.effects) {\n\t\t\t\ttarget.effects = [];\n\t\t\t}\n\t\t\ttarget.effects.push(blur);\n\t\t\treturn target;\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperty(target, \"withBlurRegion\", {\n\t\tvalue: (trackTarget: ObjectTrackSignals, options?: Partial<BlurProps>) => {\n\t\t\treturn (\n\t\t\t\ttarget as {\n\t\t\t\t\tblurRegion: (\n\t\t\t\t\t\tt: ObjectTrackSignals,\n\t\t\t\t\t\to?: Partial<BlurProps>,\n\t\t\t\t\t) => unknown;\n\t\t\t\t}\n\t\t\t).blurRegion(trackTarget, options);\n\t\t},\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\treturn target;\n}\n\nexport const Layer = {\n\tvideo: (\n\t\tsrc: string,\n\t\toptions: Partial<MediaNode> = {},\n\t): AnimatableNode<MediaNode> =>\n\t\twithAnimation({\n\t\t\tid: options.id ?? \"video-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"media\",\n\t\t\tinputHandleId: src,\n\t\t\tdataType: \"Video\",\n\t\t\tfit: options.fit ?? \"cover\",\n\t\t\t...options,\n\t\t}),\n\timage: (\n\t\tsrc: string,\n\t\toptions: Partial<MediaNode> = {},\n\t): AnimatableNode<MediaNode> =>\n\t\twithAnimation({\n\t\t\tid: options.id ?? \"img-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"media\",\n\t\t\tinputHandleId: src,\n\t\t\tdataType: \"Image\",\n\t\t\tfit: options.fit ?? \"cover\",\n\t\t\t...options,\n\t\t}),\n\tsvg: (\n\t\tsrc: string,\n\t\toptions: Partial<MediaNode> = {},\n\t): AnimatableNode<MediaNode> =>\n\t\twithAnimation({\n\t\t\tid: options.id ?? \"svg-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"media\",\n\t\t\tinputHandleId: src,\n\t\t\tdataType: \"SVG\",\n\t\t\tfit: options.fit ?? \"contain\",\n\t\t\t...options,\n\t\t}),\n\tlottie: (\n\t\tsrc: string,\n\t\toptions: Partial<MediaNode> = {},\n\t): AnimatableNode<MediaNode> =>\n\t\twithAnimation({\n\t\t\tid: options.id ?? \"lottie-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"media\",\n\t\t\tinputHandleId: src,\n\t\t\tdataType: \"Lottie\",\n\t\t\tfit: options.fit ?? \"contain\",\n\t\t\t...options,\n\t\t}),\n\taudio: (\n\t\tsrc: string,\n\t\toptions: Partial<MediaNode> = {},\n\t): AnimatableNode<MediaNode> =>\n\t\twithAnimation({\n\t\t\tid: options.id ?? \"audio-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"media\",\n\t\t\tinputHandleId: src,\n\t\t\tdataType: \"Audio\",\n\t\t\tvolume: options.volume ?? 1,\n\t\t\t...options,\n\t\t}),\n\ttext: (\n\t\tcontentOrOptions:\n\t\t\t| string\n\t\t\t| TextSpan[]\n\t\t\t| (string | TextSpan)[]\n\t\t\t| Partial<TextNode>,\n\t\tmaybeOptions: Partial<TextNode> = {},\n\t): AnimatableNode<TextNode> => {\n\t\tconst isArray = Array.isArray(contentOrOptions);\n\t\tconst isObj =\n\t\t\t!isArray &&\n\t\t\ttypeof contentOrOptions === \"object\" &&\n\t\t\tcontentOrOptions !== null;\n\t\tconst options = isObj\n\t\t\t? (contentOrOptions as Partial<TextNode>)\n\t\t\t: maybeOptions;\n\n\t\tlet textContent = \"\";\n\t\tlet spans: TextSpan[] | undefined = options.spans;\n\n\t\tif (isArray) {\n\t\t\tconst normalized = normalizeTextSpans(\n\t\t\t\tcontentOrOptions as (string | TextSpan)[],\n\t\t\t);\n\t\t\ttextContent = normalized.text;\n\t\t\tspans = normalized.spans;\n\t\t} else if (isObj) {\n\t\t\tif (options.spans && !options.text) {\n\t\t\t\tconst normalized = normalizeTextSpans(options.spans);\n\t\t\t\ttextContent = normalized.text;\n\t\t\t} else {\n\t\t\t\ttextContent = (options.text as string) ?? \"\";\n\t\t\t}\n\t\t} else {\n\t\t\ttextContent =\n\t\t\t\ttypeof contentOrOptions === \"string\"\n\t\t\t\t\t? contentOrOptions\n\t\t\t\t\t: String(contentOrOptions ?? \"\");\n\t\t}\n\n\t\treturn withAnimation({\n\t\t\tid: options.id ?? \"text-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"text\",\n\t\t\tfontFamily:\n\t\t\t\toptions.fontFamily ?? FontManager.getAll()[0]?.family ?? \"Inter\",\n\t\t\tfontSize: options.fontSize ?? 48,\n\t\t\tfill: options.fill ?? \"#ffffff\",\n\t\t\t...options,\n\t\t\ttext: options.text ?? textContent,\n\t\t\tspans: options.spans ?? spans,\n\t\t});\n\t},\n\tcaption: (\n\t\tsrc: string,\n\t\toptions: Partial<MediaNode> = {},\n\t): AnimatableNode<MediaNode> =>\n\t\twithAnimation({\n\t\t\tid: options.id ?? \"caption-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"media\",\n\t\t\tinputHandleId: src,\n\t\t\tdataType: options.dataType ?? \"Caption\",\n\t\t\tfontFamily:\n\t\t\t\toptions.fontFamily ?? FontManager.getAll()[0]?.family ?? \"Inter\",\n\t\t\tfontSize: options.fontSize ?? 48,\n\t\t\tfill: options.fill ?? \"#ffffff\",\n\t\t\t...options,\n\t\t}),\n\tshape: (\n\t\tshapeType:\n\t\t\t| \"rect\"\n\t\t\t| \"circle\"\n\t\t\t| \"ellipse\"\n\t\t\t| \"polygon\"\n\t\t\t| \"star\"\n\t\t\t| \"arrow\"\n\t\t\t| \"path\" = \"rect\",\n\t\toptions: Partial<ShapeNode> = {},\n\t): AnimatableNode<ShapeNode> =>\n\t\twithAnimation({\n\t\t\tid: options.id ?? \"shape-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"shape\",\n\t\t\tshapeType: options.shapeType ?? shapeType,\n\t\t\tfillColor: options.fillColor ?? \"#3b82f6\",\n\t\t\t...options,\n\t\t}),\n\tflex: (options: Partial<FlexNode> = {}): AnimatableNode<FlexNode> =>\n\t\twithAnimation({\n\t\t\tid: options.id ?? \"flex-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"flex\",\n\t\t\tdir: options.dir ?? \"column\",\n\t\t\tchildren: options.children ?? [],\n\t\t\t...options,\n\t\t}),\n\tbox: (options: Partial<BoxNode> = {}): AnimatableNode<BoxNode> =>\n\t\twithAnimation({\n\t\t\tid: options.id ?? \"box-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"box\",\n\t\t\tbackground: options.background ?? \"transparent\",\n\t\t\tchildren: options.children ?? [],\n\t\t\t...options,\n\t\t}),\n\tsection: (\n\t\tsource: string | MediaNode | Composition,\n\t\ttargetOrOptions: ObjectTrackSignals | SectionOptions = {},\n\t\toptions: SectionOptions = {},\n\t): SectionNode => {\n\t\tlet realSource: string | MediaNode = source as string | MediaNode;\n\t\tif (\n\t\t\tsource &&\n\t\t\ttypeof source === \"object\" &&\n\t\t\t\"toSpec\" in source &&\n\t\t\t\"children\" in source\n\t\t) {\n\t\t\tconst compMedia = (\n\t\t\t\t((source as Composition).children || []) as LayoutNode[]\n\t\t\t).find(\n\t\t\t\t(c) =>\n\t\t\t\t\tc.kind === \"media\" &&\n\t\t\t\t\t(c.dataType === \"Video\" || c.dataType === \"Image\"),\n\t\t\t) as MediaNode | undefined;\n\t\t\tif (compMedia) {\n\t\t\t\trealSource = compMedia;\n\t\t\t}\n\t\t}\n\n\t\tconst isTracked =\n\t\t\ttargetOrOptions !== null &&\n\t\t\ttypeof targetOrOptions === \"object\" &&\n\t\t\t\"bounds\" in targetOrOptions;\n\t\tconst opts: SectionOptions = isTracked\n\t\t\t? options\n\t\t\t: (targetOrOptions as SectionOptions);\n\t\tconst target = isTracked\n\t\t\t? (targetOrOptions as ObjectTrackSignals)\n\t\t\t: undefined;\n\n\t\tconst padding = opts.padding ?? 0;\n\t\tconst src =\n\t\t\ttypeof realSource === \"string\"\n\t\t\t\t? realSource\n\t\t\t\t: (realSource?.inputHandleId ??\n\t\t\t\t\t(realSource as { src?: string })?.src ??\n\t\t\t\t\t\"\");\n\t\tconst dataType =\n\t\t\ttypeof realSource === \"object\" && realSource?.dataType\n\t\t\t\t? realSource.dataType\n\t\t\t\t: \"Video\";\n\t\tconst compW =\n\t\t\t(opts.compositionWidth as number) ??\n\t\t\t(opts.compWidth as number) ??\n\t\t\t(isTracked ? (opts.width as number) : undefined) ??\n\t\t\t1920;\n\t\tconst compH =\n\t\t\t(opts.compositionHeight as number) ??\n\t\t\t(opts.compHeight as number) ??\n\t\t\t(isTracked ? (opts.height as number) : undefined) ??\n\t\t\t1080;\n\n\t\tconst effList: Effect[] = Array.isArray(opts.effects)\n\t\t\t? ([...opts.effects] as Effect[])\n\t\t\t: opts.effects\n\t\t\t\t? [opts.effects as Effect]\n\t\t\t\t: [];\n\n\t\tconst innerX = target\n\t\t\t? target.bounds.screenX.multiply(-1).add(padding)\n\t\t\t: typeof opts.x === \"number\"\n\t\t\t\t? -opts.x\n\t\t\t\t: opts.x &&\n\t\t\t\t\t\ttypeof (opts.x as { multiply?: unknown }).multiply === \"function\"\n\t\t\t\t\t? (opts.x as { multiply: (n: number) => unknown }).multiply(-1)\n\t\t\t\t\t: 0;\n\n\t\tconst innerY = target\n\t\t\t? target.bounds.screenY.multiply(-1).add(padding)\n\t\t\t: typeof opts.y === \"number\"\n\t\t\t\t? -opts.y\n\t\t\t\t: opts.y &&\n\t\t\t\t\t\ttypeof (opts.y as { multiply?: unknown }).multiply === \"function\"\n\t\t\t\t\t? (opts.y as { multiply: (n: number) => unknown }).multiply(-1)\n\t\t\t\t\t: 0;\n\n\t\tconst innerMedia = (\n\t\t\tdataType === \"Image\"\n\t\t\t\t? Layer.image(src, {\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\twidth: compW,\n\t\t\t\t\t\theight: compH,\n\t\t\t\t\t\tfit: opts.fit ?? \"cover\",\n\t\t\t\t\t\tx: innerX as number,\n\t\t\t\t\t\ty: innerY as number,\n\t\t\t\t\t})\n\t\t\t\t: Layer.video(src, {\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\twidth: compW,\n\t\t\t\t\t\theight: compH,\n\t\t\t\t\t\tfit: opts.fit ?? \"cover\",\n\t\t\t\t\t\tx: innerX as number,\n\t\t\t\t\t\ty: innerY as number,\n\t\t\t\t\t})\n\t\t).withEffects(effList);\n\n\t\tconst boxWidth = target\n\t\t\t? target.bounds.screenWidth.add(padding * 2)\n\t\t\t: opts.width !== undefined\n\t\t\t\t? opts.width\n\t\t\t\t: compW;\n\n\t\tconst boxHeight = target\n\t\t\t? target.bounds.screenHeight.add(padding * 2)\n\t\t\t: opts.height !== undefined\n\t\t\t\t? opts.height\n\t\t\t\t: compH;\n\n\t\tconst boxChildren = [innerMedia, ...(opts.children ?? [])];\n\n\t\tconst boxId =\n\t\t\topts.id ??\n\t\t\t(target\n\t\t\t\t? `section-track-${target.trackId}-${Math.random().toString(36).slice(2, 8)}`\n\t\t\t\t: `section-${Math.random().toString(36).slice(2, 8)}`);\n\n\t\tlet box = Layer.box({\n\t\t\tid: boxId,\n\t\t\tposition: (opts.position as \"absolute\" | \"relative\") ?? \"absolute\",\n\t\t\twidth: boxWidth as number,\n\t\t\theight: boxHeight as number,\n\t\t\tx: target ? undefined : (opts.x as number),\n\t\t\ty: target ? undefined : (opts.y as number),\n\t\t\tborderRadius: opts.borderRadius ?? 0,\n\t\t\tborderColor: opts.borderColor,\n\t\t\tborderWidth: opts.borderWidth,\n\t\t\topacity: (opts.opacity as number) ?? 1,\n\t\t\toverflow: \"hidden\",\n\t\t\tchildren: boxChildren,\n\t\t});\n\n\t\tif (target) {\n\t\t\tbox = box.pinToObject(target, {\n\t\t\t\tanchor: \"topLeft\",\n\t\t\t\toffsetX: -padding,\n\t\t\t\toffsetY: -padding,\n\t\t\t\thideWhenLost: opts.hideWhenLost ?? true,\n\t\t\t\tsmoothFrames: opts.smoothFrames,\n\t\t\t});\n\t\t}\n\n\t\tconst sectionNode = box as SectionNode;\n\t\tObject.defineProperty(sectionNode, \"innerMedia\", {\n\t\t\tvalue: innerMedia,\n\t\t\tenumerable: true,\n\t\t\twritable: false,\n\t\t});\n\t\tObject.defineProperty(sectionNode, \"effects\", {\n\t\t\tget: () => effList,\n\t\t\tenumerable: true,\n\t\t});\n\t\tObject.defineProperty(sectionNode, \"addEffect\", {\n\t\t\tvalue: (effect: Effect) => {\n\t\t\t\teffList.push(effect);\n\t\t\t\tinnerMedia.effects = effList;\n\t\t\t\treturn sectionNode;\n\t\t\t},\n\t\t\tenumerable: true,\n\t\t\twritable: false,\n\t\t});\n\t\tObject.defineProperty(sectionNode, \"withEffect\", {\n\t\t\tvalue: (effect: Effect) => sectionNode.addEffect(effect),\n\t\t\tenumerable: true,\n\t\t\twritable: false,\n\t\t});\n\t\tObject.defineProperty(sectionNode, \"withEffects\", {\n\t\t\tvalue: (effects: Effect[]) => {\n\t\t\t\tfor (const eff of effects) {\n\t\t\t\t\tsectionNode.addEffect(eff);\n\t\t\t\t}\n\t\t\t\treturn sectionNode;\n\t\t\t},\n\t\t\tenumerable: true,\n\t\t\twritable: false,\n\t\t});\n\n\t\treturn sectionNode;\n\t},\n\ttrackedRegion: (\n\t\tsource: string | MediaNode,\n\t\ttarget: ObjectTrackSignals,\n\t\toptions: TrackedRegionOptions = {},\n\t): SectionNode => {\n\t\treturn Layer.section(source, target, options);\n\t},\n\tblurTrackedRegion: (\n\t\tsource: string | MediaNode,\n\t\ttarget: ObjectTrackSignals,\n\t\toptions: Partial<BlurProps> & {\n\t\t\tborderRadius?: number;\n\t\t\tpadding?: number;\n\t\t\tborderColor?: string;\n\t\t\tborderWidth?: number;\n\t\t} = {},\n\t): SectionNode => {\n\t\t// Section styling is not a Blur prop; keep it out of the effect config.\n\t\tconst { padding, borderRadius, borderColor, borderWidth, ...blurOptions } =\n\t\t\toptions;\n\t\treturn Layer.section(source, target, {\n\t\t\tpadding: padding ?? 8,\n\t\t\tborderRadius: borderRadius ?? 12,\n\t\t\tborderColor,\n\t\t\tborderWidth,\n\t\t\teffects: [\n\t\t\t\tnew Blur({\n\t\t\t\t\tstrength: blurOptions.strength ?? 25,\n\t\t\t\t\tblurType: blurOptions.blurType ?? \"Gaussian\",\n\t\t\t\t\t...blurOptions,\n\t\t\t\t}),\n\t\t\t],\n\t\t});\n\t},\n\tchart: (\n\t\toptions: ChartGPUOptions,\n\t\tprops: Partial<ChartNode> = {},\n\t): AnimatableNode<ChartNode> =>\n\t\twithAnimation({\n\t\t\tid: props.id ?? \"chart-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"chart\",\n\t\t\tchartOptions: options,\n\t\t\t...props,\n\t\t}),\n\tcamera: (options: Partial<CameraNode> = {}): AnimatableNode<CameraNode> =>\n\t\twithAnimation<CameraNode>({\n\t\t\tid: options.id ?? \"camera-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"camera\",\n\t\t\tmode: options.mode ?? \"lookAt\",\n\t\t\tpitch: options.pitch ?? 0,\n\t\t\tyaw: options.yaw ?? 0,\n\t\t\troll: options.roll ?? 0,\n\t\t\t...options,\n\t\t}),\n\tlight: (options: Partial<LightNode> = {}): AnimatableNode<LightNode> =>\n\t\twithAnimation<LightNode>({\n\t\t\tid: options.id ?? \"light-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"light\",\n\t\t\tlightType: options.lightType ?? \"point\",\n\t\t\tcolor: options.color ?? \"#ffffff\",\n\t\t\tintensity: options.intensity ?? 1.0,\n\t\t\t...options,\n\t\t}),\n\tambientLight: (\n\t\tcolor: string = \"#ffffff\",\n\t\tintensity: number = 0.5,\n\t\toptions: Partial<LightNode> = {},\n\t): AnimatableNode<LightNode> => Light.ambient(color, intensity, options),\n\tdirectionalLight: (\n\t\toptions: Partial<LightNode> = {},\n\t): AnimatableNode<LightNode> => Light.directional(options),\n\tpointLight: (options: Partial<LightNode> = {}): AnimatableNode<LightNode> =>\n\t\tLight.point(options),\n\tspotLight: (options: Partial<LightNode> = {}): AnimatableNode<LightNode> =>\n\t\tLight.spot(options),\n\tcube: (options: Cube3DOptions): AnimatableNode<BoxNode> =>\n\t\tLayer3D.cube(options),\n\tcarousel3d: (options: Carousel3DOptions): AnimatableNode<BoxNode> =>\n\t\tLayer3D.carousel(options),\n\tplane3d: (options: Plane3DOptions): AnimatableNode<BoxNode> =>\n\t\tLayer3D.plane(options),\n\tprism3d: (options: Prism3DOptions): AnimatableNode<BoxNode> =>\n\t\tLayer3D.prism(options),\n\tmodel: (options: Partial<Model3DNode> = {}): AnimatableNode<Model3DNode> =>\n\t\twithAnimation({\n\t\t\tid: options.id ?? \"model3d-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"model3d\",\n\t\t\tis3D: options.is3D ?? true,\n\t\t\tmodelFormat: options.modelFormat ?? \"auto\",\n\t\t\tloop: options.loop ?? true,\n\t\t\tscale: options.scale ?? 1.0,\n\t\t\tscaleX: options.scaleX ?? 1.0,\n\t\t\tscaleY: options.scaleY ?? 1.0,\n\t\t\tscaleZ: options.scaleZ ?? 1.0,\n\t\t\topacity: options.opacity ?? 1.0,\n\t\t\t// material and twoSided stay unset unless given: the model's own\n\t\t\t// materials (toon, single-sided, …) decide, falling back to lit.\n\t\t\t...options,\n\t\t}),\n\tobj: (\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> =>\n\t\tLayer.model({\n\t\t\tsrc,\n\t\t\tmodelFormat: \"obj\",\n\t\t\t...options,\n\t\t}),\n\tfbx: (\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> =>\n\t\tLayer.model({\n\t\t\tsrc,\n\t\t\tmodelFormat: \"fbx\",\n\t\t\t...options,\n\t\t}),\n\tgltf: (\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> =>\n\t\tLayer.model({\n\t\t\tsrc,\n\t\t\tmodelFormat: \"gltf\",\n\t\t\t...options,\n\t\t}),\n\tglb: (\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> =>\n\t\tLayer.model({\n\t\t\tsrc,\n\t\t\tmodelFormat: \"glb\",\n\t\t\t...options,\n\t\t}),\n\tstl: (\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> =>\n\t\tLayer.model({\n\t\t\tsrc,\n\t\t\tmodelFormat: \"stl\",\n\t\t\t...options,\n\t\t}),\n\tply: (\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> =>\n\t\tLayer.model({\n\t\t\tsrc,\n\t\t\tmodelFormat: \"ply\",\n\t\t\t...options,\n\t\t}),\n\tvox: (\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> =>\n\t\tLayer.model({\n\t\t\tsrc,\n\t\t\tmodelFormat: \"vox\",\n\t\t\t...options,\n\t\t}),\n\tthreeDS: (\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> =>\n\t\tLayer.model({\n\t\t\tsrc,\n\t\t\tmodelFormat: \"3ds\",\n\t\t\t...options,\n\t\t}),\n\toff: (\n\t\tsrc: string,\n\t\toptions: Partial<Model3DNode> = {},\n\t): AnimatableNode<Model3DNode> =>\n\t\tLayer.model({\n\t\t\tsrc,\n\t\t\tmodelFormat: \"off\",\n\t\t\t...options,\n\t\t}),\n};\n\nexport const Light = {\n\tambient: (\n\t\tcolor: string = \"#ffffff\",\n\t\tintensity: number = 0.5,\n\t\toptions: Partial<LightNode> = {},\n\t): AnimatableNode<LightNode> =>\n\t\twithAnimation({\n\t\t\tid:\n\t\t\t\toptions.id ?? \"light-ambient-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"light\",\n\t\t\tlightType: \"ambient\",\n\t\t\tcolor,\n\t\t\tintensity,\n\t\t\t...options,\n\t\t}),\n\tdirectional: (options: Partial<LightNode> = {}): AnimatableNode<LightNode> =>\n\t\twithAnimation({\n\t\t\tid:\n\t\t\t\toptions.id ??\n\t\t\t\t\"light-directional-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"light\",\n\t\t\tlightType: \"directional\",\n\t\t\tcolor: options.color ?? \"#ffffff\",\n\t\t\tintensity: options.intensity ?? 1.0,\n\t\t\tx: options.x ?? 0,\n\t\t\ty: options.y ?? -1000,\n\t\t\tz: options.z ?? -1000,\n\t\t\ttargetX: options.targetX ?? 0,\n\t\t\ttargetY: options.targetY ?? 0,\n\t\t\ttargetZ: options.targetZ ?? 0,\n\t\t\t...options,\n\t\t}),\n\tpoint: (options: Partial<LightNode> = {}): AnimatableNode<LightNode> =>\n\t\twithAnimation({\n\t\t\tid: options.id ?? \"light-point-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"light\",\n\t\t\tlightType: \"point\",\n\t\t\tcolor: options.color ?? \"#ffffff\",\n\t\t\tintensity: options.intensity ?? 1.0,\n\t\t\tx: options.x ?? 0,\n\t\t\ty: options.y ?? 0,\n\t\t\tz: options.z ?? -500,\n\t\t\tradius: options.radius ?? 1000,\n\t\t\tdecay: options.decay ?? 1.0,\n\t\t\t...options,\n\t\t}),\n\tspot: (options: Partial<LightNode> = {}): AnimatableNode<LightNode> =>\n\t\twithAnimation({\n\t\t\tid: options.id ?? \"light-spot-\" + Math.random().toString(36).slice(2, 9),\n\t\t\tkind: \"light\",\n\t\t\tlightType: \"spot\",\n\t\t\tcolor: options.color ?? \"#ffffff\",\n\t\t\tintensity: options.intensity ?? 1.0,\n\t\t\tx: options.x ?? 0,\n\t\t\ty: options.y ?? -500,\n\t\t\tz: options.z ?? -1000,\n\t\t\ttargetX: options.targetX ?? 0,\n\t\t\ttargetY: options.targetY ?? 0,\n\t\t\ttargetZ: options.targetZ ?? 0,\n\t\t\tangle: options.angle ?? 45,\n\t\t\tpenumbra: options.penumbra ?? 0.2,\n\t\t\tradius: options.radius ?? 2000,\n\t\t\tdecay: options.decay ?? 1.0,\n\t\t\t...options,\n\t\t}),\n};\n\nexport {\n\tcomputeGridLayout,\n\ttype FrameGridOptions,\n\ttype FrameGridRenderable,\n\ttype FrameSamplePoint,\n\tHeadlessMediaRenderer,\n\tHeadlessWebGPURenderer,\n\trenderFrameGrid,\n\trenderSemaphore,\n\tresolveSamplePoints,\n} from \"./renderer/index.js\";\n\nexport function section(\n\tsource: string | MediaNode | Composition,\n\ttargetOrOptions: ObjectTrackSignals | SectionOptions = {},\n\toptions: SectionOptions = {},\n): SectionNode {\n\treturn Layer.section(source, targetOrOptions, options);\n}\n\nexport function blurRegion(\n\tsourceOrLayer: string | AnimatableNode<MediaNode>,\n\ttarget: ObjectTrackSignals,\n\toptions: Partial<BlurProps> & {\n\t\tborderRadius?: number;\n\t\tpadding?: number;\n\t\tborderColor?: string;\n\t\tborderWidth?: number;\n\t} = {},\n): AnimatableNode<MediaNode> | AnimatableNode<BoxNode> {\n\tif (typeof sourceOrLayer === \"object\" && \"blurRegion\" in sourceOrLayer) {\n\t\treturn (sourceOrLayer as AnimatableNode<MediaNode>).blurRegion(\n\t\t\ttarget,\n\t\t\toptions,\n\t\t);\n\t}\n\treturn Layer.blurTrackedRegion(sourceOrLayer as string, target, options);\n}\n\nexport function editTrackedRegion(\n\tsource: string | MediaNode,\n\ttarget: ObjectTrackSignals,\n\toptions: TrackedRegionOptions = {},\n): SectionNode {\n\treturn Layer.section(source, target, options);\n}\n\nexport const Effect = Object.assign(CoreEffect, {\n\tblur: (config?: BlurProps) => new Blur(config),\n\tvignette: (config?: VignetteProps) => new Vignette(config),\n\tcolorBalance: (config?: ColorBalanceProps) => new ColorBalance(config),\n\tcolorKey: (config?: ColorKeyProps) => new ColorKey(config),\n\tlevels: (config?: LevelsProps) => new Levels(config),\n\tfilmGrain: (config?: FilmGrainProps) => new FilmGrain(config),\n\tcurves: (config?: CurvesProps) => new Curves(config),\n\tselectiveColor: (config?: SelectiveColorProps) => new SelectiveColor(config),\n\tgradientMap: (config?: GradientMapProps) => new GradientMap(config),\n\tshadowsHighlights: (config?: ShadowsHighlightsProps) =>\n\t\tnew ShadowsHighlights(config),\n\tapplyLut: (config?: ApplyLUTProps) => new ApplyLUT(config),\n\tunsharpMask: (config?: UnsharpMaskProps) => new UnsharpMask(config),\n\thighPass: (config?: HighPassProps) => new HighPass(config),\n\thalftoneScreen: (config?: HalftoneScreenProps) => new HalftoneScreen(config),\n\ttileOffset: (config?: TileOffsetProps) => new TileOffset(config),\n\tmotionBlur: (config?: MotionBlurProps) => new MotionBlur(config),\n\tssao: (config?: SSAOProps) => new SSAO(config),\n\tpbrGlass: (config?: PBRGlassProps) => new PBRGlass(config),\n\tdepthOfField: (config?: DepthOfFieldProps) => new DepthOfField(config),\n\tcrop: (config?: CropProps) => new Crop(config),\n\tvision: (config?: VisionProps) => new Vision(config),\n\trelight3d: (config?: Relight3DProps) => new Relight3D(config),\n\tmodulate: (config?: ModulateProps) => new Modulate(config),\n\tdeflicker: (config?: DeflickerProps) => new TemporalDeflicker(config),\n\tcustom: (op: string, config: Record<string, unknown> = {}) =>\n\t\tnew CustomEffect(op, config),\n});\n\nexport type Effect<TConfig extends object = Record<string, unknown>> =\n\tCoreEffect<TConfig>;\n"],"mappings":"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AAgB,CAAC;AAC3E,oBAAkB,KAAK,MAAM,UAAU,iBAAiB,GAAG,MAAM;;AAElE,QAAO;EACN,cAAc;EACd,sBAAsB;EACtB;EACA;;;AAMF,MAAM,iBAAiB,EAAE,MAAM;CAC9B,EAAE,QAAQ,CAAC,IAAI,EAAE;CACjB,EAAE,KAAK;EACN;EACA;EACA;EACA,CAAC;CACF,EAAE,QAAQ;CACV,CAAC;AACF,MAAM,kBAAkB,EAAE,KAAK;CAC9B;CACA;CACA;CACA;CACA;CACA;CACA;CACA,CAAC;AACF,MAAM,uBAAuB,EAAE,KAAK;CACnC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,CAAC;AACF,MAAM,qBAAqB,EAAE,KAAK;CACjC;CACA;CACA;CACA;CACA;CACA;CACA;CACA,CAAC;AA0CF,MAAM,wBAAwB,EAAE,KAAK;CACpC;CACA;CACA;CACA,CAAC;AACF,MAAM,gBAAgB,EAAE,OAAO;CAC9B,MAAM,EAAE,KAAK;EACZ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,CAAC;CACF,KAAK,EAAE,KAAK;EACX;EACA;EACA;EACA,CAAC;CACF,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,UAAU;CACtC,CAAC,CAAC,QAAQ,CAAC,aAAa,MAAM,QAAQ;AACtC,KAAI,KAAK,SAAS,Y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"}
|