Photoshop远程控制服务

通过FastAPI实现的跨平台Photoshop远程控制服务,支持AppleScript/PowerShell和UXP插件两种控制方式,适用于自动化图像处理和AI辅助设计场景。

  • by StarBoze
  • Python
  • 本地部署
  • 13 星标
  • 更新于
在 GitHub 查看 StarBoze/Photoshop-MCP-Server

使用说明

Photoshop MCP服务器

Model Context Protocol (MCP) 使用服务器macOS打开Windows单击功能区上Photoshop中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。

概要

此项目包括:FastAPI来修改标记元素的显示属性MCP实施服务器,通过以下方法Photoshop控制:

macOS

  1. AppleScript后端-所有Photoshop在版本中工作
  2. UXP Plug-in后端-Photoshop CC 2021以上动作(WebSocket通信)

视窗

  1. PowerShell后端-所有Photoshop在版本中工作
  2. UXP Plug-in后端-Photoshop CC 2021以上动作(WebSocket通信)

机能

  • FastAPI/Starlette使用REST/WebSocket端点
  • 跨平台支持(macOS/Windows)
  • AppleScript/PowerShell后端Photoshop控制
  • UXP Plug-in后端Photoshop控制(WebSocket通信)
  • 插件打包功能
  • 缩略图生成功能(支持WebSocket流式传输)
  • Cluster多个模式Photoshop管理实例
  • LLM自动触摸功能

必要条件

  • Python 3.11以上
  • macOS在工作空间的边缘Windows 10/11
  • Adobe Photoshop 2023以上

安装

pip install photoshop-mcp-server

或者,从源安装:

git clone https://github.com/StarBoze/photoshop-mcp-server.git
cd photoshop-mcp-server
pip install -e .

详细的安装步骤是安装指南来修改标记元素的显示属性。

环境构建详细信息

创建和管理虚拟环境

Python的虚拟环境可避免依赖性冲突:

# 仮想環境の作成
python -m venv venv

# 仮想環境の有効化(macOS/Linux)
source venv/bin/activate

# 仮想環境の有効化(Windows)
venv\Scripts\activate

# 依存パッケージのインストール
pip install -e .

从属软件包

主要依赖包:

  • FastAPI: REST单击功能区上WebSocket实施端点
  • Uvicorn: ASGI服务器
  • Pydantic: 数据验证
  • Starlette: WebSocket支持
  • psutil: 群集模式
  • grpcio: gRPC群集模式
  • litellm: LLM集成(自动触摸功能)

运行模式

服务器可以在以下模式下运行:

  • 正常模式: photoshop-mcp-server start

    • 在后台启动服务器
  • 前台模式: photoshop-mcp-server start --foreground

    • 在终端显示日志的同时运行
    • 便于调试
  • 调试模式: photoshop-mcp-server start --debug

    • 查看详细日志
    • 显示请求和响应的内容
  • UXP模式: photoshop-mcp-server start --bridge-mode uxp

    • UXP使用插件Photoshop控制

使用方法

基本用法

# サーバーを起動(プラットフォームに応じたデフォルトバックエンド)
photoshop-mcp-server start

# ヘルプを表示
photoshop-mcp-server --help

指定特定于平台的后端

# macOSでAppleScriptバックエンドを使用
photoshop-mcp-server start --bridge-mode applescript

# WindowsでPowerShellバックエンドを使用
photoshop-mcp-server start --bridge-mode powershell

# UXPバックエンドを使用(クロスプラットフォーム)
photoshop-mcp-server start --bridge-mode uxp

详细的使用方法是文档来修改标记元素的显示属性。

UXP使用后端

UXP使用后端需要:

  1. UXP打包插件
photoshop-mcp-server package_plugin
  1. UXP显示插件安装过程
photoshop-mcp-server install_plugin
  1. 按照显示的步骤安装插件

  2. UXP启用后端并启动服务器

photoshop-mcp-server start --bridge-mode uxp
  1. API请求时 bridge_mode 单击功能区上 uxp 设置为
POST /openFile
{
  "path": "/path/to/file.psd",
  "bridge_mode": "uxp"
}

UXP插件安装详细信息

UXP单击功能区上的Adobe UXP Developer Tool中所述修改相应参数的值。

Adobe UXP Developer Tool安装

  1. Adobe UXP开发工具下载最新版本
  2. 运行下载的安装程序并按照说明安装
  3. 安装完成后Adobe UXP Developer Tool启动

