@radialapps/memories-vips-editor 0.1.2 → 0.1.3

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
@@ -73,25 +73,28 @@ off, normalized to 0..1 float alongside, reattached. Everything agrees to
73
73
  float precision (±1 LSB after quantize), including `blur`/`sharpen` (both
74
74
  sides convolve the same discrete kernel — `sigma=radius/2`,
75
75
  `half=min(15,max(1,ceil(2σ)))`, clamp edges — via two separable passes).
76
+ Edits address the upright image: EXIF orientation is baked in first (the
77
+ browser applies it too, so crop fractions mean what the canvas showed).
76
78
  Thumbnail edits run **after** resize (radii are output pixels). The preview
77
79
  downscales sources larger than 2048px and scales `blur`/`sharpen` radii by
78
- the working/native ratio, so it shows the same *relative* blur as the
79
- full-res VIPS output. UHDR ICC+gainmap pass through untouched (gainmap is
80
- not re-derived). `rotate` by
81
- a non-90 angle appends a transparent alpha band (corners + fringes); 90°
80
+ the working/native ratio, so it shows the same _relative_ blur as the
81
+ full-res VIPS output (up to the 31-tap cap, which is in working pixels on each
82
+ side: past a native radius of ~15 the preview blurs more than VIPS). UHDR
83
+ ICC+gainmap survive: pixel edits leave the gainmap as is (it is not
84
+ re-derived), `crop`/`rotate` apply to it too. `rotate` by a non-90 angle appends a transparent alpha band (corners + fringes); 90°
82
85
  multiples stay exact with no band change.
83
86
 
84
- | edit | params | VIPS |
85
- | ----------------------- | -------------------------------------- | ------------------------------ |
86
- | `brightnessContrast` | `brightness`, `contrast` −1..1 | `linear(mult, bias)` |
87
- | `exposure` | `stops` −5..5 | `linear(2^stops)` |
88
- | `hueSaturation` | `hue`, `saturation` −1..1 | fused 3×3 (≡ `recomb`) |
89
- | `sepia` | `amount` 0..1 | same matrix, clipped at cast |
90
- | `vibrance` / `vignette` | `amount` −1..1 / `size`, `amount` 0..1 | identical CPU loop |
91
- | `grayscale` / `invert` | — | `(r+g+b)/3` / `linear(-1, +1)` |
92
- | `blur` / `sharpen` | `radius` 0..100 / +`amount` 0..5 | shared kernel + `convsep` (mix)|
93
- | `crop` | `x`,`y`,`width`,`height` 0..1 fractions| `extract_area` (rounded+clamped)|
94
- | `rotate` | `angle` −180..180 (clockwise °) | `rot()` @90s, else `rotate()` |
87
+ | edit | params | VIPS |
88
+ | ----------------------- | --------------------------------------- | -------------------------------- |
89
+ | `brightnessContrast` | `brightness`, `contrast` −1..1 | `linear(mult, bias)` |
90
+ | `exposure` | `stops` −5..5 | `linear(2^stops)` |
91
+ | `hueSaturation` | `hue`, `saturation` −1..1 | fused 3×3 (≡ `recomb`) |
92
+ | `sepia` | `amount` 0..1 | same matrix, clipped at cast |
93
+ | `vibrance` / `vignette` | `amount` −1..1 / `size`, `amount` 0..1 | identical CPU loop |
94
+ | `grayscale` / `invert` | — | `(r+g+b)/3` / `linear(-1, +1)` |
95
+ | `blur` / `sharpen` | `radius` 0..100 / +`amount` 0..5 | shared kernel + `convsep` (mix) |
96
+ | `crop` | `x`,`y`,`width`,`height` 0..1 fractions | `extract_area` (rounded+clamped) |
97
+ | `rotate` | `angle` −180..180 (clockwise °) | `rot()` @90s, else `rotate()` |
95
98
 
96
99
  Excluded (no clean VIPS mapping): `denoise`, `noise`, `curves`,
97
100
  `lensBlur`/`tiltShift`/`zoomBlur`, halftones, warps.
