mcpField
A
atx-mcp

atx-mcp

本地服务
github.com媒体与设计04 天前更新

关于 atx-mcp

atx-mcp 是以 Rust 编写的 MCP 服务,为需要可重复修改素材的 AI Agent 提供确定性、非生成式图像编辑。它保留原始文件并追踪不可变修订,便于复现和审查编辑结果。

主要功能

  1. 01应用声明式图像变换配方
  2. 02保留原件并记录不可变修订
  3. 03裁剪、缩放、调色及图层合成
  4. 04检查图像并生成蒙版
  5. 05比较修订并导出素材

适用场景

  1. 01制作裁剪后的文章或醒目图
  2. 02生成多种社交媒体和 CMS 尺寸
  3. 03发布前移除 GPS 元数据
  4. 04审查并复现图像编辑历史

MCP 相关

该 MCP 服务使用 stdio,提供 13 种用于导入、检查、变换、预览、比较和导出图像素材的工具。MCP 客户端可对配置工作区中的素材执行配方。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
cargoatx-mcp0.6.7
ocighcr.io/gridhra/atx-mcp:0.6.7
npmatx-mcp0.6.7

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

atx-mcp

英文 | 日语 | 简体中文

atx-mcp MCP 服务 – Glama 上的质量与维护评分 在 Awesome MCP Servers 中提及

这是一款用于通用 AI Agent 的确定性(非生成式)资产转换 MCP 服务,以 Rust 编写。

它会将编辑意图——“拉平地平线,裁剪为 16:9,稍微调亮”——作为声明式转换配方执行,并将每个结果记录为不可变版本。原始资产绝不会被修改。

前后对比:倾斜的合成城市景观经过拉平、自动校正色阶并应用了细微的风格效果 倾斜校正 + 自动色阶 + 应用风格效果(完全确定性的配方)——左:输入 / 右:输出。

完整设计请参阅 docs/DESIGN.md。

使用场景

  1. 文章醒目图片

    “把这张照片摆正,并裁剪为 16:9、1600px 的醒目图片。使用 WebP。” import_asset → detect_tilt(如果照片已经接近水平,AI 会跳过校正)→ apply_transform(旋转 → 裁剪 → 调整大小 → 编码)→ export_asset。原图永远不会被改动,同一套处理方案每次都能得到相同结果。

  2. 社交媒体/CMS 多种尺寸

    “为这张照片生成 OGP、Instagram 方形图和缩略图版本。” 一张原图会并行生成 OGP 1200×630、Instagram 1080 方形图和 400px 缩略图。同一处理方案、同一修订版本具有幂等性,因此重新运行不会重复创建输出;也可以直接使用一个词作为预设名称。

  3. 安全发布

    “务必移除位置信息,但不要改动颜色。” strip_metadata(exif)会移除包括 GPS 在内的 EXIF,同时保留 ICC 配置文件。AI 也可以先检查 inspect_image 返回的 has_gps,并提前发出警告。

  4. 颜色与风格调整

    “只让天空更蓝,其他部分都保持原样。” 支持 curves / levels / hsl / white_balance、film_soft 预设,以及通过 import_asset 导入自定义 .cube LUT,再使用 lut 应用。

  5. 局部(蒙版)调整

    “只把天空稍微调暗,地面保持原样。” generate_mask 会生成蒙版(渐变、亮度范围或色相范围);将其接入调整后,使用 overlay:"mask" 调用 render_preview,即可在提交前准确查看受影响的区域。

  6. 图层合成

    “模糊这张照片的副本,并以 50% 的滤色模式混合,营造柔和光晕。” layers 堆栈结合 16 种混合模式、不透明度和蒙版,可构建柔焦等可复现的合成效果。

  7. 水印、修图与透视校正

    “把我的 Logo 印在角落,移除电线,并校正会聚的垂直线。” svg_overlay 会叠加 Logo;clone/heal 通过同时合成纹理和色调来去除瑕疵或电线;perspective 则会校正会聚的垂直线。

  8. 读取文档(OCR 预处理)

    “帮我读取这张收据照片。” / “这张幻灯片上写了什么?” detect_document 会找到页面或屏幕,并返回可直接粘贴使用的 perspective 四边形;ocr_document 预设(灰度、自动色阶、轻度锐化)和 trim 会将像素预算集中到文本上;使用 long_edge:1568 调用 render_preview,即可把模型实际能够读取的图像交给它。此处不包含 OCR 引擎:由模型负责读取,atx 只负责让像素清晰易读且可复现。detect_text_blocks 会回答决定后续处理的问题——“缩小后这些文本还能看清吗?应该在哪里裁切?”——返回按阅读顺序排列的文本块,以及可直接粘贴使用的 crop 裁切带。threshold(Otsu / Sauvola)和 ocr_binarize 则供外部 OCR 引擎使用。

  9. 验证与追溯

    “把这张图编辑前后的效果并排展示给我。” compare_revisions 会并排展示编辑前后的图像,或返回带有 mean_abs_diff 等统计数据的差异热力图。每个修订版本都会保留其溯源信息,因此可以追踪并复现文章所用任意图像的完整编辑历史——在任何机器上都能得到完全相同的字节内容。

  10. 将一张扫描图拆分为单独图像

