@workglow/util 0.2.20 → 0.2.22

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 (58) hide show
  1. package/dist/browser.js +5 -2
  2. package/dist/browser.js.map +3 -3
  3. package/dist/bun.js +5 -2
  4. package/dist/bun.js.map +3 -3
  5. package/dist/json-schema/SchemaUtils.d.ts.map +1 -1
  6. package/dist/json-schema/SchemaValidation.d.ts +6 -0
  7. package/dist/json-schema/SchemaValidation.d.ts.map +1 -1
  8. package/dist/media/cpuImage.d.ts +15 -16
  9. package/dist/media/cpuImage.d.ts.map +1 -1
  10. package/dist/media/encode.d.ts +3 -5
  11. package/dist/media/encode.d.ts.map +1 -1
  12. package/dist/media/gpuImage.d.ts +21 -30
  13. package/dist/media/gpuImage.d.ts.map +1 -1
  14. package/dist/media/imageCacheCodec.d.ts +19 -7
  15. package/dist/media/imageCacheCodec.d.ts.map +1 -1
  16. package/dist/media/imageRasterCodecRegistry.d.ts +3 -3
  17. package/dist/media/imageRasterCodecRegistry.d.ts.map +1 -1
  18. package/dist/media/imageTypes.d.ts +0 -16
  19. package/dist/media/imageTypes.d.ts.map +1 -1
  20. package/dist/media/imageValue.d.ts +44 -0
  21. package/dist/media/imageValue.d.ts.map +1 -0
  22. package/dist/media/imageValue.test.d.ts +7 -0
  23. package/dist/media/imageValue.test.d.ts.map +1 -0
  24. package/dist/media/imageValueSchema.d.ts +15 -0
  25. package/dist/media/imageValueSchema.d.ts.map +1 -0
  26. package/dist/media/previewBudget.d.ts +10 -13
  27. package/dist/media/previewBudget.d.ts.map +1 -1
  28. package/dist/media/rawPixelBuffer.d.ts +20 -0
  29. package/dist/media/rawPixelBuffer.d.ts.map +1 -0
  30. package/dist/media/{sharpImage.node.d.ts → sharpImage.server.d.ts} +42 -14
  31. package/dist/media/sharpImage.server.d.ts.map +1 -0
  32. package/dist/media/webGpuImage.browser.d.ts +11 -14
  33. package/dist/media/webGpuImage.browser.d.ts.map +1 -1
  34. package/dist/media-browser.d.ts +9 -3
  35. package/dist/media-browser.d.ts.map +1 -1
  36. package/dist/media-browser.js +429 -342
  37. package/dist/media-browser.js.map +14 -14
  38. package/dist/media-node.d.ts +8 -6
  39. package/dist/media-node.d.ts.map +1 -1
  40. package/dist/media-node.js +479 -254
  41. package/dist/media-node.js.map +14 -14
  42. package/dist/node.js +5 -2
  43. package/dist/node.js.map +3 -3
  44. package/dist/schema-entry.js +166 -165
  45. package/dist/schema-entry.js.map +5 -5
  46. package/dist/worker/WorkerManager.d.ts.map +1 -1
  47. package/dist/worker-browser.js +5 -2
  48. package/dist/worker-browser.js.map +3 -3
  49. package/dist/worker-bun.js +5 -2
  50. package/dist/worker-bun.js.map +3 -3
  51. package/dist/worker-node.js +5 -2
  52. package/dist/worker-node.js.map +3 -3
  53. package/package.json +1 -1
  54. package/dist/media/gpuImageSchema.d.ts +0 -8
  55. package/dist/media/gpuImageSchema.d.ts.map +0 -1
  56. package/dist/media/sharpImage.bun.d.ts +0 -7
  57. package/dist/media/sharpImage.bun.d.ts.map +0 -1
  58. package/dist/media/sharpImage.node.d.ts.map +0 -1
