From b1cb1f3338bb704cd4d7b58ee784542ab61fd709 Mon Sep 17 00:00:00 2001 From: Sam Gannaway Date: Tue, 16 Aug 2022 17:30:37 -0500 Subject: [PATCH] This update constitutes what is available in the public release of Ps 23.5. A number of layer filters. UXP Scripting aka script files using UXP. Many small text changes for clarity or typo fixes. --- reference-ps.js | 4 + src/pages/ps_reference/changelog/index.md | 46 +- src/pages/ps_reference/classes/layer.md | 444 ++++++++++++++++++ src/pages/ps_reference/classes/photoshop.md | 2 +- src/pages/ps_reference/index.md | 22 +- .../ps_reference/media/assets/cloudy.psjs | 9 + .../ps_reference/media/assets/cloudy_udt.png | Bin 0 -> 98686 bytes src/pages/ps_reference/media/batchplay.md | 4 +- .../ps_reference/media/executeasmodal.md | 48 +- src/pages/ps_reference/media/index.md | 2 +- src/pages/ps_reference/media/uxpscripting.md | 58 +++ src/pages/ps_reference/modules/constants.md | 195 +++++++- 12 files changed, 801 insertions(+), 33 deletions(-) create mode 100644 src/pages/ps_reference/media/assets/cloudy.psjs create mode 100644 src/pages/ps_reference/media/assets/cloudy_udt.png create mode 100644 src/pages/ps_reference/media/uxpscripting.md diff --git a/reference-ps.js b/reference-ps.js index cb00e8d32c..688f90ebd5 100644 --- a/reference-ps.js +++ b/reference-ps.js @@ -259,6 +259,10 @@ module.exports = [{ { "title": "Action Module", "path": "/ps_reference/media/photoshopaction/" + }, + { + "title": "UXP Scripting", + "path": "/ps_reference/media/uxpscripting/" } ] }, diff --git a/src/pages/ps_reference/changelog/index.md b/src/pages/ps_reference/changelog/index.md index e8e11ee614..1fa44b58fb 100644 --- a/src/pages/ps_reference/changelog/index.md +++ b/src/pages/ps_reference/changelog/index.md @@ -11,14 +11,52 @@ description: Contains a running log of changes to the UXP API environment in Ado As of now, this documentation site describes API functionality that is available for use to a select number of participants in [Adobe Prerelease community](https://www.adobeprerelease.com/). We will start to evolve the site to support users and plugin developers outside the Prerelease group, once more functionality is available, and when we can be more confident our changes are stable for the wider audience. If you would like to join the conversation, please consider joining the [Adobe Prerelease community](https://www.adobeprerelease.com/)! -## Photoshop 23.4 (June 2022) - +## Latest (Available in Beta builds) + +## Photoshop 23.5 (August 2022) + +### layer apply filters +- [Layer.applyAddNoise(amount:number, distribution:Constants.NoiseDistribution, monochromatic:boolean)](../classes/layer/#applyAddNoise) Applies the Add Noise filter. +- [Layer.applyAverage()](../classes/layer/#applyAverage) Applies the Average filter. +- [Layer.applyBlur()](../classes/layer/#applyBlur) Applies the Blur filter. +- [Layer.applyBlurMore()](../classes/layer/#applyBlurMore) Applies the Blur More filter. +- [Layer.applyClouds()](../classes/layer/#applyClouds) Applies the Clouds filter. +- [Layer.applyCustomFilter(characteristics:number[], scale:number, offset:number)](../classes/layer/#applyCustomFilter) Applies the Custom filter. +- [Layer.applyDeInterlace(eliminateFields:Constants.EliminateFields, createFields:Constants.CreateFields)](../classes/layer/#applyDeInterlace) Applies the De-Interlace filter. +- [Layer.applyDespeckle()](../classes/layer/#applyDespeckle) Applies the Despeckle filter. +- [Layer.applyDifferenceClouds()](../classes/layer/#applyDifferenceClouds) Applies the Difference Clouds filter. +- [Layer.applyDiffuseGlow(graininess:number, glowAmount:number, clearAmount:number)](../classes/layer/#applyDiffuseGlow) Applies the Diffuse Glow filter. +- [Layer.applyDisplace(horizontalScale:number, verticalScale:number, displacementType:Constants.DisplacementMapType, undefinedAreas:Constants.UndefinedAreas, displacementMapFile:string)](../classes/layer/#applyDisplace) Applies the Displace filter. +- [Layer.applyDustAndScratches(radius:number, threshold:number)](../classes/layer/#applyDustAndScratches) Applies the Dust and Scratches filter. +- [Layer.applyGaussianBlur(radius:number)](../classes/layer/#applyGaussianBlur) Applies the Gaussian Blur filter. +- [Layer.applyGlassEffect(distortion:number, smoothness:number, scaling:number, invert:boolean, texture:Constants.TextureType, textureFile?:string)](../classes/layer/#applyGlassEffect) Applies the Glass filter. +- [Layer.applyHighPass(radius:number)](../classes/layer/#applyHighPass) Applies the High Pass filter. +- [Layer.applyLensBlur(source:Constants.DepthMapSource, focalDistance:number, invertDepthMask:boolean, shape:Constants.Geometry, radius:number, bladeCurvature:number, rotation:number, brightness:number, threshold:number, amount:number, distribution:Constants.NoiseDistribution, monochromatic:boolean)](../classes/layer/#applyLensBlur) Applies the Lens Blur filter. +- [Layer.applyLensFlare(brightness:number, flareCenter:number\[\], lensType:Constants.LensType)](../classes/layer/#applyLensFlare) Applies the Lens Flare filter. +- [Layer.applyMaximum(radius:number, preserveShape:Constants.PreserveShape)](../classes/layer/#applyMaximum) Applies the Maximum filter. +- [Layer.applyMinimum(radius:number, preserveShape:Constants.PreserveShape)](../classes/layer/#applyMinimum) Applies the Minimum filter. +- [Layer.applyMedianNoise(radius:number)](../classes/layer/#applyMedianNoise) Applies the Median Noise filter. +- [Layer.applyMotionBlur(angle:number, distance:number)](../classes/layer/#applyMotionBlur) Applies the Motion Blur filter. +- [Layer.applyNTSC()](../classes/layer/#applyNTSC) Applies the NTSC filter. +- [Layer.applyOceanRipple(size:number, magnitude:number)](../classes/layer/#applyOceanRipple) Applies the Ocean Ripple filter. +- [Layer.applyOffset(horizontal:number, vertical:number, undefinedAreas:Constants.OffsetUndefinedAreas)](../classes/layer/#applyOffset) Applies the Offset filter. +- [Layer.applyTwirl(angle:number)](../classes/layer/#applyTwirl) Applies the Twirl filter. + +- [Layer.applyPinch(amount: number)](../classes/layer/#applyPinch) Applies the Pinch filter. +- [Layer.applyPolarCoordinates(conversion: Constants.PolarConversionType)](../classes/layer/#applyPolarCoordinates) Applies the Polar Coordinates filter. +- [Layer.applyRipple(amount: number, size: Constants.RippleSize)](../classes/layer/#applyRipple) Applies the Ripple filter. +- [Layer.applySharpen()](../classes/layer/#applySharpen) Applies the Sharpen filter. +- [Layer.applySharpenEdges()](../classes/layer/#applySharpenEdges) Applies the Sharpen Edges filter. +- [Layer.applySharpenMore()](../classes/layer/#applySharpenMore) Applies the Sharpen More filter. +- [Layer.applyShear(curve: {x:number, y:number}[], undefinedArea: Constants.UndefinedAreas)](../classes/layer/#applyShear) Applies the Shear filter. + +## Photoshop 23.4.2 (July 2022) ### convertUnits method on the Photoshop Application object - - [Application.convertUnits](../classes/photoshop) is a method for converting the pixel values found in the UXP API to other units. For example, use this routine for converting a document's width from pixels to inches. + - [Application.convertUnits](../classes/photoshop/#convertUnits) is a method for converting the pixel values found in the UXP API to other units. For example, use this routine for converting a document's width from pixels to inches. ## Photoshop 23.3 (April 2022) ### Paths support - - [Document.pathItems](../classes/document/) property is now added, giving access to same APIs from ExtendScript to work with paths. + - [Document.pathItems](../classes/document/#pathItems) property is now added, giving access to same APIs from ExtendScript to work with paths. - `Document.pathItems` provides the collection class [PathItems](../classes/pathitems/), which is a collection of [PathItem](../classes/pathitem/) objects. - `PathItem.subPathItems` provides the collection class [SubPathItems](../classes/subpathitems/), which is a collection of [SubPathItem](../classes/subpathitem/) objects. - `SubPathItem.pathPoints` provides the collection class [PathPoints](../classes/pathpoints/), which is a collection of [PathPoint](../classes/pathpoint/) objects. diff --git a/src/pages/ps_reference/classes/layer.md b/src/pages/ps_reference/classes/layer.md index 94b48dc776..6b4fc866b9 100644 --- a/src/pages/ps_reference/classes/layer.md +++ b/src/pages/ps_reference/classes/layer.md @@ -58,6 +58,450 @@ If the object is representing a group layer, you can access it's children layers ## Methods +### applyAddNoise + +**async** : *Promise* + +Applies the Add Noise filter. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `amount` | *number* | Percentage of noise applied [0.1,400]. | +| `distribution` | [*NoiseDistribution*](/ps_reference/modules/constants/#noisedistribution) | Distribution method to use. | +| `monochromatic` | *boolean* | Adds black and white noise if true. | + +___ + +### applyAverage + +**async** : *Promise* + +Applies the Average filter. + +___ + +### applyBlur + +**async** : *Promise* + +Applies the Blur filter. + +___ + +### applyBlurMore + +**async** : *Promise* + +Applies the Blur More filter. + +___ + +### applyClouds + +**async** : *Promise* + +Applies the Clouds filter. + +___ + +### applyCustomFilter + +**async** : *Promise* + +Applies the Custom filter. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `characteristics` | *number*[] | Square matrix (5 x 5) used to perform filter operation. | +| `scale` | *number* | The value by which to divide the sum of the pixel values included in the calculation | +| `offset` | *number* | The value to be added to the result of the scale calculation. | + +___ + +### applyDeInterlace + +**async** : *Promise* + +Applies the De-Interlace filter. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `eliminateFields` | [*EliminateFields*](/ps_reference/modules/constants/#eliminatefields) | Eliminate EVENFIELDS or ODDFIELDS field order. | +| `createFields` | [*CreateFields*](/ps_reference/modules/constants/#createfields) | Create fields by either DUPLICATION or INTERPOLATION. | + +___ + +### applyDespeckle + +**async** : *Promise* + +Applies the Despeckle filter. + +___ + +### applyDifferenceClouds + +**async** : *Promise* + +Applies the Difference Clouds filter. + +___ + +### applyDiffuseGlow + +**async** : *Promise* + +Applies the Diffuse Glow filter. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `graininess` | *number* | The amount of grain [0,10]. | +| `glowAmount` | *number* | The glow amount [0,20]. | +| `clearAmount` | *number* | The clear amount [0,20]. | + +___ + +### applyDisplace + +**async** : *Promise* + +Applies the Displace filter using the specified horizontal +and vertical scale, mapping type, treatment of undistorted +areas, and path to the distortion image map. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `horizontalScale` | *number* | How much to scale in the direction of width [-999,999]. | +| `verticalScale` | *number* | How much to scale in the direction of height [-999,999]. | +| `displacementType` | [*DisplacementMapType*](/ps_reference/modules/constants/#displacementmaptype) | Describes how the displacement map fits the image if the image is not the same size as the map. | +| `undefinedAreas` | [*UndefinedAreas*](/ps_reference/modules/constants/#undefinedareas) | The method used to treat undistorted areas or areas left blank in an image to which the filter in the Distor category has been applied. | +| `displacementMapFile` | *string* | Path to the distortion image map. | + +___ + +### applyDustAndScratches + +**async** : *Promise* + +Applies the Dust & Scratches filter. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `radius` | *number* | The radius of the filter in pixels [1,100]. | +| `threshold` | *number* | The lower the amount, the stronger the effect [0,255]. | + +___ + +### applyGaussianBlur + +**async** : *Promise* + +Applies the Gaussian Blur filter. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `radius` | *number* | The radius of the filter in pixels [0.1,250]. | + +___ + +### applyGlassEffect + +**async** : *Promise* + +Applies the Glass filter. + +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `distortion` | *number* | - | Change the amount the glass distorts the image [0,20]. | +| `smoothness` | *number* | - | Change the smoothness of the glass [1,15]. | +| `scaling` | *number* | - | The percentage value to scale by [50,200]. | +| `invert` | *boolean* | false | Invert the glass (default: false). | +| `texture` | [*TextureType*](/ps_reference/modules/constants/#texturetype) | - | They type of glass texture (default: TextureType.CANVAS). | +| `textureFile?` | *string* | - | Mapping for glass distortion (optional). | + +___ + +### applyHighPass + +**async** : *Promise* + +Applies the High Pass filter. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `radius` | *number* | The width of high pass filter (pixels) [0.1,1000]. | + +___ + +### applyLensBlur + +**async** : *Promise* + +Applies the Lens Blur filter. + +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `source` | [*DepthMapSource*](/ps_reference/modules/constants/#depthmapsource) | - | The source for the depth map (default: `DepthMapSource.NONE`) | +| `focalDistance` | *number* | 0 | The blur focal distance for the depth map [0,255] (default: `0`). | +| `invertDepthMask` | *boolean* | false | True if the depth map is inverted (default: `false`) | +| `shape` | [*Geometry*](/ps_reference/modules/constants/#geometry) | - | The shape of the iris (default: `Geometry.HEXAGON`) | +| `radius` | *number* | 15 | The radius of the iris [0,100] (default: 15) | +| `bladeCurvature` | *number* | 0 | The blade curvature of the iris [0,100] (default: `0`) | +| `rotation` | *number* | 0 | The rotation of the iris [0,360] (default: `0`) | +| `brightness` | *number* | 0 | The brightness for the specular highlights [0,100] (default: `0`) | +| `threshold` | *number* | 0 | The threshold for the specular highlights [0,255] (default: `0`) | +| `amount` | *number* | 0 | The amount of noise [0,100] (default: `0`) | +| `distribution` | [*NoiseDistribution*](/ps_reference/modules/constants/#noisedistribution) | - | The distribution value for the noise (default: `NoiseDistribution.UNIFORM`) | +| `monochromatic` | *boolean* | false | True if the noise is monochromatic (default: `false`) | + +___ + +### applyLensFlare + +**async** : *Promise* + +Applies the Lens Flare filter. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `brightness` | *number* | Percentage of brightness applied [10,300]. | +| `flareCenter` | *object* | The flare center `{x: number, y: number}`. | +| `flareCenter.x` | *number* | The horizontal coordinate in pixels. | +| `flareCenter.y` | *number* | The vertical coordinate in pixels. | +| `lensType` | [*LensType*](/ps_reference/modules/constants/#lenstype) | The lens type used to produce the effect (default: `LensType.ZOOMLENS`). | + +___ + +### applyMaximum + +*Promise* + +Applies the Maximum filter + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `radius` | *number* | The radius of the filter in pixels.
Integer in the range [1,500] when using `SQUARENESS`.
Float in the range [0.2,500] when using `ROUNDNESS`.
| +| `preserveShape` | [*PreserveShape*](/ps_reference/modules/constants/#preserveshape) | Favor hard corners or smooth curves around the edges
(default: `PreserveShape.SQUARENESS`) | + +___ + +### applyMedianNoise + +*Promise* + +Applies the Median filter + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `radius` | *number* | The radius of the filter in pixels [1,500] | + +___ + +### applyMinimum + +*Promise* + +Applies the Minimum filter + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `radius` | *number* | The radius of the filter in pixels.
Integer in the range [1,500] when using `SQUARENESS`.
Float in the range [0.2,500] when using `ROUNDNESS`.
| +| `preserveShape` | [*PreserveShape*](/ps_reference/modules/constants/#preserveshape) | Favor hard corners or smooth curves around the edges
(default: `PreserveShape.SQUARENESS`) | + +___ + +### applyMotionBlur + +*Promise* + +Applies the Motion Blur filter + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `angle` | *number* | The angle the blur effect will be applied at (degrees) [-360,360] | +| `distance` | *number* | The amount of blur [1,2000] | + +___ + +### applyNTSC + +*Promise* + +Applies the NTSC Colors filter + +___ + +### applyOceanRipple + +*Promise* + +Applies the Ocean Ripple filter + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `size` | *number* | The Ripple size [1,15] | +| `magnitude` | *number* | The Ripple magnitude [1,20] | + +___ + +### applyOffset + +*Promise* + +Applies the Offset filter + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `horizontal` | *number* | The horizontal offset [-2 \* doc.width, 2 \* doc.width] | +| `vertical` | *number* | The vertical offset [-2 \* doc.height, 2 \* doc.height] | +| `undefinedAreas` | [*OffsetUndefinedAreas*](/ps_reference/modules/constants/#offsetundefinedareas) | Method to use to fill the empty space left by the offset
(default: `OffsetUndefinedAreas.WRAPAROUND`). | + +___ + +### applyPinch + +**async** : *Promise* + +Applies the pinch filter. + +Unsupported color modes: Bitmap, Indexed Color + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `amount` | *number* | The pinch amount. Negative value creates effect of expansion and positive creates effect of contraction. [-100,100] | + +___ + +### applyPolarCoordinates + +**async** : *Promise* + +Applies the polar coordinates filter. + +Unsupported color modes: Bitmap, Indexed Color + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `conversion` | [*PolarConversionType*](/ps_reference/modules/constants/#polarconversiontype) | The conversion type. | + +___ + +### applyRipple + +**async** : *Promise* + +Applies the ripple filter. + +Unsupported color modes: Bitmap, Indexed Color + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `amount` | *number* | The ripple amount. [-999,999] | +| `size` | [*RippleSize*](/ps_reference/modules/constants/#ripplesize) | The ripple size. | + +___ + +### applySharpen + +**async** : *Promise* + +Applies the sharpen filter. + +Unsupported color modes: Bitmap, Indexed Color + +___ + +### applySharpenEdges + +**async** : *Promise* + +Applies the sharpen edges filter. + +Unsupported color modes: Bitmap, Indexed Color + +___ + +### applySharpenMore + +**async** : *Promise* + +Applies the sharpen more filter. + +Unsupported color modes: Bitmap, Indexed Color + +___ + +### applyShear + +**async** : *Promise* + +Applies the the shear filter. + +Unsupported color modes: Bitmap, Indexed Color + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `curve` | { `x`: *number* ; `y`: *number* }[] | Specification of the shear curve in points as coordinates object with x, y properties e.g.in the format [{x:-20, y:1}, {x:30, y:128}]. Any number higher than 2 of coordinate objects can be specified. For "x" coordinate it is recommended to use range [-63,64] and for "y" coordinate use range [1,128]. For bests results please make sure that first point has 0 at "y" axis and last point has 128 at "y" axis. Also sort points by "y" value in ascending order. Follow these rules to ensure that curve will be shown correctly in dialog UI. | +| `undefinedArea` | [*UndefinedAreas*](/ps_reference/modules/constants/#undefinedareas) | The treatment of areas left blank by the distortion. | + +___ + +### applyTwirl + +**async** : *Promise* + +Applies the Twirl filter. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `angle` | *number* | The amount of twirl to apply (degrees) [-999,999] | + +___ + ### bringToFront *void* diff --git a/src/pages/ps_reference/classes/photoshop.md b/src/pages/ps_reference/classes/photoshop.md index c238540005..94b6f8558e 100644 --- a/src/pages/ps_reference/classes/photoshop.md +++ b/src/pages/ps_reference/classes/photoshop.md @@ -34,7 +34,7 @@ From here you can access open documents, tools, UI elements and run commands or | activeDocument | [*Document*](/ps_reference/classes/document/) | Read-write | The current active document | | backgroundColor | [*SolidColor*](/ps_reference/classes/solidcolor/) | Read-only | The default background color and color style for documents. | | currentTool | [*Tool*](/ps_reference/objects/tool/) | Read-only | Current selected tool. For now, the Tool class is an object with only an `id` field. In the future, we aim to provide tools with their own classes | -| displayDialogs | [*DialogModes*](/ps_reference/modules/constants/#dialogmodes) | Read-write | The dialog mode for the application, which controls what types of dialogs should be displayed when your plugin is interacting with Photoshop. | +| displayDialogs | [*DialogModes*](/ps_reference/modules/constants/#dialogmodes) | Read-write | The dialog mode for the application, which controls what types of dialogs should be displayed when your code is interacting with Photoshop. | | documents | [*Documents*](/ps_reference/classes/documents/) | Read-only | A list of the documents currently open | | fonts | [*TextFonts*](/ps_reference/classes/textfonts/) | Read-only | The fonts installed on this system. | | foregroundColor | [*SolidColor*](/ps_reference/classes/solidcolor/) | Read-write | The default foreground color (used to paint, fill, and stroke selections) | diff --git a/src/pages/ps_reference/index.md b/src/pages/ps_reference/index.md index 2058630c77..3892e72635 100644 --- a/src/pages/ps_reference/index.md +++ b/src/pages/ps_reference/index.md @@ -1,7 +1,7 @@ --- id: "photoshop-api" title: Photoshop API—UXP for Adobe Photoshop -description: Learn about the Photoshop API that is exposed through UXP for plugin developers. +description: Learn about the Photoshop API that is exposed through UXP for developers of plugins and scripts. --- @@ -45,7 +45,7 @@ See more properties and methods in `app` under [Photoshop](./classes/photoshop/) A key concept to understand before diving straight into Photoshop UXP plugin development is what we have termed "execute as modal". Any and all commands that may **modify the document**, or the **application state**, must utilize executeAsModal. ```javascript -async function makeDefaultDocument(executionControl) { +async function makeDefaultDocument(executionContext) { const app = require('photoshop').app; let myDoc = await app.createDocument({preset: "My Web Preset 1"}); } @@ -53,7 +53,7 @@ async function makeDefaultDocument(executionControl) { await require('photoshop').core.executeAsModal(makeDefaultDocument); ``` -As you may notice, this restriction could encompass much of your plugins' functionality! There are many benefits for this model, however. A more detailed explanation is provided in the [Execute as Modal documentation](./media/executeasmodal/). +As you may notice, this restriction could encompass much of your plugin's functionality! There are many benefits for this model, however. A more detailed explanation is provided in the [Execute as Modal documentation](./media/executeasmodal/). ### Document Represents a single, open Photoshop document. From this object, you can access the document's layers, dimensions, resolution, etc. You can crop it, add/delete/duplicate layers, resize, rotate, and save it. @@ -74,7 +74,7 @@ Flatten all currently open documents: ```javascript const app = require('photoshop').app; const toFlatten = app.documents; -async function flattenThem(executionControl) { +async function flattenThem(executionContext) { toFlatten.forEach((photoshopDoc) => { photoshopDoc.flatten(); }); @@ -86,7 +86,7 @@ await require('photoshop').core.executeAsModal(flattenThem); Create a layer: ```javascript const app = require('photoshop').app; -async function newColorDodgeLayer(executionControl) { +async function newColorDodgeLayer(executionContext) { await app.activeDocument.createLayer({ name: "myLayer", opacity: 80, mode: "colorDodge" }); }; @@ -102,7 +102,7 @@ Decrease a layer's opacity and bring it to the front: ```javascript const app = require('photoshop').app; const doc = app.activeDocument; -function bringActiveLayerToFront(executionControl) { +function bringActiveLayerToFront(executionContext) { const layer = doc.activeLayers[0]; layer.opacity = layer.opacity - 10; layer.bringToFront(); @@ -116,7 +116,7 @@ Scale down each layer whose name includes 'smaller' const app = require('photoshop').app; const doc = app.activeDocument; const layers = doc.layers; -async function scaleLayers(executionControl) { +async function scaleLayers(executionContext) { for (layer of layers) { if (layer.name.includes('smaller')) { await layer.scale(80, 80); @@ -150,7 +150,7 @@ let actions = new Map(); // a JS Map allows easy "find by name" operations firstActionSet.actions.forEach((action) => { actions.set(action.name, action)}); const myAction = actions.get("Wood Frame - 50 pixel"); if (myAction) { // user may have deleted this action - async function playMyAction(executionControl) { + async function playMyAction(executionContext) { await myAction.play(); } await require('photoshop').core.executeAsModal(playMyAction); @@ -161,7 +161,7 @@ See more properties and methods for `Action` under [Action](./classes/action/) a ### batchPlay -Photoshop is complex software, with many internal classes and methods. Not all of these are yet exposed via UXP. New interfaces are in development and will be shipped along with each release of Photoshop. In the meantime, if there is something your plugin needs to do that is not exposed in the current DOM, you may be able to use `batchPlay`. +Photoshop is complex software, with many internal classes and methods. Not all of these are yet exposed via UXP. New interfaces are in development and will be shipped along with each release of Photoshop. In the meantime, if there is something your plugin or script needs to do that is not exposed in the current DOM, you may be able to use `batchPlay`. BatchPlay is for accessing Photoshop functionality that has not yet been exposed via APIs. BatchPlay is a way to send multiple actions into the Photoshop event queue and return their results. @@ -170,3 +170,7 @@ ExtendScript has `executeAction`; this is analagous to UXP's `batchPlay`. Howeve Unlike ExtendScript where classes were provided to construct action descriptors, references and values, `batchPlay` accepts plain JSON objects. The [batchPlay documentation](/ps_reference/media/batchplay/) contains details on how to construct JSON for `batchPlay` usage. + +## UXP Scripting + +UXP is not just for plugins anymore. Individual JavaScript files may be developed and executed as detailed in the [UXP Scripting section](./media/uxpscripting). \ No newline at end of file diff --git a/src/pages/ps_reference/media/assets/cloudy.psjs b/src/pages/ps_reference/media/assets/cloudy.psjs new file mode 100644 index 0000000000..b135968857 --- /dev/null +++ b/src/pages/ps_reference/media/assets/cloudy.psjs @@ -0,0 +1,9 @@ + +const app = require('photoshop').app; +app.documents.add(); +app.activeDocument.createLayer({ name: "not descriptive name"}); +require('photoshop').action.batchPlay([{"_obj":"fill", "using":{"_enum":"fillContents","_value":"foregroundColor"} +}], {}); +app.activeDocument.layers[0].applyClouds(); +app.activeDocument.layers[0].name = 'cloudy'; +app.activeDocument.createLayerGroup({fromLayers: app.activeDocument.layers[0]}); \ No newline at end of file diff --git a/src/pages/ps_reference/media/assets/cloudy_udt.png b/src/pages/ps_reference/media/assets/cloudy_udt.png new file mode 100644 index 0000000000000000000000000000000000000000..a4a7612d93dc4725c20f7a1453f1185c92147240 GIT binary patch literal 98686 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 + ## API ExecuteAsModal is exposed on the Photoshop core module. @@ -47,7 +49,9 @@ try { } ``` -### Details +
+ +### Arguments executeAsModal takes the following arguments: 1. targetFunction: The JavaScript function to execute after Photoshop enters a modal state. 1. options: Options describing the request. The following properties are recognized: @@ -73,7 +77,9 @@ The executionContext contains the following properties: * registerAutoCloseDocument. Register a document to be closed when the modal scope exits. See below for details. * unregisterAutoCloseDocument. Unregister a document from being closed when the modal scope exits. See below for details. -#### User cancellation +
+ +### User cancellation executeAsModal puts Photoshop into a modal state, and it is important to allow the user to exit this state if the command was invoked by mistake, or if the command is taking too much time. The user can cancel the operation by pressing the Escape key or using cancellation UI in the progress bar. @@ -82,7 +88,7 @@ JavaScript can use `isCancelled` and `onCancel` on the executionContext to get i The following is an example of a target JavaScript function: ```javascript -async function targetFunction(executionControl, descriptor) { +async function targetFunction(executionContext, descriptor) { let target = {_ref:[{_ref:"property", "_property": "hostName"}, {"_ref":"application","_enum":"ordinal","_value":"targetEnum"}]}; let command = {"_obj": "get", "_target": target}; while (true) { @@ -95,7 +101,7 @@ This sample will run until the user cancels the interaction. After the user canc Due to the design of the underlying JavaScript runtime, JavaScript can only be cancelled when it is *interruptible*. JavaScript can be interrupted when it is waiting on the resolution of a promise. Without the "await" keyword in the above example, the JavaScript function would not terminate when the user cancels. Having a tight loop such as the following also does not allow for automatic cancellation of the JavaScript function. ``` -async function targetFunction(executionControl) { +async function targetFunction(executionContext) { while (true) { calculateSomeDigitsOfPi(); } @@ -103,7 +109,7 @@ async function targetFunction(executionControl) { ``` JavaScript that runs for a significant amount of time without an interruption point should regularly query isCancelled on the executionContext. The JavasScript example above can be made cancellable by modifying it to the following: ```javascript -async function targetFunction(executionControl) { +async function targetFunction(executionContext) { while (true) { calculateSomeDigitsOfPi(); if (executionContext.isCancelled) { @@ -114,7 +120,7 @@ async function targetFunction(executionControl) { ``` When the JavaScript function uses "await" with a Photoshop JavaScript command, then it is automatically terminated if the user cancels the operation. The automatic cancellation relies on JavaScript exceptions, and it is therefore important to not discard exceptions. The following function discards exceptions around batchPlay and will therefore *not* be automatically terminated when the user cancels the interaction. ```javascript -async function targetFunction(executionControl) { +async function targetFunction(executionContext) { let target = {_ref:[{_ref:"property", "_property": "hostName"}, {"_ref":"application","_enum":"ordinal","_value":"targetEnum"}]}; let command = {"_obj": "get", "_target": target}; while (true) { @@ -126,25 +132,29 @@ async function targetFunction(executionControl) { await require("photoshop").core.executeAsModal(targetFunction, {"commandName": "User Cancel Test"}); ``` -#### Progress bar +
+ +### Progress bar By default, Photoshop shows an indeterminate progress bar while a modal scope is active. The progress bar is shown a few seconds after the modal scope is initiated. JavaScript can use `reportProgress` to customize this behavior. To obtain a determinate progress bar, JavaScript can specify a value between 0 and 1 when calling reportProgress. Example: ```javascript -async function targetFunction(executionControl) { - executionControl.reportProgress({"value": 0.3}); +async function targetFunction(executionContext) { + executionContext.reportProgress({"value": 0.3}); } ``` Setting a value will switch the progress bar to be a determinate progress bar & show the progress bar if it is not yet visible. JavaScript can change the commandName that is shown in the progress UI by using the "commandName" property. This can be used to inform the user about the current stage of the operation. Example: ```javascript - executionControl.reportProgress({"value": 0.9, "commandName": "Finishing Up"}); + executionContext.reportProgress({"value": 0.9, "commandName": "Finishing Up"}); ``` ![progress bar](./assets/progress-bar-2.png) The progress bar is hidden while modal UI is shown. -#### Interactive Mode +
+ +### Interactive Mode *Added in Photoshop 23.3* If a plugin requires the accepting of user input or interaction while in a executeAsModal scope, "Interactive Mode" may be required. @@ -161,7 +171,9 @@ In lieu of the progress bar dialog, users can find the `Cancel Plugin Command` m ![cancel via plugin menu](./assets/eam-pluginmenu-cancel.png) -#### History state suspension +
+ +### History state suspension The hostControl property on the executionContext can be used to suspend and resume history states. While a history state is suspended, Photoshop will coalesce all document changes into a single history state with a custom name. Example: @@ -205,7 +217,9 @@ executionContext.hostControl.resumeHistory(suspensionID, commit) When the modal scope ends, Photoshop will auto-resume history on any document that is still in a suspended state. If the target function for the modal scope returns normally, then all unsuspended states are committed. If the target function exits via an exception, then all unsuspended history states are cancelled. -#### Notifications +
+ +### Notifications When executeAsModal is active, then Photoshop notifications are silenced similar to when an action is run from the actions panel. This means that other plugins cannot listen for batchPlay commands that are executed while the modal scope is active. @@ -214,7 +228,9 @@ Plugins can register for notifications related to starting and ending a modal Ja * "modalJavaScriptScopeEnter" * "modalJavaScriptScopeExit" -#### Automatic document closing +
+ +### Automatic document closing When the user cancels a modal scope, then JavaScript cannot make any further document changes until it returns from the modal scope. In order to ensure proper clean up of temporary documents, JavaScript can register one or more documents to be automatically closed without saving when the modal scope ends. The following is an example of JavaScript that registers a document to be closed when the modal scope ends: ```javascript async function modalFunction(executionContext) { @@ -242,6 +258,8 @@ async function modalFunction(executionContext) { } ``` -#### Notes +
+ +### Notes You can have nested modal scopes. A target function can use executeAsModal to execute another target function. All modal scopes share the same global modal state. This mean that any nested scope can modify the state on the (single) progress bar. Similarly, you can suspend the history state of a document in one scope, and resume the state in another. diff --git a/src/pages/ps_reference/media/index.md b/src/pages/ps_reference/media/index.md index 84eadf9937..3b2d8ecf97 100644 --- a/src/pages/ps_reference/media/index.md +++ b/src/pages/ps_reference/media/index.md @@ -5,4 +5,4 @@ title: "Repository of Advanced Topics" # Advanced -Included within are advanced topics you may find helpful when developing your Photoshop UXP Plugin. +Included within are advanced topics you may find helpful when developing for your Photoshop UXP plugin or script. diff --git a/src/pages/ps_reference/media/uxpscripting.md b/src/pages/ps_reference/media/uxpscripting.md new file mode 100644 index 0000000000..6524d890db --- /dev/null +++ b/src/pages/ps_reference/media/uxpscripting.md @@ -0,0 +1,58 @@ +--- +id: "uxpscriptingphotoshop" +title: "UXP Scripting in Photoshop" +sidebar_label: "UXP Scripting" +--- + +# UXP Scripting in Photoshop + +Running a standalone JavaScript file in UXP is now available in Photoshop. As discussed in the [general documention of UXP Scripting](http://developer.adobe.com/photoshop/uxp/2022/scripting/), Photoshop recognizes the new file extension .psjs for JavaScript files that will be executed by UXP. + + +## Running a file +To run a script file, you have multiple options. +- Select the file via the dialog from the menu File > Scripts > Browse... +- Drag-and-drop the file onto the Ps icon in the Dock (Mac) or application frame (Mac and Win). +- Play an Action that executes a script file. +- (_Coming soon_) Double-click via a file type association for .psjs registered at installation. + +
+ +## Developing Script files +As described in the [general documentation for UXP Scripting](http://developer.adobe.com/photoshop/uxp/2022/scripting/), script files are executed in a context that is mostly the same as those used in UXP plugins. The primary task of controlling Photoshop is the same. + +Using the [UXP Photoshop DOM API](../../), we can do the following in a script file: [cloudy.psjs](./assets/cloudy.psjs). + 1. Create a new file. + 2. Create a new layer. + 3. Fill with the foreground color. + 4. Rename the layer. + 5. Apply the Clouds filter. + 6. Group the layer. + +```javascript + +const app = require('photoshop').app; +app.documents.add(); +app.activeDocument.createLayer({ name: "not descriptive name"}); +require('photoshop').action.batchPlay([{"_obj":"fill", "using":{"_enum":"fillContents","_value":"foregroundColor"} +}], {}); +app.activeDocument.layers[0].applyClouds(); +app.activeDocument.layers[0].name = 'cloudy'; +app.activeDocument.createLayerGroup({fromLayers: app.activeDocument.layers[0]}); +``` +_Note the empty line at the top, you'll see why in the UDT screenshot._ + +You may have noticed the use of `batchPlay` to achieve one of the above steps. We have an [at-length description](./batchplay) of why to help break down the situation. + +
+ +## Debugging Script files +Starting with Photoshop 23.5 and [UXP Developer Tool](https://creativecloud.adobe.com/apps/download/uxp-developer-tools) (UDT) version 1.6.0, you can step through and debug a script. + +Again, the [general documentation for UXP Scripting](http://developer.adobe.com/photoshop/uxp/2022/scripting/), walked through using the UDT. Here, we'll just show what the above script looks like loaded into UDT with a breakpoint activated. From here you set breakpoints or Step Into the script files. (That empty first line mentioned previously accomodates the wrapping that is applied to script file contents.) + +![cloudy.psjs loaded into UDT](./assets/cloudy_udt.png) + + +Sharp-eyed readers will notice similarities between the properties under `require('uxp').script` and [those present for `executeAsModal`](./executeasmodal/#arguments). Scripts are executed in a similar context. The shared properties and methods of both will converge in the future with a shared understanding and usage patterns. This documentation will be updated when they are ready for use. + diff --git a/src/pages/ps_reference/modules/constants.md b/src/pages/ps_reference/modules/constants.md index a16565a5f4..52f31a7455 100644 --- a/src/pages/ps_reference/modules/constants.md +++ b/src/pages/ps_reference/modules/constants.md @@ -232,6 +232,31 @@ Type of color profile used to manage a document, used in [Document.colorProfileT ___ +### CreateFields + +The method used for creating fields. Pass to [Layer.applyDeInterlace](/ps_reference/classes/layer/#applydeinterlace). + +| Name | Description | +| :------ | :------ | +| DUPLICATION | - | +| INTERPOLATION | - | + +___ + +### DepthMapSource + +The source to use for the depth map. Pass to +[Layer.applyLensBlur](/ps_reference/classes/layer/#applylensblur)(). + +| Name | Description | +| :------ | :------ | +| IMAGEHIGHLIGHT | - | +| LAYERMASK | - | +| NONE | - | +| TRANSPARENCYCHANNEL | - | + +___ + ### DialogModes | Name | Description | @@ -255,6 +280,15 @@ Orientation of a guide in [Guide.direction](/ps_reference/classes/guide/#directi ___ +### DisplacementMapType + +| Name | Description | +| :------ | :------ | +| STRETCHTOFIT | - | +| TILE | - | + +___ + ### Dither The type of dithering @@ -313,6 +347,17 @@ Placement modes for Layer.move method ___ +### EliminateFields + +The type of field to eliminate. Pass to [Layer.applyDeInterlace](/ps_reference/classes/layer/#applydeinterlace). + +| Name | Description | +| :------ | :------ | +| EVENFIELDS | - | +| ODDFIELDS | - | + +___ + ### ForcedColors The type of colors to be included the color @@ -327,6 +372,22 @@ table regardless of their usage ___ +### Geometry + +Geometric options for shapes, such as the iris shape in the +Lens Blur filter. Pass to [Layer.applyLensBlur](/ps_reference/classes/layer/#applylensblur)(). + +| Name | Description | +| :------ | :------ | +| HEPTAGON | - | +| HEXAGON | - | +| OCTAGON | - | +| PENTAGON | - | +| SQUARE | - | +| TRIANGLE | - | + +___ + ### Intent The rendering intent to use when converting from one color space to another with @@ -403,6 +464,19 @@ Kinds of different layers in a document ___ +### LensType + +The type of Lens to use. Pass to [Layer.applyLensFlare](/ps_reference/classes/layer/#applylensflare)(). + +| Name | Description | +| :------ | :------ | +| MOVIEPRIME | - | +| PRIME105 | - | +| PRIME35 | - | +| ZOOMLENS | - | + +___ + ### MatteColor The color to use to fill anti-aliased edges @@ -435,8 +509,34 @@ Color Modes available for new document ___ +### NoiseDistribution + +Distribution model to use when applying an Add Noise filter. Pass to [Layer.applyAddNoise](/ps_reference/classes/layer/#applyaddnoise). + +| Name | Description | +| :------ | :------ | +| GAUSSIAN | - | +| UNIFORM | - | + +___ + +### OffsetUndefinedAreas + +Method to use to fill the empty space left by offsetting an image or selection. +Pass to [Layer.applyOffset](/ps_reference/classes/layer/#applyoffset)() + +| Name | Description | +| :------ | :------ | +| REPEATEDGEPIXELS | - | +| SETTOBACKGROUND | - | +| WRAPAROUND | - | + +___ + ### OperatingSystem +The target operating system in [BMPSaveOptions](/ps_reference/objects/conversionoptions/bmpsaveoptions/). + | Name | Description | | :------ | :------ | | OS2 | - | @@ -479,11 +579,13 @@ ___ ### PathKind -The type of a [PathItem](/ps_reference/classes/pathitem/) + * The type of a [PathItem](/ps_reference/classes/pathitem/) | Name | Description | | :------ | :------ | | CLIPPINGPATH | - | +| DUPLICATE | - | +| INTERPOLATE | - | | NORMALPATH | - | | TEXTMASK | - | | VECTORMASK | - | @@ -502,6 +604,57 @@ The role a [PathPoint](/ps_reference/classes/pathpoint/) plays in a [PathItem](/ ___ +### PolarConversionType + +The kind of polar conversion. +Pass to [Layer.applyPolarCoordinates](/ps_reference/classes/layer/#applypolarcoordinates)(). + +| Name | Description | +| :------ | :------ | +| POLARTORECTANGULAR | The distortion applied will take the input pixel grid as polar coordinates and convert them to rectangular coordinates. | +| RECTANGULARTOPOLAR | The distortion applied will take the input pixel grid as rectangular coordinates and convert them to polar coordinates. | + +___ + +### PreserveShape + +Favor the promotion of either corners or curves. +Pass to [Layer.applyMaximum](/ps_reference/classes/layer/#applymaximum)() and [Layer.applyMinimum](/ps_reference/classes/layer/#applyminimum)(). + +| Name | Description | +| :------ | :------ | +| ROUNDNESS | - | +| SQUARENESS | - | + +___ + +### RadialBlurMethod + +Radial blur comes in two flavors: spin and zoom. +Spin provides the effect of pinning the image at the designated center and rotating it. +Zoom provides the effect of motion towards the designated center point. +Pass to [[Layer.applyRadialBlur]](). + +| Name | Description | +| :------ | :------ | +| SPIN | - | +| ZOOM | - | + +___ + +### RadialBlurQuality + +The radial blur quality. +Pass to [[Layer.applyRadialBlur]](). + +| Name | Description | +| :------ | :------ | +| BEST | - | +| DRAFT | - | +| GOOD | - | + +___ + ### RasterizeType The type of layer to get rasterized. @@ -539,6 +692,19 @@ The method to use for image interpolation ___ +### RippleSize + +The size of undulations. +Pass to [Layer.applyRipple](/ps_reference/classes/layer/#applyripple)(). + +| Name | Description | +| :------ | :------ | +| LARGE | - | +| MEDIUM | - | +| SMALL | - | + +___ + ### SaveMethod | Name | Description | @@ -590,6 +756,20 @@ Set for [SubPathInfo.operation](/ps_reference/classes/subpathinfo/#operation), s ___ +### TextureType + +The type of texture or glass surface image to load for a texturizer +or glass filter. Pass to [Layer.applyGlassEffect](/ps_reference/classes/layer/#applyglasseffect)(). + +| Name | Description | +| :------ | :------ | +| BLOCKS | - | +| CANVAS | - | +| FROSTED | - | +| TINYLENS | - | + +___ + ### ToolType The tool to use with [PathItem.strokePath](/ps_reference/classes/pathitem/#strokepath)() @@ -627,6 +807,19 @@ Type of pixels to trim around an image, passed to [Document.trim](/ps_reference/ ___ +### UndefinedAreas + +How to treat undistorted areas or areas left blank in an image +to which a filter in the Distort category has been applied. Pass +to [Layer.applyDisplace](/ps_reference/classes/layer/#applydisplace)(), [Layer.applyShear](/ps_reference/classes/layer/#applyshear)(), [[Layer.applyWave]]() + +| Name | Description | +| :------ | :------ | +| REPEATEDGEPIXELS | - | +| WRAPAROUND | - | + +___ + ### Units Valid Units for convertUnits method, used in [Photoshop.convertUnits](/ps_reference/classes/photoshop/#convertunits)