“一页上扫描了两张装裱好的纸。把它们分别保存为两个文件,每张纸周围都保留一点装裱部分。” 没有拆分操作:模型会针对同一源修订版本,为每个部分各运行一次 apply_transform(用 crop 裁切左右两半,再用 trim 紧贴纸张边缘裁切,并通过 padding 保留一些装裱部分),然后由 export_asset 一次写出两张图。先不指定处理方案并使用 overlay:"grid" 调用 render_preview,即可读取坐标。

atx 不支持的功能——生成式编辑、RAW 冲印、基于 ML 的自动裁切,以及 OCR 本身——不在本项目范围内;路线图请参阅 docs/DESIGN.md。

安装

atx-mcp 是一个独立的单文件二进制程序,无需运行时依赖。选择以下任一方式。

1. cargo binstall(预编译二进制,无需编译)
cargo binstall atx-mcp
claude mcp add --scope user asset-transform -- atx-mcp --workspace /path/to/asset-workspace

cargo-binstall 会下载由本仓库的 CI 构建的发行版归档文件,而不是进行编译,因此对于已有 Rust 工具链的用户来说,这是最快的方式。(--scope user 会让所有项目都能使用该服务;省略此选项则仅用于当前项目。)

2. cargo install(从源代码构建)
cargo install atx-mcp

适用于 Rust 工具链支持的任何平台,包括没有预编译二进制文件的平台。还需要 C 编译器(libwebp 从其 vendored 源代码构建)。

3. 预编译二进制(无需 Rust 工具链)

安装脚本(默认安装位置为 ~/.local/bin,Windows 上为 %LOCALAPPDATA%\Programs\atx-mcp;归档文件会在解压前通过 SHA256SUMS 验证):

# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/gridhra/atx-mcp/main/scripts/install.sh | sh
# Windows
irm https://raw.githubusercontent.com/gridhra/atx-mcp/main/scripts/install.ps1 | iex

如需手动下载,请从 Releases 获取 atx-mcp-<version>-<target>.tar.gz(Windows 上为 .zip)。支持的目标平台:

平台目标三元组
macOS(Apple Silicon)aarch64-apple-darwin
macOS(Intel)x86_64-apple-darwin
Linux x86_64x86_64-unknown-linux-musl(静态链接,无需 glibc)
Linux arm64aarch64-unknown-linux-musl(静态链接,无需 glibc)
Windows x86_64x86_64-pc-windows-msvc
claude mcp add asset-transform -- ~/.local/bin/atx-mcp --workspace /path/to/asset-workspace
4. Docker

ghcr.io/gridhra/atx-mcp 是一个 FROM scratch 镜像,仅包含静态链接的二进制文件(linux/amd64 和 linux/arm64)。

claude mcp add asset-transform -- \
  docker run -i --rm -v "$PWD:/workspace" ghcr.io/gridhra/atx-mcp:0.6.7

