framefields 2.2.0-beta.0 → 2.2.0-beta.2

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.
Files changed (33) hide show
  1. package/dist/effects/index.d.mts +1 -1
  2. package/dist/effects/index.mjs +1 -1
  3. package/dist/index--1jnkoBj.d.mts.map +1 -1
  4. package/dist/index-DgJIBC_N.d.mts.map +1 -1
  5. package/dist/{index-Bg8HIYAO.d.mts → index-HyzpJrHe.d.mts} +49 -17
  6. package/dist/index-HyzpJrHe.d.mts.map +1 -0
  7. package/dist/index.d.mts +2 -2
  8. package/dist/index.d.mts.map +1 -1
  9. package/dist/index.mjs +3 -3
  10. package/dist/preview/index.mjs +1 -1
  11. package/dist/{preview-RdaP0Rfv.mjs → preview-BXu7FyvN.mjs} +2 -2
  12. package/dist/{preview-RdaP0Rfv.mjs.map → preview-BXu7FyvN.mjs.map} +1 -1
  13. package/dist/preview-engine/{chunk-FFQ3K5FW.mjs → chunk-3NXJVSZY.mjs} +1 -1
  14. package/dist/preview-engine/{chunk-UKBUEM3G.mjs → chunk-6RSP766E.mjs} +1 -1
  15. package/dist/preview-engine/chunk-HCZCEOV5.mjs +174 -0
  16. package/dist/preview-engine/chunk-X6HUH6K4.mjs +1 -0
  17. package/dist/preview-engine/effects.mjs +1 -1
  18. package/dist/preview-engine/framefields.mjs +1 -1
  19. package/dist/preview-engine/player.mjs +1 -1
  20. package/dist/preview-engine/{renderers-57WDL6XN.mjs → renderers-NYK2NDZJ.mjs} +1 -1
  21. package/dist/renderer/index.mjs +1 -1
  22. package/dist/renderer-BkV_xpMb.mjs +3 -0
  23. package/dist/{renderer-mp1NN5zk.mjs → renderer-CqT2vxa4.mjs} +1263 -171
  24. package/dist/renderer-CqT2vxa4.mjs.map +1 -0
  25. package/dist/{renderer-CfR0GeQL.mjs → renderer-Dqdega0-.mjs} +6 -3
  26. package/dist/renderer-Dqdega0-.mjs.map +1 -0
  27. package/package.json +58 -55
  28. package/dist/index-Bg8HIYAO.d.mts.map +0 -1
  29. package/dist/preview-engine/chunk-3GNP7TJH.mjs +0 -98
  30. package/dist/preview-engine/chunk-VRGREB3V.mjs +0 -1
  31. package/dist/renderer-CfR0GeQL.mjs.map +0 -1
  32. package/dist/renderer-GSFP7v2z.mjs +0 -3
  33. package/dist/renderer-mp1NN5zk.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index-DgJIBC_N.d.mts","names":["a","isStaticVisualMedia","c","RenderParams","i","calculateLayerTransform","l","computeRenderParams","n","framesToSeconds","o","resolveLayerDuration","r","secondsToFrames","s","CropRegion","t","formatTimecode","u","getFontUrl","VirtualMediaData","GPUCommandEncoder","GPUTexture","GPUTextureView","NodeRenderProps","RenderContextValue","drawCompositionTree","Promise","CompositionStateStore","compositionStateStore","SceneProps","AudioClip","decodeAudioSource","Float32Array","mixAudioTracks","GPUDevice","NormalizationContext","normalizeTimeline","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default"],"sources":["../../compositions/dist/index.d.mts","../../../nodes/node-audio-compressor/dist/renderer.d.mts","../../../nodes/node-audio-delay/dist/renderer.d.mts","../../../nodes/node-audio-fade/dist/renderer.d.mts","../../../nodes/node-audio-noise-gate/dist/renderer.d.mts","../../../nodes/node-audio-parametric-eq/dist/renderer.d.mts","../../../nodes/node-audio-reverb/dist/renderer.d.mts","../../../nodes/node-stereo-panning/dist/renderer.d.mts","../src/audio/synth/sfx.ts","../src/audio/synth/wav-encoder.ts"],"sourcesContent":["import { a as isStaticVisualMedia, c as RenderParams, i as calculateLayerTransform, l as computeRenderParams, n as framesToSeconds, o as resolveLayerDuration, r as secondsToFrames, s as CropRegion, t as formatTimecode, u as getFontUrl } from \"./timing-Bx-hzLFR.mjs\";\nimport { VirtualMediaData } from \"@framefields/core\";\nimport { GPUCommandEncoder, GPUTexture, GPUTextureView, NodeRenderProps } from \"@framefields/node-sdk\";\nimport { RenderContextValue } from \"@framefields/webgpu-renderers\";\n\n//#region src/compositions/canvas-composition.d.ts\ndeclare function drawCompositionTree(ctx: RenderContextValue, encoder: GPUCommandEncoder, targetView: GPUTextureView, targetTexture: GPUTexture, targetWidth: number, targetHeight: number, virtualMedia: VirtualMediaData, props: NodeRenderProps, inheritedSeekOffset?: number, inheritedClockOffset?: number): Promise<void>;\n//#endregion\n//#region src/compositions/composition-state.d.ts\ndeclare class CompositionStateStore {\n private states;\n private listeners;\n setState(key: string, frame: number, fps: number, isPlaying?: boolean): void;\n getState(key: string): {\n frame: number;\n fps: number;\n isPlaying: boolean;\n };\n subscribe(key: string, listener: () => void): () => void;\n clearKey(key: string): void;\n private notify;\n}\ndeclare const compositionStateStore: CompositionStateStore;\ninterface SceneProps {\n viewportWidth: number;\n viewportHeight: number;\n containerWidth?: number;\n containerHeight?: number;\n virtualMedia?: VirtualMediaData;\n backgroundColor?: string;\n type?: \"Video\" | \"Audio\" | \"Image\";\n volume?: number;\n renderId?: string;\n frame?: number;\n fps?: number;\n [key: string]: unknown;\n}\n//#endregion\n//#region src/utils/audio-extractor.d.ts\ninterface AudioClip {\n sourceUrl: string;\n destStartFrame: number;\n trimStartSec: number;\n durationFrames: number;\n speed: number;\n volume: number;\n}\n/**\n * Decodes all audio samples from a given source URL into raw Float32 mono/stereo channel buffers.\n */\ndeclare function decodeAudioSource(url: string): Promise<{\n channels: Float32Array[];\n sampleRate: number;\n} | null>;\n/**\n * Recursively parses the VirtualMediaData tree and mixes all active audio tracks\n * into a single unified stereo PCM stream (Float32Array channels).\n */\ndeclare function mixAudioTracks(virtualMedia: VirtualMediaData, fps: number, targetSampleRate?: number, device?: GPUDevice, renderId?: string): Promise<{\n channels: Float32Array[];\n sampleRate: number;\n}>;\n//#endregion\n//#region src/utils/normalization.d.ts\n/**\n * NormalizationContext carries the accumulated offsets and limits\n * as we traverse down the virtual media tree.\n */\ninterface NormalizationContext {\n timeOffsetSec: number;\n durationLimitMs?: number;\n}\n/**\n * normalizeTimeline recurses through the virtual media tree and \"absorbs\"\n * generic timeline-shifting operations into standard properties\n * of their children.\n */\ndeclare function normalizeTimeline(vv: VirtualMediaData, fps: number, context?: NormalizationContext): VirtualMediaData;\n//#endregion\nexport { AudioClip, CropRegion, RenderParams, SceneProps, calculateLayerTransform, compositionStateStore, computeRenderParams, decodeAudioSource, drawCompositionTree, formatTimecode, framesToSeconds, getFontUrl, isStaticVisualMedia, mixAudioTracks, normalizeTimeline, resolveLayerDuration, secondsToFrames };\n//# sourceMappingURL=index.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map"],"mappings":";;;;;;ASKA;AAOA;;iBT8CiBkC,cAAAA,CS7CS,YAAA,ET6CoBd,gBS7CpB,EAAA,GAAA,EAAA,MAAA,EAAA,gBAAA,CAAA,EAAA,MAAA,EAAA,MAAA,CAAA,ET6CuFe,SS7CvF,EAAA,QAAA,CAAA,EAAA,MAAA,CAAA,ET6CsHR,OS7CtH,CAAA;EAChB,QAAA,ET6CEM,YS7CF,EAAA;EACP,UAAA,EAAA,MAAA;CAAM,CAAA;;;;;;;;;;cRZKM,YAAUE,SAASH;AD+CuB;;;;cE/C1CM,YAAUE,SAASH;AF+CuB;;;;cG/C1CM,YAAUE,SAASH;AH+CuB;;;;cI/C1CM,YAAUE,SAASH;AJ+CuB;;;;cK/C1CM,YAAUE,SAASH;AL+CuB;;;;cM/C1CM,YAAUE,SAASH;AN+CuB;;;;cO/C1CM,UAAUE,SAASH;AP+CuB;;;;;;;;AAAA;;;;;AAQ+F,UQhDtI,UAAA,CRgDsI;;;;ECvDzI7B,WAAAA,CAAAA,EAAsE,MAAA;;;KOexE,YAAA,IAAgB,cAAc;ANf5BK,UMiBG,WAAA,CNjBmE;;;YMoBzE;ALvBuE;UK0BjE,gBAAA;;;EJvBHU;;;;ACHoE;;;;ACGpEU,iBEsLE,SAAA,CFtLiBD,OAAAA,EEuLvB,UFvLcG,EAAAA,GAAQ,EEwL1B,gBFxL0B,CAAA,EEyL7B,WFzL6B;;iBEiOhB,UAAA,SACP,gCACU;;ADtO+D;;;iBC6PlE,SAAA,SACP;;;;;;;ARpMQhC,USrDA,gBAAA,CTqDc;EAAed,UAAAA,CAAAA,EAAAA,MAAAA;;;;;iBS9C9B,eAAA,YACJ,cAAc,yBAChB,mBACP"}