插件安装说明

  1. 打包插件

    photoshop-mcp-server package_plugin
    

    因此dist/photoshop-mcp.zip将条目添加到文档注册表。

  2. UXP Developer Tool在中添加插件

    • UXP Developer Tool单击“添加插件”按钮
    • 已创建dist/photoshop-mcp.zip列表框中,此格式对应于条目“无”
    • 加载插件(单击加载按钮)
  3. Photoshop启用

    • Photoshop启动(如果已启动,则重新启动)
    • 从插件菜单中选择“Photoshop MCP”进行启用
  4. MCP启动服务器(UXP模式)

    photoshop-mcp-server start --bridge-mode uxp
    
  5. 接続确认

    • 如果服务器日志显示“UXP Plugin connected”消息,则连接成功
    • 如果连接失败,请单击故障排除的双曲正切值

WebSocket端点

UXP在动态输入提示中单击WebSocket端点也可用:

ws://localhost:5001/ws

WebSocket直接通过JSON可以发送和接收消息。

跨平台支持详细信息

v0.2.0在工作空间的边缘Photoshop MCP Server完全支持跨平台。添加了以下功能:

平台发现和抽象

platform_utils.py模块提供:

  • 平台检测函数(get_platform(), is_windows(), is_macos())
  • 特定于平台的设置(get_platform_config())
  • 特定于平台的临时文件管理(get_temp_file())
  • 平台条件分支(platform_specific解码器)
# プラットフォームに応じた処理の例
from photoshop_mcp_server.bridge.platform_utils import platform_specific

@platform_specific(
    windows_func=windows_specific_function,
    macos_func=macos_specific_function,
    default_func=default_function
)
def process_file(path):
    # プラットフォームに応じた関数が自動的に呼び出される
    pass

性能优化

  • 通过脚本高速缓存提高运行速度(平均速度提高30%)
  • 脚本执行超时设置(默认值为30秒)
  • 简化临时文件管理(自动清理)
  • 优化并行处理(在处理大量文件时加快50%)
  • 减少内存使用(大PSD文件处理时减少40%)

阶段,阶段v1.1新增功能

  • UXP Plug-in后端支持(WebSocket通信)
  • 插件打包功能
  • 安装过程显示功能
  • 扩展健康检查端点(检查UXP插件的连接状态)

阶段,阶段v1.2新增功能

缩略图生成功能

  • PSD从文件生成缩略图REST端点
  • 以指定的尺寸、形式(JPEG/PNG)生成缩略图
  • Base64返回编码图像数据
POST /generateThumbnail
{
  "path": "/path/to/file.psd",
  "width": 256,
  "height": 256,
  "format": "jpeg",
  "quality": 80,
  "bridge_mode": "uxp"
}

WebSocket流式传输

  • 实时流式传输缩略图生成进度WebSocket端点
  • 通知处理的各步骤(打开文件、缩略图生成、图像处理等)的进展状况
  • 发生错误时的实时通知
WebSocketエンドポイント: ws://localhost:5001/generateThumbnail/stream

リクエスト:
{
  "path": "/path/to/file.psd",
  "width": 256,
  "height": 256,
  "format": "jpeg",
  "quality": 80,
  "bridge_mode": "uxp"
}

レスポンス(ストリーミング):
{
  "type": "start",
  "data": { ... }
}
{
  "type": "progress",
  "data": { "step": "opening_file", "progress": 10, "message": "ファイルを開いています..." }
}
{
  "type": "progress",
  "data": { "step": "generating_thumbnail", "progress": 30, "message": "サムネイルを生成しています..." }
}
...
{
  "type": "complete",
  "data": { "width": 256, "height": 256, "format": "jpeg" }
}

阶段,阶段v2.0新增功能

Cluster模式

Cluster模式为多个Photoshop用于管理实例和分布式处理作业的功能。 它是为了有效处理大量图像处理任务而设计的。

主要功能

  • 多个Photoshop管理实例(节点)
  • 作业分配和负载分配
  • 自动故障切换
  • 健康检查和监控
  • 各种路由策略(例如,最小负载、循环、最小延迟等)

Cluster使用模式

  1. 启动调度程序
# ディスパッチャーを起動
photoshop-mcp-server start_cluster --host 127.0.0.1 --port 8001
  1. 启动节点
# ノード1を起動
photoshop-mcp-server start_node --host 127.0.0.1 --port 8002 --dispatcher 127.0.0.1:8001

# ノード2を起動
photoshop-mcp-server start_node --host 127.0.0.1 --port 8003 --dispatcher 127.0.0.1:8001
  1. API使用发送作业
