🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

摄鲸 yxj1915/dsh-shejing

MCP
yxj191538 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

用 Lightroom 引擎走完照片筛选调色归档全流程

29.7/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/29 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/yxj1915/dsh-shejing.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 38 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 50 处,展示前 50 条)
  • 写入本地文件
    src/index.mjs:81
    await mkdir(SHEJING_HOME, { recursive: true })
  • 写入本地文件
    src/index.mjs:82
    await writeFile(
  • 读取本地文件
    src/index.mjs:140
    `· 桥接入口:${BRIDGE_ENTRY} ${existsSync(BRIDGE_ENTRY) ? '✓' : '✗ 缺失'}`,
  • 读取本地文件
    src/index.mjs:141
    `· 内置 .lrplugin:${BUNDLED_LRPLUGIN} ${existsSync(path.join(BUNDLED_LRPLUGIN, 'Info.lua')) ? '✓' : '✗ 缺失'}`,
  • 读取本地文件
    src/index.mjs:144
    `· 授权 token:${TOKEN_FILE} ${existsSync(TOKEN_FILE) ? '✓' : '✗ 未生成(请在 Lightroom 里 Start Server)'}`,
  • 发起网络请求
    lib/client.js:87
    const response = await fetch(url, { headers: { accept: 'application/json' } })
  • 读取本地文件
    src/lr/install.mjs:59
    return createHash('sha256').update(await readFile(file)).digest('hex')
  • 读取本地文件
    src/lr/install.mjs:67
    entries = await readdir(dir, { withFileTypes: true })
  • 读取本地文件
    src/lr/install.mjs:81
    await stat(target)
  • 写入本地文件
    src/lr/install.mjs:139
    await mkdir(backedUpTo, { recursive: true })
  • 写入本地文件
    src/lr/install.mjs:143
    await copyFile(targetPath, path.join(backedUpTo, name))
  • 写入本地文件
    src/lr/install.mjs:148
    await mkdir(destination, { recursive: true })
  • 写入本地文件
    src/lr/install.mjs:150
    await copyFile(sourcePath, path.join(destination, name))
  • 写入本地文件
    src/lr/install.mjs:164
    await mkdir(SHEJING_HOME, { recursive: true })
  • 写入本地文件
    src/lr/install.mjs:166
    await writeFile(
  • 读取本地文件
    src/skill.mjs:63
    const source = await readFile(SKILL_BODY_URL, 'utf8')
  • 读取本地文件
    src/stages/index.mjs:85
    return readdirSync(dir)
  • 读取本地文件
    src/stages/index.mjs:102
    return JSON.parse(await readFile(file, 'utf8'))
  • 写入本地文件
    src/stages/index.mjs:660
    await writeFile(excludeFrom, JSON.stringify(args.exclude), 'utf8')
  • 读取本地文件
    src/gate/index.mjs:162
    return JSON.parse(await readFile(file, 'utf8'))
  • 写入本地文件
    src/gate/index.mjs:203
    await mkdir(path.dirname(approvedParamsFile()), { recursive: true })
  • 写入本地文件
    src/gate/index.mjs:204
    await writeFile(approvedParamsFile(), `${JSON.stringify(this.#cache, null, 2)}\n`, 'utf8')
  • 读取本地文件
    src/version.mjs:19
    const parsed = JSON.parse(readFileSync(PACKAGE_JSON, 'utf8'))
  • 发起网络请求
    src/routes.mjs:149
    async fetch() {
  • 发起网络请求
    src/routes.mjs:165
    async fetch() {
  • 发起网络请求
    src/routes.mjs:191
    async fetch(request) {
  • 写入本地文件
    src/batches.mjs:53
    await mkdir(dir, { recursive: true })
  • 读取本地文件
    src/batches.mjs:59
    return JSON.parse(await readFile(path.join(batchDir, 'manifest.json'), 'utf8'))
  • 写入本地文件
    src/batches.mjs:68
    await writeFile(file, `${JSON.stringify(manifest, null, 1)}\n`, 'utf8')
  • 读取本地文件
    src/python.mjs:37
    const info = await stat(target)
  • 读取本地文件
    src/python.mjs:39
    await access(target, constants.X_OK)
  • 读取本地文件
    src/python.mjs:49
    const info = await stat(full)
  • 读取本地文件
    src/python.mjs:51
    await access(full, constants.X_OK)
  • 读取本地文件
    src/python.mjs:81
    runtimes = await readdir(root, { withFileTypes: true })
  • 读取本地文件
    src/python.mjs:90
    files = await readdir(binDir)
  • 执行外部命令来自配置/变量
    src/python.mjs:128
    const child = spawn(python.command, [scriptPath, ...args], {
  • 读取本地文件
    src/rules.mjs:33
    await stat(target)
  • 读取本地文件
    src/rules.mjs:46
    return JSON.parse(await readFile(file, 'utf8'))
  • 写入本地文件
    src/rules.mjs:57
    await mkdir(SHEJING_HOME, { recursive: true })
  • 读取本地文件
    src/rules.mjs:58
    const seed = await readFile(SEED_RULES_FILE, 'utf8')
  • 写入本地文件
    src/rules.mjs:63
    await writeFile(RULES_FILE, seed, 'utf8')
  • 写入本地文件
    src/rules.mjs:64
    await writeFile(META_FILE, `${JSON.stringify({ seedHash, seededAt: new Date().toISOString() }, null, 2)}\n`, 'utf8')
  • 读取本地文件
    src/rules.mjs:68
    const live = await readFile(RULES_FILE, 'utf8')
  • 写入本地文件
    src/rules.mjs:85
    await writeFile(RULES_FILE, seed, 'utf8')
  • 写入本地文件
    src/rules.mjs:86
    await writeFile(META_FILE, `${JSON.stringify({ seedHash, updatedAt: new Date().toISOString() }, null, 2)}\n`, 'utf8')
  • 读取本地文件
    src/rules.mjs:96
    const before = await readFile(RULES_FILE, 'utf8')
  • 写入本地文件
    src/rules.mjs:109
    await writeFile(RULES_FILE, after, 'utf8')
  • 读取密钥环境变量
    lrbridge/dist/token.js:5
    return (process.env.LIGHTROOM_MCP_TOKEN_PATH ??
  • 读取本地文件
    lrbridge/dist/tool-handler.js:26
    const bytes = await readFile(result.file_path);
  • 发起网络请求
    src/client/index.js:84
    const response = await fetch(url, { headers: { accept: 'application/json' } })
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 照片筛选
  • 调色处理
  • 归档全流程

摄鲸 shejing:一套完整的照片工作流,用于 DeepSeek Harness 和 Adobe Lightroom Classic,流程依次为检查 → 筛选 → 整理 → 调色 → 校验 → 归档 → 复盘,并设有强制确认关卡。

README

由 DeepSeek 最新模型翻译生成
摄鲸(dsh-shejing) 一个 DeepSeek Harness 插件,用 Adobe Lightroom Classic 自己的渲染引擎与目录数据库走完一条完整照片工作流:体检 → 剔除 → 整理 → 调色 → 验收 → 归档 → 复盘。 整个设计只有一个目标:让每一次失误都变成下一次的规则,而不是变成下一次的返工。 English docs: README.md 为什么会有这个东西 这套流程是从真实事故里长出来的,不是从白板上。其中两次决定了今天的所有设计: - 25 张照片被整批染成紫红。 一套曲线参数没做单张验证就直接上了整批。那条曲线的首点 落在 (0, y) 且 y ≠ 0,导致 Lightroom 的样条在红/蓝通道上严重发散。诊断加回滚花了十几轮。 - 先调色后剔除,白调了 28 张连拍重复帧。 所以这个插件里最硬的一条规则——任何新参数组合必须先在一张上渲染、由你亲眼看过后才能批量——不是提示词里的一句话,而是由钩子强制执行、并由 DSH 原生路由给你的确认。你可以同意;模型无法伪造你的同意。
展开完整文档(README 剩余 1 节)
摄鲸(dsh-shejing)

一个 DeepSeek Harness 插件,用 Adobe Lightroom Classic 自己的渲染引擎与目录数据库走完一条完整照片工作流:体检 → 剔除 → 整理 → 调色 → 验收 → 归档 → 复盘。

整个设计只有一个目标:让每一次失误都变成下一次的规则,而不是变成下一次的返工。

English docs: README.md

为什么会有这个东西

这套流程是从真实事故里长出来的,不是从白板上。其中两次决定了今天的所有设计:

- 25 张照片被整批染成紫红。 一套曲线参数没做单张验证就直接上了整批。那条曲线的首点
落在 (0, y) 且 y ≠ 0,导致 Lightroom 的样条在红/蓝通道上严重发散。诊断加回滚花了十几轮。
- 先调色后剔除,白调了 28 张连拍重复帧。

所以这个插件里最硬的一条规则——任何新参数组合必须先在一张上渲染、由你亲眼看过后才能批量——不是提示词里的一句话,而是由钩子强制执行、并由 DSH 原生路由给你的确认。你可以同意;模型无法伪造你的同意。

七个阶段

| 阶段 | 工具 | 门禁 |
| 体检 | shejing_checkup | —(只读) |
| 剔除 | shejing_cull | 标记/移动门禁 |
| 整理 | shejing_organize | 不可逆门禁 |
| 调色 | shejing_grade | 新参数门禁 |
| 验收 | shejing_verify | —(只读) |
| 归档 | shejing_archive | 导出确认 |
| 复盘 | shejing_retro | 写入确认 |

另有 shejing_doctor(自检)与 shejing_batch_status(读账本)。

体检做连拍分组、组内清晰度与曝光跨度、类型判定(连拍 / 包围曝光 / 疑似焦点堆栈 / 全景)、高光与黑场溢出统计,并生成 contact sheet。它完全不碰 Lightroom——跑在导入之前。

剔除在源文件夹里建 可导入/ 与 非导入/ 并移动文件——同盘 rename,瞬时且可逆。
原件永不删除。

调色提供三种内置风格(A 暖调电影感 / B 清透日系 / C 浓郁黄昏)或显式参数,逐张建快照并渲染预览给你看。

环境要求

- macOS(Windows 尚未验证)
- DSH 桌面客户端(Electron 应用)或 dsh web
- Lightroom Classic 开着,且已加载本插件自带的增效工具
- Node.js ≥ 18(DSH 自带)。不需要另装 Python——DSH 自带运行时里已有 Pillow 与 numpy

安装

用 DSH 桌面客户端的插件管理器,或者:

dsh plugin --profile add dsh-shejing

插件把自己注册为 profile 的一层,并自带技能(skill),所以不需要软链接、不需要往 ~/.dsh/skills 里拷任何东西。

装完必须重启 DSH。 客户端模块的元数据会缓存到重启为止,只刷新页面不会加载浏览器半边。

第一次使用让模型调 shejing_doctor:它会报告 Lightroom 增效工具是否已同步、授权 token 是否存在、桥接端口是否在监听。

安全模型

- 未经你同意不改任何东西。 体检与验收只读。
- 只标记,不删除。 非导入/ 永久保留;删原件是你的决定,永远不是工具的决定。
- 永不写 .lrcat。 Lightroom 目录数据库只读,而且只读副本。所有改动都走 Lightroom 自己的 API。
- 永不写 ProcessVersion(那会降级照片)。
- 参数门禁没有越权开关。 验证过的参数组合会进白名单,所以同一套风格不会问你第二次。

兼容性

内置的 Lightroom 桥接是 @pired/lightroom-mcp 的 fork(MIT,上游 Automaat/lightroom-mcp),带两处修复:本地化色标名、以及 create_collection 真正使用 parent 参数。
详见 THIRD-PARTY-NOTICES.md。

开发

node scripts/build-client.mjs # 构建浏览器半边(不需要任何打包工具链)
node scripts/test.mjs # 插件注册面 + 全部门禁路径 + Python 侧测试
node scripts/regression.mjs # 真实批次的端到端回归(75 张约 15 分钟)

scripts/regression.mjs 驱动的是真实工具实现,所以覆盖到参数翻译、路径解析、账本写入,而不只是 Python 脚本。它要求设置 DSH_HOME,以免写进你真实的 ~/.dsh。

设计取舍与理由见 docs/DESIGN.md。

许可

MIT,见 LICENSE。
预览分享卡片长什么样 ↓yxj1915/dsh-shejing
分享 · DeepSeek Harness Hub
yxj1915/dsh-shejing

用 Lightroom 引擎走完照片筛选调色归档全流程

这是你的仓库?认领条目

回到顶部