imgcraft 0.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/README.md +98 -0
- package/dist/adapters/runtime.d.ts +7 -0
- package/dist/adapters/runtime.d.ts.map +1 -0
- package/dist/adapters/runtime.js +16 -0
- package/dist/adapters/runtime.js.map +1 -0
- package/dist/batch.d.ts +60 -0
- package/dist/batch.d.ts.map +1 -0
- package/dist/batch.js +207 -0
- package/dist/batch.js.map +1 -0
- package/dist/engines/node.d.ts +8 -0
- package/dist/engines/node.d.ts.map +1 -0
- package/dist/engines/node.js +176 -0
- package/dist/engines/node.js.map +1 -0
- package/dist/engines/wasm.d.ts +8 -0
- package/dist/engines/wasm.d.ts.map +1 -0
- package/dist/engines/wasm.js +199 -0
- package/dist/engines/wasm.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/pipeline.d.ts +45 -0
- package/dist/pipeline.d.ts.map +1 -0
- package/dist/pipeline.js +135 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/transforms/ai.d.ts +6 -0
- package/dist/transforms/ai.d.ts.map +1 -0
- package/dist/transforms/ai.js +143 -0
- package/dist/transforms/ai.js.map +1 -0
- package/dist/types.d.ts +158 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/package.json +51 -0
package/README.md
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# imgcraft
|
|
2
|
+
|
|
3
|
+
Chainable image transforms for Node + Browser.
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/imgcraft)
|
|
6
|
+
[](https://www.typescriptlang.org/)
|
|
7
|
+
[](LICENSE)
|
|
8
|
+
|
|
9
|
+
## Install
|
|
10
|
+
|
|
11
|
+
```sh
|
|
12
|
+
npm install imgcraft
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Node.js uses [sharp](https://sharp.pixelplumbing.com/) under the hood (optional peer dep). Browser uses WASM — no extra install.
|
|
16
|
+
|
|
17
|
+
## Usage
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
import { img, batch } from 'imgcraft'
|
|
21
|
+
|
|
22
|
+
// Node
|
|
23
|
+
const buf = await img('photo.jpg')
|
|
24
|
+
.resize(800, 600)
|
|
25
|
+
.webp({ quality: 85 })
|
|
26
|
+
.toBuffer()
|
|
27
|
+
|
|
28
|
+
// Browser (same API, WASM engine auto-selected)
|
|
29
|
+
const url = await img(file)
|
|
30
|
+
.resize(400)
|
|
31
|
+
.removeBackground()
|
|
32
|
+
.toDataURL()
|
|
33
|
+
|
|
34
|
+
// Batch
|
|
35
|
+
await batch(['a.jpg', 'b.jpg', 'c.jpg'])
|
|
36
|
+
.resize(1200)
|
|
37
|
+
.webp()
|
|
38
|
+
.toDir('./output')
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Features
|
|
42
|
+
|
|
43
|
+
| Feature | Status |
|
|
44
|
+
|---|---|
|
|
45
|
+
| Node.js (sharp engine) | ✅ |
|
|
46
|
+
| Browser (WASM engine) | ✅ |
|
|
47
|
+
| AI ops (bg removal, smart crop, upscale) | ✅ |
|
|
48
|
+
| TypeScript strict | ✅ |
|
|
49
|
+
| Zero config | ✅ |
|
|
50
|
+
| Tree-shakeable ESM | ✅ |
|
|
51
|
+
|
|
52
|
+
## API
|
|
53
|
+
|
|
54
|
+
### Transform
|
|
55
|
+
|
|
56
|
+
| Method | Description |
|
|
57
|
+
|---|---|
|
|
58
|
+
| `.resize(w?, h?, opts?)` | Resize. `opts.fit`: cover / contain / fill / inside / outside |
|
|
59
|
+
| `.crop({ left, top, width, height })` | Extract a region |
|
|
60
|
+
| `.rotate(angle, opts?)` | Rotate by degrees |
|
|
61
|
+
| `.flip()` | Flip vertically |
|
|
62
|
+
| `.flop()` | Flip horizontally |
|
|
63
|
+
| `.format(type, opts?)` | Set output format: jpeg / png / webp / avif / tiff |
|
|
64
|
+
| `.jpeg(opts?)` `.png(opts?)` `.webp(opts?)` `.avif(opts?)` | Format shorthands |
|
|
65
|
+
| `.quality(1–100)` | Set output quality |
|
|
66
|
+
| `.blur(sigma?)` | Gaussian blur |
|
|
67
|
+
| `.sharpen(opts?)` | Unsharp mask |
|
|
68
|
+
| `.median(size?)` | Median filter |
|
|
69
|
+
| `.grayscale()` | Convert to greyscale |
|
|
70
|
+
| `.tint({ r, g, b })` | Apply color tint |
|
|
71
|
+
| `.negate()` | Invert colors |
|
|
72
|
+
| `.brightness(value)` | Brightness multiplier (1 = no change) |
|
|
73
|
+
| `.contrast({ value })` | Contrast multiplier (1 = no change) |
|
|
74
|
+
| `.saturation(value)` | Saturation multiplier |
|
|
75
|
+
| `.composite(opts)` | Overlay / watermark |
|
|
76
|
+
| `.stripMeta()` | Remove EXIF and ICC metadata |
|
|
77
|
+
|
|
78
|
+
### AI
|
|
79
|
+
|
|
80
|
+
| Method | Description |
|
|
81
|
+
|---|---|
|
|
82
|
+
| `.removeBackground()` | ONNX-based bg removal, runs locally, no API key |
|
|
83
|
+
| `.smartCrop(subject)` | Face / object aware crop |
|
|
84
|
+
| `.upscale(factor)` | 2× or 4× via ESRGAN |
|
|
85
|
+
|
|
86
|
+
### Output
|
|
87
|
+
|
|
88
|
+
| Method | Returns |
|
|
89
|
+
|---|---|
|
|
90
|
+
| `.toBuffer()` | `Buffer` (Node) / `Uint8Array` (Browser) |
|
|
91
|
+
| `.toFile(path)` | `Promise<void>` — Node only |
|
|
92
|
+
| `.toStream()` | `ReadableStream<Uint8Array>` |
|
|
93
|
+
| `.toDataURL()` | `Promise<string>` — base64 data URI |
|
|
94
|
+
| `.meta()` | `Promise<MetadataResult>` — reads metadata, no processing |
|
|
95
|
+
|
|
96
|
+
## License
|
|
97
|
+
|
|
98
|
+
MIT
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { PipelineState, MetadataResult, EngineResult, ImageInput } from '../types.js';
|
|
2
|
+
export interface Engine {
|
|
3
|
+
process(state: PipelineState): Promise<EngineResult>;
|
|
4
|
+
metadata(input: ImageInput): Promise<MetadataResult>;
|
|
5
|
+
}
|
|
6
|
+
export declare function getEngine(): Promise<Engine>;
|
|
7
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/adapters/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE1F,MAAM,WAAW,MAAM;IACrB,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IACpD,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;CACrD;AAWD,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAQjD"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
function detectNode() {
|
|
2
|
+
// Cloudflare Workers expose a `process` global but no `process.versions.node`
|
|
3
|
+
return (typeof process !== 'undefined' &&
|
|
4
|
+
typeof process.versions !== 'undefined' &&
|
|
5
|
+
typeof process.versions.node === 'string');
|
|
6
|
+
}
|
|
7
|
+
export async function getEngine() {
|
|
8
|
+
if (detectNode()) {
|
|
9
|
+
const { nodeEngine } = await import('../engines/node.js');
|
|
10
|
+
return nodeEngine;
|
|
11
|
+
}
|
|
12
|
+
// Browser and Cloudflare Workers both use the WASM engine
|
|
13
|
+
const { wasmEngine } = await import('../engines/wasm.js');
|
|
14
|
+
return wasmEngine;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/adapters/runtime.ts"],"names":[],"mappings":"AAOA,SAAS,UAAU;IACjB,8EAA8E;IAC9E,OAAO,CACL,OAAO,OAAO,KAAK,WAAW;QAC9B,OAAO,OAAO,CAAC,QAAQ,KAAK,WAAW;QACvC,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAC1C,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,IAAI,UAAU,EAAE,EAAE,CAAC;QACjB,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAA;QACzD,OAAO,UAAU,CAAA;IACnB,CAAC;IACD,0DAA0D;IAC1D,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAA;IACzD,OAAO,UAAU,CAAA;AACnB,CAAC"}
|
package/dist/batch.d.ts
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { ImgCraftError } from './types.js';
|
|
2
|
+
import type { ImageInput, ResizeOptions, CropOptions, RotateOptions, FormatOptions, OutputFormat, SharpenOptions, TintOptions, CompositeOptions, ContrastOptions, SmartCropOptions, UpscaleOptions } from './types.js';
|
|
3
|
+
export interface BatchOptions {
|
|
4
|
+
concurrency?: number;
|
|
5
|
+
onProgress?: (done: number, total: number, file: string) => void;
|
|
6
|
+
onError?: 'skip' | 'throw';
|
|
7
|
+
}
|
|
8
|
+
export interface BatchResult {
|
|
9
|
+
input: ImageInput;
|
|
10
|
+
buffer: Buffer;
|
|
11
|
+
error?: ImgCraftError;
|
|
12
|
+
}
|
|
13
|
+
export declare class Batch {
|
|
14
|
+
private readonly _inputs;
|
|
15
|
+
private readonly _options;
|
|
16
|
+
private readonly _ops;
|
|
17
|
+
constructor(inputs: ImageInput[], options?: BatchOptions);
|
|
18
|
+
private push;
|
|
19
|
+
resize(width?: number, height?: number, options?: Omit<ResizeOptions, 'width' | 'height'>): this;
|
|
20
|
+
crop(options: CropOptions): this;
|
|
21
|
+
rotate(angle: number, options?: Omit<RotateOptions, 'angle'>): this;
|
|
22
|
+
flip(): this;
|
|
23
|
+
flop(): this;
|
|
24
|
+
format(type: OutputFormat, options?: Omit<FormatOptions, 'format'>): this;
|
|
25
|
+
jpeg(options?: {
|
|
26
|
+
quality?: number;
|
|
27
|
+
}): this;
|
|
28
|
+
png(options?: {
|
|
29
|
+
quality?: number;
|
|
30
|
+
}): this;
|
|
31
|
+
webp(options?: {
|
|
32
|
+
quality?: number;
|
|
33
|
+
}): this;
|
|
34
|
+
avif(options?: {
|
|
35
|
+
quality?: number;
|
|
36
|
+
}): this;
|
|
37
|
+
quality(value: number): this;
|
|
38
|
+
blur(sigma?: number): this;
|
|
39
|
+
sharpen(options?: SharpenOptions): this;
|
|
40
|
+
median(size?: number): this;
|
|
41
|
+
grayscale(): this;
|
|
42
|
+
tint(options: TintOptions): this;
|
|
43
|
+
negate(): this;
|
|
44
|
+
brightness(value: number): this;
|
|
45
|
+
saturation(value: number): this;
|
|
46
|
+
contrast(options: ContrastOptions): this;
|
|
47
|
+
composite(options: CompositeOptions): this;
|
|
48
|
+
stripMeta(): this;
|
|
49
|
+
removeBackground(): this;
|
|
50
|
+
smartCrop(options?: SmartCropOptions): this;
|
|
51
|
+
upscale(options: UpscaleOptions): this;
|
|
52
|
+
private _outputExt;
|
|
53
|
+
private _defaultName;
|
|
54
|
+
private _execute;
|
|
55
|
+
toBuffers(): Promise<BatchResult[]>;
|
|
56
|
+
toDir(outputDir: string, naming?: (input: ImageInput, index: number) => string): Promise<void>;
|
|
57
|
+
toFiles(paths: string[]): Promise<void>;
|
|
58
|
+
}
|
|
59
|
+
export declare function batch(inputs: ImageInput[], options?: BatchOptions): Batch;
|
|
60
|
+
//# sourceMappingURL=batch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch.d.ts","sourceRoot":"","sources":["../src/batch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,KAAK,EACV,UAAU,EAEV,aAAa,EACb,WAAW,EACX,aAAa,EACb,aAAa,EACb,YAAY,EAEZ,cAAc,EAEd,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACf,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAChE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,UAAU,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,aAAa,CAAA;CACtB;AAiBD,qBAAa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;gBAEvB,MAAM,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY;IAMxD,OAAO,CAAC,IAAI;IAOZ,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,GAAG,QAAQ,CAAC,GAAG,IAAI;IAIhG,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAIhC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,GAAG,IAAI;IAInE,IAAI,IAAI,IAAI;IAIZ,IAAI,IAAI,IAAI;IAIZ,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,GAAG,IAAI;IAIzE,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAI1C,GAAG,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAIzC,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAI1C,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAI1C,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI5B,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAK1B,OAAO,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI;IAIvC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAK3B,SAAS,IAAI,IAAI;IAIjB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAIhC,MAAM,IAAI,IAAI;IAId,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI/B,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI/B,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAIxC,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAI1C,SAAS,IAAI,IAAI;IAIjB,gBAAgB,IAAI,IAAI;IAIxB,SAAS,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,IAAI;IAI3C,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAMtC,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,YAAY;YAkBN,QAAQ;IA+ChB,SAAS,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAInC,KAAK,CACT,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,GACpD,OAAO,CAAC,IAAI,CAAC;IAoBV,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAmB9C;AAED,wBAAgB,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,KAAK,CAEzE"}
|
package/dist/batch.js
ADDED
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { Pipeline } from './pipeline.js';
|
|
2
|
+
import { ImgCraftError } from './types.js';
|
|
3
|
+
function inputLabel(input, index) {
|
|
4
|
+
if (typeof input === 'string')
|
|
5
|
+
return input;
|
|
6
|
+
if (input instanceof URL)
|
|
7
|
+
return input.pathname;
|
|
8
|
+
return `input[${index}]`;
|
|
9
|
+
}
|
|
10
|
+
function wrapError(err) {
|
|
11
|
+
return err instanceof ImgCraftError
|
|
12
|
+
? err
|
|
13
|
+
: new ImgCraftError({
|
|
14
|
+
code: 'BATCH_ITEM_FAILED',
|
|
15
|
+
message: err instanceof Error ? err.message : String(err),
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
export class Batch {
|
|
19
|
+
_inputs;
|
|
20
|
+
_options;
|
|
21
|
+
_ops;
|
|
22
|
+
constructor(inputs, options) {
|
|
23
|
+
this._inputs = inputs;
|
|
24
|
+
this._options = options ?? {};
|
|
25
|
+
this._ops = [];
|
|
26
|
+
}
|
|
27
|
+
push(op) {
|
|
28
|
+
this._ops.push(op);
|
|
29
|
+
return this;
|
|
30
|
+
}
|
|
31
|
+
// --- Transform methods (mirror Pipeline) ---
|
|
32
|
+
resize(width, height, options) {
|
|
33
|
+
return this.push({ op: 'resize', options: { width, height, ...options } });
|
|
34
|
+
}
|
|
35
|
+
crop(options) {
|
|
36
|
+
return this.push({ op: 'crop', options });
|
|
37
|
+
}
|
|
38
|
+
rotate(angle, options) {
|
|
39
|
+
return this.push({ op: 'rotate', options: { angle, ...options } });
|
|
40
|
+
}
|
|
41
|
+
flip() {
|
|
42
|
+
return this.push({ op: 'flip' });
|
|
43
|
+
}
|
|
44
|
+
flop() {
|
|
45
|
+
return this.push({ op: 'flop' });
|
|
46
|
+
}
|
|
47
|
+
format(type, options) {
|
|
48
|
+
return this.push({ op: 'format', options: { format: type, ...options } });
|
|
49
|
+
}
|
|
50
|
+
jpeg(options) {
|
|
51
|
+
return this.format('jpeg', options);
|
|
52
|
+
}
|
|
53
|
+
png(options) {
|
|
54
|
+
return this.format('png', options);
|
|
55
|
+
}
|
|
56
|
+
webp(options) {
|
|
57
|
+
return this.format('webp', options);
|
|
58
|
+
}
|
|
59
|
+
avif(options) {
|
|
60
|
+
return this.format('avif', options);
|
|
61
|
+
}
|
|
62
|
+
quality(value) {
|
|
63
|
+
return this.push({ op: 'quality', value });
|
|
64
|
+
}
|
|
65
|
+
blur(sigma) {
|
|
66
|
+
const options = sigma !== undefined ? { sigma } : {};
|
|
67
|
+
return this.push({ op: 'blur', options });
|
|
68
|
+
}
|
|
69
|
+
sharpen(options) {
|
|
70
|
+
return this.push({ op: 'sharpen', options: options ?? {} });
|
|
71
|
+
}
|
|
72
|
+
median(size) {
|
|
73
|
+
const options = size !== undefined ? { size } : {};
|
|
74
|
+
return this.push({ op: 'median', options });
|
|
75
|
+
}
|
|
76
|
+
grayscale() {
|
|
77
|
+
return this.push({ op: 'grayscale' });
|
|
78
|
+
}
|
|
79
|
+
tint(options) {
|
|
80
|
+
return this.push({ op: 'tint', options });
|
|
81
|
+
}
|
|
82
|
+
negate() {
|
|
83
|
+
return this.push({ op: 'negate' });
|
|
84
|
+
}
|
|
85
|
+
brightness(value) {
|
|
86
|
+
return this.push({ op: 'brightness', options: { brightness: value } });
|
|
87
|
+
}
|
|
88
|
+
saturation(value) {
|
|
89
|
+
return this.push({ op: 'saturation', options: { saturation: value } });
|
|
90
|
+
}
|
|
91
|
+
contrast(options) {
|
|
92
|
+
return this.push({ op: 'contrast', options });
|
|
93
|
+
}
|
|
94
|
+
composite(options) {
|
|
95
|
+
return this.push({ op: 'composite', options });
|
|
96
|
+
}
|
|
97
|
+
stripMeta() {
|
|
98
|
+
return this.push({ op: 'stripMeta' });
|
|
99
|
+
}
|
|
100
|
+
removeBackground() {
|
|
101
|
+
return this.push({ op: 'removeBackground' });
|
|
102
|
+
}
|
|
103
|
+
smartCrop(options) {
|
|
104
|
+
return this.push({ op: 'smartCrop', options: options ?? {} });
|
|
105
|
+
}
|
|
106
|
+
upscale(options) {
|
|
107
|
+
return this.push({ op: 'upscale', options });
|
|
108
|
+
}
|
|
109
|
+
// --- Internal: format extension from ops (for default file naming) ---
|
|
110
|
+
_outputExt() {
|
|
111
|
+
for (let i = this._ops.length - 1; i >= 0; i--) {
|
|
112
|
+
const op = this._ops[i];
|
|
113
|
+
if (op !== undefined && op.op === 'format')
|
|
114
|
+
return op.options.format;
|
|
115
|
+
}
|
|
116
|
+
return 'png';
|
|
117
|
+
}
|
|
118
|
+
_defaultName(input, index, basename, extname) {
|
|
119
|
+
const ext = this._outputExt();
|
|
120
|
+
if (typeof input === 'string') {
|
|
121
|
+
return `${basename(input, extname(input))}.${ext}`;
|
|
122
|
+
}
|
|
123
|
+
if (input instanceof URL) {
|
|
124
|
+
return `${basename(input.pathname, extname(input.pathname))}.${ext}`;
|
|
125
|
+
}
|
|
126
|
+
return `image-${index}.${ext}`;
|
|
127
|
+
}
|
|
128
|
+
// --- Execution engine ---
|
|
129
|
+
async _execute() {
|
|
130
|
+
const { default: PQueue } = await import('p-queue');
|
|
131
|
+
const queue = new PQueue({ concurrency: this._options.concurrency ?? 4 });
|
|
132
|
+
const results = new Array(this._inputs.length).fill(undefined);
|
|
133
|
+
let done = 0;
|
|
134
|
+
let abortError = null;
|
|
135
|
+
for (const [index, input] of this._inputs.entries()) {
|
|
136
|
+
// void: queue.clear() drops pending tasks whose add() promises never settle;
|
|
137
|
+
// queue.onIdle() below is the correct completion signal instead.
|
|
138
|
+
void queue.add(async () => {
|
|
139
|
+
if (abortError !== null)
|
|
140
|
+
return;
|
|
141
|
+
let buffer;
|
|
142
|
+
try {
|
|
143
|
+
const pipeline = new Pipeline(input, this._ops);
|
|
144
|
+
const data = await pipeline.toBuffer();
|
|
145
|
+
buffer = data instanceof Buffer ? data : Buffer.from(data);
|
|
146
|
+
}
|
|
147
|
+
catch (err) {
|
|
148
|
+
const error = wrapError(err);
|
|
149
|
+
if (this._options.onError === 'skip') {
|
|
150
|
+
results[index] = { input, buffer: Buffer.alloc(0), error };
|
|
151
|
+
done++;
|
|
152
|
+
this._options.onProgress?.(done, this._inputs.length, inputLabel(input, index));
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
abortError ??= error;
|
|
156
|
+
queue.clear();
|
|
157
|
+
}
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
results[index] = { input, buffer };
|
|
161
|
+
done++;
|
|
162
|
+
this._options.onProgress?.(done, this._inputs.length, inputLabel(input, index));
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
await queue.onIdle();
|
|
166
|
+
if (abortError !== null)
|
|
167
|
+
throw abortError;
|
|
168
|
+
return results;
|
|
169
|
+
}
|
|
170
|
+
// --- Output methods ---
|
|
171
|
+
async toBuffers() {
|
|
172
|
+
return this._execute();
|
|
173
|
+
}
|
|
174
|
+
async toDir(outputDir, naming) {
|
|
175
|
+
const { writeFile, mkdir } = await import('node:fs/promises');
|
|
176
|
+
const path = await import('node:path');
|
|
177
|
+
await mkdir(outputDir, { recursive: true });
|
|
178
|
+
const results = await this._execute();
|
|
179
|
+
await Promise.all(results.map(async ({ input, buffer, error }, index) => {
|
|
180
|
+
if (error !== undefined)
|
|
181
|
+
return;
|
|
182
|
+
const filename = naming !== undefined
|
|
183
|
+
? naming(input, index)
|
|
184
|
+
: this._defaultName(input, index, path.basename, path.extname);
|
|
185
|
+
await writeFile(path.join(outputDir, filename), buffer);
|
|
186
|
+
}));
|
|
187
|
+
}
|
|
188
|
+
async toFiles(paths) {
|
|
189
|
+
if (paths.length !== this._inputs.length) {
|
|
190
|
+
throw new ImgCraftError({
|
|
191
|
+
code: 'BATCH_PATH_MISMATCH',
|
|
192
|
+
message: `paths.length (${paths.length}) must equal inputs.length (${this._inputs.length})`,
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
const { writeFile } = await import('node:fs/promises');
|
|
196
|
+
const results = await this._execute();
|
|
197
|
+
await Promise.all(results.map(async ({ buffer, error }, index) => {
|
|
198
|
+
if (error !== undefined)
|
|
199
|
+
return;
|
|
200
|
+
await writeFile(paths[index], buffer);
|
|
201
|
+
}));
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
export function batch(inputs, options) {
|
|
205
|
+
return new Batch(inputs, options);
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=batch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch.js","sourceRoot":"","sources":["../src/batch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { PipelineState, MetadataResult, EngineResult, ImageInput } from '../types.js';
|
|
2
|
+
export declare function processNode(state: PipelineState): Promise<EngineResult>;
|
|
3
|
+
export declare function metadataNode(input: ImageInput): Promise<MetadataResult>;
|
|
4
|
+
export declare const nodeEngine: {
|
|
5
|
+
process: typeof processNode;
|
|
6
|
+
metadata: typeof metadataNode;
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/engines/node.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,YAAY,EACZ,UAAU,EAEX,MAAM,aAAa,CAAA;AAwHpB,wBAAsB,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CA2D7E;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,CAe7E;AAED,eAAO,MAAM,UAAU;;;CAGtB,CAAA"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { ImgCraftError } from '../types.js';
|
|
2
|
+
import { applyRemoveBackground, applySmartCrop, applyUpscale, } from '../transforms/ai.js';
|
|
3
|
+
async function importSharp() {
|
|
4
|
+
try {
|
|
5
|
+
const mod = await import('sharp');
|
|
6
|
+
return mod.default;
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
throw new ImgCraftError({
|
|
10
|
+
code: 'SHARP_NOT_AVAILABLE',
|
|
11
|
+
message: 'sharp is required for Node.js image processing. Install it: npm install sharp',
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function toSharpInput(input) {
|
|
16
|
+
if (typeof input === 'string')
|
|
17
|
+
return input;
|
|
18
|
+
if (input instanceof Buffer)
|
|
19
|
+
return input;
|
|
20
|
+
if (input instanceof Uint8Array)
|
|
21
|
+
return Buffer.from(input);
|
|
22
|
+
if (input instanceof ArrayBuffer)
|
|
23
|
+
return Buffer.from(input);
|
|
24
|
+
if (input instanceof URL)
|
|
25
|
+
return input.pathname;
|
|
26
|
+
throw new ImgCraftError({
|
|
27
|
+
code: 'INVALID_INPUT',
|
|
28
|
+
message: 'Unsupported input type. Provide a file path, Buffer, Uint8Array, ArrayBuffer, or URL.',
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
function applyOp(pipeline, op) {
|
|
32
|
+
switch (op.op) {
|
|
33
|
+
case 'resize':
|
|
34
|
+
return pipeline.resize(op.options.width, op.options.height, {
|
|
35
|
+
fit: op.options.fit,
|
|
36
|
+
background: op.options.background,
|
|
37
|
+
withoutEnlargement: op.options.withoutEnlargement,
|
|
38
|
+
});
|
|
39
|
+
case 'crop':
|
|
40
|
+
return pipeline.extract({
|
|
41
|
+
left: op.options.left,
|
|
42
|
+
top: op.options.top,
|
|
43
|
+
width: op.options.width,
|
|
44
|
+
height: op.options.height,
|
|
45
|
+
});
|
|
46
|
+
case 'rotate':
|
|
47
|
+
return pipeline.rotate(op.options.angle, { background: op.options.background });
|
|
48
|
+
case 'flip':
|
|
49
|
+
return pipeline.flip();
|
|
50
|
+
case 'flop':
|
|
51
|
+
return pipeline.flop();
|
|
52
|
+
case 'blur':
|
|
53
|
+
return pipeline.blur(op.options.sigma);
|
|
54
|
+
case 'sharpen': {
|
|
55
|
+
if (op.options.sigma !== undefined) {
|
|
56
|
+
const opts = { sigma: op.options.sigma };
|
|
57
|
+
if (op.options.m1 !== undefined)
|
|
58
|
+
opts.m1 = op.options.m1;
|
|
59
|
+
if (op.options.m2 !== undefined)
|
|
60
|
+
opts.m2 = op.options.m2;
|
|
61
|
+
return pipeline.sharpen(opts);
|
|
62
|
+
}
|
|
63
|
+
return pipeline.sharpen();
|
|
64
|
+
}
|
|
65
|
+
case 'median':
|
|
66
|
+
return pipeline.median(op.options.size);
|
|
67
|
+
case 'grayscale':
|
|
68
|
+
return pipeline.grayscale();
|
|
69
|
+
case 'tint':
|
|
70
|
+
return pipeline.tint({ r: op.options.r, g: op.options.g, b: op.options.b });
|
|
71
|
+
case 'negate':
|
|
72
|
+
return pipeline.negate();
|
|
73
|
+
case 'brightness':
|
|
74
|
+
return pipeline.modulate({ brightness: op.options.brightness });
|
|
75
|
+
case 'saturation':
|
|
76
|
+
return pipeline.modulate({ saturation: op.options.saturation });
|
|
77
|
+
case 'contrast': {
|
|
78
|
+
const c = op.options.value;
|
|
79
|
+
return pipeline.linear(c, -(128 * (c - 1)));
|
|
80
|
+
}
|
|
81
|
+
case 'composite':
|
|
82
|
+
return pipeline.composite([
|
|
83
|
+
{
|
|
84
|
+
input: op.options.input,
|
|
85
|
+
blend: op.options.blend,
|
|
86
|
+
top: op.options.top,
|
|
87
|
+
left: op.options.left,
|
|
88
|
+
gravity: op.options.gravity,
|
|
89
|
+
},
|
|
90
|
+
]);
|
|
91
|
+
case 'stripMeta':
|
|
92
|
+
return pipeline.withMetadata({});
|
|
93
|
+
case 'format':
|
|
94
|
+
case 'quality':
|
|
95
|
+
case 'removeBackground':
|
|
96
|
+
case 'smartCrop':
|
|
97
|
+
case 'upscale':
|
|
98
|
+
// AI ops and format/quality are handled in processNode before reaching here
|
|
99
|
+
return pipeline;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
export async function processNode(state) {
|
|
103
|
+
const sharp = await importSharp();
|
|
104
|
+
let pipeline = sharp(toSharpInput(state.input));
|
|
105
|
+
let pendingFormat;
|
|
106
|
+
let pendingQuality;
|
|
107
|
+
for (const op of state.ops) {
|
|
108
|
+
if (op.op === 'format') {
|
|
109
|
+
pendingFormat = op.options.format;
|
|
110
|
+
if (op.options.quality !== undefined)
|
|
111
|
+
pendingQuality = op.options.quality;
|
|
112
|
+
}
|
|
113
|
+
else if (op.op === 'quality') {
|
|
114
|
+
pendingQuality = op.value;
|
|
115
|
+
}
|
|
116
|
+
else if (op.op === 'removeBackground' ||
|
|
117
|
+
op.op === 'smartCrop' ||
|
|
118
|
+
op.op === 'upscale') {
|
|
119
|
+
// Flush current pipeline to PNG (lossless) before AI transform
|
|
120
|
+
const flushed = await pipeline.png().toBuffer();
|
|
121
|
+
let result;
|
|
122
|
+
if (op.op === 'removeBackground') {
|
|
123
|
+
result = await applyRemoveBackground(flushed);
|
|
124
|
+
}
|
|
125
|
+
else if (op.op === 'smartCrop') {
|
|
126
|
+
result = await applySmartCrop(flushed, op.options);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
result = await applyUpscale(flushed, op.options);
|
|
130
|
+
}
|
|
131
|
+
// Restart pipeline from AI output; pending format/quality still apply at end
|
|
132
|
+
pipeline = sharp(result);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
pipeline = applyOp(pipeline, op);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
if (pendingFormat !== undefined) {
|
|
139
|
+
pipeline = pipeline.toFormat(pendingFormat, pendingQuality !== undefined ? { quality: pendingQuality } : undefined);
|
|
140
|
+
}
|
|
141
|
+
else if (pendingQuality !== undefined) {
|
|
142
|
+
const meta = await pipeline.metadata();
|
|
143
|
+
if (meta.format !== undefined) {
|
|
144
|
+
pipeline = pipeline.toFormat(meta.format, {
|
|
145
|
+
quality: pendingQuality,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
const { data, info } = await pipeline.toBuffer({ resolveWithObject: true });
|
|
150
|
+
return {
|
|
151
|
+
data,
|
|
152
|
+
format: info.format,
|
|
153
|
+
width: info.width,
|
|
154
|
+
height: info.height,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
export async function metadataNode(input) {
|
|
158
|
+
const sharp = await importSharp();
|
|
159
|
+
const meta = await sharp(toSharpInput(input)).metadata();
|
|
160
|
+
return {
|
|
161
|
+
width: meta.width,
|
|
162
|
+
height: meta.height,
|
|
163
|
+
format: meta.format,
|
|
164
|
+
size: meta.size,
|
|
165
|
+
channels: meta.channels,
|
|
166
|
+
hasAlpha: meta.hasAlpha,
|
|
167
|
+
orientation: meta.orientation,
|
|
168
|
+
density: meta.density,
|
|
169
|
+
isProgressive: meta.isProgressive,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
export const nodeEngine = {
|
|
173
|
+
process: processNode,
|
|
174
|
+
metadata: metadataNode,
|
|
175
|
+
};
|
|
176
|
+
//# sourceMappingURL=node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/engines/node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { PipelineState, MetadataResult, EngineResult, ImageInput } from '../types.js';
|
|
2
|
+
export declare function processWasm(state: PipelineState): Promise<EngineResult>;
|
|
3
|
+
export declare function metadataWasm(input: ImageInput): Promise<MetadataResult>;
|
|
4
|
+
export declare const wasmEngine: {
|
|
5
|
+
process: typeof processWasm;
|
|
6
|
+
metadata: typeof metadataWasm;
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=wasm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm.d.ts","sourceRoot":"","sources":["../../src/engines/wasm.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAc,MAAM,aAAa,CAAA;AA8FtG,wBAAsB,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CA2G7E;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,CAa7E;AAED,eAAO,MAAM,UAAU;;;CAGtB,CAAA"}
|