mirror of
https://github.com/storytold/photocraft.git
synced 2026-10-29 04:17:11 -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>
27 lines
772 B
TOML
27 lines
772 B
TOML
[package]
|
|
name = "photocraft-format"
|
|
description = "Native .pcraft document bundle: manifest + content-addressed zstd tiles"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
rust-version.workspace = true
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[dependencies]
|
|
photocraft-geom = { workspace = true }
|
|
photocraft-color = { workspace = true }
|
|
photocraft-raster = { workspace = true }
|
|
photocraft-doc = { workspace = true }
|
|
photocraft-codecs = { workspace = true }
|
|
serde = { workspace = true }
|
|
serde_json = { workspace = true, features = ["unbounded_depth"] }
|
|
thiserror = { workspace = true }
|
|
flate2 = { workspace = true }
|
|
blake3 = { version = "1.8", default-features = false, features = ["pure"] }
|
|
ruzstd = "0.9"
|
|
|
|
[dev-dependencies]
|
|
proptest = { workspace = true }
|