@pixerate/editor 0.132.0 → 0.134.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.
Files changed (90) hide show
  1. package/dist/animation-editor/index.cjs +55 -55
  2. package/dist/animation-editor/index.d.cts +4 -4
  3. package/dist/animation-editor/index.d.ts +4 -4
  4. package/dist/animation-editor/index.js +2 -2
  5. package/dist/{bezier-oCBfrGDG.d.cts → bezier-J8i4uqSH.d.cts} +1 -1
  6. package/dist/{bezier-0IHDCvv_.d.ts → bezier-lNEOp0Jx.d.ts} +1 -1
  7. package/dist/canvas/index.d.cts +7 -7
  8. package/dist/canvas/index.d.ts +7 -7
  9. package/dist/{chunk-MZXQTKUM.cjs → chunk-24ATT2PE.cjs} +10 -6
  10. package/dist/chunk-24ATT2PE.cjs.map +1 -0
  11. package/dist/{chunk-AHUYMDYW.js → chunk-2HC4DRF4.js} +10 -6
  12. package/dist/chunk-2HC4DRF4.js.map +1 -0
  13. package/dist/{chunk-YRZ6NVE3.js → chunk-6CTZAGZ2.js} +235 -4
  14. package/dist/chunk-6CTZAGZ2.js.map +1 -0
  15. package/dist/{chunk-ECVI5QRE.js → chunk-7RJ6P7MI.js} +2 -2
  16. package/dist/{chunk-G5FX56KX.js → chunk-ESIWZMMK.js} +51 -11
  17. package/dist/chunk-ESIWZMMK.js.map +1 -0
  18. package/dist/{chunk-IEYXYMRQ.js → chunk-HHTCDFZC.js} +99 -5
  19. package/dist/chunk-HHTCDFZC.js.map +1 -0
  20. package/dist/{chunk-W6M7C7R3.cjs → chunk-NVTHUPJ6.cjs} +236 -5
  21. package/dist/chunk-NVTHUPJ6.cjs.map +1 -0
  22. package/dist/{chunk-OYPJGGF3.cjs → chunk-T6TV6HY6.cjs} +36 -36
  23. package/dist/{chunk-OYPJGGF3.cjs.map → chunk-T6TV6HY6.cjs.map} +1 -1
  24. package/dist/{chunk-55UEZIU4.cjs → chunk-YAFS2QFZ.cjs} +231 -191
  25. package/dist/chunk-YAFS2QFZ.cjs.map +1 -0
  26. package/dist/{chunk-YYJKIESX.cjs → chunk-Z2H7KECK.cjs} +153 -59
  27. package/dist/chunk-Z2H7KECK.cjs.map +1 -0
  28. package/dist/effects/index.d.cts +4 -4
  29. package/dist/effects/index.d.ts +4 -4
  30. package/dist/{export-D-gkjBkB.d.cts → export-BGdT02aL.d.cts} +10 -10
  31. package/dist/{export-CfAogLEr.d.cts → export-DMeG6E06.d.ts} +1 -1
  32. package/dist/{export-ByJvAvR7.d.ts → export-Dng22YB8.d.ts} +10 -10
  33. package/dist/{export-Crl82sbE.d.ts → export-KzubBKo7.d.cts} +1 -1
  34. package/dist/{helpers-BCd2-PAR.d.ts → helpers-Coa4e2j_.d.ts} +35 -1
  35. package/dist/{helpers-CoIeXQnW.d.cts → helpers-DHl28yLO.d.cts} +35 -1
  36. package/dist/image-editor/index.cjs +983 -874
  37. package/dist/image-editor/index.cjs.map +1 -1
  38. package/dist/image-editor/index.d.cts +32 -13
  39. package/dist/image-editor/index.d.ts +32 -13
  40. package/dist/image-editor/index.js +124 -15
  41. package/dist/image-editor/index.js.map +1 -1
  42. package/dist/{opentype-BDahNRTe.d.cts → opentype-BWR7Qv8W.d.cts} +1 -1
  43. package/dist/{opentype-BQFEvy-t.d.ts → opentype-Dfcx6wFx.d.ts} +1 -1
  44. package/dist/paint/index.cjs +8 -2
  45. package/dist/paint/index.cjs.map +1 -1
  46. package/dist/paint/index.d.cts +14 -3
  47. package/dist/paint/index.d.ts +14 -3
  48. package/dist/paint/index.js +7 -1
  49. package/dist/paint-editor/index.cjs +78 -78
  50. package/dist/paint-editor/index.d.cts +7 -7
  51. package/dist/paint-editor/index.d.ts +7 -7
  52. package/dist/paint-editor/index.js +3 -3
  53. package/dist/{pathfinder-DaVdT8jq.d.ts → pathfinder-Celbi3e6.d.ts} +1 -1
  54. package/dist/{pathfinder-01ZgAwqV.d.cts → pathfinder-D8KQ6blQ.d.cts} +1 -1
  55. package/dist/{pool-D2A3WTt9.d.ts → pool-8JZGWHvR.d.ts} +1 -1
  56. package/dist/{pool-D6a45MoE.d.cts → pool-BfuxBKTd.d.cts} +1 -1
  57. package/dist/{rand-pQQ2sJTk.d.ts → rand-BaqEOs1Y.d.ts} +17 -4
  58. package/dist/{rand-DTXAssW1.d.cts → rand-DdpFzCo6.d.cts} +17 -4
  59. package/dist/raster/index.cjs +2 -2
  60. package/dist/raster/index.d.cts +4 -4
  61. package/dist/raster/index.d.ts +4 -4
  62. package/dist/raster/index.js +1 -1
  63. package/dist/{svg-DELNVerw.d.ts → svg-CxxqG3_W.d.ts} +2 -2
  64. package/dist/{svg-CcDz7Zq2.d.cts → svg-pwXWq6s2.d.cts} +2 -2
  65. package/dist/{tools-BFvkFnRj.d.cts → tools-3EBjR91b.d.cts} +1 -1
  66. package/dist/{tools-D7ws-OKL.d.ts → tools-y1M6O3UT.d.ts} +1 -1
  67. package/dist/vector/index.cjs +1642 -1046
  68. package/dist/vector/index.cjs.map +1 -1
  69. package/dist/vector/index.d.cts +275 -93
  70. package/dist/vector/index.d.ts +275 -93
  71. package/dist/vector/index.js +607 -11
  72. package/dist/vector/index.js.map +1 -1
  73. package/dist/video-editor/index.d.cts +4 -4
  74. package/dist/video-editor/index.d.ts +4 -4
  75. package/dist/{warp-2N9wkOkL.d.ts → warp-C1gwu2G_.d.ts} +1 -1
  76. package/dist/{warp-DErXW5rz.d.cts → warp-Ceqdz7kj.d.cts} +1 -1
  77. package/package.json +1 -1
  78. package/skills/pixerate-image-editor/SKILL.md +1 -1
  79. package/skills/pixerate-image-editor/references/retouching.md +3 -2
  80. package/skills/pixerate-vector/SKILL.md +12 -53
  81. package/skills/pixerate-vector/references/pitfalls.md +62 -0
  82. package/dist/chunk-55UEZIU4.cjs.map +0 -1
  83. package/dist/chunk-AHUYMDYW.js.map +0 -1
  84. package/dist/chunk-G5FX56KX.js.map +0 -1
  85. package/dist/chunk-IEYXYMRQ.js.map +0 -1
  86. package/dist/chunk-MZXQTKUM.cjs.map +0 -1
  87. package/dist/chunk-W6M7C7R3.cjs.map +0 -1
  88. package/dist/chunk-YRZ6NVE3.js.map +0 -1
  89. package/dist/chunk-YYJKIESX.cjs.map +0 -1
  90. /package/dist/{chunk-ECVI5QRE.js.map → chunk-7RJ6P7MI.js.map} +0 -0
