diff --git a/lib/agents/psd-render-service.ts b/lib/agents/psd-render-service.ts index 2132ae636..4fc849950 100644 --- a/lib/agents/psd-render-service.ts +++ b/lib/agents/psd-render-service.ts @@ -150,14 +150,11 @@ export async function executeAgentPsdTemplateRenderRequest( ); } - const canReplaceImageLayer = - isAgentPsdImageLayerSlot(layer) && layer.isEditable; - const canEditTextLayer = isAgentPsdTemplateLayerUserEditable(layer); - if (!canReplaceImageLayer && !canEditTextLayer) { + if (!isAgentPsdTemplateLayerUserEditable(layer)) { continue; } - if (canReplaceImageLayer) { + if (isAgentPsdImageLayerSlot(layer)) { const explicitUrl = String(body.imageAssignments[layer.id] || "").trim(); if (explicitUrl) { imageAssignments[layer.id] = explicitUrl; @@ -175,7 +172,7 @@ export async function executeAgentPsdTemplateRenderRequest( } } - if (canEditTextLayer && isAgentPsdTextLayerSlot(layer)) { + if (isAgentPsdTextLayerSlot(layer)) { if (Object.hasOwn(body.textAssignments, layer.id)) { textAssignments[layer.id] = String( body.textAssignments[layer.id] ?? "" diff --git a/lib/agents/psd-template-config.ts b/lib/agents/psd-template-config.ts index bdbb33f32..0b6921118 100644 --- a/lib/agents/psd-template-config.ts +++ b/lib/agents/psd-template-config.ts @@ -411,9 +411,10 @@ export function parseAgentPsdTemplateLayers(value: unknown) { layers.push({ ...baseRecord, slotType: "image", - isDefaultResultSource: isEditable && record.isDefaultResultSource === true, + isDefaultResultSource: + isEditable && !isSuperLocked && record.isDefaultResultSource === true, allowUserUploadOverride: - isEditable ? record.allowUserUploadOverride !== false : false, + isEditable && !isSuperLocked ? record.allowUserUploadOverride !== false : false, replaceMode: normalizeAgentPsdTemplateReplaceMode(record.replaceMode), contentBounds: normalizeAgentPsdTemplateImageContentBounds( record.contentBounds, @@ -616,7 +617,7 @@ export function getAgentPsdTemplateRuntimeMissingLayers(template: AgentPsdTempla if (hasUsableRenderBase) { return ( isAgentPsdImageLayerSlot(layer) && - layer.isEditable && + isAgentPsdTemplateLayerUserEditable(layer) && !hasAgentPsdTemplateStoredLayerSource(layer) ); } diff --git a/lib/agents/psd-template-parser.ts b/lib/agents/psd-template-parser.ts index a3032065e..c62b6c870 100644 --- a/lib/agents/psd-template-parser.ts +++ b/lib/agents/psd-template-parser.ts @@ -728,11 +728,7 @@ function shouldPrepareLayerPreview( layer: AgentPsdTemplateLayerSlot, assetProfile: PsdTemplateLayerAssetProfile ) { - return ( - assetProfile === "full" || - isAgentPsdTemplateLayerUserEditable(layer) || - (isAgentPsdImageLayerSlot(layer) && layer.isEditable) - ); + return assetProfile === "full" || isAgentPsdTemplateLayerUserEditable(layer); } function shouldPrepareLayerSource( @@ -743,7 +739,7 @@ function shouldPrepareLayerSource( return true; } - return isAgentPsdImageLayerSlot(layer) && layer.isEditable; + return isAgentPsdImageLayerSlot(layer) && isAgentPsdTemplateLayerUserEditable(layer); } export async function preparePsdTemplateRenderAssets(params: { @@ -799,7 +795,8 @@ export async function preparePsdTemplateRenderAssets(params: { isAgentPsdTextLayerSlot(targetLayer) && targetLayer.styleSource !== "custom"; const shouldResolveImageBounds = - isAgentPsdImageLayerSlot(targetLayer) && targetLayer.isEditable; + isAgentPsdTemplateLayerUserEditable(targetLayer) && + isAgentPsdImageLayerSlot(targetLayer); if ( !shouldUploadPreview && diff --git a/lib/agents/psd-template-repair.ts b/lib/agents/psd-template-repair.ts index f83ee6ec1..bcd260523 100644 --- a/lib/agents/psd-template-repair.ts +++ b/lib/agents/psd-template-repair.ts @@ -10,6 +10,7 @@ import { AGENT_PSD_TEMPLATE_ASSET_VERSION, hasAgentPsdTemplateRenderSegments, isAgentPsdImageLayerSlot, + isAgentPsdLayerSuperLocked, isAgentPsdTemplateLayerUserEditable, isAgentPsdTextLayerSlot, type AgentPsdTemplate, @@ -41,7 +42,7 @@ function hasMissingLayerAssets(template: AgentPsdTemplate) { if (hasRenderBase) { return ( isAgentPsdImageLayerSlot(layer) && - layer.isEditable && + isAgentPsdTemplateLayerUserEditable(layer) && !String(layer.sourceUrl || "").trim() ); } @@ -73,13 +74,19 @@ function hasStaticTemplateLayers(template: AgentPsdTemplate) { function repairEditableImageLayerSelection(template: AgentPsdTemplate) { const imageLayers = template.layers.filter(isAgentPsdImageLayerSlot); - if (imageLayers.length === 0) { + const unlockedImageLayers = imageLayers.filter( + (layer) => !isAgentPsdLayerSuperLocked(layer) + ); + if (unlockedImageLayers.length === 0) { return template.layers; } - const editableImageLayers = imageLayers.filter((layer) => layer.isEditable); - const defaultImageLayer = imageLayers.find( - (layer) => layer.isEditable && layer.isDefaultResultSource + const editableImageLayers = unlockedImageLayers.filter( + isAgentPsdTemplateLayerUserEditable + ); + const defaultImageLayer = unlockedImageLayers.find( + (layer) => + isAgentPsdTemplateLayerUserEditable(layer) && layer.isDefaultResultSource ); const shouldAutoRepairSelection = editableImageLayers.length === 0 || @@ -91,7 +98,7 @@ function repairEditableImageLayerSelection(template: AgentPsdTemplate) { } const nextPrimaryLayerId = pickPrimaryPsdImageLayerId({ - imageLayers, + imageLayers: unlockedImageLayers, canvasWidth: template.width, canvasHeight: template.height, });