@pixerate/editor 0.218.0 → 0.219.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-YF3YZZ6G.cjs → chunk-2ONK3ERD.cjs} +8 -8
- package/dist/{chunk-ZGJGSCUW.js → chunk-4P6H35HU.js} +1 -1
- package/dist/{chunk-MQDIP4CF.cjs → chunk-BB6TR422.cjs} +5 -1
- package/dist/{chunk-UC3PWFM3.cjs → chunk-KALCIDWH.cjs} +15 -11
- package/dist/{chunk-XI2NV5U7.js → chunk-VWEWY4FY.js} +4 -0
- package/dist/{chunk-U7C655AM.js → chunk-YFFLSP2C.js} +6 -2
- package/dist/image-editor/controller.d.cts +31 -0
- package/dist/image-editor/controller.d.ts +31 -0
- package/dist/image-editor/index.cjs +539 -428
- package/dist/image-editor/index.js +122 -11
- package/dist/image-editor/selection/overlay.d.cts +7 -0
- package/dist/image-editor/selection/overlay.d.ts +7 -0
- package/dist/image-editor/selection-worker.cjs +4 -4
- package/dist/image-editor/selection-worker.js +2 -2
- package/dist/paint/heal.d.cts +2 -0
- package/dist/paint/heal.d.ts +2 -0
- package/dist/paint/index.cjs +3 -3
- package/dist/paint/index.js +2 -2
- package/package.json +1 -1
- package/skills/pixerate-image-editor/SKILL.md +2 -3
- package/skills/pixerate-image-selection-masking/SKILL.md +5 -5
|
@@ -43,7 +43,7 @@ import {
|
|
|
43
43
|
workImage,
|
|
44
44
|
workLuma,
|
|
45
45
|
workPlanes
|
|
46
|
-
} from "../chunk-
|
|
46
|
+
} from "../chunk-YFFLSP2C.js";
|
|
47
47
|
import {
|
|
48
48
|
ADJUSTMENT_KEYS,
|
|
49
49
|
ADJUSTMENT_KINDS,
|
|
@@ -552,7 +552,7 @@ import {
|
|
|
552
552
|
spotHealPixels,
|
|
553
553
|
spotHealWindow,
|
|
554
554
|
toneOf
|
|
555
|
-
} from "../chunk-
|
|
555
|
+
} from "../chunk-4P6H35HU.js";
|
|
556
556
|
import {
|
|
557
557
|
bestOffset,
|
|
558
558
|
contentAwareFill,
|
|
@@ -561,7 +561,7 @@ import {
|
|
|
561
561
|
membraneFill,
|
|
562
562
|
seamlessClone,
|
|
563
563
|
solveMembrane
|
|
564
|
-
} from "../chunk-
|
|
564
|
+
} from "../chunk-VWEWY4FY.js";
|
|
565
565
|
import {
|
|
566
566
|
BODY_SCATTER,
|
|
567
567
|
DEFAULT_FLOW,
|
|
@@ -1039,6 +1039,44 @@ function selectionOutline(mask, threshold = 128) {
|
|
|
1039
1039
|
}
|
|
1040
1040
|
return Float32Array.from(segs);
|
|
1041
1041
|
}
|
|
1042
|
+
function selectionOutlinePaths(mask, threshold = 128) {
|
|
1043
|
+
const segs = selectionOutline(mask, threshold);
|
|
1044
|
+
const n = segs.length / 4;
|
|
1045
|
+
if (!n) return [];
|
|
1046
|
+
const stride = mask.width + 1;
|
|
1047
|
+
const key2 = (x, y) => y * stride + x;
|
|
1048
|
+
const at = /* @__PURE__ */ new Map();
|
|
1049
|
+
for (let s = 0; s < n; s++) {
|
|
1050
|
+
for (const k of [key2(segs[s * 4], segs[s * 4 + 1]), key2(segs[s * 4 + 2], segs[s * 4 + 3])]) {
|
|
1051
|
+
const list = at.get(k);
|
|
1052
|
+
if (list) list.push(s);
|
|
1053
|
+
else at.set(k, [s]);
|
|
1054
|
+
}
|
|
1055
|
+
}
|
|
1056
|
+
const used = new Uint8Array(n);
|
|
1057
|
+
const paths = [];
|
|
1058
|
+
for (let s0 = 0; s0 < n; s0++) {
|
|
1059
|
+
if (used[s0]) continue;
|
|
1060
|
+
used[s0] = 1;
|
|
1061
|
+
const pts = [segs[s0 * 4], segs[s0 * 4 + 1], segs[s0 * 4 + 2], segs[s0 * 4 + 3]];
|
|
1062
|
+
for (const forward of [true, false]) {
|
|
1063
|
+
for (; ; ) {
|
|
1064
|
+
const x = forward ? pts[pts.length - 2] : pts[0];
|
|
1065
|
+
const y = forward ? pts[pts.length - 1] : pts[1];
|
|
1066
|
+
const next = at.get(key2(x, y))?.find((t) => !used[t]);
|
|
1067
|
+
if (next === void 0) break;
|
|
1068
|
+
used[next] = 1;
|
|
1069
|
+
const a = [segs[next * 4], segs[next * 4 + 1]];
|
|
1070
|
+
const b = [segs[next * 4 + 2], segs[next * 4 + 3]];
|
|
1071
|
+
const far = a[0] === x && a[1] === y ? b : a;
|
|
1072
|
+
if (forward) pts.push(far[0], far[1]);
|
|
1073
|
+
else pts.unshift(far[0], far[1]);
|
|
1074
|
+
}
|
|
1075
|
+
}
|
|
1076
|
+
paths.push(Float32Array.from(pts));
|
|
1077
|
+
}
|
|
1078
|
+
return paths;
|
|
1079
|
+
}
|
|
1042
1080
|
function quickMaskPixels(mask, style = {}) {
|
|
1043
1081
|
const [r, g, b] = style.color ?? [255, 0, 0];
|
|
1044
1082
|
const k = Math.min(1, Math.max(0, style.opacity ?? 0.5));
|
|
@@ -2168,17 +2206,17 @@ var ImageEditorRenderer = class {
|
|
|
2168
2206
|
* screen pixels per natural pixel (the projection scale times the host's CSS scale).
|
|
2169
2207
|
*/
|
|
2170
2208
|
drawAnts(ctx, selection, scale, offset) {
|
|
2171
|
-
let
|
|
2172
|
-
if (!
|
|
2173
|
-
|
|
2174
|
-
this.outlineCache.set(selection,
|
|
2209
|
+
let paths = this.outlineCache.get(selection);
|
|
2210
|
+
if (!paths) {
|
|
2211
|
+
paths = selectionOutlinePaths(selection);
|
|
2212
|
+
this.outlineCache.set(selection, paths);
|
|
2175
2213
|
}
|
|
2176
|
-
if (!
|
|
2214
|
+
if (!paths.length) return;
|
|
2177
2215
|
const px2 = 1 / (scale || 1);
|
|
2178
2216
|
ctx.beginPath();
|
|
2179
|
-
for (
|
|
2180
|
-
ctx.moveTo(
|
|
2181
|
-
ctx.lineTo(
|
|
2217
|
+
for (const p of paths) {
|
|
2218
|
+
ctx.moveTo(p[0], p[1]);
|
|
2219
|
+
for (let i = 2; i < p.length; i += 2) ctx.lineTo(p[i], p[i + 1]);
|
|
2182
2220
|
}
|
|
2183
2221
|
ctx.lineWidth = px2;
|
|
2184
2222
|
ctx.strokeStyle = "#ffffff";
|
|
@@ -6003,6 +6041,10 @@ var ImageEditorController = class {
|
|
|
6003
6041
|
this.state.imageDimensions = source.dimensions;
|
|
6004
6042
|
if (!this.samplePixelsOverride) this.samplePixels = null;
|
|
6005
6043
|
if (prev.width !== source.dimensions.width || prev.height !== source.dimensions.height) {
|
|
6044
|
+
const c = this.state.crop;
|
|
6045
|
+
if (c && c.x === 0 && c.y === 0 && c.width === prev.width && c.height === prev.height) {
|
|
6046
|
+
this.state.crop = { x: 0, y: 0, width: source.dimensions.width, height: source.dimensions.height };
|
|
6047
|
+
}
|
|
6006
6048
|
this.state.layers = resizeLegacyMasks(this.state.layers, prev, source.dimensions);
|
|
6007
6049
|
}
|
|
6008
6050
|
this.dropMismatchedSelection();
|
|
@@ -9003,6 +9045,50 @@ var ImageEditorController = class {
|
|
|
9003
9045
|
const filled = await this.synthesiseFill(plan, options.seed ?? 0, options);
|
|
9004
9046
|
return this.applyContentAwareFill(plan, filled, options.output ?? "current");
|
|
9005
9047
|
}
|
|
9048
|
+
/**
|
|
9049
|
+
* Separate Subject: splits the selected subject from its background in one undo step. The
|
|
9050
|
+
* subject goes to a copy of the layer masked by the selection (on top, made active); a second
|
|
9051
|
+
* copy becomes the background plate with the subject's area, grown by `dilate` px (default 8),
|
|
9052
|
+
* Content-Aware Filled (`fill: 'none'` leaves it transparent); an alpha channel marks the filled
|
|
9053
|
+
* area so a bad patch can be selected and filled again; the source layer is hidden. The fill is
|
|
9054
|
+
* computed first, so `signal` cancels it with nothing changed. 8-bit pixel layers only. Returns
|
|
9055
|
+
* the new layers, the channel and the filled bounds.
|
|
9056
|
+
*/
|
|
9057
|
+
async separateSubject(options = {}) {
|
|
9058
|
+
const subject = this.state.selection;
|
|
9059
|
+
if (!subject?.bounds) throw new LayerOperationError("Nothing is selected: select the subject first (select_subject, select_object or quick_select), then separate it.");
|
|
9060
|
+
const fill = options.fill ?? "content-aware";
|
|
9061
|
+
if (fill !== "content-aware" && fill !== "none") throw new LayerOperationError(`fill must be content-aware or none, got "${String(fill)}".`);
|
|
9062
|
+
const dilate = options.dilate ?? 8;
|
|
9063
|
+
if (!(typeof dilate === "number" && Number.isFinite(dilate) && dilate >= 0 && dilate <= 200)) throw new LayerOperationError(`dilate must be 0 to 200 px, got ${String(options.dilate)}.`);
|
|
9064
|
+
const source = this.paintTarget(options.layerId, "pixels", "separate the subject from");
|
|
9065
|
+
const name = source.layer.name || "Layer";
|
|
9066
|
+
const hole = dilate > 0 ? modifySelection(subject, "expand", dilate) : subject;
|
|
9067
|
+
let plan;
|
|
9068
|
+
this.state.selection = hole;
|
|
9069
|
+
try {
|
|
9070
|
+
plan = this.prepareContentAwareFill({ layerId: source.id, seed: options.seed });
|
|
9071
|
+
} finally {
|
|
9072
|
+
this.state.selection = subject;
|
|
9073
|
+
}
|
|
9074
|
+
const filled = fill === "content-aware" ? await this.synthesiseFill(plan, options.seed ?? 0, options) : new Uint8ClampedArray(plan.before.length);
|
|
9075
|
+
options.signal?.throwIfAborted();
|
|
9076
|
+
const plateRect = { x: plan.window.x - source.offset.x, y: plan.window.y - source.offset.y, width: plan.window.width, height: plan.window.height };
|
|
9077
|
+
const plateSurface = writeRegion(source.surface, plateRect, this.blendFill(plan, filled, "current"));
|
|
9078
|
+
return this.asOneStep(() => {
|
|
9079
|
+
const plateLayerId = this.duplicateLayer(source.id, `${name} plate`);
|
|
9080
|
+
this.commitLayers(mapLayer(this.state.layers, plateLayerId, (l) => this.withSurface(l, "pixels", plateSurface)));
|
|
9081
|
+
const foregroundLayerId = this.duplicateLayer(source.id, `${name} subject`);
|
|
9082
|
+
this.moveLayer(foregroundLayerId, { aboveId: plateLayerId });
|
|
9083
|
+
this.addLayerMask(foregroundLayerId, "selection");
|
|
9084
|
+
this.setSelection(hole);
|
|
9085
|
+
const channel = this.saveSelection({ name: `${name} fill area` });
|
|
9086
|
+
this.setSelection(subject);
|
|
9087
|
+
this.setLayerProperties(source.id, { visible: false });
|
|
9088
|
+
this.setActiveLayer(foregroundLayerId);
|
|
9089
|
+
return { foregroundLayerId, plateLayerId, sourceLayerId: source.id, fillChannelId: channel.id, filledBounds: { ...hole.bounds }, dilate, fill };
|
|
9090
|
+
});
|
|
9091
|
+
}
|
|
9006
9092
|
/**
|
|
9007
9093
|
* The fill without changing anything: the window, its pixels before and after (RGBA, the fill
|
|
9008
9094
|
* blended by the selection's coverage) and the sampling area used, for a preview.
|
|
@@ -14238,6 +14324,29 @@ function createImageSelectionTools(controller) {
|
|
|
14238
14324
|
});
|
|
14239
14325
|
}
|
|
14240
14326
|
};
|
|
14327
|
+
const separateTool = {
|
|
14328
|
+
name: "separate_subject",
|
|
14329
|
+
title: "Separate the subject from its background",
|
|
14330
|
+
description: "Separate Subject: splits the selected subject (select it first: select_subject, select_object, quick_select) from its background in one undo step. The subject goes to a copy of the layer masked by the selection, on top and made active; a second copy becomes the background plate, with the subject's area grown by dilate px and Content-Aware Filled (fill none leaves it transparent); an alpha channel marks the filled area, so a bad patch can be loaded (load_selection_from_channel), trimmed and filled again (content_aware_fill); the source layer is hidden. Use it to move, scale or relight a subject over its own rebuilt background. 8-bit pixel layers. Can be cancelled. Returns foregroundLayerId, plateLayerId, sourceLayerId, fillChannelId, filledBounds, dilate and fill.",
|
|
14331
|
+
inputSchema: {
|
|
14332
|
+
type: "object",
|
|
14333
|
+
properties: {
|
|
14334
|
+
layerId: layerIdSchema,
|
|
14335
|
+
dilate: { type: "number", minimum: 0, maximum: 200, description: "Grow the hole past the subject by this many px before filling, so no fringe of it stays in the plate (default 8)." },
|
|
14336
|
+
fill: { type: "string", enum: ["content-aware", "none"], description: "content-aware (default) rebuilds the background in the hole; none leaves it transparent." },
|
|
14337
|
+
seed: { type: "integer", minimum: 0, description: "Random seed for the fill; the same seed gives the same plate (default 0)." }
|
|
14338
|
+
},
|
|
14339
|
+
additionalProperties: false
|
|
14340
|
+
},
|
|
14341
|
+
annotations: writeAnnotations("Separate the subject from its background"),
|
|
14342
|
+
handler: async (args, context) => controller.separateSubject({
|
|
14343
|
+
layerId: requireLayerId(args.layerId),
|
|
14344
|
+
dilate: args.dilate,
|
|
14345
|
+
fill: args.fill,
|
|
14346
|
+
seed: args.seed,
|
|
14347
|
+
signal: context?.signal
|
|
14348
|
+
})
|
|
14349
|
+
};
|
|
14241
14350
|
const copyTool = {
|
|
14242
14351
|
name: "copy_pixels",
|
|
14243
14352
|
title: "Copy pixels",
|
|
@@ -14475,6 +14584,7 @@ function createImageSelectionTools(controller) {
|
|
|
14475
14584
|
strokeTool,
|
|
14476
14585
|
cropTool,
|
|
14477
14586
|
fillTool,
|
|
14587
|
+
separateTool,
|
|
14478
14588
|
copyTool,
|
|
14479
14589
|
cutTool,
|
|
14480
14590
|
pasteTool,
|
|
@@ -23027,6 +23137,7 @@ export {
|
|
|
23027
23137
|
selectionFromTiles,
|
|
23028
23138
|
selectionModeFromModifiers,
|
|
23029
23139
|
selectionOutline,
|
|
23140
|
+
selectionOutlinePaths,
|
|
23030
23141
|
selectionRing,
|
|
23031
23142
|
selectionToCoverage,
|
|
23032
23143
|
selectionToPixels,
|
|
@@ -5,6 +5,13 @@ import type { SelectionMask } from './mask.cjs';
|
|
|
5
5
|
* This is what marching ants are drawn from. Linear in the pixel count.
|
|
6
6
|
*/
|
|
7
7
|
export declare function selectionOutline(mask: SelectionMask, threshold?: number): Float32Array;
|
|
8
|
+
/**
|
|
9
|
+
* The selection's outline (`selectionOutline`) joined into polylines, `[x0, y0, x1, y1, …]` each,
|
|
10
|
+
* closed loops ending where they start. Marching ants are stroked from these, so the dash runs on
|
|
11
|
+
* along a staircase edge instead of restarting at every one-pixel step (which made diagonal edges
|
|
12
|
+
* flash rather than march). A loop may break where two pixels touch only at a corner.
|
|
13
|
+
*/
|
|
14
|
+
export declare function selectionOutlinePaths(mask: SelectionMask, threshold?: number): Float32Array[];
|
|
8
15
|
export interface QuickMaskStyle {
|
|
9
16
|
/** Overlay colour, `[r, g, b]` 0..255 (default Photoshop's rubylith red). */
|
|
10
17
|
color?: readonly [number, number, number];
|
|
@@ -5,6 +5,13 @@ import type { SelectionMask } from './mask.js';
|
|
|
5
5
|
* This is what marching ants are drawn from. Linear in the pixel count.
|
|
6
6
|
*/
|
|
7
7
|
export declare function selectionOutline(mask: SelectionMask, threshold?: number): Float32Array;
|
|
8
|
+
/**
|
|
9
|
+
* The selection's outline (`selectionOutline`) joined into polylines, `[x0, y0, x1, y1, …]` each,
|
|
10
|
+
* closed loops ending where they start. Marching ants are stroked from these, so the dash runs on
|
|
11
|
+
* along a staircase edge instead of restarting at every one-pixel step (which made diagonal edges
|
|
12
|
+
* flash rather than march). A loop may break where two pixels touch only at a corner.
|
|
13
|
+
*/
|
|
14
|
+
export declare function selectionOutlinePaths(mask: SelectionMask, threshold?: number): Float32Array[];
|
|
8
15
|
export interface QuickMaskStyle {
|
|
9
16
|
/** Overlay colour, `[r, g, b]` 0..255 (default Photoshop's rubylith red). */
|
|
10
17
|
color?: readonly [number, number, number];
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkKALCIDWHcjs = require('../chunk-KALCIDWH.cjs');
|
|
4
4
|
require('../chunk-SS53NNZO.cjs');
|
|
5
5
|
require('../chunk-K6PXS6DO.cjs');
|
|
6
|
-
require('../chunk-
|
|
6
|
+
require('../chunk-BB6TR422.cjs');
|
|
7
7
|
require('../chunk-474IQG74.cjs');
|
|
8
8
|
|
|
9
9
|
// src/image-editor/selection-worker.ts
|
|
10
10
|
if (typeof self !== "undefined" && typeof window === "undefined" && typeof self.postMessage === "function") {
|
|
11
|
-
|
|
11
|
+
_chunkKALCIDWHcjs.startSelectionWorker.call(void 0, self);
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
exports.startSelectionWorker =
|
|
15
|
+
exports.startSelectionWorker = _chunkKALCIDWHcjs.startSelectionWorker;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
startSelectionWorker
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-YFFLSP2C.js";
|
|
4
4
|
import "../chunk-ZNA3IQZF.js";
|
|
5
5
|
import "../chunk-ZIF4UJJ6.js";
|
|
6
|
-
import "../chunk-
|
|
6
|
+
import "../chunk-VWEWY4FY.js";
|
|
7
7
|
import "../chunk-HVVR5PZW.js";
|
|
8
8
|
|
|
9
9
|
// src/image-editor/selection-worker.ts
|
package/dist/paint/heal.d.cts
CHANGED
|
@@ -36,4 +36,6 @@ export declare function contentAwareFill(w: number, h: number, ch: number, img:
|
|
|
36
36
|
iterations?: number;
|
|
37
37
|
seed?: number;
|
|
38
38
|
exclude?: ArrayLike<boolean | number> | null;
|
|
39
|
+
/** Called after each refinement round with the fraction done (0..1, weighted by level size). */
|
|
40
|
+
onProgress?: (fraction: number) => void;
|
|
39
41
|
}): Float32Array;
|
package/dist/paint/heal.d.ts
CHANGED
|
@@ -36,4 +36,6 @@ export declare function contentAwareFill(w: number, h: number, ch: number, img:
|
|
|
36
36
|
iterations?: number;
|
|
37
37
|
seed?: number;
|
|
38
38
|
exclude?: ArrayLike<boolean | number> | null;
|
|
39
|
+
/** Called after each refinement round with the fraction done (0..1, weighted by level size). */
|
|
40
|
+
onProgress?: (fraction: number) => void;
|
|
39
41
|
}): Float32Array;
|
package/dist/paint/index.cjs
CHANGED
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
|
|
32
|
-
var
|
|
32
|
+
var _chunk2ONK3ERDcjs = require('../chunk-2ONK3ERD.cjs');
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
|
|
@@ -38,7 +38,7 @@ var _chunkYF3YZZ6Gcjs = require('../chunk-YF3YZZ6G.cjs');
|
|
|
38
38
|
|
|
39
39
|
|
|
40
40
|
|
|
41
|
-
var
|
|
41
|
+
var _chunkBB6TR422cjs = require('../chunk-BB6TR422.cjs');
|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
|
|
@@ -485,4 +485,4 @@ require('../chunk-XFM3OCHU.cjs');
|
|
|
485
485
|
|
|
486
486
|
|
|
487
487
|
|
|
488
|
-
exports.BODY_SCATTER = _chunkXFYLA3ZOcjs.BODY_SCATTER; exports.BRUSHSTROKE_MAX_SCALE = _chunkYQGCPL5Xcjs.BRUSHSTROKE_MAX_SCALE; exports.BRUSHSTROKE_MIN_SCALE = _chunkYQGCPL5Xcjs.BRUSHSTROKE_MIN_SCALE; exports.BrushstrokeCache = _chunkPQ3H2AANcjs.BrushstrokeCache; exports.CoverageMap = _chunkPQ3H2AANcjs.CoverageMap; exports.DEFAULT_BLENDER = _chunkPQ3H2AANcjs.DEFAULT_BLENDER; exports.DEFAULT_BRUSH = _chunkPQ3H2AANcjs.DEFAULT_BRUSH; exports.DEFAULT_FLOW = _chunkXFYLA3ZOcjs.DEFAULT_FLOW; exports.DEFAULT_MIXER = _chunkPQ3H2AANcjs.DEFAULT_MIXER; exports.DEFAULT_PAINT_GRADIENT = _chunkPQ3H2AANcjs.DEFAULT_PAINT_GRADIENT; exports.DEFAULT_PAINT_GRADIENT_MAPPING = _chunkPQ3H2AANcjs.DEFAULT_PAINT_GRADIENT_MAPPING; exports.DEFAULT_RETOUCH = _chunkYF3YZZ6Gcjs.DEFAULT_RETOUCH; exports.DEFAULT_SMUDGE = _chunkPQ3H2AANcjs.DEFAULT_SMUDGE; exports.DEFAULT_WET_PAPER = _chunkXFYLA3ZOcjs.DEFAULT_WET_PAPER; exports.DEFAULT_WET_PARAMS = _chunkXFYLA3ZOcjs.DEFAULT_WET_PARAMS; exports.DRY_EPS = _chunkXFYLA3ZOcjs.DRY_EPS; exports.DabWalker = _chunkPQ3H2AANcjs.DabWalker; exports.EMPTY_MIXER_LOAD = _chunkPQ3H2AANcjs.EMPTY_MIXER_LOAD; exports.EX = _chunkXFYLA3ZOcjs.EX; exports.EY = _chunkXFYLA3ZOcjs.EY; exports.FLAG_ALIVE = _chunkXFYLA3ZOcjs.FLAG_ALIVE; exports.FLAG_BOTTOM = _chunkXFYLA3ZOcjs.FLAG_BOTTOM; exports.FLAG_LEFT = _chunkXFYLA3ZOcjs.FLAG_LEFT; exports.FLAG_RIGHT = _chunkXFYLA3ZOcjs.FLAG_RIGHT; exports.FLAG_TOP = _chunkXFYLA3ZOcjs.FLAG_TOP; exports.FLAG_WET = _chunkXFYLA3ZOcjs.FLAG_WET; exports.FLAT = _chunkXFYLA3ZOcjs.FLAT; exports.FREE_INTERVAL = _chunkXFYLA3ZOcjs.FREE_INTERVAL; exports.GRAIN_PATTERNS = _chunkPQ3H2AANcjs.GRAIN_PATTERNS; exports.GRAIN_TILE = _chunkPQ3H2AANcjs.GRAIN_TILE; exports.HIDE = _chunkXFYLA3ZOcjs.HIDE; exports.IDENTITY_CLONE_TRANSFORM = _chunkYF3YZZ6Gcjs.IDENTITY_CLONE_TRANSFORM; exports.MAX_BATCH = _chunkXFYLA3ZOcjs.MAX_BATCH; exports.MAX_BRUSH_SIZE = _chunkPQ3H2AANcjs.MAX_BRUSH_SIZE; exports.MAX_TILT_ACCEL = _chunkXFYLA3ZOcjs.MAX_TILT_ACCEL; exports.MAX_WET_LANES = _chunkXFYLA3ZOcjs.MAX_WET_LANES; exports.MAX_WET_SLOTS = _chunkXFYLA3ZOcjs.MAX_WET_SLOTS; exports.MIXER_DRAIN = _chunkPQ3H2AANcjs.MIXER_DRAIN; exports.MIXER_PICKUP_RATE = _chunkPQ3H2AANcjs.MIXER_PICKUP_RATE; exports.MIXING_MODELS = _chunkPQ3H2AANcjs.MIXING_MODELS; exports.MixerStroke = _chunkPQ3H2AANcjs.MixerStroke; exports.OPP = _chunkXFYLA3ZOcjs.OPP; exports.PAINT_COLOR_JSON_SCHEMA = _chunkPQ3H2AANcjs.PAINT_COLOR_JSON_SCHEMA; exports.PAINT_GRADIENT_FULL_SPEED = _chunkPQ3H2AANcjs.PAINT_GRADIENT_FULL_SPEED; exports.PAINT_GRADIENT_JSON_SCHEMA = _chunkPQ3H2AANcjs.PAINT_GRADIENT_JSON_SCHEMA; exports.PAINT_GRADIENT_KIT = _chunkPQ3H2AANcjs.PAINT_GRADIENT_KIT; exports.PAINT_GRADIENT_MAPPINGS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_MAPPINGS; exports.PAINT_GRADIENT_MAPPING_LABELS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_MAPPING_LABELS; exports.PAINT_GRADIENT_PRESETS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_PRESETS; exports.PAINT_GRADIENT_REPEATS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_REPEATS; exports.PAINT_GRADIENT_REPEAT_LABELS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_REPEAT_LABELS; exports.PAINT_GRADIENT_SPACES = _chunkPQ3H2AANcjs.PAINT_GRADIENT_SPACES; exports.PAINT_GRADIENT_SPACE_LABELS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_SPACE_LABELS; exports.PAINT_SOURCE_JSON_SCHEMA = _chunkPQ3H2AANcjs.PAINT_SOURCE_JSON_SCHEMA; exports.PAPER_CAPACITY = _chunkXFYLA3ZOcjs.PAPER_CAPACITY; exports.PARAM = _chunkXFYLA3ZOcjs.PARAM; exports.PARAM_FLOATS = _chunkXFYLA3ZOcjs.PARAM_FLOATS; exports.PIGMENT_BANDS = _chunkOLNIPTB3cjs.PIGMENT_BANDS; exports.PIGMENT_CHANNELS = _chunkXFYLA3ZOcjs.PIGMENT_CHANNELS; exports.PIGMENT_LAMBDA_MIN = _chunkOLNIPTB3cjs.PIGMENT_LAMBDA_MIN; exports.PIGMENT_LAMBDA_STEP = _chunkOLNIPTB3cjs.PIGMENT_LAMBDA_STEP; exports.PIGMENT_UNIT = _chunkXFYLA3ZOcjs.PIGMENT_UNIT; exports.PIGMENT_WAVELENGTHS = _chunkOLNIPTB3cjs.PIGMENT_WAVELENGTHS; exports.PLANE = _chunkXFYLA3ZOcjs.PLANE; exports.PLANE_BYTES = _chunkXFYLA3ZOcjs.PLANE_BYTES; exports.P_D0 = _chunkXFYLA3ZOcjs.P_D0; exports.P_EDGE = _chunkXFYLA3ZOcjs.P_EDGE; exports.P_FX = _chunkXFYLA3ZOcjs.P_FX; exports.P_FY = _chunkXFYLA3ZOcjs.P_FY; exports.P_H = _chunkXFYLA3ZOcjs.P_H; exports.P_P0 = _chunkXFYLA3ZOcjs.P_P0; exports.P_RHO = _chunkXFYLA3ZOcjs.P_RHO; exports.P_SW = _chunkXFYLA3ZOcjs.P_SW; exports.P_UX = _chunkXFYLA3ZOcjs.P_UX; exports.P_UY = _chunkXFYLA3ZOcjs.P_UY; exports.PaintExchange = _chunkPQ3H2AANcjs.PaintExchange; exports.PaintGradientSampler = _chunkPQ3H2AANcjs.PaintGradientSampler; exports.PaintSourceError = _chunkPQ3H2AANcjs.PaintSourceError; exports.PaperGrain = _chunkPQ3H2AANcjs.PaperGrain; exports.RETOUCH_SAMPLES = _chunkYF3YZZ6Gcjs.RETOUCH_SAMPLES; exports.RegionPixelSource = _chunkYF3YZZ6Gcjs.RegionPixelSource; exports.RetouchDabStroke = _chunkYF3YZZ6Gcjs.RetouchDabStroke; exports.SET_PLANES = _chunkXFYLA3ZOcjs.SET_PLANES; exports.SLOT_BYTES = _chunkXFYLA3ZOcjs.SLOT_BYTES; exports.SLOT_PLANES = _chunkXFYLA3ZOcjs.SLOT_PLANES; exports.SLOT_SIDE = _chunkXFYLA3ZOcjs.SLOT_SIDE; exports.SPOT_HEAL_TYPES = _chunkYF3YZZ6Gcjs.SPOT_HEAL_TYPES; exports.SRGB_TO_LINEAR = _chunkXFYLA3ZOcjs.SRGB_TO_LINEAR; exports.STRIP = _chunkXFYLA3ZOcjs.STRIP; exports.SmudgeTip = _chunkPQ3H2AANcjs.SmudgeTip; exports.StrokeCoverage = _chunkPQ3H2AANcjs.StrokeCoverage; exports.TIP_GRADIENT_STEPS = _chunkPQ3H2AANcjs.TIP_GRADIENT_STEPS; exports.TONE_RANGES = _chunkYF3YZZ6Gcjs.TONE_RANGES; exports.TileMedium = _chunkPQ3H2AANcjs.TileMedium; exports.TilePixelSource = _chunkYF3YZZ6Gcjs.TilePixelSource; exports.TileableNoise = _chunkPQ3H2AANcjs.TileableNoise; exports.TransformedPixelSource = _chunkYF3YZZ6Gcjs.TransformedPixelSource; exports.U_MAX = _chunkXFYLA3ZOcjs.U_MAX; exports.W9 = _chunkXFYLA3ZOcjs.W9; exports.WET_FLOW_KINDS = _chunkXFYLA3ZOcjs.WET_FLOW_KINDS; exports.WET_PARAM_KEYS = _chunkXFYLA3ZOcjs.WET_PARAM_KEYS; exports.WET_TILE = _chunkXFYLA3ZOcjs.WET_TILE; exports.WGSL_HALO = _chunkXFYLA3ZOcjs.WGSL_HALO; exports.WGSL_SHADE = _chunkXFYLA3ZOcjs.WGSL_SHADE; exports.WGSL_STEP = _chunkXFYLA3ZOcjs.WGSL_STEP; exports.WetGpuEngine = _chunkXFYLA3ZOcjs.WetGpuEngine; exports.WetMedium = _chunkXFYLA3ZOcjs.WetMedium; exports.WetWorkerPool = _chunkXFYLA3ZOcjs.WetWorkerPool; exports.WetWorld = _chunkXFYLA3ZOcjs.WetWorld; exports.WetWorldError = _chunkXFYLA3ZOcjs.WetWorldError; exports.addPaintGradientStop = _chunkPQ3H2AANcjs.addPaintGradientStop; exports.applyRetouchToTile = _chunkYF3YZZ6Gcjs.applyRetouchToTile; exports.applyStrokeToDeepTile = _chunkPQ3H2AANcjs.applyStrokeToDeepTile; exports.applyStrokeToTile = _chunkPQ3H2AANcjs.applyStrokeToTile; exports.applyToneToDeepTile = _chunkYF3YZZ6Gcjs.applyToneToDeepTile; exports.bestOffset = _chunkMQDIP4CFcjs.bestOffset; exports.blendRadius = _chunkPQ3H2AANcjs.blendRadius; exports.blenderDab = _chunkPQ3H2AANcjs.blenderDab; exports.boxBlurPixels = _chunkYF3YZZ6Gcjs.boxBlurPixels; exports.brushstrokeDataUrl = _chunkPQ3H2AANcjs.brushstrokeDataUrl; exports.brushstrokeKey = _chunkPQ3H2AANcjs.brushstrokeKey; exports.brushstrokeSamples = _chunkPQ3H2AANcjs.brushstrokeSamples; exports.brushstrokeScaleBucket = _chunkYQGCPL5Xcjs.brushstrokeScaleBucket; exports.brushstrokeStrokeOptions = _chunkPQ3H2AANcjs.brushstrokeStrokeOptions; exports.brushstrokeToCanvas = _chunkPQ3H2AANcjs.brushstrokeToCanvas; exports.canShareMemory = _chunkXFYLA3ZOcjs.canShareMemory; exports.cleanMixer = _chunkPQ3H2AANcjs.cleanMixer; exports.cloneSamplePoint = _chunkYF3YZZ6Gcjs.cloneSamplePoint; exports.contentAwareFill = _chunkMQDIP4CFcjs.contentAwareFill; exports.coverageTileCoord = _chunkPQ3H2AANcjs.coverageTileCoord; exports.createBlenderScratch = _chunkPQ3H2AANcjs.createBlenderScratch; exports.createPigment = _chunkOLNIPTB3cjs.createPigment; exports.createPigmentTools = _chunkXFYLA3ZOcjs.createPigmentTools; exports.createWetGpuEngine = _chunkXFYLA3ZOcjs.createWetGpuEngine; exports.dabCoverage = _chunkPQ3H2AANcjs.dabCoverage; exports.dabRect = _chunkPQ3H2AANcjs.dabRect; exports.dexp = _chunkXFYLA3ZOcjs.dexp; exports.dilateMask = _chunkMQDIP4CFcjs.dilateMask; exports.dlog = _chunkXFYLA3ZOcjs.dlog; exports.dodgeBurn = _chunkYF3YZZ6Gcjs.dodgeBurn; exports.dodgeBurnCurve = _chunkYF3YZZ6Gcjs.dodgeBurnCurve; exports.dpow = _chunkXFYLA3ZOcjs.dpow; exports.dsincos = _chunkXFYLA3ZOcjs.dsincos; exports.edgeBits = _chunkXFYLA3ZOcjs.edgeBits; exports.exchangeRates = _chunkPQ3H2AANcjs.exchangeRates; exports.expNeg = _chunkXFYLA3ZOcjs.expNeg; exports.filmPixel = _chunkXFYLA3ZOcjs.filmPixel; exports.filmReflectance = _chunkXFYLA3ZOcjs.filmReflectance; exports.findWebGpu = _chunkXFYLA3ZOcjs.findWebGpu; exports.flowField = _chunkXFYLA3ZOcjs.flowField; exports.gradientDabColor = _chunkPQ3H2AANcjs.gradientDabColor; exports.grainCatch = _chunkPQ3H2AANcjs.grainCatch; exports.grainHeights = _chunkPQ3H2AANcjs.grainHeights; exports.hash2 = _chunkPQ3H2AANcjs.hash2; exports.healPixels = _chunkYF3YZZ6Gcjs.healPixels; exports.hexToPaintRgb = _chunkPQ3H2AANcjs.hexToPaintRgb; exports.isBrushstrokeBrush = _chunkPQ3H2AANcjs.isBrushstrokeBrush; exports.isGradientPaint = _chunkPQ3H2AANcjs.isGradientPaint; exports.isIdentityCloneTransform = _chunkYF3YZZ6Gcjs.isIdentityCloneTransform; exports.latticeViscosity = _chunkXFYLA3ZOcjs.latticeViscosity; exports.lerpPigment = _chunkOLNIPTB3cjs.lerpPigment; exports.lerpPigmentInto = _chunkOLNIPTB3cjs.lerpPigmentInto; exports.linearToSrgb8 = _chunkXFYLA3ZOcjs.linearToSrgb8; exports.loadMixer = _chunkPQ3H2AANcjs.loadMixer; exports.loadWetKernel = _chunkXFYLA3ZOcjs.loadWetKernel; exports.luma = _chunkYF3YZZ6Gcjs.luma; exports.maskBounds = _chunkMQDIP4CFcjs.maskBounds; exports.membraneFill = _chunkMQDIP4CFcjs.membraneFill; exports.mix32 = _chunkPQ3H2AANcjs.mix32; exports.mixPigments = _chunkOLNIPTB3cjs.mixPigments; exports.mixerRates = _chunkPQ3H2AANcjs.mixerRates; exports.moveWetSnapshot = _chunkXFYLA3ZOcjs.moveWetSnapshot; exports.normalizeBlender = _chunkPQ3H2AANcjs.normalizeBlender; exports.normalizeBrush = _chunkPQ3H2AANcjs.normalizeBrush; exports.normalizeFlow = _chunkXFYLA3ZOcjs.normalizeFlow; exports.normalizeHexColor = _chunkPQ3H2AANcjs.normalizeHexColor; exports.normalizeMixer = _chunkPQ3H2AANcjs.normalizeMixer; exports.normalizeRetouch = _chunkYF3YZZ6Gcjs.normalizeRetouch; exports.normalizeSmudge = _chunkPQ3H2AANcjs.normalizeSmudge; exports.normalizeTilt = _chunkXFYLA3ZOcjs.normalizeTilt; exports.normalizeWetParams = _chunkXFYLA3ZOcjs.normalizeWetParams; exports.packWetParams = _chunkXFYLA3ZOcjs.packWetParams; exports.paintGradientMappingFor = _chunkPQ3H2AANcjs.paintGradientMappingFor; exports.paintPathStroke = _chunkPQ3H2AANcjs.paintPathStroke; exports.paintSourceColor = _chunkPQ3H2AANcjs.paintSourceColor; exports.paintSourceCss = _chunkPQ3H2AANcjs.paintSourceCss; exports.parsePaintSource = _chunkPQ3H2AANcjs.parsePaintSource; exports.pathStrokeCoverage = _chunkPQ3H2AANcjs.pathStrokeCoverage; exports.pathStrokeDabs = _chunkPQ3H2AANcjs.pathStrokeDabs; exports.perDabStrength = _chunkYF3YZZ6Gcjs.perDabStrength; exports.pigmentColor = _chunkXFYLA3ZOcjs.pigmentColor; exports.pigmentOf = _chunkXFYLA3ZOcjs.pigmentOf; exports.pixelPigment = _chunkXFYLA3ZOcjs.pixelPigment; exports.pointerPressure = _chunkXFYLA3ZOcjs.pointerPressure; exports.pointerStrokeSample = _chunkXFYLA3ZOcjs.pointerStrokeSample; exports.pointerStrokeSamples = _chunkXFYLA3ZOcjs.pointerStrokeSamples; exports.put255 = _chunkPQ3H2AANcjs.put255; exports.rand01 = _chunkPQ3H2AANcjs.rand01; exports.randSigned = _chunkPQ3H2AANcjs.randSigned; exports.rasterizeDab = _chunkPQ3H2AANcjs.rasterizeDab; exports.readPaintSource = _chunkPQ3H2AANcjs.readPaintSource; exports.readSourceRegion = _chunkYF3YZZ6Gcjs.readSourceRegion; exports.reflectanceToRgb = _chunkOLNIPTB3cjs.reflectanceToRgb; exports.removePaintGradientStop = _chunkPQ3H2AANcjs.removePaintGradientStop; exports.renderBrushstroke = _chunkPQ3H2AANcjs.renderBrushstroke; exports.resolvePaintGradient = _chunkPQ3H2AANcjs.resolvePaintGradient; exports.retouchFilter = _chunkYF3YZZ6Gcjs.retouchFilter; exports.reversePaintGradient = _chunkPQ3H2AANcjs.reversePaintGradient; exports.rgbToReflectance = _chunkOLNIPTB3cjs.rgbToReflectance; exports.rgbaViewOfGrey = _chunkYF3YZZ6Gcjs.rgbaViewOfGrey; exports.saturationOf = _chunkYF3YZZ6Gcjs.saturationOf; exports.scalePaintGradient = _chunkPQ3H2AANcjs.scalePaintGradient; exports.seamlessClone = _chunkMQDIP4CFcjs.seamlessClone; exports.seedFromString = _chunkPQ3H2AANcjs.seedFromString; exports.setPigmentColor = _chunkOLNIPTB3cjs.setPigmentColor; exports.shadeTile = _chunkXFYLA3ZOcjs.shadeTile; exports.smoothPoints = _chunkPQ3H2AANcjs.smoothPoints; exports.smudgeEffect = _chunkYF3YZZ6Gcjs.smudgeEffect; exports.solidPaint = _chunkPQ3H2AANcjs.solidPaint; exports.solveMembrane = _chunkMQDIP4CFcjs.solveMembrane; exports.sponge = _chunkYF3YZZ6Gcjs.sponge; exports.spongeEffect = _chunkYF3YZZ6Gcjs.spongeEffect; exports.spotHealPixels = _chunkYF3YZZ6Gcjs.spotHealPixels; exports.spotHealWindow = _chunkYF3YZZ6Gcjs.spotHealWindow; exports.srgbByteToLinear = _chunkXFYLA3ZOcjs.srgbByteToLinear; exports.stepSlotTs = _chunkXFYLA3ZOcjs.stepSlotTs; exports.strokeGrainCatch = _chunkPQ3H2AANcjs.strokeGrainCatch; exports.tipFalloff = _chunkPQ3H2AANcjs.tipFalloff; exports.tipReach = _chunkPQ3H2AANcjs.tipReach; exports.tipShape = _chunkPQ3H2AANcjs.tipShape; exports.toneOf = _chunkYF3YZZ6Gcjs.toneOf; exports.updatePaintGradientStop = _chunkPQ3H2AANcjs.updatePaintGradientStop; exports.walkDabs = _chunkPQ3H2AANcjs.walkDabs; exports.wetGpuSupport = _chunkXFYLA3ZOcjs.wetGpuSupport; exports.wetSimdSupported = _chunkXFYLA3ZOcjs.wetSimdSupported; exports.wetSupport = _chunkXFYLA3ZOcjs.wetSupport;
|
|
488
|
+
exports.BODY_SCATTER = _chunkXFYLA3ZOcjs.BODY_SCATTER; exports.BRUSHSTROKE_MAX_SCALE = _chunkYQGCPL5Xcjs.BRUSHSTROKE_MAX_SCALE; exports.BRUSHSTROKE_MIN_SCALE = _chunkYQGCPL5Xcjs.BRUSHSTROKE_MIN_SCALE; exports.BrushstrokeCache = _chunkPQ3H2AANcjs.BrushstrokeCache; exports.CoverageMap = _chunkPQ3H2AANcjs.CoverageMap; exports.DEFAULT_BLENDER = _chunkPQ3H2AANcjs.DEFAULT_BLENDER; exports.DEFAULT_BRUSH = _chunkPQ3H2AANcjs.DEFAULT_BRUSH; exports.DEFAULT_FLOW = _chunkXFYLA3ZOcjs.DEFAULT_FLOW; exports.DEFAULT_MIXER = _chunkPQ3H2AANcjs.DEFAULT_MIXER; exports.DEFAULT_PAINT_GRADIENT = _chunkPQ3H2AANcjs.DEFAULT_PAINT_GRADIENT; exports.DEFAULT_PAINT_GRADIENT_MAPPING = _chunkPQ3H2AANcjs.DEFAULT_PAINT_GRADIENT_MAPPING; exports.DEFAULT_RETOUCH = _chunk2ONK3ERDcjs.DEFAULT_RETOUCH; exports.DEFAULT_SMUDGE = _chunkPQ3H2AANcjs.DEFAULT_SMUDGE; exports.DEFAULT_WET_PAPER = _chunkXFYLA3ZOcjs.DEFAULT_WET_PAPER; exports.DEFAULT_WET_PARAMS = _chunkXFYLA3ZOcjs.DEFAULT_WET_PARAMS; exports.DRY_EPS = _chunkXFYLA3ZOcjs.DRY_EPS; exports.DabWalker = _chunkPQ3H2AANcjs.DabWalker; exports.EMPTY_MIXER_LOAD = _chunkPQ3H2AANcjs.EMPTY_MIXER_LOAD; exports.EX = _chunkXFYLA3ZOcjs.EX; exports.EY = _chunkXFYLA3ZOcjs.EY; exports.FLAG_ALIVE = _chunkXFYLA3ZOcjs.FLAG_ALIVE; exports.FLAG_BOTTOM = _chunkXFYLA3ZOcjs.FLAG_BOTTOM; exports.FLAG_LEFT = _chunkXFYLA3ZOcjs.FLAG_LEFT; exports.FLAG_RIGHT = _chunkXFYLA3ZOcjs.FLAG_RIGHT; exports.FLAG_TOP = _chunkXFYLA3ZOcjs.FLAG_TOP; exports.FLAG_WET = _chunkXFYLA3ZOcjs.FLAG_WET; exports.FLAT = _chunkXFYLA3ZOcjs.FLAT; exports.FREE_INTERVAL = _chunkXFYLA3ZOcjs.FREE_INTERVAL; exports.GRAIN_PATTERNS = _chunkPQ3H2AANcjs.GRAIN_PATTERNS; exports.GRAIN_TILE = _chunkPQ3H2AANcjs.GRAIN_TILE; exports.HIDE = _chunkXFYLA3ZOcjs.HIDE; exports.IDENTITY_CLONE_TRANSFORM = _chunk2ONK3ERDcjs.IDENTITY_CLONE_TRANSFORM; exports.MAX_BATCH = _chunkXFYLA3ZOcjs.MAX_BATCH; exports.MAX_BRUSH_SIZE = _chunkPQ3H2AANcjs.MAX_BRUSH_SIZE; exports.MAX_TILT_ACCEL = _chunkXFYLA3ZOcjs.MAX_TILT_ACCEL; exports.MAX_WET_LANES = _chunkXFYLA3ZOcjs.MAX_WET_LANES; exports.MAX_WET_SLOTS = _chunkXFYLA3ZOcjs.MAX_WET_SLOTS; exports.MIXER_DRAIN = _chunkPQ3H2AANcjs.MIXER_DRAIN; exports.MIXER_PICKUP_RATE = _chunkPQ3H2AANcjs.MIXER_PICKUP_RATE; exports.MIXING_MODELS = _chunkPQ3H2AANcjs.MIXING_MODELS; exports.MixerStroke = _chunkPQ3H2AANcjs.MixerStroke; exports.OPP = _chunkXFYLA3ZOcjs.OPP; exports.PAINT_COLOR_JSON_SCHEMA = _chunkPQ3H2AANcjs.PAINT_COLOR_JSON_SCHEMA; exports.PAINT_GRADIENT_FULL_SPEED = _chunkPQ3H2AANcjs.PAINT_GRADIENT_FULL_SPEED; exports.PAINT_GRADIENT_JSON_SCHEMA = _chunkPQ3H2AANcjs.PAINT_GRADIENT_JSON_SCHEMA; exports.PAINT_GRADIENT_KIT = _chunkPQ3H2AANcjs.PAINT_GRADIENT_KIT; exports.PAINT_GRADIENT_MAPPINGS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_MAPPINGS; exports.PAINT_GRADIENT_MAPPING_LABELS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_MAPPING_LABELS; exports.PAINT_GRADIENT_PRESETS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_PRESETS; exports.PAINT_GRADIENT_REPEATS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_REPEATS; exports.PAINT_GRADIENT_REPEAT_LABELS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_REPEAT_LABELS; exports.PAINT_GRADIENT_SPACES = _chunkPQ3H2AANcjs.PAINT_GRADIENT_SPACES; exports.PAINT_GRADIENT_SPACE_LABELS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_SPACE_LABELS; exports.PAINT_SOURCE_JSON_SCHEMA = _chunkPQ3H2AANcjs.PAINT_SOURCE_JSON_SCHEMA; exports.PAPER_CAPACITY = _chunkXFYLA3ZOcjs.PAPER_CAPACITY; exports.PARAM = _chunkXFYLA3ZOcjs.PARAM; exports.PARAM_FLOATS = _chunkXFYLA3ZOcjs.PARAM_FLOATS; exports.PIGMENT_BANDS = _chunkOLNIPTB3cjs.PIGMENT_BANDS; exports.PIGMENT_CHANNELS = _chunkXFYLA3ZOcjs.PIGMENT_CHANNELS; exports.PIGMENT_LAMBDA_MIN = _chunkOLNIPTB3cjs.PIGMENT_LAMBDA_MIN; exports.PIGMENT_LAMBDA_STEP = _chunkOLNIPTB3cjs.PIGMENT_LAMBDA_STEP; exports.PIGMENT_UNIT = _chunkXFYLA3ZOcjs.PIGMENT_UNIT; exports.PIGMENT_WAVELENGTHS = _chunkOLNIPTB3cjs.PIGMENT_WAVELENGTHS; exports.PLANE = _chunkXFYLA3ZOcjs.PLANE; exports.PLANE_BYTES = _chunkXFYLA3ZOcjs.PLANE_BYTES; exports.P_D0 = _chunkXFYLA3ZOcjs.P_D0; exports.P_EDGE = _chunkXFYLA3ZOcjs.P_EDGE; exports.P_FX = _chunkXFYLA3ZOcjs.P_FX; exports.P_FY = _chunkXFYLA3ZOcjs.P_FY; exports.P_H = _chunkXFYLA3ZOcjs.P_H; exports.P_P0 = _chunkXFYLA3ZOcjs.P_P0; exports.P_RHO = _chunkXFYLA3ZOcjs.P_RHO; exports.P_SW = _chunkXFYLA3ZOcjs.P_SW; exports.P_UX = _chunkXFYLA3ZOcjs.P_UX; exports.P_UY = _chunkXFYLA3ZOcjs.P_UY; exports.PaintExchange = _chunkPQ3H2AANcjs.PaintExchange; exports.PaintGradientSampler = _chunkPQ3H2AANcjs.PaintGradientSampler; exports.PaintSourceError = _chunkPQ3H2AANcjs.PaintSourceError; exports.PaperGrain = _chunkPQ3H2AANcjs.PaperGrain; exports.RETOUCH_SAMPLES = _chunk2ONK3ERDcjs.RETOUCH_SAMPLES; exports.RegionPixelSource = _chunk2ONK3ERDcjs.RegionPixelSource; exports.RetouchDabStroke = _chunk2ONK3ERDcjs.RetouchDabStroke; exports.SET_PLANES = _chunkXFYLA3ZOcjs.SET_PLANES; exports.SLOT_BYTES = _chunkXFYLA3ZOcjs.SLOT_BYTES; exports.SLOT_PLANES = _chunkXFYLA3ZOcjs.SLOT_PLANES; exports.SLOT_SIDE = _chunkXFYLA3ZOcjs.SLOT_SIDE; exports.SPOT_HEAL_TYPES = _chunk2ONK3ERDcjs.SPOT_HEAL_TYPES; exports.SRGB_TO_LINEAR = _chunkXFYLA3ZOcjs.SRGB_TO_LINEAR; exports.STRIP = _chunkXFYLA3ZOcjs.STRIP; exports.SmudgeTip = _chunkPQ3H2AANcjs.SmudgeTip; exports.StrokeCoverage = _chunkPQ3H2AANcjs.StrokeCoverage; exports.TIP_GRADIENT_STEPS = _chunkPQ3H2AANcjs.TIP_GRADIENT_STEPS; exports.TONE_RANGES = _chunk2ONK3ERDcjs.TONE_RANGES; exports.TileMedium = _chunkPQ3H2AANcjs.TileMedium; exports.TilePixelSource = _chunk2ONK3ERDcjs.TilePixelSource; exports.TileableNoise = _chunkPQ3H2AANcjs.TileableNoise; exports.TransformedPixelSource = _chunk2ONK3ERDcjs.TransformedPixelSource; exports.U_MAX = _chunkXFYLA3ZOcjs.U_MAX; exports.W9 = _chunkXFYLA3ZOcjs.W9; exports.WET_FLOW_KINDS = _chunkXFYLA3ZOcjs.WET_FLOW_KINDS; exports.WET_PARAM_KEYS = _chunkXFYLA3ZOcjs.WET_PARAM_KEYS; exports.WET_TILE = _chunkXFYLA3ZOcjs.WET_TILE; exports.WGSL_HALO = _chunkXFYLA3ZOcjs.WGSL_HALO; exports.WGSL_SHADE = _chunkXFYLA3ZOcjs.WGSL_SHADE; exports.WGSL_STEP = _chunkXFYLA3ZOcjs.WGSL_STEP; exports.WetGpuEngine = _chunkXFYLA3ZOcjs.WetGpuEngine; exports.WetMedium = _chunkXFYLA3ZOcjs.WetMedium; exports.WetWorkerPool = _chunkXFYLA3ZOcjs.WetWorkerPool; exports.WetWorld = _chunkXFYLA3ZOcjs.WetWorld; exports.WetWorldError = _chunkXFYLA3ZOcjs.WetWorldError; exports.addPaintGradientStop = _chunkPQ3H2AANcjs.addPaintGradientStop; exports.applyRetouchToTile = _chunk2ONK3ERDcjs.applyRetouchToTile; exports.applyStrokeToDeepTile = _chunkPQ3H2AANcjs.applyStrokeToDeepTile; exports.applyStrokeToTile = _chunkPQ3H2AANcjs.applyStrokeToTile; exports.applyToneToDeepTile = _chunk2ONK3ERDcjs.applyToneToDeepTile; exports.bestOffset = _chunkBB6TR422cjs.bestOffset; exports.blendRadius = _chunkPQ3H2AANcjs.blendRadius; exports.blenderDab = _chunkPQ3H2AANcjs.blenderDab; exports.boxBlurPixels = _chunk2ONK3ERDcjs.boxBlurPixels; exports.brushstrokeDataUrl = _chunkPQ3H2AANcjs.brushstrokeDataUrl; exports.brushstrokeKey = _chunkPQ3H2AANcjs.brushstrokeKey; exports.brushstrokeSamples = _chunkPQ3H2AANcjs.brushstrokeSamples; exports.brushstrokeScaleBucket = _chunkYQGCPL5Xcjs.brushstrokeScaleBucket; exports.brushstrokeStrokeOptions = _chunkPQ3H2AANcjs.brushstrokeStrokeOptions; exports.brushstrokeToCanvas = _chunkPQ3H2AANcjs.brushstrokeToCanvas; exports.canShareMemory = _chunkXFYLA3ZOcjs.canShareMemory; exports.cleanMixer = _chunkPQ3H2AANcjs.cleanMixer; exports.cloneSamplePoint = _chunk2ONK3ERDcjs.cloneSamplePoint; exports.contentAwareFill = _chunkBB6TR422cjs.contentAwareFill; exports.coverageTileCoord = _chunkPQ3H2AANcjs.coverageTileCoord; exports.createBlenderScratch = _chunkPQ3H2AANcjs.createBlenderScratch; exports.createPigment = _chunkOLNIPTB3cjs.createPigment; exports.createPigmentTools = _chunkXFYLA3ZOcjs.createPigmentTools; exports.createWetGpuEngine = _chunkXFYLA3ZOcjs.createWetGpuEngine; exports.dabCoverage = _chunkPQ3H2AANcjs.dabCoverage; exports.dabRect = _chunkPQ3H2AANcjs.dabRect; exports.dexp = _chunkXFYLA3ZOcjs.dexp; exports.dilateMask = _chunkBB6TR422cjs.dilateMask; exports.dlog = _chunkXFYLA3ZOcjs.dlog; exports.dodgeBurn = _chunk2ONK3ERDcjs.dodgeBurn; exports.dodgeBurnCurve = _chunk2ONK3ERDcjs.dodgeBurnCurve; exports.dpow = _chunkXFYLA3ZOcjs.dpow; exports.dsincos = _chunkXFYLA3ZOcjs.dsincos; exports.edgeBits = _chunkXFYLA3ZOcjs.edgeBits; exports.exchangeRates = _chunkPQ3H2AANcjs.exchangeRates; exports.expNeg = _chunkXFYLA3ZOcjs.expNeg; exports.filmPixel = _chunkXFYLA3ZOcjs.filmPixel; exports.filmReflectance = _chunkXFYLA3ZOcjs.filmReflectance; exports.findWebGpu = _chunkXFYLA3ZOcjs.findWebGpu; exports.flowField = _chunkXFYLA3ZOcjs.flowField; exports.gradientDabColor = _chunkPQ3H2AANcjs.gradientDabColor; exports.grainCatch = _chunkPQ3H2AANcjs.grainCatch; exports.grainHeights = _chunkPQ3H2AANcjs.grainHeights; exports.hash2 = _chunkPQ3H2AANcjs.hash2; exports.healPixels = _chunk2ONK3ERDcjs.healPixels; exports.hexToPaintRgb = _chunkPQ3H2AANcjs.hexToPaintRgb; exports.isBrushstrokeBrush = _chunkPQ3H2AANcjs.isBrushstrokeBrush; exports.isGradientPaint = _chunkPQ3H2AANcjs.isGradientPaint; exports.isIdentityCloneTransform = _chunk2ONK3ERDcjs.isIdentityCloneTransform; exports.latticeViscosity = _chunkXFYLA3ZOcjs.latticeViscosity; exports.lerpPigment = _chunkOLNIPTB3cjs.lerpPigment; exports.lerpPigmentInto = _chunkOLNIPTB3cjs.lerpPigmentInto; exports.linearToSrgb8 = _chunkXFYLA3ZOcjs.linearToSrgb8; exports.loadMixer = _chunkPQ3H2AANcjs.loadMixer; exports.loadWetKernel = _chunkXFYLA3ZOcjs.loadWetKernel; exports.luma = _chunk2ONK3ERDcjs.luma; exports.maskBounds = _chunkBB6TR422cjs.maskBounds; exports.membraneFill = _chunkBB6TR422cjs.membraneFill; exports.mix32 = _chunkPQ3H2AANcjs.mix32; exports.mixPigments = _chunkOLNIPTB3cjs.mixPigments; exports.mixerRates = _chunkPQ3H2AANcjs.mixerRates; exports.moveWetSnapshot = _chunkXFYLA3ZOcjs.moveWetSnapshot; exports.normalizeBlender = _chunkPQ3H2AANcjs.normalizeBlender; exports.normalizeBrush = _chunkPQ3H2AANcjs.normalizeBrush; exports.normalizeFlow = _chunkXFYLA3ZOcjs.normalizeFlow; exports.normalizeHexColor = _chunkPQ3H2AANcjs.normalizeHexColor; exports.normalizeMixer = _chunkPQ3H2AANcjs.normalizeMixer; exports.normalizeRetouch = _chunk2ONK3ERDcjs.normalizeRetouch; exports.normalizeSmudge = _chunkPQ3H2AANcjs.normalizeSmudge; exports.normalizeTilt = _chunkXFYLA3ZOcjs.normalizeTilt; exports.normalizeWetParams = _chunkXFYLA3ZOcjs.normalizeWetParams; exports.packWetParams = _chunkXFYLA3ZOcjs.packWetParams; exports.paintGradientMappingFor = _chunkPQ3H2AANcjs.paintGradientMappingFor; exports.paintPathStroke = _chunkPQ3H2AANcjs.paintPathStroke; exports.paintSourceColor = _chunkPQ3H2AANcjs.paintSourceColor; exports.paintSourceCss = _chunkPQ3H2AANcjs.paintSourceCss; exports.parsePaintSource = _chunkPQ3H2AANcjs.parsePaintSource; exports.pathStrokeCoverage = _chunkPQ3H2AANcjs.pathStrokeCoverage; exports.pathStrokeDabs = _chunkPQ3H2AANcjs.pathStrokeDabs; exports.perDabStrength = _chunk2ONK3ERDcjs.perDabStrength; exports.pigmentColor = _chunkXFYLA3ZOcjs.pigmentColor; exports.pigmentOf = _chunkXFYLA3ZOcjs.pigmentOf; exports.pixelPigment = _chunkXFYLA3ZOcjs.pixelPigment; exports.pointerPressure = _chunkXFYLA3ZOcjs.pointerPressure; exports.pointerStrokeSample = _chunkXFYLA3ZOcjs.pointerStrokeSample; exports.pointerStrokeSamples = _chunkXFYLA3ZOcjs.pointerStrokeSamples; exports.put255 = _chunkPQ3H2AANcjs.put255; exports.rand01 = _chunkPQ3H2AANcjs.rand01; exports.randSigned = _chunkPQ3H2AANcjs.randSigned; exports.rasterizeDab = _chunkPQ3H2AANcjs.rasterizeDab; exports.readPaintSource = _chunkPQ3H2AANcjs.readPaintSource; exports.readSourceRegion = _chunk2ONK3ERDcjs.readSourceRegion; exports.reflectanceToRgb = _chunkOLNIPTB3cjs.reflectanceToRgb; exports.removePaintGradientStop = _chunkPQ3H2AANcjs.removePaintGradientStop; exports.renderBrushstroke = _chunkPQ3H2AANcjs.renderBrushstroke; exports.resolvePaintGradient = _chunkPQ3H2AANcjs.resolvePaintGradient; exports.retouchFilter = _chunk2ONK3ERDcjs.retouchFilter; exports.reversePaintGradient = _chunkPQ3H2AANcjs.reversePaintGradient; exports.rgbToReflectance = _chunkOLNIPTB3cjs.rgbToReflectance; exports.rgbaViewOfGrey = _chunk2ONK3ERDcjs.rgbaViewOfGrey; exports.saturationOf = _chunk2ONK3ERDcjs.saturationOf; exports.scalePaintGradient = _chunkPQ3H2AANcjs.scalePaintGradient; exports.seamlessClone = _chunkBB6TR422cjs.seamlessClone; exports.seedFromString = _chunkPQ3H2AANcjs.seedFromString; exports.setPigmentColor = _chunkOLNIPTB3cjs.setPigmentColor; exports.shadeTile = _chunkXFYLA3ZOcjs.shadeTile; exports.smoothPoints = _chunkPQ3H2AANcjs.smoothPoints; exports.smudgeEffect = _chunk2ONK3ERDcjs.smudgeEffect; exports.solidPaint = _chunkPQ3H2AANcjs.solidPaint; exports.solveMembrane = _chunkBB6TR422cjs.solveMembrane; exports.sponge = _chunk2ONK3ERDcjs.sponge; exports.spongeEffect = _chunk2ONK3ERDcjs.spongeEffect; exports.spotHealPixels = _chunk2ONK3ERDcjs.spotHealPixels; exports.spotHealWindow = _chunk2ONK3ERDcjs.spotHealWindow; exports.srgbByteToLinear = _chunkXFYLA3ZOcjs.srgbByteToLinear; exports.stepSlotTs = _chunkXFYLA3ZOcjs.stepSlotTs; exports.strokeGrainCatch = _chunkPQ3H2AANcjs.strokeGrainCatch; exports.tipFalloff = _chunkPQ3H2AANcjs.tipFalloff; exports.tipReach = _chunkPQ3H2AANcjs.tipReach; exports.tipShape = _chunkPQ3H2AANcjs.tipShape; exports.toneOf = _chunk2ONK3ERDcjs.toneOf; exports.updatePaintGradientStop = _chunkPQ3H2AANcjs.updatePaintGradientStop; exports.walkDabs = _chunkPQ3H2AANcjs.walkDabs; exports.wetGpuSupport = _chunkXFYLA3ZOcjs.wetGpuSupport; exports.wetSimdSupported = _chunkXFYLA3ZOcjs.wetSimdSupported; exports.wetSupport = _chunkXFYLA3ZOcjs.wetSupport;
|
package/dist/paint/index.js
CHANGED
|
@@ -29,7 +29,7 @@ import {
|
|
|
29
29
|
spotHealPixels,
|
|
30
30
|
spotHealWindow,
|
|
31
31
|
toneOf
|
|
32
|
-
} from "../chunk-
|
|
32
|
+
} from "../chunk-4P6H35HU.js";
|
|
33
33
|
import {
|
|
34
34
|
bestOffset,
|
|
35
35
|
contentAwareFill,
|
|
@@ -38,7 +38,7 @@ import {
|
|
|
38
38
|
membraneFill,
|
|
39
39
|
seamlessClone,
|
|
40
40
|
solveMembrane
|
|
41
|
-
} from "../chunk-
|
|
41
|
+
} from "../chunk-VWEWY4FY.js";
|
|
42
42
|
import {
|
|
43
43
|
BODY_SCATTER,
|
|
44
44
|
DEFAULT_FLOW,
|
package/package.json
CHANGED
|
@@ -81,9 +81,7 @@ put every change into one `transform_layer` call (each call resamples). Read
|
|
|
81
81
|
### Smart objects
|
|
82
82
|
|
|
83
83
|
Convert a pixel layer with `convert_to_smart_object` before repeated or uncertain transforms and
|
|
84
|
-
filters
|
|
85
|
-
[references/smart-objects.md](references/smart-objects.md) for the steps (reading, transforming,
|
|
86
|
-
smart filters, linked contents, rasterizing).
|
|
84
|
+
filters, so nothing degrades. Read [references/smart-objects.md](references/smart-objects.md) first.
|
|
87
85
|
|
|
88
86
|
### Shapes and text
|
|
89
87
|
|
|
@@ -390,6 +388,7 @@ in the source frame at the document's bit depth, colour mode and profile. Read
|
|
|
390
388
|
| `stroke_selection` | Edit › Stroke: a band `width` px (≤ 250) `outside` (default), `inside` or `center` on the selection edge, with `color`, `opacity`, `blend`, on a layer's pixels or mask (`channel`). One undo step. Returns the changed `bounds`. |
|
|
391
389
|
| `crop_to_selection` | Set the crop box to the selection's bounds (non-destructive; `reset_crop` undoes it). Returns the `crop`. |
|
|
392
390
|
| `content_aware_fill` | Remove what is selected by synthesising texture from around it on a pixel layer; `output` `new-layer` (keeps the fill separate, recommended), `current` or `duplicate-layer` (a filled copy); `sampleRadius`, `seed` (another seed, another fill); the sampling area with `sampleRects`, `samplingChannelId` and `excludeRects` (never copy from these). Select with a 2–4 px margin. 8-bit only. Returns `layerId` and `bounds`. |
|
|
391
|
+
| `separate_subject` | Split the selected subject from its background in one undo step: a masked subject layer on top, a background plate with the hole (grown by `dilate`, default 8 px) Content-Aware Filled (`fill` `none` leaves it transparent, `seed` repeats a fill), an alpha channel of the filled area, the source hidden. 8-bit pixel layers; cancellable. Returns `foregroundLayerId`, `plateLayerId`, `fillChannelId`, `filledBounds`. |
|
|
393
392
|
| `copy_pixels` | Copy the selected pixels of a layer (or with `merged` the visible image) to the editor clipboard, cropped to the selection with its soft edge. No undo step. Returns `width`, `height`, `x`, `y`. |
|
|
394
393
|
| `cut_pixels` | Copy, then clear the selected pixels (one undo step). Returns the size and position. |
|
|
395
394
|
| `paste_pixels` | Paste the clipboard as a new layer: `mode` `new-layer` (centred on the selection or canvas), `in-place`, `into` (masked by the selection) or `outside` (masked by its inverse). One undo step. Returns `layerId`, `bounds`, `masked`. |
|
|
@@ -157,8 +157,9 @@ This skill is the method. `pixerate-image-editor` has the full tool reference.
|
|
|
157
157
|
- **Outline a cutout:** `select_layer_transparency` on it, then `stroke_selection`
|
|
158
158
|
`location: "outside"` on a new layer below it.
|
|
159
159
|
- **Crop to a subject:** select it, then `crop_to_selection` (non-destructive).
|
|
160
|
-
- **Put a picture into a shape:** select the shape, `copy_pixels` the picture,
|
|
161
|
-
|
|
160
|
+
- **Put a picture into a shape:** select the shape, `copy_pixels` the picture, `paste_pixels` `mode: "into"`.
|
|
161
|
+
- **Move, scale or relight a subject in its own scene:** select it, then `separate_subject`: a masked
|
|
162
|
+
subject layer over a background plate with the hole filled; refill a bad patch from `fillChannelId`.
|
|
162
163
|
- **Picture inside a frame:** mask the picture with the frame's shape, then
|
|
163
164
|
`set_layer_mask_properties` `linked: false` so the picture moves under a fixed mask; link it
|
|
164
165
|
again afterwards.
|
|
@@ -246,9 +247,8 @@ This skill is the method. `pixerate-image-editor` has the full tool reference.
|
|
|
246
247
|
- `add_layer_mask`, `set_layer_mask_properties`, `apply_layer_mask`, `remove_layer_mask`: layer masks
|
|
247
248
|
- `set_smart_filter_mask`: limit smart filters
|
|
248
249
|
- `layer_via_copy`: lift the selection onto a new layer
|
|
249
|
-
- `stroke_selection`: an outline along the selection edge
|
|
250
|
-
- `
|
|
251
|
-
- `content_aware_fill`: remove what is selected
|
|
250
|
+
- `stroke_selection`, `crop_to_selection`: an outline along the selection edge; crop to its bounds
|
|
251
|
+
- `content_aware_fill`, `separate_subject`: remove what is selected; split a subject from a filled background
|
|
252
252
|
- `copy_pixels`, `cut_pixels`, `paste_pixels`: the editor clipboard
|
|
253
253
|
- `add_adjustment_layer`, `apply_effect`, `add_smart_filter`: masked by an active selection
|
|
254
254
|
- `paint_stroke`: paint on a mask with `channel: "mask"`
|