1
+ {"version":3,"file":"index-DgJIBC_N.d.mts","names":["a","isStaticVisualMedia","c","RenderParams","i","calculateLayerTransform","l","computeRenderParams","n","framesToSeconds","o","resolveLayerDuration","r","secondsToFrames","s","CropRegion","t","formatTimecode","u","getFontUrl","VirtualMediaData","GPUCommandEncoder","GPUTexture","GPUTextureView","NodeRenderProps","RenderContextValue","drawCompositionTree","Promise","CompositionStateStore","compositionStateStore","SceneProps","AudioClip","decodeAudioSource","Float32Array","mixAudioTracks","GPUDevice","NormalizationContext","normalizeTimeline","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default"],"sources":["../../compositions/dist/index.d.mts","../../../nodes/node-audio-compressor/dist/renderer.d.mts","../../../nodes/node-audio-delay/dist/renderer.d.mts","../../../nodes/node-audio-fade/dist/renderer.d.mts","../../../nodes/node-audio-noise-gate/dist/renderer.d.mts","../../../nodes/node-audio-parametric-eq/dist/renderer.d.mts","../../../nodes/node-audio-reverb/dist/renderer.d.mts","../../../nodes/node-stereo-panning/dist/renderer.d.mts","../src/audio/synth/sfx.ts","../src/audio/synth/wav-encoder.ts"],"sourcesContent":["import { a as isStaticVisualMedia, c as RenderParams, i as calculateLayerTransform, l as computeRenderParams, n as framesToSeconds, o as resolveLayerDuration, r as secondsToFrames, s as CropRegion, t as formatTimecode, u as getFontUrl } from \"./timing-Bx-hzLFR.mjs\";\nimport { VirtualMediaData } from \"@framefields/core\";\nimport { GPUCommandEncoder, GPUTexture, GPUTextureView, NodeRenderProps } from \"@framefields/node-sdk\";\nimport { RenderContextValue } from \"@framefields/webgpu-renderers\";\n\n//#region src/compositions/canvas-composition.d.ts\ndeclare function drawCompositionTree(ctx: RenderContextValue, encoder: GPUCommandEncoder, targetView: GPUTextureView, targetTexture: GPUTexture, targetWidth: number, targetHeight: number, virtualMedia: VirtualMediaData, props: NodeRenderProps, inheritedSeekOffset?: number, inheritedClockOffset?: number): Promise<void>;\n//#endregion\n//#region src/compositions/composition-state.d.ts\ndeclare class CompositionStateStore {\n private states;\n private listeners;\n setState(key: string, frame: number, fps: number, isPlaying?: boolean): void;\n getState(key: string): {\n frame: number;\n fps: number;\n isPlaying: boolean;\n };\n subscribe(key: string, listener: () => void): () => void;\n clearKey(key: string): void;\n private notify;\n}\ndeclare const compositionStateStore: CompositionStateStore;\ninterface SceneProps {\n viewportWidth: number;\n viewportHeight: number;\n containerWidth?: number;\n containerHeight?: number;\n virtualMedia?: VirtualMediaData;\n backgroundColor?: string;\n type?: \"Video\" | \"Audio\" | \"Image\";\n volume?: number;\n renderId?: string;\n frame?: number;\n fps?: number;\n [key: string]: unknown;\n}\n//#endregion\n//#region src/utils/audio-extractor.d.ts\ninterface AudioClip {\n sourceUrl: string;\n destStartFrame: number;\n trimStartSec: number;\n durationFrames: number;\n speed: number;\n volume: number;\n}\n/**\n * Decodes all audio samples from a given source URL into raw Float32 mono/stereo channel buffers.\n */\ndeclare function decodeAudioSource(url: string): Promise<{\n channels: Float32Array[];\n sampleRate: number;\n} | null>;\n/**\n * Recursively parses the VirtualMediaData tree and mixes all active audio tracks\n * into a single unified stereo PCM stream (Float32Array channels).\n */\ndeclare function mixAudioTracks(virtualMedia: VirtualMediaData, fps: number, targetSampleRate?: number, device?: GPUDevice, renderId?: string): Promise<{\n channels: Float32Array[];\n sampleRate: number;\n}>;\n//#endregion\n//#region src/utils/normalization.d.ts\n/**\n * NormalizationContext carries the accumulated offsets and limits\n * as we traverse down the virtual media tree.\n */\ninterface NormalizationContext {\n timeOffsetSec: number;\n durationLimitMs?: number;\n}\n/**\n * normalizeTimeline recurses through the virtual media tree and \"absorbs\"\n * generic timeline-shifting operations into standard properties\n * of their children.\n */\ndeclare function normalizeTimeline(vv: VirtualMediaData, fps: number, context?: NormalizationContext): VirtualMediaData;\n//#endregion\nexport { AudioClip, CropRegion, RenderParams, SceneProps, calculateLayerTransform, compositionStateStore, computeRenderParams, decodeAudioSource, drawCompositionTree, formatTimecode, framesToSeconds, getFontUrl, isStaticVisualMedia, mixAudioTracks, normalizeTimeline, resolveLayerDuration, secondsToFrames };\n//# sourceMappingURL=index.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map"],"mappings":";;;;;;ASKA;AAOA;;iBT8CiBkC,cAAAA,CS7CS,YAAA,ET6CoBd,gBS7CpB,EAAA,GAAA,EAAA,MAAA,EAAA,gBAAA,CAAA,EAAA,MAAA,EAAA,MAAA,CAAA,ET6CuFe,SS7CvF,EAAA,QAAA,CAAA,EAAA,MAAA,CAAA,ET6CsHR,OS7CtH,CAAA;EAChB,QAAA,ET6CEM,YS7CF,EAAA;EACP,UAAA,EAAA,MAAA;CAAM,CAAA;;;;;;;;;;cRZKM,YAAUE,SAASH;AD+CuB;;;;cE/C1CM,YAAUE,SAASH;AF+CuB;;;;cG/C1CM,YAAUE,SAASH;AH+CuB;;;;cI/C1CM,YAAUE,SAASH;AJ+CuB;;;;cK/C1CM,YAAUE,SAASH;AL+CuB;;;;cM/C1CM,YAAUE,SAASH;AN+CuB;;;;cO/C1CM,UAAUE,SAASH;AP+CuB;;;;;;;;AAAA;;;;;AAQ+F,UQhDtI,UAAA,CRgDsI;;;;ECvDzI7B,WAAAA,CAAAA,EAAsE,MAAA;;;KOexE,YAAA,IAAgB,cAAc;ANf5BK,UMiBG,WAAA,CNjBgBD;;;YMoBtB;ALvBuE;UK0BjE,gBAAA;;;EJvBHW;;;;ACHoE;;;;ACGpEU,iBEsLE,SAAA,CFtLiBD,OAAAA,EEuLvB,UFvLcG,EAAAA,GAAQ,EEwL1B,gBFxL0B,CAAA,EEyL7B,WFzL6B;;iBEiOhB,UAAA,SACP,gCACU;;ADtO+D;;;iBC6PlE,SAAA,SACP;;;;;;;ARpMQhC,USrDA,gBAAA,CTqDc;EAAed,UAAAA,CAAAA,EAAAA,MAAAA;;;;;iBS9C9B,eAAA,YACJ,cAAc,yBAChB,mBACP"}
@@ -327,7 +327,7 @@ declare class TemporalDeflickerPipeline {
327
327
  * Pass 2: Non-Maximum Suppression (NMS) & Dual-Threshold Hysteresis
328
328
  */
329
329
  //#endregion
330
- //#region ../vision/dist/index-CoAN0xxG.d.mts
330
+ //#region ../vision/dist/index-BycS0CY1.d.mts
331
331
  type VisionModelKey = "rtmdet-ins-t" | "rtmdet-ins-s" | "rtmdet-ins-m" | "rtmo-t" | "rtmo-s" | "rtmo-m" | "selfie-square" | "selfie-landscape";
332
332
  /** Which decoder a model's outputs feed (see runner/vision-runner.ts). */
333
333
  type VisionModelFamily = "rtmdet-ins" | "rtmo" | "selfie";
@@ -442,7 +442,10 @@ interface VisionTensor {
442
442
  }
443
443
  interface VisionTensorInput {
444
444
  readonly name: string;
445
+ /** Ignored (may be empty) when `gpuBuffer` is set. */
445
446
  readonly data: Float32Array;
447
+ /** The input already on the GPU; only for providers with a `device` (it must be that device's). */
448
+ readonly gpuBuffer?: GPUBuffer;
446
449
  readonly dims: readonly number[];
447
450
  }
448
451
  type VisionTensorOutputs = Readonly<Record<string, VisionTensor>>;
@@ -452,16 +455,19 @@ interface VisionSession {
452
455
  }
453
456
  interface SessionProvider {
454
457
  readonly kind: "node" | "webgpu";
458
+ /** The GPU device sessions run on, when they accept `gpuBuffer` inputs from it. */
459
+ readonly device?: GPUDevice;
455
460
  createSession(modelBytes: Uint8Array): Promise<VisionSession>;
456
461
  }
457
462
  /**
458
- * Sets the provider runners use when none is passed, for hosts that create
459
- * runners indirectly (e.g. a browser player rendering vision nodes). `undefined`
460
- * restores the default, onnxruntime-node.
463
+ * The GPU device the default provider runs WebGPU sessions on — the renderer's,
464
+ * so frames can go from its textures into the models without a CPU round trip.
465
+ * Applies to sessions created afterwards; without it, onnxruntime-web creates
466
+ * its own device.
461
467
  */
462
468
 
463
469
  declare namespace types_d_exports {
464
- export { InstanceMask, LandmarkCoordinateSignals, ObjectAnchorName, PersonMatte, PinToLandmarkOptions, PinToObjectOptions, PoseKeypoint, PosePerson, PoseResult, SegmentationResult, VisionAnalysisClassSummary, VisionAnalysisReport, VisionAnalysisTrackSummary, VisionImageInput, VisionInputSource, VisionSummary };
470
+ export { InstanceMask, LandmarkCoordinateSignals, ObjectAnchorName, PersonMatte, PinToLandmarkOptions, PinToObjectOptions, PoseKeypoint, PosePerson, PoseResult, SegmentationResult, VisionAnalysisClassSummary, VisionAnalysisReport, VisionAnalysisTrackSummary, VisionFrame, VisionGpuImage, VisionImageInput, VisionInputSource, VisionSummary, isGpuImage };
465
471
  }
466
472
  type VisionInputSource = string | {
467
473
  inputHandleId?: string;
@@ -474,6 +480,20 @@ interface VisionImageInput {
474
480
  readonly width: number;
475
481
  readonly height: number;
476
482
  }
483
+ /**
484
+ * A frame that is already on the GPU: an 8-bit RGBA/BGRA texture of `device`.
485
+ * When the runner's sessions run on the same device (see `setVisionDevice`),
486
+ * preprocessing happens on the GPU and the frame never comes back to the CPU;
487
+ * otherwise the runner reads it back.
488
+ */
489
+ interface VisionGpuImage {
490
+ readonly texture: GPUTexture;
491
+ readonly device: GPUDevice;
492
+ readonly width: number;
493
+ readonly height: number;
494
+ }
495
+ type VisionFrame = VisionImageInput | VisionGpuImage;
496
+ declare function isGpuImage(image: VisionFrame): image is VisionGpuImage;
477
497
  /** Instance segmentation mask aligned to the ORIGINAL source frame. */
478
498
  interface InstanceMask {
479
499
  readonly category: string;
@@ -604,12 +624,14 @@ interface VisionRunnerOptions {
604
624
  /** Mirror origin for model downloads (see VisionModelStore). */
605
625
  readonly baseUrl?: string;
606
626
  readonly timeoutMs?: number;
607
- /** Session backend. Default: onnxruntime-node (CPU). Browser: `createWebGPUProvider()`. */
627
+ /** Session backend. Default: WebGPU when possible, else onnxruntime-node (CPU); see `AutoSessionProvider`. Browser: `createWebGPUProvider()`. */
608
628
  readonly provider?: SessionProvider;
609
629
  /** Inject a model store (tests, shared caches). Overrides modelsDir/baseUrl/timeoutMs. */
610
630
  readonly store?: VisionModelStore;
611
631
  readonly onProgress?: (key: VisionModelKey, bytesLoaded: number, totalBytes: number) => void;
612
632
  }
633
+ /** Options that only change how outputs are decoded — not which model runs. */
634
+ type VisionDecodeOptions = Pick<VisionRunnerOptions, "confidence" | "classes" | "maskThreshold" | "featherRadius">;
613
635
  /**
614
636
  * Lazy vision runner.
615
637
  *
@@ -624,15 +646,19 @@ declare class VisionRunner {
624
646
  readonly classes?: readonly string[];
625
647
  readonly maskThreshold: number;
626
648
  readonly featherRadius?: number;
627
- private readonly _store;
628
- private readonly _provider;
629
- private readonly _sessions;
630
- private readonly _tensorScratch;
631
- /** One RTMDet-Ins pass per frame buffer, shared by detect() and segment(). */
632
- private _instancePass?;
649
+ private readonly _core;
650
+ /** False for derived runners: their sessions belong to the runner they came from. */
651
+ private readonly _ownsCore;
633
652
  private constructor();
634
653
  /** Cheap: no downloads, no sessions, no side effects. */
635
654
  static create(options?: VisionRunnerOptions): VisionRunner;
655
+ /**
656
+ * A runner with other decode options (confidence, classes, mask threshold,
657
+ * feather) that shares this runner's models, sessions and per-frame RTMDet-Ins
658
+ * pass — e.g. one per layer, without loading a model twice. Its `close()` is a
659
+ * no-op; closing this runner releases the shared sessions.
660
+ */
661
+ derive(options: VisionDecodeOptions): VisionRunner;
636
662
  get modelsDir(): string;
637
663
  /** Every registry model keyed to its current download state (downloaded → "ready"). */
638
664
  get downloadStatus(): ReadonlyMap<VisionModelKey, ModelDownloadStatus>;
@@ -644,17 +670,23 @@ declare class VisionRunner {
644
670
  */
645
671
  preload(tasks?: readonly VisionTask[]): Promise<void>;
646
672
  /** COCO-80 boxes (sorted by score, source pixels). Masks are not decoded. */
647
- detect(image: VisionImageInput): Promise<readonly DetectedObject[]>;
673
+ detect(image: VisionFrame): Promise<readonly DetectedObject[]>;
648
674
  /** COCO-80 boxes plus a frame-aligned soft mask per instance. */
649
- segment(image: VisionImageInput): Promise<SegmentationResult>;
675
+ segment(image: VisionFrame): Promise<SegmentationResult>;
650
676
  /** COCO-17 keypoints per person (source pixels), highest score first. */
651
- pose(image: VisionImageInput): Promise<PoseResult>;
677
+ pose(image: VisionFrame): Promise<PoseResult>;
652
678
  /** Person-vs-background alpha for the whole frame (Selfie Segmenter). */
653
- matte(image: VisionImageInput): Promise<PersonMatte>;
679
+ matte(image: VisionFrame): Promise<PersonMatte>;
654
680
  close(): void;
655
681
  private instancePass;
656
682
  private instanceDecodeOptions;
683
+ /**
684
+ * Runs one model on one image. Runs of the same model are queued: they share
685
+ * the input scratch buffer, and one run already uses the session's threads.
686
+ */
657
687
  private infer;
688
+ private inferNow;
689
+ private gpuInput;
658
690
  private session;
659
691
  }
660
692
  //#endregion
@@ -4541,4 +4573,4 @@ declare class Modulate extends Effect<ModulateProps> {
4541
4573
  }
4542
4574
  //#endregion
4543
4575
  export { Blur as $, CannyComputePipeline as $n, NoiseGeneratorProps as $t, MotionBlur as A, ObjectAnchorName as An, _default$22 as Ar, Flip as At, SelectiveColorProps as B, PoseResult as Bn, LayerStyleInnerShadow as Bt, HighPass as C, COCO17_BONES as Cn, _default$15 as Cr, CornerPin as Ct, LevelsProps as D, InstanceMask as Dn, _default$19 as Dr, DisplacementMapProps as Dt, Levels as E, COCO_CLASSES as En, _default$18 as Er, DisplacementMap as Et, Relight3DProps as F, ObjectTrackSignals as Fn, _default$26 as Fr, LayerStyle as Ft, TileOffsetEdgeMode as G, TemporalObjectTracker as Gn, LiquifyOperationsItem as Gt, ShadowsHighlightsProps as H, SegmentationResult as Hn, LayerStyleProps as Ht, SSAO as I, PersonMatte as In, _default$27 as Ir, LayerStyleBevelEmboss as It, UnsharpMaskProps as J, VisionNode as Jn, MaskMathProps as Jt, TileOffsetProps as K, VisionAnalysisReport as Kn, LiquifyProps as Kt, SSAOProps as L, PinToLandmarkOptions as Ln, _default$28 as Lr, LayerStyleColorOverlay as Lt, PBRGlass as M, ObjectBoundingBoxSignals as Mn, _default$24 as Mr, KenBurns as Mt, PBRGlassProps as N, ObjectCollectionSignals as Nn, _default$25 as Nr, KenBurnsKeyframesItem as Nt, Modulate as O, LandmarkCoordinateSignals as On, _default$20 as Or, ExtractLUT as Ot, Relight3D as P, ObjectKinematicsSignals as Pn, rendererNode as Pr, KenBurnsProps as Pt, effectMeta as Q, pinNodeToObject as Qn, NoiseGenerator as Qt, SelectiveColor as R, PinToObjectOptions as Rn, _default$29 as Rr, LayerStyleDropShadow as Rt, HalftoneScreenProps as S, VignetteProps as Sn, _default$14 as Sr, ColorKeyProps as St, LevelChannel as T, COCO17_KEYPOINT_NAMES as Tn, _default$17 as Tr, CornerPinProps as Tt, TemporalDeflicker as U, SegmentationTexturePool as Un, LayerStyleStroke as Ut, ShadowsHighlights as V, PoseSkeletonRenderer as Vn, LayerStyleOuterGlow as Vt, TileOffset as W, SpatialLandmarkTransformer as Wn, Liquify as Wt, VisionProps as X, analyzeSequence as Xn, MeshWarpPointsItem as Xt, Vision as Y, VisionRunner as Yn, MeshWarp as Yt, effectFactories as Z, pinNodeToLandmark as Zn, MeshWarpProps as Zt, GradientMapProps as _, RotateProps as _n, _default$9 as _r, ChannelSplitter as _t, Crop as a, PatchHeal as an, TensorSource as ar, AudioFade as at, HalftoneMode as b, TonalShift as bn, _default$12 as br, ColorBalanceProps as bt, CurvesChannelPoint as c, ProceduralVFX as cn, _default as cr, AudioNoiseGateProps as ct, DeflickerProps as d, RefineEdgeProps as dn, _default$3 as dr, AudioReverb as dt, Paint as en, ControlNetMultiplexer as er, BlurProps as et, DepthOfField as f, RefractionCaustics3D as fn, _default$4 as fr, AudioReverbProps as ft, GradientMap as g, Rotate as gn, _default$8 as gr, ChannelMergerProps as gt, FilmGrainProps as h, ResizerScalerProps as hn, _default$7 as hr, ChannelMerger as ht, AudioSignalExtractorProps as i, PaintStrokesItemOption3 as in, TensorPipeline as ir, AudioDelayProps as it, MotionBlurProps as j, ObjectAnchorsSignals as jn, _default$23 as jr, FlipProps as jt, ModulateProps as k, MaskTrackSignals as kn, _default$21 as kr, ExtractLUTProps as kt, CurvesProps as l, ProceduralVFXProps as ln, _default$1 as lr, AudioParametricEq as lt, FilmGrain as m, ResizerScaler as mn, _default$6 as mr, CameraParallax3DProps as mt, ApplyLUTProps as n, PaintStrokesItemOption1 as nn, OpticalFlowComputePipeline as nr, AudioCompressorProps as nt, CropProps as o, PatchHealPatchesItem as on, TensorViewExport as or, AudioFadeProps as ot, DepthOfFieldProps as p, RefractionCaustics3DProps as pn, _default$5 as pr, CameraParallax3D as pt, UnsharpMask as q, VisionBundle as qn, MaskMath as qt, AudioSignalExtractor as r, PaintStrokesItemOption2 as rn, TemporalDeflickerPipeline as rr, AudioDelay as rt, Curves as s, PatchHealProps as sn, EffectProp as sr, AudioNoiseGate as st, ApplyLUT as t, PaintProps as tn, DepthNormalsComputePipeline as tr, AudioCompressor as tt, CustomEffect as u, RefineEdge as un, _default$2 as ur, AudioParametricEqProps as ut, GradientMapStop as v, StereoPanning as vn, _default$10 as vr, ChannelSplitterProps as vt, HighPassProps as w, COCO17_KEYPOINTS as wn, _default$16 as wr, CornerPinPointsItem as wt, HalftoneScreen as x, Vignette as xn, _default$13 as xr, ColorKey as xt, HalftoneDotShape as y, StereoPanningProps as yn, _default$11 as yr, ColorBalance as yt, SelectiveColorAdjustment as z, PoseLandmarkSignals as zn, _default$30 as zr, LayerStyleInnerGlow as zt };
4544
- //# sourceMappingURL=index-Bg8HIYAO.d.mts.map
4576
+ //# sourceMappingURL=index-HyzpJrHe.d.mts.map