Reemplazo de un objeto inteligente a granel con script de Photoshop; Edición de secuencias de comandos para más de un objeto inteligente

Encontré el siguiente código y funciona muy bien para la mayoría de los archivos de Photoshop que he probado, pero el archivo con el que quiero usarlo tiene 2 objetos inteligentes, uno anidado en el otro. Ver imágenes adjuntas.

¿Es posible editar el código para que funcione con mi archivo en particular?

Aquí está el código :

¡Gracias por la ayuda!

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Respuestas (1)

En su pregunta original sobre Stack Overflow, nunca mencionó que dos SO están anidados. En este caso, sugiero abrir un SO como un documento con

function editSmartObject()
{
    var desc = new ActionDescriptor();
    executeAction(sTID('placedLayerEditContents'), desc, DialogModes.NO);
}

Si está utilizando solo este archivo en particular como entrada, su algoritmo debería ser algo como esto, imagino en pseudocódigo:

var originaldocument = activeDocument,
    files = File.openDialog(...);

for file in files
    activeDocument = originaldocument; //selecting the original document
    editSmartObject() //opening SO for editing
    editSmartObject() //opening the second SO for editing
    // optionally remove a layer from previous iteration: activeDocument.activeLayer.remove()
    placeImage(file) //placing image to SO
    activeDocument.activeLayer.resize() //resize the placed layer if you need to
    activeDocument.close(SaveOptions.SAVECHANGES) //closing the second SO and saving changes
    activeDocument.close(SaveOptions.SAVECHANGES) //closing the first SO and saving changes
    saveJPG(); //save jpg with all the SO updated


function placeImage(imageFile)
{
    alert(imageFile);
    var desc554 = new ActionDescriptor();
    desc554.putPath(cTID('null'), imageFile);
    desc554.putEnumerated(cTID('FTcs'), cTID('QCSt'), cTID('Qcsa'));
    var desc555 = new ActionDescriptor();
    desc555.putUnitDouble(cTID('Hrzn'), cTID('#Pxl'), 0.000000);
    desc555.putUnitDouble(cTID('Vrtc'), cTID('#Pxl'), 0.000000);
    desc554.putObject(cTID('Ofst'), cTID('Ofst'), desc555);
    executeAction(cTID('Plc '), desc554, DialogModes.NO);
};

function editSmartObject()
{
    var desc = new ActionDescriptor();
    executeAction(sTID('placedLayerEditContents'), desc, DialogModes.NO);
}