@pixagram/renderart 0.1.3 → 0.2.1

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/README.md CHANGED
@@ -4,15 +4,9 @@ High-performance pixel art rendering engines with GPU (WebGL2) and CPU (WASM) su
4
4
 
5
5
  ## Features
6
6
 
7
- - **CRT Effect** (2-32x) - Classic CRT display simulation with barrel distortion, scanlines, and shadow mask
8
- - **HEX Upscaling** (2-32x) - Transform pixel art into hexagonal grid representations
9
- - **XBRZ Scaling** (2-6x) - Edge-preserving pixel art scaling algorithm
10
-
11
- All engines support:
12
- - ⚡ **GPU acceleration** via WebGL2 (CRT, HEX)
13
- - 🦀 **CPU fallback** via Rust/WASM (all engines)
14
- - 🎨 **Customizable presets** and fine-grained options
15
- - 📦 **Zero dependencies** - everything bundled
7
+ - **CRT Effect** (2-32x) - Classic CRT display simulation
8
+ - **HEX Upscaling** (2-32x) - Hexagonal grid transformation
9
+ - **XBRZ Scaling** (2-6x) - Edge-preserving pixel art scaling
16
10
 
17
11
  ## Installation
18
12
 
@@ -22,174 +16,130 @@ npm install @pixagram/renderart
22
16
 
23
17
  ## Quick Start
24
18
 
25
- ```typescript
26
- import { RenderArt } from '@pixagram/renderart';
27
-
28
- // Initialize (loads WASM if needed)
29
- const renderer = await RenderArt.create();
30
-
31
- // Get your image data
32
- const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
33
-
34
- // Apply CRT effect
35
- const crtResult = await renderer.crt.render(imageData, { scale: 3 });
19
+ ### GPU-Only (Simplest - No WASM needed)
36
20
 
37
- // Apply hexagonal transformation
38
- const hexResult = await renderer.hex.render(imageData, { scale: 16 });
21
+ ```typescript
22
+ import { CrtGpuRenderer } from '@pixagram/renderart';
39
23
 
40
- // Apply xBRZ scaling
41
- const xbrzResult = await renderer.xbrz.render(imageData, { scale: 4 });
24
+ const crt = CrtGpuRenderer.create();
25
+ const result = crt.render(imageData, { scale: 3 });
42
26
 
43
27
  // Use the result
44
- ctx.putImageData(new ImageData(crtResult.data, crtResult.width, crtResult.height), 0, 0);
28
+ ctx.putImageData(new ImageData(result.data, result.width, result.height), 0, 0);
45
29
  ```
46
30
 
47
- ## API Reference
31
+ ### With CPU Fallback (Auto WASM loading)
48
32
 
49
- ### RenderArt
33
+ ```typescript
34
+ import { RenderArt, setWasmUrl } from '@pixagram/renderart';
50
35
 
51
- Main class providing access to all rendering engines.
36
+ // Configure WASM path (copy renderart_wasm.wasm to your public folder)
37
+ setWasmUrl('/wasm/renderart_wasm.wasm');
52
38
 
53
- ```typescript
54
- const renderer = await RenderArt.create();
39
+ const renderer = RenderArt.create();
55
40
 
56
- // Access capabilities
57
- console.log(renderer.capabilities);
58
- // { gpu: true, cpu: true, maxTextureSize: 16384, recommendedBackend: 'gpu' }
41
+ // GPU when available, auto-loads WASM for CPU fallback
42
+ const result = await renderer.crt.render(imageData, { scale: 3 });
59
43
 
60
- // Cleanup when done
61
- renderer.dispose();
44
+ // XBRZ is CPU-only (auto-loads WASM on first use)
45
+ const xbrzResult = await renderer.xbrz.render(imageData, { scale: 4 });
62
46
  ```
63
47
 
64
- ### CRT Engine
48
+ ### Pre-load WASM
65
49
 
