Files
Dahak Builds 251573a5a4 MCP: compare the model with a reference picture (#1486) (#6416)
* claim: #1486

* Compare picture: overlap and edge offsets of the model against a reference picture (#1486)

inspect.compare_picture lays the model's silhouette over the part found in a
PNG or JPEG and slides it to the best overlap: overlap (0..1), the model's
edges against the picture's in mm at nine stations, and an overlay PNG. The
MCP tool compare_picture runs it and hands the overlay back as an image block.

inspect.silhouette grows a reusable silhouette::outline for the model side.

* chore: re-trigger checks (defaults line already present in PR body)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* i18n: carry the Compare Picture label in Arabic, Hebrew and Vietnamese too

The complete-catalog guard (every_complete_catalog_carries_every_english_message)
failed because the pending file covered only en/ja/zh; ar, he and vi are
complete catalogs and need the key as well.

* Compare picture: one uniform scale, capped fit, sturdier part finding

Review on #6416: fit no longer stretches the axes apart (width is the default,
both scales uniformly by width and reports aspect_mismatch); the fitted model
takes the same MAX_GRID cap as the picture; the border flood seeds only from
border pixels near the border's main colour, reads alpha, retries at a
stricter step, and says which case failed; the slide searches the whole
placement range instead of a tenth around the centre; the model's holes get
the picture's fill rule; crop becomes crop_px / crop_fraction with explicit
units. Pins #1486's bracket (overlap 0.865, bottom -10 mm at the upright) and
adds a regression test per problem.

* Compare picture: alpha only for a see-through border, part_fills_crop, outline-only wording

Review re-test on #6416: one translucent backdrop pixel no longer switches the read to
alpha — alpha decides only when most of the border is see-through, and any ink is then
part, so a part drawn at alpha 100 survives; part_fills_crop: true takes the crop box as
the part itself, for one view cropped tight off a board where the part takes most of the
border and the flood would keep the backdrop strip instead; a third backdrop pass compares
each pixel to the border's main colour, so a white part on (245, 245, 245) JPEG at quality
75 separates; the command, tool and docs descriptions now say the compare is outline only:
holes are not compared. A banded light backdrop stays a follow-up. A test per case.

* MCP compare: format the picture tests

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Dahak Builds <dahakbuilds@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: bherbruck <brennen.herbruck@gmail.com>
2026-11-01 18:30:18 +00:00

20 lines
583 B
TOML

[package]
name = "solidcraft-mcp"
description = "SolidCraft MCP server: JSON-RPC 2.0 over stdio, driving a headless session or the running app"
version.workspace = true
edition.workspace = true
license.workspace = true
[lints]
workspace = true
[dependencies]
solidcraft-engine = { workspace = true }
serde_json = { workspace = true }
[dev-dependencies]
# The renderer `solidcraft-cli mcp` installs, so the tests' screenshots are drawn as the server's.
solidcraft-gpu = { workspace = true }
# Synthetic reference pictures for the compare_picture test.
image = { workspace = true }