@@ -1,11 +1,11 @@
1
- import { V as VideoProject, a as VideoAnimatable, b as VideoAsset, c as VideoAssetProxy, d as VideoClip, e as VideoClipAnimation, f as VideoClipEffect, g as VideoEffectRef, h as VideoEffectValues, i as VideoGrade, j as VideoGradeLut, k as VideoKeyframes, l as VideoMarker, m as VideoSequence, n as VideoTrack, o as VideoTranscriptWord, p as VideoTransform, q as VideoTransition, v as videoKeysOf, r as VideoTrackKind, s as VideoPlacementMode, t as VideoKeyframeProperty, u as VideoKey, w as VideoMediaClip, x as VideoEffectsEngine, y as VideoLayer, z as VideoFrame, A as VideoRect, B as VideoEffectPlace, C as VideoFfmpegOptions, D as VideoFfmpegExport, E as VideoEdlOptions, F as VideoFadeCurve, G as VideoFit, H as VideoBlendMode, I as VideoAssetKind, J as VideoClipAnimationEffect, K as VideoTransitionType } from '../export-CfAogLEr.cjs';
2
- export { L as VIDEO_BLEND_MODES, M as VIDEO_CLIP_ANIMATION_EFFECTS, N as VIDEO_CLIP_TYPES, O as VIDEO_EASE_NAMES, P as VIDEO_EFFECT_PLACES, Q as VIDEO_FADE_CURVES, R as VIDEO_FITS, S as VIDEO_KEYFRAME_LIMITS, T as VIDEO_KEYFRAME_PROPERTIES, U as VIDEO_PLACEMENT_MODES, W as VIDEO_TRANSFORM_PROPERTIES, X as VIDEO_TRANSITION_TYPES, Y as VIDEO_WIPE_DIRECTIONS, Z as VideoAudioSource, _ as VideoClipType, $ as VideoColorClip, a0 as VideoEase, a1 as VideoEffectClip, a2 as VideoEffectJob, a3 as VideoEffectUse, a4 as VideoEffectsEngineOptions, a5 as VideoLayerEffect, a6 as VideoLoudnessMeasurement, a7 as VideoLoudnessTarget, a8 as VideoSequenceClip, a9 as VideoTextClip, aa as VideoWipeDirection, ab as checkVideoEffectPlace, ac as checkVideoEffectValues, ad as ffmpegFilterValue, ae as isVideoKeyframes, af as mixEffectPixels, ag as overEffectPixels, ah as parseVideoLoudnessMeasurement, ai as placeVideoRect, aj as removeVideoKey, ak as retimeVideoAnimatable, al as setVideoKey, am as sortVideoKeys, an as splitVideoAnimatable, ao as toVideoEdl, ap as toVideoFfmpeg, aq as toVideoLoudnessMeasure, ar as videoClipEffectUses, as as videoClipSoundGain, at as videoEaseBezier, au as videoEaseProgress, av as videoEffectFrameTime, aw as videoEffectLayerKey, ax as videoEffectValuesAt, ay as videoFadeCurveGain, az as videoFfmpegUnsupportedEffects, aA as videoFrameAt, aB as videoFrameLeafLayers, aC as videoKeyframeBreakpoints, aD as videoKeyframeFfmpegExpr, aE as videoLayersUseEffects, aF as videoLayersWithoutTransitionEffects, aG as videoProjectEffects, aH as videoShellQuote, aI as videoTextStyle, aJ as videoTitleFrame, aK as videoTransformAt, aL as videoTransitionAudioCurve, aM as videoTransitionEase, aN as videoValueAt } from '../export-CfAogLEr.cjs';
1
+ import { V as VideoProject, a as VideoAnimatable, b as VideoAsset, c as VideoAssetProxy, d as VideoClip, e as VideoClipAnimation, f as VideoClipEffect, g as VideoEffectRef, h as VideoEffectValues, i as VideoGrade, j as VideoGradeLut, k as VideoKeyframes, l as VideoMarker, m as VideoSequence, n as VideoTrack, o as VideoTranscriptWord, p as VideoTransform, q as VideoTransition, v as videoKeysOf, r as VideoTrackKind, s as VideoPlacementMode, t as VideoKeyframeProperty, u as VideoKey, w as VideoMediaClip, x as VideoEffectsEngine, y as VideoLayer, z as VideoFrame, A as VideoRect, B as VideoEffectPlace, C as VideoFfmpegOptions, D as VideoFfmpegExport, E as VideoEdlOptions, F as VideoFadeCurve, G as VideoFit, H as VideoBlendMode, I as VideoAssetKind, J as VideoClipAnimationEffect, K as VideoTransitionType } from '../export-KzubBKo7.cjs';
2
+ export { L as VIDEO_BLEND_MODES, M as VIDEO_CLIP_ANIMATION_EFFECTS, N as VIDEO_CLIP_TYPES, O as VIDEO_EASE_NAMES, P as VIDEO_EFFECT_PLACES, Q as VIDEO_FADE_CURVES, R as VIDEO_FITS, S as VIDEO_KEYFRAME_LIMITS, T as VIDEO_KEYFRAME_PROPERTIES, U as VIDEO_PLACEMENT_MODES, W as VIDEO_TRANSFORM_PROPERTIES, X as VIDEO_TRANSITION_TYPES, Y as VIDEO_WIPE_DIRECTIONS, Z as VideoAudioSource, _ as VideoClipType, $ as VideoColorClip, a0 as VideoEase, a1 as VideoEffectClip, a2 as VideoEffectJob, a3 as VideoEffectUse, a4 as VideoEffectsEngineOptions, a5 as VideoLayerEffect, a6 as VideoLoudnessMeasurement, a7 as VideoLoudnessTarget, a8 as VideoSequenceClip, a9 as VideoTextClip, aa as VideoWipeDirection, ab as checkVideoEffectPlace, ac as checkVideoEffectValues, ad as ffmpegFilterValue, ae as isVideoKeyframes, af as mixEffectPixels, ag as overEffectPixels, ah as parseVideoLoudnessMeasurement, ai as placeVideoRect, aj as removeVideoKey, ak as retimeVideoAnimatable, al as setVideoKey, am as sortVideoKeys, an as splitVideoAnimatable, ao as toVideoEdl, ap as toVideoFfmpeg, aq as toVideoLoudnessMeasure, ar as videoClipEffectUses, as as videoClipSoundGain, at as videoEaseBezier, au as videoEaseProgress, av as videoEffectFrameTime, aw as videoEffectLayerKey, ax as videoEffectValuesAt, ay as videoFadeCurveGain, az as videoFfmpegUnsupportedEffects, aA as videoFrameAt, aB as videoFrameLeafLayers, aC as videoKeyframeBreakpoints, aD as videoKeyframeFfmpegExpr, aE as videoLayersUseEffects, aF as videoLayersWithoutTransitionEffects, aG as videoProjectEffects, aH as videoShellQuote, aI as videoTextStyle, aJ as videoTitleFrame, aK as videoTransformAt, aL as videoTransitionAudioCurve, aM as videoTransitionEase, aN as videoValueAt } from '../export-KzubBKo7.cjs';
3
3
  import { A as AnimationPlayer, C as Clock } from '../player-CmbY3218.cjs';