66
50
  ```typescript
67
- // With options
68
- const result = await renderer.crt.render(imageData, {
69
- scale: 3, // 2-32 (default: 3)
70
- warpX: 0.015, // Horizontal curvature (default: 0.015)
71
- warpY: 0.02, // Vertical curvature (default: 0.02)
72
- scanHardness: -4.0, // Scanline sharpness (default: -4.0)
73
- scanOpacity: 0.5, // Scanline intensity (default: 0.5)
74
- maskOpacity: 0.3, // Shadow mask intensity (default: 0.3)
75
- enableWarp: true, // Enable barrel distortion
76
- enableScanlines: true, // Enable scanlines
77
- enableMask: true, // Enable shadow mask
78
- backend: 'auto', // 'gpu', 'cpu', or 'auto'
79
- });
80
-
81
- // With preset
82
- const result = await renderer.crt.render(imageData, 'authentic');
83
- // Presets: 'default', 'authentic', 'subtle', 'flat'
51
+ import { initWasm, setWasmUrl } from '@pixagram/renderart';
84
52
 
85
- // Synchronous GPU-only rendering
86
- const result = renderer.crt.renderSync(imageData, { scale: 3 });
53
+ // Pre-load WASM for faster first CPU render
54
+ setWasmUrl('/wasm/renderart_wasm.wasm');
55
+ await initWasm();
87
56
  ```
88
57
 
89
- ### HEX Engine
58
+ ## WASM Setup
90
59
 
91
- ```typescript
92
- // With options
93
- const result = await renderer.hex.render(imageData, {
94
- scale: 16, // 2-32 (default: 16)
95
- orientation: 'flat-top', // 'flat-top' or 'pointy-top'
96
- drawBorders: true, // Draw hexagon borders
97
- borderColor: '#282828', // Border color (CSS or 0xRRGGBBAA)
98
- borderThickness: 1, // Border thickness in pixels
99
- backgroundColor: 'transparent', // Background color
100
- backend: 'auto',
101
- });
60
+ 1. Build the WASM module:
61
+ ```bash
62
+ cd node_modules/@pixagram/renderart
63
+ npm run build:wasm
64
+ ```
102
65
 
103
- // With preset
104
- const result = await renderer.hex.render(imageData, 'bordered');
105
- // Presets: 'default', 'bordered', 'pointy'
66
+ 2. Copy `wasm/renderart_wasm.wasm` to your public folder
106
67
 
107
- // Get output dimensions
108
- const dims = renderer.hex.getDimensions(64, 64, { scale: 16 });
109
- // { width: 123, height: 134 }
110
- ```
68
+ 3. Configure the path:
69
+ ```typescript
70
+ import { setWasmUrl } from '@pixagram/renderart';
71
+ setWasmUrl('/your/path/renderart_wasm.wasm');
72
+ ```
111
73
 
112
- ### XBRZ Engine
74
+ ## API Reference
75
+
76
+ ### CRT Options
113
77
 
114
78
  ```typescript
115
- // With options
116
- const result = await renderer.xbrz.render(imageData, {
117
- scale: 4, // 2-6 (default: 2)
118
- luminanceWeight: 1.0, // Edge detection weight
119
- equalColorTolerance: 30, // Color matching tolerance
120
- dominantDirectionThreshold: 4.4, // Edge direction threshold
121
- steepDirectionThreshold: 2.2, // Steep edge threshold
122
- });
123
-
124
- // With preset
125
- const result = await renderer.xbrz.render(imageData, 'sharp');
126
- // Presets: 'default', 'sharp', 'smooth'
127
-
128
- // Get output dimensions
129
- const dims = renderer.xbrz.getDimensions(64, 64, 4);
130
- // { width: 256, height: 256 }
79
+ {
80
+ scale: 3, // 2-32
81
+ warpX: 0.015, // Horizontal curvature
82
+ warpY: 0.02, // Vertical curvature
83
+ scanHardness: -4.0, // Scanline sharpness
84
+ scanOpacity: 0.5, // Scanline intensity
85
+ maskOpacity: 0.3, // Shadow mask intensity
86
+ enableWarp: true,
87
+ enableScanlines: true,
88
+ enableMask: true,
89
+ backend: 'auto', // 'gpu', 'cpu', or 'auto'
90
+ }
131
91
  ```
132
92
 
133
- ## Backend Selection
134
-
135
- Each engine automatically selects the best available backend:
136
-
137
- | Engine | GPU (WebGL2) | CPU (WASM) |
138
- |--------|--------------|------------|
139
- | CRT | ✅ Primary | ✅ Fallback |
140
- | HEX | ✅ Primary | ✅ Fallback |
141
- | XBRZ | ❌ N/A | ✅ Only |
93
+ ### HEX Options
142
94
 
