@pixerate/editor 0.108.0 → 0.110.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/animation/index.cjs +5 -5
- package/dist/animation/index.cjs.map +1 -1
- package/dist/animation/index.js +9 -9
- package/dist/animation-editor/index.cjs +59 -59
- package/dist/animation-editor/index.cjs.map +1 -1
- package/dist/animation-editor/index.d.cts +2 -1
- package/dist/animation-editor/index.d.ts +2 -1
- package/dist/animation-editor/index.js +29 -29
- package/dist/blending-DXl06NSx.d.ts +486 -0
- package/dist/blending-aOE6Y3UE.d.cts +486 -0
- package/dist/canvas/index.cjs +27 -27
- package/dist/canvas/index.cjs.map +1 -1
- package/dist/canvas/index.js +11 -11
- package/dist/{chunk-2FGRTYJN.cjs → chunk-477UVMNR.cjs} +3 -3
- package/dist/{chunk-2FGRTYJN.cjs.map → chunk-477UVMNR.cjs.map} +1 -1
- package/dist/chunk-7VOHOPLW.cjs +1136 -0
- package/dist/chunk-7VOHOPLW.cjs.map +1 -0
- package/dist/{chunk-HUQ7EHVI.js → chunk-BLWCAQCW.js} +723 -1975
- package/dist/chunk-BLWCAQCW.js.map +1 -0
- package/dist/{chunk-SOROZ2BF.js → chunk-DMRSJBJF.js} +1939 -318
- package/dist/chunk-DMRSJBJF.js.map +1 -0
- package/dist/chunk-FTBZPI77.cjs +1 -0
- package/dist/chunk-FTBZPI77.cjs.map +1 -0
- package/dist/{chunk-WMBIJCHA.js → chunk-HNS7UHCM.js} +5 -1
- package/dist/{chunk-WMBIJCHA.js.map → chunk-HNS7UHCM.js.map} +1 -1
- package/dist/chunk-JLYX4V57.cjs +2001 -0
- package/dist/chunk-JLYX4V57.cjs.map +1 -0
- package/dist/chunk-KB2YBCVS.js +2001 -0
- package/dist/chunk-KB2YBCVS.js.map +1 -0
- package/dist/{chunk-G4BIYE6R.js → chunk-LQEEDHOP.js} +40 -2
- package/dist/chunk-LQEEDHOP.js.map +1 -0
- package/dist/{chunk-FRD3FUXI.cjs → chunk-MGL4U5WA.cjs} +2144 -523
- package/dist/chunk-MGL4U5WA.cjs.map +1 -0
- package/dist/{chunk-T3QZ6S47.cjs → chunk-POGBUYWE.cjs} +131 -93
- package/dist/chunk-POGBUYWE.cjs.map +1 -0
- package/dist/chunk-VKK5VS2T.js +1 -0
- package/dist/{chunk-UTEVPQTS.cjs → chunk-W3GXSUSQ.cjs} +746 -1998
- package/dist/chunk-W3GXSUSQ.cjs.map +1 -0
- package/dist/{chunk-SZ6KMZNM.cjs → chunk-XIOMMGPD.cjs} +6 -2
- package/dist/chunk-XIOMMGPD.cjs.map +1 -0
- package/dist/{chunk-JK6M6V7G.js → chunk-Z3YWVUWT.js} +4 -4
- package/dist/{chunk-3PHA3UKI.js → chunk-Z4BC6M74.js} +523 -121
- package/dist/chunk-Z4BC6M74.js.map +1 -0
- package/dist/{export-a9bnF7Cl.d.ts → export-CO2ryu3I.d.ts} +419 -18
- package/dist/{export-JGWQEPJn.d.cts → export-DRiLzP_j.d.cts} +419 -18
- package/dist/image-editor/index.cjs +1665 -1113
- package/dist/image-editor/index.cjs.map +1 -1
- package/dist/image-editor/index.d.cts +78 -14
- package/dist/image-editor/index.d.ts +78 -14
- package/dist/image-editor/index.js +843 -291
- package/dist/image-editor/index.js.map +1 -1
- package/dist/paint/index.cjs +28 -4
- package/dist/paint/index.cjs.map +1 -1
- package/dist/paint/index.d.cts +3 -89
- package/dist/paint/index.d.ts +3 -89
- package/dist/paint/index.js +27 -3
- package/dist/paint-editor/index.cjs +1056 -287
- package/dist/paint-editor/index.cjs.map +1 -1
- package/dist/paint-editor/index.d.cts +304 -22
- package/dist/paint-editor/index.d.ts +304 -22
- package/dist/paint-editor/index.js +852 -83
- package/dist/paint-editor/index.js.map +1 -1
- package/dist/raster/index.cjs +7 -3
- package/dist/raster/index.cjs.map +1 -1
- package/dist/raster/index.d.cts +3 -129
- package/dist/raster/index.d.ts +3 -129
- package/dist/raster/index.js +6 -2
- package/dist/{compositor-D92URMlm.d.cts → render-BEriFuqK.d.cts} +136 -2
- package/dist/{compositor-Kt_M4ruo.d.ts → render-tjzKaik-.d.ts} +136 -2
- package/dist/{surface-CkKOHGPm.d.cts → surface-C8RRg_Bh.d.cts} +109 -1
- package/dist/{surface-CkKOHGPm.d.ts → surface-C8RRg_Bh.d.ts} +109 -1
- package/dist/{svg-SseJTIrA.d.ts → svg-D_cfkhlB.d.cts} +3 -629
- package/dist/{svg-ClVIG4T7.d.cts → svg-wIaKLrU0.d.ts} +3 -629
- package/dist/types-DtL_qLFz.d.ts +630 -0
- package/dist/types-DyQq-WPY.d.cts +630 -0
- package/dist/vector/index.cjs +563 -563
- package/dist/vector/index.cjs.map +1 -1
- package/dist/vector/index.d.cts +4 -2
- package/dist/vector/index.d.ts +4 -2
- package/dist/vector/index.js +69 -69
- package/dist/video-editor/index.cjs +3 -3
- package/dist/video-editor/index.js +2 -2
- package/package.json +1 -1
- package/skills/pixerate-paint-editor/SKILL.md +49 -13
- package/dist/chunk-3PHA3UKI.js.map +0 -1
- package/dist/chunk-6BU5WU4R.cjs +0 -1
- package/dist/chunk-6BU5WU4R.cjs.map +0 -1
- package/dist/chunk-DWGZUSES.cjs +0 -694
- package/dist/chunk-DWGZUSES.cjs.map +0 -1
- package/dist/chunk-FRD3FUXI.cjs.map +0 -1
- package/dist/chunk-G4BIYE6R.js.map +0 -1
- package/dist/chunk-HUFQD4CB.cjs +0 -734
- package/dist/chunk-HUFQD4CB.cjs.map +0 -1
- package/dist/chunk-HUQ7EHVI.js.map +0 -1
- package/dist/chunk-KKREERP2.js +0 -694
- package/dist/chunk-KKREERP2.js.map +0 -1
- package/dist/chunk-SOROZ2BF.js.map +0 -1
- package/dist/chunk-SZ6KMZNM.cjs.map +0 -1
- package/dist/chunk-T3QZ6S47.cjs.map +0 -1
- package/dist/chunk-UTEVPQTS.cjs.map +0 -1
- package/dist/chunk-XYBJKUAU.js +0 -1
- package/dist/mixer-5ziHU8OS.d.cts +0 -282
- package/dist/mixer-DNqiYXYQ.d.ts +0 -282
- /package/dist/{chunk-XYBJKUAU.js.map → chunk-VKK5VS2T.js.map} +0 -0
- /package/dist/{chunk-JK6M6V7G.js.map → chunk-Z3YWVUWT.js.map} +0 -0
package/dist/vector/index.d.cts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export {
|
|
1
|
+
import { n as Vec2$1, v as VectorSubpath, h as VectorBounds, y as VectorAnchor, w as VectorDocument, e as VectorNode, b as VectorPathNode, z as VectorAnchorType, r as VectorPaint, g as VectorGroupNode, A as VectorCornerKind, x as VectorWidthPoint, m as VectorGradient, t as VectorGradientStop, B as VectorViewport, C as VectorTransformHandle, D as VectorAnchorRef, E as VectorPathfinderOperation, F as VectorTool, G as VectorDefaults, H as VectorStyle, I as VectorHandleRef, J as VectorSegmentRef, K as VectorBlendOptions, L as VectorModifiers, M as VectorBlendMode, j as VectorFilterType, V as VectorEffectType, N as VectorAlign, O as VectorDistribute, P as VectorArrange, d as VectorBooleanOperation, Q as VectorMaskType, R as VectorMask, S as VectorAverageAxis, i as VectorWarpMesh, c as VectorFillRule, T as VectorArrowhead, U as VectorBlendSpacing, W as VectorGradientInterpolation, p as VectorGradientSpread, q as VectorGradientType, u as VectorStrokeAlign, X as VectorStrokeGradientMode, Y as VectorArrowAlign, f as VectorEffect, Z as VectorPaintLayer, _ as VectorStrokeLayer, l as VectorFilter, $ as VectorBlend, a0 as VectorMergeMode, a1 as VectorLineJoin, a as VectorEffectParamsMap, a2 as VectorStrokeSettings } from '../types-DyQq-WPY.cjs';
|
|
2
|
+
export { a3 as VECTOR_ARROWHEADS, a4 as VECTOR_BLEND_MODES, a5 as VECTOR_BLEND_SPACINGS, a6 as VECTOR_CORNER_KINDS, a7 as VECTOR_EFFECT_TYPES, a8 as VECTOR_FILTER_TYPES, a9 as VECTOR_GRADIENT_INTERPOLATIONS, aa as VECTOR_GRADIENT_SPREADS, ab as VECTOR_GRADIENT_TYPES, ac as VECTOR_MASK_TYPES, ad as VECTOR_MERGE_MODES, ae as VECTOR_PATHFINDER_OPERATIONS, af as VECTOR_STROKE_GRADIENT_MODES, ag as VECTOR_TOOLS, ah as VECTOR_TRANSFORM_HANDLES, ai as VectorCorner, k as VectorFilterParamsMap, o as VectorGradientUnits, aj as VectorLineCap, s as VectorMatrix, ak as VectorStrokeLayerKind, al as VectorWarpStyle } from '../types-DyQq-WPY.cjs';
|
|
3
3
|
import { P as Point } from '../types-BFkYA4eF.cjs';
|
|
4
4
|
import { a as BezierPathInput, A as AffineMatrix$1, B as BezierPath, c as BezierSegment } from '../bezier-BfwIbVTl.cjs';
|
|
5
5
|
export { S as SvgGradientDef } from '../bezier-BfwIbVTl.cjs';
|
|
6
|
+
import { a as VectorGradientHandle, V as VectorSvgExportOptions, b as VectorGradientPatch, c as VectorEnvelopeParams, d as VectorRenderFilter, e as VectorAppearanceShape, f as VectorFilterParamSpec, g as VectorEffectParamSpec, h as VectorRenderStrokeParts, i as VectorPaintDef } from '../svg-D_cfkhlB.cjs';
|
|
7
|
+
export { j as VECTOR_EFFECT_DEFAULTS, k as VECTOR_EFFECT_LABELS, l as VECTOR_EFFECT_PARAM_SPECS, m as VECTOR_FILTER_DEFAULTS, n as VECTOR_FILTER_LABELS, o as VECTOR_FILTER_MENU, p as VECTOR_FILTER_PARAM_SPECS, q as VECTOR_GRADIENT_MAX_PERIODS, r as VECTOR_GRADIENT_MIN_STOPS, s as VectorBooleanOperand, t as VectorFilterPrimitive, u as VectorGradientPoints, v as VectorGradientRamp, w as VectorGradientSvgOptions, x as VectorPaintSvgOptions, y as VectorRgba, z as VectorSvgImportOptions, A as VectorSvgPatternDef, B as VectorSvgWrapper, C as activeVectorEffects, D as activeVectorFilters, E as applyVectorCornersAttribute, F as applyVectorEffects, G as applyVectorGradientPatch, H as applyVectorGradientSpread, I as clearVectorLiveBooleanCache, J as convertVectorGradient, K as createVectorEffect, L as createVectorFilter, M as defaultVectorGradient, N as expandVectorAppearance, O as expandVectorAppearances, P as expandVectorGradientSpread, Q as expandVectorGradientStops, R as explicitVectorGradient, S as foldVectorBooleanOperands, T as gradientMidpointRemap, U as hasExplicitGradientGeometry, W as hasOwnVectorAppearance, X as hasVectorAppearance, Y as insertVectorGradientStop, Z as isCentredVectorGradient, _ as isVectorFilterType, $ as isVectorGradient, a0 as isVectorLiveBoolean, a1 as mapVectorGradient, a2 as mapVectorPaint, a3 as moveVectorGradientHandle, a4 as moveVectorGradientStop, a5 as normalizeVectorEffectParams, a6 as normalizeVectorFilterParams, a7 as parseSvgTransform, a8 as parseVectorColor, a9 as parseVectorSvg, aa as patternAttrs, ab as periodicVectorGradientStops, ac as pinVectorGradient, ad as removeVectorGradientStop, ae as reverseVectorGradient, af as samplePlainStops, ag as sampleVectorGradient, ah as sampleVectorGradientAt, ai as sampleVectorPaintDefAt, aj as sanitizeVectorEffects, ak as sanitizeVectorFilters, al as sanitizeVectorGradient, am as setVectorGradientVector, an as sortedVectorGradientStops, ao as spanVectorGradientStops, ap as transformVectorEffects, aq as transformVectorGradient, ar as transformVectorPaint, as as vectorAppearanceNodes, at as vectorAppearanceOutline, au as vectorAppearanceShapes, av as vectorBoxMatrix, aw as vectorChildAppearanceShapes, ax as vectorCornersAttribute, ay as vectorDocumentToSvg, az as vectorEffectInputBounds, aA as vectorEffectInputPaths, aB as vectorEnteredGroups, aC as vectorEnvelopeFrame, aD as vectorEnvelopeMap, aE as vectorEnvelopeMesh, aF as vectorFilterMarkup, aG as vectorFilterParamKeys, aH as vectorFilterReach, aI as vectorFilterSvg, aJ as vectorGradientArea, aK as vectorGradientAspect, aL as vectorGradientFocalParam, aM as vectorGradientHandles, aN as vectorGradientMatrix, aO as vectorGradientMidpointFromPosition, aP as vectorGradientMidpointPosition, aQ as vectorGradientNeedsExpansion, aR as vectorGradientParam, aS as vectorGradientPoints, aT as vectorGradientRamp, aU as vectorGradientSvgDefs, aV as vectorGradientTAt, aW as vectorGradientUnitsMatrix, aX as vectorLiveBooleanSteps, aY as vectorNodeEnvelope, aZ as vectorNodeFilterSvg, a_ as vectorNodeLocalPaintBounds, a$ as vectorOperandOperation, b0 as vectorPaintToSvg, b1 as vectorPathLocalBounds, b2 as vectorStrokeSvgParts, b3 as widthProfileFromAttribute, b4 as widthProfileToAttribute } from '../svg-D_cfkhlB.cjs';
|
|
6
8
|
import { H as HistoryManager } from '../HistoryManager-DeQQMBCj.cjs';
|
|
7
9
|
import { C as CommandSpec } from '../registry-CaR7LC6W.cjs';
|
|
8
10
|
import { S as StrokeJoin, a as StrokeCap, P as PlanarMap, b as PathfinderOperation, c as PathfinderShape } from '../pathfinder-BZL8aSu0.cjs';
|
package/dist/vector/index.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export {
|
|
1
|
+
import { n as Vec2$1, v as VectorSubpath, h as VectorBounds, y as VectorAnchor, w as VectorDocument, e as VectorNode, b as VectorPathNode, z as VectorAnchorType, r as VectorPaint, g as VectorGroupNode, A as VectorCornerKind, x as VectorWidthPoint, m as VectorGradient, t as VectorGradientStop, B as VectorViewport, C as VectorTransformHandle, D as VectorAnchorRef, E as VectorPathfinderOperation, F as VectorTool, G as VectorDefaults, H as VectorStyle, I as VectorHandleRef, J as VectorSegmentRef, K as VectorBlendOptions, L as VectorModifiers, M as VectorBlendMode, j as VectorFilterType, V as VectorEffectType, N as VectorAlign, O as VectorDistribute, P as VectorArrange, d as VectorBooleanOperation, Q as VectorMaskType, R as VectorMask, S as VectorAverageAxis, i as VectorWarpMesh, c as VectorFillRule, T as VectorArrowhead, U as VectorBlendSpacing, W as VectorGradientInterpolation, p as VectorGradientSpread, q as VectorGradientType, u as VectorStrokeAlign, X as VectorStrokeGradientMode, Y as VectorArrowAlign, f as VectorEffect, Z as VectorPaintLayer, _ as VectorStrokeLayer, l as VectorFilter, $ as VectorBlend, a0 as VectorMergeMode, a1 as VectorLineJoin, a as VectorEffectParamsMap, a2 as VectorStrokeSettings } from '../types-DtL_qLFz.js';
|
|
2
|
+
export { a3 as VECTOR_ARROWHEADS, a4 as VECTOR_BLEND_MODES, a5 as VECTOR_BLEND_SPACINGS, a6 as VECTOR_CORNER_KINDS, a7 as VECTOR_EFFECT_TYPES, a8 as VECTOR_FILTER_TYPES, a9 as VECTOR_GRADIENT_INTERPOLATIONS, aa as VECTOR_GRADIENT_SPREADS, ab as VECTOR_GRADIENT_TYPES, ac as VECTOR_MASK_TYPES, ad as VECTOR_MERGE_MODES, ae as VECTOR_PATHFINDER_OPERATIONS, af as VECTOR_STROKE_GRADIENT_MODES, ag as VECTOR_TOOLS, ah as VECTOR_TRANSFORM_HANDLES, ai as VectorCorner, k as VectorFilterParamsMap, o as VectorGradientUnits, aj as VectorLineCap, s as VectorMatrix, ak as VectorStrokeLayerKind, al as VectorWarpStyle } from '../types-DtL_qLFz.js';
|
|
3
3
|
import { P as Point } from '../types-BFkYA4eF.js';
|
|
4
4
|
import { a as BezierPathInput, A as AffineMatrix$1, B as BezierPath, c as BezierSegment } from '../bezier-DYBvLgUH.js';
|
|
5
5
|
export { S as SvgGradientDef } from '../bezier-DYBvLgUH.js';
|
|
6
|
+
import { a as VectorGradientHandle, V as VectorSvgExportOptions, b as VectorGradientPatch, c as VectorEnvelopeParams, d as VectorRenderFilter, e as VectorAppearanceShape, f as VectorFilterParamSpec, g as VectorEffectParamSpec, h as VectorRenderStrokeParts, i as VectorPaintDef } from '../svg-wIaKLrU0.js';
|
|
7
|
+
export { j as VECTOR_EFFECT_DEFAULTS, k as VECTOR_EFFECT_LABELS, l as VECTOR_EFFECT_PARAM_SPECS, m as VECTOR_FILTER_DEFAULTS, n as VECTOR_FILTER_LABELS, o as VECTOR_FILTER_MENU, p as VECTOR_FILTER_PARAM_SPECS, q as VECTOR_GRADIENT_MAX_PERIODS, r as VECTOR_GRADIENT_MIN_STOPS, s as VectorBooleanOperand, t as VectorFilterPrimitive, u as VectorGradientPoints, v as VectorGradientRamp, w as VectorGradientSvgOptions, x as VectorPaintSvgOptions, y as VectorRgba, z as VectorSvgImportOptions, A as VectorSvgPatternDef, B as VectorSvgWrapper, C as activeVectorEffects, D as activeVectorFilters, E as applyVectorCornersAttribute, F as applyVectorEffects, G as applyVectorGradientPatch, H as applyVectorGradientSpread, I as clearVectorLiveBooleanCache, J as convertVectorGradient, K as createVectorEffect, L as createVectorFilter, M as defaultVectorGradient, N as expandVectorAppearance, O as expandVectorAppearances, P as expandVectorGradientSpread, Q as expandVectorGradientStops, R as explicitVectorGradient, S as foldVectorBooleanOperands, T as gradientMidpointRemap, U as hasExplicitGradientGeometry, W as hasOwnVectorAppearance, X as hasVectorAppearance, Y as insertVectorGradientStop, Z as isCentredVectorGradient, _ as isVectorFilterType, $ as isVectorGradient, a0 as isVectorLiveBoolean, a1 as mapVectorGradient, a2 as mapVectorPaint, a3 as moveVectorGradientHandle, a4 as moveVectorGradientStop, a5 as normalizeVectorEffectParams, a6 as normalizeVectorFilterParams, a7 as parseSvgTransform, a8 as parseVectorColor, a9 as parseVectorSvg, aa as patternAttrs, ab as periodicVectorGradientStops, ac as pinVectorGradient, ad as removeVectorGradientStop, ae as reverseVectorGradient, af as samplePlainStops, ag as sampleVectorGradient, ah as sampleVectorGradientAt, ai as sampleVectorPaintDefAt, aj as sanitizeVectorEffects, ak as sanitizeVectorFilters, al as sanitizeVectorGradient, am as setVectorGradientVector, an as sortedVectorGradientStops, ao as spanVectorGradientStops, ap as transformVectorEffects, aq as transformVectorGradient, ar as transformVectorPaint, as as vectorAppearanceNodes, at as vectorAppearanceOutline, au as vectorAppearanceShapes, av as vectorBoxMatrix, aw as vectorChildAppearanceShapes, ax as vectorCornersAttribute, ay as vectorDocumentToSvg, az as vectorEffectInputBounds, aA as vectorEffectInputPaths, aB as vectorEnteredGroups, aC as vectorEnvelopeFrame, aD as vectorEnvelopeMap, aE as vectorEnvelopeMesh, aF as vectorFilterMarkup, aG as vectorFilterParamKeys, aH as vectorFilterReach, aI as vectorFilterSvg, aJ as vectorGradientArea, aK as vectorGradientAspect, aL as vectorGradientFocalParam, aM as vectorGradientHandles, aN as vectorGradientMatrix, aO as vectorGradientMidpointFromPosition, aP as vectorGradientMidpointPosition, aQ as vectorGradientNeedsExpansion, aR as vectorGradientParam, aS as vectorGradientPoints, aT as vectorGradientRamp, aU as vectorGradientSvgDefs, aV as vectorGradientTAt, aW as vectorGradientUnitsMatrix, aX as vectorLiveBooleanSteps, aY as vectorNodeEnvelope, aZ as vectorNodeFilterSvg, a_ as vectorNodeLocalPaintBounds, a$ as vectorOperandOperation, b0 as vectorPaintToSvg, b1 as vectorPathLocalBounds, b2 as vectorStrokeSvgParts, b3 as widthProfileFromAttribute, b4 as widthProfileToAttribute } from '../svg-wIaKLrU0.js';
|
|
6
8
|
import { H as HistoryManager } from '../HistoryManager-DWSLd6Tf.js';
|
|
7
9
|
import { C as CommandSpec } from '../registry-rVtFJjRM.js';
|
|
8
10
|
import { S as StrokeJoin, a as StrokeCap, P as PlanarMap, b as PathfinderOperation, c as PathfinderShape } from '../pathfinder-CNtsbCRK.js';
|
package/dist/vector/index.js
CHANGED
|
@@ -12,6 +12,39 @@ import {
|
|
|
12
12
|
solve8
|
|
13
13
|
} from "../chunk-GX332W2C.js";
|
|
14
14
|
import {
|
|
15
|
+
applyVectorCornersAttribute,
|
|
16
|
+
correspondMorphContours,
|
|
17
|
+
createVectorMorph,
|
|
18
|
+
evaluateVectorPathKeyframes,
|
|
19
|
+
interpolateMorphContours,
|
|
20
|
+
interpolateRigidMatrix,
|
|
21
|
+
interpolateVectorColor,
|
|
22
|
+
interpolateVectorPaint,
|
|
23
|
+
interpolateVectorPaths,
|
|
24
|
+
interpolateVectorStyle,
|
|
25
|
+
interpolateWidthProfiles,
|
|
26
|
+
morphContourToSubpath,
|
|
27
|
+
morphPathsCross,
|
|
28
|
+
parseSvgTransform,
|
|
29
|
+
parseVectorSvg,
|
|
30
|
+
refineMorphContour,
|
|
31
|
+
resampleGradientStops,
|
|
32
|
+
reverseMorphContour,
|
|
33
|
+
subpathToMorphContour,
|
|
34
|
+
turnMorphContour,
|
|
35
|
+
vectorCornersAttribute,
|
|
36
|
+
vectorDocumentToSvg,
|
|
37
|
+
vectorNodeFilterSvg,
|
|
38
|
+
vectorNodeLocalPaintBounds,
|
|
39
|
+
vectorPaintToSvg,
|
|
40
|
+
vectorPathLocalBounds,
|
|
41
|
+
vectorStrokeGradientDefs,
|
|
42
|
+
vectorStrokeSvgParts,
|
|
43
|
+
widthProfileFromAttribute,
|
|
44
|
+
widthProfileToAttribute
|
|
45
|
+
} from "../chunk-KB2YBCVS.js";
|
|
46
|
+
import {
|
|
47
|
+
IDENTITY_MATRIX,
|
|
15
48
|
KAPPA,
|
|
16
49
|
VECTOR_ARROWHEADS,
|
|
17
50
|
VECTOR_BLEND_MODES,
|
|
@@ -45,9 +78,12 @@ import {
|
|
|
45
78
|
VECTOR_WIDTH_PROFILE_MAX_POINTS,
|
|
46
79
|
VECTOR_WIDTH_PROFILE_MAX_SCALE,
|
|
47
80
|
VECTOR_WIDTH_SAME_T,
|
|
81
|
+
WARP_STYLES,
|
|
82
|
+
WARP_STYLE_LABELS,
|
|
48
83
|
activeVectorEffects,
|
|
49
84
|
activeVectorFilters,
|
|
50
|
-
|
|
85
|
+
applyMatrix,
|
|
86
|
+
applyMatrixLinear,
|
|
51
87
|
applyVectorEffects,
|
|
52
88
|
applyVectorGradientPatch,
|
|
53
89
|
applyVectorGradientSpread,
|
|
@@ -68,12 +104,12 @@ import {
|
|
|
68
104
|
cornerBisectorPoint,
|
|
69
105
|
cornerRadiusChange,
|
|
70
106
|
cornerSetback,
|
|
71
|
-
correspondMorphContours,
|
|
72
107
|
createVectorEffect,
|
|
73
108
|
createVectorFilter,
|
|
74
|
-
createVectorMorph,
|
|
75
109
|
dashIntervals,
|
|
110
|
+
decomposeRigid,
|
|
76
111
|
defaultVectorGradient,
|
|
112
|
+
dragWarpMeshPoint,
|
|
77
113
|
effectPathLength,
|
|
78
114
|
effectPathVertexCount,
|
|
79
115
|
effectiveStrokeAlign,
|
|
@@ -81,7 +117,7 @@ import {
|
|
|
81
117
|
eraseFromFill,
|
|
82
118
|
eraseFromOutline,
|
|
83
119
|
eraserRegion,
|
|
84
|
-
|
|
120
|
+
evalWarpMesh,
|
|
85
121
|
expandVectorAppearance,
|
|
86
122
|
expandVectorAppearances,
|
|
87
123
|
expandVectorCorners,
|
|
@@ -91,6 +127,7 @@ import {
|
|
|
91
127
|
explicitVectorGradient,
|
|
92
128
|
findVectorNode,
|
|
93
129
|
fitCornerRadius,
|
|
130
|
+
fitWarpMesh,
|
|
94
131
|
foldVectorBooleanOperands,
|
|
95
132
|
generateWidthProfile,
|
|
96
133
|
gradientMidpointRemap,
|
|
@@ -106,22 +143,19 @@ import {
|
|
|
106
143
|
hitTestVectorPaintLayer,
|
|
107
144
|
hitTestVectorPaintStack,
|
|
108
145
|
hitTestVectorStroke,
|
|
146
|
+
identityWarpMesh,
|
|
109
147
|
inferAnchorType,
|
|
110
148
|
insertAnchor,
|
|
111
149
|
insertVectorGradientStop,
|
|
112
150
|
insertWidthPoint,
|
|
113
|
-
|
|
114
|
-
interpolateRigidMatrix,
|
|
115
|
-
interpolateVectorColor,
|
|
116
|
-
interpolateVectorPaint,
|
|
117
|
-
interpolateVectorPaths,
|
|
118
|
-
interpolateVectorStyle,
|
|
119
|
-
interpolateWidthProfiles,
|
|
151
|
+
invertMatrix,
|
|
120
152
|
isCentredVectorGradient,
|
|
121
153
|
isClosedBezierShape,
|
|
122
154
|
isDrawnVectorPaintLayer,
|
|
155
|
+
isIdentityMatrix,
|
|
123
156
|
isPlainVectorPaintLayer,
|
|
124
157
|
isUniformWidthProfile,
|
|
158
|
+
isValidWarpMesh,
|
|
125
159
|
isVectorBlendMode,
|
|
126
160
|
isVectorFilterType,
|
|
127
161
|
isVectorGradient,
|
|
@@ -137,13 +171,15 @@ import {
|
|
|
137
171
|
mapVectorPaint,
|
|
138
172
|
mapVectorPoints,
|
|
139
173
|
mapVectorSubpaths,
|
|
174
|
+
mapWarpMeshPoints,
|
|
175
|
+
matrixAbout,
|
|
176
|
+
matrixRotation,
|
|
140
177
|
mergePaths,
|
|
141
178
|
mirrorWidthProfile,
|
|
142
|
-
morphContourToSubpath,
|
|
143
|
-
morphPathsCross,
|
|
144
179
|
moveAnchorHandle,
|
|
145
180
|
moveVectorGradientHandle,
|
|
146
181
|
moveVectorGradientStop,
|
|
182
|
+
multiplyMatrices,
|
|
147
183
|
nearestSegment,
|
|
148
184
|
nearestStrokePosition,
|
|
149
185
|
needsVectorPaintLayers,
|
|
@@ -154,9 +190,7 @@ import {
|
|
|
154
190
|
normalizeVectorFilterParams,
|
|
155
191
|
normalizeVectorPaintStacks,
|
|
156
192
|
offsetPaths,
|
|
157
|
-
parseSvgTransform,
|
|
158
193
|
parseVectorColor,
|
|
159
|
-
parseVectorSvg,
|
|
160
194
|
pathsCenter,
|
|
161
195
|
patternAttrs,
|
|
162
196
|
periodicVectorGradientStops,
|
|
@@ -165,17 +199,19 @@ import {
|
|
|
165
199
|
polylineBounds,
|
|
166
200
|
pressureWidthProfile,
|
|
167
201
|
puckerBloatPaths,
|
|
202
|
+
pullWarpMesh,
|
|
168
203
|
rectSubpath,
|
|
169
|
-
refineMorphContour,
|
|
170
204
|
removeAnchors,
|
|
171
205
|
removeVectorGradientStop,
|
|
206
|
+
removeWarpMeshSplitU,
|
|
207
|
+
removeWarpMeshSplitV,
|
|
172
208
|
removeWidthPoints,
|
|
173
209
|
repeatPaths,
|
|
174
|
-
|
|
175
|
-
reverseMorphContour,
|
|
210
|
+
resizeWarpMesh,
|
|
176
211
|
reverseSubpath,
|
|
177
212
|
reverseVectorGradient,
|
|
178
213
|
reverseWidthProfile,
|
|
214
|
+
rotateMatrix,
|
|
179
215
|
roundCornerPaths,
|
|
180
216
|
roundSubpaths,
|
|
181
217
|
samplePlainStops,
|
|
@@ -190,20 +226,23 @@ import {
|
|
|
190
226
|
sanitizeVectorStrokeSettings,
|
|
191
227
|
sanitizeVectorStrokes,
|
|
192
228
|
sanitizeWidthProfile,
|
|
229
|
+
scaleMatrix,
|
|
193
230
|
setAnchorCorner,
|
|
194
231
|
setSubpathCorners,
|
|
195
232
|
setVectorGradientVector,
|
|
196
233
|
setWidthPoint,
|
|
197
234
|
simplifyPolyline,
|
|
235
|
+
skewMatrix,
|
|
198
236
|
sortedVectorGradientStops,
|
|
199
237
|
spanVectorGradientStops,
|
|
200
238
|
splitIntoFaces,
|
|
239
|
+
splitWarpMeshU,
|
|
240
|
+
splitWarpMeshV,
|
|
201
241
|
starSubpath,
|
|
202
242
|
strokePositionPoint,
|
|
203
243
|
strokeWidthProfileOf,
|
|
204
244
|
subpathSegment,
|
|
205
245
|
subpathSegmentCount,
|
|
206
|
-
subpathToMorphContour,
|
|
207
246
|
subpathsToBezier,
|
|
208
247
|
taperWaveFactor,
|
|
209
248
|
transformVectorEffects,
|
|
@@ -211,10 +250,10 @@ import {
|
|
|
211
250
|
transformVectorNode,
|
|
212
251
|
transformVectorPaint,
|
|
213
252
|
translateAnchor,
|
|
253
|
+
translateMatrix,
|
|
214
254
|
trimIntervals,
|
|
215
255
|
trimPaths,
|
|
216
256
|
trimPathsIndividually,
|
|
217
|
-
turnMorphContour,
|
|
218
257
|
twistPaths,
|
|
219
258
|
unionBounds,
|
|
220
259
|
variableStrokeOutline,
|
|
@@ -228,8 +267,6 @@ import {
|
|
|
228
267
|
vectorChildAppearanceShapes,
|
|
229
268
|
vectorCornerAt,
|
|
230
269
|
vectorCorners,
|
|
231
|
-
vectorCornersAttribute,
|
|
232
|
-
vectorDocumentToSvg,
|
|
233
270
|
vectorEffectInputBounds,
|
|
234
271
|
vectorEffectInputPaths,
|
|
235
272
|
vectorEnteredGroups,
|
|
@@ -273,20 +310,15 @@ import {
|
|
|
273
310
|
vectorMeshOutline,
|
|
274
311
|
vectorNodeBounds,
|
|
275
312
|
vectorNodeEnvelope,
|
|
276
|
-
vectorNodeFilterSvg,
|
|
277
|
-
vectorNodeLocalPaintBounds,
|
|
278
313
|
vectorNodeRotation,
|
|
279
314
|
vectorNodeToBezier,
|
|
280
315
|
vectorOperandOperation,
|
|
281
316
|
vectorPaintLayerNodes,
|
|
282
|
-
vectorPaintToSvg,
|
|
283
317
|
vectorParentMatrix,
|
|
284
318
|
vectorPathData,
|
|
285
|
-
vectorPathLocalBounds,
|
|
286
319
|
vectorPathWorldBezier,
|
|
287
320
|
vectorRepeaterCopies,
|
|
288
321
|
vectorStacksHaveGradient,
|
|
289
|
-
vectorStrokeGradientDefs,
|
|
290
322
|
vectorStrokeLineArea,
|
|
291
323
|
vectorStrokeOutline,
|
|
292
324
|
vectorStrokeOutlinePath,
|
|
@@ -294,23 +326,28 @@ import {
|
|
|
294
326
|
vectorStrokeReach,
|
|
295
327
|
vectorStrokeSettings,
|
|
296
328
|
vectorStrokeStackReach,
|
|
297
|
-
vectorStrokeSvgParts,
|
|
298
329
|
vectorStrokes,
|
|
299
330
|
vectorTargetPaint,
|
|
300
331
|
vectorWorldMatrix,
|
|
301
332
|
walkVectorNodes,
|
|
333
|
+
warpMeshColumns,
|
|
334
|
+
warpMeshControlBounds,
|
|
335
|
+
warpMeshEditPoints,
|
|
336
|
+
warpMeshGridCurves,
|
|
337
|
+
warpMeshParamAt,
|
|
338
|
+
warpMeshRows,
|
|
339
|
+
warpPresetGrid,
|
|
340
|
+
warpPresetMesh,
|
|
302
341
|
widthProfileAt,
|
|
303
|
-
widthProfileFromAttribute,
|
|
304
342
|
widthProfileMaxScale,
|
|
305
343
|
widthProfilePreset,
|
|
306
344
|
widthProfilePresetId,
|
|
307
|
-
widthProfileToAttribute,
|
|
308
345
|
wigglePaths,
|
|
309
346
|
withVectorFills,
|
|
310
347
|
withVectorStrokes,
|
|
311
348
|
withVectorTargetPaint,
|
|
312
349
|
zigzagPaths
|
|
313
|
-
} from "../chunk-
|
|
350
|
+
} from "../chunk-BLWCAQCW.js";
|
|
314
351
|
import {
|
|
315
352
|
bezierPathBounds,
|
|
316
353
|
bezierPathToSvg,
|
|
@@ -329,51 +366,14 @@ import {
|
|
|
329
366
|
segmentTangent,
|
|
330
367
|
transformBezierPath
|
|
331
368
|
} from "../chunk-YCSFS3GK.js";
|
|
332
|
-
import {
|
|
333
|
-
IDENTITY_MATRIX,
|
|
334
|
-
WARP_STYLES,
|
|
335
|
-
WARP_STYLE_LABELS,
|
|
336
|
-
applyMatrix,
|
|
337
|
-
applyMatrixLinear,
|
|
338
|
-
decomposeRigid,
|
|
339
|
-
dragWarpMeshPoint,
|
|
340
|
-
evalWarpMesh,
|
|
341
|
-
fitWarpMesh,
|
|
342
|
-
identityWarpMesh,
|
|
343
|
-
invertMatrix,
|
|
344
|
-
isIdentityMatrix,
|
|
345
|
-
isValidWarpMesh,
|
|
346
|
-
mapWarpMeshPoints,
|
|
347
|
-
matrixAbout,
|
|
348
|
-
matrixRotation,
|
|
349
|
-
multiplyMatrices,
|
|
350
|
-
pullWarpMesh,
|
|
351
|
-
removeWarpMeshSplitU,
|
|
352
|
-
removeWarpMeshSplitV,
|
|
353
|
-
resizeWarpMesh,
|
|
354
|
-
rotateMatrix,
|
|
355
|
-
scaleMatrix,
|
|
356
|
-
skewMatrix,
|
|
357
|
-
splitWarpMeshU,
|
|
358
|
-
splitWarpMeshV,
|
|
359
|
-
translateMatrix,
|
|
360
|
-
warpMeshColumns,
|
|
361
|
-
warpMeshControlBounds,
|
|
362
|
-
warpMeshEditPoints,
|
|
363
|
-
warpMeshGridCurves,
|
|
364
|
-
warpMeshParamAt,
|
|
365
|
-
warpMeshRows,
|
|
366
|
-
warpPresetGrid,
|
|
367
|
-
warpPresetMesh
|
|
368
|
-
} from "../chunk-KKREERP2.js";
|
|
369
369
|
import {
|
|
370
370
|
HistoryManager
|
|
371
371
|
} from "../chunk-QVZZGT4X.js";
|
|
372
|
+
import "../chunk-AGR4P4UZ.js";
|
|
372
373
|
import "../chunk-ZRJMJIQU.js";
|
|
373
374
|
import {
|
|
374
375
|
hexToRgba
|
|
375
376
|
} from "../chunk-TGD52FEZ.js";
|
|
376
|
-
import "../chunk-AGR4P4UZ.js";
|
|
377
377
|
|
|
378
378
|
// src/vector/gradientTool.ts
|
|
379
379
|
var VECTOR_GRADIENT_STOP_GAP = 12;
|
|
@@ -6,10 +6,10 @@ var _chunkWAJQKWQUcjs = require('../chunk-WAJQKWQU.cjs');
|
|
|
6
6
|
var _chunkQKLRAA4Tcjs = require('../chunk-QKLRAA4T.cjs');
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
var
|
|
9
|
+
var _chunk477UVMNRcjs = require('../chunk-477UVMNR.cjs');
|
|
10
|
+
require('../chunk-2FHLHZAL.cjs');
|
|
10
11
|
require('../chunk-MR3Z4OQI.cjs');
|
|
11
12
|
require('../chunk-A6PHCAGX.cjs');
|
|
12
|
-
require('../chunk-2FHLHZAL.cjs');
|
|
13
13
|
|
|
14
14
|
// src/video-editor/types.ts
|
|
15
15
|
var VIDEO_FITS = ["contain", "cover", "fill", "none"];
|
|
@@ -4374,7 +4374,7 @@ var VideoEditorController = (_class7 = class {
|
|
|
4374
4374
|
this.readOnly = _nullishCoalesce(options.readOnly, () => ( false));
|
|
4375
4375
|
this.previewScale = checkPreviewScale(_nullishCoalesce(options.previewScale, () => ( "auto")));
|
|
4376
4376
|
this.onChange = options.onChange;
|
|
4377
|
-
this.player = new (0,
|
|
4377
|
+
this.player = new (0, _chunk477UVMNRcjs.AnimationPlayer)({ clock: options.clock, duration: () => videoProjectDuration(this.project), loop: "none" });
|
|
4378
4378
|
this.state = this.computeState();
|
|
4379
4379
|
this.connect();
|
|
4380
4380
|
}
|
|
@@ -6,10 +6,10 @@ import {
|
|
|
6
6
|
} from "../chunk-QVZZGT4X.js";
|
|
7
7
|
import {
|
|
8
8
|
AnimationPlayer
|
|
9
|
-
} from "../chunk-
|
|
9
|
+
} from "../chunk-Z3YWVUWT.js";
|
|
10
|
+
import "../chunk-AGR4P4UZ.js";
|
|
10
11
|
import "../chunk-ZRJMJIQU.js";
|
|
11
12
|
import "../chunk-TGD52FEZ.js";
|
|
12
|
-
import "../chunk-AGR4P4UZ.js";
|
|
13
13
|
|
|
14
14
|
// src/video-editor/types.ts
|
|
15
15
|
var VIDEO_FITS = ["contain", "cover", "fill", "none"];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: pixerate-paint-editor
|
|
3
|
-
description: How to make a picture in the Pixerate paint editor (natural media in the spirit of Painter and
|
|
3
|
+
description: How to make a picture in the Pixerate paint editor (natural media in the spirit of Painter, Rebelle and ArtRage) through its agent tools - canvas and paper (generated grain, depth, families from cold pressed watercolour to canvas), layers with painterly blend modes (watercolor, tint, highlight, shadow), dry-media brushes (pencil, pastel, charcoal, airbrush, marker, ink, erasers) with pressure, tilt, barrel rotation and velocity, blending tools (blender, smudge, Mixer Brush), brush behaviours (pick-up and mix ratios, dirty and multi-coloured brushes), the brush library, strokes that replay and vary, symmetry and perspective guides, tracing and reference images, harmonies, swatches, a mixing pad and pigment mixing, and PNG, JPEG, WebP, PSD and JSON output. Use when asked to paint, sketch, shade, blend, smudge, glaze, mix colours, paint symmetric or in perspective, trace an image, or when paint_stroke, set_paper, replay_strokes or mix_colors are available.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Paint editor
|
|
@@ -14,8 +14,15 @@ is never part of a layer. Coordinates are document pixels, (0, 0) top-left, y do
|
|
|
14
14
|
- **Brushes** are library presets (`list_brushes`): a tip from the shared engine (size,
|
|
15
15
|
hardness, spacing, angle, roundness, opacity, flow, blend), a **grain** response, pen dynamics
|
|
16
16
|
(pressure, tilt, velocity, jitter), a **rotation** mode (`fixed`, `stroke`, `barrel`) and an
|
|
17
|
-
engine: `dab` (most media), `eraser`,
|
|
18
|
-
|
|
17
|
+
engine: `dab` (most media), `eraser`, `mixer` (the Mixer Brush: a reservoir of paint plus paint
|
|
18
|
+
it picks up), `blender` (mixes the colours under and near the tip) or `smudge` (drags paint
|
|
19
|
+
along the stroke).
|
|
20
|
+
- **Behaviour** (`behavior`, dab and mixer brushes) is how a brush treats paint already on the
|
|
21
|
+
canvas: a **pick-up ratio** (how much paint each dab lifts and carries), a **mix ratio** (how
|
|
22
|
+
much of the carried paint goes into what it lays down), **dirty** (keep the carried colour into
|
|
23
|
+
the next stroke) and **multi-colour** (`tip`: several colours side by side across the tip;
|
|
24
|
+
`dab`: the colour changes along the stroke). A Mixer Brush's `mixer.wet` / `mixer.mix` are the
|
|
25
|
+
same two ratios. `get_mixer_brush` reads what the brush carries; `clean_mixer_brush` wipes it.
|
|
19
26
|
- **Grain**: a brush's grain response times the paper's `depth` decides how much light pressure
|
|
20
27
|
skips the valleys. Pencil, pastel and charcoal are grainy; airbrush, marker and ink are not.
|
|
21
28
|
- **Strokes are data.** Every stroke is recorded (brush, colour, raw points, seed, symmetry
|
|
@@ -46,8 +53,13 @@ is never part of a layer. Coordinates are document pixels, (0, 0) top-left, y do
|
|
|
46
53
|
greys); the mixing pad (`mixing_pad_stroke`, `pick_mixing_pad_color`) mixes by hand with a
|
|
47
54
|
palette knife. Keep chosen colours as swatches (`add_swatch`). Use the result as the stroke
|
|
48
55
|
`color`; `set_color` makes it the default.
|
|
49
|
-
5. **Refine** with smaller brushes on new layers: pencil and ink for line, charcoal for value
|
|
50
|
-
|
|
56
|
+
5. **Refine** with smaller brushes on new layers: pencil and ink for line, charcoal for value.
|
|
57
|
+
**Blend** on the layer that holds the paint: `blender` to melt neighbouring colours together
|
|
58
|
+
(pigment mixing, so blue next to yellow goes green), `smudge` / `wet-smudge` to drag paint
|
|
59
|
+
into soft edges and streaks, `mixer-brush` to paint wet into wet, `dirty-round` to paint with
|
|
60
|
+
a brush that picks up and carries colour, `multicolor-flat` for strokes loaded with several
|
|
61
|
+
colours. Glaze with a `watercolor` layer, warm or cool with `tint`, light with `highlight`,
|
|
62
|
+
shade with `shadow`.
|
|
51
63
|
6. **Let the guides multiply your marks.** `set_symmetry` (mirror for faces and vases,
|
|
52
64
|
kaleidoscope for mandalas and ornaments) paints every copy from one stroke;
|
|
53
65
|
`set_perspective_guide` plus `paint_stroke` with `snapToPerspective` lays converging lines for
|
|
@@ -76,8 +88,21 @@ is never part of a layer. Coordinates are document pixels, (0, 0) top-left, y do
|
|
|
76
88
|
between them. Long smooth curves need more points than straight lines.
|
|
77
89
|
- **Use `rotation: "stroke"`** for flat tips (pastel, charcoal, chisel marker) so the mark turns
|
|
78
90
|
with the path; `fixed` for calligraphic nibs.
|
|
79
|
-
- **
|
|
80
|
-
|
|
91
|
+
- **Blending tools**:
|
|
92
|
+
- `blender`: `strength` 0.3..0.6 for soft transitions, `distance` 0.2..0.5 (fraction of the
|
|
93
|
+
tip) for how far colours travel. Keep `mixing: "pigment"` for painterly blends; `rgb`
|
|
94
|
+
blends like a soft blur. Work along an edge in short strokes rather than over everything.
|
|
95
|
+
- `smudge`: `length` near 0.9 drags paint far (long streaks), 0.5 short pushes; `strength`
|
|
96
|
+
0.5..0.8. `mixing: "pigment"` (the `wet-smudge` preset) smears colours into each other like
|
|
97
|
+
wet paint.
|
|
98
|
+
- Mixer Brush: blend with flow 0.3..0.6; at full flow it paints only its own colour.
|
|
99
|
+
- **Pick-up and mix ratios**: `pickup` 0.3..0.7 with `mix` 0.4..0.7 gives a brush that drags
|
|
100
|
+
the colours it crosses into its own; `dirty: true` keeps them for the next stroke (wipe with
|
|
101
|
+
`clean_mixer_brush`). Keep `pickup` 0 for clean, predictable colour.
|
|
102
|
+
- **Multi-colour**: give 2..8 `colors` (or none for the paint and secondary colours). `tip` mode
|
|
103
|
+
with a flat tip and `rotation: "stroke"` paints ribbons; `softness` 0.3..0.7 keeps the stripes
|
|
104
|
+
readable. `dab` mode with `order: "sequence"` and `length` 5..20 walks through a palette;
|
|
105
|
+
`random` for foliage and confetti.
|
|
81
106
|
- **Pigment for paint, multiply for markers**: tip `blend: "pigment"` mixes subtractively on the
|
|
82
107
|
canvas; `multiply` darkens where marker strokes overlap. Pigment layers are written as Normal
|
|
83
108
|
to PSD (the export warns).
|
|
@@ -130,9 +155,9 @@ is never part of a layer. Coordinates are document pixels, (0, 0) top-left, y do
|
|
|
130
155
|
|
|
131
156
|
| Tool | Use |
|
|
132
157
|
| --- | --- |
|
|
133
|
-
| `list_brushes` | Read the library (built-in and saved): id, name, category, engine, size, grain response, rotation, `builtin`; plus the active brush id and whether it is edited. |
|
|
158
|
+
| `list_brushes` | Read the library (built-in and saved): id, name, category, engine, size, grain response, rotation, `wetCapable`, `pickup`, `dirty`, `multicolor` mode, `builtin`; plus the active brush id and whether it is edited. |
|
|
134
159
|
| `get_brush` | Read every setting of a brush, or of the active brush as edited (no `id`). Read before changing a brush you did not build. |
|
|
135
|
-
| `set_brush` | Choose the active brush (`id`) and / or change it: `tip` (size px, hardness, spacing, angle, roundness, opacity, flow, smoothing, pressureSize, pressureOpacity, blend), `grain`, `pressureSmoothing`, `rotation`, `dynamics` (minSize, pressureFlow, tiltSize, tiltRoundness, tiltOpacity, velocitySize, velocityOpacity, jitters, scatter), `mixer`, `loadsColor
|
|
160
|
+
| `set_brush` | Choose the active brush (`id`) and / or change it: `tip` (size px, hardness, spacing, angle, roundness, opacity, flow, smoothing, pressureSize, pressureOpacity, blend), `grain`, `pressureSmoothing`, `rotation`, `dynamics` (minSize, pressureFlow, tiltSize, tiltRoundness, tiltOpacity, velocitySize, velocityOpacity, jitters, scatter), `engine`, `mixer`, `loadsColor`, `behavior` (pickup, mix, dirty, mixing, multicolor: mode, colors, order, length, softness), `blender` (strength, distance, mixing), `smudge` (strength, length, mixing). Editor state. Returns the brush. |
|
|
136
161
|
| `save_brush` | Store the active brush in the user library under `id` (lowercase, digits, dashes) and `name`. Built-in ids are refused. |
|
|
137
162
|
| `remove_brush` | Delete a user brush. Built-in brushes cannot be removed. |
|
|
138
163
|
| `export_brushes` | Get a brush library file (JSON) of `ids`, or of every user brush. |
|
|
@@ -143,12 +168,12 @@ is never part of a layer. Coordinates are document pixels, (0, 0) top-left, y do
|
|
|
143
168
|
|
|
144
169
|
| Tool | Use |
|
|
145
170
|
| --- | --- |
|
|
146
|
-
| `mix_colors` | Predict a
|
|
171
|
+
| `mix_colors` | Predict a mix: `colors` with `weight` parts (and optional tinting `strength`), `model` `pigment` (default, Kubelka-Munk: what pigment blends, the Mixer Brush, pigment blending tools and the pad do) or `rgb` (what normal blending and rgb mixing do). Returns `mixed` by the model plus `pigment` and `rgbLerp` for comparison. Changes nothing. Use it to choose stroke colours. |
|
|
147
172
|
| `set_color` | Set the default paint `color` (and `secondaryColor`). |
|
|
148
173
|
| `pick_color` | Read the colour at `x`, `y`: of the painting with its paper, or of one layer (with alpha). |
|
|
149
|
-
| `get_mixer_brush` | Read what the Mixer Brush
|
|
174
|
+
| `get_mixer_brush` | Read what the brush carries: the Mixer Brush `reservoir` and `amount` left, and `pickup` (paint picked up, kept by dirty brushes). |
|
|
150
175
|
| `load_mixer_brush` | Fill the Mixer Brush reservoir with a colour (keeps its pickup). |
|
|
151
|
-
| `clean_mixer_brush` |
|
|
176
|
+
| `clean_mixer_brush` | Wipe the brush: drop the picked-up paint a dirty brush or the Mixer Brush carries (and with `emptyReservoir` the Mixer Brush paint). |
|
|
152
177
|
| `color_harmony` | Get a harmony (`kind`: complementary, split-complementary, analogous, triadic, tetradic, square, monochromatic) around `color` (default the paint colour), on the `ryb` painter's wheel (default; red ↔ green) or the `rgb` wheel (red ↔ cyan), `spread` degrees for analogous and split. Changes nothing. |
|
|
153
178
|
| `list_swatches` | Read the swatches (index, colour, name). |
|
|
154
179
|
| `add_swatch` | Keep a colour as a swatch (saved with the document). |
|
|
@@ -156,13 +181,18 @@ is never part of a layer. Coordinates are document pixels, (0, 0) top-left, y do
|
|
|
156
181
|
| `mixing_pad_stroke` | Paint on the 360 × 220 mixing pad (pad px): `tool` paint lays `color` with a pigment Mixer Brush, `knife` smears what is there and mixes it as paint. Scratch space, not the painting, no undo. |
|
|
157
182
|
| `pick_mixing_pad_color` | Read the mix on the pad at `x`, `y` (averaged over `radius`, default 3); `setColor` makes it the paint colour. Null where the pad is bare. |
|
|
158
183
|
| `clear_mixing_pad` | Wipe the pad. |
|
|
184
|
+
| `mix_on_pad` | Mix `paints` (`color`, `parts`) on the pad in one call: blobs by parts, knife passes, and a fully mixed Kubelka-Munk core. Optional pile `x`, `y`, `radius`, `passes`, `clear`; `setColor` makes the mix the paint colour. Returns `color` and the pile `bounds`. The quickest way to get a paint colour from named paints. |
|
|
185
|
+
| `save_mixing_pad` | Keep the pad as it is under a `name` (saved with the document). Refused when the pad is empty. Returns the id. |
|
|
186
|
+
| `list_mixing_pads` | Read the kept pads (`id`, `name`). |
|
|
187
|
+
| `load_mixing_pad` | Put a kept pad back (replaces what is on the pad). |
|
|
188
|
+
| `remove_mixing_pad` | Forget a kept pad. |
|
|
159
189
|
| `render_mixing_pad` | See the pad as a PNG. |
|
|
160
190
|
|
|
161
191
|
### Painting and strokes
|
|
162
192
|
|
|
163
193
|
| Tool | Use |
|
|
164
194
|
| --- | --- |
|
|
165
|
-
| `paint_stroke` | Paint one stroke through `points` (document px; `pressure` 0..1, `t` ms, `tiltX` / `tiltY` or `altitude` / `azimuth`, `twist`) with `brushId` (default the active brush), optional per-stroke `brush` changes, `color`, `layerId`, `seed`, `snapToPerspective`. The symmetry guide adds its copies; a sampling tracing image supplies the colour when `color` is missing. Returns `layerId`, `bounds`, `dabs`, `strokeId` and for
|
|
195
|
+
| `paint_stroke` | Paint one stroke through `points` (document px; `pressure` 0..1, `t` ms, `tiltX` / `tiltY` or `altitude` / `azimuth`, `twist`) with `brushId` (default the active brush), optional per-stroke `brush` changes, `color`, `layerId`, `seed`, `snapToPerspective`. The symmetry guide adds its copies; a sampling tracing image supplies the colour when `color` is missing. Returns `layerId`, `bounds`, `dabs`, `strokeId` and, for brushes that pick up paint, `mixerLoad` (what the brush carries now). Refused on locked, hidden or group layers, with the fix in the message. |
|
|
166
196
|
| `list_strokes` | Read the recorded strokes, oldest first (default the last 100): id, layer, brush, colour, point count, seed, bounds. With `ids`, their points too. |
|
|
167
197
|
| `replay_strokes` | Paint recorded `strokeIds` again: exactly, or varied by `dx` / `dy` (px), `rotate` (degrees clockwise), `scale` (brush size follows), `flipX`, `origin`, `pressureScale`, `color`, `brushId`, `layerId`, `repeat` (each copy applies the variation again). One undo step. Returns the new stroke ids, bounds and layers. |
|
|
168
198
|
| `undo_paint` | Undo the last step. Returns what was undone and what is next. |
|
|
@@ -206,6 +236,12 @@ is never part of a layer. Coordinates are document pixels, (0, 0) top-left, y do
|
|
|
206
236
|
has depth 0.
|
|
207
237
|
- **Grain is fixed to the document**, not to the layer: moving content does not move the grain,
|
|
208
238
|
and two strokes on the same spot catch the same peaks.
|
|
239
|
+
- **Blending tools need paint to blend.** Blender and smudge only move what is on the target
|
|
240
|
+
layer: blend on the layer you painted, not on an empty one above it.
|
|
241
|
+
- **A dirty brush stays dirty** across strokes and colour changes until `clean_mixer_brush`.
|
|
242
|
+
Pick-up lifts only paint on the target layer: the paper and other layers lift nothing.
|
|
243
|
+
- **Replays use the recorded load**: a replayed pick-up stroke starts with what the brush carried
|
|
244
|
+
when it was painted, not with the current load.
|
|
209
245
|
- **Big soft brushes at full flow look flat.** Lower `flow` (airbrush 0.05..0.15) and build up.
|
|
210
246
|
- **JPEG and WebP need a browser**; in Node use PNG. Exports never upscale (`scale` ≤ 1).
|
|
211
247
|
- **Symmetry stays on until you turn it off.** Set `mode: "off"` after the symmetric part, or
|