4
4
  import { b as AnimationLoopMode } from '../evaluate-BsxYieLN.cjs';
5
5
  import { H as HistoryManager } from '../HistoryManager-DeQQMBCj.cjs';
6
- import { v as EffectsSlot, E as EffectProvider, f as EffectDescription, e as EffectValue } from '../helpers-CoIeXQnW.cjs';
6
+ import { v as EffectsSlot, E as EffectProvider, f as EffectDescription, e as EffectValue } from '../helpers-DHl28yLO.cjs';
7
7
  import { a as AgentToolProvider } from '../registry-BqA1AZt0.cjs';
8
- import { A as AppliedEffectInfo } from '../tools-BFvkFnRj.cjs';
8
+ import { A as AppliedEffectInfo } from '../tools-3EBjR91b.cjs';
9
9
  import '../easing-lM0Xo9Ni.cjs';
10
10
  import '../types-DsiXGmjo.cjs';
11
11
  import '../schema-Di0CS6Pe.cjs';
@@ -1,11 +1,11 @@
1
- import { V as VideoProject, a as VideoAnimatable, b as VideoAsset, c as VideoAssetProxy, d as VideoClip, e as VideoClipAnimation, f as VideoClipEffect, g as VideoEffectRef, h as VideoEffectValues, i as VideoGrade, j as VideoGradeLut, k as VideoKeyframes, l as VideoMarker, m as VideoSequence, n as VideoTrack, o as VideoTranscriptWord, p as VideoTransform, q as VideoTransition, v as videoKeysOf, r as VideoTrackKind, s as VideoPlacementMode, t as VideoKeyframeProperty, u as VideoKey, w as VideoMediaClip, x as VideoEffectsEngine, y as VideoLayer, z as VideoFrame, A as VideoRect, B as VideoEffectPlace, C as VideoFfmpegOptions, D as VideoFfmpegExport, E as VideoEdlOptions, F as VideoFadeCurve, G as VideoFit, H as VideoBlendMode, I as VideoAssetKind, J as VideoClipAnimationEffect, K as VideoTransitionType } from '../export-Crl82sbE.js';
2
- export { L as VIDEO_BLEND_MODES, M as VIDEO_CLIP_ANIMATION_EFFECTS, N as VIDEO_CLIP_TYPES, O as VIDEO_EASE_NAMES, P as VIDEO_EFFECT_PLACES, Q as VIDEO_FADE_CURVES, R as VIDEO_FITS, S as VIDEO_KEYFRAME_LIMITS, T as VIDEO_KEYFRAME_PROPERTIES, U as VIDEO_PLACEMENT_MODES, W as VIDEO_TRANSFORM_PROPERTIES, X as VIDEO_TRANSITION_TYPES, Y as VIDEO_WIPE_DIRECTIONS, Z as VideoAudioSource, _ as VideoClipType, $ as VideoColorClip, a0 as VideoEase, a1 as VideoEffectClip, a2 as VideoEffectJob, a3 as VideoEffectUse, a4 as VideoEffectsEngineOptions, a5 as VideoLayerEffect, a6 as VideoLoudnessMeasurement, a7 as VideoLoudnessTarget, a8 as VideoSequenceClip, a9 as VideoTextClip, aa as VideoWipeDirection, ab as checkVideoEffectPlace, ac as checkVideoEffectValues, ad as ffmpegFilterValue, ae as isVideoKeyframes, af as mixEffectPixels, ag as overEffectPixels, ah as parseVideoLoudnessMeasurement, ai as placeVideoRect, aj as removeVideoKey, ak as retimeVideoAnimatable, al as setVideoKey, am as sortVideoKeys, an as splitVideoAnimatable, ao as toVideoEdl, ap as toVideoFfmpeg, aq as toVideoLoudnessMeasure, ar as videoClipEffectUses, as as videoClipSoundGain, at as videoEaseBezier, au as videoEaseProgress, av as videoEffectFrameTime, aw as videoEffectLayerKey, ax as videoEffectValuesAt, ay as videoFadeCurveGain, az as videoFfmpegUnsupportedEffects, aA as videoFrameAt, aB as videoFrameLeafLayers, aC as videoKeyframeBreakpoints, aD as videoKeyframeFfmpegExpr, aE as videoLayersUseEffects, aF as videoLayersWithoutTransitionEffects, aG as videoProjectEffects, aH as videoShellQuote, aI as videoTextStyle, aJ as videoTitleFrame, aK as videoTransformAt, aL as videoTransitionAudioCurve, aM as videoTransitionEase, aN as videoValueAt } from '../export-Crl82sbE.js';
1
+ import { V as VideoProject, a as VideoAnimatable, b as VideoAsset, c as VideoAssetProxy, d as VideoClip, e as VideoClipAnimation, f as VideoClipEffect, g as VideoEffectRef, h as VideoEffectValues, i as VideoGrade, j as VideoGradeLut, k as VideoKeyframes, l as VideoMarker, m as VideoSequence, n as VideoTrack, o as VideoTranscriptWord, p as VideoTransform, q as VideoTransition, v as videoKeysOf, r as VideoTrackKind, s as VideoPlacementMode, t as VideoKeyframeProperty, u as VideoKey, w as VideoMediaClip, x as VideoEffectsEngine, y as VideoLayer, z as VideoFrame, A as VideoRect, B as VideoEffectPlace, C as VideoFfmpegOptions, D as VideoFfmpegExport, E as VideoEdlOptions, F as VideoFadeCurve, G as VideoFit, H as VideoBlendMode, I as VideoAssetKind, J as VideoClipAnimationEffect, K as VideoTransitionType } from '../export-DMeG6E06.js';
2
+ export { L as VIDEO_BLEND_MODES, M as VIDEO_CLIP_ANIMATION_EFFECTS, N as VIDEO_CLIP_TYPES, O as VIDEO_EASE_NAMES, P as VIDEO_EFFECT_PLACES, Q as VIDEO_FADE_CURVES, R as VIDEO_FITS, S as VIDEO_KEYFRAME_LIMITS, T as VIDEO_KEYFRAME_PROPERTIES, U as VIDEO_PLACEMENT_MODES, W as VIDEO_TRANSFORM_PROPERTIES, X as VIDEO_TRANSITION_TYPES, Y as VIDEO_WIPE_DIRECTIONS, Z as VideoAudioSource, _ as VideoClipType, $ as VideoColorClip, a0 as VideoEase, a1 as VideoEffectClip, a2 as VideoEffectJob, a3 as VideoEffectUse, a4 as VideoEffectsEngineOptions, a5 as VideoLayerEffect, a6 as VideoLoudnessMeasurement, a7 as VideoLoudnessTarget, a8 as VideoSequenceClip, a9 as VideoTextClip, aa as VideoWipeDirection, ab as checkVideoEffectPlace, ac as checkVideoEffectValues, ad as ffmpegFilterValue, ae as isVideoKeyframes, af as mixEffectPixels, ag as overEffectPixels, ah as parseVideoLoudnessMeasurement, ai as placeVideoRect, aj as removeVideoKey, ak as retimeVideoAnimatable, al as setVideoKey, am as sortVideoKeys, an as splitVideoAnimatable, ao as toVideoEdl, ap as toVideoFfmpeg, aq as toVideoLoudnessMeasure, ar as videoClipEffectUses, as as videoClipSoundGain, at as videoEaseBezier, au as videoEaseProgress, av as videoEffectFrameTime, aw as videoEffectLayerKey, ax as videoEffectValuesAt, ay as videoFadeCurveGain, az as videoFfmpegUnsupportedEffects, aA as videoFrameAt, aB as videoFrameLeafLayers, aC as videoKeyframeBreakpoints, aD as videoKeyframeFfmpegExpr, aE as videoLayersUseEffects, aF as videoLayersWithoutTransitionEffects, aG as videoProjectEffects, aH as videoShellQuote, aI as videoTextStyle, aJ as videoTitleFrame, aK as videoTransformAt, aL as videoTransitionAudioCurve, aM as videoTransitionEase, aN as videoValueAt } from '../export-DMeG6E06.js';
3
3
  import { A as AnimationPlayer, C as Clock } from '../player-BK2kKbfd.js';