143
- Force a specific backend:
144
95
  ```typescript
145
- // Force GPU
146
- const result = await renderer.crt.render(imageData, { backend: 'gpu' });
147
-
148
- // Force CPU
149
- const result = await renderer.crt.render(imageData, { backend: 'cpu' });
96
+ {
97
+ scale: 16, // 2-32
98
+ orientation: 'flat-top', // 'flat-top' or 'pointy-top'
99
+ drawBorders: false,
100
+ borderColor: '#282828',
101
+ borderThickness: 1,
102
+ backgroundColor: 'transparent',
103
+ backend: 'auto',
104
+ }
150
105
  ```
151
106
 
152
- ## Browser Support
153
-
154
- - Chrome 79+
155
- - Firefox 75+
156
- - Safari 15+
157
- - Edge 79+
158
-
159
- Requires:
160
- - WebGL2 for GPU rendering
161
- - WebAssembly for CPU rendering
162
-
163
- ## Performance Tips
164
-
165
- 1. **Reuse the renderer instance** - initialization is expensive
166
- 2. **Use GPU when available** - significantly faster for CRT and HEX
167
- 3. **Choose appropriate scale** - larger scales need more GPU memory
168
- 4. **Consider XBRZ scale limits** - 2-6x only, higher factors use more CPU
107
+ ### XBRZ Options
169
108
 
