# Adobe Photoshop API Text Layer Update Fix ## Problem The Adobe Photoshop API text layer updates were failing to update the text while preserving the original font styling. ## Solution After analyzing the Adobe API documentation and conducting further testing, we've fixed three critical issues: 1. **Layer Identification**: Using the layer name for identification works reliably. 2. **Font Preservation**: Using the correct characterStyles structure to maintain fonts. 3. **File Management**: Fixing output paths and adding automatic cleanup. ## Changes Made 1. **Simplified Layer Identification**: - Using only the layer name as the identifier - Avoiding complex path or ID-based identification 2. **Font Preservation Options**: - Added proper characterStyles structure - Implemented globalFont and manageMissingFonts options - Converted font sizes to the proper format (points) 3. **Better File Management**: - Files are saved in the original directory - Clear prefix naming (api_updated_) - Automatic cleanup of temporary files ## Correct Payload Structure ```json { "inputs": [ { "storage": "external", "href": "https://signed-url-to-psd.psd" } ], "options": { "manageMissingFonts": "useDefault", "globalFont": "FontName-Bold", "layers": [ { "name": "Layer Name", "text": { "content": "New text content", "characterStyles": [ { "fontPostScriptName": "FontName-Bold", "size": 0.444 // Size in points (pixels/72) } ], "paragraphStyles": [ { "alignment": "left" } ] } } ] }, "outputs": [ { "storage": "external", "href": "https://signed-url-for-output.psd", "type": "image/vnd.adobe.photoshop" } ] } ``` ## Key Insights for Font Preservation 1. **Font Specification**: The API requires fonts to be specified in characterStyles, not at the text level. 2. **Size Units**: The API expects font sizes in points, not pixels. Convert pixel sizes to points by dividing by 72.0. 3. **Complete Style Information**: Including both characterStyles and paragraphStyles improves formatting preservation. 4. **Font Names**: The API only supports the fontPostScriptName property: - Use the exact PostScript name of the font (e.g., "FuturaPT-Demi") - The Adobe API is strict about property names and doesn't support alternatives like fontName 5. **Font Fallback Behavior**: The API supports two values for manageMissingFonts: "useDefault" (uses Arial when font is missing) or "fail" (returns an error when font is missing). ## Testing The updated scripts now successfully update text layers in PSD files via the Adobe API while preserving the original font styling. Test using: ```bash python simplified_payload.py /path/to/your-textonly.json /path/to/your.psd ``` or ```bash python update_text_with_api.py --json-path /path/to/your-textonly.json ``` ## Notes - The API works asynchronously - it returns a 202 (Accepted) status when the request is accepted for processing. - The script monitors the processing status and downloads the result when complete. - Output files are now saved with the `api_updated_` prefix in the same directory as the original file. - Temporary files in Google Cloud Storage are automatically cleaned up after successful download.