4
4
  import { b as AnimationLoopMode } from '../evaluate-BbCeF6pt.js';
5
5
  import { H as HistoryManager } from '../HistoryManager-DWSLd6Tf.js';
6
- import { v as EffectsSlot, E as EffectProvider, f as EffectDescription, e as EffectValue } from '../helpers-BCd2-PAR.js';
6
+ import { v as EffectsSlot, E as EffectProvider, f as EffectDescription, e as EffectValue } from '../helpers-Coa4e2j_.js';
7
7
  import { a as AgentToolProvider } from '../registry-D-4fit9C.js';
8
- import { A as AppliedEffectInfo } from '../tools-D7ws-OKL.js';
8
+ import { A as AppliedEffectInfo } from '../tools-y1M6O3UT.js';
9
9
  import '../easing-lM0Xo9Ni.js';
10
10
  import '../types-DsiXGmjo.js';
11
11
  import '../schema-Di0CS6Pe.js';
@@ -1,4 +1,4 @@
1
- import { B as BezierPath } from './bezier-0IHDCvv_.js';
1
+ import { B as BezierPath } from './bezier-lNEOp0Jx.js';
2
2
  import { W as WarpStyle, a as WarpMesh, V as Vec2, B as Box } from './types-CwMPoRMU.js';
3
3
 
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { B as BezierPath } from './bezier-oCBfrGDG.cjs';
1
+ import { B as BezierPath } from './bezier-J8i4uqSH.cjs';
2
2
  import { W as WarpStyle, a as WarpMesh, V as Vec2, B as Box } from './types-CwMPoRMU.cjs';
