adobe-ps-scripts-loreal/MAC-SCRIPTS.md
DJP 4a192a8c97 Initial commit: Adobe Photoshop API text management scripts
Local and cloud-based workflows for extracting and updating
text layers in PSD files via ExtendScript and Adobe PS API.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 13:46:52 -05:00

313 lines
No EOL
9 KiB
Markdown

# Mac Photoshop Script Documentation
This document provides detailed information on using the macOS-specific scripts for extracting and updating text in Photoshop files.
## Overview
These scripts use AppleScript to control Photoshop directly on macOS, providing a reliable method for text layer manipulation:
1. `mac_ps_extract.py`: Extracts text from PSD files into JSON format
2. `mac_ps_update.py`: Updates text layers in PSD files using edited JSON
This approach offers several advantages over the Adobe Photoshop API:
- ✅ Reliable text updates that actually change the text content
- ✅ Works with all layer types and preserves text formatting
- ✅ No need for cloud storage or API credentials
- ✅ Direct integration with local Photoshop installation
- ✅ Faster processing time for batch operations
## Requirements
- macOS (10.15 Catalina or later)
- Adobe Photoshop (2024, 2025, or later) installed locally
- Python 3.7 or higher
## Installation
1. Clone the repository or download the scripts
2. Install dependencies:
```bash
pip install -r requirements.txt
```
## Text Extraction Process (`mac_ps_extract.py`)
### How It Works
1. **Photoshop Detection and Launch**:
- Automatically detects installed Photoshop versions
- Launches Photoshop if not already running
- Uses AppleScript to communicate with Photoshop
2. **File Opening and Processing**:
- Opens each PSD file in Photoshop
- Executes the ExtractTextWithBreaks.jsx script
- Extracts all text layers with their formatting information
3. **JSON Output Generation**:
- Creates a structured JSON file for each PSD
- Preserves layer names, paths, and content
- Maintains rich text formatting information
- Names output files with `-textonly.json` suffix
### Command-Line Usage
Basic usage:
```bash
python mac_ps_extract.py /path/to/psd_files
```
With options:
```bash
# Extract to a specific output directory
python mac_ps_extract.py /path/to/psd_files -o /path/to/output_dir
# Process PSD files in subdirectories
python mac_ps_extract.py /path/to/psd_files -r
# Enable verbose logging
python mac_ps_extract.py /path/to/psd_files -v
```
### JSON Output Format
The generated JSON files include:
- Document metadata (name, dimensions)
- Complete list of text layers
- Text content and formatting for each layer
- Style information (font, size, formatting)
Example JSON structure:
```json
{
"documentName": "example.psd",
"psdPath": "/path/to/example.psd",
"extractedAt": "2025-04-22 14:32:27",
"dimensions": {
"width": 1200,
"height": 800
},
"textLayerCount": 2,
"textLayers": [
{
"id": "",
"name": "Headline",
"path": "Headline",
"text": "Product Name",
"updatedText": "Product Name",
"visible": true,
"styleInfo": {
"font": "Arial-Bold",
"size": 24,
"color": null,
"alignment": "left",
"styles": [
{
"start": 0,
"end": 12,
"text": "Product Name",
"font": "Arial-Bold",
"style": "Bold",
"size": 24
}
]
},
"hasRichTextFormatting": false
},
{
"id": "",
"name": "Description",
"path": "Text Group/Description",
"text": "This is a product description.\nIt has multiple lines.\nBullet points:\n• Feature one\n• Feature two",
"updatedText": "This is a product description.\nIt has multiple lines.\nBullet points:\n• Feature one\n• Feature two",
"visible": true,
"styleInfo": {
"font": "Arial",
"size": 12,
"color": null,
"alignment": "left",
"styles": [
{
"start": 0,
"end": 30,
"text": "This is a product description.",
"font": "Arial",
"style": "Regular",
"size": 12
},
{
"start": 31,
"end": 51,
"text": "It has multiple lines.",
"font": "Arial",
"style": "Regular",
"size": 12
},
{
"start": 52,
"end": 66,
"text": "Bullet points:",
"font": "Arial-Bold",
"style": "Bold",
"size": 12
},
{
"start": 67,
"end": 81,
"text": "• Feature one",
"font": "Arial",
"style": "Regular",
"size": 12
},
{
"start": 82,
"end": 96,
"text": "• Feature two",
"font": "Arial",
"style": "Regular",
"size": 12
}
]
},
"hasRichTextFormatting": true
}
]
}
```
## Text Update Process (`mac_ps_update.py`)
### How It Works
1. **JSON and PSD File Matching**:
- Locates PSD files corresponding to JSON data
- Uses smart matching based on filenames or metadata
- Finds PSD files even with minor naming differences
2. **Text Update Processing**:
- Opens the PSD file in Photoshop
- Loads the JSON file with updated text
- Executes the updateTextLayers.jsx script
- Updates text while preserving formatting
3. **Results and Verification**:
- Reports success/failure for each file processed
- Provides detailed logs of changes made
- Validates layer matches and text changes
### Command-Line Usage
Basic usage:
```bash
python mac_ps_update.py /path/to/json_files
```
With options:
```bash
# Specify PSD files in a different directory
python mac_ps_update.py /path/to/json_files -p /path/to/psd_files
# Save changes to PSD files after updating
python mac_ps_update.py /path/to/json_files --save
# Dry run to preview changes without applying them
python mac_ps_update.py /path/to/json_files --dry-run
# Enable verbose logging
python mac_ps_update.py /path/to/json_files -v
```
### JSON Editing Guidelines
When editing the JSON files:
1. **Only modify the `updatedText` field** for layers you want to change
2. **Preserve line breaks** using `\n` for proper formatting
3. **Maintain the original JSON structure** and field names
4. **Do not remove or change layer IDs**, names, or paths
5. **Save in UTF-8 encoding** to preserve special characters
Example of proper text update in JSON:
```json
"textLayers": [
{
"name": "Headline",
"text": "Original Product Name",
"updatedText": "New Product Name",
"visible": true,
// other fields...
}
]
```
## Advanced Features
### Rich Text Preservation
The scripts maintain text styling information for rich-formatted text:
- **Multiple Paragraph Support**: Preserves paragraph breaks and spacing
- **Mixed Formatting**: Maintains different styles within the same text layer
- **Character-Level Styling**: Preserves bold, italic, and other text attributes
- **Bullet Points**: Correctly handles bullet points and special characters
### Batch Processing
Both scripts support efficient batch processing:
- **Multiple File Handling**: Process entire directories of files
- **Recursive Search**: Optionally find files in subdirectories
- **Error Recovery**: Continue processing even if some files fail
- **Detailed Reporting**: Generate summaries of successful and failed operations
### Common Issues and Troubleshooting
#### Photoshop Launch Issues
**Problem**: Script fails to detect or launch Photoshop
**Solution**:
- Verify Photoshop is installed in the standard location
- Launch Photoshop manually first, then run the script
- Use the `-v` flag for verbose logging to diagnose issues
#### File Path Problems
**Problem**: Script can't find or open PSD/JSON files
**Solution**:
- Ensure filenames don't contain special characters
- Use absolute paths when specifying directories
- Check file permissions and ownership
#### Text Layer Matching Failures
**Problem**: Script can't find layers to update
**Solution**:
- Verify layer names match exactly between PSD and JSON
- Check if layers are inside groups (path differences)
- Try using the `-v` flag to see which layers are found
#### AppleScript Permissions
**Problem**: Permission errors when executing AppleScript
**Solution**:
- In System Preferences → Security & Privacy, allow script execution
- Grant terminal/script editor automation permissions for Photoshop
- Run from Terminal with full disk access
## Performance Considerations
- **Memory Usage**: These scripts have minimal memory footprint
- **Processing Time**: Extracting text typically takes 5-10 seconds per PSD file
- **Batch Efficiency**: Processing multiple files is more efficient than individual runs
- **Background Operation**: Scripts can run in the background while you work on other tasks
## Future Improvements
Planned enhancements to the scripts:
1. **Font Validation**: Check if specified fonts exist in the system
2. **Layer Creation**: Add ability to create new text layers
3. **Multi-Document Processing**: Process multiple PSD files simultaneously
4. **Automation Scheduling**: Set up automated batch processing at scheduled times
5. **GUI Interface**: Add a simple graphical interface for non-technical users