POST http://127.0.0.1:8001/submit_job
{
  "job_type": "open_file",
  "payload": {
    "path": "/path/to/file.psd"
  },
  "priority": 1
}

设定例

# ディスパッチャー設定
dispatcher_config = {
    "host": "127.0.0.1",
    "port": 8001,
    "routing_strategy": "least_busy",  # least_busy, round_robin, random, lowest_latency, capability_based
    "node_timeout": 60.0,
    "job_timeout": 300.0,
    "health_check_interval": 30.0
}

# ノード設定
node_config = {
    "host": "127.0.0.1",
    "port": 8002,
    "dispatcher": "127.0.0.1:8001",
    "capabilities": ["open_file", "save_file", "export_layer", "run_action"],
    "max_concurrent_jobs": 5
}

LLM自动触摸功能

LLM自动触摸功能LiteLLM的规格化距离的幂函数。 GPT-4 Vision中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。

主要功能

  • 图像自动分析
  • 自动生成触摸参数
  • Photoshop自动执行操作
  • 自定义提示调整

LLM使用自动触摸

POST /autoRetouch
{
  "path": "/path/to/image.jpg",
  "instructions": "肌をなめらかにして、コントラストを上げてください",
  "bridge_mode": "uxp"
}

响应:

{
  "analysis": {
    "basic_info": {
      "image_type": "ポートレート",
      "main_subject": "女性",
      "overall_impression": "自然光で撮影された屋外ポートレート"
    },
    "technical_characteristics": {
      "brightness": {
        "status": "やや暗い",
        "value": -15
      },
      "contrast": {
        "status": "弱い",
        "value": -20
      },
      ...
    },
    ...
  },
  "retouch_actions": [
    {
      "type": "brightness_contrast",
      "params": {
        "brightness": 15,
        "contrast": 20
      }
    },
    {
      "type": "skin_smoothing",
      "params": {
        "strength": 30,
        "detail": 50
      }
    },
    ...
  ],
  "execution_result": {
    "status": "success",
    "actions_applied": 5,
    "execution_time": 3.5
  }
}

自定义提示示例

この画像は屋外で撮影されたポートレートです。以下の点に注目してレタッチしてください:
1. 肌をなめらかにする(強さ: 中程度)
2. 目の明るさとコントラストを上げる
3. 背景をわずかにぼかす
4. 全体的な色調を暖かみのある雰囲気に調整する

MCP客户端设置

Photoshop MCP Server打开AI助手等的MCP与客户端协作需要配置文件。

配置文件结构

配置文件通常为mcp-config/photoshop-mcp-server.json中描述的场景,使用下列步骤创建明细表,以便在概念设计中分析体量的周长:

{
  "server_info": {
    "name": "photoshop-mcp-server",
    "description": "Photoshop MCP Server for macOS and Windows",
    "version": "0.2.0",
    "endpoint": "http://localhost:5001"
  },
  "tools": [
    {
      "name": "open_file",
      "description": "Open a file in Photoshop",
      "input_schema": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "Path to the file"
          },
          "bridge_mode": {
            "type": "string",
            "description": "Bridge mode to use (applescript, powershell, uxp)",
            "default": "default"
          }
        },
        "required": ["path"]
      }
    },
    {
      "name": "save_file",
      "description": "Save the current file",
      "input_schema": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "Path to save the file"
          },
          "format": {
            "type": "string",
            "description": "File format (psd, jpg, png, tiff)",
            "default": "psd"
          },
          "bridge_mode": {
            "type": "string",
            "description": "Bridge mode to use",
            "default": "default"
          }
        },
        "required": ["path"]
      }
    },
    {
      "name": "run_action",
      "description": "Run a Photoshop action",
      "input_schema": {
        "type": "object",
        "properties": {
          "action_set": {
            "type": "string",
            "description": "Action set name"
          },
          "action_name": {
            "type": "string",
            "description": "Action name"
          },
          "bridge_mode": {
            "type": "string",
            "description": "Bridge mode to use",
            "default": "default"
          }
        },
        "required": ["action_set", "action_name"]
      }
    },
    {
      "name": "generate_thumbnail",
      "description": "Generate a thumbnail from a PSD file",
      "input_schema": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "Path to the PSD file"
          },
          "width": {
            "type": "integer",
            "description": "Thumbnail width",
            "default": 256
          },
          "height": {
            "type": "integer",
            "description": "Thumbnail height",
            "default": 256
          },
          "format": {
            "type": "string",
            "description": "Image format (jpeg, png)",
            "default": "jpeg"
          },
          "quality": {
            "type": "integer",
            "description": "Image quality (1-100)",
            "default": 80
          },
          "bridge_mode": {
            "type": "string",
            "description": "Bridge mode to use",
            "default": "default"
          }
        },
        "required": ["path"]
      }
    },
    {
      "name": "auto_retouch",
      "description": "Auto retouch an image using LLM",
      "input_schema": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "Path to the image"
          },
          "instructions": {
            "type": "string",
            "description": "Retouch instructions"
          },
          "bridge_mode": {
            "type": "string",
            "description": "Bridge mode to use",
            "default": "default"
          }
        },
        "required": ["path", "instructions"]
      }
    }
  ],
  "resources": [
    {
      "uri": "photoshop://status",
      "description": "Get server status"
    },
    {
      "uri": "photoshop://version",
      "description": "Get server version"
    },
    {
      "uri": "photoshop://plugin/status",
      "description": "Get UXP plugin status"
    }
  ]
}