@@ -1,29 +1,29 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/media/imageCacheCodec.ts", "../src/media/gpuImage.ts", "../src/media/imageRasterCodecRegistry.ts", "../src/media/cpuImage.ts", "../src/di/Container.ts", "../src/di/ServiceRegistry.ts", "../src/di/InputResolverRegistry.ts", "../src/media/imageHydrationResolver.ts", "../src/media/color.ts", "../src/media/encode.ts", "../src/media/filterRegistry.ts", "../src/media/gpuDevice.browser.ts", "../src/media/gpuImageSchema.ts", "../src/media/imageTypes.ts", "../src/media/MediaRawImage.ts", "../src/media/previewBudget.ts", "../src/media/shaderRegistry.browser.ts", "../src/media/texturePool.browser.ts", "../src/media/webGpuImage.browser.ts", "../src/media-browser.ts"],
3
+ "sources": ["../src/media/imageCacheCodec.ts", "../src/media/imageRasterCodecRegistry.ts", "../src/media/imageValue.ts", "../src/di/Container.ts", "../src/di/ServiceRegistry.ts", "../src/di/InputResolverRegistry.ts", "../src/media/imageHydrationResolver.ts", "../src/media/color.ts", "../src/media/cpuImage.ts", "../src/media/encode.ts", "../src/media/filterRegistry.ts", "../src/media/gpuDevice.browser.ts", "../src/media/gpuImage.ts", "../src/media/imageValueSchema.ts", "../src/media/MediaRawImage.ts", "../src/media/previewBudget.ts", "../src/media/shaderRegistry.browser.ts", "../src/media/texturePool.browser.ts", "../src/media/webGpuImage.browser.ts", "../src/media-browser.ts"],
4
4
  "sourcesContent": [
5
- "/**\n * @copyright\n * Copyright 2026 Steven Roussey\n * All Rights Reserved\n */\nimport { registerPortCodec } from \"@workglow/util\";\nimport { CpuImage } from \"./cpuImage\";\nimport type { GpuImage } from \"./gpuImage\";\nimport type { ImageBinary, ImageChannels } from \"./imageTypes\";\n\nexport interface CachedImage {\n kind: \"image-binary\";\n width: number;\n height: number;\n channels: ImageChannels;\n data: Uint8ClampedArray;\n}\n\nregisterPortCodec<GpuImage, CachedImage>(\"image\", {\n async serialize(value) {\n if (typeof (value as unknown as { materialize?: unknown }).materialize !== \"function\") {\n return value as unknown as CachedImage;\n }\n const bin: ImageBinary = await value.materialize();\n return {\n kind: \"image-binary\",\n width: bin.width,\n height: bin.height,\n channels: bin.channels,\n data: bin.data,\n };\n },\n async deserialize(cached) {\n if ((cached as unknown as { kind?: string }).kind !== \"image-binary\") {\n return cached as unknown as GpuImage;\n }\n return CpuImage.fromImageBinary({\n data: cached.data,\n width: cached.width,\n height: cached.height,\n channels: cached.channels,\n }) as unknown as GpuImage;\n },\n});\n",
6
- "/**\n * @copyright\n * Copyright 2026 Steven Roussey\n * All Rights Reserved\n */\nimport type { ImageBinary, ImageChannels } from \"./imageTypes\";\n\nexport type GpuImageBackend = \"webgpu\" | \"sharp\" | \"cpu\";\nexport type GpuImageEncodeFormat = \"png\" | \"jpeg\" | \"webp\";\n\nexport interface GpuImage {\n readonly width: number;\n readonly height: number;\n readonly channels: ImageChannels;\n readonly backend: GpuImageBackend;\n /** Ratio of current dims to user's intended (pre-preview-downscale) dims.\n * 1.0 in run mode and any image not derived from a previewSource downscale.\n * < 1.0 after previewSource has fired. Pixel-space task params are\n * multiplied by this before dispatch in preview mode (no-op at 1.0). */\n readonly previewScale: number;\n materialize(): Promise<ImageBinary>;\n toCanvas(canvas: HTMLCanvasElement | OffscreenCanvas): Promise<void>;\n encode(format: GpuImageEncodeFormat, quality?: number): Promise<Uint8Array>;\n /**\n * Increment the refcount by `n` (default 1). Returns `this` for chaining.\n * No-op for backends without external resource lifetime (CpuImage, SharpImage).\n * Throws if the resource has already been reclaimed (count was already 0).\n */\n retain(n?: number): this;\n /**\n * Decrement the refcount by 1. When it hits 0, reclaim the underlying resource\n * (e.g., return the GPU texture to the pool). Throws on release-after-reclaim.\n * No-op for backends without external resource lifetime.\n */\n release(): void;\n}\n\nexport interface GpuImageStatic {\n fromImageBinary(bin: ImageBinary): GpuImage;\n fromImageBinaryAsync?(bin: ImageBinary): Promise<GpuImage>;\n fromDataUri(dataUri: string): Promise<GpuImage>;\n fromBlob(blob: Blob): Promise<GpuImage>;\n fromImageBitmap?(bitmap: ImageBitmap): Promise<GpuImage>;\n}\n\n// Cross-bundle singleton — Vite/Rolldown can produce multiple bundle copies\n// of this file. Without sharing through globalThis, registrations from\n// media-browser.ts could land in one copy while the codec / hydrator query\n// another and throw \"GpuImage.fromDataUri is not registered\".\nconst GLOBAL_FACTORY_KEY = Symbol.for(\"@workglow/util/media/gpuImageFactory\");\nconst _g = globalThis as Record<symbol, unknown>;\nif (!_g[GLOBAL_FACTORY_KEY]) {\n _g[GLOBAL_FACTORY_KEY] = {} as Record<string, unknown>;\n}\nconst factory = _g[GLOBAL_FACTORY_KEY] as Record<string, unknown>;\n\nexport function registerGpuImageFactory<K extends keyof GpuImageStatic>(\n key: K,\n fn: GpuImageStatic[K],\n): void {\n factory[key] = fn;\n}\n\n/**\n * Returns the registered factory function for `key`, or `undefined` if it\n * has not been registered. Prefer this over accessing `GpuImage[key]` directly\n * when the factory is optional — the Proxy throws on missing registrations.\n */\nexport function getGpuImageFactory<K extends keyof GpuImageStatic>(\n key: K,\n): GpuImageStatic[K] | undefined {\n const fn = factory[key];\n return typeof fn === \"function\" ? (fn as GpuImageStatic[K]) : undefined;\n}\n\nexport const GpuImage: GpuImageStatic = new Proxy({} as GpuImageStatic, {\n get(_t, prop) {\n if (typeof prop !== \"string\" || prop === \"then\") return undefined;\n const fn = factory[prop];\n if (typeof fn !== \"function\") {\n throw new Error(`GpuImage.${prop} is not registered. Import the platform entry point.`);\n }\n return fn;\n },\n});\n",
7
- "/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ImageBinary } from \"./imageTypes\";\n\nexport interface ImageRasterCodec {\n decodeDataUri(dataUri: string): Promise<ImageBinary>;\n encodeDataUri(image: ImageBinary, mimeType: string): Promise<string>;\n}\n\n// Cross-bundle singleton Vite/Rolldown can produce multiple bundle copies\n// of this file (e.g. one inlined into the app entry, one inlined into a\n// worker entry). Without sharing through globalThis, tasks would register\n// the codec into one copy while the runner queries another and throws.\nconst GLOBAL_CODEC_KEY = Symbol.for(\"@workglow/util/media/imageRasterCodec\");\nconst _g = globalThis as Record<symbol, unknown>;\n\ninterface CodecSlot { value: ImageRasterCodec | null; }\nif (!_g[GLOBAL_CODEC_KEY]) {\n _g[GLOBAL_CODEC_KEY] = { value: null } satisfies CodecSlot;\n}\nconst slot = _g[GLOBAL_CODEC_KEY] as CodecSlot;\n\nexport function registerImageRasterCodec(next: ImageRasterCodec): void {\n slot.value = next;\n}\n\nexport function getImageRasterCodec(): ImageRasterCodec {\n if (!slot.value) {\n throw new Error(\n \"Image raster codec is not registered. Ensure you import @workglow/tasks from the browser or Node entry (dist/browser.js or dist/node.js), or call registerImageRasterCodec() during startup.\"\n );\n }\n return slot.value;\n}\n",
8
- "/**\n * @copyright\n * Copyright 2026 Steven Roussey\n * All Rights Reserved\n */\nimport type { ImageBinary } from \"./imageTypes\";\nimport {\n registerGpuImageFactory,\n type GpuImage as IGpuImage,\n type GpuImageEncodeFormat,\n} from \"./gpuImage\";\nimport { getImageRasterCodec } from \"./imageRasterCodecRegistry\";\n\nconst FORMAT_TO_MIME: Record<GpuImageEncodeFormat, string> = {\n png: \"image/png\",\n jpeg: \"image/jpeg\",\n webp: \"image/webp\",\n};\n\nfunction dataUriToBytes(dataUri: string): Uint8Array {\n const comma = dataUri.indexOf(\",\");\n const b64 = dataUri.slice(comma + 1);\n const bin = atob(b64);\n const bytes = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++) bytes[i] = bin.charCodeAt(i);\n return bytes;\n}\n\nfunction expandToRgba(bin: ImageBinary): Uint8ClampedArray {\n if (bin.channels === 4) return bin.data;\n const px = bin.width * bin.height;\n const out = new Uint8ClampedArray(px * 4);\n if (bin.channels === 3) {\n for (let i = 0; i < px; i++) {\n out[i * 4 + 0] = bin.data[i * 3 + 0] ?? 0;\n out[i * 4 + 1] = bin.data[i * 3 + 1] ?? 0;\n out[i * 4 + 2] = bin.data[i * 3 + 2] ?? 0;\n out[i * 4 + 3] = 255;\n }\n } else if (bin.channels === 1) {\n for (let i = 0; i < px; i++) {\n const g = bin.data[i] ?? 0;\n out[i * 4 + 0] = g;\n out[i * 4 + 1] = g;\n out[i * 4 + 2] = g;\n out[i * 4 + 3] = 255;\n }\n }\n return out;\n}\n\nexport class CpuImage implements IGpuImage {\n readonly backend = \"cpu\" as const;\n\n private _previewScale: number;\n\n private constructor(private readonly bin: ImageBinary, previewScale: number = 1.0) {\n this._previewScale = previewScale;\n }\n\n get width(): number {\n return this.bin.width;\n }\n get height(): number {\n return this.bin.height;\n }\n get channels(): ImageBinary[\"channels\"] {\n return this.bin.channels;\n }\n\n get previewScale(): number {\n return this._previewScale;\n }\n\n /** @internal — only previewSource and ImageTextTask.executePreview (without-\n * background source case) may call this. */\n _setPreviewScale(scale: number): this {\n this._previewScale = scale;\n return this;\n }\n\n async materialize(): Promise<ImageBinary> {\n return this.bin;\n }\n\n /** @internal — synchronous accessor used by per-filter cpu ops to avoid awaiting materialize(). */\n getBinary(): ImageBinary {\n return this.bin;\n }\n\n async toCanvas(canvas: HTMLCanvasElement | OffscreenCanvas): Promise<void> {\n if (typeof ImageData === \"undefined\") {\n throw new Error(\"CpuImage.toCanvas requires a browser environment with ImageData\");\n }\n const rgba = expandToRgba(this.bin);\n const id = new ImageData(new Uint8ClampedArray(rgba.buffer as ArrayBuffer, rgba.byteOffset, rgba.byteLength), this.bin.width, this.bin.height);\n if (canvas.width !== this.bin.width) canvas.width = this.bin.width;\n if (canvas.height !== this.bin.height) canvas.height = this.bin.height;\n const ctx = canvas.getContext(\"2d\") as\n | CanvasRenderingContext2D\n | OffscreenCanvasRenderingContext2D\n | null;\n if (!ctx) throw new Error(\"CpuImage.toCanvas could not acquire a 2D context\");\n ctx.putImageData(id, 0, 0);\n }\n\n async encode(format: GpuImageEncodeFormat, _quality?: number): Promise<Uint8Array> {\n const codec = getImageRasterCodec();\n const dataUri = await codec.encodeDataUri(this.bin, FORMAT_TO_MIME[format]);\n return dataUriToBytes(dataUri);\n }\n\n retain(_n: number = 1): this {\n // No-op: CpuImage owns no GPU/native resources.\n return this;\n }\n\n release(): void {\n // No-op: CpuImage owns no GPU/native resources.\n }\n\n static fromImageBinary(bin: ImageBinary, previewScale: number = 1.0): CpuImage {\n return new CpuImage(bin, previewScale);\n }\n}\n\n// Universal fallback: register CpuImage as the synchronous-factory implementation.\n// Subsequent backends (WebGpuImage, SharpImage) intentionally do NOT override this\n// because their fromImageBinary is async; the input resolver awaits them directly.\nregisterGpuImageFactory(\"fromImageBinary\", CpuImage.fromImageBinary);\n",
5
+ "/**\n * @copyright\n * Copyright 2026 Steven Roussey\n * All Rights Reserved\n */\nimport { registerPortCodec } from \"@workglow/util\";\nimport type { BrowserImageValue, ImageValue, NodeImageFormat } from \"./imageValue\";\nimport { imageValueFromBuffer, isBrowserImageValue, isNodeImageValue } from \"./imageValue\";\n\n/**\n * Cache codec for `format: \"image\"` ports.\n *\n * Produces a JSON-safe wire form so persistent caches (e.g. `TaskOutputTabularRepository`,\n * which stringifies before writing to disk) can round-trip image outputs. The wire form\n * carries encoded bytes plus dimensions and `previewScale`; the decoded shape is the\n * platform-native `ImageValue` (browser → `BrowserImageValue`, node/bun → `NodeImageValue`).\n *\n * Cross-platform read is supported: a node-written cache entry decodes to a\n * `BrowserImageValue` when read in the browser (via `createImageBitmap`), and vice versa.\n */\nexport interface ImageValueWire {\n readonly __imageValueWire: 1;\n readonly format: NodeImageFormat;\n readonly base64: string;\n readonly width: number;\n readonly height: number;\n readonly previewScale: number;\n}\n\nfunction isImageValueWire(v: unknown): v is ImageValueWire {\n if (v === null || typeof v !== \"object\") return false;\n const o = v as Record<string, unknown>;\n return (\n o.__imageValueWire === 1 &&\n typeof o.base64 === \"string\" &&\n (o.format === \"png\" || o.format === \"jpeg\" || o.format === \"raw-rgba\") &&\n typeof o.width === \"number\" &&\n typeof o.height === \"number\" &&\n typeof o.previewScale === \"number\"\n );\n}\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n if (typeof Buffer !== \"undefined\") {\n return Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength).toString(\"base64\");\n }\n let bin = \"\";\n for (let i = 0; i < bytes.length; i++) bin += String.fromCharCode(bytes[i] ?? 0);\n return btoa(bin);\n}\n\nfunction base64ToBytes(b64: string): Uint8Array {\n if (typeof Buffer !== \"undefined\") {\n const buf = Buffer.from(b64, \"base64\");\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n const bin = atob(b64);\n const out = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++) out[i] = bin.charCodeAt(i);\n return out;\n}\n\nasync function browserToPngBase64(value: BrowserImageValue): Promise<string> {\n if (typeof OffscreenCanvas === \"undefined\") {\n throw new Error(\"imageCacheCodec.serialize: BrowserImageValue requires OffscreenCanvas\");\n }\n const off = new OffscreenCanvas(value.width, value.height);\n const ctx = off.getContext(\"2d\");\n if (!ctx) throw new Error(\"imageCacheCodec.serialize: could not acquire 2D context\");\n ctx.drawImage(value.bitmap, 0, 0);\n const blob = await off.convertToBlob({ type: \"image/png\" });\n const bytes = new Uint8Array(await blob.arrayBuffer());\n return bytesToBase64(bytes);\n}\n\nasync function wireToBrowserImageValue(wire: ImageValueWire): Promise<BrowserImageValue> {\n if (typeof createImageBitmap !== \"function\") {\n throw new Error(\"imageCacheCodec.deserialize: browser path requires createImageBitmap\");\n }\n const bytes = base64ToBytes(wire.base64);\n if (wire.format === \"raw-rgba\") {\n if (typeof ImageData === \"undefined\") {\n throw new Error(\"imageCacheCodec.deserialize: raw-rgba decode requires ImageData\");\n }\n // The DOM `ImageData` constructor wants `Uint8ClampedArray<ArrayBuffer>`\n // but `bytes.buffer` widens to `ArrayBufferLike`. Cast through unknown:\n // we just produced these bytes via base64 decode, so they're not a\n // SharedArrayBuffer at runtime.\n const data = new Uint8ClampedArray(\n bytes.buffer,\n bytes.byteOffset,\n bytes.byteLength,\n ) as unknown as Uint8ClampedArray<ArrayBuffer>;\n const imageData = new ImageData(data, wire.width, wire.height);\n const bitmap = await createImageBitmap(imageData);\n return { bitmap, width: wire.width, height: wire.height, previewScale: wire.previewScale };\n }\n const mime = wire.format === \"jpeg\" ? \"image/jpeg\" : \"image/png\";\n const blob = new Blob([bytes.buffer as ArrayBuffer], { type: mime });\n const bitmap = await createImageBitmap(blob);\n return { bitmap, width: wire.width, height: wire.height, previewScale: wire.previewScale };\n}\n\n/**\n * The codec is registered for the `image` format prefix, so it also receives\n * sub-formats like `image:data-uri` (used by `FileLoaderTask` to emit base64\n * data URLs). Strings are already JSON-safe, so they pass through both\n * directions unchanged. The wire form is only used for live `ImageValue`\n * inputs that need to survive `JSON.stringify`.\n */\nregisterPortCodec<ImageValue | string, ImageValueWire | string>(\"image\", {\n async serialize(value): Promise<ImageValueWire | string> {\n if (typeof value === \"string\") return value;\n if (isNodeImageValue(value)) {\n return {\n __imageValueWire: 1,\n format: value.format,\n base64: value.buffer.toString(\"base64\"),\n width: value.width,\n height: value.height,\n previewScale: value.previewScale,\n };\n }\n if (isBrowserImageValue(value)) {\n const base64 = await browserToPngBase64(value);\n return {\n __imageValueWire: 1,\n format: \"png\",\n base64,\n width: value.width,\n height: value.height,\n previewScale: value.previewScale,\n };\n }\n throw new Error(\"imageCacheCodec.serialize: value is not an ImageValue or string\");\n },\n\n async deserialize(wire): Promise<ImageValue | string> {\n if (typeof wire === \"string\") return wire;\n if (!isImageValueWire(wire)) {\n throw new Error(\"imageCacheCodec.deserialize: input is not an ImageValueWire or string\");\n }\n if (typeof Buffer !== \"undefined\") {\n return imageValueFromBuffer(\n Buffer.from(wire.base64, \"base64\"),\n wire.format,\n wire.width,\n wire.height,\n wire.previewScale,\n );\n }\n return wireToBrowserImageValue(wire);\n },\n});\n",
6
+ "/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { RawPixelBuffer } from \"./rawPixelBuffer\";\n\nexport interface ImageRasterCodec {\n decodeDataUri(dataUri: string): Promise<RawPixelBuffer>;\n encodeDataUri(image: RawPixelBuffer, mimeType: string): Promise<string>;\n}\n\n// Cross-bundle singleton — Vite/Rolldown can produce multiple bundle copies\n// of this file (e.g. one inlined into the app entry, one inlined into a\n// worker entry). Without sharing through globalThis, tasks would register\n// the codec into one copy while the runner queries another and throws.\nconst GLOBAL_CODEC_KEY = Symbol.for(\"@workglow/util/media/imageRasterCodec\");\nconst _g = globalThis as Record<symbol, unknown>;\n\ninterface CodecSlot { value: ImageRasterCodec | null; }\nif (!_g[GLOBAL_CODEC_KEY]) {\n _g[GLOBAL_CODEC_KEY] = { value: null } satisfies CodecSlot;\n}\nconst slot = _g[GLOBAL_CODEC_KEY] as CodecSlot;\n\nexport function registerImageRasterCodec(next: ImageRasterCodec): void {\n slot.value = next;\n}\n\nexport function getImageRasterCodec(): ImageRasterCodec {\n if (!slot.value) {\n throw new Error(\n \"Image raster codec is not registered. Ensure you import @workglow/tasks from the browser or Node entry (dist/browser.js or dist/node.js), or call registerImageRasterCodec() during startup.\"\n );\n }\n return slot.value;\n}\n",
7
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { getImageRasterCodec } from \"./imageRasterCodecRegistry\";\n\nexport type NodeImageFormat = \"png\" | \"jpeg\" | \"raw-rgba\";\n\nexport interface ImageValueBase {\n readonly width: number;\n readonly height: number;\n readonly previewScale: number;\n}\n\nexport interface BrowserImageValue extends ImageValueBase {\n readonly bitmap: ImageBitmap;\n}\n\nexport interface NodeImageValue extends ImageValueBase {\n readonly buffer: Buffer;\n readonly format: NodeImageFormat;\n}\n\nexport type ImageValue = BrowserImageValue | NodeImageValue;\n\nexport function imageValueFromBitmap(\n bitmap: ImageBitmap,\n width: number,\n height: number,\n previewScale: number = 1.0\n): BrowserImageValue {\n return { bitmap, width, height, previewScale };\n}\n\nexport function imageValueFromBuffer(\n buffer: Buffer,\n format: NodeImageFormat,\n width: number,\n height: number,\n previewScale: number = 1.0\n): NodeImageValue {\n return { buffer, format, width, height, previewScale };\n}\n\nexport function isImageValue(v: unknown): v is ImageValue {\n return isBrowserImageValue(v) || isNodeImageValue(v);\n}\n\nexport function isBrowserImageValue(v: unknown): v is BrowserImageValue {\n if (v === null || typeof v !== \"object\") return false;\n const o = v as Record<string, unknown>;\n return (\n typeof o.width === \"number\" &&\n typeof o.height === \"number\" &&\n typeof o.previewScale === \"number\" &&\n typeof ImageBitmap !== \"undefined\" &&\n o.bitmap instanceof ImageBitmap\n );\n}\n\nexport function isNodeImageValue(v: unknown): v is NodeImageValue {\n if (v === null || typeof v !== \"object\") return false;\n const o = v as Record<string, unknown>;\n return (\n typeof o.width === \"number\" &&\n typeof o.height === \"number\" &&\n typeof o.previewScale === \"number\" &&\n typeof Buffer !== \"undefined\" &&\n Buffer.isBuffer(o.buffer) &&\n (o.format === \"png\" || o.format === \"jpeg\" || o.format === \"raw-rgba\")\n );\n}\n\n/**\n * Best-effort normalization at boundaries (input resolver, builder hook).\n * Accepts the wire forms an `ImageValue` port may receive:\n * - an existing `ImageValue` (passthrough)\n * - a `data:` URI (browser: decoded via `createImageBitmap`; node: encoded\n * bytes wrapped in a `NodeImageValue`, with dimensions probed via the\n * registered raster codec)\n * - a `Blob` (browser only)\n * - an `ImageBitmap` (browser only)\n * Returns `undefined` for unrecognized shapes.\n *\n * Note: a raw `Buffer` is intentionally not handled here — callers with\n * encoded bytes plus a format hint should construct one via\n * `imageValueFromBuffer(...)` directly.\n *\n * String dispatch is platform-agnostic; non-string platform-specific shapes\n * are tested via `typeof` guards so the same module loads on browser and node.\n */\nexport async function normalizeToImageValue(value: unknown): Promise<ImageValue | undefined> {\n if (value === null || value === undefined) return undefined;\n if (isImageValue(value)) return value;\n\n if (typeof Blob !== \"undefined\" && value instanceof Blob) {\n if (typeof createImageBitmap === \"function\") {\n const bitmap = await createImageBitmap(value);\n return imageValueFromBitmap(bitmap, bitmap.width, bitmap.height);\n }\n return undefined;\n }\n\n if (typeof ImageBitmap !== \"undefined\" && value instanceof ImageBitmap) {\n return imageValueFromBitmap(value, value.width, value.height);\n }\n\n if (typeof value === \"string\" && value.startsWith(\"data:\")) {\n if (typeof createImageBitmap === \"function\" && typeof fetch === \"function\") {\n const blob = await (await fetch(value)).blob();\n const bitmap = await createImageBitmap(blob);\n return imageValueFromBitmap(bitmap, bitmap.width, bitmap.height);\n }\n if (typeof Buffer !== \"undefined\") {\n return decodeDataUriToNodeImageValue(value);\n }\n return undefined;\n }\n\n return undefined;\n}\n\nasync function decodeDataUriToNodeImageValue(dataUri: string): Promise<NodeImageValue | undefined> {\n const match = /^data:([^;,]+);base64,(.+)$/.exec(dataUri);\n if (!match) return undefined;\n const mime = match[1] ?? \"image/png\";\n const base64 = match[2] ?? \"\";\n const buffer = Buffer.from(base64, \"base64\");\n const format: NodeImageFormat = /jpe?g/i.test(mime) ? \"jpeg\" : \"png\";\n // Probe dimensions through the registered raster codec. Rethrow any codec\n // failure with the original error as `cause` so the underlying problem\n // (no codec registered, malformed payload, etc.) isn't lost behind the\n // resolver's generic \"unsupported string\" message.\n try {\n const decoded = await getImageRasterCodec().decodeDataUri(dataUri);\n return imageValueFromBuffer(buffer, format, decoded.width, decoded.height);\n } catch (err) {\n throw new Error(\"normalizeToImageValue: failed to probe data URI dimensions\", {\n cause: err,\n });\n }\n}\n",
9
8
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Simple dependency injection container for managing service instances and dependencies\n */\nexport class Container {\n private services: Map<string, any> = new Map();\n private factories: Map<string, () => any> = new Map();\n private singletons: Set<string> = new Set();\n private resolving: string[] = [];\n\n /**\n * Register a service factory\n * @param token The identifier token for the service\n * @param factory A factory function that creates the service\n * @param singleton Whether the service should be a singleton (created once)\n */\n register<T>(token: string, factory: () => T, singleton = true): void {\n this.factories.set(token, factory);\n if (singleton) {\n this.singletons.add(token);\n }\n }\n\n /**\n * Register a service factory only if the token is not already registered.\n * This is an atomic check-and-register to avoid TOCTOU races.\n * @param token The identifier token for the service\n * @param factory A factory function that creates the service\n * @param singleton Whether the service should be a singleton (created once)\n */\n registerIfAbsent<T>(token: string, factory: () => T, singleton = true): void {\n if (this.factories.has(token) || this.services.has(token)) {\n return;\n }\n this.register(token, factory, singleton);\n }\n\n /**\n * Register an instance as a service\n * @param token The identifier token for the service\n * @param instance The instance to register\n */\n registerInstance<T>(token: string, instance: T): void {\n this.services.set(token, instance);\n this.singletons.add(token);\n }\n\n /**\n * Get a service by its token\n * @param token The identifier token for the service\n * @returns The service instance\n */\n get<T>(token: string): T {\n if (this.services.has(token)) {\n return this.services.get(token) as T;\n }\n\n const factory = this.factories.get(token);\n if (!factory) {\n throw new Error(`Service not registered: ${String(token)}`);\n }\n\n if (this.resolving.includes(token)) {\n const cycle = [...this.resolving.slice(this.resolving.indexOf(token)), token];\n throw new Error(`Circular dependency detected: ${cycle.join(\" -> \")}`);\n }\n\n this.resolving.push(token);\n try {\n const instance = factory();\n\n if (this.singletons.has(token)) {\n this.services.set(token, instance);\n }\n\n return instance as T;\n } finally {\n this.resolving.pop();\n }\n }\n\n /**\n * Check if a service is registered\n * @param token The identifier token for the service\n * @returns True if the service is registered\n */\n has(token: string): boolean {\n return this.services.has(token) || this.factories.has(token);\n }\n\n /**\n * Remove a service registration\n * @param token The identifier token for the service\n */\n remove(token: string): void {\n this.services.delete(token);\n this.factories.delete(token);\n this.singletons.delete(token);\n }\n\n /**\n * Dispose all instantiated singleton services and clear registrations.\n * Services implementing dispose(), Symbol.asyncDispose, or Symbol.dispose will be cleaned up.\n */\n async dispose(): Promise<void> {\n const errors: unknown[] = [];\n try {\n for (const service of this.services.values()) {\n if (service == null) continue;\n try {\n if (typeof service[Symbol.asyncDispose] === \"function\") {\n await service[Symbol.asyncDispose]();\n } else if (typeof service[Symbol.dispose] === \"function\") {\n service[Symbol.dispose]();\n } else if (typeof service.dispose === \"function\") {\n await service.dispose();\n }\n } catch (err) {\n errors.push(err);\n }\n }\n } finally {\n this.services.clear();\n this.factories.clear();\n this.singletons.clear();\n }\n if (errors.length > 0) {\n throw new AggregateError(errors, \"One or more services failed to dispose\");\n }\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n await this.dispose();\n }\n\n /**\n * Create a child container that inherits registrations from the parent\n * @returns A new child container\n */\n createChildContainer(): Container {\n const child = new Container();\n\n // Copy all registrations to the child\n this.factories.forEach((factory, token) => {\n child.factories.set(token, factory);\n if (this.singletons.has(token)) {\n child.singletons.add(token);\n }\n });\n\n // Copy all singleton instances to the child\n this.services.forEach((service, token) => {\n if (this.singletons.has(token)) {\n child.services.set(token, service);\n child.singletons.add(token);\n }\n });\n\n return child;\n }\n}\n\n/**\n * Global container instance — shared across all bundle copies of this module\n * via a Symbol.for key so that split entry points (e.g. @workglow/util/media)\n * resolve to the same DI registry as @workglow/util.\n */\nconst GLOBAL_CONTAINER_KEY = Symbol.for(\"@workglow/util/di/globalContainer\");\nconst _g = globalThis as Record<symbol, unknown>;\nif (!_g[GLOBAL_CONTAINER_KEY]) {\n _g[GLOBAL_CONTAINER_KEY] = new Container();\n}\nexport const globalContainer = _g[GLOBAL_CONTAINER_KEY] as Container;\n",
10
9
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { Container, globalContainer } from \"./Container\";\n\n/**\n * Service token type for type-safe dependency injection\n */\nexport interface ServiceToken<T> {\n readonly _type: T;\n readonly id: string;\n}\n\n/**\n * Create a typed service token\n * @param id Unique identifier for the service\n * @returns A typed service token\n */\nexport function createServiceToken<T>(id: string): ServiceToken<T> {\n return { id, _type: null as any };\n}\n\n/**\n * Service registry for managing and accessing services\n */\nexport class ServiceRegistry {\n public container: Container;\n\n /**\n * Create a new service registry\n * @param container Optional container to use (defaults to global container)\n */\n constructor(container: Container = globalContainer) {\n this.container = container;\n }\n\n /**\n * Register a service factory\n * @param token Service token\n * @param factory Factory function to create the service\n * @param singleton Whether the service should be a singleton\n */\n register<T>(token: ServiceToken<T>, factory: () => T, singleton = true): void {\n this.container.register(token.id, factory, singleton);\n }\n\n /**\n * Register a service factory only if the token is not already registered.\n * @param token Service token\n * @param factory Factory function to create the service\n * @param singleton Whether the service should be a singleton\n */\n registerIfAbsent<T>(token: ServiceToken<T>, factory: () => T, singleton = true): void {\n this.container.registerIfAbsent(token.id, factory, singleton);\n }\n\n /**\n * Register a service instance\n * @param token Service token\n * @param instance Service instance to register\n */\n registerInstance<T>(token: ServiceToken<T>, instance: T): void {\n this.container.registerInstance(token.id, instance);\n }\n\n /**\n * Get a service by its token\n * @param token Service token\n * @returns The service instance\n */\n get<T>(token: ServiceToken<T>): T {\n return this.container.get<T>(token.id);\n }\n\n /**\n * Check if a service is registered\n * @param token Service token\n * @returns True if the service is registered\n */\n has<T>(token: ServiceToken<T>): boolean {\n return this.container.has(token.id);\n }\n\n /**\n * Dispose all instantiated services and clear registrations.\n */\n async dispose(): Promise<void> {\n await this.container.dispose();\n }\n}\n\n/**\n * Global service registry instance\n */\nexport const globalServiceRegistry = new ServiceRegistry(globalContainer);\n",
11
10
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ServiceRegistry } from \"./ServiceRegistry\";\nimport { createServiceToken, globalServiceRegistry } from \"./ServiceRegistry\";\n\n/**\n * A resolver function that converts a string ID to an instance.\n * Returns undefined if the resolver cannot handle this format.\n * Throws an error if the ID is not found.\n *\n * @param id The string ID to resolve\n * @param format The full format string (e.g., \"model:TextEmbedding\", \"storage:tabular\")\n * @param registry The service registry to use for lookups\n */\nexport type InputResolverFn = (\n id: string,\n format: string,\n registry: ServiceRegistry\n) => unknown | Promise<unknown>;\n\n/**\n * Service token for the input resolver registry.\n * Maps format prefixes to resolver functions.\n */\nexport const INPUT_RESOLVERS =\n createServiceToken<Map<string, InputResolverFn>>(\"task.input.resolvers\");\n\n// Register default factory if not already registered\nglobalServiceRegistry.registerIfAbsent(\n INPUT_RESOLVERS,\n (): Map<string, InputResolverFn> => new Map(),\n true\n);\n\n/**\n * Gets the global input resolver registry\n * @returns Map of format prefix to resolver function\n */\nexport function getInputResolvers(): Map<string, InputResolverFn> {\n return globalServiceRegistry.get(INPUT_RESOLVERS);\n}\n\n/**\n * Registers an input resolver for a format prefix.\n * The resolver will be called for any format that starts with this prefix.\n *\n * @param formatPrefix The format prefix to match (e.g., \"model\", \"dataset\")\n * @param resolver The resolver function\n *\n * @example\n * ```typescript\n * // Register model resolver\n * registerInputResolver(\"model\", async (id, format, registry) => {\n * const modelRepo = registry.get(MODEL_REPOSITORY);\n * const model = await modelRepo.findByName(id);\n * if (!model) throw new Error(`Model \"${id}\" not found`);\n * return model;\n * });\n *\n * // Register dataset resolver\n * registerInputResolver(\"dataset\", (id, format, registry) => {\n * const datasetType = format.split(\":\")[1]; // \"tabular\", \"vector\", etc.\n * if (datasetType === \"tabular\") {\n * const datasets = registry.get(TABULAR_DATASETS);\n * const dataset = datasets.get(id);\n * if (!dataset) throw new Error(`Dataset \"${id}\" not found`);\n * return dataset;\n * }\n * throw new Error(`Unknown dataset type: ${datasetType}`);\n * });\n * ```\n */\nexport function registerInputResolver(formatPrefix: string, resolver: InputResolverFn): void {\n const resolvers = getInputResolvers();\n resolvers.set(formatPrefix, resolver);\n}\n",
12
- "/**\n * @copyright\n * Copyright 2026 Steven Roussey\n * All Rights Reserved\n */\nimport { registerInputResolver } from \"../di/InputResolverRegistry\";\nimport { GpuImage as GpuImageFactory } from \"./gpuImage\";\nimport type { ServiceRegistry } from \"../di/ServiceRegistry\";\n\n// String-only resolver: invoked when a property's schema has format:\"image\"\n// (or format:\"image:...\"), and the dataflow value is a string. Non-string\n// shapes (Blob, ImageBitmap, ImageBinary) are passed through unchanged by\n// the InputResolver consumers convert them at the call site if needed\n// (e.g. useGpuImage in the builder app).\nasync function resolveImageString(\n id: string,\n _format: string,\n _registry: ServiceRegistry,\n): Promise<unknown> {\n if (typeof id !== \"string\") return id;\n if (id.startsWith(\"data:\")) {\n return GpuImageFactory.fromDataUri(id);\n }\n // Fail loudly for unrecognized string schemes — silently passing the raw\n // string through would crash the consuming task with a confusing TypeError\n // when it called .materialize() on a string. Other URL schemes (http, file,\n // s3, etc.) need their own resolver under a sub-prefix:\n // registerInputResolver(\"image:http\", httpFetcher)\n const preview = id.length > 32 ? `${id.slice(0, 32)}...` : id;\n throw new Error(\n `format:\"image\" resolver received an unsupported string \"${preview}\". ` +\n `Only data: URIs are handled. For other schemes register a sub-resolver, ` +\n `e.g. registerInputResolver(\"image:http\", fn).`,\n );\n}\n\nregisterInputResolver(\"image\", resolveImageString);\n",
11
+ "/**\n * @copyright\n * Copyright 2026 Steven Roussey\n * All Rights Reserved\n */\nimport { registerInputResolver } from \"../di/InputResolverRegistry\";\nimport { normalizeToImageValue } from \"./imageValue\";\nimport type { ServiceRegistry } from \"../di/ServiceRegistry\";\n\n/**\n * Resolver for `format: \"image\"` ports. Accepts the cross-boundary wire\n * forms and normalizes to `ImageValue`. Non-string non-recognized shapes\n * pass through (consumers normalize at their boundary).\n */\nasync function resolveImage(\n id: unknown,\n _format: string,\n _registry: ServiceRegistry,\n): Promise<unknown> {\n const normalized = await normalizeToImageValue(id);\n if (normalized !== undefined) return normalized;\n if (typeof id === \"string\") {\n const preview = id.length > 32 ? `${id.slice(0, 32)}...` : id;\n throw new Error(\n `format:\"image\" resolver received an unsupported string \"${preview}\". ` +\n `Only data: URIs are handled. Register a sub-resolver for other schemes.`,\n );\n }\n return id;\n}\n\nregisterInputResolver(\"image\", resolveImage);\n",
13
12
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport interface ColorObject {\n readonly r: number;\n readonly g: number;\n readonly b: number;\n readonly a: number;\n}\n\nconst HEX_PATTERN = /^#([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;\nconst CSS_RGB_CHANNEL = \"(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)\";\nconst CSS_RGB_ALPHA = \"(?:0(?:\\\\.\\\\d+)?|1(?:\\\\.0+)?)\";\nconst CSS_RGB_PATTERN = new RegExp(\n `^rgba?\\\\(\\\\s*(${CSS_RGB_CHANNEL})\\\\s*,\\\\s*(${CSS_RGB_CHANNEL})\\\\s*,\\\\s*(${CSS_RGB_CHANNEL})\\\\s*(?:,\\\\s*(${CSS_RGB_ALPHA}))?\\\\s*\\\\)$`\n);\n\n/**\n * Parse a `#RGB` / `#RGBA` / `#RRGGBB` / `#RRGGBBAA` hex color into a {@link ColorObject}.\n * Case-insensitive on input. No whitespace tolerance. Shorthand nibbles are doubled.\n * Throws on any malformed input.\n */\nexport function parseHexColor(hex: string): ColorObject {\n if (typeof hex !== \"string\" || !HEX_PATTERN.test(hex)) {\n throw new Error(`Invalid hex color: ${String(hex)}`);\n }\n const body = hex.slice(1);\n const double = (nibble: string): number => parseInt(nibble + nibble, 16);\n if (body.length === 3) {\n return { r: double(body[0]!), g: double(body[1]!), b: double(body[2]!), a: 255 };\n }\n if (body.length === 4) {\n return {\n r: double(body[0]!),\n g: double(body[1]!),\n b: double(body[2]!),\n a: double(body[3]!),\n };\n }\n if (body.length === 6) {\n return {\n r: parseInt(body.slice(0, 2), 16),\n g: parseInt(body.slice(2, 4), 16),\n b: parseInt(body.slice(4, 6), 16),\n a: 255,\n };\n }\n return {\n r: parseInt(body.slice(0, 2), 16),\n g: parseInt(body.slice(2, 4), 16),\n b: parseInt(body.slice(4, 6), 16),\n a: parseInt(body.slice(6, 8), 16),\n };\n}\n\nconst CHANNEL_MIN = 0;\nconst CHANNEL_MAX = 255;\n\nfunction assertChannel(name: string, value: number): void {\n if (!Number.isInteger(value) || value < CHANNEL_MIN || value > CHANNEL_MAX) {\n throw new Error(`Color channel ${name} out of range (0-255 integer): ${value}`);\n }\n}\n\nfunction byteToHex(value: number): string {\n return value.toString(16).padStart(2, \"0\");\n}\n\n/**\n * Emit a {@link ColorObject} as `#RRGGBB` when `a === 255`, otherwise `#RRGGBBAA`.\n * Always lowercase, never shorthand. Throws on non-integer or out-of-range channels.\n */\nexport function toHexColor(c: ColorObject): string {\n assertChannel(\"r\", c.r);\n assertChannel(\"g\", c.g);\n assertChannel(\"b\", c.b);\n assertChannel(\"a\", c.a);\n const head = `#${byteToHex(c.r)}${byteToHex(c.g)}${byteToHex(c.b)}`;\n return c.a === 255 ? head : `${head}${byteToHex(c.a)}`;\n}\n\nfunction isInRangeByte(value: unknown): value is number {\n return typeof value === \"number\" && Number.isInteger(value) && value >= 0 && value <= 255;\n}\n\n/**\n * Type guard for a {@link ColorObject}-shaped value (alpha optional).\n * Does not reject extra properties — JSON Schema validation handles that separately.\n */\nexport function isColorObject(value: unknown): value is ColorObject {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) return false;\n const candidate = value as Record<string, unknown>;\n if (!isInRangeByte(candidate.r)) return false;\n if (!isInRangeByte(candidate.g)) return false;\n if (!isInRangeByte(candidate.b)) return false;\n if (candidate.a !== undefined && !isInRangeByte(candidate.a)) return false;\n return true;\n}\n\n/** Type guard for a hex color string (same regex as `parseHexColor`). */\nexport function isHexColor(value: unknown): value is string {\n return typeof value === \"string\" && HEX_PATTERN.test(value);\n}\n\nfunction parseCssRgbColor(value: string): ColorObject {\n const match = CSS_RGB_PATTERN.exec(value);\n if (!match) {\n throw new Error(`Invalid CSS rgb color: ${String(value)}`);\n }\n\n const r = Number.parseInt(match[1] ?? \"\", 10);\n const g = Number.parseInt(match[2] ?? \"\", 10);\n const b = Number.parseInt(match[3] ?? \"\", 10);\n const alpha = match[4] === undefined ? 1 : Number.parseFloat(match[4]);\n assertChannel(\"r\", r);\n assertChannel(\"g\", g);\n assertChannel(\"b\", b);\n if (!Number.isFinite(alpha) || alpha < 0 || alpha > 1) {\n throw new Error(`Color alpha out of range (0-1 number): ${match[4]}`);\n }\n return { r, g, b, a: Math.round(alpha * 255) };\n}\n\n/**\n * Normalize any accepted wire form to a full {@link ColorObject}. Object inputs\n * default `a` to 255; CSS `rgb(...)` / `rgba(...)` strings use 0-1 alpha.\n * Throws on anything that's not an accepted color value.\n */\nexport function resolveColor(\n value: string | { r: number; g: number; b: number; a?: number }\n): ColorObject {\n if (typeof value === \"string\") {\n if (isHexColor(value)) return parseHexColor(value);\n return parseCssRgbColor(value);\n }\n if (!isColorObject(value)) {\n throw new Error(`Invalid color value: ${JSON.stringify(value)}`);\n }\n return {\n r: value.r,\n g: value.g,\n b: value.b,\n a: value.a ?? 255,\n };\n}\n",
14
- "/**\n * @copyright\n * Copyright 2026 Steven Roussey\n * All Rights Reserved\n */\nimport type { ImageBinary } from \"./imageTypes\";\nimport { getImageRasterCodec } from \"./imageRasterCodecRegistry\";\n\nasync function encodeImageBinaryBytes(bin: ImageBinary, mimeType: string): Promise<Uint8Array> {\n const dataUri = await getImageRasterCodec().encodeDataUri(bin, mimeType);\n const b64 = dataUri.slice(dataUri.indexOf(\",\") + 1);\n const decoded = atob(b64);\n const bytes = new Uint8Array(decoded.length);\n for (let i = 0; i < decoded.length; i++) bytes[i] = decoded.charCodeAt(i);\n return bytes;\n}\n\nexport async function encodeImageBinaryToPng(bin: ImageBinary): Promise<Uint8Array> {\n return encodeImageBinaryBytes(bin, \"image/png\");\n}\n\nexport async function imageBinaryToBase64Png(bin: ImageBinary): Promise<string> {\n const dataUri = await getImageRasterCodec().encodeDataUri(bin, \"image/png\");\n return dataUri.slice(dataUri.indexOf(\",\") + 1);\n}\n\nexport async function imageBinaryToDataUri(bin: ImageBinary, mimeType = \"image/png\"): Promise<string> {\n return getImageRasterCodec().encodeDataUri(bin, mimeType);\n}\n\nexport async function imageBinaryToBlob(bin: ImageBinary, mimeType = \"image/png\"): Promise<Blob> {\n const bytes = await encodeImageBinaryBytes(bin, mimeType);\n return new Blob([bytes.buffer as ArrayBuffer], { type: mimeType });\n}\n",
13
+ "/**\n * @copyright\n * Copyright 2026 Steven Roussey\n * All Rights Reserved\n */\nimport type { ImageChannels } from \"./imageTypes\";\nimport type {\n GpuImage as IGpuImage,\n GpuImageEncodeFormat,\n} from \"./gpuImage\";\nimport type { ImageValue, NodeImageValue } from \"./imageValue\";\nimport { isBrowserImageValue, isNodeImageValue } from \"./imageValue\";\nimport { getImageRasterCodec } from \"./imageRasterCodecRegistry\";\nimport type { RawPixelBuffer } from \"./rawPixelBuffer\";\n\nexport type { RawPixelBuffer } from \"./rawPixelBuffer\";\n\nconst FORMAT_TO_MIME: Record<GpuImageEncodeFormat, string> = {\n png: \"image/png\",\n jpeg: \"image/jpeg\",\n webp: \"image/webp\",\n};\n\nexport class CpuImage implements IGpuImage {\n readonly backend = \"cpu\" as const;\n\n private constructor(private bin: RawPixelBuffer | null) {}\n\n get width(): number {\n if (!this.bin) throw new Error(\"CpuImage.width on a disposed image\");\n return this.bin.width;\n }\n get height(): number {\n if (!this.bin) throw new Error(\"CpuImage.height on a disposed image\");\n return this.bin.height;\n }\n get channels(): ImageChannels {\n if (!this.bin) throw new Error(\"CpuImage.channels on a disposed image\");\n return this.bin.channels;\n }\n\n /** @internal — used by CPU filter ops to read the raw pixel buffer. */\n getBinary(): RawPixelBuffer {\n if (!this.bin) throw new Error(\"CpuImage.getBinary on a disposed image\");\n return this.bin;\n }\n\n static async from(value: ImageValue): Promise<CpuImage> {\n if (isBrowserImageValue(value)) {\n if (typeof OffscreenCanvas === \"undefined\") {\n throw new Error(\"CpuImage.from(BrowserImageValue) requires OffscreenCanvas\");\n }\n const off = new OffscreenCanvas(value.width, value.height);\n const ctx = off.getContext(\"2d\");\n if (!ctx) throw new Error(\"CpuImage.from: could not acquire 2D context\");\n ctx.drawImage(value.bitmap, 0, 0);\n const id = ctx.getImageData(0, 0, value.width, value.height);\n return new CpuImage({ data: id.data, width: value.width, height: value.height, channels: 4 });\n }\n if (isNodeImageValue(value)) {\n const bin = await decodeNodeImageValue(value);\n return new CpuImage(bin);\n }\n throw new Error(\"CpuImage.from: unrecognized ImageValue shape\");\n }\n\n /** @internal — synchronous factory for backends that already have a raw buffer\n * in hand (used by the WGSL CPU fallback). */\n static fromRaw(bin: RawPixelBuffer): CpuImage {\n return new CpuImage(bin);\n }\n\n async toImageValue(previewScale: number): Promise<ImageValue> {\n if (!this.bin) throw new Error(\"CpuImage.toImageValue on a disposed image\");\n if (typeof OffscreenCanvas !== \"undefined\" && typeof createImageBitmap === \"function\") {\n const off = new OffscreenCanvas(this.bin.width, this.bin.height);\n const ctx = off.getContext(\"2d\");\n if (!ctx) throw new Error(\"CpuImage.toImageValue could not acquire a 2D context\");\n const rgba = expandToRgba(this.bin);\n ctx.putImageData(\n new ImageData(new Uint8ClampedArray(rgba.buffer as ArrayBuffer, rgba.byteOffset, rgba.byteLength), this.bin.width, this.bin.height),\n 0,\n 0,\n );\n const bitmap = await createImageBitmap(off);\n const out: ImageValue = {\n bitmap,\n width: this.bin.width,\n height: this.bin.height,\n previewScale,\n } as ImageValue;\n this.bin = null;\n return out;\n }\n // Node fallback: encode to raw-rgba Buffer.\n const rgba = expandToRgba(this.bin);\n const buffer = Buffer.from(rgba.buffer, rgba.byteOffset, rgba.byteLength);\n const out: NodeImageValue = {\n buffer,\n format: \"raw-rgba\",\n width: this.bin.width,\n height: this.bin.height,\n previewScale,\n };\n this.bin = null;\n return out;\n }\n\n async encode(format: GpuImageEncodeFormat, _quality?: number): Promise<Uint8Array> {\n if (!this.bin) throw new Error(\"CpuImage.encode on a disposed image\");\n const codec = getImageRasterCodec();\n const dataUri = await codec.encodeDataUri(this.bin, FORMAT_TO_MIME[format]);\n return dataUriToBytes(dataUri);\n }\n\n dispose(): void {\n this.bin = null;\n }\n}\n\nfunction expandToRgba(bin: RawPixelBuffer): Uint8ClampedArray {\n if (bin.channels === 4) return bin.data;\n const px = bin.width * bin.height;\n const out = new Uint8ClampedArray(px * 4);\n if (bin.channels === 3) {\n for (let i = 0; i < px; i++) {\n out[i * 4 + 0] = bin.data[i * 3 + 0] ?? 0;\n out[i * 4 + 1] = bin.data[i * 3 + 1] ?? 0;\n out[i * 4 + 2] = bin.data[i * 3 + 2] ?? 0;\n out[i * 4 + 3] = 255;\n }\n } else if (bin.channels === 1) {\n for (let i = 0; i < px; i++) {\n const g = bin.data[i] ?? 0;\n out[i * 4 + 0] = g;\n out[i * 4 + 1] = g;\n out[i * 4 + 2] = g;\n out[i * 4 + 3] = 255;\n }\n }\n return out;\n}\n\nfunction dataUriToBytes(dataUri: string): Uint8Array {\n const comma = dataUri.indexOf(\",\");\n const b64 = dataUri.slice(comma + 1);\n const bin = atob(b64);\n const bytes = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++) bytes[i] = bin.charCodeAt(i);\n return bytes;\n}\n\nasync function decodeNodeImageValue(value: NodeImageValue): Promise<RawPixelBuffer> {\n if (value.format === \"raw-rgba\") {\n const data = new Uint8ClampedArray(value.buffer.buffer, value.buffer.byteOffset, value.buffer.byteLength);\n return { data, width: value.width, height: value.height, channels: 4 };\n }\n const codec = getImageRasterCodec();\n const dataUri = `data:image/${value.format};base64,${value.buffer.toString(\"base64\")}`;\n const decoded = await codec.decodeDataUri(dataUri);\n return {\n data: decoded.data,\n width: decoded.width,\n height: decoded.height,\n channels: decoded.channels as ImageChannels,\n };\n}\n",
14
+ "/**\n * @copyright\n * Copyright 2026 Steven Roussey\n * All Rights Reserved\n */\nimport type { RawPixelBuffer } from \"./rawPixelBuffer\";\nimport { getImageRasterCodec } from \"./imageRasterCodecRegistry\";\n\nasync function rawPixelBufferToBytes(bin: RawPixelBuffer, mimeType: string): Promise<Uint8Array> {\n const dataUri = await getImageRasterCodec().encodeDataUri(bin, mimeType);\n const b64 = dataUri.slice(dataUri.indexOf(\",\") + 1);\n const decoded = atob(b64);\n const bytes = new Uint8Array(decoded.length);\n for (let i = 0; i < decoded.length; i++) bytes[i] = decoded.charCodeAt(i);\n return bytes;\n}\n\nexport async function rawPixelBufferToDataUri(\n bin: RawPixelBuffer,\n mimeType = \"image/png\",\n): Promise<string> {\n return getImageRasterCodec().encodeDataUri(bin, mimeType);\n}\n\nexport async function rawPixelBufferToBlob(\n bin: RawPixelBuffer,\n mimeType = \"image/png\",\n): Promise<Blob> {\n const bytes = await rawPixelBufferToBytes(bin, mimeType);\n return new Blob([bytes.buffer as ArrayBuffer], { type: mimeType });\n}\n",
15
15
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type { GpuImage, GpuImageBackend } from \"./gpuImage\";\n\nexport type FilterOpFn<P = unknown> = (image: GpuImage, params: P) => GpuImage;\n\n// Cross-bundle singleton — same pattern as previewBudget.ts. The registry\n// must be process-wide because filter arms and applyFilter consumers can be\n// loaded through different bundle entries that resolve @workglow/util/media\n// to independent module instances. Storing the Map in a globalThis slot\n// keyed by Symbol.for(...) gives them all a single shared registry.\nconst GLOBAL_REGISTRY_KEY = Symbol.for(\"@workglow/util/media/filterRegistry\");\nconst _g = globalThis as Record<symbol, unknown>;\n\nfunction getRegistry(): Map<string, FilterOpFn<unknown>> {\n let reg = _g[GLOBAL_REGISTRY_KEY] as Map<string, FilterOpFn<unknown>> | undefined;\n if (!reg) {\n reg = new Map();\n _g[GLOBAL_REGISTRY_KEY] = reg;\n }\n return reg;\n}\n\nconst key = (backend: GpuImageBackend, filter: string): string => `${backend}:${filter}`;\n\nexport function registerFilterOp<P>(\n backend: GpuImageBackend,\n filter: string,\n fn: FilterOpFn<P>\n): void {\n getRegistry().set(key(backend, filter), fn as FilterOpFn<unknown>);\n}\n\nexport function applyFilter<P>(image: GpuImage, filter: string, params: P): GpuImage {\n const fn = getRegistry().get(key(image.backend, filter));\n if (!fn) {\n throw new Error(\n `applyFilter(\"${filter}\") on backend \"${image.backend}\": no implementation registered. ` +\n `Task-layer fallback should have routed this to \"cpu\" first; this means even the cpu arm is missing. ` +\n `Ensure @workglow/tasks has been imported so its filter-arm side effects run.`\n );\n }\n return fn(image, params);\n}\n\nexport function hasFilterOp(backend: GpuImageBackend, filter: string): boolean {\n return getRegistry().has(key(backend, filter));\n}\n\n/** @internal — test affordance only. */\nexport function _resetFilterRegistryForTests(): void {\n getRegistry().clear();\n}\n",
16
16
  "/**\n * @copyright\n * Copyright 2026 Steven Roussey\n * All Rights Reserved\n */\n\nlet cached: Promise<GPUDevice | null> | null = null;\n\nexport async function getGpuDevice(): Promise<GPUDevice | null> {\n if (cached) return cached;\n cached = (async () => {\n if (typeof navigator === \"undefined\" || !(\"gpu\" in navigator)) return null;\n const adapter = await navigator.gpu.requestAdapter();\n if (!adapter) return null;\n const device = await adapter.requestDevice();\n device.lost.then(() => {\n cached = null;\n });\n return device;\n })();\n return cached;\n}\n\nexport function resetGpuDeviceForTests(): void {\n cached = null;\n}\n",
17
- "/**\n * @copyright\n * Copyright 2026 Steven Roussey\n * All Rights Reserved\n */\nimport type { DataPortSchema } from \"../json-schema/DataPortSchema\";\n\nexport function GpuImageSchema(annotations: Record<string, unknown> = {}): DataPortSchema {\n // Runtime shape is the multi-type form `[\"string\", \"object\"]` so the\n // schema validator accepts every wire form image values take:\n // - string (data: URI; the input resolver hydrates it to a GpuImage)\n // - object (raw ImageBinary, Blob, ImageBitmap, or an already-hydrated\n // GpuImage instance the receiving task hydrates as needed)\n // Validators previously saw a bare `type: \"object\"` and rejected the\n // string form (which is what the property editor produces from file uploads\n // and URL inputs). format: \"image\" remains the signal for the resolver.\n //\n // The cast through `unknown` is needed because DataPortSchemaObject pins\n // `type` to the literal `\"object\"`. Without the cast the inferred return\n // type would widen to DataPortSchemaNonBoolean, which leaks the broader\n // JsonSchema structural type into consumers (FromSchema<typeof X> then\n // emits TS2883 \"name is not portable\" errors). Keeping the public return\n // type as DataPortSchema preserves the consumer experience that worked\n // before this change.\n return {\n type: [\"string\", \"object\"],\n properties: {},\n title: \"Image\",\n description: \"Image (hydrated to GpuImage by the runner)\",\n ...annotations,\n format: \"image\",\n } as unknown as DataPortSchema;\n}\n",
18
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport type ImageChannels = 1 | 3 | 4; // grayscale, rgb, rgba\n\nexport type ImageDataSupport =\n | \"Blob\"\n | \"ImageBinary\"\n | \"ImageBitmap\"\n | \"OffscreenCanvas\"\n | \"VideoFrame\"\n | \"RawImage\"\n | \"DataUri\"\n | \"Sharp\";\n\nexport interface ImageBinary {\n data: Uint8ClampedArray;\n width: number;\n height: number;\n channels: ImageChannels;\n rawChannels?: number | undefined;\n}\n\n/** RGBA pixel buffer (`channels` is always 4). */\nexport type RgbaImageBinary = Readonly<\n Omit<ImageBinary, \"channels\" | \"rawChannels\"> & { readonly channels: 4 }\n>;\n\nexport function parseDataUri(dataUri: string): {\n mimeType: string;\n base64: string;\n} {\n const match = dataUri.match(/^data:([^;]+);base64,(.+)$/);\n if (!match) {\n throw new Error(\"Invalid base64 data URI\");\n }\n\n return {\n mimeType: match[1], // e.g. \"image/png\"\n base64: match[2],\n };\n}\n",
17
+ "/**\n * @copyright\n * Copyright 2026 Steven Roussey\n * All Rights Reserved\n */\nimport type { ImageChannels } from \"./imageTypes\";\nimport type { ImageValue } from \"./imageValue\";\n\nexport type GpuImageBackend = \"webgpu\" | \"sharp\" | \"cpu\";\nexport type GpuImageEncodeFormat = \"png\" | \"jpeg\" | \"webp\";\n\n/**\n * `GpuImage` is a private implementation detail of image tasks: it never\n * crosses a task/engine/worker boundary. Lives only inside an\n * `ImageFilterTask.execute` method body. Cross-boundary currency is\n * `ImageValue`. Use `GpuImage.from(value)` at task entry and\n * `imageValueFromGpu(out, scale)` (or `transferToImageBitmap()` /\n * `toBuffer()` directly) at task exit.\n */\nexport interface GpuImage {\n readonly width: number;\n readonly height: number;\n readonly channels: ImageChannels;\n readonly backend: GpuImageBackend;\n /** Materialize back into a wire-form `ImageValue`. Always returns a fresh\n * ImageValue; the caller is the new owner. */\n toImageValue(previewScale: number): Promise<ImageValue>;\n /** Encode to a compressed image format (png/jpeg/webp). Implementations MAY\n * consume the underlying resource — treat as single-use. */\n encode(format: GpuImageEncodeFormat, quality?: number): Promise<Uint8Array>;\n /** Early cleanup on error paths only. Required because GPU/native resources\n * are not held by GC. The happy path uses `toImageValue()` which transfers\n * ownership; this is the abort/error case. */\n dispose(): void;\n}\n\nexport interface GpuImageStatic {\n /** Bridge from the cross-boundary `ImageValue` to a backend-private GpuImage. */\n from(value: ImageValue): Promise<GpuImage>;\n}\n\nconst GLOBAL_FACTORY_KEY = Symbol.for(\"@workglow/util/media/gpuImageFactory\");\nconst _g = globalThis as Record<symbol, unknown>;\nif (!_g[GLOBAL_FACTORY_KEY]) {\n _g[GLOBAL_FACTORY_KEY] = {} as Record<string, unknown>;\n}\nconst factory = _g[GLOBAL_FACTORY_KEY] as Record<string, unknown>;\n\nexport function registerGpuImageFactory<K extends keyof GpuImageStatic>(\n key: K,\n fn: GpuImageStatic[K],\n): void {\n factory[key] = fn;\n}\n\nexport function getGpuImageFactory<K extends keyof GpuImageStatic>(\n key: K,\n): GpuImageStatic[K] | undefined {\n const fn = factory[key];\n return typeof fn === \"function\" ? (fn as GpuImageStatic[K]) : undefined;\n}\n\nexport const GpuImage: GpuImageStatic = new Proxy({} as GpuImageStatic, {\n get(_t, prop) {\n if (typeof prop !== \"string\" || prop === \"then\") return undefined;\n const fn = factory[prop];\n if (typeof fn !== \"function\") {\n throw new Error(`GpuImage.${prop} is not registered. Import the platform entry point.`);\n }\n return fn;\n },\n});\n",
18
+ "/**\n * @copyright\n * Copyright 2026 Steven Roussey\n * All Rights Reserved\n */\nimport type { DataPortSchema } from \"../json-schema/DataPortSchema\";\n\n/**\n * Schema annotation for `ImageValue` ports. Multi-type form so the\n * validator accepts the wire forms an `ImageValue` port may receive\n * before hydration: `string` (data: URI), `object` (Blob, ImageBitmap, an\n * ImageValue, or a `Buffer`-like). The `format: \"image\"` annotation drives\n * the input resolver.\n */\nexport function ImageValueSchema(annotations: Record<string, unknown> = {}): DataPortSchema {\n return {\n type: [\"string\", \"object\"],\n properties: {},\n title: \"Image\",\n description: \"Image (hydrated to ImageValue at task entry)\",\n ...annotations,\n format: \"image\",\n } as unknown as DataPortSchema;\n}\n",
19
19
  "/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Structural match for `RawImage` from `@huggingface/transformers`. The HF\n * class carries helpers (`save`, `toCanvas`, `rgb`, ...) that the provider\n * runtime does not invoke on inputs, so a minimal shim over the four data\n * fields is sufficient. If a consumer later needs HF-specific methods we can\n * widen this shim lazily — no need to pull the transformers dep into\n * `@workglow/util/media` today.\n */\nexport class MediaRawImage {\n readonly data: Uint8ClampedArray;\n readonly width: number;\n readonly height: number;\n readonly channels: number;\n\n constructor(data: Uint8ClampedArray, width: number, height: number, channels: number) {\n this.data = data;\n this.width = width;\n this.height = height;\n this.channels = channels;\n }\n}\n\nexport function isMediaRawImageShape(\n value: unknown\n): value is { data: Uint8ClampedArray; width: number; height: number; channels: number } {\n if (!value || typeof value !== \"object\") return false;\n const v = value as Record<string, unknown>;\n return (\n v.data instanceof Uint8ClampedArray &&\n typeof v.width === \"number\" &&\n typeof v.height === \"number\" &&\n typeof v.channels === \"number\"\n );\n}\n",
20
- "/**\n * @copyright\n * Copyright 2026 Steven Roussey\n * All Rights Reserved\n */\nimport type { GpuImage } from \"./gpuImage\";\n\n/**\n * Cross-bundle singleton — the previewSource helper needs a backend-specific\n * resize op. Rather than importing from @workglow/tasks (a downstream\n * package, which would invert the dependency graph), the preview helper\n * accepts a resize-fn callback registered at startup by the consumer.\n *\n * The budget value is also held in a globalThis slot so multiple bundle\n * copies of this module (Vite/Rolldown can produce them) share a single\n * source of truth without it, setPreviewBudget would silently no-op in\n * any bundle that didn't perform the call.\n */\nconst GLOBAL_RESIZE_KEY = Symbol.for(\"@workglow/util/media/previewResizeFn\");\nconst GLOBAL_BUDGET_KEY = Symbol.for(\"@workglow/util/media/previewBudget\");\nconst _g = globalThis as Record<symbol, unknown>;\n\nexport type PreviewResizeFn = (image: GpuImage, w: number, h: number) => GpuImage;\n\nconst DEFAULT_BUDGET = 512;\n\nif (typeof _g[GLOBAL_BUDGET_KEY] !== \"number\") {\n _g[GLOBAL_BUDGET_KEY] = DEFAULT_BUDGET;\n}\n\nexport function registerPreviewResizeFn(fn: PreviewResizeFn): void {\n _g[GLOBAL_RESIZE_KEY] = fn;\n}\n\nfunction getPreviewResizeFn(): PreviewResizeFn | undefined {\n return _g[GLOBAL_RESIZE_KEY] as PreviewResizeFn | undefined;\n}\n\nexport function getPreviewBudget(): number {\n return _g[GLOBAL_BUDGET_KEY] as number;\n}\n\nexport function setPreviewBudget(px: number): void {\n if (!Number.isFinite(px) || px <= 0) {\n throw new Error(`setPreviewBudget: invalid value ${px}; expected a positive finite number`);\n }\n _g[GLOBAL_BUDGET_KEY] = Math.floor(px);\n}\n\n/**\n * Scale-then-effect entry for `executePreview`. Returns a downscaled image\n * when the input's longer edge exceeds the budget AND the backend benefits\n * (webgpu only). Otherwise returns the input unchanged — referential\n * equality is the signal to callers that no transient was created.\n *\n * Calling code that wants downscale must call `registerPreviewResizeFn` at\n * startup with a callback that performs the resize (typically routed through\n * @workglow/tasks's applyFilter). Without registration, previewSource is\n * a no-op even on webgpu inputs.\n */\nexport function previewSource(image: GpuImage): GpuImage {\n if (image.backend !== \"webgpu\") return image;\n const budget = getPreviewBudget();\n const long = Math.max(image.width, image.height);\n if (long <= budget) return image;\n const ratio = budget / long;\n const resize = getPreviewResizeFn();\n if (!resize) return image;\n const result = resize(image, Math.round(image.width * ratio), Math.round(image.height * ratio));\n // Compose: newScale = inputScale × downscaleRatio. The resize op produces an\n // image whose previewScale equals input's (apply() propagation rule). We\n // override it here — previewSource is the only place that *changes* previewScale.\n const composed = image.previewScale * ratio;\n return (result as unknown as { _setPreviewScale(s: number): GpuImage })._setPreviewScale(composed);\n}\n",
20
+ "/**\n * @copyright\n * Copyright 2026 Steven Roussey\n * All Rights Reserved\n */\nimport type { ImageValue } from \"./imageValue\";\n\n// Cross-bundle singleton — Vite/Rolldown can produce multiple bundle copies of\n// this file (one per consumer, browser/node entry, the builder web app, etc.).\n// Without sharing through `globalThis`, `setPreviewBudget` / `registerPreview-\n// ResizeFn` would silently no-op in any bundle that didn't perform the call,\n// because each bundle would hold its own module-private slot. Same pattern as\n// the codec / GpuImage factory registries (see `imageRasterCodecRegistry.ts`\n// and `gpuImage.ts`). The `Symbol.for` keys are stable across realms so every\n// bundle hits the same record.\nconst GLOBAL_RESIZE_KEY = Symbol.for(\"@workglow/util/media/previewResizeFn\");\nconst GLOBAL_BUDGET_KEY = Symbol.for(\"@workglow/util/media/previewBudget\");\nconst _g = globalThis as Record<symbol, unknown>;\n\nexport type PreviewResizeFn = (\n image: ImageValue,\n width: number,\n height: number,\n) => Promise<ImageValue>;\n\nconst DEFAULT_BUDGET = 512;\n\nif (typeof _g[GLOBAL_BUDGET_KEY] !== \"number\") {\n _g[GLOBAL_BUDGET_KEY] = DEFAULT_BUDGET;\n}\n\nexport function registerPreviewResizeFn(fn: PreviewResizeFn | undefined): void {\n _g[GLOBAL_RESIZE_KEY] = fn;\n}\n\nfunction getPreviewResizeFn(): PreviewResizeFn | undefined {\n return _g[GLOBAL_RESIZE_KEY] as PreviewResizeFn | undefined;\n}\n\nexport function getPreviewBudget(): number {\n return _g[GLOBAL_BUDGET_KEY] as number;\n}\n\nexport function setPreviewBudget(px: number): void {\n if (!Number.isFinite(px) || px <= 0) {\n throw new Error(`setPreviewBudget: invalid value ${px}; expected a positive finite number`);\n }\n _g[GLOBAL_BUDGET_KEY] = Math.floor(px);\n}\n\n/**\n * Engine-applied chain-head downscale for `runPreview`. Idempotent: when\n * the input is already within budget, returns the input unchanged\n * (referential equality is the no-op signal). When over budget, calls the\n * registered resize fn (typically routed through Sharp on node and an\n * OffscreenCanvas/WebGPU resize on browser) and composes `previewScale`:\n * `out.previewScale = in.previewScale × downscaleRatio`.\n */\nexport async function previewSource(image: ImageValue): Promise<ImageValue> {\n const budget = getPreviewBudget();\n const long = Math.max(image.width, image.height);\n if (long <= budget) return image;\n const ratio = budget / long;\n const resize = getPreviewResizeFn();\n if (!resize) return image;\n const targetW = Math.max(1, Math.round(image.width * ratio));\n const targetH = Math.max(1, Math.round(image.height * ratio));\n const result = await resize(image, targetW, targetH);\n const composedScale = image.previewScale * ratio;\n return {\n ...result,\n previewScale: composedScale,\n } as ImageValue;\n}\n",
21
21
  "/**\n * @copyright\n * Copyright 2026 Steven Roussey\n * All Rights Reserved\n */\n\nexport const VERTEX_PRELUDE = `\n@group(0) @binding(0) var src: texture_2d<f32>;\n@group(0) @binding(1) var src_sampler: sampler;\n\nstruct VsOut {\n @builtin(position) pos: vec4f,\n @location(0) uv: vec2f,\n};\n\n@vertex\nfn vs(@builtin(vertex_index) vid: u32) -> VsOut {\n let xy = vec2f(f32((vid << 1u) & 2u), f32(vid & 2u));\n var out: VsOut;\n out.pos = vec4f(xy * 2.0 - 1.0, 0.0, 1.0);\n out.uv = vec2f(xy.x, 1.0 - xy.y);\n return out;\n}`;\n\n// Used by WebGpuImage.toCanvas to blit a texture to the swap-chain image.\nexport const PASSTHROUGH_SHADER_SRC = `${VERTEX_PRELUDE}\n@fragment\nfn fs(in: VsOut) -> @location(0) vec4f {\n return textureSample(src, src_sampler, in.uv);\n}\n`;\n\nexport interface ShaderCache {\n get(source: string): GPUShaderModule;\n}\n\nexport function createShaderCache(device: GPUDevice): ShaderCache {\n const map = new Map<string, GPUShaderModule>();\n return {\n get(source) {\n let mod = map.get(source);\n if (!mod) {\n mod = device.createShaderModule({ code: source });\n map.set(source, mod);\n }\n return mod;\n },\n };\n}\n\nlet singleton: { device: GPUDevice; cache: ShaderCache } | null = null;\n\nexport function getShaderCache(device: GPUDevice): ShaderCache {\n if (!singleton || singleton.device !== device) {\n singleton = { device, cache: createShaderCache(device) };\n }\n return singleton.cache;\n}\n",
22
22
  "/**\n * @copyright\n * Copyright 2026 Steven Roussey\n * All Rights Reserved\n */\n\nexport interface TexturePoolOptions {\n capacityPerSize?: number;\n}\n\nexport interface TexturePool {\n acquire(width: number, height: number, format: GPUTextureFormat): GPUTexture;\n release(texture: GPUTexture): void;\n drain(): void;\n}\n\ninterface PooledTexture {\n texture: GPUTexture;\n width: number;\n height: number;\n format: GPUTextureFormat;\n inPool: boolean;\n}\n\nconst DEFAULT_CAPACITY_PER_SIZE = 8;\nconst TEXTURE_USAGE = 0x04 | 0x10 | 0x01 | 0x02; // TEXTURE_BINDING | RENDER_ATTACHMENT | COPY_SRC | COPY_DST\n\nexport function createTexturePool(device: GPUDevice, opts: TexturePoolOptions = {}): TexturePool {\n const capacity = opts.capacityPerSize ?? DEFAULT_CAPACITY_PER_SIZE;\n const buckets = new Map<string, PooledTexture[]>();\n const owners = new WeakMap<GPUTexture, PooledTexture>();\n\n const sizeClassKey = (w: number, h: number, f: GPUTextureFormat) => `${w}x${h}:${f}`;\n\n return {\n acquire(width, height, format) {\n const k = sizeClassKey(width, height, format);\n const bucket = buckets.get(k);\n if (bucket && bucket.length > 0) {\n const reused = bucket.pop()!;\n reused.inPool = false;\n return reused.texture;\n }\n const texture = device.createTexture({\n size: [width, height, 1],\n format,\n usage: TEXTURE_USAGE,\n });\n const entry: PooledTexture = { texture, width, height, format, inPool: false };\n owners.set(texture, entry);\n return texture;\n },\n\n release(texture) {\n const entry = owners.get(texture);\n if (!entry) return;\n if (entry.inPool) return;\n const k = sizeClassKey(entry.width, entry.height, entry.format);\n let bucket = buckets.get(k);\n if (!bucket) {\n bucket = [];\n buckets.set(k, bucket);\n }\n if (bucket.length >= capacity) {\n owners.delete(texture);\n texture.destroy();\n return;\n }\n entry.inPool = true;\n bucket.push(entry);\n },\n\n drain() {\n for (const bucket of buckets.values()) {\n for (const entry of bucket) {\n owners.delete(entry.texture);\n entry.texture.destroy();\n }\n }\n buckets.clear();\n },\n };\n}\n\nlet singleton: { device: GPUDevice; pool: TexturePool } | null = null;\n\nexport function getTexturePool(device: GPUDevice): TexturePool {\n if (!singleton || singleton.device !== device) {\n singleton?.pool.drain();\n singleton = { device, pool: createTexturePool(device) };\n }\n return singleton.pool;\n}\n\nexport function resetTexturePoolForTests(): void {\n singleton?.pool.drain();\n singleton = null;\n}\n",
23
- "/**\n * @copyright\n * Copyright 2026 Steven Roussey\n * All Rights Reserved\n */\nimport type { ImageBinary, ImageChannels } from \"./imageTypes\";\nimport type { GpuImage as IGpuImage, GpuImageEncodeFormat } from \"./gpuImage\";\nimport { getGpuDevice } from \"./gpuDevice.browser\";\nimport { getTexturePool } from \"./texturePool.browser\";\nimport { getShaderCache, PASSTHROUGH_SHADER_SRC } from \"./shaderRegistry.browser\";\n\nconst TEX_FORMAT: GPUTextureFormat = \"rgba8unorm\";\n\nconst finalizers = typeof FinalizationRegistry !== \"undefined\"\n ? new FinalizationRegistry<() => void>((fn) => {\n try { fn(); } catch { /* device lost or pool drained */ }\n })\n : undefined;\n\nexport interface ApplyParams {\n shader: string;\n uniforms: ArrayBuffer | undefined;\n outSize?: { width: number; height: number };\n}\n\nfunction expandToRgba(bin: ImageBinary): Uint8ClampedArray {\n if (bin.channels === 4) return bin.data;\n const px = bin.width * bin.height;\n const out = new Uint8ClampedArray(px * 4);\n if (bin.channels === 3) {\n for (let i = 0; i < px; i++) {\n out[i * 4 + 0] = bin.data[i * 3 + 0] ?? 0;\n out[i * 4 + 1] = bin.data[i * 3 + 1] ?? 0;\n out[i * 4 + 2] = bin.data[i * 3 + 2] ?? 0;\n out[i * 4 + 3] = 255;\n }\n } else if (bin.channels === 1) {\n for (let i = 0; i < px; i++) {\n const g = bin.data[i] ?? 0;\n out[i * 4 + 0] = g;\n out[i * 4 + 1] = g;\n out[i * 4 + 2] = g;\n out[i * 4 + 3] = 255;\n }\n }\n return out;\n}\n\nfunction align(n: number, m: number): number {\n return Math.ceil(n / m) * m;\n}\n\nexport class WebGpuImage implements IGpuImage {\n readonly backend = \"webgpu\" as const;\n readonly channels: ImageChannels = 4;\n\n /** Internal refcount. Initialized to 1 in fromImageBinary/apply. Reclaim at 0. */\n private refcount = 1;\n\n private _previewScale: number;\n\n private constructor(\n private device: GPUDevice,\n private texture: GPUTexture | null,\n readonly width: number,\n readonly height: number,\n previewScale: number = 1.0,\n ) {\n this._previewScale = previewScale;\n if (finalizers && texture) {\n const dev = device;\n const tex = texture;\n finalizers.register(this, () => {\n try { getTexturePool(dev).release(tex); } catch { /* device lost */ }\n }, this);\n }\n }\n\n get previewScale(): number {\n return this._previewScale;\n }\n\n /** @internal — only previewSource and ImageTextTask.executePreview (without-\n * background source case) may call this. Mutates previewScale on this\n * instance and returns this for chaining. */\n _setPreviewScale(scale: number): this {\n this._previewScale = scale;\n return this;\n }\n\n static async fromImageBinary(bin: ImageBinary): Promise<WebGpuImage> {\n const dev = await getGpuDevice();\n if (!dev) throw new Error(\"WebGPU device unavailable; use CpuImage.fromImageBinary instead\");\n const tex = getTexturePool(dev).acquire(bin.width, bin.height, TEX_FORMAT);\n const rgba = bin.channels === 4 ? bin.data : expandToRgba(bin);\n dev.queue.writeTexture(\n { texture: tex },\n rgba,\n { bytesPerRow: bin.width * 4, rowsPerImage: bin.height },\n [bin.width, bin.height, 1],\n );\n return new WebGpuImage(dev, tex, bin.width, bin.height);\n }\n\n apply(params: ApplyParams): WebGpuImage {\n if (!this.texture) throw new Error(\"WebGpuImage.apply called on a released image\");\n const outW = params.outSize?.width ?? this.width;\n const outH = params.outSize?.height ?? this.height;\n const out = getTexturePool(this.device).acquire(outW, outH, TEX_FORMAT);\n const shaderModule = getShaderCache(this.device).get(params.shader);\n const pipeline = this.device.createRenderPipeline({\n layout: \"auto\",\n vertex: { module: shaderModule, entryPoint: \"vs\" },\n fragment: { module: shaderModule, entryPoint: \"fs\", targets: [{ format: TEX_FORMAT }] },\n primitive: { topology: \"triangle-list\" },\n });\n\n const sampler = this.device.createSampler({ magFilter: \"linear\", minFilter: \"linear\" });\n const bindEntries: GPUBindGroupEntry[] = [\n { binding: 0, resource: this.texture.createView() },\n { binding: 1, resource: sampler },\n ];\n if (params.uniforms) {\n const ubo = this.device.createBuffer({\n size: params.uniforms.byteLength,\n usage: 0x40 | 0x08, // UNIFORM | COPY_DST\n });\n this.device.queue.writeBuffer(ubo, 0, params.uniforms);\n bindEntries.push({ binding: 2, resource: { buffer: ubo } });\n }\n const bindGroup = this.device.createBindGroup({\n layout: pipeline.getBindGroupLayout(0),\n entries: bindEntries,\n });\n\n const enc = this.device.createCommandEncoder();\n const pass = enc.beginRenderPass({\n colorAttachments: [{\n view: out.createView(),\n loadOp: \"clear\",\n storeOp: \"store\",\n clearValue: [0, 0, 0, 0],\n }],\n });\n pass.setPipeline(pipeline);\n pass.setBindGroup(0, bindGroup);\n pass.draw(3);\n pass.end();\n this.device.queue.submit([enc.finish()]);\n\n // Source texture stays alive; the caller owns its refcount and is\n // responsible for `input.release()` when done. The new image returned\n // here starts at refcount 1 and is owned by the caller.\n return new WebGpuImage(this.device, out, outW, outH, this._previewScale);\n }\n\n async materialize(): Promise<ImageBinary> {\n if (!this.texture) throw new Error(\"WebGpuImage.materialize called on a released image\");\n const bytesPerRow = align(this.width * 4, 256);\n const buffer = this.device.createBuffer({\n size: bytesPerRow * this.height,\n usage: 0x01 | 0x08, // MAP_READ | COPY_DST\n });\n const enc = this.device.createCommandEncoder();\n enc.copyTextureToBuffer(\n { texture: this.texture },\n { buffer, bytesPerRow, rowsPerImage: this.height },\n [this.width, this.height, 1],\n );\n this.device.queue.submit([enc.finish()]);\n await buffer.mapAsync(0x01); // MAP_READ\n const mapped = new Uint8Array(buffer.getMappedRange());\n const tightStride = this.width * 4;\n const tight = new Uint8ClampedArray(this.width * this.height * 4);\n if (bytesPerRow === tightStride) {\n tight.set(mapped);\n } else {\n for (let y = 0; y < this.height; y++) {\n tight.set(mapped.subarray(y * bytesPerRow, y * bytesPerRow + tightStride), y * tightStride);\n }\n }\n buffer.unmap();\n buffer.destroy();\n return { data: tight, width: this.width, height: this.height, channels: 4 };\n }\n\n async toCanvas(canvas: HTMLCanvasElement | OffscreenCanvas): Promise<void> {\n if (!this.texture) throw new Error(\"WebGpuImage.toCanvas called on a released image\");\n if (canvas.width !== this.width) canvas.width = this.width;\n if (canvas.height !== this.height) canvas.height = this.height;\n const ctx = canvas.getContext(\"webgpu\") as GPUCanvasContext | null;\n if (!ctx) throw new Error(\"WebGpuImage.toCanvas requires a webgpu context\");\n const presentationFormat = (navigator.gpu as unknown as { getPreferredCanvasFormat(): GPUTextureFormat }).getPreferredCanvasFormat();\n ctx.configure({ device: this.device, format: presentationFormat, alphaMode: \"premultiplied\" });\n const view = ctx.getCurrentTexture().createView();\n\n const shaderModule = getShaderCache(this.device).get(PASSTHROUGH_SHADER_SRC);\n const pipeline = this.device.createRenderPipeline({\n layout: \"auto\",\n vertex: { module: shaderModule, entryPoint: \"vs\" },\n fragment: { module: shaderModule, entryPoint: \"fs\", targets: [{ format: presentationFormat }] },\n primitive: { topology: \"triangle-list\" },\n });\n const sampler = this.device.createSampler({ magFilter: \"linear\", minFilter: \"linear\" });\n const bindGroup = this.device.createBindGroup({\n layout: pipeline.getBindGroupLayout(0),\n entries: [\n { binding: 0, resource: this.texture.createView() },\n { binding: 1, resource: sampler },\n ],\n });\n const enc = this.device.createCommandEncoder();\n const pass = enc.beginRenderPass({\n colorAttachments: [{ view, loadOp: \"clear\", storeOp: \"store\", clearValue: [0, 0, 0, 0] }],\n });\n pass.setPipeline(pipeline);\n pass.setBindGroup(0, bindGroup);\n pass.draw(3);\n pass.end();\n this.device.queue.submit([enc.finish()]);\n }\n\n async encode(format: GpuImageEncodeFormat, quality?: number): Promise<Uint8Array> {\n const bin = await this.materialize();\n if (typeof OffscreenCanvas === \"undefined\") {\n throw new Error(\"WebGpuImage.encode requires an OffscreenCanvas environment\");\n }\n const off = new OffscreenCanvas(this.width, this.height);\n const ctx = off.getContext(\"2d\");\n if (!ctx) throw new Error(\"WebGpuImage.encode could not acquire a 2D context\");\n ctx.putImageData(new ImageData(bin.data as unknown as Uint8ClampedArray<ArrayBuffer>, this.width, this.height), 0, 0);\n const blob = await off.convertToBlob({ type: `image/${format}`, quality });\n return new Uint8Array(await blob.arrayBuffer());\n }\n\n retain(n: number = 1): this {\n if (this.refcount <= 0) {\n throw new Error(\"WebGpuImage.retain called on a released image\");\n }\n this.refcount += n;\n return this;\n }\n\n release(): void {\n if (this.refcount <= 0) {\n throw new Error(\"WebGpuImage.release called on a released image\");\n }\n this.refcount -= 1;\n if (this.refcount > 0) return;\n if (this.texture) {\n const tex = this.texture;\n this.texture = null;\n if (finalizers) finalizers.unregister(this);\n getTexturePool(this.device).release(tex);\n }\n }\n}\n",
24
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport \"./media/imageCacheCodec\";\nimport \"./media/imageHydrationResolver\";\n\nexport * from \"./media/color\";\nexport { CpuImage } from \"./media/cpuImage\";\nexport {\n encodeImageBinaryToPng,\n imageBinaryToBase64Png,\n imageBinaryToBlob,\n imageBinaryToDataUri,\n} from \"./media/encode\";\nexport {\n _resetFilterRegistryForTests,\n applyFilter,\n hasFilterOp,\n registerFilterOp,\n} from \"./media/filterRegistry\";\nexport type { FilterOpFn } from \"./media/filterRegistry\";\nexport { getGpuDevice, resetGpuDeviceForTests } from \"./media/gpuDevice.browser\";\nexport {\n getGpuImageFactory,\n GpuImage as GpuImageFactory,\n registerGpuImageFactory,\n} from \"./media/gpuImage\";\nexport type {\n GpuImage,\n GpuImageBackend,\n GpuImageEncodeFormat,\n GpuImageStatic,\n} from \"./media/gpuImage\";\nexport { GpuImageSchema } from \"./media/gpuImageSchema\";\nexport * from \"./media/imageRasterCodecRegistry\";\nexport * from \"./media/imageTypes\";\nexport * from \"./media/MediaRawImage\";\nexport {\n getPreviewBudget,\n previewSource,\n registerPreviewResizeFn,\n setPreviewBudget,\n} from \"./media/previewBudget\";\nexport {\n createShaderCache,\n getShaderCache,\n PASSTHROUGH_SHADER_SRC,\n VERTEX_PRELUDE,\n} from \"./media/shaderRegistry.browser\";\nexport type { ShaderCache } from \"./media/shaderRegistry.browser\";\nexport {\n createTexturePool,\n getTexturePool,\n resetTexturePoolForTests,\n} from \"./media/texturePool.browser\";\nexport type { TexturePool, TexturePoolOptions } from \"./media/texturePool.browser\";\nexport { WebGpuImage } from \"./media/webGpuImage.browser\";\nexport type { ApplyParams } from \"./media/webGpuImage.browser\";\n\nimport { CpuImage as _CpuImage } from \"./media/cpuImage\";\nimport { getGpuDevice as _getGpuDevice } from \"./media/gpuDevice.browser\";\nimport { registerGpuImageFactory as _registerGpuImageFactory } from \"./media/gpuImage\";\nimport { getImageRasterCodec as _getImageRasterCodec } from \"./media/imageRasterCodecRegistry\";\nimport type { ImageBinary as _ImageBinary } from \"./media/imageTypes\";\nimport { WebGpuImage as _WebGpuImage } from \"./media/webGpuImage.browser\";\n\nasync function _preferGpu(bin: _ImageBinary) {\n const dev = await _getGpuDevice();\n return dev ? _WebGpuImage.fromImageBinary(bin) : _CpuImage.fromImageBinary(bin);\n}\n\n_registerGpuImageFactory(\"fromImageBinaryAsync\", _preferGpu);\n\n_registerGpuImageFactory(\"fromDataUri\", async (dataUri: string) => {\n const bin = await _getImageRasterCodec().decodeDataUri(dataUri);\n return _preferGpu(bin);\n});\n\n_registerGpuImageFactory(\"fromBlob\", async (blob: Blob) => {\n const bitmap = await createImageBitmap(blob);\n const off = new OffscreenCanvas(bitmap.width, bitmap.height);\n const ctx = off.getContext(\"2d\");\n if (!ctx) throw new Error(\"fromBlob: could not acquire 2D context\");\n ctx.drawImage(bitmap, 0, 0);\n const id = ctx.getImageData(0, 0, bitmap.width, bitmap.height);\n return _preferGpu({ data: id.data, width: bitmap.width, height: bitmap.height, channels: 4 });\n});\n\n_registerGpuImageFactory(\"fromImageBitmap\", async (bitmap: ImageBitmap) => {\n const off = new OffscreenCanvas(bitmap.width, bitmap.height);\n const ctx = off.getContext(\"2d\");\n if (!ctx) throw new Error(\"fromImageBitmap: could not acquire 2D context\");\n ctx.drawImage(bitmap, 0, 0);\n const id = ctx.getImageData(0, 0, bitmap.width, bitmap.height);\n return _preferGpu({ data: id.data, width: bitmap.width, height: bitmap.height, channels: 4 });\n});\n"
23
+ "/**\n * @copyright\n * Copyright 2026 Steven Roussey\n * All Rights Reserved\n */\nimport type { ImageChannels } from \"./imageTypes\";\nimport type { GpuImage as IGpuImage, GpuImageEncodeFormat } from \"./gpuImage\";\nimport { registerGpuImageFactory } from \"./gpuImage\";\nimport type { ImageValue } from \"./imageValue\";\nimport { imageValueFromBitmap, isBrowserImageValue, isNodeImageValue } from \"./imageValue\";\nimport { getGpuDevice } from \"./gpuDevice.browser\";\nimport { getTexturePool } from \"./texturePool.browser\";\nimport { getShaderCache, PASSTHROUGH_SHADER_SRC } from \"./shaderRegistry.browser\";\n\nconst TEX_FORMAT: GPUTextureFormat = \"rgba8unorm\";\n\nexport interface ApplyParams {\n shader: string;\n uniforms: ArrayBuffer | undefined;\n outSize?: { width: number; height: number };\n}\n\nexport class WebGpuImage implements IGpuImage {\n readonly backend = \"webgpu\" as const;\n readonly channels: ImageChannels = 4;\n\n private constructor(\n private device: GPUDevice,\n private texture: GPUTexture | null,\n readonly width: number,\n readonly height: number,\n ) {}\n\n static async from(value: ImageValue): Promise<WebGpuImage> {\n const dev = await getGpuDevice();\n if (!dev) throw new Error(\"WebGpuImage.from: WebGPU device unavailable\");\n if (isNodeImageValue(value)) {\n throw new Error(\"WebGpuImage.from: NodeImageValue not supported in browser runtime\");\n }\n if (!isBrowserImageValue(value)) {\n throw new Error(\"WebGpuImage.from: unrecognized ImageValue shape\");\n }\n // Now we know value is BrowserImageValue.\n const tex = getTexturePool(dev).acquire(value.width, value.height, TEX_FORMAT);\n dev.queue.copyExternalImageToTexture(\n { source: value.bitmap },\n { texture: tex },\n [value.width, value.height, 1],\n );\n return new WebGpuImage(dev, tex, value.width, value.height);\n }\n\n apply(params: ApplyParams): WebGpuImage {\n if (!this.texture) throw new Error(\"WebGpuImage.apply called on a disposed image\");\n const outW = params.outSize?.width ?? this.width;\n const outH = params.outSize?.height ?? this.height;\n const out = getTexturePool(this.device).acquire(outW, outH, TEX_FORMAT);\n const shaderModule = getShaderCache(this.device).get(params.shader);\n const pipeline = this.device.createRenderPipeline({\n layout: \"auto\",\n vertex: { module: shaderModule, entryPoint: \"vs\" },\n fragment: { module: shaderModule, entryPoint: \"fs\", targets: [{ format: TEX_FORMAT }] },\n primitive: { topology: \"triangle-list\" },\n });\n const sampler = this.device.createSampler({ magFilter: \"linear\", minFilter: \"linear\" });\n const bindEntries: GPUBindGroupEntry[] = [\n { binding: 0, resource: this.texture.createView() },\n { binding: 1, resource: sampler },\n ];\n if (params.uniforms) {\n const ubo = this.device.createBuffer({\n size: params.uniforms.byteLength,\n usage: 0x40 | 0x08,\n });\n this.device.queue.writeBuffer(ubo, 0, params.uniforms);\n bindEntries.push({ binding: 2, resource: { buffer: ubo } });\n }\n const bindGroup = this.device.createBindGroup({\n layout: pipeline.getBindGroupLayout(0),\n entries: bindEntries,\n });\n const enc = this.device.createCommandEncoder();\n const pass = enc.beginRenderPass({\n colorAttachments: [{\n view: out.createView(),\n loadOp: \"clear\",\n storeOp: \"store\",\n clearValue: [0, 0, 0, 0],\n }],\n });\n pass.setPipeline(pipeline);\n pass.setBindGroup(0, bindGroup);\n pass.draw(3);\n pass.end();\n this.device.queue.submit([enc.finish()]);\n return new WebGpuImage(this.device, out, outW, outH);\n }\n\n /** Synchronous transfer to ImageBitmap via OffscreenCanvas. The transfer\n * drains the texture; this image is disposed afterward. */\n async transferToImageBitmap(): Promise<ImageBitmap> {\n if (!this.texture) throw new Error(\"WebGpuImage.transferToImageBitmap on a disposed image\");\n if (typeof OffscreenCanvas === \"undefined\") {\n throw new Error(\"WebGpuImage.transferToImageBitmap requires OffscreenCanvas\");\n }\n const off = new OffscreenCanvas(this.width, this.height);\n const ctx = off.getContext(\"webgpu\") as GPUCanvasContext | null;\n if (!ctx) throw new Error(\"WebGpuImage.transferToImageBitmap: no webgpu context\");\n const presentationFormat = (\n navigator.gpu as unknown as { getPreferredCanvasFormat(): GPUTextureFormat }\n ).getPreferredCanvasFormat();\n ctx.configure({ device: this.device, format: presentationFormat, alphaMode: \"premultiplied\" });\n const view = ctx.getCurrentTexture().createView();\n const shaderModule = getShaderCache(this.device).get(PASSTHROUGH_SHADER_SRC);\n const pipeline = this.device.createRenderPipeline({\n layout: \"auto\",\n vertex: { module: shaderModule, entryPoint: \"vs\" },\n fragment: { module: shaderModule, entryPoint: \"fs\", targets: [{ format: presentationFormat }] },\n primitive: { topology: \"triangle-list\" },\n });\n const sampler = this.device.createSampler({ magFilter: \"linear\", minFilter: \"linear\" });\n const bindGroup = this.device.createBindGroup({\n layout: pipeline.getBindGroupLayout(0),\n entries: [\n { binding: 0, resource: this.texture.createView() },\n { binding: 1, resource: sampler },\n ],\n });\n const enc = this.device.createCommandEncoder();\n const pass = enc.beginRenderPass({\n colorAttachments: [{ view, loadOp: \"clear\", storeOp: \"store\", clearValue: [0, 0, 0, 0] }],\n });\n pass.setPipeline(pipeline);\n pass.setBindGroup(0, bindGroup);\n pass.draw(3);\n pass.end();\n this.device.queue.submit([enc.finish()]);\n try {\n return await createImageBitmap(off);\n } finally {\n this.dispose();\n }\n }\n\n async toImageValue(previewScale: number): Promise<ImageValue> {\n const bitmap = await this.transferToImageBitmap();\n return imageValueFromBitmap(bitmap, this.width, this.height, previewScale);\n }\n\n /** Encode the image to a compressed format. Single-use: the underlying\n * texture is disposed during encoding (via `transferToImageBitmap`); a\n * second call on the same instance throws. */\n async encode(format: GpuImageEncodeFormat, quality?: number): Promise<Uint8Array> {\n if (!this.texture) throw new Error(\"WebGpuImage.encode on a disposed image\");\n const off = new OffscreenCanvas(this.width, this.height);\n const ctx = off.getContext(\"2d\");\n if (!ctx) throw new Error(\"WebGpuImage.encode could not acquire a 2D context\");\n const bitmap = await this.transferToImageBitmap();\n ctx.drawImage(bitmap, 0, 0);\n const blob = await off.convertToBlob({ type: `image/${format}`, quality });\n return new Uint8Array(await blob.arrayBuffer());\n }\n\n dispose(): void {\n if (!this.texture) return;\n const tex = this.texture;\n this.texture = null;\n try {\n getTexturePool(this.device).release(tex);\n } catch {\n // device lost or pool drained\n }\n }\n}\n\nregisterGpuImageFactory(\"from\", WebGpuImage.from.bind(WebGpuImage));\n",
24
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport \"./media/imageCacheCodec\";\nimport \"./media/imageHydrationResolver\";\n\nexport * from \"./media/color\";\nexport { CpuImage } from \"./media/cpuImage\";\nexport { rawPixelBufferToBlob, rawPixelBufferToDataUri } from \"./media/encode\";\nexport {\n _resetFilterRegistryForTests,\n applyFilter,\n hasFilterOp,\n registerFilterOp,\n} from \"./media/filterRegistry\";\nexport type { FilterOpFn } from \"./media/filterRegistry\";\nexport { getGpuDevice, resetGpuDeviceForTests } from \"./media/gpuDevice.browser\";\nexport {\n getGpuImageFactory,\n GpuImage as GpuImageFactory,\n registerGpuImageFactory,\n} from \"./media/gpuImage\";\nexport type {\n GpuImage,\n GpuImageBackend,\n GpuImageEncodeFormat,\n GpuImageStatic,\n} from \"./media/gpuImage\";\nexport { ImageValueSchema } from \"./media/imageValueSchema\";\nexport * from \"./media/imageRasterCodecRegistry\";\nexport type { ImageChannels } from \"./media/imageTypes\";\nexport type { RawPixelBuffer, RgbaPixelBuffer } from \"./media/rawPixelBuffer\";\nexport {\n imageValueFromBitmap,\n imageValueFromBuffer,\n isBrowserImageValue,\n isImageValue,\n isNodeImageValue,\n normalizeToImageValue,\n} from \"./media/imageValue\";\nexport type {\n BrowserImageValue,\n ImageValue,\n ImageValueBase,\n NodeImageFormat,\n NodeImageValue,\n} from \"./media/imageValue\";\nexport * from \"./media/MediaRawImage\";\nexport {\n getPreviewBudget,\n previewSource,\n registerPreviewResizeFn,\n setPreviewBudget,\n} from \"./media/previewBudget\";\nexport {\n createShaderCache,\n getShaderCache,\n PASSTHROUGH_SHADER_SRC,\n VERTEX_PRELUDE,\n} from \"./media/shaderRegistry.browser\";\nexport type { ShaderCache } from \"./media/shaderRegistry.browser\";\nexport {\n createTexturePool,\n getTexturePool,\n resetTexturePoolForTests,\n} from \"./media/texturePool.browser\";\nexport type { TexturePool, TexturePoolOptions } from \"./media/texturePool.browser\";\nexport { WebGpuImage } from \"./media/webGpuImage.browser\";\nexport type { ApplyParams } from \"./media/webGpuImage.browser\";\n\n// Throwing stubs for server-only sharp helpers. These exist so cross-platform\n// consumers (e.g. `@workglow/ai-provider/common/imageOutputHelpers`) can\n// statically import the helpers without browser bundlers tripping on missing\n// exports. Runtime gates (`if (HAS_BUFFER)` etc.) ensure these are never\n// called on the browser path.\nexport async function probeImageDimensions(): Promise<never> {\n throw new Error(\"probeImageDimensions: not available in browser runtime\");\n}\nexport async function decodeBufferToRaw(): Promise<never> {\n throw new Error(\"decodeBufferToRaw: not available in browser runtime\");\n}\nexport async function encodeRawPixels(): Promise<never> {\n throw new Error(\"encodeRawPixels: not available in browser runtime\");\n}\n\nimport { CpuImage as _CpuImage } from \"./media/cpuImage\";\nimport { getGpuDevice as _getGpuDevice } from \"./media/gpuDevice.browser\";\nimport { registerGpuImageFactory as _registerGpuImageFactory } from \"./media/gpuImage\";\nimport type { ImageValue as _ImageValue } from \"./media/imageValue\";\nimport { WebGpuImage as _WebGpuImage } from \"./media/webGpuImage.browser\";\n\nasync function _preferGpu(value: _ImageValue) {\n const dev = await _getGpuDevice();\n return dev ? _WebGpuImage.from(value) : _CpuImage.from(value);\n}\n\n_registerGpuImageFactory(\"from\", _preferGpu);\n"
25
25
  ],
26
- "mappings": "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",
27
- "debugId": "006D8DBD8329F1E964756E2164756E21",
26
+ "mappings": "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",
27
+ "debugId": "4003D4BA5EB9040764756E2164756E21",
28
28
  "names": []
29
29
  }
@@ -7,14 +7,17 @@ import "./media/imageCacheCodec";
7
7
  import "./media/imageHydrationResolver";
8
8
  export * from "./media/color";
9
9
  export { CpuImage } from "./media/cpuImage";
10
- export { encodeImageBinaryToPng, imageBinaryToBase64Png, imageBinaryToBlob, imageBinaryToDataUri, } from "./media/encode";
10
+ export { rawPixelBufferToBlob, rawPixelBufferToDataUri } from "./media/encode";
11
11
  export { _resetFilterRegistryForTests, applyFilter, hasFilterOp, registerFilterOp, } from "./media/filterRegistry";
12
12
  export type { FilterOpFn } from "./media/filterRegistry";
13
13
  export { getGpuImageFactory, GpuImage as GpuImageFactory, registerGpuImageFactory, } from "./media/gpuImage";
14
14
  export type { GpuImage, GpuImageBackend, GpuImageEncodeFormat, GpuImageStatic, } from "./media/gpuImage";
15
- export { GpuImageSchema } from "./media/gpuImageSchema";
15
+ export { ImageValueSchema } from "./media/imageValueSchema";
16
16
  export * from "./media/imageRasterCodecRegistry";
17
- export * from "./media/imageTypes";
17
+ export type { ImageChannels } from "./media/imageTypes";
18
+ export type { RawPixelBuffer, RgbaPixelBuffer } from "./media/rawPixelBuffer";
19
+ export { imageValueFromBitmap, imageValueFromBuffer, isBrowserImageValue, isImageValue, isNodeImageValue, normalizeToImageValue, } from "./media/imageValue";
20
+ export type { BrowserImageValue, ImageValue, ImageValueBase, NodeImageFormat, NodeImageValue, } from "./media/imageValue";
18
21
  export * from "./media/MediaRawImage";
19
22
  export { getPreviewBudget, previewSource, registerPreviewResizeFn, setPreviewBudget, } from "./media/previewBudget";
20
23
  export declare function getGpuDevice(): Promise<null>;
@@ -23,8 +26,7 @@ export { createShaderCache, getShaderCache, PASSTHROUGH_SHADER_SRC, VERTEX_PRELU
23
26
  export type { ShaderCache } from "./media/shaderRegistry.browser";
24
27
  export { createTexturePool, getTexturePool, resetTexturePoolForTests, } from "./media/texturePool.browser";
25
28
  export type { TexturePool, TexturePoolOptions } from "./media/texturePool.browser";
26
- export { SharpImage } from "./media/sharpImage.node";
29
+ export { SharpImage, decodeBufferToRaw, encodeRawPixels, probeImageDimensions, } from "./media/sharpImage.server";
30
+ export type { DecodeBufferToRawOptions, EncodeRawPixelsOptions, RawPixelInput, } from "./media/sharpImage.server";
27
31
  export type { ApplyParams, WebGpuImage } from "./media/webGpuImage.browser";
28
- import "./media/imageCacheCodec";
29
- import "./media/imageHydrationResolver";
30
32
  //# sourceMappingURL=media-node.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"media-node.d.ts","sourceRoot":"","sources":["../src/media-node.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,yBAAyB,CAAC;AACjC,OAAO,gCAAgC,CAAC;AAExC,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,4BAA4B,EAC5B,WAAW,EACX,WAAW,EACX,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EACL,kBAAkB,EAClB,QAAQ,IAAI,eAAe,EAC3B,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,QAAQ,EACR,eAAe,EACf,oBAAoB,EACpB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,cAAc,kCAAkC,CAAC;AACjD,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAElD;AACD,wBAAgB,sBAAsB,IAAI,IAAI,CAAG;AACjD,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,cAAc,GACf,MAAM,gCAAgC,CAAC;AACxC,YAAY,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,wBAAwB,GACzB,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAGnF,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG5E,OAAO,yBAAyB,CAAC;AACjC,OAAO,gCAAgC,CAAC"}
1
+ {"version":3,"file":"media-node.d.ts","sourceRoot":"","sources":["../src/media-node.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,yBAAyB,CAAC;AACjC,OAAO,gCAAgC,CAAC;AAExC,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EACL,4BAA4B,EAC5B,WAAW,EACX,WAAW,EACX,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EACL,kBAAkB,EAClB,QAAQ,IAAI,eAAe,EAC3B,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,QAAQ,EACR,eAAe,EACf,oBAAoB,EACpB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,cAAc,kCAAkC,CAAC;AACjD,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,eAAe,EACf,cAAc,GACf,MAAM,oBAAoB,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAElD;AACD,wBAAgB,sBAAsB,IAAI,IAAI,CAAG;AACjD,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,cAAc,GACf,MAAM,gCAAgC,CAAC;AACxC,YAAY,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,wBAAwB,GACzB,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAGnF,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,wBAAwB,EACxB,sBAAsB,EACtB,aAAa,GACd,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC"}