请注意两点。必须使用 -i:该服务使用 MCP stdio 传输,需要保持 stdin 打开。另外,路径是容器内的路径:绑定挂载的目录在容器内显示为 /workspace,因此 import_asset 和 export_asset 接受的路径应为 /workspace/photos/shot.jpg 这样的路径,而不是主机路径。

5. npx(Node.js 18+,无需安装)

系统会通过 optionalDependencies 自动拉取适用于你平台的预编译原生二进制文件。

claude mcp add --scope user asset-transform -- npx -y atx-mcp --workspace /path/to/asset-workspace

也可以将其直接添加到 MCP 客户端配置中:

{
  "mcpServers": {
    "asset-transform": {
      "command": "npx",
      "args": ["-y", "atx-mcp", "--workspace", "/path/to/asset-workspace"]
    }
  }
}

--workspace(环境变量:ATX_WORKSPACE)是用作资源存储的目录。 如果目录不存在,会自动创建。

--max-concurrent-tools(环境变量:ATX_MAX_CONCURRENT_TOOLS)限制同时运行的像素处理工具调用数量(import / inspect / detect_* / apply / preview / compare / mask);默认值为 CPU 核心数。在内存受限的主机上,请调低此值。工具任务在专用线程上运行,因此图像处理期间,stdio 传输(ping、取消操作、词汇工具)仍能保持响应。

工具(13)

工具作用
list_operations简明列出配方词汇表:每项操作的单行说明、简要参数提示,以及内置预设名称。可选的 category:"geometry"|"color"|"filter"|"output" 用于筛选类别(只读)
explain_operation某项操作的完整参考资料:参数表(类型、范围、是否必需/默认值、语义)、可直接粘贴的 JSON 示例及注意事项。也可使用内置预设名称,并返回其完整操作列表。名称无效时,会按组列出有效操作和预设(只读)
import_asset将本地图像导入工作区(基于 sha256 幂等)。单个文件使用 path,最多 64 个文件的批次使用 paths(单个文件失败不会中止整个批次)。如果文件内容已是此工作区中某个配方的输出,则会通过 already_derived_from 发出警告
inspect_image检查尺寸、EXIF 摘要、ICC 配置文件、是否包含 GPS 数据、亮度统计、sharpness 分数(拉普拉斯方差,是相对值,因此应与同一主体的已知良好拍摄图像进行比较),以及用于判断“是否为同一张图片”的 perceptual_hash(dHash,16 位十六进制数字)。include_exif:true 还会以 {ifd, tag, value} 条目的形式返回所有 EXIF 字段;默认关闭,因为完整转储可能包含 GPS 坐标和姓名(只读)
detect_tilt通过 Canny+Hough(粗略估算)和投影轮廓(精细度低于 0.1°)估算倾斜角度。还会返回水平/垂直线族估算;完整评分曲线可通过 include_score_curve:true 选择返回。置信度较低时会返回“请勿校正”(只读)
detect_document通过 Canny + 轮廓检测最主要的四边形(页面、屏幕、白板、标牌),并以可用于 perspective 的 quad(tl、tr、br、bl)返回,同时提供 confidence、area_ratio、output_size_hint 和可直接粘贴的 suggested_operation。不会猜测;未找到四边形时会返回 quad:null 和原因(no_quad_found / already_rectified / low_confidence)(只读)
detect_text_blocks通过 Otsu 二值化 + 运行长度涂抹 + 连通组件检测类似文本的区块(标题、段落、表格、说明文字),按阅读顺序排列;每个区块都包含 line_count、median_line_height_px 和 ink_ratio。legibility.line_height_at_1568_px 用于说明文本缩小至长边 1568 像素时是否仍清晰可读(低于约 16 像素时通常无法辨读);legibility.recommended_bands 会将图像拆分为符合该标准的水平区域,每个条目都是可在 render_preview 前粘贴的 crop 操作(只读)
generate_mask生成确定性的灰度蒙版(linear_gradient / radial_gradient / luminosity_range / color_range),作为 PNG 版本,其尺寸与参考图像相同,可在操作的 mask 字段中引用(幂等)
render_preview以低分辨率应用配方(或 preset)(默认长边 ≤768;long_edge 可设为 256..1568,以便将清晰可读的页面交给视觉模型),并以内嵌图像形式返回。overlay:"grid"|"thirds"|"horizon" 会叠加构图辅助线;overlay:"mask"(需搭配 mask_revision_id)会用色彩标示蒙版覆盖区域(仅绘制在预览图上,不影响实际变换)。此外还会报告 estimated_vision_tokens,这是返回图像的粗略预算,按 width*height/750 计算
apply_transform以全分辨率应用配方(或 preset),并生成新版本(相同配方始终生成相同版本)。单张图像使用 revision_id,对最多 64 张图像批量执行相同配方则使用 revision_ids
compare_revisions将两个版本缩小至长边 ≤640,并合成为一张内嵌图像;可通过 layout:"side_by_side"|"stacked" 排列(用于 A/B 和处理前后视觉比较),也可使用 layout:"diff" 返回单张像素差异热力图,以及 mean_abs_diff / max_abs_diff / changed_pixel_ratio 和 ssim 分数(要求尺寸相同)。所有布局都会报告 perceptual_hash_distance,即两个 dHash 值之间的汉明距离(≤5 通常表示同一张图片经过重新编码或缩放,≥20 表示两张不同的图片)
list_assets读取版本记录(只读)
export_asset将版本写出工作区:单个文件使用 revision_id + dest_path,一次最多导出 64 个文件则使用 revision_ids + dest_dir,文件名由 filename_template 指定(默认 "{revision_id}.{ext}",也支持 {index} / {stem})。只有明确设置 overwrite:true 时才会覆盖已有文件;绝不会写入工作区存储目录,也不会通过符号链接写入

