mirror of
https://github.com/storytold/photocraft.git
synced 2026-10-24 09:57:08 -06:00
* PSD: reject a header with zero width or height (#519) A 0xN header opened as an empty document and saved back as another zero-sized PSD or .pcraft. Header::validate now requires at least 1x1 (the spec range starts at 1), and PSD export validates the header so a zero-sized canvas is never written. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * .pcraft: documents with deeply nested groups load again (#517) serde_json's 128-level recursion limit made bundles with 40 or more nested groups unreadable after a successful save. The manifest is now parsed with that limit disabled behind a linear JSON depth check, layers are decoded and converted one level at a time with small stack frames, and groups may nest up to MAX_GROUP_DEPTH (100) levels, which load and save within a few hundred KiB of stack. Saving a deeper document fails instead of writing a bundle that can't be opened. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Export: convert non-sRGB RGB to sRGB for formats without a profile (#522) GIF, BMP, QOI, TGA, ICO and Netpbm can't embed ICC, so a linear-light or Display P3 document was written with values that only meant something under the dropped profile (a linear EXR came out dark). export_flat now converts such RGB to sRGB through photocraft-cms (perceptual, as Quick Export does) for every photocraft_io::export route. The EXR/HDR linear conversion shares the same banded helper. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Export: composite transparency over white for formats without alpha (#521) The CLI, MCP, Save As, Layers to Files and Layer > Export As dropped the alpha channel when writing JPEG (or Radiance HDR), exposing the colours stored under transparent pixels, while Export As and Quick Export composite over white. export_flat now flattens over white too (no ink for CMYK) and says so in its warnings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>