pixi-effects 0.22.0 → 0.26.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/CHANGELOG.md +37 -0
- package/README.md +17 -15
- package/ai/CHAT.md +2 -2
- package/ai/chat-template.html +3 -3
- package/ai/tools/check.mjs +10 -3
- package/ai/tools/pixi-effects.mjs +48 -0
- package/ai/tools/render.mjs +3 -3
- package/ai/tools/view.mjs +3 -3
- package/dist/{Base-gu-5X0Cv.d.ts → Base-BgnRXbtJ.d.ts} +1 -1
- package/dist/{Base-BzlPgd-D.d.cts → Base-DHVKqA46.d.cts} +1 -1
- package/dist/Composition-2GJSCHPP.cjs +16 -0
- package/dist/{Composition-BK5SH6J7.cjs.map → Composition-2GJSCHPP.cjs.map} +1 -1
- package/dist/Composition-C4FSWJZF.js +7 -0
- package/dist/{Composition-Q5TVG3HM.js.map → Composition-C4FSWJZF.js.map} +1 -1
- package/dist/Controller.cjs +2 -2
- package/dist/Controller.d.cts +2 -2
- package/dist/Controller.d.ts +2 -2
- package/dist/Controller.js +1 -1
- package/dist/{Movie--_TJvdJa.d.ts → Movie-DP5p1r4E.d.ts} +5 -1
- package/dist/{Movie-DMxOoTdW.d.cts → Movie-DXReF4-W.d.cts} +5 -1
- package/dist/Presenter.cjs +2 -2
- package/dist/Presenter.d.cts +2 -2
- package/dist/Presenter.d.ts +2 -2
- package/dist/Presenter.js +1 -1
- package/dist/{blendModes-HCP5XTNP.js → blendModes-G3NOAU3T.js} +5 -5
- package/dist/{blendModes-HCP5XTNP.js.map → blendModes-G3NOAU3T.js.map} +1 -1
- package/dist/{blendModes-5E4G2ZZQ.cjs → blendModes-YV43K6E7.cjs} +6 -6
- package/dist/{blendModes-5E4G2ZZQ.cjs.map → blendModes-YV43K6E7.cjs.map} +1 -1
- package/dist/{chunk-K4JVI5HK.cjs → chunk-3DLYAPK7.cjs} +7 -9
- package/dist/{chunk-K4JVI5HK.cjs.map → chunk-3DLYAPK7.cjs.map} +1 -1
- package/dist/{chunk-YEPDQ7I3.js → chunk-AXZUKNXF.js} +6 -6
- package/dist/{chunk-YEPDQ7I3.js.map → chunk-AXZUKNXF.js.map} +1 -1
- package/dist/{chunk-NHICCDTC.js → chunk-BXOCEZ4U.js} +12 -3
- package/dist/chunk-BXOCEZ4U.js.map +1 -0
- package/dist/{chunk-IFZOI3JQ.cjs → chunk-DP37TTMO.cjs} +842 -40
- package/dist/chunk-DP37TTMO.cjs.map +1 -0
- package/dist/{chunk-BPTW7L25.cjs → chunk-ECA2WNRX.cjs} +23 -9
- package/dist/chunk-ECA2WNRX.cjs.map +1 -0
- package/dist/{chunk-DC4JPY6A.js → chunk-PRZ4U6JN.js} +814 -22
- package/dist/chunk-PRZ4U6JN.js.map +1 -0
- package/dist/chunk-SY27HZC5.cjs +1727 -0
- package/dist/chunk-SY27HZC5.cjs.map +1 -0
- package/dist/{chunk-E7RONUZ7.js → chunk-TLYTYBWX.js} +20 -6
- package/dist/chunk-TLYTYBWX.js.map +1 -0
- package/dist/{chunk-UZTKEYFP.cjs → chunk-TWZNOUM7.cjs} +12 -3
- package/dist/chunk-TWZNOUM7.cjs.map +1 -0
- package/dist/chunk-XS6GSJCN.js +1724 -0
- package/dist/chunk-XS6GSJCN.js.map +1 -0
- package/dist/index.cjs +234 -77
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +173 -16
- package/dist/index.js.map +1 -1
- package/dist/loader.css +1 -1
- package/dist/{music-FUN7N225.js → music-AF4VTFAF.js} +3 -3
- package/dist/{music-FUN7N225.js.map → music-AF4VTFAF.js.map} +1 -1
- package/dist/{music-GEAH2XCT.cjs → music-KB7YZLHP.cjs} +7 -7
- package/dist/{music-GEAH2XCT.cjs.map → music-KB7YZLHP.cjs.map} +1 -1
- package/dist/{sfx-2DYTYNYW.cjs → sfx-2O6UQEUP.cjs} +8 -8
- package/dist/{sfx-2DYTYNYW.cjs.map → sfx-2O6UQEUP.cjs.map} +1 -1
- package/dist/{sfx-3IDAJ3UZ.js → sfx-VUKARHDX.js} +3 -3
- package/dist/{sfx-3IDAJ3UZ.js.map → sfx-VUKARHDX.js.map} +1 -1
- package/dist/three.cjs +7 -7
- package/dist/three.d.cts +2 -2
- package/dist/three.d.ts +2 -2
- package/dist/three.js +3 -3
- package/dist/{types-DBbZVKGS.d.cts → types-CoT0ypcx.d.cts} +60 -4
- package/dist/{types-DBbZVKGS.d.ts → types-CoT0ypcx.d.ts} +60 -4
- package/docs/api.md +2 -2
- package/docs/dsl.md +140 -7
- package/llms-full.txt +328 -39
- package/llms.txt +6 -5
- package/package.json +3 -3
- package/{ai → skills/pixi-effects}/SKILL.md +16 -12
- package/{ai → skills/pixi-effects}/reference/cheatsheet.md +10 -7
- package/{ai → skills/pixi-effects}/reference/pitfalls.md +22 -4
- package/{ai → skills/pixi-effects}/reference/recipes.md +133 -2
- package/{ai/tools → skills/pixi-effects/scripts}/save-image.py +1 -1
- package/{ai → skills/pixi-effects}/template.html +6 -6
- package/dist/Composition-BK5SH6J7.cjs +0 -16
- package/dist/Composition-Q5TVG3HM.js +0 -7
- package/dist/chunk-BPTW7L25.cjs.map +0 -1
- package/dist/chunk-DC4JPY6A.js.map +0 -1
- package/dist/chunk-E7RONUZ7.js.map +0 -1
- package/dist/chunk-IFZOI3JQ.cjs.map +0 -1
- package/dist/chunk-MHOO2CVU.cjs +0 -840
- package/dist/chunk-MHOO2CVU.cjs.map +0 -1
- package/dist/chunk-NHICCDTC.js.map +0 -1
- package/dist/chunk-UQDEDYVM.js +0 -838
- package/dist/chunk-UQDEDYVM.js.map +0 -1
- package/dist/chunk-UZTKEYFP.cjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/space/camera.ts","../src/space/depth.ts","../src/filters/DiscBlur.ts","../src/space/Layer3D.ts","../src/space/lint.ts","../src/sequences/Composition.ts"],"names":["i","Filter","GlProgram","GpuProgram","UniformGroup","DEG","frameOf","PerspectiveMesh","Texture","projectLayer","NEAR","describeLayer","Matrix","MIN_BLUR","MAX_BLUR","isAdvancedBlend","blendFilterFor","RenderTexture","collectPropKeys","focusProblems","Sequence","Container","Rectangle","timeRemapOf","contentLength","remapOf","lintTiming","lintText","lintKeys","summarizeWarnings","maxConcurrentAdvanced","MANY_ADVANCED","buildSequenceTree","CameraSequence","layerInitialZ","applyBlendMode","blendProblem","AlphaFilter","blendUnavailableMessage","AlphaMask","gsap","bindClock","clockTable","NullSequence","suggestName","cam","homeCamera","cameraBasis","projectPoint","blurRadius","MANY_BLURRED"],"mappings":"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","file":"chunk-MHOO2CVU.cjs","sourcesContent":["/** A camera layer's lifespan on the global timeline, seconds. */\nexport interface CameraWindow { start: number; end: number }\n\n/**\n * The active camera at time `t`: the last-listed (top-most) camera whose\n * lifespan covers `t`. Windows are [start, end), except that a camera running\n * to the end of its composition also covers the final instant `t === compEnd`.\n */\nexport function pickActiveCamera<T extends CameraWindow>(\n cams: readonly T[],\n t: number,\n compEnd: number,\n): T | null {\n for (let i = cams.length - 1; i >= 0; i--) {\n const c = cams[i]!;\n const inside = t >= c.start && (t < c.end || (c.end >= compEnd && t <= compEnd));\n if (inside) return c;\n }\n return null;\n}\n\n/** First pair of camera indices whose lifespans strictly overlap, or null. */\nexport function findOverlap(cams: readonly CameraWindow[]): [number, number] | null {\n for (let i = 0; i < cams.length; i++) {\n for (let j = i + 1; j < cams.length; j++) {\n const a = cams[i]!;\n const b = cams[j]!;\n if (a.start < b.end && b.start < a.end) return [i, j];\n }\n }\n return null;\n}\n","export interface DepthItem {\n /** Position in the composition's stack (monotonic; gaps allowed). */\n stackIndex: number;\n threeD: boolean;\n /** Camera-space depth (larger = farther). Only read for threeD items. */\n depth: number;\n}\n\nconst finite = (n: number): number => (Number.isFinite(n) ? n : 0);\n\n/**\n * zIndex per item. Non-3D items keep their stack index. Each run of\n * consecutive threeD items is redistributed over the same index slots,\n * farthest first (drawn first), ties in stack order.\n */\nexport function assignDepthOrder(items: readonly DepthItem[]): number[] {\n const out = items.map(i => i.stackIndex);\n let i = 0;\n while (i < items.length) {\n if (!items[i]!.threeD) { i++; continue; }\n let j = i;\n while (j + 1 < items.length && items[j + 1]!.threeD) j++;\n const run = items.slice(i, j + 1).map((it, k) => ({ it, pos: i + k }));\n const slots = run.map(r => r.it.stackIndex);\n const farthestFirst = [...run].sort((a, b) => finite(b.it.depth) - finite(a.it.depth));\n farthestFirst.forEach((r, k) => { out[r.pos] = slots[k]!; });\n i = j + 1;\n }\n return out;\n}\n","import { Filter, GlProgram, GpuProgram, UniformGroup } from 'pixi.js';\n\n/**\n * One-pass disc (\"bokeh\") blur for depth of field: the taps sit on a golden-angle spiral, so the result is a pure function of the\n * pixels (no noise, no time) and the same frame is the same picture whichever way it was reached. The radius is in pixels.\n */\nexport const DISC_TAPS = 48;\n\n// pixi compiles GLSL as WebGL1-compatible by default; a shader that starts with `#version 300 es` is kept as ES 3.00,\n// and then the vertex shader must be ES 3.00 too.\nconst GL_VERTEX = `#version 300 es\nin vec2 aPosition;\nout vec2 vTextureCoord;\nuniform vec4 uInputSize;\nuniform vec4 uOutputFrame;\nuniform vec4 uOutputTexture;\nvoid main(void) {\n vec2 position = aPosition * uOutputFrame.zw + uOutputFrame.xy;\n position.x = position.x * (2.0 / uOutputTexture.x) - 1.0;\n position.y = position.y * (2.0 * uOutputTexture.z / uOutputTexture.y) - uOutputTexture.z;\n gl_Position = vec4(position, 0.0, 1.0);\n vTextureCoord = aPosition * (uOutputFrame.zw * uInputSize.zw);\n}`;\n\nconst GL_FRAGMENT = `#version 300 es\nprecision highp float;\nin vec2 vTextureCoord;\nuniform sampler2D uTexture;\nuniform vec4 uInputSize;\nuniform float uRadius;\nout vec4 finalColor;\nvoid main(void) {\n vec4 acc = vec4(0.0);\n for (int i = 0; i < ${DISC_TAPS}; i++) {\n float r = sqrt((float(i) + 0.5) / ${DISC_TAPS}.0) * uRadius;\n float a = float(i) * 2.39996323;\n acc += texture(uTexture, vTextureCoord + vec2(cos(a), sin(a)) * r * uInputSize.zw);\n }\n finalColor = acc / ${DISC_TAPS}.0;\n}`;\n\nconst WGSL = `\nstruct GlobalFilterUniforms {\n uInputSize: vec4<f32>, uInputPixel: vec4<f32>, uInputClamp: vec4<f32>,\n uOutputFrame: vec4<f32>, uGlobalFrame: vec4<f32>, uOutputTexture: vec4<f32>,\n};\nstruct DiscUniforms { uRadius: f32 };\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n@group(0) @binding(1) var uTexture: texture_2d<f32>;\n@group(0) @binding(2) var uSampler : sampler;\n@group(1) @binding(0) var<uniform> disc : DiscUniforms;\nstruct VSOutput { @builtin(position) position: vec4<f32>, @location(0) uv : vec2<f32> };\nfn filterVertexPosition(aPosition : vec2<f32>) -> vec4<f32> {\n var position = aPosition * gfu.uOutputFrame.zw + gfu.uOutputFrame.xy;\n position.x = position.x * (2.0 / gfu.uOutputTexture.x) - 1.0;\n position.y = position.y * (2.0 * gfu.uOutputTexture.z / gfu.uOutputTexture.y) - gfu.uOutputTexture.z;\n return vec4<f32>(position, 0.0, 1.0);\n}\nfn filterTextureCoord(aPosition : vec2<f32>) -> vec2<f32> {\n return aPosition * (gfu.uOutputFrame.zw * gfu.uInputSize.zw);\n}\n@vertex\nfn mainVertex(@location(0) aPosition : vec2<f32>) -> VSOutput {\n return VSOutput(filterVertexPosition(aPosition), filterTextureCoord(aPosition));\n}\n@fragment\nfn mainFragment(@location(0) uv : vec2<f32>) -> @location(0) vec4<f32> {\n var acc = vec4<f32>(0.0);\n for (var i = 0; i < ${DISC_TAPS}; i++) {\n let r = sqrt((f32(i) + 0.5) / ${DISC_TAPS}.0) * disc.uRadius;\n let a = f32(i) * 2.39996323;\n acc += textureSampleLevel(uTexture, uSampler, uv + vec2<f32>(cos(a), sin(a)) * r * gfu.uInputSize.zw, 0.0);\n }\n return acc / ${DISC_TAPS}.0;\n}`;\n\nexport class DiscBlurFilter extends Filter {\n constructor(radius = 8) {\n super({\n glProgram: GlProgram.from({ vertex: GL_VERTEX, fragment: GL_FRAGMENT, name: 'disc-blur' }),\n gpuProgram: GpuProgram.from({ vertex: { source: WGSL, entryPoint: 'mainVertex' }, fragment: { source: WGSL, entryPoint: 'mainFragment' } }),\n resources: { disc: new UniformGroup({ uRadius: { value: radius, type: 'f32' } }) },\n });\n this.radius = radius;\n }\n\n /** Blur radius in pixels. The padding follows it, so the blurred edge is not cut off. */\n get radius(): number { return (this.resources.disc as UniformGroup).uniforms.uRadius as number; }\n set radius(v: number) {\n const r = Math.max(0, v);\n (this.resources.disc as UniformGroup).uniforms.uRadius = r;\n this.padding = Math.ceil(r) + 2;\n }\n}\n","import { Container, Matrix, PerspectiveMesh, RenderTexture, Texture } from 'pixi.js';\nimport type { Sequence } from '../sequences/Base';\nimport { DiscBlurFilter } from '../filters/DiscBlur';\nimport { MAX_BLUR, MIN_BLUR } from './focus';\nimport { blendFilterFor, isAdvancedBlend, type BlendFilterLike } from '../core/blend';\nimport { describeLayer } from '../core/lint';\nimport { DEG, NEAR, projectLayer, type CameraBasis, type LayerTransform, type Rect } from './math';\n\n/** Render textures are capped at this many pixels on the long side; larger layers are downscaled. */\nexport const MAX_TEXTURE_SIZE = 4096;\n/**\n * Render textures are drawn at this multiple of the layer size (until the caps),\n * so a layer enlarged by perspective (z > 0) stays sharp instead of showing\n * jagged edges and soft text.\n */\nexport const SUPERSAMPLE = 2;\n/** Total texture pixels per layer are capped here (≈ one 2048² target); resolution drops to fit. */\nexport const MAX_TEXTURE_PIXELS = 2048 * 2048;\n/** MSAA multiplies target memory ~4x, so only small textures get it (supersampling covers the rest). */\nexport const ANTIALIAS_MAX_PIXELS = 1024 * 1024;\n/** Mesh grid per side. 20 keeps steeply tilted planes free of visible affine warping. */\nexport const MESH_GRID = 20;\n\n/** The slice of a Pixi renderer Layer3D needs (also what tests fake). */\nexport interface SpaceHost {\n render(options: {\n container: Container;\n target: RenderTexture;\n transform: Matrix;\n clear: boolean;\n clearColor: number[];\n }): void;\n}\n\ntype Carrier = Container & { z?: number; rotationX?: number; rotationY?: number };\n\ninterface TextureSize { w: number; h: number; resolution: number; antialias: boolean }\n\n/** Sum of the target's filter paddings: the texture must be this much larger on every side or filter output is clipped. */\nfunction filterPadding(target: Container): number {\n const filters = (target as unknown as { filters?: ReadonlyArray<{ padding?: number }> | null }).filters;\n if (!Array.isArray(filters)) return 0;\n let pad = 0;\n for (const f of filters) pad += f?.padding ?? 0;\n return Number.isFinite(pad) && pad > 0 ? Math.ceil(pad) : 0;\n}\n\nexport function readLayerTransform(target: Container): LayerTransform {\n const c = target as Carrier;\n return {\n x: c.x, y: c.y, z: c.z ?? 0,\n rotationX: (c.rotationX ?? 0) * DEG,\n rotationY: (c.rotationY ?? 0) * DEG,\n rotationZ: c.rotation,\n scaleX: c.scale.x, scaleY: c.scale.y,\n pivotX: c.pivot.x, pivotY: c.pivot.y,\n };\n}\n\n/**\n * Draws one `threeD` sequence: its display object is rendered into a\n * RenderTexture (with its own 2D transform replaced, so layer-local content\n * lands at the texture origin) and shown on a PerspectiveMesh whose four\n * corners come from projecting the layer through the active camera.\n *\n * The sequence's `target` is never in the scene graph; the composition adds\n * `display` instead. `z`, `rotationX`, `rotationY` live on `target` as plain\n * numeric props so GSAP tweens them like any other prop.\n */\nexport class Layer3D {\n readonly display: PerspectiveMesh;\n /** Camera-space depth from the last update (larger = farther). */\n depth = 0;\n private rt: RenderTexture | null = null;\n /**\n * Textures replaced by a bigger / smaller one. Destroying one right away warns \"destroyed while still\n * bound\": the mesh's bind group still points at it until the next render. They go at the next update,\n * by which time a frame has been drawn with the new texture.\n */\n private retired: RenderTexture[] = [];\n private size: TextureSize | null = null;\n private warnedBehind = false;\n /** Depth-of-field blur radius (px) from the last `setBlur`; 0 = no filter. */\n blur = 0;\n private blurFilter: DiscBlurFilter | null = null;\n private blendWas = 'normal';\n private blendFilter: BlendFilterLike | null = null;\n\n constructor(\n private readonly seq: Sequence,\n private readonly frameOf: () => Rect,\n ) {\n const target = seq.target as Carrier;\n target.z ??= 0;\n target.rotationX ??= 0;\n target.rotationY ??= 0;\n this.display = new PerspectiveMesh({ texture: Texture.WHITE, verticesX: MESH_GRID, verticesY: MESH_GRID });\n if (seq.spec.name) this.display.label = seq.spec.name;\n this.display.visible = false;\n }\n\n update(host: SpaceHost, basis: CameraBasis): void {\n this.flushRetired();\n const target = this.seq.target as Carrier | null;\n // Pixi skips rendering (and clearing) a container that is not `visible`\n // (e.g. PixiPlugin autoAlpha at alpha 0), which would leave a stale texture.\n if (!target || !target.renderable || !target.visible) return this.hide();\n\n const bounds = this.frameOf();\n const pad = filterPadding(target);\n const needW = Math.ceil(bounds.width + 2 * pad);\n const needH = Math.ceil(bounds.height + 2 * pad);\n if (!(needW >= 1 && needH >= 1) || !Number.isFinite(bounds.x) || !Number.isFinite(bounds.y)) return this.hide();\n\n const size = this.sizeFor(needW, needH);\n // The quad covers exactly the texture's pixel rect in layer space.\n const frame: Rect = { x: bounds.x - pad, y: bounds.y - pad, width: size.w, height: size.h };\n const projected = projectLayer(readLayerTransform(target), frame, basis);\n this.depth = projected.depth;\n if (!projected.visible) {\n if (!this.warnedBehind) {\n this.warnedBehind = true;\n if ((this.seq.spec as { hideBehindCamera?: boolean }).hideBehindCamera) return this.hide(); // on purpose: say nothing\n if (projected.depth > NEAR) {\n // the layer's own origin is in front of the camera: a tilt or a large size swings a CORNER past the camera plane\n console.warn(\n `pixi-effects: ${describeLayer(this.seq.spec)}: part of it (a corner) reaches the camera plane (z = ${(target.z ?? 0).toFixed(0)}, rotationX ${(target.rotationX ?? 0).toFixed(0)}°, rotationY ${(target.rotationY ?? 0).toFixed(0)}°), ` +\n `and a layer is hidden whole when any corner is at or behind it. Tilt it less (rotationX / rotationY), make it smaller, or keep the camera further away from it ` +\n `(the default camera sits at z = (height/2)/tan(fov/2), about 989 for 720p at fov 40).`,\n );\n } else {\n console.warn(\n `pixi-effects: ${describeLayer(this.seq.spec)} is at or behind the camera plane (z = ${(target.z ?? 0).toFixed(0)}) and is hidden. ` +\n `If that is unintended, lower its z or move the camera back (the default camera sits at z = (height/2)/tan(fov/2), about 989 for 720p at fov 40).`,\n );\n }\n }\n return this.hide();\n }\n\n this.ensureTexture(size);\n // `transform` replaces the container's own local transform for this render\n // (Pixi RenderGroupSystem), while `container.alpha` still applies — so the\n // texture carries the layer's alpha and the mesh alpha stays at 1.\n host.render({\n container: target,\n target: this.rt!,\n transform: new Matrix().translate(-frame.x, -frame.y),\n clear: true,\n clearColor: [0, 0, 0, 0],\n });\n this.display.geometry.setCorners(...projected.corners);\n this.display.visible = true;\n }\n\n /**\n * Depth-of-field blur on the projected mesh (screen space), so a tilted or scaled layer blurs by the size it is drawn at.\n * A radius under MIN_BLUR removes the filter: a sharp layer costs nothing. A blend mode moves to the filter while it is on\n * (a filtered object blends as a whole), and comes back when it goes.\n */\n setBlur(radius: number): void {\n const d = this.display as unknown as { filters: unknown; blendMode: string };\n // No hysteresis on purpose: whether a layer has the filter must depend only on this frame's radius, never on the frame before it\n // (a frame is a pure function of the camera and the layers, whichever order frames are visited in). A layer hovering at the\n // threshold creates and destroys a cheap filter object each frame; that is the price of determinism.\n const r = radius > MIN_BLUR ? Math.min(radius, MAX_BLUR) : 0;\n this.blur = r;\n if (r === 0) {\n if (this.blurFilter) {\n d.filters = null;\n d.blendMode = this.blendWas;\n this.blurFilter.destroy();\n this.blurFilter = null;\n this.blendFilter?.destroy();\n this.blendFilter = null;\n }\n return;\n }\n if (!this.blurFilter) {\n this.blurFilter = new DiscBlurFilter(r);\n this.blendWas = d.blendMode ?? 'normal';\n const chain: unknown[] = [this.blurFilter];\n if (isAdvancedBlend(this.blendWas)) {\n // an advanced mode is a filter of its own: blur first, then blend what is blurred onto the backdrop\n this.blendFilter = blendFilterFor(this.blendWas);\n if (this.blendFilter) { chain.push(this.blendFilter); d.blendMode = 'normal'; }\n } else if (this.blendWas !== 'normal' && this.blendWas !== 'inherit') {\n // only an explicit basic mode moves ('inherit' is Pixi's default for a container and 'normal' is the filter's own: nothing to move)\n this.blurFilter.blendMode = this.blendWas as never;\n d.blendMode = 'normal';\n }\n d.filters = chain;\n }\n this.blurFilter.radius = r;\n }\n\n destroy(): void {\n this.setBlur(0);\n this.display.destroy();\n this.rt?.destroy(true);\n this.rt = null;\n this.flushRetired();\n }\n\n private flushRetired(): void {\n for (const t of this.retired) t.destroy(true);\n this.retired = [];\n }\n\n private hide(): void {\n this.display.visible = false;\n }\n\n /**\n * Texture size for content of w×h. An existing texture is kept while it is at\n * least that big and at most 2x too big, so content whose bounds change every\n * frame (typewriter text, growing shapes) does not reallocate each frame.\n */\n private sizeFor(w: number, h: number): TextureSize {\n const cur = this.size;\n if (cur && cur.w >= w && cur.h >= h && cur.w <= 2 * w && cur.h <= 2 * h) return cur;\n const resolution = Math.min(\n SUPERSAMPLE,\n MAX_TEXTURE_SIZE / Math.max(w, h),\n Math.sqrt(MAX_TEXTURE_PIXELS / (w * h)),\n );\n const antialias = w * h * resolution * resolution <= ANTIALIAS_MAX_PIXELS;\n return { w, h, resolution, antialias };\n }\n\n private ensureTexture(size: TextureSize): void {\n if (this.rt && this.size === size) return;\n // Same sampling: resize the texture where it is. Replacing it makes Pixi warn that the old one was\n // destroyed while still bound, because the mesh keeps pointing at it until the next render.\n if (this.rt && this.size && this.size.antialias === size.antialias) {\n this.rt.resize(size.w, size.h, size.resolution);\n this.size = size;\n return;\n }\n const next = RenderTexture.create({\n width: size.w, height: size.h, resolution: size.resolution, antialias: size.antialias,\n });\n this.display.texture = next;\n if (this.rt) this.retired.push(this.rt);\n this.rt = next;\n this.size = size;\n }\n}\n","import { collectPropKeys } from './specKeys';\nimport { describeLayer } from '../core/lint';\nimport { focusProblems } from './focus';\nimport type { SequenceSpec } from '../types';\n\ntype Warn = (message: string) => void;\nconst defaultWarn: Warn = m => console.warn(m);\n\nconst FOV_HINT = 'perspective is the camera\\'s \"fov\" — add a { type: \"camera\" } layer and set fov in its initial / keyframes';\n\nconst DOF_HINT = 'depth of field is the camera\\'s \"focus\" (the plane that is sharp: a layer name or a z) and \"aperture\" (how shallow: 0 = off, 30 = default) — put them in the camera\\'s initial / keyframes';\n\n/** Keys that are never valid for any layer, with a hint at what the author probably meant. */\nconst LAYER_ALIASES: Record<string, string> = {\n rotateX: 'did you mean \"rotationX\"?',\n rotateY: 'did you mean \"rotationY\"?',\n rotateZ: 'did you mean \"rotation\"?',\n rotationZ: 'did you mean \"rotation\" (it is the Z rotation)?',\n translateZ: 'did you mean \"z\"?',\n depth: 'did you mean \"z\"?',\n posZ: 'did you mean \"z\"?',\n perspective: FOV_HINT,\n zoom: FOV_HINT,\n};\n\n/** Camera-only mistakes. */\nconst CAMERA_ALIASES: Record<string, string> = {\n pointOfInterest: 'did you mean \"lookAtX / lookAtY / lookAtZ\"?',\n lookAt: 'did you mean \"lookAtX / lookAtY / lookAtZ\"?',\n depthOfField: DOF_HINT, dof: DOF_HINT, focalDistance: DOF_HINT, focusDistance: DOF_HINT, fStop: DOF_HINT, blurAmount: DOF_HINT,\n};\n\nconst CAMERA_PROPS = ['x', 'y', 'z', 'fov', 'focus', 'aperture', 'lookAtX', 'lookAtY', 'lookAtZ', 'offsetX', 'offsetY', 'offsetZ', 'lookOffsetX', 'lookOffsetY', 'lookOffsetZ'];\nconst NEEDS_THREE_D = ['z', 'rotationX', 'rotationY'];\n/** Camera-only names that the animatable-property check lets through on any layer. */\nconst CAMERA_ONLY = ['focus', 'aperture'];\nconst SKEW_KEYS = ['skew', 'skewX', 'skewY'];\n\n/**\n * Warn (never throw) about the inputs an AI author is most likely to get wrong,\n * with a message that says what to change. One call per layer, at build time.\n */\nexport function lintSequence(spec: SequenceSpec, warn: Warn = defaultWarn): void {\n const who = describeLayer(spec);\n const keys = collectPropKeys(spec);\n const explained = new Set<string>();\n\n for (const k of keys) {\n const hint = LAYER_ALIASES[k] ?? (spec.type === 'camera' ? CAMERA_ALIASES[k] : undefined);\n if (hint) {\n explained.add(k);\n warn(`pixi-effects: ${who}: \"${k}\" is not a property — ${hint}`);\n }\n }\n\n if (spec.type === 'camera') {\n const raw = spec as unknown as Record<string, unknown>;\n for (const p of CAMERA_PROPS) {\n if (p in raw) warn(`pixi-effects: ${who}: \"${p}\" must go inside initial / keyframes, not on the camera itself`);\n }\n for (const k of Object.keys(raw)) {\n const hint = CAMERA_ALIASES[k] ?? LAYER_ALIASES[k];\n if (hint) warn(`pixi-effects: ${who}: \"${k}\" is not a property — ${hint} (inside initial)`);\n }\n for (const k of keys) {\n if (!explained.has(k) && !CAMERA_PROPS.includes(k)) {\n warn(`pixi-effects: ${who}: \"${k}\" has no effect on a camera (use ${CAMERA_PROPS.join(', ')})`);\n }\n }\n return;\n }\n\n for (const k of CAMERA_ONLY) {\n if (keys.has(k)) warn(`pixi-effects: ${who}: \"${k}\" is a camera property and does nothing on this layer: write it in the initial / keyframes of a { type: 'camera' } layer`);\n }\n\n if (spec.type === 'audio') {\n if (spec.threeD) warn(`pixi-effects: ${who}: threeD has no effect on audio`);\n return;\n }\n\n if (!spec.threeD) {\n for (const k of NEEDS_THREE_D) {\n if (keys.has(k)) warn(`pixi-effects: ${who}: \"${k}\" needs threeD: true (it is ignored otherwise)`);\n }\n } else {\n for (const k of SKEW_KEYS) {\n if (keys.has(k)) warn(`pixi-effects: ${who}: \"${k}\" is ignored on threeD layers`);\n }\n }\n}\n\n/** The layer names a camera's `focus` points at: missing, not threeD, or with a z that moves later. One call per camera, at build time. */\nexport function lintFocus(camera: SequenceSpec, siblings: readonly SequenceSpec[], warn: Warn = defaultWarn): void {\n if (camera.type !== 'camera') return;\n const who = describeLayer(camera);\n for (const p of focusProblems(camera, siblings)) {\n if (p.kind === 'missing') {\n warn(`pixi-effects: ${who}: focus: no layer named \"${p.name}\"${p.hint ? `; did you mean \"${p.hint}\"?` : ''} (the z = 0 plane is used). Write a threeD layer's name or a z number`);\n } else if (p.kind === 'not-threeD') {\n warn(`pixi-effects: ${who}: focus \"${p.name}\" is not a threeD layer, so it has no depth (the z = 0 plane is used). Write a threeD layer's name or a z number`);\n } else if (p.kind === 'duplicate') {\n warn(`pixi-effects: ${who}: focus \"${p.name}\": ${p.count} layers are named \"${p.name}\"; the first threeD one is used. Give the layers different names`);\n } else {\n warn(`pixi-effects: ${who}: focus \"${p.name}\" reads only the first z of that layer; its z moves later and the focus does not follow. Animate focus itself with numbers to follow it`);\n }\n }\n}\n","import { AlphaFilter, AlphaMask, Container, Rectangle } from 'pixi.js';\nimport { gsap } from 'gsap';\nimport { Sequence } from './Base';\nimport { NullSequence } from './Null';\nimport { suggestName } from '../core/options';\nimport { buildSequenceTree } from '../core/Composition';\nimport { CameraSequence } from '../space/CameraSequence';\nimport { findOverlap, pickActiveCamera } from '../space/camera';\nimport { assignDepthOrder } from '../space/depth';\nimport { Layer3D, type SpaceHost } from '../space/Layer3D';\nimport { lintSequence, lintFocus } from '../space/lint';\nimport { layerInitialZ, blurRadius, MANY_BLURRED } from '../space/focus';\nimport { describeLayer, lintText, lintTiming, summarizeWarnings, lintKeys } from '../core/lint';\nimport { applyBlendMode, blendFilterFor, blendProblem, blendUnavailableMessage, isAdvancedBlend, maxConcurrentAdvanced, MANY_ADVANCED, type BlendReport } from '../core/blend';\nimport { cameraBasis, homeCamera, projectPoint, NEAR, type CameraBasis, type CameraState } from '../space/math';\nimport { timeRemapOf, remapOf, contentLength, bindClock, clockTable, type TimeRemap, type ClockTable } from '../core/remap';\nimport type { CompositionSequenceSpec, AudioDescriptor, CompositionShape, SequenceSpec } from '../types';\n\ntype Timeline = ReturnType<typeof gsap.timeline>;\n\nexport class CompositionSequence extends Sequence {\n declare spec: CompositionSequenceSpec;\n private _innerContainer: Container | null = null;\n private _compositionShape: CompositionShape | null = null;\n _children: Sequence[] = [];\n private _cameras: CameraSequence[] = [];\n private _layers3d: Layer3D[] = [];\n private _dofSaid = { behind: false, many: false };\n /** What this composition made for blend modes (filters added to layers' chains, groups and their carrier filters): destroyed with it. */\n private _blendOwned: Array<{ destroy(): void }> = [];\n /** Drawn children in stack order (cameras and target-less sequences excluded). */\n private _visual: Array<{ seq: Sequence; layer: Layer3D | null; wrap?: Container }> = [];\n /** Layers drawn inside a null layer (`parent`): they are not in the composition's own stack. */\n private _nested: Sequence[] = [];\n /** The null layer each parented layer is drawn inside. */\n private _parentOf = new Map<Sequence, NullSequence>();\n /** Set when this composition's own time is remapped: the children live on `_inner` in LOCAL time, driven by `_clock`. */\n private _inner: Timeline | null = null;\n private _clock: { time: number } | null = null;\n private _remap: TimeRemap | null = null;\n private _childBase = 0;\n private _contentSpan = 0;\n\n /** Where the children's time starts: the composition's absolute start, or 0 when their time is local (remapped). */\n get childBase(): number { return this._childBase; }\n /** How long the children's time runs: the composition's duration, or its content length when its time is remapped. */\n get contentSpan(): number { return this._contentSpan; }\n /** The time the children live in at movie time `t`: the movie's own, or this composition's local clock when it is remapped. */\n childTime(t: number): number { return this._clock ? this._clock.time : t; }\n /** The clock reader for filters that want the time (grain), or null when the children run on the movie's time. */\n localClock(): (() => number) | null { return this._clock ? () => this._clock!.time : null; }\n /** How the time is remapped, for the timeline chart: `×0.5`, `×-1`, `time keyframes`, or null. */\n remapLabel(): string | null {\n const r = this._remap;\n if (!r) return null;\n return r.timeKfs.length ? 'time keyframes' : `×${r.speed ?? 1}`;\n }\n\n async build(): Promise<void> {\n const width = this.spec.width ?? this.parent?.width ?? this.root.width;\n const height = this.spec.height ?? this.parent?.height ?? this.root.height;\n if (this.duration === undefined) {\n this.duration = this.spec.duration ?? this.parent?.duration ?? this.root.duration;\n }\n const wrapper = new Container();\n wrapper.cullable = true;\n wrapper.cullableChildren = true;\n wrapper.cullArea = new Rectangle(0, 0, width, height);\n\n const inner = new Container();\n inner.cullable = true;\n inner.cullableChildren = true;\n wrapper.addChild(inner);\n\n this.target = wrapper;\n this.intrinsicWidth = width;\n this.intrinsicHeight = height;\n this._innerContainer = inner;\n // A remapped composition's children live in LOCAL time, which can run past the composition's own duration (speed 2 reads twice as far).\n const base = timeRemapOf(this.spec as never);\n const span = base ? contentLength(base, this.duration) : this.duration;\n this._remap = base ? remapOf(this.spec as never, 'time', span) : null;\n this._contentSpan = span;\n this._compositionShape = { width, height, duration: span };\n\n const lateKeyframes: string[] = [];\n for (const s of this.spec.sequences ?? []) {\n lintSequence(s);\n lintFocus(s, this.spec.sequences ?? []);\n lintTiming(s, span, (message, kind) => (kind === 'late-keyframe' ? lateKeyframes.push(message) : console.warn(message)));\n lintText(s);\n lintKeys(s);\n }\n for (const message of summarizeWarnings(lateKeyframes)) console.warn(message);\n const crowd = maxConcurrentAdvanced((this.spec.sequences ?? []) as Array<{ at?: number; duration?: number; blendMode?: unknown; type?: string; sequences?: unknown }>, span);\n if (crowd >= MANY_ADVANCED) {\n console.warn(`pixi-effects: ${describeLayer(this.spec)}: ${crowd} layers with an advanced blendMode are on screen at once (a composition with one counts each layer inside it, since its children blend one by one); each is a full-frame pass (about 2 ms on WebGL). Put fewer layers in the blend (or draw the glow as one layer), or use add / screen / multiply`);\n }\n\n this._children = await buildSequenceTree(\n this.spec.sequences ?? [],\n this._compositionShape,\n this.root,\n );\n this._resolveParents();\n // A camera's `focus: \"title\"` becomes that layer's first z, here, where the siblings exist (a camera sees only its parent's shape)\n const layerNames = new Set(this._children.map(c => c.spec.name).filter((n): n is string => !!n));\n for (const cam of this._children) {\n if (!(cam instanceof CameraSequence)) continue;\n cam.resolveFocusNames(name => {\n const hit = this._children.find(c => c.spec.name === name && c.spec.threeD);\n return hit ? layerInitialZ(hit.spec, hit.scope() as unknown as Record<string, number>) : undefined;\n }, layerNames);\n }\n // What is said about blend modes is collected per build: the same mistake in 300 particle layers is one warning (\"and 299 more\")\n const blendSaid = new Map<string, { spec: { name?: string; type: string }; n: number }>();\n const report: BlendReport = (message, spec) => {\n const seen = blendSaid.get(message);\n if (seen) seen.n++; else blendSaid.set(message, { spec, n: 1 });\n };\n for (const child of this._children) {\n // Cameras are display-less: they only feed the projection pass.\n if (child instanceof CameraSequence) {\n this._cameras.push(child);\n continue;\n }\n if (!child.target) continue;\n const holder = this._parentOf.get(child);\n const into = holder?.target ?? inner; // a layer with `parent` is drawn inside its null layer\n\n const maskSpec = (child.spec as { mask?: SequenceSpec }).mask;\n\n // threeD layers never enter the scene graph themselves: their display\n // object is rendered into a texture and a perspective mesh stands in.\n if (child.spec.threeD) {\n const layer = new Layer3D(child, frameOf(child));\n inner.addChild(layer.display);\n this._layers3d.push(layer);\n this._visual.push({ seq: child, layer });\n const added3d = applyBlendMode(child.spec, layer.display, report);\n if (added3d) this._blendOwned.push(added3d);\n if (maskSpec) {\n console.warn(`pixi-effects: ${describeLayer(child.spec)}: mask is not supported on threeD layers yet; ignored`);\n }\n continue;\n }\n\n // An inverted mask is an alpha mask: the layer is rendered into a texture first, and its own blend mode would then apply inside that\n // texture, against nothing (multiply rendered black); and a filter on a parent is skipped by Pixi when a masked layer sits inside it.\n // So a layer with both an inverted mask and a blend mode is built another way: a group of its own, whose one filter does the blend as\n // the pass that draws onto the backdrop, holding the layer and, over it, the mask shape drawn with the `erase` blend (it removes the\n // layer's alpha where the mask is: the same hole, with no alpha mask).\n const mode = child.spec.blendMode;\n const eraseMask = !!maskSpec && (child.spec as { maskInverted?: boolean }).maskInverted === true\n && mode !== undefined && mode !== 'normal' && blendProblem(mode) === null;\n // A (not inverted) text mask is an alpha mask too, and there is no way to express it with a blend of its own: the blend is said to be lost\n // and the layer is drawn normal (the letters can be a layer of their own, which blends fine).\n const alphaMaskLosesBlend = !!maskSpec && (maskSpec.type === 'text' || maskSpec.type === 'image' || maskSpec.type === 'video') && !eraseMask\n && mode !== undefined && mode !== 'normal' && blendProblem(mode) === null;\n if (alphaMaskLosesBlend) {\n report(`blendMode \"${mode}\" cannot be used together with ${maskSpec!.type === 'image' ? 'an' : 'a'} ${maskSpec!.type} layer as the mask (the blend is lost); the layer is drawn normal. Put the ${maskSpec!.type} on a layer of its own with the blendMode instead of masking with it, or use maskInverted`, child.spec);\n }\n let wrap: Container | undefined;\n if (eraseMask) {\n wrap = new Container();\n wrap.addChild(child.target);\n let carrier: unknown = null;\n if (isAdvancedBlend(mode)) carrier = blendFilterFor(mode);\n else { const f = new AlphaFilter({ alpha: 1 }); f.blendMode = mode as never; carrier = f; }\n if (carrier) { wrap.filters = [carrier as never]; this._blendOwned.push(carrier as { destroy(): void }); } else report(blendUnavailableMessage(mode), child.spec);\n this._blendOwned.push(wrap);\n into.addChild(wrap);\n } else into.addChild(child.target);\n if (holder) this._nested.push(child);\n else this._visual.push({ seq: child, layer: null, wrap });\n if (!wrap && !alphaMaskLosesBlend) {\n const added = applyBlendMode(child.spec, child.target, report);\n if (added) this._blendOwned.push(added);\n }\n // If this child has a `mask` spec, build the mask sequence in the same\n // composition shape, add its target to the same parent (so its\n // transforms resolve in the same coord space), and wire PIXI's\n // mask channel. PIXI v8 renders mask containers into the stencil /\n // alpha buffer; they don't render as normal children.\n if (maskSpec) {\n // The mask lives and animates with the layer it masks: with no `at` of its own its `at` and\n // `duration` are the layer's, so its keyframes are measured from the layer's start too. An\n // explicit `at` is composition time, exactly like a layer's.\n const lifetime = maskSpec.at === undefined\n ? { at: child.at, duration: maskSpec.duration ?? child.duration }\n : {};\n const built = await buildSequenceTree([{ ...maskSpec, ...lifetime } as SequenceSpec], this._compositionShape, this.root);\n const maskSeq = built[0];\n if (maskSeq?.target) {\n (wrap ?? into).addChild(maskSeq.target); // the mask shares the layer's space\n // PIXI v8 `setMask` accepts an `inverse` flag — that's how we\n // expose `maskInverted` from the spec. Falls back to plain\n // `target.mask = …` for runtimes that don't have setMask\n // (older PIXI builds).\n const inverse = (child.spec as { maskInverted?: boolean }).maskInverted ?? false;\n const t = child.target as Container & {\n setMask?: (opts: { mask: Container | null; inverse?: boolean }) => void;\n addEffect: (effect: AlphaMask) => void;\n mask: Container | null;\n };\n if (wrap) {\n // see above: drawn, not used as a mask. A mask with filters of its own erases through its LAST filter (the pass that draws it\n // onto the layer): a blend on the container would apply inside the filter pass, against nothing, and erase nothing.\n const mt = maskSeq.target as Container & { blendMode: string };\n const mf = Array.isArray(mt.filters) && mt.filters.length > 0 ? (mt.filters[mt.filters.length - 1] as unknown as { blendMode?: unknown }) : null;\n if (mf) mf.blendMode = 'erase'; else mt.blendMode = 'erase';\n } else if (inverse || maskSpec.type === 'text') {\n // A stencil mask is the mask's geometry: a text layer's is its whole bounding box (the letters' alpha is ignored), and\n // PIXI's inverted stencil tests against the empty level, so inside a masked parent it shows what the parent hides.\n // An alpha mask draws the mask into a texture and uses its alpha: letters stay letters, an inverse is 1 − alpha.\n const effect = new AlphaMask({ mask: maskSeq.target });\n effect.inverse = inverse;\n t.setMask?.({ mask: undefined as never, inverse }); // the alpha pipe reads `inverse` from the maskee's mask options, not from the effect\n t.addEffect(effect);\n } else if (typeof t.setMask === 'function') {\n t.setMask({ mask: maskSeq.target, inverse });\n } else {\n t.mask = maskSeq.target;\n }\n child.maskSequence = maskSeq;\n maskSeq.keepHidden = !wrap && (maskSpec.type === 'image' || maskSpec.type === 'video'); // PIXI: a Sprite mask is hidden by renderable = false\n }\n }\n }\n\n for (const [message, seen] of blendSaid) {\n console.warn(`pixi-effects: ${describeLayer(seen.spec)}: ${message}${seen.n > 1 ? ` (and ${seen.n - 1} more layers have the same mistake)` : ''}`);\n }\n\n if (this._layers3d.length > 0) {\n // Stack order becomes explicit zIndex so threeD layers can be re-sorted\n // by depth each frame without reparenting.\n inner.sortableChildren = true;\n this._visual.forEach((v, i) => {\n (v.layer?.display ?? v.wrap ?? v.seq.target!).zIndex = i;\n });\n } else if (this._cameras.length > 0) {\n console.warn('pixi-effects: camera has no effect: this composition has no threeD layers');\n }\n\n this.buildFilters();\n }\n\n protected override displayProps(): { initial: CompositionSequenceSpec['initial']; keyframes: CompositionSequenceSpec['keyframes'] } {\n const r = this._remap;\n return r ? { initial: r.restInitial as CompositionSequenceSpec['initial'], keyframes: r.restKfs } : super.displayProps();\n }\n\n override bindTimeline(timeline: Timeline, offset = 0): void {\n super.bindTimeline(timeline, offset);\n const remap = this._remap;\n // Children's `at` is relative to this composition's start, so push them forward by our absolute start time on the global\n // timeline. A remapped composition builds them in LOCAL time (offset 0) on a timeline of its own, which the clock drives.\n const childOffset = remap ? 0 : offset + this.at;\n this._childBase = childOffset;\n const target = remap ? gsap.timeline({ paused: true, defaults: { ease: 'none' } }) : timeline;\n for (const child of this._children) {\n // Each layer builds its tweens in a small timeline of its own, which is added to the parent once, finished. Adding\n // thousands of tweens one by one to a single timeline makes GSAP re-measure the whole timeline at every add (the cost\n // grows with the square of the count: ~3 s for a piece with 700 particle layers); this way the parent only ever holds\n // one child per layer. Positions stay absolute, so the picture at any time is the same.\n const own = gsap.timeline({ defaults: { ease: 'none' } });\n child.bindTimeline(own, childOffset);\n // The mask shares the maskee's offset — its `at` is interpreted\n // relative to the composition's start, just like the child itself,\n // so a reveal-from-zero animation lines up naturally.\n child.maskSequence?.bindTimeline(own, childOffset);\n target.add(own, 0);\n }\n if (remap) this._bindClock(timeline, target, remap, offset);\n const overlap = findOverlap(this._cameras.map(c => c.window()));\n if (overlap) {\n console.warn(`pixi-effects: cameras #${overlap[0] + 1} and #${overlap[1] + 1} overlap in time; the top-most one wins`);\n }\n }\n\n /** Drive the local timeline `inner` from the clock, and put the clock's tweens on the outer `timeline`. */\n private _bindClock(timeline: Timeline, inner: Timeline, remap: TimeRemap, offset: number): void {\n let last = NaN;\n let cur = 0;\n const clock = {\n get time(): number { return cur; },\n set time(v: number) {\n cur = v;\n if (v === last) return; // a freeze renders nothing\n last = v;\n inner.time(v);\n },\n };\n this._inner = inner;\n this._clock = clock;\n const scope = this.scope() as unknown as Record<string, number>;\n if (remap.start !== undefined && remap.timeKfs.length === 0) clock.time = remap.start;\n bindClock(timeline, clock, 'time', remap, this.duration!, offset + this.at, scope);\n // Initialise every tween of the local timeline in order (end, then start), as Movie does for the main one: GSAP captures a `to`\n // tween's start value the first time it renders, and a remap can reach a stretch of local time for the first time going BACKWARD.\n inner.time(inner.duration()); inner.time(0);\n last = NaN; // the inner timeline now sits at 0, whatever the clock last said\n this._warnUnreachable(clockTable(remap, 'time', this.duration!, offset + this.at, scope, offset + this.at + this.duration!), offset + this.at, offset + this.at + this.duration!);\n }\n\n /**\n * A child the clock never dwells in is never visible: say so. Its `at` is in THIS composition's local time, so the usual mistake is\n * writing it in the outer time (or forgetting that speed 0.5 reaches only half as far). Decided by dwell, not by the clock's end\n * points: a clock that arrives at the child's `at` and HOLDS there shows it for the whole hold; one that only touches it in a single\n * instant (speed 0.5, a child at exactly the farthest local time) does not.\n */\n private _warnUnreachable(table: ClockTable, from: number, to: number): void {\n const remap = this._remap!;\n const how = remap.timeKfs.length ? 'time keyframes' : `speed ${remap.speed ?? 1}`;\n const span = this._contentSpan;\n const EPS = 1e-9;\n for (const child of this._children) {\n const at = child.at;\n if (at >= span) continue; // already said by lintTiming (\"starts after its composition ends\")\n const end = Math.min(at + (child.duration ?? span), span);\n let dwell = 0; // 1 ms samples of the clock inside [at, end)\n for (let t = from; t <= to && dwell < 2; t += 0.001) { const v = table.at(t); if (v >= at - EPS && v < end + EPS) dwell++; }\n if (dwell >= 2) continue;\n console.warn(\n `pixi-effects: ${describeLayer(child.spec)} starts at ${at}s of ${describeLayer(this.spec)}'s own time, but its clock only reaches ` +\n `${Number(table.min.toFixed(3))}–${Number(table.max.toFixed(3))}s (${how}), so it is never visible. ` +\n `Layers inside a remapped composition are placed in that composition's local time.`,\n );\n }\n }\n\n /**\n * Drawn children in stack order, with the display object that stands in for each (the mesh for a threeD layer).\n * Null layers draw nothing and are left out; the layers inside them follow, with the null layers that carry them.\n */\n layers(): Array<{ seq: Sequence; display: Container; threeD: boolean; carriers: NullSequence[]; depthBlur: number }> {\n const carriersOf = (seq: Sequence): NullSequence[] => {\n const out: NullSequence[] = [];\n for (let p = this._parentOf.get(seq); p; p = this._parentOf.get(p)) out.push(p);\n return out;\n };\n return [...this._visual.map(v => v.seq), ...this._nested]\n .filter(seq => !(seq instanceof NullSequence))\n .map(seq => {\n const layer = this._visual.find(v => v.seq === seq)?.layer ?? null;\n return {\n seq,\n display: (layer?.display ?? seq.target!) as unknown as Container,\n threeD: layer !== null,\n carriers: carriersOf(seq),\n depthBlur: layer?.blur ?? 0,\n };\n });\n }\n\n /** Match every `parent: 'name'` to a null layer; anything that cannot work is said out loud and drawn unparented. */\n private _resolveParents(): void {\n const nulls = this._children.filter((c): c is NullSequence => c instanceof NullSequence);\n const nullNames = nulls.map(n => n.spec.name).filter((n): n is string => !!n);\n const warned = new Set<string>();\n for (const child of this._children) {\n const want = child.spec.parent;\n if (want === undefined) continue;\n const who = describeLayer(child.spec);\n if (child instanceof CameraSequence) { console.warn(`pixi-effects: ${who}: a camera cannot have a parent; ignored`); continue; }\n if (child.spec.threeD) { console.warn(`pixi-effects: ${who}: a threeD layer cannot have a parent (parent \"${want}\" ignored)`); continue; }\n const same = this._children.filter(c => c.spec.name === want);\n if (same.length === 0) {\n const hint = suggestName(want, nullNames);\n console.warn(`pixi-effects: ${who}: parent \"${want}\": no layer with that name${hint ? `; did you mean \"${hint}\"?` : ''} (the layer is drawn without a parent)`);\n continue;\n }\n const holder = same.find((c): c is NullSequence => c instanceof NullSequence);\n if (!holder) {\n console.warn(`pixi-effects: ${who}: parent \"${want}\" is a ${same[0]!.spec.type} layer; only { type: 'null' } layers can be parents (the layer is drawn without a parent)`);\n continue;\n }\n if (same.length > 1 && !warned.has(want)) {\n warned.add(want);\n console.warn(`pixi-effects: ${same.length} layers are named \"${want}\"; parent \"${want}\" uses the first null layer with that name`);\n }\n if (holder === child) { console.warn(`pixi-effects: ${who} is its own parent; ignored`); continue; }\n this._parentOf.set(child, holder);\n }\n // a chain that leads back to itself: break it where we find it\n for (const start of this._children) {\n const seen = new Set<Sequence>([start]);\n for (let p = this._parentOf.get(start); p; p = this._parentOf.get(p)) {\n if (p === start) {\n const names = [...seen].map(s => s.spec.name ?? s.spec.type).join(' → ');\n console.warn(`pixi-effects: parent cycle: ${names} → ${start.spec.name ?? start.spec.type}; the parent of \"${start.spec.name ?? start.spec.type}\" is ignored`);\n this._parentOf.delete(start);\n break;\n }\n if (seen.has(p)) break;\n seen.add(p);\n }\n }\n }\n\n override syncFrame(): void {\n super.syncFrame();\n for (const child of this._children) child.syncFrame();\n }\n\n override updateSpace(t: number, host: SpaceHost): void {\n // Inner compositions first: a threeD composition is rendered into its own\n // texture by this level, so its content must already be projected.\n const childT = this.childTime(t);\n for (const child of this._children) child.updateSpace(childT, host);\n if (this._layers3d.length === 0 || !this._compositionShape) return;\n\n const { width, height } = this._compositionShape;\n const compEnd = this._childBase + (this.duration ?? 0);\n const active = pickActiveCamera(\n this._cameras.map(cam => ({ cam, ...cam.window() })),\n childT,\n compEnd,\n );\n const cam = active ? active.cam.state() : homeCamera(width, height);\n const basis = cameraBasis(cam, width, height);\n\n for (const layer of this._layers3d) layer.update(host, basis);\n this._applyDepthOfField(cam, basis);\n\n const order = assignDepthOrder(\n this._visual.map((v, i) => ({ stackIndex: i, threeD: v.layer !== null, depth: v.layer?.depth ?? 0 })),\n );\n this._visual.forEach((v, i) => {\n if (v.layer) v.layer.display.zIndex = order[i]!;\n });\n }\n\n /** Depth of field: each threeD layer is blurred by how far its depth is from the focal plane (a pure function of the camera and the layers). */\n private _applyDepthOfField(cam: CameraState, basis: CameraBasis): void {\n const aperture = cam.aperture ?? 0;\n if (!(aperture > 0)) { for (const l of this._layers3d) l.setBlur(0); return; }\n const focusDepth = projectPoint(basis, { x: cam.lookAtX, y: cam.lookAtY, z: cam.focus ?? 0 }).depth;\n if (!(focusDepth > NEAR)) {\n if (!this._dofSaid.behind) {\n this._dofSaid.behind = true;\n console.warn(`pixi-effects: ${describeLayer(this.spec)}: the camera's focus (z = ${(cam.focus ?? 0).toFixed(0)}) is at or behind the camera, so nothing is blurred. Put focus in front of the camera (a z below the camera's z)`);\n }\n for (const l of this._layers3d) l.setBlur(0);\n return;\n }\n let blurred = 0;\n for (const l of this._layers3d) {\n // a hidden layer (lifespan over, alpha 0, behind the camera) keeps the depth of the last frame it was drawn: it is not blurred or counted\n l.setBlur(l.display.visible ? blurRadius(aperture, basis.focal, l.depth, focusDepth) : 0);\n if (l.blur > 0) blurred++;\n }\n if (blurred >= MANY_BLURRED && !this._dofSaid.many) {\n this._dofSaid.many = true;\n console.warn(`pixi-effects: ${describeLayer(this.spec)}: ${blurred} layers are blurred by depth of field at once; each costs a filter pass per frame (WebGPU more). Merge the far layers or lower aperture`);\n }\n }\n\n override collectAudio(out: AudioDescriptor[], baseTime: number): void {\n super.collectAudio(out, baseTime);\n const remap = this._remap;\n if (!remap) {\n const childBase = baseTime + this.at;\n for (const child of this._children) child.collectAudio(out, childBase);\n return;\n }\n // The children's sounds are described in local time; each one is given a warp from the movie's time to it.\n const inner: AudioDescriptor[] = [];\n for (const child of this._children) child.collectAudio(inner, 0);\n const lo = baseTime + this.at, hi = lo + this.duration!;\n const table = clockTable(remap, 'time', this.duration!, lo, this.scope() as unknown as Record<string, number>, hi);\n for (const d of inner) {\n const prev = d.warp;\n out.push({ ...d, warp: (t: number) => (t < lo || t > hi ? NaN : prev ? prev(table.at(t)) : table.at(t)) });\n }\n }\n\n override destroy(): void {\n this._inner?.kill();\n this._inner = null;\n this._clock = null;\n for (const l of this._layers3d) l.destroy();\n this._layers3d = [];\n for (const c of this._children) c.destroy();\n for (const o of this._blendOwned) o.destroy();\n this._blendOwned = [];\n super.destroy();\n }\n}\n\n/** Layer-space rectangle a threeD child projects: a composition's frame, otherwise its content bounds. */\nfunction frameOf(child: Sequence): () => { x: number; y: number; width: number; height: number } {\n if (child instanceof CompositionSequence) {\n return () => ({ x: 0, y: 0, width: child.intrinsicWidth, height: child.intrinsicHeight });\n }\n return () => child.target!.getLocalBounds();\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/options.ts"],"names":[],"mappings":";AACA,SAAS,QAAA,CAAS,GAAW,CAAA,EAAmB;AAC9C,EAAA,MAAM,EAAA,GAAK,MAAM,IAAA,CAAK,EAAE,QAAQ,CAAA,CAAE,MAAA,GAAS,CAAA,EAAE,EAAG,CAAC,CAAA,EAAG,MAAM,CAAC,CAAA,EAAG,GAAG,KAAA,CAAM,CAAA,CAAE,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,CAAC,CAAa,CAAA;AACrG,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,IAAK,CAAA,CAAE,MAAA,EAAQ,KAAK,EAAA,CAAG,CAAC,CAAA,CAAG,CAAC,CAAA,GAAI,CAAA;AAChD,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,IAAK,CAAA,CAAE,QAAQ,CAAA,EAAA,EAAK;AAClC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,IAAK,CAAA,CAAE,QAAQ,CAAA,EAAA,EAAK;AAClC,MAAA,EAAA,CAAG,CAAC,CAAA,CAAG,CAAC,CAAA,GAAI,IAAA,CAAK,IAAI,EAAA,CAAG,CAAA,GAAI,CAAC,CAAA,CAAG,CAAC,CAAA,GAAK,CAAA,EAAG,EAAA,CAAG,CAAC,EAAG,CAAA,GAAI,CAAC,CAAA,GAAK,CAAA,EAAG,GAAG,CAAA,GAAI,CAAC,CAAA,CAAG,CAAA,GAAI,CAAC,CAAA,IAAM,CAAA,CAAE,CAAA,GAAI,CAAC,MAAM,CAAA,CAAE,CAAA,GAAI,CAAC,CAAA,GAAI,IAAI,CAAA,CAAE,CAAA;AAEjH,MAAA,IAAI,IAAI,CAAA,IAAK,CAAA,GAAI,CAAA,IAAK,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,CAAA,GAAI,CAAC,CAAA,IAAK,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,EAAA,CAAG,CAAC,CAAA,CAAG,CAAC,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAC,CAAA,CAAG,CAAC,CAAA,EAAI,GAAG,CAAA,GAAI,CAAC,EAAG,CAAA,GAAI,CAAC,IAAK,CAAC,CAAA;AAAA,IAC/H;AAAA,EACF;AACA,EAAA,OAAO,EAAA,CAAG,CAAA,CAAE,MAAM,CAAA,CAAG,EAAE,MAAM,CAAA;AAC/B;AAEA,IAAM,aAAA,GAAgB,CAAC,KAAA,EAAe,GAAA,KAAyB;AAC7D,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,KAAA,MAAW,EAAA,IAAM,KAAK,IAAI,CAAA,GAAI,MAAM,MAAA,IAAU,EAAA,KAAO,KAAA,CAAM,CAAC,CAAA,EAAG,CAAA,EAAA;AAC/D,EAAA,OAAO,MAAM,KAAA,CAAM,MAAA;AACrB,CAAA;AAGA,IAAM,cAAA,GAAyC;AAAA,EAC7C,GAAA,EAAK,WAAA;AAAA,EAAa,SAAA,EAAW,WAAA;AAAA,EAAa,UAAA,EAAY,WAAA;AAAA,EACtD,EAAA,EAAI,YAAA;AAAA,EAAc,eAAA,EAAiB,YAAA;AAAA,EAAc,OAAA,EAAS,YAAA;AAAA,EAC1D,OAAA,EAAS,UAAA;AAAA,EAAY,MAAA,EAAQ,UAAA;AAAA,EAAY,IAAA,EAAM,UAAA;AAAA,EAC/C,CAAA,EAAG,OAAA;AAAA,EAAS,CAAA,EAAG,QAAA;AAAA,EAAU,IAAA,EAAM,SAAA;AAAA,EAAW,KAAA,EAAO,SAAA;AAAA,EAAW,KAAA,EAAO,SAAA;AAAA,EACnE,YAAA,EAAc,OAAA;AAAA,EAAS,SAAA,EAAW,OAAA;AAAA,EAAS,IAAA,EAAM,OAAA;AAAA;AAAA,EAEjD,cAAA,EAAgB,KAAA;AAAA,EAAO,cAAA,EAAgB,KAAA;AAAA,EAAO,WAAA,EAAa,KAAA;AAAA,EAAO,YAAA,EAAc,KAAA;AAAA,EAAO,cAAA,EAAgB,KAAA;AAAA,EAAO,WAAA,EAAa,KAAA;AAAA,EAAO,YAAA,EAAc,KAAA;AAAA,EAChJ,SAAA,EAAW,YAAA;AAAA,EAAc,OAAA,EAAS;AACpC,CAAA;AAGO,SAAS,WAAA,CAAY,MAAc,KAAA,EAAyC;AACjF,EAAA,MAAM,CAAA,GAAI,KAAK,WAAA,EAAY;AAC3B,EAAA,MAAM,KAAA,GAAQ,eAAe,CAAC,CAAA;AAC9B,EAAA,IAAI,KAAA,IAAS,KAAA,CAAM,QAAA,CAAS,KAAK,GAAG,OAAO,KAAA;AAC3C,EAAA,IAAI,IAAA,GAA4C,IAAA;AAChD,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,MAAM,EAAA,GAAK,EAAE,WAAA,EAAY;AACzB,IAAA,MAAM,CAAA,GAAI,QAAA,CAAS,CAAA,EAAG,EAAE,CAAA;AACxB,IAAA,MAAM,KAAA,GAAQ,CAAA,IAAK,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,EAAE,MAAA,EAAQ,EAAA,CAAG,MAAM,CAAA,GAAI,CAAC,CAAC,CAAA;AAE5E,IAAA,MAAM,eAAgB,CAAA,CAAE,MAAA,IAAU,CAAA,IAAK,aAAA,CAAc,GAAG,EAAE,CAAA,IAAO,EAAA,CAAG,MAAA,IAAU,KAAK,CAAA,CAAE,MAAA,GAAS,GAAG,MAAA,IAAU,CAAA,CAAE,SAAS,EAAE,CAAA;AACxH,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,YAAA,EAAc;AAC7B,IAAA,MAAM,QAAQ,KAAA,GAAQ,CAAA,GAAI,KAAK,EAAA,CAAG,MAAA,GAAS,EAAE,MAAA,IAAU,GAAA;AACvD,IAAA,IAAI,CAAC,QAAQ,KAAA,GAAQ,IAAA,CAAK,OAAO,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AAAA,EACrD;AACA,EAAA,OAAO,IAAA,GAAO,KAAK,CAAA,GAAI,IAAA;AACzB;AAMO,SAAS,kBAAA,CAAmB,KAAA,EAAe,IAAA,EAAiC,KAAA,EAAgC;AACjH,EAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACvC,EAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,EAAG;AACnC,IAAA,IAAI,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,EAAG;AACzB,IAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,GAAA,EAAK,KAAK,CAAA;AACpC,IAAA,OAAA,CAAQ,KAAK,CAAA,cAAA,EAAiB,KAAK,CAAA,kBAAA,EAAqB,GAAG,IAAI,KAAA,GAAQ,CAAA,sBAAA,EAAoB,KAAK,CAAA,EAAA,CAAA,GAAO,EAAE,CAAA,SAAA,EAAY,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,EAC1I;AACF","file":"chunk-NHICCDTC.js","sourcesContent":["/** Edit distance, small inputs only. */\nfunction distance(a: string, b: string): number {\n const dp = Array.from({ length: a.length + 1 }, (_, i) => [i, ...Array(b.length).fill(0)] as number[]);\n for (let j = 1; j <= b.length; j++) dp[0]![j] = j;\n for (let i = 1; i <= a.length; i++) {\n for (let j = 1; j <= b.length; j++) {\n dp[i]![j] = Math.min(dp[i - 1]![j]! + 1, dp[i]![j - 1]! + 1, dp[i - 1]![j - 1]! + (a[i - 1] === b[j - 1] ? 0 : 1));\n // swapping two neighbouring letters (sacle / scale) counts as one slip\n if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) dp[i]![j] = Math.min(dp[i]![j]!, dp[i - 2]![j - 2]! + 1);\n }\n }\n return dp[a.length]![b.length]!;\n}\n\nconst isSubsequence = (small: string, big: string): boolean => {\n let i = 0;\n for (const ch of big) if (i < small.length && ch === small[i]) i++;\n return i === small.length;\n};\n\n/** Names AI authors commonly guess, mapped to the real option (only suggested when the real option exists here). */\nconst COMMON_ALIASES: Record<string, string> = {\n fps: 'frameRate', framerate: 'frameRate', frame_rate: 'frameRate',\n bg: 'background', backgroundcolor: 'background', bgcolor: 'background',\n seconds: 'duration', length: 'duration', time: 'duration',\n w: 'width', h: 'height', cols: 'columns', sweep: 'degrees', angle: 'degrees',\n playbackrate: 'speed', timescale: 'speed', rate: 'speed',\n // blend modes by the names other programs use\n 'linear-dodge': 'add', 'linear dodge': 'add', lineardodge: 'add', linear_dodge: 'add', 'plus-lighter': 'add', pluslighter: 'add', plus_lighter: 'add',\n luminance: 'luminosity', exclude: 'exclusion',\n};\n\n/** The valid name an author most likely meant by `name` (alias, typo, abbreviation or case slip), or null. */\nexport function suggestName(name: string, valid: readonly string[]): string | null {\n const n = name.toLowerCase();\n const alias = COMMON_ALIASES[n];\n if (alias && valid.includes(alias)) return alias;\n let best: { v: string; score: number } | null = null;\n for (const v of valid) {\n const lv = v.toLowerCase();\n const d = distance(n, lv);\n const close = d <= Math.max(1, Math.floor(Math.min(n.length, lv.length) / 3));\n // an abbreviation (cols → columns) or a longer phrase containing the name (fadeIn → in)\n const abbreviation = (n.length >= 3 && isSubsequence(n, lv)) || (lv.length >= 2 && n.length > lv.length && n.includes(lv));\n if (!close && !abbreviation) continue;\n const score = close ? d : 3 + (lv.length - n.length) / 100; // typos first, then abbreviations\n if (!best || score < best.score) best = { v, score };\n }\n return best ? best.v : null;\n}\n\n/**\n * Unknown option keys are silently ignored by JavaScript, which is how a guessed name like `cols`\n * or `fps` quietly does nothing. Say so, and say what was probably meant.\n */\nexport function warnUnknownOptions(where: string, opts: object | undefined | null, valid: readonly string[]): void {\n if (!opts || typeof opts !== 'object') return;\n for (const key of Object.keys(opts)) {\n if (valid.includes(key)) continue;\n const guess = suggestName(key, valid);\n console.warn(`pixi-effects: ${where}: unknown option \"${key}\"${guess ? ` — did you mean \"${guess}\"?` : ''} (valid: ${valid.join(', ')})`);\n }\n}\n"]}
|