配置文件部署

  1. mcp-config创建目录(如果不存在)
  2. 将上述设定文件mcp-config/photoshop-mcp-server.json保存为
  3. MCP允许客户端读取此配置文件

客户端实现示例

JavaScript(WebSocket)

// WebSocketを使用したサムネイル生成ストリーミング
const ws = new WebSocket('ws://localhost:5001/generateThumbnail/stream');

ws.onopen = () => {
  // リクエスト送信
  ws.send(JSON.stringify({
    path: '/path/to/file.psd',
    width: 256,
    height: 256,
    format: 'jpeg',
    quality: 80,
    bridge_mode: 'uxp'
  }));
};

ws.onmessage = (event) => {
  const message = JSON.parse(event.data);
  
  switch (message.type) {
    case 'start':
      console.log('サムネイル生成開始:', message.data);
      break;
    case 'progress':
      console.log(`進捗: ${message.data.progress}% - ${message.data.message}`);
      updateProgressBar(message.data.progress);
      break;
    case 'complete':
      console.log('サムネイル生成完了:', message.data);
      break;
    case 'error':
      console.error('エラー:', message.data.message);
      break;
  }
};

ws.onerror = (error) => {
  console.error('WebSocketエラー:', error);
};

ws.onclose = () => {
  console.log('WebSocket接続終了');
};

Python(REST API)

import requests
import base64
from PIL import Image
import io

# サムネイル生成リクエスト
response = requests.post('http://localhost:5001/generateThumbnail', json={
    'path': '/path/to/file.psd',
    'width': 256,
    'height': 256,
    'format': 'jpeg',
    'quality': 80,
    'bridge_mode': 'uxp'
})

if response.status_code == 200:
    data = response.json()
    # Base64エンコードされた画像データをデコード
    image_data = base64.b64decode(data['thumbnail'])
    
    # PILで画像を開く
    image = Image.open(io.BytesIO(image_data))
    
    # 画像を保存
    image.save('thumbnail.jpg')
    print(f"サムネイル生成成功: {data['width']}x{data['height']} ({data['format']})")
else:
    print(f"エラー: {response.status_code} - {response.text}")

Python(集群API)

import requests

# ジョブの送信
response = requests.post('http://localhost:8001/submit_job', json={
    'job_type': 'auto_retouch',
    'payload': {
        'path': '/path/to/image.jpg',
        'instructions': '肌をなめらかにして、コントラストを上げてください'
    },
    'priority': 2
})

if response.status_code == 200:
    data = response.json()
    job_id = data['job_id']
    print(f"ジョブ送信成功: {job_id}")
    
    # ジョブのステータス確認
    status_response = requests.get(f'http://localhost:8001/job_status/{job_id}')
    if status_response.status_code == 200:
        status_data = status_response.json()
        print(f"ジョブステータス: {status_data['status']}")
else:
    print(f"エラー: {response.status_code} - {response.text}")

活用事例

Photoshop MCP Server来修改标记元素的显示属性AI从助手和其他应用程序Photoshop进行动态观察时的轴心点。以下是一些主要的案例:

AI自动助理图像编辑

  • 基于提示的图像编辑

    • “模糊这张照片的背景,让前景的人物变得明亮”这样的自然语言指示Photoshop的作用相同
    • 使用自然语言指示复杂的编辑步骤AI表示Photoshop转换为命令执行
  • 自动批处理

    • “对文件夹内的所有图像应用相同的编辑”这样的指示统一处理多个文件
    • 自动调整图像大小、格式转换、滤镜应用等