3
3
 
4
4
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pixerate/editor",
3
- "version": "0.132.0",
3
+ "version": "0.134.0",
4
4
  "description": "UI-agnostic rich text and media editing core library",
5
5
  "author": "Pixerate",
6
6
  "license": "MIT",
@@ -392,7 +392,7 @@ in the source frame at the document's bit depth, colour mode and profile. Read
392
392
  | `convert_colors` | Read-only. `colors` #rrggbb from the document's profile (or `from`) to `to`: channel `values` 0..1 (CMYK, RGB, grey), `hex` for RGB, and `lab`. |
393
393
  | `clone_stamp` | Copy pixels from the clone source along `points`: each point paints what is at point + offset (source − first point, whole px). `source` `{x, y}` sets the source for this stroke (else the current one, see `set_clone_source`); `aligned` keeps the offset for later strokes; `sample` current \| current-below \| all; `brush` `{size, hardness, spacing, opacity, flow, smoothing, pressureSize, pressureOpacity}`; `layerId`, `channel` (a mask clones from itself). One undo step. Returns the layer, channel, `bounds`, dabs and `clone` `{offset, source, aligned}`. Call `set_clone_source` or pass `source` first. |
394
394
  | `heal_brush` | As `clone_stamp`, then blends the cloned texture into the colour and light around the stroke (Poisson seamless cloning, when the stroke ends). Use for blemishes, wrinkles, dust and seams where the surroundings have the right tone. Returns as `clone_stamp`. |
