@opendisplay/epaper-dithering 4.0.0 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/enums.ts","../src/palettes.ts","../src/wasm-core/epaper_dithering_wasm_bg.js","../src/core.ts","../src/index.ts"],"names":["DitherMode","ColorScheme"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Dithering algorithm modes\n * Values match firmware conventions (0-8)\n */\nexport enum DitherMode {\n NONE = 0,\n BURKES = 1,\n ORDERED = 2,\n FLOYD_STEINBERG = 3,\n ATKINSON = 4,\n STUCKI = 5,\n SIERRA = 6,\n SIERRA_LITE = 7,\n JARVIS_JUDICE_NINKE = 8,\n}","import type { ColorPalette } from './types';\n\n/**\n * E-paper display color schemes\n * Values match firmware conventions (0-7)\n */\nexport enum ColorScheme {\n MONO = 0,\n BWR = 1,\n BWY = 2,\n BWRY = 3,\n BWGBRY = 4,\n GRAYSCALE_4 = 5,\n GRAYSCALE_8 = 6,\n GRAYSCALE_16 = 7,\n}\n\nconst PALETTES: Record<ColorScheme, ColorPalette> = {\n [ColorScheme.MONO]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n white: { r: 255, g: 255, b: 255 },\n },\n accent: 'black',\n },\n [ColorScheme.BWR]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n white: { r: 255, g: 255, b: 255 },\n red: { r: 255, g: 0, b: 0 },\n },\n accent: 'red',\n },\n [ColorScheme.BWY]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n white: { r: 255, g: 255, b: 255 },\n yellow: { r: 255, g: 255, b: 0 },\n },\n accent: 'yellow',\n },\n [ColorScheme.BWRY]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n white: { r: 255, g: 255, b: 255 },\n yellow: { r: 255, g: 255, b: 0 },\n red: { r: 255, g: 0, b: 0 },\n },\n accent: 'red',\n },\n [ColorScheme.BWGBRY]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n white: { r: 255, g: 255, b: 255 },\n yellow: { r: 255, g: 255, b: 0 },\n red: { r: 255, g: 0, b: 0 },\n blue: { r: 0, g: 0, b: 255 },\n green: { r: 0, g: 255, b: 0 },\n },\n accent: 'red',\n },\n [ColorScheme.GRAYSCALE_4]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n gray1: { r: 85, g: 85, b: 85 },\n gray2: { r: 170, g: 170, b: 170 },\n white: { r: 255, g: 255, b: 255 },\n },\n accent: 'black',\n },\n [ColorScheme.GRAYSCALE_8]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n gray1: { r: 36, g: 36, b: 36 },\n gray2: { r: 73, g: 73, b: 73 },\n gray3: { r: 109, g: 109, b: 109 },\n gray4: { r: 146, g: 146, b: 146 },\n gray5: { r: 182, g: 182, b: 182 },\n gray6: { r: 219, g: 219, b: 219 },\n white: { r: 255, g: 255, b: 255 },\n },\n accent: 'black',\n },\n [ColorScheme.GRAYSCALE_16]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n gray1: { r: 17, g: 17, b: 17 },\n gray2: { r: 34, g: 34, b: 34 },\n gray3: { r: 51, g: 51, b: 51 },\n gray4: { r: 68, g: 68, b: 68 },\n gray5: { r: 85, g: 85, b: 85 },\n gray6: { r: 102, g: 102, b: 102 },\n gray7: { r: 119, g: 119, b: 119 },\n gray8: { r: 136, g: 136, b: 136 },\n gray9: { r: 153, g: 153, b: 153 },\n gray10: { r: 170, g: 170, b: 170 },\n gray11: { r: 187, g: 187, b: 187 },\n gray12: { r: 204, g: 204, b: 204 },\n gray13: { r: 221, g: 221, b: 221 },\n gray14: { r: 238, g: 238, b: 238 },\n white: { r: 255, g: 255, b: 255 },\n },\n accent: 'black',\n },\n};\n\n/** Get color palette for a color scheme */\nexport function getPalette(scheme: ColorScheme): ColorPalette {\n return PALETTES[scheme];\n}\n\n/** Get number of colors in a color scheme */\nexport function getColorCount(scheme: ColorScheme): number {\n return Object.keys(PALETTES[scheme].colors).length;\n}\n\n/** Create ColorScheme from firmware integer value */\nexport function fromValue(value: number): ColorScheme {\n if (value < 0 || value > 7) {\n throw new Error(`Invalid color scheme value: ${value}`);\n }\n return value as ColorScheme;\n}\n\n// =============================================================================\n// Measured Palettes for Specific E-Paper Displays\n// =============================================================================\n//\n// These constants provide measured RGB values from real e-paper displays.\n// Pass them directly to ditherImage() instead of a ColorScheme enum.\n//\n// Usage:\n// import { ditherImage, SPECTRA_7_3_6COLOR } from '@opendisplay/epaper-dithering';\n// const result = ditherImage(imageBuffer, SPECTRA_7_3_6COLOR);\n//\n// NOTE: RGB values are defined in packages/rust/core/src/measured_palettes.rs\n// (single source of truth). The Python package derives its constants from Rust\n// via FFI at import time. TypeScript cannot do the same (WASM init order), so\n// values here must be kept in sync manually with the Rust source.\n// The WASM `measured_palettes()` function is exposed for future tooling.\n//\n// TO ADD A NEW DISPLAY: update measured_palettes.rs + add the constant below.\n// =============================================================================\n\n// 7.3\" Spectra™ 6-color (BWGBRY scheme)\n// Measured: 2026-02-03, iPhone 15 Pro Max RAW + Hue Play bars @ 6500K\n// Paper reference RGB(215,217,218); normalization: value × (255/paper_channel)\nexport const SPECTRA_7_3_6COLOR: ColorPalette = {\n colors: {\n black: { r: 26, g: 13, b: 35 },\n white: { r: 185, g: 202, b: 205 },\n yellow: { r: 202, g: 184, b: 0 },\n red: { r: 121, g: 9, b: 0 },\n blue: { r: 0, g: 69, b: 139 },\n green: { r: 40, g: 82, b: 57 },\n },\n accent: 'red',\n};\n\n// 4.26\" Monochrome (MONO scheme)\nexport const MONO_4_26: ColorPalette = {\n colors: {\n black: { r: 5, g: 5, b: 5 },\n white: { r: 220, g: 220, b: 220 },\n },\n accent: 'black',\n};\n\n// 4.2\" BWRY (BWRY scheme)\nexport const BWRY_4_2: ColorPalette = {\n colors: {\n black: { r: 5, g: 5, b: 5 },\n white: { r: 200, g: 200, b: 200 },\n yellow: { r: 200, g: 180, b: 0 },\n red: { r: 120, g: 15, b: 5 },\n },\n accent: 'red',\n};\n\n// Solum BWR (harvested display, BWR scheme)\nexport const SOLUM_BWR: ColorPalette = {\n colors: {\n black: { r: 5, g: 5, b: 5 },\n white: { r: 200, g: 200, b: 200 },\n red: { r: 120, g: 15, b: 5 },\n },\n accent: 'red',\n};\n\n// Hanshow BWR (harvested display, BWR scheme)\nexport const HANSHOW_BWR: ColorPalette = {\n colors: {\n black: { r: 5, g: 5, b: 5 },\n white: { r: 200, g: 200, b: 200 },\n red: { r: 120, g: 15, b: 5 },\n },\n accent: 'red',\n};\n\n// Hanshow BWY (harvested display, BWY scheme)\nexport const HANSHOW_BWY: ColorPalette = {\n colors: {\n black: { r: 5, g: 5, b: 5 },\n white: { r: 200, g: 200, b: 200 },\n yellow: { r: 200, g: 180, b: 0 },\n },\n accent: 'yellow',\n};\n\n// 3.97\" BWRY — EP397YR_800x480 (BWRY scheme)\n// 7.3\" Spectra™ 6-color (BWGBRY scheme) — v2 measurement\n// Measured: 2026-03-15, iPhone 15 Pro Max RAW + Affinity (v3), A4 paper white reference\n// Method: DNG with linear tone curve, WB from A4 paper, uniform ×2.4 scale\nexport const SPECTRA_7_3_6COLOR_V2: ColorPalette = {\n colors: {\n black: { r: 31, g: 24, b: 41 },\n white: { r: 168, g: 180, b: 182 },\n yellow: { r: 180, g: 173, b: 0 },\n red: { r: 113, g: 24, b: 19 },\n blue: { r: 36, g: 70, b: 139 },\n green: { r: 50, g: 84, b: 60 },\n },\n accent: 'red',\n};\n\n// Measured: 2026-03-06, iPhone RAW\n// Paper reference RGB(205,205,205); normalization: value × (255/205)\nexport const BWRY_3_97: ColorPalette = {\n colors: {\n black: { r: 10, g: 7, b: 14 },\n white: { r: 173, g: 178, b: 174 },\n yellow: { r: 172, g: 128, b: 0 },\n red: { r: 85, g: 24, b: 14 },\n },\n accent: 'red',\n};\n","/**\n * Composite an RGBA buffer onto white, returning flat RGB bytes (sRGB).\n * @param {Uint8Array} rgba\n * @returns {Uint8Array}\n */\nexport function composite_rgba(rgba) {\n const ptr0 = passArray8ToWasm0(rgba, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.composite_rgba(ptr0, len0);\n var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);\n return v2;\n}\n\n/**\n * Dither a flat RGB image. Accepts either an idealized `scheme_id` or a measured\n * `palette_bytes`/`accent_idx` pair; `palette_bytes` empty ⇒ use `scheme_id`.\n *\n * Returns a `Uint8Array` of palette indices (one per pixel, length = width × height).\n * @param {Uint8Array} pixels\n * @param {number} width\n * @param {number} scheme_id\n * @param {Uint8Array} palette_bytes\n * @param {number} accent_idx\n * @param {number} mode_id\n * @param {boolean} serpentine\n * @param {number} exposure\n * @param {number} saturation\n * @param {number} shadows\n * @param {number} highlights\n * @param {number | null} [tone]\n * @param {number | null} [gamut]\n * @returns {Uint8Array}\n */\nexport function dither_image(pixels, width, scheme_id, palette_bytes, accent_idx, mode_id, serpentine, exposure, saturation, shadows, highlights, tone, gamut) {\n const ptr0 = passArray8ToWasm0(pixels, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passArray8ToWasm0(palette_bytes, wasm.__wbindgen_malloc);\n const len1 = WASM_VECTOR_LEN;\n const ret = wasm.dither_image(ptr0, len0, width, scheme_id, ptr1, len1, accent_idx, mode_id, serpentine, exposure, saturation, shadows, highlights, !isLikeNone(tone), isLikeNone(tone) ? 0 : tone, !isLikeNone(gamut), isLikeNone(gamut) ? 0 : gamut);\n if (ret[3]) {\n throw takeFromExternrefTable0(ret[2]);\n }\n var v3 = getArrayU8FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);\n return v3;\n}\n\n/**\n * Returns all measured palettes as a JSON string.\n *\n * Format: `[{\"id\": \"SPECTRA_7_3_6COLOR\", \"colors\": [[r,g,b], ...], \"color_names\": [...], \"accent_idx\": 3}, ...]`\n * @returns {string}\n */\nexport function measured_palettes() {\n let deferred1_0;\n let deferred1_1;\n try {\n const ret = wasm.measured_palettes();\n deferred1_0 = ret[0];\n deferred1_1 = ret[1];\n return getStringFromWasm0(ret[0], ret[1]);\n } finally {\n wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);\n }\n}\nexport function __wbindgen_cast_0000000000000001(arg0, arg1) {\n // Cast intrinsic for `Ref(String) -> Externref`.\n const ret = getStringFromWasm0(arg0, arg1);\n return ret;\n}\nexport function __wbindgen_init_externref_table() {\n const table = wasm.__wbindgen_externrefs;\n const offset = table.grow(4);\n table.set(0, undefined);\n table.set(offset + 0, undefined);\n table.set(offset + 1, null);\n table.set(offset + 2, true);\n table.set(offset + 3, false);\n}\nfunction getArrayU8FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nfunction getStringFromWasm0(ptr, len) {\n return decodeText(ptr >>> 0, len);\n}\n\nlet cachedUint8ArrayMemory0 = null;\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nfunction passArray8ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 1, 1) >>> 0;\n getUint8ArrayMemory0().set(arg, ptr / 1);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nfunction takeFromExternrefTable0(idx) {\n const value = wasm.__wbindgen_externrefs.get(idx);\n wasm.__externref_table_dealloc(idx);\n return value;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\ncachedTextDecoder.decode();\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(ptr, len) {\n numBytesDecoded += len;\n if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n cachedTextDecoder.decode();\n numBytesDecoded = len;\n }\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nlet WASM_VECTOR_LEN = 0;\n\n\nlet wasm;\nexport function __wbg_set_wasm(val) {\n wasm = val;\n}\n","import type { ImageBuffer, PaletteImageBuffer, ColorPalette } from './types';\nimport { DitherMode } from './enums';\nimport { ColorScheme, getPalette } from './palettes';\nimport {\n dither_image as wasmDitherImage,\n composite_rgba as wasmCompositeRgba,\n __wbg_set_wasm,\n __wbindgen_init_externref_table,\n __wbindgen_cast_0000000000000001,\n} from './wasm-core/epaper_dithering_wasm_bg.js';\nimport wasmBytes from './wasm-core/epaper_dithering_wasm_bg.wasm';\n\n// Synchronous WASM initialization — runs once at module load time.\nconst wasmModule = new WebAssembly.Module(wasmBytes as unknown as ArrayBuffer);\nconst wasmInstance = new WebAssembly.Instance(wasmModule, {\n './epaper_dithering_wasm_bg.js': {\n __wbindgen_init_externref_table,\n __wbindgen_cast_0000000000000001,\n },\n});\n__wbg_set_wasm(wasmInstance.exports);\n(wasmInstance.exports as Record<string, () => void>).__wbindgen_start?.();\n\n/**\n * Options for `ditherImage`. All fields are optional — defaults are sensible.\n *\n * Pre-processing pipeline (each step is a no-op at its identity value):\n * `exposure → saturation → shadows/highlights → tone → gamut → dither`.\n */\nexport interface DitherOptions {\n /** Dithering algorithm. Default: `DitherMode.BURKES`. */\n mode?: DitherMode;\n /** Alternate row scan direction for error diffusion. Default: `true`. */\n serpentine?: boolean;\n /** Linear-RGB exposure multiplier. 1.0 = no change, 2.0 = +1 stop. Default: `1.0`. */\n exposure?: number;\n /** OKLab saturation multiplier. 1.0 = no change, 0.0 = grayscale. Default: `1.0`. */\n saturation?: number;\n /** Shadow lift strength (S-curve lower half). 0.0 = off, 1.0 = strong. Default: `0.0`. */\n shadows?: number;\n /** Highlight compression strength (S-curve upper half). 0.0 = off, 1.0 = strong. Default: `0.0`. */\n highlights?: number;\n /** Dynamic-range compression: `'auto'` | `'off'` | 0.0–1.0. Default: `'auto'`. */\n tone?: number | 'auto' | 'off';\n /** Gamut compression: `'auto'` | `'off'` | 0.0–1.0. Default: `'auto'`. */\n gamut?: number | 'auto' | 'off';\n}\n\n/**\n * Apply dithering to an RGBA image for an e-paper display.\n *\n * @param image Input RGBA image. Alpha is composited on white.\n * @param palette Target palette: `ColorScheme` enum (idealized) or `ColorPalette` (measured).\n * @param options Per-call overrides — see {@link DitherOptions}.\n * @returns Palette-indexed image buffer.\n */\nexport function ditherImage(\n image: ImageBuffer,\n palette: ColorScheme | ColorPalette,\n options: DitherOptions = {},\n): PaletteImageBuffer {\n const {\n mode = DitherMode.BURKES,\n serpentine = true,\n exposure = 1.0,\n saturation = 1.0,\n shadows = 0.0,\n highlights = 0.0,\n tone = 'auto',\n gamut = 'auto',\n } = options;\n\n const rgba = new Uint8Array(image.data.buffer, image.data.byteOffset, image.data.byteLength);\n const pixels = wasmCompositeRgba(rgba);\n\n // Idealized schemes don't have a measured display range, so tone/gamut don't apply.\n const isScheme = typeof palette === 'number';\n const toneArg = isScheme ? 0.0 : parseCompression(tone);\n const gamutArg = isScheme ? 0.0 : parseCompression(gamut);\n\n let schemeId = 0;\n let paletteBytes: Uint8Array;\n let accentIdx = 0;\n let outputColors: { r: number; g: number; b: number }[];\n\n if (isScheme) {\n schemeId = palette as number;\n paletteBytes = new Uint8Array(0);\n outputColors = Object.values(getPalette(palette).colors);\n } else {\n const colors = Object.values(palette.colors);\n paletteBytes = new Uint8Array(colors.flatMap(c => [c.r, c.g, c.b]));\n accentIdx = Object.keys(palette.colors).indexOf(palette.accent);\n outputColors = colors;\n }\n\n const indices = wasmDitherImage(\n pixels, image.width,\n schemeId, paletteBytes, accentIdx,\n mode as number, serpentine,\n exposure, saturation, shadows, highlights,\n toneArg, gamutArg,\n );\n\n return { width: image.width, height: image.height, indices, palette: outputColors };\n}\n\n/** Map `'auto'` → `undefined` (Rust None = auto), `'off'` → 0.0, number → pass through. */\nfunction parseCompression(v: number | 'auto' | 'off'): number | undefined {\n if (v === 'auto') return undefined;\n if (v === 'off') return 0.0;\n return v;\n}\n","export { ditherImage } from './core';\nexport type { DitherOptions } from './core';\nexport { DitherMode } from './enums';\nexport {\n ColorScheme,\n getPalette,\n getColorCount,\n fromValue,\n // Measured palettes\n SPECTRA_7_3_6COLOR,\n SPECTRA_7_3_6COLOR_V2,\n MONO_4_26,\n BWRY_4_2,\n SOLUM_BWR,\n HANSHOW_BWR,\n HANSHOW_BWY,\n BWRY_3_97,\n} from './palettes';\nexport type { RGB, ImageBuffer, PaletteImageBuffer, ColorPalette } from './types';\n\nexport const VERSION = '0.1.0';\n"]}
1
+ {"version":3,"sources":["../src/enums.ts","../src/palettes.ts","../src/wasm-core/epaper_dithering_wasm_bg.js","../src/core.ts","../src/index.ts"],"names":["DitherMode","ColorScheme"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Dithering algorithm modes\n * Values match firmware conventions (0-8)\n */\nexport enum DitherMode {\n NONE = 0,\n BURKES = 1,\n ORDERED = 2,\n FLOYD_STEINBERG = 3,\n ATKINSON = 4,\n STUCKI = 5,\n SIERRA = 6,\n SIERRA_LITE = 7,\n JARVIS_JUDICE_NINKE = 8,\n}","import type { ColorPalette } from './types';\n\n/**\n * E-paper display color schemes\n * Values match firmware conventions (0-7)\n */\nexport enum ColorScheme {\n MONO = 0,\n BWR = 1,\n BWY = 2,\n BWRY = 3,\n BWGBRY = 4,\n GRAYSCALE_4 = 5,\n GRAYSCALE_8 = 6,\n GRAYSCALE_16 = 7,\n}\n\nconst PALETTES: Record<ColorScheme, ColorPalette> = {\n [ColorScheme.MONO]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n white: { r: 255, g: 255, b: 255 },\n },\n accent: 'black',\n },\n [ColorScheme.BWR]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n white: { r: 255, g: 255, b: 255 },\n red: { r: 255, g: 0, b: 0 },\n },\n accent: 'red',\n },\n [ColorScheme.BWY]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n white: { r: 255, g: 255, b: 255 },\n yellow: { r: 255, g: 255, b: 0 },\n },\n accent: 'yellow',\n },\n [ColorScheme.BWRY]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n white: { r: 255, g: 255, b: 255 },\n yellow: { r: 255, g: 255, b: 0 },\n red: { r: 255, g: 0, b: 0 },\n },\n accent: 'red',\n },\n [ColorScheme.BWGBRY]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n white: { r: 255, g: 255, b: 255 },\n yellow: { r: 255, g: 255, b: 0 },\n red: { r: 255, g: 0, b: 0 },\n blue: { r: 0, g: 0, b: 255 },\n green: { r: 0, g: 255, b: 0 },\n },\n accent: 'red',\n },\n [ColorScheme.GRAYSCALE_4]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n gray1: { r: 85, g: 85, b: 85 },\n gray2: { r: 170, g: 170, b: 170 },\n white: { r: 255, g: 255, b: 255 },\n },\n accent: 'black',\n },\n [ColorScheme.GRAYSCALE_8]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n gray1: { r: 36, g: 36, b: 36 },\n gray2: { r: 73, g: 73, b: 73 },\n gray3: { r: 109, g: 109, b: 109 },\n gray4: { r: 146, g: 146, b: 146 },\n gray5: { r: 182, g: 182, b: 182 },\n gray6: { r: 219, g: 219, b: 219 },\n white: { r: 255, g: 255, b: 255 },\n },\n accent: 'black',\n },\n [ColorScheme.GRAYSCALE_16]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n gray1: { r: 17, g: 17, b: 17 },\n gray2: { r: 34, g: 34, b: 34 },\n gray3: { r: 51, g: 51, b: 51 },\n gray4: { r: 68, g: 68, b: 68 },\n gray5: { r: 85, g: 85, b: 85 },\n gray6: { r: 102, g: 102, b: 102 },\n gray7: { r: 119, g: 119, b: 119 },\n gray8: { r: 136, g: 136, b: 136 },\n gray9: { r: 153, g: 153, b: 153 },\n gray10: { r: 170, g: 170, b: 170 },\n gray11: { r: 187, g: 187, b: 187 },\n gray12: { r: 204, g: 204, b: 204 },\n gray13: { r: 221, g: 221, b: 221 },\n gray14: { r: 238, g: 238, b: 238 },\n white: { r: 255, g: 255, b: 255 },\n },\n accent: 'black',\n },\n};\n\n/** Get color palette for a color scheme */\nexport function getPalette(scheme: ColorScheme): ColorPalette {\n return PALETTES[scheme];\n}\n\n/** Get number of colors in a color scheme */\nexport function getColorCount(scheme: ColorScheme): number {\n return Object.keys(PALETTES[scheme].colors).length;\n}\n\n/** Create ColorScheme from firmware integer value */\nexport function fromValue(value: number): ColorScheme {\n if (value < 0 || value > 7) {\n throw new Error(`Invalid color scheme value: ${value}`);\n }\n return value as ColorScheme;\n}\n\n// =============================================================================\n// Measured Palettes for Specific E-Paper Displays\n// =============================================================================\n//\n// These constants provide measured RGB values from real e-paper displays.\n// Pass them directly to ditherImage() instead of a ColorScheme enum.\n//\n// Usage:\n// import { ditherImage, SPECTRA_7_3_6COLOR } from '@opendisplay/epaper-dithering';\n// const result = ditherImage(imageBuffer, SPECTRA_7_3_6COLOR);\n//\n// NOTE: RGB values are defined in packages/rust/core/src/measured_palettes.rs\n// (single source of truth). The Python package derives its constants from Rust\n// via FFI at import time. TypeScript cannot do the same (WASM init order), so\n// values here must be kept in sync manually with the Rust source.\n// The WASM `measured_palettes()` function is exposed for future tooling.\n//\n// TO ADD A NEW DISPLAY: update measured_palettes.rs + add the constant below.\n// =============================================================================\n\n// 7.3\" Spectra™ 6-color (BWGBRY scheme)\n// Measured: 2026-02-03, iPhone 15 Pro Max RAW + Hue Play bars @ 6500K\n// Paper reference RGB(215,217,218); normalization: value × (255/paper_channel)\nexport const SPECTRA_7_3_6COLOR: ColorPalette = {\n scheme: ColorScheme.BWGBRY,\n colors: {\n black: { r: 26, g: 13, b: 35 },\n white: { r: 185, g: 202, b: 205 },\n yellow: { r: 202, g: 184, b: 0 },\n red: { r: 121, g: 9, b: 0 },\n blue: { r: 0, g: 69, b: 139 },\n green: { r: 40, g: 82, b: 57 },\n },\n accent: 'red',\n};\n\n// 4.26\" Monochrome (MONO scheme)\nexport const MONO_4_26: ColorPalette = {\n scheme: ColorScheme.MONO,\n colors: {\n black: { r: 5, g: 5, b: 5 },\n white: { r: 220, g: 220, b: 220 },\n },\n accent: 'black',\n};\n\n// 4.2\" BWRY (BWRY scheme)\nexport const BWRY_4_2: ColorPalette = {\n scheme: ColorScheme.BWRY,\n colors: {\n black: { r: 5, g: 5, b: 5 },\n white: { r: 200, g: 200, b: 200 },\n yellow: { r: 200, g: 180, b: 0 },\n red: { r: 120, g: 15, b: 5 },\n },\n accent: 'red',\n};\n\n// Solum BWR (harvested display, BWR scheme)\nexport const SOLUM_BWR: ColorPalette = {\n scheme: ColorScheme.BWR,\n colors: {\n black: { r: 5, g: 5, b: 5 },\n white: { r: 200, g: 200, b: 200 },\n red: { r: 120, g: 15, b: 5 },\n },\n accent: 'red',\n};\n\n// Hanshow BWR (harvested display, BWR scheme)\nexport const HANSHOW_BWR: ColorPalette = {\n scheme: ColorScheme.BWR,\n colors: {\n black: { r: 5, g: 5, b: 5 },\n white: { r: 200, g: 200, b: 200 },\n red: { r: 120, g: 15, b: 5 },\n },\n accent: 'red',\n};\n\n// Hanshow BWY (harvested display, BWY scheme)\nexport const HANSHOW_BWY: ColorPalette = {\n scheme: ColorScheme.BWY,\n colors: {\n black: { r: 5, g: 5, b: 5 },\n white: { r: 200, g: 200, b: 200 },\n yellow: { r: 200, g: 180, b: 0 },\n },\n accent: 'yellow',\n};\n\n// 3.97\" BWRY — EP397YR_800x480 (BWRY scheme)\n// 7.3\" Spectra™ 6-color (BWGBRY scheme) — v2 measurement\n// Measured: 2026-03-15, iPhone 15 Pro Max RAW + Affinity (v3), A4 paper white reference\n// Method: DNG with linear tone curve, WB from A4 paper, uniform ×2.4 scale\nexport const SPECTRA_7_3_6COLOR_V2: ColorPalette = {\n scheme: ColorScheme.BWGBRY,\n colors: {\n black: { r: 31, g: 24, b: 41 },\n white: { r: 168, g: 180, b: 182 },\n yellow: { r: 180, g: 173, b: 0 },\n red: { r: 113, g: 24, b: 19 },\n blue: { r: 36, g: 70, b: 139 },\n green: { r: 50, g: 84, b: 60 },\n },\n accent: 'red',\n};\n\n// Measured: 2026-03-06, iPhone RAW\n// Paper reference RGB(205,205,205); normalization: value × (255/205)\nexport const BWRY_3_97: ColorPalette = {\n scheme: ColorScheme.BWRY,\n colors: {\n black: { r: 10, g: 7, b: 14 },\n white: { r: 173, g: 178, b: 174 },\n yellow: { r: 172, g: 128, b: 0 },\n red: { r: 85, g: 24, b: 14 },\n },\n accent: 'red',\n};\n","/**\n * Composite an RGBA buffer onto white, returning flat RGB bytes (sRGB).\n * @param {Uint8Array} rgba\n * @returns {Uint8Array}\n */\nexport function composite_rgba(rgba) {\n const ptr0 = passArray8ToWasm0(rgba, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.composite_rgba(ptr0, len0);\n var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);\n return v2;\n}\n\n/**\n * Dither a flat RGB image. Accepts either an idealized `scheme_id` or a measured\n * `palette_bytes`/`accent_idx` pair; `palette_bytes` empty ⇒ use `scheme_id`.\n *\n * Returns a `Uint8Array` of palette indices (one per pixel, length = width × height).\n * @param {Uint8Array} pixels\n * @param {number} width\n * @param {number} scheme_id\n * @param {Uint8Array} palette_bytes\n * @param {number} accent_idx\n * @param {number} mode_id\n * @param {boolean} serpentine\n * @param {number} exposure\n * @param {number} saturation\n * @param {number} shadows\n * @param {number} highlights\n * @param {number | null} [tone]\n * @param {number | null} [gamut]\n * @returns {Uint8Array}\n */\nexport function dither_image(pixels, width, scheme_id, palette_bytes, accent_idx, mode_id, serpentine, exposure, saturation, shadows, highlights, tone, gamut) {\n const ptr0 = passArray8ToWasm0(pixels, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passArray8ToWasm0(palette_bytes, wasm.__wbindgen_malloc);\n const len1 = WASM_VECTOR_LEN;\n const ret = wasm.dither_image(ptr0, len0, width, scheme_id, ptr1, len1, accent_idx, mode_id, serpentine, exposure, saturation, shadows, highlights, !isLikeNone(tone), isLikeNone(tone) ? 0 : tone, !isLikeNone(gamut), isLikeNone(gamut) ? 0 : gamut);\n if (ret[3]) {\n throw takeFromExternrefTable0(ret[2]);\n }\n var v3 = getArrayU8FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);\n return v3;\n}\n\n/**\n * Returns all measured palettes as a JSON string.\n *\n * Format: `[{\"id\": \"SPECTRA_7_3_6COLOR\", \"colors\": [[r,g,b], ...], \"color_names\": [...], \"accent_idx\": 3, \"scheme_id\": 4}, ...]`\n * @returns {string}\n */\nexport function measured_palettes() {\n let deferred1_0;\n let deferred1_1;\n try {\n const ret = wasm.measured_palettes();\n deferred1_0 = ret[0];\n deferred1_1 = ret[1];\n return getStringFromWasm0(ret[0], ret[1]);\n } finally {\n wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);\n }\n}\nexport function __wbindgen_cast_0000000000000001(arg0, arg1) {\n // Cast intrinsic for `Ref(String) -> Externref`.\n const ret = getStringFromWasm0(arg0, arg1);\n return ret;\n}\nexport function __wbindgen_init_externref_table() {\n const table = wasm.__wbindgen_externrefs;\n const offset = table.grow(4);\n table.set(0, undefined);\n table.set(offset + 0, undefined);\n table.set(offset + 1, null);\n table.set(offset + 2, true);\n table.set(offset + 3, false);\n}\nfunction getArrayU8FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nfunction getStringFromWasm0(ptr, len) {\n return decodeText(ptr >>> 0, len);\n}\n\nlet cachedUint8ArrayMemory0 = null;\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nfunction passArray8ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 1, 1) >>> 0;\n getUint8ArrayMemory0().set(arg, ptr / 1);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nfunction takeFromExternrefTable0(idx) {\n const value = wasm.__wbindgen_externrefs.get(idx);\n wasm.__externref_table_dealloc(idx);\n return value;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\ncachedTextDecoder.decode();\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(ptr, len) {\n numBytesDecoded += len;\n if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n cachedTextDecoder.decode();\n numBytesDecoded = len;\n }\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nlet WASM_VECTOR_LEN = 0;\n\n\nlet wasm;\nexport function __wbg_set_wasm(val) {\n wasm = val;\n}\n","import type { ImageBuffer, PaletteImageBuffer, ColorPalette } from './types';\nimport { DitherMode } from './enums';\nimport { ColorScheme, getPalette } from './palettes';\nimport {\n dither_image as wasmDitherImage,\n composite_rgba as wasmCompositeRgba,\n __wbg_set_wasm,\n __wbindgen_init_externref_table,\n __wbindgen_cast_0000000000000001,\n} from './wasm-core/epaper_dithering_wasm_bg.js';\nimport wasmBytes from './wasm-core/epaper_dithering_wasm_bg.wasm';\n\n// Synchronous WASM initialization — runs once at module load time.\nconst wasmModule = new WebAssembly.Module(wasmBytes as unknown as ArrayBuffer);\nconst wasmInstance = new WebAssembly.Instance(wasmModule, {\n './epaper_dithering_wasm_bg.js': {\n __wbindgen_init_externref_table,\n __wbindgen_cast_0000000000000001,\n },\n});\n__wbg_set_wasm(wasmInstance.exports);\n(wasmInstance.exports as Record<string, () => void>).__wbindgen_start?.();\n\n/**\n * Options for `ditherImage`. All fields are optional — defaults are sensible.\n *\n * Pre-processing pipeline (each step is a no-op at its identity value):\n * `exposure → saturation → shadows/highlights → tone → gamut → dither`.\n */\nexport interface DitherOptions {\n /** Dithering algorithm. Default: `DitherMode.BURKES`. */\n mode?: DitherMode;\n /** Alternate row scan direction for error diffusion. Default: `true`. */\n serpentine?: boolean;\n /** Linear-RGB exposure multiplier. 1.0 = no change, 2.0 = +1 stop. Default: `1.0`. */\n exposure?: number;\n /** OKLab saturation multiplier. 1.0 = no change, 0.0 = grayscale. Default: `1.0`. */\n saturation?: number;\n /** Shadow lift strength (S-curve lower half). 0.0 = off, 1.0 = strong. Default: `0.0`. */\n shadows?: number;\n /** Highlight compression strength (S-curve upper half). 0.0 = off, 1.0 = strong. Default: `0.0`. */\n highlights?: number;\n /** Dynamic-range compression: `0.0`/`'off'` disables, `'auto'` opts in. Default: `0.0`. */\n tone?: number | 'auto' | 'off';\n /** Gamut compression: `0.0`/`'off'` disables, `'auto'` opts in. Default: `0.0`. */\n gamut?: number | 'auto' | 'off';\n}\n\n/**\n * Apply dithering to an RGBA image for an e-paper display.\n *\n * @param image Input RGBA image. Alpha is composited on white.\n * @param palette Target palette: `ColorScheme` enum (idealized) or `ColorPalette` (measured).\n * @param options Per-call overrides — see {@link DitherOptions}.\n * @returns Palette-indexed image buffer.\n */\nexport function ditherImage(\n image: ImageBuffer,\n palette: ColorScheme | ColorPalette,\n options: DitherOptions = {},\n): PaletteImageBuffer {\n const {\n mode = DitherMode.BURKES,\n serpentine = true,\n exposure = 1.0,\n saturation = 1.0,\n shadows = 0.0,\n highlights = 0.0,\n tone = 0.0,\n gamut = 0.0,\n } = options;\n\n const rgba = new Uint8Array(image.data.buffer, image.data.byteOffset, image.data.byteLength);\n const pixels = wasmCompositeRgba(rgba);\n\n // Idealized schemes don't have a measured display range, so tone/gamut don't apply.\n const isScheme = typeof palette === 'number';\n const toneArg = isScheme ? 0.0 : parseCompression(tone);\n const gamutArg = isScheme ? 0.0 : parseCompression(gamut);\n\n let schemeId = 0;\n let paletteBytes: Uint8Array;\n let accentIdx = 0;\n let outputColors: { r: number; g: number; b: number }[];\n\n if (isScheme) {\n schemeId = palette as number;\n paletteBytes = new Uint8Array(0);\n outputColors = Object.values(getPalette(palette).colors);\n } else {\n schemeId = palette.scheme ?? 255;\n const colors = Object.values(palette.colors);\n paletteBytes = new Uint8Array(colors.flatMap(c => [c.r, c.g, c.b]));\n accentIdx = Object.keys(palette.colors).indexOf(palette.accent);\n outputColors = colors;\n }\n\n const indices = wasmDitherImage(\n pixels, image.width,\n schemeId, paletteBytes, accentIdx,\n mode as number, serpentine,\n exposure, saturation, shadows, highlights,\n toneArg, gamutArg,\n );\n\n return { width: image.width, height: image.height, indices, palette: outputColors };\n}\n\n/** Map `'auto'` → `undefined` (Rust None = auto), `'off'` → 0.0, number → pass through. */\nfunction parseCompression(v: number | 'auto' | 'off'): number | undefined {\n if (v === 'auto') return undefined;\n if (v === 'off') return 0.0;\n return v;\n}\n","export { ditherImage } from './core';\nexport type { DitherOptions } from './core';\nexport { DitherMode } from './enums';\nexport {\n ColorScheme,\n getPalette,\n getColorCount,\n fromValue,\n // Measured palettes\n SPECTRA_7_3_6COLOR,\n SPECTRA_7_3_6COLOR_V2,\n MONO_4_26,\n BWRY_4_2,\n SOLUM_BWR,\n HANSHOW_BWR,\n HANSHOW_BWY,\n BWRY_3_97,\n} from './palettes';\nexport type { RGB, ImageBuffer, PaletteImageBuffer, ColorPalette } from './types';\n\nexport const VERSION = '0.1.0';\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opendisplay/epaper-dithering",
3
- "version": "4.0.0",
3
+ "version": "4.1.0",
4
4
  "description": "Dithering algorithms for e-paper/e-ink displays (JavaScript/TypeScript)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",