LightroomForge
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
LightroomForge · 影调锻造厂
简体中文 · English
An MCP server that gives AI agents full control of Adobe Lightroom Classic — catalog, develop engine, and masks.
一个让 AI 智能体直接操控 Adobe Lightroom Classic 的 MCP 服务:目录检索、全套显影参数、几何蒙版与 AI 蒙版、预设、预览与导出。
名字由来:Forge(锻造)——影调不是套出来的,是一档一档锻出来的。LightroomForge = 在 Lightroom 里锻造影调的工作台。
目录
Related MCP server: Lightroom MCP Elite
这是什么
Lightroom Classic 本身不提供任何外部 API。LightroomForge 由两部分组成:
Lightroom Lua 插件(
lightroom-python-bridge.lrdevplugin)——运行在 Lightroom 内部,通过目录级直写(applyDevelopSettings)绕过 UI 控制显影参数与蒙版;Python MCP 服务(
mcp_server/)——把插件能力包装成 167 个 MCP 工具,任何支持 MCP 的 AI 客户端(WorkBuddy、Claude Desktop、Cursor 等)都能直接调用。
关键设计:能力在插件里,MCP 只是传输层。即使 MCP 客户端出问题,直接用 lightroom_sdk 也能连上插件干活。
能力总览
模块 | 工具数 | 能力 |
| 15 | 搜索/选中照片、元数据、收藏夹、关键词、评分、在修改照片模块打开、导出 JPEG/TIFF、导入(受限,见已知限制) |
| 133 | 全套显影参数(曝光/对比/HSL/色彩分级/校准/锐化/降噪/镜头/效果/曲线)、批量读写、蒙版全套(几何 + AI 选区 + 图像蒙版)、自动色调/白平衡、Process Version |
| 4 | 列出/套用预设(转调 LR 原生预设引擎)、创建/删除预设(直写 XMP) |
| 5 | 单张/批量/对比预览渲染(JPEG) |
| 3 | RGB / 亮度直方图分析(量化自检用) |
| 4 | 连接状态、重连、热更新 |
顶层 | 3 |
|
特色能力:
蒙版免手拖:线性/径向/画笔蒙版的几何坐标可直写,配合
zero/full两点式定位;AI 蒙版:天空/主体/背景/物体/人物可直接创建;山脉/水面/人物等景观元素可通过
develop_create_image_mask直接写入(详见蒙版体系);本地参数自动换算:蒙版调整参数直接传 UI 值(-100..100、曝光 EV),插件自动转换为目录量纲;
写入门哨兵:LR 写锁拥挤时会静默丢弃写入——本项目所有写操作都会检测并显式报错,绝不假成功。
配合 skill 的自动化修图(探索中)
本项目提供的是能力层(MCP)——能读、能写、能建蒙版、能出预览。至于「怎么调」——诊断素材、定风格、编排蒙版、量化自检——属于 skill 的方法论层。两层合起来,可以做到一定程度的全自动修图。
下面就是作者本人跑出来的结果(北疆雪山湖,一张 RAW):

原片(上)vs AI 全自动调色(下):天空压暗青、雪山去朦胧加锐、地面降曝、草地生成斜射光斑——全程零人工操作,参数由 AI 看片后自己决定。