395
- | `spot_heal` | Remove what `points` cover with no source: `type` proximity-match (default: copies the best matching nearby patch, then heals it in) or smooth (fills from the edges). `sample`, `brush`, `layerId`, `channel`. One undo step. Returns the layer, channel, `bounds`, dabs and `spotHeal` `{offset}` (null for a smooth fill). |
395
+ | `spot_heal` | Remove what `points` cover with no source: `type` proximity-match (default: copies the best matching nearby patch, then heals it in), content-aware (synthesises texture, continues lines and patterns) or smooth (fills from the edges). `sample`, `brush`, `layerId`, `channel`. One undo step. Returns the layer, channel, `bounds`, dabs and `spotHeal` `{offset}` (null for a smooth fill). |
396
396
  | `smudge` | Drag colour along `points` like a finger in wet paint; `strength` 0..1 (default 0.5) is how far. Works on masks too. One undo step. Returns the layer, channel, `bounds` and dabs. |
397
397
  | `dodge` | Lighten what `points` cover, most in `range` shadows \| midtones \| highlights, at `exposure` 0..1 (overlaps in one stroke never exceed it); `protectTones` keeps hue and saturation. Alpha kept. One undo step. Returns the layer, channel, `bounds` and dabs. |
398
398
  | `burn` | As `dodge`, darkening. |
@@ -5,8 +5,9 @@
5
5
  untouched, so a bad stroke is easy to mask or erase. Smudge, Dodge, Burn and Sponge change the
6
6
  pixels they touch, so run them on a duplicate (`duplicate_layer`) instead.
7
7
  2. **Pick the tool by the job.** A small spot or blemish on skin, sky or a wall: `spot_heal` with
8
- a brush a little larger than the spot (`proximity-match` copies a nearby patch; `smooth` fills
9
- from the edges and suits flat areas). A larger flaw, or one next to an edge: `heal_brush` from a
8
+ a brush a little larger than the spot (`proximity-match` copies a nearby patch; `content-aware`
9
+ synthesises texture and continues lines and patterns across the spot, best for larger spots and
10
+ where an edge runs through; `smooth` fills from the edges and suits flat areas). A larger flaw, or one next to an edge: `heal_brush` from a
10
11
  clean source of the same texture; it takes the colour and light around the stroke, so the source
11
12
  may be lighter or darker. Copy exactly (a repeat, a straight line, an edge): `clone_stamp`.
12
13
  3. **Sources and offsets.** `set_clone_source` (or `source` on the stroke) is the Alt-click. The
@@ -306,6 +306,17 @@ the browser's shaper they are kept but not drawn until outlines are available.
306
306
  | `vector.setResizing` | Set how children of a frame follow it on resize (`horizontal`, `vertical`; a missing axis keeps its value). Fails on objects not directly inside a frame. Returns `{ nodes: [{ id, horizontal, vertical }] }`. |
307
307
  | `vector.exportFrameSvg` | Export one frame as an SVG of its own size (its corner at the origin). Returns `{ svg, width, height }`; use it per artboard instead of `vector.exportSvg`. |
308
308
 
309
+ ### Pages and master pages
310
+
311
+ | Command | Use it to |
312
+ | --- | --- |
313
+ | `vector.listPages` | Read the pages (top-level frames in order, with `number`, `masterId`, `bounds`) and master pages (`usedBy`, `bounds`: place master art inside them). |
314
+ | `vector.addPage` | Add a page right of the others (`after`, `name`, `masterId`); the first page takes the artboard's art in. Add art with `parentId`. Returns `{ id }` and the pages. |
315
+ | `vector.addMasterPage` | Add a master page (`assignTo` page ids or "all"): art in it (parentId) shows on its pages, laid out by `resizing`; text can show `{page}` and `{pages}`. Use for headers, footers, page numbers, backgrounds. |
316
+ | `vector.setPageMaster` | Make pages use a master, or none with null. |
317
+ | `vector.movePage` | Reorder a page (`index` from 0); numbers follow. |
318
+ | `vector.goToPage` | Select a page and show it to the user. |
319
+
309
320
  ### Connectors
