@David3065392143nx
You can try the following v1.0 script.
I have updated the script to v1.1... I'm happy to make adjustments based on your feedback.
The first document opened must be the original render. The second document opened must be the new render.
/*
Update Render Adjustment Layers.jsx
Stephen Marsh
v1.1 - 3rd February 2025
https://community.adobe.com/t5/photoshop-ecosystem-discussions/ps-scripting-copy-paste-layer-mask-content-from-one-to-another/td-p/15127773
Note: The original document should be the first render opened, the second should be the new render
*/
#target photoshop
if (app.documents.length == 2) {
app.activeDocument.suspendHistory("Update Render Adjustment Layers", "main()");
} else {
alert("There should only be two documents open!\rThe original document should be the first render opened, the second should be the new render.");
}
function main() {
var origDoc = app.documents[0];
var origDocName = origDoc.name;
var newDoc = app.documents[1];
var newDocName = newDoc.name;
// Set the original document as the active document
app.activeDocument = origDoc;
// Apply the mask from the new render document to the original document
origDoc.activeLayer = origDoc.layerSets["Render"].layers["Trees_Curves"];
selectLayerChannel("mask");
applyImage();
origDoc.activeLayer = origDoc.layerSets["Render"].layers["Trees_HueSat"];
selectLayerChannel("mask");
applyImage();
origDoc.activeLayer = origDoc.layerSets["Render"].layers["Bushes_Curves"];
selectLayerChannel("mask");
applyImage();
origDoc.activeLayer = origDoc.layerSets["Render"].layers["Bushes_HueSat"];
selectLayerChannel("mask");
applyImage();
origDoc.activeLayer = origDoc.layerSets["Render"].layers["Street_Curves"];
selectLayerChannel("mask");
applyImage();
origDoc.activeLayer = origDoc.layerSets["Render"].layers["Street_ColFill"];
selectLayerChannel("mask");
applyImage("Street_ColFill", newDocName);
// Delete the adjustment layers from the new render document
app.activeDocument = newDoc;
newDoc.activeLayer = newDoc.layerSets["Render"].layers["Trees_Curves"];
newDoc.activeLayer.remove();
newDoc.activeLayer = newDoc.layerSets["Render"].layers["Trees_HueSat"];
newDoc.activeLayer.remove();
newDoc.activeLayer = newDoc.layerSets["Render"].layers["Bushes_Curves"];
newDoc.activeLayer.remove();
newDoc.activeLayer = newDoc.layerSets["Render"].layers["Bushes_HueSat"];
newDoc.activeLayer.remove();
newDoc.activeLayer = newDoc.layerSets["Render"].layers["Street_Curves"];
newDoc.activeLayer.remove();
newDoc.activeLayer = newDoc.layerSets["Render"].layers["Street_ColFill"];
newDoc.activeLayer.remove();
// Duplicate the adjustment layers from the original document
app.activeDocument = origDoc;
origDoc.activeLayer = origDoc.layerSets["Render"].layers["Trees_Curves"];
dupeLayer("Trees_Curves");
origDoc.activeLayer = origDoc.layerSets["Render"].layers["Trees_HueSat"];
dupeLayer("Trees_HueSat");
origDoc.activeLayer = origDoc.layerSets["Render"].layers["Bushes_Curves"];
dupeLayer("Bushes_Curves");
origDoc.activeLayer = origDoc.layerSets["Render"].layers["Bushes_HueSat"];
dupeLayer("Bushes_HueSat");
origDoc.activeLayer = origDoc.layerSets["Render"].layers["Street_Curves"];
dupeLayer("Street_Curves");
origDoc.activeLayer = origDoc.layerSets["Render"].layers["Street_ColFill"];
dupeLayer("Street_ColFill");
// Revert to previous state
executeAction(stringIDToTypeID("revert"), undefined, DialogModes.NO);
// Close the original doc
origDoc.close(SaveOptions.DONOTSAVECHANGES);
// Return to the new document
app.activeDocument = newDoc;
// Functions
function applyImage() {
var s2t = function (s) {
return app.stringIDToTypeID(s);
};
var descriptor = new ActionDescriptor();
var descriptor2 = new ActionDescriptor();
var reference = new ActionReference();
reference.putEnumerated(s2t("channel"), s2t("channel"), s2t("mask"));
reference.putName(s2t("layer"), app.activeDocument.activeLayer.name); // Source layer name
reference.putName(s2t("document"), newDocName); // Source doc name
descriptor2.putReference(s2t("to"), reference);
descriptor2.putBoolean(s2t("preserveTransparency"), true);
descriptor.putObject(s2t("with"), s2t("calculation"), descriptor2);
executeAction(s2t("applyImageEvent"), descriptor, DialogModes.NO);
}
function selectLayerChannel(chanPara) {
// "RGB" | "mask"
var s2t = function (s) {
return app.stringIDToTypeID(s);
};
var descriptor = new ActionDescriptor();
var reference = new ActionReference();
reference.putEnumerated(s2t("channel"), s2t("channel"), s2t(chanPara));
descriptor.putReference(s2t("null"), reference);
descriptor.putBoolean(s2t("makeVisible"), false);
executeAction(s2t("select"), descriptor, DialogModes.NO);
}
function dupeLayer(dupeLayerName) {
var s2t = function (s) {
return app.stringIDToTypeID(s);
};
var descriptor = new ActionDescriptor();
var list = new ActionList();
var reference = new ActionReference();
var reference2 = new ActionReference();
reference.putEnumerated(s2t("layer"), s2t("ordinal"), s2t("targetEnum"));
descriptor.putReference(s2t("null"), reference);
reference2.putName(s2t("document"), newDocName);
descriptor.putReference(s2t("to"), reference2);
descriptor.putString(s2t("name"), dupeLayerName);
executeAction(s2t("duplicate"), descriptor, DialogModes.NO);
}
}
- Copy the code text to the clipboard
- Open a new blank file in a plain-text editor (not in a word processor)
- Paste the code in
- Save as a plain text format file – .txt
- Rename the saved file extension from .txt to .jsx
- Install or browse to the .jsx file to run (see below)
https://prepression.blogspot.com/2017/11/downloading-and-installing-adobe-scripts.html