配方示例

{
  "operations": [
    { "op": "rotate", "angle_degrees": -1.8 },
    { "op": "crop", "aspect_ratio": "16:9" },
    { "op": "resize", "width": 1600 },
    { "op": "encode", "format": "webp", "quality": 82 }
  ]
}

支持的操作(29 个):auto_orient / rotate / perspective / crop(裁剪、 填充) / trim / resize(覆盖、包含、填满) / adjust / color_matrix / curves / levels / lut / white_balance / hsl / blur / median / unsharp_mask / convolve / threshold / clone / heal / svg_overlay / flip / vignette / grain / gradient_map / pixelate / auto_levels / encode(jpeg、png、webp、avif) / strip_metadata。 操作词汇有意不纳入工具架构中:调用 list_operations 获取最新目录,调用 explain_operation 获取某项操作的完整架构、 示例和注意事项。

LUT(.cube)

.cube 3D/1D LUT 是一种资源,而非图像:先导入,再在配方中指定它生成的修订版本。

  1. 使用 import_asset 导入 .cube 文件。它会以不可变修订版本的形式存储,其 mime_type: "application/x-cube"(inspect_image 会有意拒绝处理它—— 它不是图像)。
  2. 在配方中引用返回的 revision_id:
{ "op": "lut", "lut_revision_id": "rev_...", "strength": 0.8 }

strength(0..1,默认值为 1.0)与原图线性混合。由于修订版本不可变,将引用的 ID 纳入 recipe_hash 可确保变换完全确定——但这也意味着,只有在包含该 LUT 的工作区中 才能复现该配方,因此在不同机器间迁移外观时,请将 .cube 文件与配方一同移动。 引用未知 ID 会在执行任何像素处理前返回结构化错误。

SVG 叠加层(徽标和水印)

.svg 是一种矢量资源,与 .cube LUT 类似:先导入,再通过配方将其印到 栅格图像上。

  1. 使用 import_asset 导入 .svg 文件。它会以不可变修订版本的形式存储,其 mime_type: "image/svg+xml",摘要会报告 SVG 的固有尺寸(0x0 表示没有固有尺寸—— 根 <svg> 上既没有 viewBox,也没有绝对的 width/height)。inspect_image 会有意拒绝处理它:它是矢量资源,而非栅格图像。
  2. 在配方中引用返回的 revision_id:
{ "op": "svg_overlay", "svg_revision_id": "rev_...",
  "x": 24, "y": 24, "width": 320, "opacity": 0.25, "blend_mode": "normal" }