@@ -1 +1 @@
1
- {"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"AAYA,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,sCAAsC;AACtC,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAavD"}
1
+ {"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"AAWA,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,sCAAsC;AACtC,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAavD"}
package/dist/math.js CHANGED
@@ -1,14 +1,13 @@
1
1
  // math.ts — CPU reference for every edit's pixel math.
2
2
  //
3
3
  // These functions are the single source of truth shared (by port, not by
4
- // import) with the GLSL in shaders.ts and the libvips code in src/edit.h:
4
+ // import) with the GLSL in transforms/ and the libvips code in src/transforms/:
5
5
  // preview (WebGL) == math.ts == VIPS applier
6
6
  // all operate on sRGB-encoded 0..1 floats and apply in array order.
7
7
  //
8
8
  // glfx.js inspiration: brightnessContrast / hueSaturation / sepia / vibrance /
9
- // vignette shaders are direct ports of evanw/glfx.js adjust filters (see
10
- // shaders.ts); the matrix derivations below match those shaders term for term
11
- // so a VIPS `recomb`/`linear` does exactly what the canvas showed.
9
+ // vignette shaders are direct ports of evanw/glfx.js adjust filters, so a VIPS
10
+ // `linear` or matrix does exactly what the canvas showed.
12
11
  export function clampf(lo, v, hi) {
13
12
  return Math.min(hi, Math.max(lo, v));
14
13
  }
package/dist/math.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"math.js","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,EAAE;AACF,yEAAyE;AACzE,0EAA0E;AAC1E,mDAAmD;AACnD,oEAAoE;AACpE,EAAE;AACF,+EAA+E;AAC/E,yEAAyE;AACzE,8EAA8E;AAC9E,mEAAmE;AAEnE,MAAM,UAAU,MAAM,CAAC,EAAU,EAAE,CAAS,EAAE,EAAU;IACtD,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;IACpB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,CAAC,GAAa,EAAE,CAAC;IACvB,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QACrD,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACV,GAAG,IAAI,CAAC,CAAC;IACX,CAAC;IACD,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"math.js","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,EAAE;AACF,yEAAyE;AACzE,gFAAgF;AAChF,mDAAmD;AACnD,oEAAoE;AACpE,EAAE;AACF,+EAA+E;AAC/E,+EAA+E;AAC/E,0DAA0D;AAE1D,MAAM,UAAU,MAAM,CAAC,EAAU,EAAE,CAAS,EAAE,EAAU;IACtD,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;IACpB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,CAAC,GAAa,EAAE,CAAC;IACvB,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QACrD,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACV,GAAG,IAAI,CAAC,CAAC;IACX,CAAC;IACD,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AAC/B,CAAC"}
@@ -108,6 +108,8 @@ export declare class EditPipeline {
108
108
  * (used by the sharpen mix pass). `setUniforms` fills the rest.
109
109
  */
110
110
  pass(frag: string, from: Target, to: Target, setUniforms?: UniformSetter, extraTex?: ExtraTex): void;
111
+ /** Render `from` through `frag` into a framebuffer (null = the canvas). */
112
+ private draw;
111
113
  /** Copy one target to another with the identity shader. */
112
114
  blit(from: Target, to: Target): void;
113
115
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAiB,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAChG,OAAO,EAAc,KAAK,IAAI,EAAkB,MAAM,YAAY,CAAC;AAEnE,qBAAa,YAAY;IACvB,OAAO,CAAC,EAAE,CAAwB;IAClC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,QAAQ,CAAmC;IAEnD,OAAO,CAAC,IAAI,CAA4B;IAIxC,OAAO,CAAC,GAAG,CAAuB;IAClC,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,IAAI,CAAK;IACjB,6EAA6E;IAC7E,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;IAEtB;;;;;;OAMG;gBACgB,MAAM,EAAE,iBAAiB;IA2B5C,sEAAsE;IACtE,IAAW,KAAK,IAAI,MAAM,CAEzB;IACD,IAAW,MAAM,IAAI,MAAM,CAE1B;IAED,4EAA4E;IACrE,QAAQ,IAAI,IAAI,EAAE;IAIzB,yEAAyE;IAClE,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;IAKpC,kDAAkD;IAC3C,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAKhC,8CAA8C;IACvC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKtC,sCAAsC;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAM/C,oEAAoE;IAC7D,UAAU,IAAI,IAAI;IAKzB,8CAA8C;IACvC,MAAM,IAAI,MAAM;IAIvB;;;;;;OAMG;IACH,gBAAuB,OAAO,QAAQ;IAEtC,2DAA2D;IAC3D,OAAO,CAAC,UAAU;IAelB,0EAA0E;IAC1E,OAAO,CAAC,YAAY;IAQpB;;;;;;OAMG;IACI,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAuD7C;;;;;;;;;OASG;IACI,MAAM,IAAI,IAAI;IAqCrB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAoBrB,2EAA2E;IAC3E,OAAO,CAAC,UAAU;IAelB;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAqBlB;;;OAGG;IACH,OAAO,CAAC,UAAU;IAiBlB;;;OAGG;IACH,OAAO,CAAC,OAAO;IAcf,yEAAyE;IACzE,OAAO,CAAC,OAAO;IAoBf;;;;;OAKG;IACI,IAAI,CACT,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,WAAW,CAAC,EAAE,aAAa,EAC3B,QAAQ,CAAC,EAAE,QAAQ,GAClB,IAAI;IA2BP,2DAA2D;IACpD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAI3C;;;;;OAKG;IACI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAenF;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ;CAsBjB"}
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAiB,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAChG,OAAO,EAAkC,KAAK,IAAI,EAAkB,MAAM,YAAY,CAAC;AAEvF,qBAAa,YAAY;IACvB,OAAO,CAAC,EAAE,CAAwB;IAClC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,QAAQ,CAAmC;IAEnD,OAAO,CAAC,IAAI,CAA4B;IAIxC,OAAO,CAAC,GAAG,CAAuB;IAClC,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,IAAI,CAAK;IACjB,6EAA6E;IAC7E,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;IAEtB;;;;;;OAMG;gBACgB,MAAM,EAAE,iBAAiB;IA2B5C,sEAAsE;IACtE,IAAW,KAAK,IAAI,MAAM,CAEzB;IACD,IAAW,MAAM,IAAI,MAAM,CAE1B;IAED,4EAA4E;IACrE,QAAQ,IAAI,IAAI,EAAE;IAIzB,yEAAyE;IAClE,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;IAKpC,kDAAkD;IAC3C,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAKhC,8CAA8C;IACvC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKtC,sCAAsC;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAM/C,oEAAoE;IAC7D,UAAU,IAAI,IAAI;IAKzB,8CAA8C;IACvC,MAAM,IAAI,MAAM;IAIvB;;;;;;OAMG;IACH,gBAAuB,OAAO,QAAQ;IAEtC,2DAA2D;IAC3D,OAAO,CAAC,UAAU;IAelB,0EAA0E;IAC1E,OAAO,CAAC,YAAY;IAQpB;;;;;;OAMG;IACI,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAuD7C;;;;;;;;;OASG;IACI,MAAM,IAAI,IAAI;IAqCrB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAoBrB,2EAA2E;IAC3E,OAAO,CAAC,UAAU;IAelB;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAqBlB;;;OAGG;IACH,OAAO,CAAC,UAAU;IAiBlB;;;OAGG;IACH,OAAO,CAAC,OAAO;IAcf,yEAAyE;IACzE,OAAO,CAAC,OAAO;IAoBf;;;;;OAKG;IACI,IAAI,CACT,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,WAAW,CAAC,EAAE,aAAa,EAC3B,QAAQ,CAAC,EAAE,QAAQ,GAClB,IAAI;IAIP,2EAA2E;IAC3E,OAAO,CAAC,IAAI;IAmCZ,2DAA2D;IACpD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAI3C;;;;;OAKG;IACI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAenF;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ;CAQjB"}
package/dist/pipeline.js CHANGED
@@ -13,7 +13,8 @@
13
13
  // array (normalized) is what vips-preview accepts as "edits".
14
14
  import { BLIT_FRAG, COPY_FRAG, GAUSS_FRAG, VERT } from './shaders.js';
15
15
  import { TRANSFORMS, normalizeEdit } from './transforms/index.js';
16
- import { emptyState } from './types.js';
16
+ import { stateToJSON } from './transforms/state.js';
17
+ import { EDIT_STATE_VERSION, emptyState } from './types.js';
17
18
  export class EditPipeline {
18
19
  /**
19
20
  * Take over the canvas' WebGL context. preserveDrawingBuffer stays true
@@ -83,7 +84,7 @@ export class EditPipeline {
83
84
  }
84
85
  /** Replace the whole edit list (normalizing each edit) and re-render. */
85
86
  setEdits(edits) {
86
- this.state = { version: 1, edits: edits.map(normalizeEdit) };
87
+ this.state = { version: EDIT_STATE_VERSION, edits: edits.map(normalizeEdit) };
87
88
  this.render();
88
89
  }
89
90
  /** Append one edit (normalized) and re-render. */
@@ -110,7 +111,7 @@ export class EditPipeline {
110
111
  }
111
112
  /** Canonical JSON state for the VIPS side. */
112
113
  toJSON() {
113
- return JSON.stringify({ version: 1, edits: this.state.edits.map(normalizeEdit) });
114
+ return stateToJSON(this.state);
114
115
  }
115
116
  /** Resolve the pixel size of any TexImageSource upload. */
116
117
  sourceDims(source) {
@@ -172,7 +173,7 @@ export class EditPipeline {
172
173
  this.imgH = h;
173
174
  this.outW = w;
174
175
  this.outH = h;
175
- this.resScale = dims.w > 0 ? w / dims.w : 1;
176
+ this.resScale = w / dims.w;
176
177
  for (const t of [this.src, this.ping, this.pong, this.extra]) {
177
178
  if (t) {
178
179
  gl.deleteTexture(t.tex);
@@ -388,9 +389,13 @@ export class EditPipeline {
388
389
  * (used by the sharpen mix pass). `setUniforms` fills the rest.
389
390
  */
390
391
  pass(frag, from, to, setUniforms, extraTex) {
392
+ this.draw(frag, from, to.fb, to.w, to.h, setUniforms, extraTex);
393
+ }
394
+ /** Render `from` through `frag` into a framebuffer (null = the canvas). */
395
+ draw(frag, from, fb, w, h, setUniforms, extraTex) {
391
396
  const gl = this.gl;
392
- gl.bindFramebuffer(gl.FRAMEBUFFER, to.fb);
393
- gl.viewport(0, 0, to.w, to.h);
397
+ gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
398
+ gl.viewport(0, 0, w, h);
394
399
  const prog = this.program(frag);
395
400
  gl.useProgram(prog);
396
401
  const loc = gl.getAttribLocation(prog, 'aPos');
@@ -450,28 +455,13 @@ export class EditPipeline {
450
455
  * unflipped upload.)
451
456
  */
452
457
  toCanvas(from) {
453
- const gl = this.gl;
454
458
  if (this.outW <= 0 || this.outH <= 0)
455
459
  return;
456
460
  if (this.canvas.width !== this.outW || this.canvas.height !== this.outH) {
457
461
  this.canvas.width = this.outW;
458
462
  this.canvas.height = this.outH;
459
463
  }
460
- gl.bindFramebuffer(gl.FRAMEBUFFER, null);
461
- gl.viewport(0, 0, this.outW, this.outH);
462
- const prog = this.program(BLIT_FRAG);
463
- gl.useProgram(prog);
464
- const loc = gl.getAttribLocation(prog, 'aPos');
465
- gl.bindBuffer(gl.ARRAY_BUFFER, this.quad);
466
- gl.enableVertexAttribArray(loc);
467
- gl.vertexAttribPointer(loc, 2, gl.FLOAT, false, 0, 0);
468
- gl.activeTexture(gl.TEXTURE0);
469
- gl.bindTexture(gl.TEXTURE_2D, from.tex);
470
- const uTex = gl.getUniformLocation(prog, 'texture');
471
- if (uTex)
472
- gl.uniform1i(uTex, 0);
473
- gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
474
- gl.disableVertexAttribArray(loc);
464
+ this.draw(BLIT_FRAG, from, null, this.outW, this.outH);
475
465
  }
476
466
  }
477
467
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"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"}
package/dist/shaders.d.ts CHANGED
@@ -1,8 +1,7 @@
1
1
  export declare const VERT = "\nattribute vec2 aPos;\nvarying vec2 texCoord;\nvoid main() {\n texCoord = vec2(aPos.x * 0.5 + 0.5, aPos.y * 0.5 + 0.5);\n gl_Position = vec4(aPos, 0.0, 1.0);\n}\n";
2
2
  export declare const COPY_FRAG: string;
3
- /** Final blit to the canvas (un-flip the FLIP_Y upload). */
3
+ /** Final blit to the canvas: flips Y once, compensating the unflipped upload. */
4
4
  export declare const BLIT_FRAG: string;
5
- /** Separable gaussian, one axis per draw (dir = (1/w,0) or (0,1/h)). */
5
+ /** Separable gaussian, one axis per draw (dir = (1/w,0) or (0,1/h)). RGB only: alpha stays. */
6
6
  export declare const GAUSS_FRAG: string;
7
- /** glfx unsharp-mix: mix(blurred, original, 1 + strength). */
8
7
  //# sourceMappingURL=shaders.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shaders.d.ts","sourceRoot":"","sources":["../src/shaders.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,IAAI,0KAOhB,CAAC;AAQF,eAAO,MAAM,SAAS,QAMrB,CAAC;AAEF,4DAA4D;AAC5D,eAAO,MAAM,SAAS,QAMrB,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,UAAU,QAetB,CAAC;AAEF,8DAA8D"}
1
+ {"version":3,"file":"shaders.d.ts","sourceRoot":"","sources":["../src/shaders.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,IAAI,0KAOhB,CAAC;AAQF,eAAO,MAAM,SAAS,QAMrB,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,SAAS,QAMrB,CAAC;AAEF,+FAA+F;AAC/F,eAAO,MAAM,UAAU,QAetB,CAAC"}
package/dist/shaders.js CHANGED
@@ -1,10 +1,8 @@
1
- // shaders.ts — fragment shaders for the preview pipeline.
1
+ // shaders.ts — shared GLSL for the preview pipeline (quad, copy, blit, gaussian).
2
2
  //
3
- // brightnessContrast / hueSaturation / sepia / vibrance / vignette are ports
4
- // of evanw/glfx.js src/filters/adjust/*.js (same uniforms, same formulas, same
5
- // clamp ranges). exposure / invert / grayscale / gaussian blur / sharpen-mix
6
- // are trivial shaders in the same style. The VIPS applier (src/edit.h)
7
- // implements these exact formulas, so the canvas preview is WYSIWYG.
3
+ // Per-edit shaders live next to their Transform in transforms/. Most are ports
4
+ // of evanw/glfx.js src/filters/adjust/*.js; the VIPS side (src/transforms/)
5
+ // implements the same formulas, so the canvas preview is WYSIWYG.
8
6
  export const VERT = `
9
7
  attribute vec2 aPos;
10
8
  varying vec2 texCoord;
@@ -24,28 +22,27 @@ void main() {
24
22
  gl_FragColor = texture2D(texture, texCoord);
25
23
  }
26
24
  `;
27
- /** Final blit to the canvas (un-flip the FLIP_Y upload). */
25
+ /** Final blit to the canvas: flips Y once, compensating the unflipped upload. */
28
26
  export const BLIT_FRAG = PRELUDE +
29
27
  `
30
28
  void main() {
31
29
  gl_FragColor = texture2D(texture, vec2(texCoord.x, 1.0 - texCoord.y));
32
30
  }
33
31
  `;
34
- /** Separable gaussian, one axis per draw (dir = (1/w,0) or (0,1/h)). */
32
+ /** Separable gaussian, one axis per draw (dir = (1/w,0) or (0,1/h)). RGB only: alpha stays. */
35
33
  export const GAUSS_FRAG = PRELUDE +
36
34
  `
37
35
  uniform vec2 dir;
38
36
  uniform float kernel[31];
39
37
  uniform int count;
40
38
  void main() {
41
- vec4 sum = vec4(0.0);
39
+ vec3 sum = vec3(0.0);
42
40
  for (int i = 0; i < 31; i++) {
43
41
  if (i >= count) break;
44
42
  vec2 off = dir * float(i - (count - 1) / 2);
45
- sum += texture2D(texture, texCoord + off) * kernel[i];
43
+ sum += texture2D(texture, texCoord + off).rgb * kernel[i];
46
44
  }
47
- gl_FragColor = sum;
45
+ gl_FragColor = vec4(sum, texture2D(texture, texCoord).a);
48
46
  }
49
47
  `;
50
- /** glfx unsharp-mix: mix(blurred, original, 1 + strength). */
51
48
  //# sourceMappingURL=shaders.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shaders.js","sourceRoot":"","sources":["../src/shaders.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,EAAE;AACF,6EAA6E;AAC7E,+EAA+E;AAC/E,6EAA6E;AAC7E,uEAAuE;AACvE,qEAAqE;AAErE,MAAM,CAAC,MAAM,IAAI,GAAG;;;;;;;CAOnB,CAAC;AAEF,MAAM,OAAO,GAAG;;;;CAIf,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GACpB,OAAO;IACP;;;;CAID,CAAC;AAEF,4DAA4D;AAC5D,MAAM,CAAC,MAAM,SAAS,GACpB,OAAO;IACP;;;;CAID,CAAC;AAEF,wEAAwE;AACxE,MAAM,CAAC,MAAM,UAAU,GACrB,OAAO;IACP;;;;;;;;;;;;;CAaD,CAAC;AAEF,8DAA8D"}
1
+ {"version":3,"file":"shaders.js","sourceRoot":"","sources":["../src/shaders.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,EAAE;AACF,+EAA+E;AAC/E,4EAA4E;AAC5E,kEAAkE;AAElE,MAAM,CAAC,MAAM,IAAI,GAAG;;;;;;;CAOnB,CAAC;AAEF,MAAM,OAAO,GAAG;;;;CAIf,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GACpB,OAAO;IACP;;;;CAID,CAAC;AAEF,iFAAiF;AACjF,MAAM,CAAC,MAAM,SAAS,GACpB,OAAO;IACP;;;;CAID,CAAC;AAEF,+FAA+F;AAC/F,MAAM,CAAC,MAAM,UAAU,GACrB,OAAO;IACP;;;;;;;;;;;;;CAaD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"crop.d.ts","sourceRoot":"","sources":["../../src/transforms/crop.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,MAAM,EACX,KAAK,SAAS,EACf,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,qDAAqD;IACrD,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,KAAK,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAE/B,+EAA+E;AAC/E,wBAAgB,QAAQ,CACtB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,IAAI,GACX;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAMrD;AAaD,qBAAa,aAAc,YAAW,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC/D,SAAgB,IAAI,EAAG,MAAM,CAAU;IAChC,QAAQ,EAAE,YAAY,EAAE,CAK7B;IAEK,QAAQ,IAAI,IAAI;IAIhB,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,EAAE;IAsBpC,SAAS,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI;IAoBjC,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAK5E,KAAK,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG,MAAM;CAUjF"}
1
+ {"version":3,"file":"crop.d.ts","sourceRoot":"","sources":["../../src/transforms/crop.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,MAAM,EACX,KAAK,SAAS,EACf,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,qDAAqD;IACrD,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,KAAK,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAI/B,+EAA+E;AAC/E,wBAAgB,QAAQ,CACtB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,IAAI,GACX;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAMrD;AAaD,qBAAa,aAAc,YAAW,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC/D,SAAgB,IAAI,EAAG,MAAM,CAAU;IAChC,QAAQ,EAAE,YAAY,EAAE,CAK7B;IAEK,QAAQ,IAAI,IAAI;IAIhB,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,EAAE;IAsBpC,SAAS,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI;IASjC,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAK5E,KAAK,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG,MAAM;CAUjF"}
@@ -6,6 +6,7 @@
6
6
  // [1px, remainder]; outputDims() shares it so the pipeline pre-sizes `to`.
7
7
  import { clampf } from '../math.js';
8
8
  import { isNumInRange, } from './transform.js';
9
+ const MIN_EXTENT = 1e-4;
9
10
  /** Pixel rect for the given input size; identical to src/transforms/crop.h. */
10
11
  export function cropRect(inW, inH, params) {
11
12
  const left = Math.min(inW - 1, Math.max(0, Math.round(params.x * inW)));
@@ -61,27 +62,12 @@ export class CropTransform {
61
62
  return errs;
62
63
  }
63
64
  normalize(params) {
64
- let x = clampf(0, params.x ?? 0, 1);
65
- let y = clampf(0, params.y ?? 0, 1);
66
- let w = clampf(0, params.width ?? 1, 1);
67
- let h = clampf(0, params.height ?? 1, 1);
68
- if (!(w > 0))
69
- w = Math.min(1, Math.max(1e-4, 1 - x));
70
- else
71
- w = Math.min(w, 1 - x);
72
- if (!(h > 0))
73
- h = Math.min(1, Math.max(1e-4, 1 - y));
74
- else
75
- h = Math.min(h, 1 - y);
76
- if (!(w > 0)) {
77
- w = 1e-4;
78
- x = 1 - w;
79
- }
80
- if (!(h > 0)) {
81
- h = 1e-4;
82
- y = 1 - h;
83
- }
84
- return { edit: 'crop', x, y, width: w, height: h };
65
+ // Keep at least MIN_EXTENT of frame: the renderer rounds that to 1px.
66
+ const x = clampf(0, params.x ?? 0, 1 - MIN_EXTENT);
67
+ const y = clampf(0, params.y ?? 0, 1 - MIN_EXTENT);
68
+ const width = clampf(MIN_EXTENT, params.width ?? 1, 1 - x);
69
+ const height = clampf(MIN_EXTENT, params.height ?? 1, 1 - y);
70
+ return { edit: 'crop', x, y, width, height };
85
71
  }
86
72
  outputDims(inW, inH, params) {
87
73
  const r = cropRect(inW, inH, params);
@@ -1 +1 @@
1
- {"version":3,"file":"crop.js","sourceRoot":"","sources":["../../src/transforms/crop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"crop.js","sourceRoot":"","sources":["../../src/transforms/crop.ts"],"names":[],"mappings":"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"}
@@ -31,14 +31,14 @@ export function validateEdit(edit) {
31
31
  return ['edit must be an object'];
32
32
  const t = lookup(TRANSFORMS, edit.edit);
33
33
  if (!t)
34
- return [`unknown edit ${edit.edit}`];
34
+ return [`unknown edit ${String(edit.edit)}`];
35
35
  return t.validate(edit);
36
36
  }
37
37
  /** Fill defaults + clamp, so serialized JSON always passes validateEdit. */
38
38
  export function normalizeEdit(edit) {
39
39
  const t = lookup(TRANSFORMS, edit.edit);
40
40
  if (!t)
41
- throw new Error(`unknown edit ${edit.edit}`);
41
+ throw new Error(`unknown edit ${String(edit.edit)}`);
42
42
  return t.normalize(edit);
43
43
  }
44
44
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transforms/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAkB,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,CAAC,MAAM,UAAU,GAAgD;IACrE,kBAAkB,EAAE,IAAI,2BAA2B,EAAE;IACrD,QAAQ,EAAE,IAAI,iBAAiB,EAAE;IACjC,aAAa,EAAE,IAAI,sBAAsB,EAAE;IAC3C,KAAK,EAAE,IAAI,cAAc,EAAE;IAC3B,QAAQ,EAAE,IAAI,iBAAiB,EAAE;IACjC,IAAI,EAAE,IAAI,aAAa,EAAE;IACzB,OAAO,EAAE,IAAI,gBAAgB,EAAE;IAC/B,QAAQ,EAAE,IAAI,iBAAiB,EAAE;IACjC,MAAM,EAAE,IAAI,eAAe,EAAE;IAC7B,SAAS,EAAE,IAAI,kBAAkB,EAAE;IACnC,IAAI,EAAE,IAAI,aAAa,EAAE;IACzB,MAAM,EAAE,IAAI,eAAe,EAAE;CAC9B,CAAC;AAEF,uEAAuE;AACvE,MAAM,UAAU,YAAY,CAAC,IAAU;IACrC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACjF,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,EAAG,IAA2B,CAAC,IAAc,CAAC,CAAC;IAC1E,IAAI,CAAC,CAAC;QAAE,OAAO,CAAC,gBAAiB,IAA2B,CAAC,IAAc,EAAE,CAAC,CAAC;IAC/E,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,aAAa,CAAC,IAAU;IACtC,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,EAAG,IAA2B,CAAC,IAAc,CAAC,CAAC;IAC1E,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,gBAAiB,IAA2B,CAAC,IAAc,EAAE,CAAC,CAAC;IACvF,OAAO,CAAC,CAAC,SAAS,CAAC,IAAI,CAAS,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transforms/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAkB,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,CAAC,MAAM,UAAU,GAAgD;IACrE,kBAAkB,EAAE,IAAI,2BAA2B,EAAE;IACrD,QAAQ,EAAE,IAAI,iBAAiB,EAAE;IACjC,aAAa,EAAE,IAAI,sBAAsB,EAAE;IAC3C,KAAK,EAAE,IAAI,cAAc,EAAE;IAC3B,QAAQ,EAAE,IAAI,iBAAiB,EAAE;IACjC,IAAI,EAAE,IAAI,aAAa,EAAE;IACzB,OAAO,EAAE,IAAI,gBAAgB,EAAE;IAC/B,QAAQ,EAAE,IAAI,iBAAiB,EAAE;IACjC,MAAM,EAAE,IAAI,eAAe,EAAE;IAC7B,SAAS,EAAE,IAAI,kBAAkB,EAAE;IACnC,IAAI,EAAE,IAAI,aAAa,EAAE;IACzB,MAAM,EAAE,IAAI,eAAe,EAAE;CAC9B,CAAC;AAEF,uEAAuE;AACvE,MAAM,UAAU,YAAY,CAAC,IAAU;IACrC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACjF,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,CAAC;QAAE,OAAO,CAAC,gBAAgB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrD,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,aAAa,CAAC,IAAU;IACtC,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,CAAC,SAAS,CAAC,IAAI,CAAS,CAAC;AACnC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sepia.d.ts","sourceRoot":"","sources":["../../src/transforms/sepia.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,MAAM,EACX,KAAK,SAAS,EACf,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,KAAK,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;AAmBhC,qBAAa,cAAe,YAAW,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC;IAClE,SAAgB,IAAI,EAAG,OAAO,CAAU;IACjC,QAAQ,EAAE,YAAY,EAAE,CAE7B;IAEK,QAAQ,IAAI,IAAI;IAIhB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,EAAE;IAMrC,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAIlC,KAAK,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG,MAAM;CAMjF"}
1
+ {"version":3,"file":"sepia.d.ts","sourceRoot":"","sources":["../../src/transforms/sepia.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,MAAM,EACX,KAAK,SAAS,EACf,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,KAAK,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;AAmBhC,qBAAa,cAAe,YAAW,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC;IAClE,SAAgB,IAAI,EAAG,OAAO,CAAU;IACjC,QAAQ,EAAE,YAAY,EAAE,CAE7B;IAEK,QAAQ,IAAI,IAAI;IAIhB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,EAAE;IAMrC,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAIlC,KAAK,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG,MAAM;CAMjF"}
@@ -1,4 +1,5 @@
1
- // sepia.ts — glfx.js sepia port.
1
+ // sepia.ts — glfx.js sepia port, minus its per-channel min(1.0): like the VIPS
2
+ // side, values stay unclipped until the end so later edits see the same input.
2
3
  import { clampf } from '../math.js';
3
4
  import { isNumInRange, setFloatUniform, } from './transform.js';
4
5
  const FRAG = `
@@ -11,9 +12,9 @@ void main() {
11
12
  float r = color.r;
12
13
  float g = color.g;
13
14
  float b = color.b;
14
- color.r = min(1.0, (r * (1.0 - (0.607 * amount))) + (g * (0.769 * amount)) + (b * (0.189 * amount)));
15
- color.g = min(1.0, (r * 0.349 * amount) + (g * (1.0 - (0.314 * amount))) + (b * 0.168 * amount));
16
- color.b = min(1.0, (r * 0.272 * amount) + (g * 0.534 * amount) + (b * (1.0 - (0.869 * amount))));
15
+ color.r = (r * (1.0 - (0.607 * amount))) + (g * (0.769 * amount)) + (b * (0.189 * amount));
16
+ color.g = (r * 0.349 * amount) + (g * (1.0 - (0.314 * amount))) + (b * 0.168 * amount);
17
+ color.b = (r * 0.272 * amount) + (g * 0.534 * amount) + (b * (1.0 - (0.869 * amount)));
17
18
  gl_FragColor = color;
18
19
  }
19
20
  `;
@@ -1 +1 @@
1
- {"version":3,"file":"sepia.js","sourceRoot":"","sources":["../../src/transforms/sepia.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EACL,YAAY,EACZ,eAAe,GAKhB,MAAM,gBAAgB,CAAC;AAUxB,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;CAeZ,CAAC;AAEF,MAAM,OAAO,cAAc;IAA3B;QACkB,SAAI,GAAG,OAAgB,CAAC;QACjC,aAAQ,GAAmB;YAChC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE;SACvE,CAAC;IAsBJ,CAAC;IApBQ,QAAQ;QACb,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACtC,CAAC;IAEM,QAAQ,CAAC,MAAiB;QAC/B,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;YACnE,OAAO,CAAC,kCAAkC,CAAC,CAAC;QAC9C,OAAO,EAAE,CAAC;IACZ,CAAC;IAEM,SAAS,CAAC,MAAiB;QAChC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IACrE,CAAC;IAEM,KAAK,CAAC,GAAkB,EAAE,IAAY,EAAE,EAAU,EAAE,MAAY;QACrE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;YACjC,eAAe,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,CAAC;IACZ,CAAC;CACF"}
1
+ {"version":3,"file":"sepia.js","sourceRoot":"","sources":["../../src/transforms/sepia.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,+EAA+E;AAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EACL,YAAY,EACZ,eAAe,GAKhB,MAAM,gBAAgB,CAAC;AAUxB,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;CAeZ,CAAC;AAEF,MAAM,OAAO,cAAc;IAA3B;QACkB,SAAI,GAAG,OAAgB,CAAC;QACjC,aAAQ,GAAmB;YAChC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE;SACvE,CAAC;IAsBJ,CAAC;IApBQ,QAAQ;QACb,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACtC,CAAC;IAEM,QAAQ,CAAC,MAAiB;QAC/B,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;YACnE,OAAO,CAAC,kCAAkC,CAAC,CAAC;QAC9C,OAAO,EAAE,CAAC;IACZ,CAAC;IAEM,SAAS,CAAC,MAAiB;QAChC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IACrE,CAAC;IAEM,KAAK,CAAC,GAAkB,EAAE,IAAY,EAAE,EAAU,EAAE,MAAY;QACrE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;YACjC,eAAe,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,CAAC;IACZ,CAAC;CACF"}
@@ -10,7 +10,7 @@ varying vec2 texCoord;
10
10
  void main() {
11
11
  vec4 blurred = texture2D(blurredTexture, texCoord);
12
12
  vec4 original = texture2D(originalTexture, texCoord);
13
- gl_FragColor = mix(blurred, original, 1.0 + strength);
13
+ gl_FragColor = vec4(mix(blurred.rgb, original.rgb, 1.0 + strength), original.a);
14
14
  }
15
15
  `;
16
16
  export class SharpenTransform {
@@ -1,4 +1,4 @@
1
- import type { EditState } from '../types.js';
1
+ import { type EditState } from '../types.js';
2
2
  export declare function validateState(state: EditState): string[];
3
3
  export declare function stateToJSON(state: EditState): string;
4
4
  /** Parse + normalize; throws on invalid shape. */
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/transforms/state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,EAAE,CAYxD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAEpD;AAED,kDAAkD;AAClD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAKrD"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/transforms/state.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAGjE,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,EAAE,CASxD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAEpD;AAED,kDAAkD;AAClD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAKrD"}
@@ -1,14 +1,14 @@
1
+ // transforms/state.ts — {version, edits} state validation/serialization.
2
+ import { EDIT_STATE_VERSION } from '../types.js';
1
3
  import { normalizeEdit, validateEdit } from './index.js';
2
4
  export function validateState(state) {
3
- const errs = [];
4
5
  if (typeof state !== 'object' || state === null)
5
6
  return ['state must be an object'];
6
- if (state.version !== 1)
7
- errs.push('version must be 1');
8
- if (!Array.isArray(state.edits)) {
9
- errs.push('edits must be an array');
10
- return errs;
11
- }
7
+ const errs = [];
8
+ if (state.version !== EDIT_STATE_VERSION)
9
+ errs.push(`version must be ${EDIT_STATE_VERSION}`);
10
+ if (!Array.isArray(state.edits))
11
+ return [...errs, 'edits must be an array'];
12
12
  state.edits.forEach((edit, i) => {
13
13
  for (const e of validateEdit(edit))
14
14
  errs.push(`edits[${i}]: ${e}`);
@@ -16,7 +16,7 @@ export function validateState(state) {
16
16
  return errs;
17
17
  }
18
18
  export function stateToJSON(state) {
19
- return JSON.stringify({ version: 1, edits: state.edits.map(normalizeEdit) });
19
+ return JSON.stringify({ version: EDIT_STATE_VERSION, edits: state.edits.map(normalizeEdit) });
20
20
  }
21
21
  /** Parse + normalize; throws on invalid shape. */
22
22
  export function stateFromJSON(json) {
@@ -24,6 +24,6 @@ export function stateFromJSON(json) {
24
24
  const errs = validateState(raw);
25
25
  if (errs.length > 0)
26
26
  throw new Error(`invalid edit state: ${errs.join('; ')}`);
27
- return { version: 1, edits: raw.edits.map(normalizeEdit) };
27
+ return { version: EDIT_STATE_VERSION, edits: raw.edits.map(normalizeEdit) };
28
28
  }
29
29
  //# sourceMappingURL=state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/transforms/state.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,UAAU,aAAa,CAAC,KAAgB;IAC5C,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACpF,IAAK,KAAmB,CAAC,OAAO,KAAK,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACvE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,KAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IACA,KAAmB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QAC7C,KAAK,MAAM,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAgB;IAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAc,CAAC;IAC1C,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;AAC7D,CAAC"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/transforms/state.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,OAAO,EAAE,kBAAkB,EAAkB,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,UAAU,aAAa,CAAC,KAAgB;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACpF,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,KAAK,CAAC,OAAO,KAAK,kBAAkB;QAAE,IAAI,CAAC,IAAI,CAAC,mBAAmB,kBAAkB,EAAE,CAAC,CAAC;IAC7F,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,GAAG,IAAI,EAAE,wBAAwB,CAAC,CAAC;IAC5E,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QAC9B,KAAK,MAAM,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAgB;IAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AAChG,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAc,CAAC;IAC1C,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/E,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;AAC9E,CAAC"}
@@ -63,6 +63,6 @@ export interface Transform<Name extends string, P extends object> {
63
63
  /** Number in [lo,hi], finite. Shared range check for validate(). */
64
64
  export declare function isNumInRange(v: unknown, lo: number, hi: number): boolean;
65
65
  export declare function setFloatUniform(gl: WebGLRenderingContext, prog: WebGLProgram, name: string, value: number): void;
66
- /** Lookup helper: unknown runtime names yield undefined (guarded by callers). */
67
- export declare function lookup(registry: Record<EditName, Transform<string, object>>, name: string): Transform<string, object> | undefined;
66
+ /** Unknown runtime names (including Object.prototype keys) yield undefined. */
67
+ export declare function lookup(registry: Record<EditName, Transform<string, object>>, name: unknown): Transform<string, object> | undefined;
68
68
  //# sourceMappingURL=transform.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/transforms/transform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/transforms/transform.ts"],"names":[],"mappings":"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"}
@@ -7,8 +7,11 @@ export function setFloatUniform(gl, prog, name, value) {
7
7
  if (u)
8
8
  gl.uniform1f(u, value);
9
9
  }
10
- /** Lookup helper: unknown runtime names yield undefined (guarded by callers). */
10
+ /** Unknown runtime names (including Object.prototype keys) yield undefined. */
11
11
  export function lookup(registry, name) {
12
+ if (typeof name !== 'string' || !Object.prototype.hasOwnProperty.call(registry, name)) {
13
+ return undefined;
14
+ }
12
15
  return registry[name];
13
16
  }
14
17
  //# sourceMappingURL=transform.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transform.js","sourceRoot":"","sources":["../../src/transforms/transform.ts"],"names":[],"mappings":"AA+EA,oEAAoE;AACpE,MAAM,UAAU,YAAY,CAAC,CAAU,EAAE,EAAU,EAAE,EAAU;IAC7D,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,EAAyB,EACzB,IAAkB,EAClB,IAAY,EACZ,KAAa;IAEb,MAAM,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5C,IAAI,CAAC;QAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,MAAM,CACpB,QAAqD,EACrD,IAAY;IAEZ,OAAQ,QAAkE,CAAC,IAAI,CAAC,CAAC;AACnF,CAAC"}
1
+ {"version":3,"file":"transform.js","sourceRoot":"","sources":["../../src/transforms/transform.ts"],"names":[],"mappings":"AA+EA,oEAAoE;AACpE,MAAM,UAAU,YAAY,CAAC,CAAU,EAAE,EAAU,EAAE,EAAU;IAC7D,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,EAAyB,EACzB,IAAkB,EAClB,IAAY,EACZ,KAAa;IAEb,MAAM,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5C,IAAI,CAAC;QAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,MAAM,CACpB,QAAqD,EACrD,IAAa;IAEb,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC;QACtF,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,QAAQ,CAAC,IAAgB,CAAC,CAAC;AACpC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@radialapps/memories-vips-editor",
3
- "version": "0.1.2",
4
- "description": "Headless WebGL preview library for vips-static edits. Renders an ordered op list on a caller-provided canvas; serializes the same list as JSON for the vips-preview CLI (convert/thumbnail ... \"ops\": [...]).",
3
+ "version": "0.1.3",
4
+ "description": "Headless WebGL preview library for vips-static edits. Renders an ordered edit list on a caller-provided canvas; serializes the same list as JSON for the vips-preview CLI (convert/thumbnail ... \"edits\": [...]).",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "module": "./dist/index.js",
package/src/math.ts CHANGED
@@ -1,14 +1,13 @@
1
1
  // math.ts — CPU reference for every edit's pixel math.
2
2
  //
3
3
  // These functions are the single source of truth shared (by port, not by
4
- // import) with the GLSL in shaders.ts and the libvips code in src/edit.h:
4
+ // import) with the GLSL in transforms/ and the libvips code in src/transforms/:
5
5
  // preview (WebGL) == math.ts == VIPS applier
6
6
  // all operate on sRGB-encoded 0..1 floats and apply in array order.
7
7
  //
8
8
  // glfx.js inspiration: brightnessContrast / hueSaturation / sepia / vibrance /
9
- // vignette shaders are direct ports of evanw/glfx.js adjust filters (see
10
- // shaders.ts); the matrix derivations below match those shaders term for term
11
- // so a VIPS `recomb`/`linear` does exactly what the canvas showed.
9
+ // vignette shaders are direct ports of evanw/glfx.js adjust filters, so a VIPS
10
+ // `linear` or matrix does exactly what the canvas showed.
12
11
 
13
12
  export function clampf(lo: number, v: number, hi: number): number {
14
13
  return Math.min(hi, Math.max(lo, v));
package/src/pipeline.ts CHANGED
@@ -13,8 +13,9 @@
13
13
  // array (normalized) is what vips-preview accepts as "edits".
14
14
  import { BLIT_FRAG, COPY_FRAG, GAUSS_FRAG, VERT } from './shaders.js';
15
15
  import { TRANSFORMS, normalizeEdit } from './transforms/index.js';
16
+ import { stateToJSON } from './transforms/state.js';
16
17
  import type { RenderContext, Target, UniformSetter, ExtraTex } from './transforms/transform.js';
17
- import { emptyState, type Edit, type EditState } from './types.js';
18
+ import { EDIT_STATE_VERSION, emptyState, type Edit, type EditState } from './types.js';
18
19
 
19
20
  export class EditPipeline {
20
21
  private gl: WebGLRenderingContext;
@@ -88,7 +89,7 @@ export class EditPipeline {
88
89
 
89
90
  /** Replace the whole edit list (normalizing each edit) and re-render. */
90
91
  public setEdits(edits: Edit[]): void {
91
- this.state = { version: 1, edits: edits.map(normalizeEdit) };
92
+ this.state = { version: EDIT_STATE_VERSION, edits: edits.map(normalizeEdit) };
92
93
  this.render();
93
94
  }
94
95
 
@@ -119,7 +120,7 @@ export class EditPipeline {
119
120
 
120
121
  /** Canonical JSON state for the VIPS side. */
121
122
  public toJSON(): string {
122
- return JSON.stringify({ version: 1 as const, edits: this.state.edits.map(normalizeEdit) });
123
+ return stateToJSON(this.state);
123
124
  }
124
125
 
125
126
  /**
@@ -189,7 +190,7 @@ export class EditPipeline {
189
190
  this.imgH = h;
190
191
  this.outW = w;
191
192
  this.outH = h;
192
- this.resScale = dims.w > 0 ? w / dims.w : 1;
193
+ this.resScale = w / dims.w;
193
194
  for (const t of [this.src, this.ping, this.pong, this.extra]) {
194
195
  if (t) {
195
196
  gl.deleteTexture(t.tex);
@@ -405,10 +406,23 @@ export class EditPipeline {
405
406
  to: Target,
406
407
  setUniforms?: UniformSetter,
407
408
  extraTex?: ExtraTex,
409
+ ): void {
410
+ this.draw(frag, from, to.fb, to.w, to.h, setUniforms, extraTex);
411
+ }
412
+
413
+ /** Render `from` through `frag` into a framebuffer (null = the canvas). */
414
+ private draw(
415
+ frag: string,
416
+ from: Target,
417
+ fb: WebGLFramebuffer | null,
418
+ w: number,
419
+ h: number,
420
+ setUniforms?: UniformSetter,
421
+ extraTex?: ExtraTex,
408
422
  ): void {
409
423
  const gl = this.gl;
410
- gl.bindFramebuffer(gl.FRAMEBUFFER, to.fb);
411
- gl.viewport(0, 0, to.w, to.h);
424
+ gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
425
+ gl.viewport(0, 0, w, h);
412
426
  const prog = this.program(frag);
413
427
  gl.useProgram(prog);
414
428
  const loc = gl.getAttribLocation(prog, 'aPos');
@@ -466,25 +480,11 @@ export class EditPipeline {
466
480
  * unflipped upload.)
467
481
  */
468
482
  private toCanvas(from: Target): void {
469
- const gl = this.gl;
470
483
  if (this.outW <= 0 || this.outH <= 0) return;
471
484
  if (this.canvas.width !== this.outW || this.canvas.height !== this.outH) {
472
485
  this.canvas.width = this.outW;
473
486
  this.canvas.height = this.outH;
474
487
  }
475
- gl.bindFramebuffer(gl.FRAMEBUFFER, null);
476
- gl.viewport(0, 0, this.outW, this.outH);
477
- const prog = this.program(BLIT_FRAG);
478
- gl.useProgram(prog);
479
- const loc = gl.getAttribLocation(prog, 'aPos');
480
- gl.bindBuffer(gl.ARRAY_BUFFER, this.quad);
481
- gl.enableVertexAttribArray(loc);
482
- gl.vertexAttribPointer(loc, 2, gl.FLOAT, false, 0, 0);
483
- gl.activeTexture(gl.TEXTURE0);
484
- gl.bindTexture(gl.TEXTURE_2D, from.tex);
485
- const uTex = gl.getUniformLocation(prog, 'texture');
486
- if (uTex) gl.uniform1i(uTex, 0);
487
- gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
488
- gl.disableVertexAttribArray(loc);
488
+ this.draw(BLIT_FRAG, from, null, this.outW, this.outH);
489
489
  }
490
490
  }
package/src/shaders.ts CHANGED
@@ -1,10 +1,8 @@
1
- // shaders.ts — fragment shaders for the preview pipeline.
1
+ // shaders.ts — shared GLSL for the preview pipeline (quad, copy, blit, gaussian).
2
2
  //
3
- // brightnessContrast / hueSaturation / sepia / vibrance / vignette are ports
4
- // of evanw/glfx.js src/filters/adjust/*.js (same uniforms, same formulas, same
5
- // clamp ranges). exposure / invert / grayscale / gaussian blur / sharpen-mix
6
- // are trivial shaders in the same style. The VIPS applier (src/edit.h)
7
- // implements these exact formulas, so the canvas preview is WYSIWYG.
3
+ // Per-edit shaders live next to their Transform in transforms/. Most are ports
4
+ // of evanw/glfx.js src/filters/adjust/*.js; the VIPS side (src/transforms/)
5
+ // implements the same formulas, so the canvas preview is WYSIWYG.
8
6
 
9
7
  export const VERT = `
10
8
  attribute vec2 aPos;
@@ -29,7 +27,7 @@ void main() {
29
27
  }
30
28
  `;
31
29
 
32
- /** Final blit to the canvas (un-flip the FLIP_Y upload). */
30
+ /** Final blit to the canvas: flips Y once, compensating the unflipped upload. */
33
31
  export const BLIT_FRAG =
34
32
  PRELUDE +
35
33
  `
@@ -38,7 +36,7 @@ void main() {
38
36
  }
39
37
  `;
40
38
 
41
- /** Separable gaussian, one axis per draw (dir = (1/w,0) or (0,1/h)). */
39
+ /** Separable gaussian, one axis per draw (dir = (1/w,0) or (0,1/h)). RGB only: alpha stays. */
42
40
  export const GAUSS_FRAG =
43
41
  PRELUDE +
44
42
  `
@@ -46,14 +44,12 @@ uniform vec2 dir;
46
44
  uniform float kernel[31];
47
45
  uniform int count;
48
46
  void main() {
49
- vec4 sum = vec4(0.0);
47
+ vec3 sum = vec3(0.0);
50
48
  for (int i = 0; i < 31; i++) {
51
49
  if (i >= count) break;
52
50
  vec2 off = dir * float(i - (count - 1) / 2);
53
- sum += texture2D(texture, texCoord + off) * kernel[i];
51
+ sum += texture2D(texture, texCoord + off).rgb * kernel[i];
54
52
  }
55
- gl_FragColor = sum;
53
+ gl_FragColor = vec4(sum, texture2D(texture, texCoord).a);
56
54
  }
57
55
  `;
58
-
59
- /** glfx unsharp-mix: mix(blurred, original, 1 + strength). */
@@ -27,6 +27,8 @@ export interface CropEdit {
27
27
 
28
28
  type Full = Required<CropEdit>;
29
29
 
30
+ const MIN_EXTENT = 1e-4;
31
+
30
32
  /** Pixel rect for the given input size; identical to src/transforms/crop.h. */
31
33
  export function cropRect(
32
34
  inW: number,
@@ -87,23 +89,12 @@ export class CropTransform implements Transform<'crop', CropEdit> {
87
89
  }
88
90
 
89
91
  public normalize(params: CropEdit): Full {
90
- let x = clampf(0, params.x ?? 0, 1);
91
- let y = clampf(0, params.y ?? 0, 1);
92
- let w = clampf(0, params.width ?? 1, 1);
93
- let h = clampf(0, params.height ?? 1, 1);
94
- if (!(w > 0)) w = Math.min(1, Math.max(1e-4, 1 - x));
95
- else w = Math.min(w, 1 - x);
96
- if (!(h > 0)) h = Math.min(1, Math.max(1e-4, 1 - y));
97
- else h = Math.min(h, 1 - y);
98
- if (!(w > 0)) {
99
- w = 1e-4;
100
- x = 1 - w;
101
- }
102
- if (!(h > 0)) {
103
- h = 1e-4;
104
- y = 1 - h;
105
- }
106
- return { edit: 'crop', x, y, width: w, height: h };
92
+ // Keep at least MIN_EXTENT of frame: the renderer rounds that to 1px.
93
+ const x = clampf(0, params.x ?? 0, 1 - MIN_EXTENT);
94
+ const y = clampf(0, params.y ?? 0, 1 - MIN_EXTENT);
95
+ const width = clampf(MIN_EXTENT, params.width ?? 1, 1 - x);
96
+ const height = clampf(MIN_EXTENT, params.height ?? 1, 1 - y);
97
+ return { edit: 'crop', x, y, width, height };
107
98
  }
108
99
 
109
100
  public outputDims(inW: number, inH: number, params: Full): { w: number; h: number } {
@@ -36,14 +36,14 @@ export const TRANSFORMS: Record<EditName, Transform<string, object>> = {
36
36
  /** Human-readable problems; empty means the edit is VIPS-appliable. */
37
37
  export function validateEdit(edit: Edit): string[] {
38
38
  if (typeof edit !== 'object' || edit === null) return ['edit must be an object'];
39
- const t = lookup(TRANSFORMS, (edit as { edit?: unknown }).edit as string);
40
- if (!t) return [`unknown edit ${(edit as { edit?: unknown }).edit as string}`];
39
+ const t = lookup(TRANSFORMS, edit.edit);
40
+ if (!t) return [`unknown edit ${String(edit.edit)}`];
41
41
  return t.validate(edit);
42
42
  }
43
43
 
44
44
  /** Fill defaults + clamp, so serialized JSON always passes validateEdit. */
45
45
  export function normalizeEdit(edit: Edit): Edit {
46
- const t = lookup(TRANSFORMS, (edit as { edit?: unknown }).edit as string);
47
- if (!t) throw new Error(`unknown edit ${(edit as { edit?: unknown }).edit as string}`);
46
+ const t = lookup(TRANSFORMS, edit.edit);
47
+ if (!t) throw new Error(`unknown edit ${String(edit.edit)}`);
48
48
  return t.normalize(edit) as Edit;
49
49
  }
@@ -1,4 +1,5 @@
1
- // sepia.ts — glfx.js sepia port.
1
+ // sepia.ts — glfx.js sepia port, minus its per-channel min(1.0): like the VIPS
2
+ // side, values stay unclipped until the end so later edits see the same input.
2
3
  import { clampf } from '../math.js';
3
4
  import {
4
5
  isNumInRange,
@@ -27,9 +28,9 @@ void main() {
27
28
  float r = color.r;
28
29
  float g = color.g;
29
30
  float b = color.b;
30
- color.r = min(1.0, (r * (1.0 - (0.607 * amount))) + (g * (0.769 * amount)) + (b * (0.189 * amount)));
31
- color.g = min(1.0, (r * 0.349 * amount) + (g * (1.0 - (0.314 * amount))) + (b * 0.168 * amount));
32
- color.b = min(1.0, (r * 0.272 * amount) + (g * 0.534 * amount) + (b * (1.0 - (0.869 * amount))));
31
+ color.r = (r * (1.0 - (0.607 * amount))) + (g * (0.769 * amount)) + (b * (0.189 * amount));
32
+ color.g = (r * 0.349 * amount) + (g * (1.0 - (0.314 * amount))) + (b * 0.168 * amount);
33
+ color.b = (r * 0.272 * amount) + (g * 0.534 * amount) + (b * (1.0 - (0.869 * amount)));
33
34
  gl_FragColor = color;
34
35
  }
35
36
  `;
@@ -28,7 +28,7 @@ varying vec2 texCoord;
28
28
  void main() {
29
29
  vec4 blurred = texture2D(blurredTexture, texCoord);
30
30
  vec4 original = texture2D(originalTexture, texCoord);
31
- gl_FragColor = mix(blurred, original, 1.0 + strength);
31
+ gl_FragColor = vec4(mix(blurred.rgb, original.rgb, 1.0 + strength), original.a);
32
32
  }
33
33
  `;
34
34
 
@@ -1,23 +1,20 @@
1
1
  // transforms/state.ts — {version, edits} state validation/serialization.
2
- import type { EditState } from '../types.js';
2
+ import { EDIT_STATE_VERSION, type EditState } from '../types.js';
3
3
  import { normalizeEdit, validateEdit } from './index.js';
4
4
 
5
5
  export function validateState(state: EditState): string[] {
6
- const errs: string[] = [];
7
6
  if (typeof state !== 'object' || state === null) return ['state must be an object'];
8
- if ((state as EditState).version !== 1) errs.push('version must be 1');
9
- if (!Array.isArray((state as EditState).edits)) {
10
- errs.push('edits must be an array');
11
- return errs;
12
- }
13
- (state as EditState).edits.forEach((edit, i) => {
7
+ const errs: string[] = [];
8
+ if (state.version !== EDIT_STATE_VERSION) errs.push(`version must be ${EDIT_STATE_VERSION}`);
9
+ if (!Array.isArray(state.edits)) return [...errs, 'edits must be an array'];
10
+ state.edits.forEach((edit, i) => {
14
11
  for (const e of validateEdit(edit)) errs.push(`edits[${i}]: ${e}`);
15
12
  });
16
13
  return errs;
17
14
  }
18
15
 
19
16
  export function stateToJSON(state: EditState): string {
20
- return JSON.stringify({ version: 1, edits: state.edits.map(normalizeEdit) });
17
+ return JSON.stringify({ version: EDIT_STATE_VERSION, edits: state.edits.map(normalizeEdit) });
21
18
  }
22
19
 
23
20
  /** Parse + normalize; throws on invalid shape. */
@@ -25,5 +22,5 @@ export function stateFromJSON(json: string): EditState {
25
22
  const raw = JSON.parse(json) as EditState;
26
23
  const errs = validateState(raw);
27
24
  if (errs.length > 0) throw new Error(`invalid edit state: ${errs.join('; ')}`);
28
- return { version: 1, edits: raw.edits.map(normalizeEdit) };
25
+ return { version: EDIT_STATE_VERSION, edits: raw.edits.map(normalizeEdit) };
29
26
  }
@@ -3,8 +3,8 @@
3
3
  // A transform is one named pixel edit (brightnessContrast, sepia, ...).
4
4
  // The pipeline (pipeline.ts) stays generic: it looks the transform up by
5
5
  // `edit.edit` in the registry (transforms/index.ts), normalizes params
6
- // through it, and calls apply(). The VIPS side mirrors this shape with an
7
- // `Edit` base class plus one header per transform (src/edits/).
6
+ // through it, and calls apply(). The VIPS side mirrors this shape with a
7
+ // `Transform` base class plus one header per transform (src/transforms/).
8
8
  import type { EditName } from '../types.js';
9
9
 
10
10
  export interface Target {
@@ -92,10 +92,13 @@ export function setFloatUniform(
92
92
  if (u) gl.uniform1f(u, value);
93
93
  }
94
94
 
95
- /** Lookup helper: unknown runtime names yield undefined (guarded by callers). */
95
+ /** Unknown runtime names (including Object.prototype keys) yield undefined. */
96
96
  export function lookup(
97
97
  registry: Record<EditName, Transform<string, object>>,
98
- name: string,
98
+ name: unknown,
99
99
  ): Transform<string, object> | undefined {
100
- return (registry as Record<string, Transform<string, object> | undefined>)[name];
100
+ if (typeof name !== 'string' || !Object.prototype.hasOwnProperty.call(registry, name)) {
101
+ return undefined;
102
+ }
103
+ return registry[name as EditName];
101
104
  }