170
- ## Building from Source
171
-
172
- ```bash
173
- # Install dependencies
174
- npm install
175
-
176
- # Build WASM module
177
- npm run build:wasm
178
-
179
- # Build TypeScript
180
- npm run build:ts
109
+ ```typescript
110
+ {
111
+ scale: 4, // 2-6
112
+ luminanceWeight: 1.0,
113
+ equalColorTolerance: 30,
114
+ dominantDirectionThreshold: 4.4,
115
+ steepDirectionThreshold: 2.2,
116
+ }
117
+ ```
181
118
 
182
- # Full build
183
- npm run build
119
+ ## Presets
184
120
 
185
- # Run tests
186
- npm test
121
+ ```typescript
122
+ // CRT presets
123
+ renderer.crt.render(imageData, 'authentic'); // Strong CRT look
124
+ renderer.crt.render(imageData, 'subtle'); // Light CRT effect
125
+ renderer.crt.render(imageData, 'flat'); // No curvature
126
+
127
+ // HEX presets
128
+ renderer.hex.render(imageData, 'bordered'); // With borders
129
+ renderer.hex.render(imageData, 'pointy'); // Pointy-top orientation
130
+
131
+ // XBRZ presets
132
+ renderer.xbrz.render(imageData, 'sharp'); // Sharp edges
133
+ renderer.xbrz.render(imageData, 'smooth'); // Smoother output
187
134
  ```
188
135
 
189
- Requirements:
190
- - Node.js 16+
191
- - Rust toolchain
192
- - wasm-pack
136
+ ## Backend Selection
137
+
138
+ | Engine | GPU | CPU |
139
+ |--------|-----|-----|
140
+ | CRT | ✅ | ✅ |
141
+ | HEX | ✅ | ✅ |
142
+ | XBRZ | ❌ | ✅ |
193
143
 
194
144
  ## License
195
145
 
package/dist/index.d.mts CHANGED
@@ -190,55 +190,56 @@ declare const HEX_PRESETS: Record<string, Partial<HexOptions>>;
190
190
  /**
191
191
  * WASM Module Loader
192
192
  *
193
- * Handles loading and initialization of the Rust WASM module.
193
+ * Auto-initializes WASM from URL. Works with any bundler.
194
194
  */
195
195
 
196
- /** Load WASM module */
197
- declare function loadWasm(): Promise<any>;
196
+ /**
197
+ * Configure WASM loading path
198
+ * Call this before using any CPU renderer if you need a custom path.
199
+ *
200
+ * @param url - URL to the renderart_wasm_bg.wasm file
201
+ *
202
+ * @example
203
+ * ```typescript
204
+ * setWasmUrl('/static/wasm/renderart_wasm_bg.wasm');
205
+ * ```
206
+ */
207
+ declare function setWasmUrl(url: string): void;
208
+ /**
209
+ * Initialize WASM module
210
+ * Called automatically on first CPU renderer use.
211
+ * Can be called manually for preloading.
212
+ */
213
+ declare function initWasm(customUrl?: string): Promise<void>;
198
214
  /** Check if WASM is loaded */
199
215
  declare function isWasmLoaded(): boolean;
200
216
  /** CRT CPU Renderer using WASM */
201
217
  declare class CrtCpuRenderer {
202
218
  private ready;
203
- /** Create and initialize renderer */
219
+ /** Create and initialize renderer (auto-loads WASM) */
204
220
  static create(): Promise<CrtCpuRenderer>;
205
- private init;
206
- /** Check if renderer is ready */
207
221
  isReady(): boolean;
208
- /** Render CRT effect */
209
222
  render(input: ImageInput | ImageData, options?: CrtOptions): ImageOutput;
210
- /** Dispose resources */
211
223
  dispose(): void;
212
224
  }
213
225
  /** HEX CPU Renderer using WASM */
214
226
  declare class HexCpuRenderer {
215
227
  private ready;
216
- /** Create and initialize renderer */
217
228
  static create(): Promise<HexCpuRenderer>;
218
- private init;
219
- /** Check if renderer is ready */
220
229
  isReady(): boolean;
221
- /** Render hexagonal effect */
222
230
  render(input: ImageInput | ImageData, options?: HexOptions): ImageOutput;
223
- /** Get output dimensions */
224
231
  getDimensions(srcWidth: number, srcHeight: number, scale: number, orientation?: HexOrientation): {
225
232
  width: number;
226
233
  height: number;
227
234
  };
228
- /** Dispose resources */
229
235
  dispose(): void;
230
236
  }
231
237
  /** XBRZ CPU Renderer using WASM */
232
238
  declare class XbrzCpuRenderer {
233
239
  private ready;
234
- /** Create and initialize renderer */
235
240
  static create(): Promise<XbrzCpuRenderer>;
236
- private init;
237
- /** Check if renderer is ready */
238
241
  isReady(): boolean;
239
- /** Render xBRZ scaling */
240
242
  render(input: ImageInput | ImageData, options?: XbrzOptions): ImageOutput;
241
- /** Dispose resources */
242
243
  dispose(): void;
243
244
  }
244
245
  /** XBRZ presets */
@@ -247,63 +248,47 @@ declare const XBRZ_PRESETS: Record<string, Partial<XbrzOptions>>;
247
248
  /**
248
249
  * RenderArt - Unified Pixel Art Rendering Engine
249
250
  *
250
- * Provides a unified API for all rendering engines (CRT, HEX, XBRZ)
251
- * with automatic backend selection (GPU/CPU).
251
+ * GPU renderers work standalone. CPU renderers auto-initialize WASM.
252
252
  */
253
253
 
254
- /** CRT rendering engine with GPU/CPU backend support */
254
+ /** CRT rendering engine */
255
255
  declare class CrtEngine {
256
256
  private gpuRenderer;
257
257
  private cpuRenderer;
258
258
  private gpuAvailable;
259
- private cpuAvailable;
260
- constructor(gpuAvailable: boolean, cpuAvailable: boolean);
261
- /** Initialize GPU renderer */
259
+ constructor(gpuAvailable: boolean);
262
260
  private ensureGpu;
263
- /** Initialize CPU renderer */
264
261
  private ensureCpu;
265
262
  /** Render with automatic backend selection */
266
263
  render(input: ImageInput | ImageData, options?: CrtOptions): Promise<ImageOutput>;
267
- /** Render with preset */
268
264
  render(input: ImageInput | ImageData, preset: CrtPreset, overrides?: Partial<CrtOptions>): Promise<ImageOutput>;
269
265
  /** Render synchronously (GPU only) */
270
266
  renderSync(input: ImageInput | ImageData, options?: CrtOptions): ImageOutput;
271
- /** Dispose resources */
272
267
  dispose(): void;
273
268
  }
274
- /** HEX rendering engine with GPU/CPU backend support */
269
+ /** HEX rendering engine */
275
270
  declare class HexEngine {
276
271
  private gpuRenderer;
277
272
  private cpuRenderer;
278
273
  private gpuAvailable;
279
- private cpuAvailable;
280
- constructor(gpuAvailable: boolean, cpuAvailable: boolean);
274
+ constructor(gpuAvailable: boolean);
281
275
  private ensureGpu;
282
276
  private ensureCpu;
283
- /** Render with automatic backend selection */
284
277
  render(input: ImageInput | ImageData, options?: HexOptions): Promise<ImageOutput>;
285
- /** Render with preset */
286
278
  render(input: ImageInput | ImageData, preset: HexPreset, overrides?: Partial<HexOptions>): Promise<ImageOutput>;
287
- /** Render synchronously (GPU only) */
288
279
  renderSync(input: ImageInput | ImageData, options?: HexOptions): ImageOutput;
289
- /** Get output dimensions */
290
280
  getDimensions(srcWidth: number, srcHeight: number, options?: HexOptions): {
291
281
  width: number;
292
282
  height: number;
293
283
  };
294
284
  dispose(): void;
295
285
  }
296
- /** XBRZ rendering engine (CPU only - algorithm too complex for efficient GPU) */
286
+ /** XBRZ rendering engine (CPU only) */
297
287
  declare class XbrzEngine {
298
288
  private cpuRenderer;
299
- private cpuAvailable;
300
- constructor(cpuAvailable: boolean);
301
289
  private ensureCpu;
302
- /** Render xBRZ scaling */
303
290
  render(input: ImageInput | ImageData, options?: XbrzOptions): Promise<ImageOutput>;
304
- /** Render with preset */
305
291
  render(input: ImageInput | ImageData, preset: XbrzPreset, overrides?: Partial<XbrzOptions>): Promise<ImageOutput>;
306
- /** Get output dimensions */
307
292
  getDimensions(srcWidth: number, srcHeight: number, scale?: number): {
308
293
  width: number;
309
294
  height: number;
@@ -312,20 +297,19 @@ declare class XbrzEngine {
312
297
  }
313
298
  /** RenderArt - Unified Pixel Art Rendering Engine */
314
299
  declare class RenderArt {
315
- /** CRT effect renderer */
316
300
  readonly crt: CrtEngine;
317
- /** Hexagonal pixel renderer */
318
301
  readonly hex: HexEngine;
319
- /** xBRZ scaling renderer */
320
302
  readonly xbrz: XbrzEngine;
321
303
  private _capabilities;
322
304
  private constructor();
323
- /** Create and initialize RenderArt instance */
324
- static create(): Promise<RenderArt>;
325
- /** Get renderer capabilities */
305
+ /** Create RenderArt instance */
306
+ static create(): RenderArt;
307
+ /** Create GPU-only instance */
308
+ static createGpuOnly(): RenderArt;
309
+ /** Pre-initialize WASM for faster first CPU render */
310
+ preloadWasm(wasmUrl?: string): Promise<void>;
326
311
  get capabilities(): RendererCapabilities;
327
- /** Dispose all resources */
328
312
  dispose(): void;
329
313
  }
330
314
 
331
- export { type Backend, CRT_PRESETS, CrtCpuRenderer, CrtGpuRenderer, type CrtOptions, type CrtPreset, HEX_PRESETS, HexCpuRenderer, HexGpuRenderer, type HexOptions, type HexOrientation, type HexPreset, type ImageInput, type ImageOutput, type PixelData, RenderArt, type RenderStats, type Renderer, type RendererCapabilities, XBRZ_PRESETS, XbrzCpuRenderer, type XbrzOptions, type XbrzPreset, hexGetDimensions, isWasmLoaded, loadWasm };
315
+ export { type Backend, CRT_PRESETS, CrtCpuRenderer, CrtEngine, CrtGpuRenderer, type CrtOptions, type CrtPreset, HEX_PRESETS, HexCpuRenderer, HexEngine, HexGpuRenderer, type HexOptions, type HexOrientation, type HexPreset, type ImageInput, type ImageOutput, type PixelData, RenderArt, type RenderStats, type Renderer, type RendererCapabilities, XBRZ_PRESETS, XbrzCpuRenderer, XbrzEngine, type XbrzOptions, type XbrzPreset, hexGetDimensions, initWasm, isWasmLoaded, setWasmUrl };
package/dist/index.d.ts CHANGED
@@ -190,55 +190,56 @@ declare const HEX_PRESETS: Record<string, Partial<HexOptions>>;
190
190
  /**
191
191
  * WASM Module Loader
192
192
  *
193
- * Handles loading and initialization of the Rust WASM module.
193
+ * Auto-initializes WASM from URL. Works with any bundler.
194
194
  */
195
195
 
196
- /** Load WASM module */
197
- declare function loadWasm(): Promise<any>;
196
+ /**
197
+ * Configure WASM loading path
198
+ * Call this before using any CPU renderer if you need a custom path.
199
+ *
200
+ * @param url - URL to the renderart_wasm_bg.wasm file
201
+ *
202
+ * @example
203
+ * ```typescript
204
+ * setWasmUrl('/static/wasm/renderart_wasm_bg.wasm');
205
+ * ```
206
+ */
207
+ declare function setWasmUrl(url: string): void;
208
+ /**
209
+ * Initialize WASM module
210
+ * Called automatically on first CPU renderer use.
211
+ * Can be called manually for preloading.
212
+ */
213
+ declare function initWasm(customUrl?: string): Promise<void>;
198
214
  /** Check if WASM is loaded */
199
215
  declare function isWasmLoaded(): boolean;
200
216
  /** CRT CPU Renderer using WASM */
201
217
  declare class CrtCpuRenderer {
202
218
  private ready;
203
- /** Create and initialize renderer */
219
+ /** Create and initialize renderer (auto-loads WASM) */
204
220
  static create(): Promise<CrtCpuRenderer>;
205
- private init;
206
- /** Check if renderer is ready */
207
221
  isReady(): boolean;
208
- /** Render CRT effect */
209
222
  render(input: ImageInput | ImageData, options?: CrtOptions): ImageOutput;
210
- /** Dispose resources */
211
223
  dispose(): void;
212
224
  }
213
225
  /** HEX CPU Renderer using WASM */
214
226
  declare class HexCpuRenderer {
215
227
  private ready;
216
- /** Create and initialize renderer */
217
228
  static create(): Promise<HexCpuRenderer>;
218
- private init;
219
- /** Check if renderer is ready */
220
229
  isReady(): boolean;
221
- /** Render hexagonal effect */
222
230
  render(input: ImageInput | ImageData, options?: HexOptions): ImageOutput;
223
- /** Get output dimensions */
224
231
  getDimensions(srcWidth: number, srcHeight: number, scale: number, orientation?: HexOrientation): {
225
232
  width: number;
226
233
  height: number;
227
234
  };
228
- /** Dispose resources */
229
235
  dispose(): void;
230
236
  }
231
237
  /** XBRZ CPU Renderer using WASM */
232
238
  declare class XbrzCpuRenderer {
233
239
  private ready;
234
- /** Create and initialize renderer */
235
240
  static create(): Promise<XbrzCpuRenderer>;
236
- private init;
237
- /** Check if renderer is ready */
238
241
  isReady(): boolean;
239
- /** Render xBRZ scaling */
240
242
  render(input: ImageInput | ImageData, options?: XbrzOptions): ImageOutput;
241
- /** Dispose resources */
242
243
  dispose(): void;
243
244
  }
244
245
  /** XBRZ presets */
@@ -247,63 +248,47 @@ declare const XBRZ_PRESETS: Record<string, Partial<XbrzOptions>>;
247
248
  /**
248
249
  * RenderArt - Unified Pixel Art Rendering Engine
249
250
  *
250
- * Provides a unified API for all rendering engines (CRT, HEX, XBRZ)
251
- * with automatic backend selection (GPU/CPU).
251
+ * GPU renderers work standalone. CPU renderers auto-initialize WASM.
252
252
  */
253
253
 
254
- /** CRT rendering engine with GPU/CPU backend support */
254
+ /** CRT rendering engine */
255
255
  declare class CrtEngine {
256
256
  private gpuRenderer;
257
257
  private cpuRenderer;
258
258
  private gpuAvailable;
259
- private cpuAvailable;
260
- constructor(gpuAvailable: boolean, cpuAvailable: boolean);
261
- /** Initialize GPU renderer */
259
+ constructor(gpuAvailable: boolean);
262
260
  private ensureGpu;
263
- /** Initialize CPU renderer */
264
261
  private ensureCpu;
265
262
  /** Render with automatic backend selection */
266
263
  render(input: ImageInput | ImageData, options?: CrtOptions): Promise<ImageOutput>;
267
- /** Render with preset */
268
264
  render(input: ImageInput | ImageData, preset: CrtPreset, overrides?: Partial<CrtOptions>): Promise<ImageOutput>;
269
265
  /** Render synchronously (GPU only) */
270
266
  renderSync(input: ImageInput | ImageData, options?: CrtOptions): ImageOutput;
271
- /** Dispose resources */
272
267
  dispose(): void;
273
268
  }
274
- /** HEX rendering engine with GPU/CPU backend support */
269
+ /** HEX rendering engine */
275
270
  declare class HexEngine {
276
271
  private gpuRenderer;
277
272
  private cpuRenderer;
278
273
  private gpuAvailable;
279
- private cpuAvailable;
280
- constructor(gpuAvailable: boolean, cpuAvailable: boolean);
274
+ constructor(gpuAvailable: boolean);
281
275
  private ensureGpu;
282
276
  private ensureCpu;
283
- /** Render with automatic backend selection */
284
277
  render(input: ImageInput | ImageData, options?: HexOptions): Promise<ImageOutput>;
285
- /** Render with preset */
286
278
  render(input: ImageInput | ImageData, preset: HexPreset, overrides?: Partial<HexOptions>): Promise<ImageOutput>;
287
- /** Render synchronously (GPU only) */
288
279
  renderSync(input: ImageInput | ImageData, options?: HexOptions): ImageOutput;
289
- /** Get output dimensions */
290
280
  getDimensions(srcWidth: number, srcHeight: number, options?: HexOptions): {
291
281
  width: number;
292
282
  height: number;
293
283
  };
294
284
  dispose(): void;
295
285
  }
296
- /** XBRZ rendering engine (CPU only - algorithm too complex for efficient GPU) */
286
+ /** XBRZ rendering engine (CPU only) */
297
287
  declare class XbrzEngine {
298
288
  private cpuRenderer;
299
- private cpuAvailable;
300
- constructor(cpuAvailable: boolean);
301
289
  private ensureCpu;
302
- /** Render xBRZ scaling */
303
290
  render(input: ImageInput | ImageData, options?: XbrzOptions): Promise<ImageOutput>;
304
- /** Render with preset */
305
291
  render(input: ImageInput | ImageData, preset: XbrzPreset, overrides?: Partial<XbrzOptions>): Promise<ImageOutput>;
306
- /** Get output dimensions */
307
292
  getDimensions(srcWidth: number, srcHeight: number, scale?: number): {
308
293
  width: number;
309
294
  height: number;
@@ -312,20 +297,19 @@ declare class XbrzEngine {
312
297
  }
313
298
  /** RenderArt - Unified Pixel Art Rendering Engine */
314
299
  declare class RenderArt {
315
- /** CRT effect renderer */
316
300
  readonly crt: CrtEngine;
317
- /** Hexagonal pixel renderer */
318
301
  readonly hex: HexEngine;
319
- /** xBRZ scaling renderer */
320
302
  readonly xbrz: XbrzEngine;
321
303
  private _capabilities;
322
304
  private constructor();
323
- /** Create and initialize RenderArt instance */
324
- static create(): Promise<RenderArt>;
325
- /** Get renderer capabilities */
305
+ /** Create RenderArt instance */
306
+ static create(): RenderArt;
307
+ /** Create GPU-only instance */
308
+ static createGpuOnly(): RenderArt;
309
+ /** Pre-initialize WASM for faster first CPU render */
310
+ preloadWasm(wasmUrl?: string): Promise<void>;
326
311
  get capabilities(): RendererCapabilities;
327
- /** Dispose all resources */
328
312
  dispose(): void;
329
313
  }
330
314
 
331
- export { type Backend, CRT_PRESETS, CrtCpuRenderer, CrtGpuRenderer, type CrtOptions, type CrtPreset, HEX_PRESETS, HexCpuRenderer, HexGpuRenderer, type HexOptions, type HexOrientation, type HexPreset, type ImageInput, type ImageOutput, type PixelData, RenderArt, type RenderStats, type Renderer, type RendererCapabilities, XBRZ_PRESETS, XbrzCpuRenderer, type XbrzOptions, type XbrzPreset, hexGetDimensions, isWasmLoaded, loadWasm };
315
+ export { type Backend, CRT_PRESETS, CrtCpuRenderer, CrtEngine, CrtGpuRenderer, type CrtOptions, type CrtPreset, HEX_PRESETS, HexCpuRenderer, HexEngine, HexGpuRenderer, type HexOptions, type HexOrientation, type HexPreset, type ImageInput, type ImageOutput, type PixelData, RenderArt, type RenderStats, type Renderer, type RendererCapabilities, XBRZ_PRESETS, XbrzCpuRenderer, XbrzEngine, type XbrzOptions, type XbrzPreset, hexGetDimensions, initWasm, isWasmLoaded, setWasmUrl };