x/y 是叠加层在图像处理流水线的当前位置坐标系中的左上角(因此应将叠加层 放在调整大小/裁剪之后);允许使用负值,溢出部分会被裁剪。省略 width 和 height 时,会按 SVG 的固有尺寸栅格化;指定其中一个时,会在保持宽高比的同时缩放; 指定两者时,会拉伸至精确尺寸框——没有固有尺寸的 SVG 若未同时指定两者,会返回结构化错误。 合成采用与 layers 相同的 W3C 公式和 16 种 blend_mode 值。

SVG 中的文本

atx 从不读取系统字体:不同机器上安装的字体各不相同,会破坏逐字节可复现性。因此, 除非明确启用,否则会跳过 <text>:

{ "op": "svg_overlay", "svg_revision_id": "rev_...", "x": 120, "y": 80,
  "width": 48, "render_text": true, "font_revision_ids": ["rev_..."] }
  • render_text 默认为 false,会完全保留旧有行为(形状会渲染,字形不会渲染,结果会附带警告)。在矢量编辑器中将文本转为路径仍然有效,且不需要字体。
  • render_text:true 会使用一种内置字体 Roboto Regular (嵌入二进制文件中)绘制文本,另外还会使用通过 font_revision_ids 传入的字体 (最多 4 种)。不会加载其他字体,因此所有机器上的输出都完全相同。
  • 字体与 LUT 或 SVG 一样,属于资源:使用 import_asset 导入 .ttf / .otf 文件,摘要会报告可填入 font-family 的字体系列名称。日文和其他 CJK 文本需要导入字体——Roboto 不含 CJK 字形;所有已加载字体中缺失的字符会渲染为方框,并计入警告。inspect_image 会有意拒绝处理字体修订版本:它是资源,而非图像。
蒙版(局部调整)

蒙版是灰度图像修订版:其 BT.709 亮度就是权重,因此白色表示“以全强度应用此操作”,黑色表示“保持像素不变”。14 种色调/滤镜操作(adjust、color_matrix、curves、levels、hsl、lut、white_balance、blur、median、unsharp_mask、convolve、grain、gradient_map、auto_levels)均可接受蒙版。

  1. generate_mask 会针对参考图像以确定性方式生成蒙版,且尺寸与该图像完全相同:
kind参数选择内容
linear_gradientangle_degrees(0 = 顶部为白色并向下渐变,正值 = 顺时针)、start、end(沿轴的位置,范围 0..1,对应权重从 1→0)渐变滤镜(天空、前景)
radial_gradientcenter_x、center_y(相对位置,范围 0..1)、radius(半对角线的 0..1)、feather(额外衰减带,范围 0..1)暗角或主体聚光
luminosity_rangemin、max(0..255)、feather(范围外柔和过渡的亮度单位)高光、中间调或阴影
color_rangehue_center(0..360)、hue_width(半宽度,1..180)、feather(额外角度)一种色相类别(天蓝色、叶绿色)

你也可以通过 import_asset 导入自己的灰度图像。

  1. 将返回的 revision_id 附加到某个操作:
{ "op": "curves", "master": [[0,0],[128,168],[255,255]],
  "mask": { "revision_id": "rev_...", "invert": false, "feather_px": 8.0 } }

invert(默认值为 false)会将权重反转为 1-w;feather_px(默认值为 0.0)会按当前图像像素单位中的该高斯 sigma 模糊蒙版边缘。

  1. 使用 overlay:"mask" 和 mask_revision_id 调用 render_preview,会将权重大于 0.5 的区域染成红色,并调暗其他区域,以便在提交前检查覆盖范围。