LLM自动触摸功能

  • 图像分析和自动校正

    • AI分析图像,自动确定亮度、对比度、饱和度等最佳调整值
    • 自动执行肖像照片的皮肤修正、风景照片的色调修正等
  • 样式传输和创造性编辑

    • “把这张照片编辑成傍晚的气氛”这样的指示进行样式传送
    • AI中描述的场景,使用下列步骤创建明细表,以便在概念设计中分析体量的周长

工作流集成

  • 与其他工具协作

    • Web应用程序的图像编辑请求处理
    • 与图像管理系统协作的编辑工作流自动化
  • 后台处理

    • 无头模式下的图像处理(无UI执行)
    • 服务器环境中的海量图像处理

基于集群模式的分布式处理

  • 多个Photoshop并行实例

    • 大量的图像Photoshop分布在实例中
    • 大幅提高和提高处理速度
  • 负载均衡和冗余

    • 根据处理负荷动态作业分配
    • 在某些节点失败时继续

具体的用例

  • E商业产品图片批量处理

    • 自动去除背景、统一尺寸、添加水印等
    • 批量生成多个备选方案的产品图像
  • 摄影棚后处理自动化

    • 肖像照片的皮肤修正,自动调整色调
    • 根据客户要求应用编辑样式
  • 市场营销素材的大量生成

    • 在同一设计模板中应用不同的文本或图像
    • 为社交媒体自动生成多大小备选方案
  • 优化图像存档

    • 自动恢复和优化旧照片
    • 添加元数据并标准化图像格式

AI与助手合作

Photoshop MCP Server单击功能区上AI从助手那里Photoshop中所述修改相应参数的值。

协作机制

  1. MCP单击功能区上AI注册助手
  2. AI我的助手MCP通过协议Photoshop MCP Server通信
  3. Photoshop MCP服务器がPhotoshopを制御

示例提示

Photoshopで以下の操作を行ってください:
1. 画像ファイル "/path/to/image.jpg" を開く
2. 明るさとコントラストを調整して、画像を明るくする
3. 結果を "/path/to/output.jpg" として保存する

AI助手响应示例

Photoshopでの操作を実行します。

1. 画像ファイルを開きます...
   - ファイル: /path/to/image.jpg
   - ステータス: 成功

2. 明るさとコントラストを調整します...
   - 明るさ: +15
   - コントラスト: +10
   - ステータス: 成功

3. 結果を保存します...
   - 保存先: /path/to/output.jpg
   - 形式: JPEG
   - 品質: 90%
   - ステータス: 成功

すべての操作が正常に完了しました。

协作时的注意事项

  • AI助手必须能够访问本地文件系统
  • 建议使用绝对路径指定文件路径
  • 处理大文件可能需要很长时间
  • UXP单击功能区上的Photoshop必须已启动

故障排除

常见问题和解决办法

服务器启动时出错

问题:服务器未启动或启动后立即退出

解決策:

  • 检查端口5001是否被其他应用程序使用
    # macOS/Linux
    lsof -i :5001
    
    # Windows
    netstat -ano | findstr :5001
    
  • 启动时指定另一个端口
    photoshop-mcp-server start --port 5002
    
  • 检查日志文件
    cat ~/.photoshop_mcp_server/logs/server.log
    

UXP插件连接错误

问题: UXP插件无法连接到服务器

解決策:

  • Photoshop确认已启动
  • UXP确保已正确安装插件
  • 确保服务器和插件使用相同的端口
  • 防火墙WebSocket确认连接是否被阻止
  • 重新启动服务器Photoshop重新启动

AppleScript/PowerShell错误

问题: AppleScript在工作空间的边缘PowerShell后端出现错误

解決策:

  • Photoshop确认已启动
  • 检查脚本执行权限
    • macOS: sudo chmod +x /usr/bin/osascript
    • Windows: PowerShell查看执行策略 Get-ExecutionPolicy
  • 在调试模式下查看详细日志
    photoshop-mcp-server start --debug --foreground
    

日志文件位置

日志文件保存在以下位置:

  • macOS: ~/.photoshop_mcp_server/logs/
  • 窗户: %USERPROFILE%\.photoshop_mcp_server\logs\

主要日志文件:

  • server.log:服务器主日志
  • api.log: API记录请求和响应
  • bridge.log:后端(AppleScript/PowerShell/UXP)日志
  • cluster.log: Cluster模式日志

支持和反馈

问题没有解决的情况下,包括以下信息GitHubのIssue创建:

  • 正在使用OS(包括版本)
  • Photoshop的版本
  • 执行的命令
  • 错误信息
  • 日志文件的相关部分

许可证

MIT许可证

版权所有(C)2025 StarBozehttps://github.com/StarBoze