310
321
 
311
322
  | Command | Use it to |
@@ -417,32 +428,11 @@ the animation editor.
417
428
 
418
429
  ## Pitfalls
419
430
 
420
- - Mesh and freeform fills draw as fine tiles, not SVG gradients: they cannot be edited with
421
- `vector.setGradient` or as stops, and other tools see them as SVG patterns. Point indices
422
- shift after `vector.removeFreeformPoint`; read them again with `vector.getShading`.
423
-
424
- - A connector's geometry is regenerated after every edit while an end is glued: editing its
425
- anchors directly does not stick. Unglue the end (`vector.setConnector` with `null`) or change
426
- `route` instead. Connectors cannot be glued to connectors.
427
-
428
- - Scaling a frame (`vector.scale`, the selection handles) lays its children out by their
429
- constraints, so it is a resize, not a zoom; group the frame (or scale its children) to scale the
430
- art itself. A frame clips by default: objects moved outside it disappear (`clip: false` shows
431
- them). Moving an object over a frame does not put it inside; use `vector.frameSelection` or
432
- `adopt`.
431
+ The most common ones are below. Read [references/pitfalls.md](references/pitfalls.md) before working with connectors, frames, masks, filters, text, symbols, constraints, blends, gradient meshes or live corners.
433
432
 
434
- - The `d` in `vector.list` draws live corners cut, which adds anchors. On a path with corner
435
- radii, anchor indices counted from `d` do not match the stored anchors; count anchors on a path
436
- without corners, or clear corners first.
437
433
  - `d` and anchor positions are in the node's own space; `bounds` are in document space. For
438
434
  rotated nodes (`rotation` not 0), `vector.moveAnchor` and `vector.bendSegment` take document
439
435
  coordinates, so compute them from the drawn position, not from `d`.
440
- - `vector.boolean` without `live` fails when the result is empty (shapes that do not overlap)
441
- and consumes its inputs. Subtract removes upper shapes from the lowest: restack with
442
- `vector.arrange` first.
443
- - `vector.blend`, `vector.group` and live booleans need nodes that share a parent.
444
- - Blend in-betweens are locked and regenerate; edit the keys, not the steps.
445
- - `strokeAlign` inside and outside only apply when every subpath is closed.
446
436
  - Stroke widths, corner radii and effect sizes are kept when scaling: scale them yourself if the
447
437
  design should grow proportionally.
448
438
  - `vector.importSvg` without `replace` adds on top; with `replace: true` it discards the current
@@ -450,36 +440,5 @@ the animation editor.
450
440
  - With a stack, `vector.setStyle` `fill` / `stroke` and the stroke settings edit only the top
451
441
  layer, and `fill: null` / `stroke: null` remove every layer. Edit other layers with
452
442
  `vector.updateFill` / `vector.updateStroke`, by the index `vector.getAppearance` reports.
