@Todd_Morgan – What you are complaining about is true:
https://helpx.adobe.com/au/photoshop/using/create-smart-objects.html#replace-smart-object-content
You can replace the image data in one Smart Object or multiple linked instances.
One needs to use the "New Smart Object Via Copy" command to isolate one particular embedded smart object so that it isn't synchronised.
There isn't such a native feature for linked smart objects, as they are linked, all links get replaced. I wrote a script to automate the creation of a "New Linked Smart Object via Copy", however it automatically saves a new linked file to break the path to the original linked file:
https://community.adobe.com/t5/photoshop-ecosystem-discussions/why-is-new-smart-object-via-copy-greyed-out-for-linked-smart-objects/td-p/14371680
Another simpler option to automate this is to create a 5-step action to run on the linked smart object layer, where you can simply select the existing new file to replace:
1) Convert to Smart Object
2) Edit Contents
3) Select Relink to File menu item
4) Close - Saving: yes
5) Convert Smart Object to Layers
Here is a scripted version offering some extra features which are not available for actions:
/*
Relink to New Linked Smart Object via Copy.jsx
v1.0 - 9th September 2024, Stephen Marsh
NOTE: The script will relink to an existing file
https://community.adobe.com/t5/photoshop-ecosystem-discussions/please-fix-how-relink-to-file-and-replace-content-work/td-p/14846535
Related to:
https://community.adobe.com/t5/photoshop-ecosystem-discussions/why-is-new-smart-object-via-copy-greyed-out-for-linked-smart-objects/td-p/14371680
*/
#target photoshop
try {
// Smart object action manager properties
var ref = new ActionReference();
ref.putProperty(charIDToTypeID("Prpr"), stringIDToTypeID("smartObject"));
ref.putEnumerated(charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
var so = executeActionGet(ref).getObjectValue(stringIDToTypeID("smartObject"));
// Conditional check for the active layer being a linked smart object
if (so.getBoolean(stringIDToTypeID("linked"))) {
// Single history stage undo
activeDocument.suspendHistory("Relink to New Linked Smart Object via Copy.jsx", "main()");
}
} catch (err) {
alert("Error!" + "\r" + err + "\r" + 'Line: ' + err.line);
}
function main() {
try {
// Convert the active linked smart object layer to an embedded smart object
executeAction(stringIDToTypeID("newPlacedLayer"), undefined, DialogModes.NO);
// Edit the smart object contents
executeAction(stringIDToTypeID("placedLayerEditContents"), new ActionDescriptor(), DialogModes.NO);
// Relink to file
var idselect = stringIDToTypeID("select");
var desc350 = new ActionDescriptor();
var idnull = stringIDToTypeID("null");
var ref59 = new ActionReference();
var idmenuItemClass = stringIDToTypeID("menuItemClass");
var idmenuItemType = stringIDToTypeID("menuItemType");
var idplacedLayerRelinkToFile = stringIDToTypeID("placedLayerRelinkToFile");
ref59.putEnumerated(idmenuItemClass, idmenuItemType, idplacedLayerRelinkToFile);
desc350.putReference(idnull, ref59);
executeAction(idselect, desc350, DialogModes.ALL);
// Get the layer name
var layerName = app.activeDocument.activeLayer.name;
// Close and save
app.activeDocument.close(SaveOptions.SAVECHANGES);
// Convert the embedded smart object back to a linked smart object
executeAction(stringIDToTypeID("placedLayerConvertToLayers"), undefined, DialogModes.NO);
// Set the layer name
app.activeDocument.activeLayer.name = layerName;
} catch (err) {
alert("Error!" + "\r" + err + "\r" + 'Line: ' + err.line);
}
}
P.S. You can add a feature request by marking a new topic as an "idea" rather than as a "discussion".
... View more