MCP 直写落进 Lightroom 的蒙版组:天空暗青、雪山去朦胧加锐、地面压暗、草地光斑、山体受光、水面(water-bridge-test)——全部由 AI 创建,没有手拖一次。
需要坦白的是:作者的 skill 目前仍在探索阶段,这套全自动流程的最终效果离「出片」还有相当距离——上图基本就是当前水平(甚至不算这张片子的最好版本),请把它当能力验证而不是作品来看。
所以这里只是抛砖引玉:能力层已经铺好、坑也踩平了,方法论那半张图,欢迎各位用自己的审美和方案去补。如果你跑出了更好的结果,非常欢迎回来分享。
系统架构
┌─────────────────┐ MCP(stdio) ┌──────────────────────┐
│ AI 客户端 │ ◄────────────► │ Python MCP Server │
│ (WorkBuddy 等) │ │ mcp_server/ (167 工具)│
└─────────────────┘ └──────────┬───────────┘
│ JSON over TCP(双 socket)
│ 端口见 lightroom_ports.txt
┌──────────▼───────────┐
│ Lightroom Lua 插件 │
│ 单/双 socket + 路由 │
└──────────┬───────────┘
│ LrApplication / LrDevelopController
┌──────────▼───────────┐
│ Lightroom Classic │
│ 目录库 .lrcat │
└──────────────────────┘为什么是双 socket:Lightroom 的 LrSocket 单向,发和收必须分开两条连接;MCP 层用 LRBRIDGE_PORT_FILE(或自动发现)定位端口文件。
环境要求
项目 | 要求 |
Lightroom Classic | 支持 SDK 的版本(本项目在 Windows / LR 2024-2026 系列实测;Process Version 15.4+) |
Python | 3.10+(开发环境 3.13) |
操作系统 | Windows / macOS(路径逻辑已跨平台) |
依赖 | 见 |
安装
1. 安装 Lightroom 插件
Lightroom → 文件 → 增效工具管理器 → 添加,选择 lightroom-python-bridge.lrdevplugin 文件夹。
或手动复制到:
Windows:
%APPDATA%\Adobe\Lightroom\Modules\lightroom-python-bridge.lrdevpluginmacOS:
~/Library/Application Support/Adobe/Lightroom/Modules/lightroom-python-bridge.lrdevplugin
2. 启动桥接
插件默认 autoStart=true:加载后自动启动、自动注册全部命令、零操作。
备用入口(自动启动失败时):文件 → 增效工具额外功能 → Start Python Bridge。
启动成功后插件目录内会生成 lightroom_ports.txt(两行端口号,send/recv)。
3. 安装 Python 依赖
cd LightroomForge-MCP
python -m venv .venv
# Windows
.venv\Scripts\python -m pip install -r requirements.txt
# macOS/Linux
.venv/bin/python -m pip install -r requirements.txt4. 配置 MCP 客户端
在客户端的 MCP 配置里加入(路径换成本机实际路径):
{
"mcpServers": {
"lightroom": {
"command": "D:/LightroomForge-MCP/.venv/Scripts/python.exe",
"args": ["D:/LightroomForge-MCP/run_mcp.py"],
"env": {
"LRBRIDGE_PORT_FILE": "D:/LightroomForge-MCP/lightroom_ports.txt"
}
}
}
}
LRBRIDGE_PORT_FILE可省略——客户端会自动在「项目根目录 / Lightroom Modules 插件目录」里找最新的端口文件。
5. 验证
system_status返回 connected: true 即打通。若失败,看故障排查。
快速上手
典型会话(AI 视角):
1. catalog_search_photos(filename="DSC01445") → 找到照片 ID
2. catalog_open_in_develop(photo_ids=["140279"]) → 切到修改照片模块
3. develop_auto_tone() → 自动定调
4. develop_set_parameters({"Exposure2012": 0.3, "Contrast2012": 25, "Saturation": -12})
5. develop_create_linear_mask(...) → 天空/地面渐变
6. preview_generate(photo_id="140279", size=1024) → 拉预览看效果
7. histogram_analyze_current() → 量化自检
8. catalog_export_photos(photo_ids=[...], output_dir="/out", format="jpeg")用 SDK 直连(不经过 MCP,适合脚本与调试):
import asyncio
from lightroom_sdk import LightroomClient
async def main():
c = LightroomClient()
await c.connect()
r = await c.execute_command("develop.getSettings", {"photoId": "140279"}, timeout=30)
print(r)
await c.disconnect()
asyncio.run(main())
lightroom_run_command(command, params)可以把任意已注册的 Lua 命令直接透传——插件新增能力永远不需要等 Python 侧更新。
工具参考
目录 catalog_*
工具 | 说明 |
| 按文件名/关键词/评级/日期搜索 |
| 当前选中照片 |
| UI 驱动类操作的前置:把照片切到修改照片模块 |
| 正式导出(JPEG/TIFF,尺寸/质量/目录) |
| 导入(受限,快速失败,见已知限制) |
| 元数据与组织结构 |
| 写入元数据 |
显影 develop_*(133 个)
按类别(全部支持批量读写,develop_batch_get_settings / develop_batch_apply_settings):
类别 | 代表工具 |
基础 |
|
色彩 |
|
曲线 |
|
色彩分级 |
|
校准 |
|
细节 |
|
镜头 | 配置文件开关、手动畸变、暗角、去边 |
效果 |
|
管理 |
|
蒙版 develop_*mask*
工具 | 说明 |
| 通用创建(类型 + 参数) |
| 经 |
| AI 选区:subject / sky / background / objects / people(异步计算,带 verified 字段) |
| 景观元素蒙版:山脉 50002 / 水面 50007 / 人物 20036 等,目录级直写 |
| 蒙版组读改删 |
| 蒙版参数诊断 |
| 面板与重置 |
预设 / 预览 / 直方图
工具 | 说明 |
| 走 LR 原生预设引擎(支持自适应预设,AI 蒙版会被重新计算) |
| 直写 |
| JPEG 预览渲染 |
| 直方图统计(p1/p50/p99、死黑/死白占比) |
蒙版体系详解
三种蒙版
类型 | 数据结构 | 创建方式 |
几何蒙版(线性/径向/画笔) |
|
|
AI 选区 |
|
|
范围蒙版(亮度/颜色) | RangeMask 字段 |
|
景观元素子类型 ID(实测)
ID | 元素 | ID | 元素 |
| 山脉 |
| 水面 |
| 人物 |
| 植被/地面等(来自 Adobe 自适应预设,未逐一验证) |
量纲约定(重要)
蒙版局部参数直接传 UI 值,插件自动换算:
曝光:EV(如
0.5),内部存EV/4其余(对比/清晰度/去朦胧/锐化/色温/饱和…):-100..100,内部存
/100
直接传目录量纲会被 LR 静默丢弃——这是本项目最常踩的坑,已在 _build_correction_group 统一处理。
AI 蒙版的位图机制
AI 蒙版的位图不在设置文本里,而是存在 <目录名>.lrcat-data(RocksDB blob),通过 MaskDigest 引用:
带 digest 的组(从既有蒙版克隆
InputDigest/MaskDigest/FullMaskSize/Origin/ReferencePoint/WholeImageArea)→ 即刻有效;无 digest 的裸组 → 组存在、面板可见,但 LR 不会自动计算位图(渲染、切蒙版工具、直写都不触发);
真正的「新照片自动算」走 预设套用路径:自适应预设(XMP)里不带
MaskDigest,套用时会触发 AI 重算。preset_apply已打通这条路。
注意:LR 只在启动时扫描
Develop Presets目录,新写入的预设需重启 LR 才能被preset_list看到。
蒙版组的读-改-写铁律
getDevelopSettings() 不返回 MaskGroupBasedCorrections。任何「读出全部组 → 追加 → 写回」的流程,读必须来自目录库:
# 正确姿势(示意):从 .lrcat 解析现有组,再整表写回
groups = parse_groups_from_catalog(catalog_path, photo_id) # SQLite 读取 + 解析 Lua 表文本
groups.append(new_group)
await client.execute_command("develop.createImageMask",
{"subCategoryId": 50002, "existingGroups": groups})examples/create_ai_image_mask.py 里有可用的解析器实现。
已知限制
限制 | 表现 | 替代方案 |
| 底层 API( | 用 LR UI 导入 / 建虚拟副本;或磁盘复制 + 导入 |
AI 蒙版裸组不重算 | 见上文 | 克隆 digest(同内容照片)或走自适应预设 |
预设目录仅启动时扫描 | 新预设不可见 | 重启 LR |
写锁拥挤静默跳过 | 已加哨兵:现在会显式报错 | 重载增效工具或重启 LR 清锁 |
| 只写标量与曲线 | 用 LR 存预设,或用 |
单客户端 | 桥接为单连接设计,多会话会互相抢 | 同一时间只用一个客户端 |
故障排查
桥接连不上
看端口文件是否存在且新鲜:插件目录 / 项目根目录的
lightroom_ports.txt检查端口是否被占:
netstat -ano | findstr <端口>(历史坑:迅雷等下载器抢占端口)重载插件:
增效工具管理器 → 重载增效工具(桥会自动重启)插件日志:
%LOCALAPPDATA%\Adobe\Lightroom\Logs\LrClassicLogs\LightroomPythonBridge.log
写入"成功"但目录没变化
写锁被僵尸任务侵占。本项目所有写 handler 都带 executed 哨兵,会报 write gate skipped——看到这个错误,重载增效工具;仍不行就重启 LR。
蒙版没效果
确认量纲:UI 值不是目录值;
确认
MaskActive=true、组CorrectionActive=true;AI 蒙版确认
MaskDigest存在(目录库查Adobe_imageDevelopSettings.text)。
开发与热更新
# 启动
python -m mcp_server.main # 推荐
python run_mcp.py # 等价入口两部分的热更新策略:
改动位置 | 生效方式 |
| 调用 |
|
|
| 重启 MCP 客户端 |
新增 Lua 命令只需两步:把 handler 写进对应模块 + 调 system.reloadModules——路由器有动态分发兜底(module.fn 约定从模块表找函数),不需要改注册表。
调试:Lua 侧 logger:info(...) → 插件日志;Python 侧 logging → 客户端 stderr;直连调试用 lightroom_sdk(见快速上手)。
更深入的架构约定与踩坑记录见 docs/DEVELOPMENT.md。
目录结构
LightroomForge-MCP/
├── README.md 中文(默认)
├── README.en.md 英文
├── assets/ README 配图(前后对比、蒙版面板)
├── LICENSE Apache-2.0
├── NOTICE 上游项目致谢
├── requirements.txt
├── run_mcp.py MCP 服务入口
├── mcp_server/ 167 个 MCP 工具
│ ├── main.py 组合入口 + 能力清单
│ ├── servers/ system / catalog / develop / preview / presets
│ ├── shared/ 重连与命令执行
│ └── middleware/ 错误映射
├── lightroom_sdk/ TCP 客户端 SDK(可独立使用)
├── lightroom-python-bridge.lrdevplugin/
│ ├── PluginInit.lua 注册表 + 热更新 + 自动启动
│ ├── CommandRouter.lua 分发(含动态兜底)
│ ├── SimpleSocketBridge.lua 双 socket 主循环
│ ├── MessageProtocol.lua JSON 编解码
│ ├── CatalogModule.lua 目录 / 导入导出 / 切模块
│ ├── DevelopModule.lua 显影 + 蒙版(含 AI 图像蒙版)
│ ├── PreviewModule.lua 预览渲染
│ └── PresetModule.lua 预设
├── docs/
│ ├── API_REFERENCE.md
│ ├── API_DEVELOP_REFERENCE.md
│ └── DEVELOPMENT.md
└── examples/
├── preview.py
└── create_ai_image_mask.py致谢与许可
本项目是合并版,吸收了两个上游开源项目的设计与代码:
lightroom-python-bridge(noopz)——Lua 插件骨架、双 socket 桥、MCP 服务框架;
@mskalski/lightroom-mcp——导入/导出/预设管理的 API 使用方式与任务模型经验。
合并、修复与新增(2026-10):任务模型适配、JSON 编解码修复、蒙版量纲换算、AI 图像蒙版直写、预设管理、热更新、写门哨兵、UUID 修复。
License: Apache-2.0(见 LICENSE),上手即用,改动请保留版权声明。
This server cannot be deployed
Maintenance
Related MCP Connectors
214 tools for AI agents over one MCP endpoint: image, video, audio, 3D, data, storage, mail, GPUs.
AI-cull, edit and export RAW photos locally with the imagic desktop app, from any MCP client.
Build and run AI workflows, agents, data tables and 1000+ API integrations from any MCP client.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables AI agents to control Adobe Lightroom Classic on macOS for professional photo editing and catalog management. It allows users to inspect photos, apply develop settings, and automate workflows through a secure local bridge without direct catalog database manipulation.2595MIT
- AlicenseCqualityCmaintenanceEnables AI agents to control Adobe Lightroom Classic develop settings, manage presets and catalogs, and perform round-trip handoffs with Adobe Photoshop for advanced retouching. Provides native socket bridging for exposure, color grading, search, ratings, keywords, collections, and export workflows.40MIT
- AlicenseBqualityBmaintenanceLets AI agents drive a running Adobe Photoshop: 135 tools behind a 10-tool facade, a UXP bridge that keeps working while Photoshop shows a dialog. Works with every UI language Adobe ships and checks its work by sight. A large skills library, built for Adobe's generative features: Generative Fill, Expand, Upscale, Firefly and partner models.4135480 npm5Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to run cross-platform batch photo-processing workflows—including RAW decoding, adjustments, noise reduction, white balance, LOG restoration, EXIF tagging, deduplication, selection, HTML galleries, folder watching, and presets—through a unified versioned JSON contract. It also exposes MCP tools for processing, suggestions, autopilot, indexing, search, selection, HDR, face blurring, and more.MIT