453
- - Layer indexes shift after a remove or a move: use the stack each write returns.
454
- - Path effects apply to the whole node, every layer alike. Blend in-betweens mix the top fill and
455
- stroke only.
456
- - In a mask group the order matters: the bottom child is always the mask. `vector.arrange` inside
457
- the group can change which object masks; deleting the mask releases the group instead.
458
- - A mask group's path effects act on its contents, not on the mask. Hit-testing, bounds,
459
- snapping and booleans use the masked result; an opacity mask counts wherever it paints, even
460
- where it is dark.
461
- - Filters and blend modes are drawn, not geometry: bounds, snapping, booleans and Outline Stroke
462
- ignore them. A node's blend mode and filter isolate its layers, so layer blend modes inside a
463
- node with a filter mix only with the node's own layers. Background blur is not available.
464
- - Text positions are code units: an emoji or other character outside the Basic Multilingual
465
- Plane counts 2. Take ranges from `vector.getText` rather than counting characters yourself.
466
- - Scaling text scales its font size (by the square root of the area change) and an area box per
467
- axis; it is never stretched. Skew is not kept on text.
468
- - Without an outline shaper (`vector.listFonts` `outlines: false`), text exports as SVG `<text>`
469
- positioned character by character; other viewers need the same fonts installed. Create Outlines
470
- (with an outline shaper) when the SVG must look the same everywhere.
471
- - An instance's `transform` may scale; its art's strokes scale with it unless `scaleStrokes: false`.
472
- Transform commands act on the instance, not the art: edit the art with `vector.editSymbol`.
473
- - While a symbol is being edited (`vector.listSymbols` `editing`), `vector.list` lists its art, not
474
- the document. Always finish with `vector.exitSymbolEdit`. A symbol cannot contain an instance
475
- of itself (directly or through another symbol).
476
- - Constraint refs to anchors give them stable ids; later anchor edits keep them, but rebuilding a
477
- path (booleans, Outline Stroke, Expand) drops them, and constraints on missing anchors are
478
- removed. `segment` means the straight line between two anchors, even when the segment is curved;
479
- `tangent` / `smooth` on one anchor act on its handles.
480
- - After any edit the solver moves the rest of the geometry to keep the constraints; the anchors
481
- you just moved move least. A fixed or fully constrained part will not move: remove or change a
482
- constraint first.
483
- - `vector.typeOnPath` consumes the path. Duplicate it first if the path should stay visible.
484
443
  - A command that fails changes nothing; read its message (for example "Nothing is selected; pass
485
444
  ids.") and retry with the missing input.
@@ -0,0 +1,62 @@
1
+ # Vector editor pitfalls by area
2
+
3
+ Detail moved out of SKILL.md (progressive disclosure). Each pitfall says what goes wrong and what to do instead.
4
+
5
+ - Mesh and freeform fills draw as fine tiles, not SVG gradients: they cannot be edited with
6
+ `vector.setGradient` or as stops, and other tools see them as SVG patterns. Point indices
7
+ shift after `vector.removeFreeformPoint`; read them again with `vector.getShading`.
8
+
9
+ - A connector's geometry is regenerated after every edit while an end is glued: editing its
10
+ anchors directly does not stick. Unglue the end (`vector.setConnector` with `null`) or change
11
+ `route` instead. Connectors cannot be glued to connectors.
12
+
13
+ - Scaling a frame (`vector.scale`, the selection handles) lays its children out by their
14
+ constraints, so it is a resize, not a zoom; group the frame (or scale its children) to scale the
15
+ art itself. A frame clips by default: objects moved outside it disappear (`clip: false` shows
16
+ them). Moving an object over a frame does not put it inside; use `vector.frameSelection` or
17
+ `adopt`.
18
+
19
+ - The `d` in `vector.list` draws live corners cut, which adds anchors. On a path with corner
20
+ radii, anchor indices counted from `d` do not match the stored anchors; count anchors on a path
21
+ without corners, or clear corners first.
22
+ - `vector.boolean` without `live` fails when the result is empty (shapes that do not overlap)
23
+ and consumes its inputs. Subtract removes upper shapes from the lowest: restack with
24
+ `vector.arrange` first.
25
+ - `vector.blend`, `vector.group` and live booleans need nodes that share a parent.
26
+ - Blend in-betweens are locked and regenerate; edit the keys, not the steps.
27
+ - `strokeAlign` inside and outside only apply when every subpath is closed.
28
+ - Layer indexes shift after a remove or a move: use the stack each write returns.
29
+ - Path effects apply to the whole node, every layer alike. Blend in-betweens mix the top fill and
30
+ stroke only.
31
+ - In a mask group the order matters: the bottom child is always the mask. `vector.arrange` inside
32
+ the group can change which object masks; deleting the mask releases the group instead.
33
+ - A mask group's path effects act on its contents, not on the mask. Hit-testing, bounds,
34
+ snapping and booleans use the masked result; an opacity mask counts wherever it paints, even
35
+ where it is dark.
36
+ - Filters and blend modes are drawn, not geometry: bounds, snapping, booleans and Outline Stroke
37
+ ignore them. A node's blend mode and filter isolate its layers, so layer blend modes inside a
38
+ node with a filter mix only with the node's own layers. Background blur is not available.
39
+ - Text positions are code units: an emoji or other character outside the Basic Multilingual
40
+ Plane counts 2. Take ranges from `vector.getText` rather than counting characters yourself.
41
+ - Scaling text scales its font size (by the square root of the area change) and an area box per
42
+ axis; it is never stretched. Skew is not kept on text.
43
+ - Without an outline shaper (`vector.listFonts` `outlines: false`), text exports as SVG `<text>`
44
+ positioned character by character; other viewers need the same fonts installed. Create Outlines
45
+ (with an outline shaper) when the SVG must look the same everywhere.
46
+ - An instance's `transform` may scale; its art's strokes scale with it unless `scaleStrokes: false`.
47
+ Transform commands act on the instance, not the art: edit the art with `vector.editSymbol`.
48
+ - While a symbol is being edited (`vector.listSymbols` `editing`), `vector.list` lists its art, not
49
+ the document. Always finish with `vector.exitSymbolEdit`. A symbol cannot contain an instance
50
+ of itself (directly or through another symbol).
51
+ - Constraint refs to anchors give them stable ids; later anchor edits keep them, but rebuilding a
52
+ path (booleans, Outline Stroke, Expand) drops them, and constraints on missing anchors are
53
+ removed. `segment` means the straight line between two anchors, even when the segment is curved;
54
+ `tangent` / `smooth` on one anchor act on its handles.
55
+ - After any edit the solver moves the rest of the geometry to keep the constraints; the anchors
56
+ you just moved move least. A fixed or fully constrained part will not move: remove or change a
57
+ constraint first.
58
+ - `vector.typeOnPath` consumes the path. Duplicate it first if the path should stay visible.
59
+ - Master art on a page is drawn from its master page and is locked there: edit the master page
60
+ (its id from `vector.listPages`, `parentId` to add to it), not the page. Give master objects
61
+ `resizing` (for example `vertical: "bottom"` for a footer) so they sit right on pages of other
62
+ sizes. Master pages are not pages: they are not numbered and PDF export by artboards skips them.