蒙版与 LUT 一样通过修订版 ID 引用,因此适用同样的注意事项:配方哈希包含该 ID,且只有在包含该蒙版的工作区中才能复现配方。

图层

配方可以使用 layers 堆栈,而非(或同时使用)扁平的 operations 列表。图层从下至上合成;每个图层的 ops 都先针对其自身源图像运行,再混合到当前合成结果上:

{
  "layers": [
    { "source": "base", "ops": [] },
    {
      "source": { "revision_id": "rev_..." },
      "ops": [{ "op": "blur", "sigma": 8 }],
      "blend_mode": "multiply",
      "opacity": 0.6
    }
  ],
  "operations": [
    { "op": "resize", "width": 1600 },
    { "op": "encode", "format": "webp", "quality": 82 }
  ]
}
  • source 可以是 "base"(传递给 apply_transform / render_preview 的输入修订版),也可以是 {"revision_id": "rev_..."}(工作区中已有的任意其他修订版)。每个图层的源图像尺寸都必须与基础图像完全一致,否则配方会在任何像素处理开始前返回结构化错误。
  • ops 是常规操作列表,仅应用于该图层的源图像。
  • mask、blend_mode(默认值为 "normal")和 opacity(默认值为 1.0)用于控制图层与其下方图层的合成方式。
  • 混合模式为 16 种 W3C 模式之一:12 种可分离模式 normal、multiply、screen、overlay、darken、lighten、color_dodge、color_burn、hard_light、soft_light、difference、exclusion,以及 4 种不可分离模式 hue、saturation、color、luminosity。
  • 存在 layers 时,顶层 operations 将成为收尾处理阶段,在合成结果上执行一次——resize 和最终的 encode 应放在此处(encode 仍必须是最后一项,且最多出现一次)。
  • 调用 explain_operation {"operation":"layers"} 查看完整参考。

预设

预设也可以内联在配方内部,作为单个操作使用——{"op": "preset", "name": "ocr_document"}——以便将命名风格与自定义操作结合起来。宏会在任何操作运行前原位展开,因此配方哈希与手动写出预设的所有操作完全相同;包含 layers 的预设无法内联(这会返回结构化错误)。调用 explain_operation {"operation":"preset"} 查看相关规则。

apply_transform 和 render_preview 接受 recipe(原始 DSL)或 preset(来自 crates/atx-mcp/presets/ 的内置命名配方),且必须且只能指定其中一项:

分类预设功能
basicseyecatch_16_9居中裁剪为 16:9,调整为 1600px 宽,WebP q82
basicsfilm_soft柔和胶片效果:轻柔的 S 曲线,并向亮度值拉动 15%
basicsproduct_clean干净的产品照片:接近中性的白平衡、提亮色阶、轻微锐化
basicsthumbnail_square居中裁剪为 1:1,调整为 800x800,WebP q80
basicsweb_optimize在不放大的情况下适配至 2000x2000 以内,WebP q80
basicsgrayscale通过 BT.709 亮度 color_matrix 转为黑白
basicssepia通过 color_matrix 实现经典棕褐色调
filmfilm_warm暖色胶片效果:琥珀色白平衡、柔和 S 曲线、轻微颗粒
filmfilm_cool冷色胶片效果:偏蓝的白平衡、柔和 S 曲线、轻微颗粒
filmmatte_fade褪色哑光效果:通过 curves 提亮黑色,轻微降低饱和度
filmfilm_grain_strong在柔和 S 曲线上叠加浓重粗颗粒(增感/高 ISO 效果)
filmcinema_teal_orange通过定向 hsl 调整实现青橙色电影级调色
monobw_neutral通过 BT.709 亮度 color_matrix 转为中性黑白
monobw_high_contrast高对比度黑白:亮度转换加上强烈的 S 曲线
monobw_red_filter通过模拟红色滤镜转换为黑白(经典天空压暗效果)
monobw_soft柔和、低对比度的黑白效果(哑光曲线)
monoduotone_navy_cream通过 gradient_map 实现海军蓝到奶油色的双色调
editorialproduct_white自动拉伸色阶、中性白平衡、最终锐化
editorialfood_vivid提升暖橙色/黄色的饱和度,并增强对比度
editorialportrait_soft柔和哑光曲线、轻微降低饱和度、细腻暗角
editoriallandscape_punch提升对比度和饱和度,并添加轻微暗角
editorialarchitecture_clean自动调整色阶、锐化、轻微降低饱和度(搭配手动 perspective 操作使用)
socialog_1200x630Open Graph 分享图片:裁剪为 1200:630,调整为 1200px 宽,WebP q82
socialx_wide_16_9X (Twitter) 宽幅卡片:裁剪为 16:9,调整为 1600px 宽,WebP q82
socialinstagram_square_1080Instagram 方形帖子:裁剪为 1:1,调整为 1080x1080,WebP q85
socialinstagram_portrait_4_5Instagram 竖版帖子:裁剪为 4:5,调整为 1080x1350,WebP q85
socialyoutube_thumb_1280x720YouTube 缩略图:裁剪为 16:9,调整为 1280x720,WebP q85
socialhero_2400大幅主视觉/横幅图片:适配至 2400px 以内,WebP q85
building blocksoft_vignette单独添加细腻暗角,用于叠加在其他效果之后
building blockgrain_fine单独添加轻微、细腻且确定性的颗粒,用于叠加
ocrocr_document让页面/幻灯片/白板照片更易被视觉模型识别:转为灰度、自动调整色阶、轻微锐化(不进行二值化)
ocrocr_receipt处理有噪点或褪色的收据:转为灰度、中值去噪、加强自动色阶、锐化
ocrocr_binarize使用 Sauvola 自适应二值化,供外部 OCR 引擎使用(若由视觉模型读取结果,优先使用 ocr_document)
ocrocr_dark_ui处理深色模式截图:先用 trim 裁掉边缘,再反相为深色文字浅色背景的灰度图

预设只是语法糖:它会解析为对应的配方,并经过常规处理管线;recipe_hash(幂等键)根据解析后的配方计算,因此,调用预设与使用等效原始配方会得到相同的修订版本。

保证

  • 确定性:相同的输入和配方始终会生成逐字节完全相同的输出(通过黄金测试进行回归检查)
  • 幂等性:配方会经过规范化处理(键排序,f64 值量化到 1e-6 网格),并使用 sha256 进行哈希。如果 (input revision, recipe hash) 与现有配对匹配,则返回现有版本,而不是创建新版本
  • 保护原始文件:objects/ 是只追加的内容寻址存储,不提供删除或覆盖 API

开发

cargo test --workspace     # unit + integration + property (proptest) tests
cargo clippy --workspace --all-targets -- -D warnings

Crate 布局:atx-core(配方/转换引擎)/ atx-geometry(倾斜检测)/ atx-store(不可变资源存储)/ atx-mcp(rmcp stdio 服务)。

这三个库以更长的名称发布在 crates.io 上,因为那里的 atx-core 是一个无关项目:

目录发布名称代码中的库名称
crates/atx-coreasset-transform-coreatx_core
crates/atx-geometryasset-transform-geometryatx_geometry
crates/atx-storeasset-transform-storeatx_store
crates/atx-mcpatx-mcpatx_mcp(二进制文件 atx-mcp)

因此,要将转换引擎用作库,请依赖 asset-transform-core = "0.6.7",并编写 use atx_core::…。

名称

“atx”是 Asset Transform 的缩写;末尾的 x 沿用了“transform”的常见简写形式(如 xform / tx)。选择这个名称,是因为它简短、易于输入,可用作二进制文件名和目录前缀(crates/atx-core 等);它与 PC ATX 规格或 Markdown ATX 风格标题无关。crates.io 上的软件包使用完整名称(asset-transform-core 等)。

许可证

MIT。请参阅 LICENSE。

二进制文件中附带的非 crate 内容(打包的 Roboto Regular 字体)及其来源和许可证列于 THIRD_PARTY_NOTICES.md。

如果 atx-mcp 为你节省了时间,可以请我喝杯咖啡 ☕

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。