diff --git a/crates/codecs/README.md b/crates/codecs/README.md index 3e2d7d3e3..8d6ae1f80 100644 --- a/crates/codecs/README.md +++ b/crates/codecs/README.md @@ -114,8 +114,12 @@ the same. * CMYK is always written 4:4:4 (subsampled CMYK is not portable) as Adobe-inverted CMYK with an APP14 marker. * Text is not written because there is no COM-segment support. - * EXIF and XMP must each fit in one 64 KiB APP1 segment, otherwise the encoder returns an error. - Extended XMP is not written. + * EXIF and XMP must each fit in one APP1 segment (65 533 bytes with its header). Metadata that + doesn't fit is dropped and the export still succeeds, with a + `MetadataTooLarge` warning ("EXIF (… bytes) is too large for the format; it will be dropped"). + Before dropping XMP, the encoder first removes the layered-document properties + (`DocumentAncestors`, `TextLayers`) that mean nothing in a flat JPEG. Extended XMP is not + written. * **TIFF decode** * Classic TIFF and BigTIFF (version 43, 8-byte offsets), both byte orders, strips or tiles, planar configuration 1 or 2. @@ -140,7 +144,11 @@ the same. * **EXR** * Reads the first valid layer at full resolution, from its data window. * Channel names are matched by suffix, so `layer.R` counts as `R`. - * Subsampled channels and deep data are unsupported. + * Subsampled channels are unsupported. + * Deep data (scanlines or single-level tiles, compressed NONE, RLE or ZIPS) opens as a flat + image: each pixel's samples are composited into one, with + `DecodeWarning::DeepFlattened` because per-pixel depth is not kept. Deep ZIP (16-line + blocks) and deep mip-map or rip-map tiles return `Unsupported`. * Only lossless compressions are offered for writing: None, RLE, ZIP1, ZIP16 and PIZ. * **Netpbm writing** picks the subtype from the image: float gives PFM, gray gives P5, RGB gives P6, and anything with alpha or CMYK gives P7 (PAM). Writing a `.pbm` file therefore produces diff --git a/docs/architecture.md b/docs/architecture.md index 63a3bc599..81bd24065 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -434,9 +434,11 @@ psd/src/ ## 12. Automation and extensibility -- **`automation`:** an MCP server built on `rmcp`. It exposes: - - `session.list`, `doc.open`, `doc.save`, `doc.export`, `doc.inspect` (layer tree as JSON), `doc.render_preview` (PNG). - - `command.list` and `command.run(id, params)`, both generated from the registry. +- **`automation`:** an MCP server built on `rmcp`. Its tool names use underscores (the dotted + names such as `doc.open` belong to the JSON control protocol, `docs/control-protocol.md`). It exposes: + - `session_list`, `doc_open`, `doc_new`, `doc_save`, `doc_export`, `doc_inspect` (layer tree as JSON), `doc_render_preview` (PNG), `doc_select`, `doc_close`. + - `command_list`, `command_run` and `command_batch`, generated from the registry; `jobs_list` and `jobs_cancel` for background jobs. + - Bridge only (a running app): `ui_inspect`, `ui_screenshot`, `ui_pointer`, `ui_menu_invoke`, `ui_set`, `control_call`. The full list is in `docs/development.md` › MCP. - Stdio for agent CLIs, and optionally loopback TCP with a token so it can attach to a running GUI. - `AuthorizedWorkspace`, which holds independent read and write directory capabilities. Remote paths are validated relative names; engine commands that still require ambient filesystem diff --git a/docs/development.md b/docs/development.md index e354a9fd0..5b3f6f239 100644 --- a/docs/development.md +++ b/docs/development.md @@ -143,6 +143,7 @@ Tools: - `session_list` - `doc_open`, `doc_new`, `doc_save`, `doc_export`, `doc_inspect`, `doc_render_preview` (returns a PNG image), `doc_select`, `doc_close` - `command_list`, `command_run`, `command_batch` (several commands per call) +- `jobs_list` (running background jobs with progress, then recently finished ones with their result or error), `jobs_cancel` (one job by id, or every running job) - bridge only: `ui_inspect`, `ui_screenshot`, `ui_pointer`, `ui_menu_invoke`, `ui_set`, `control_call` Claude Code (`.mcp.json` in the repo root, or `claude mcp add`):