mirror of
https://github.com/storytold/photocraft.git
synced 2026-10-14 19:26:51 -04:00
* raw: clean-room camera raw decoder and developer (photocraft-raw) A new standalone crate (no workspace deps, wasm-safe, no unsafe) written from TIFF 6.0, TIFF/EP, the DNG 1.7 spec, ITU-T T.81 Annex H and published demosaicing papers: - Lossless JPEG (LJ92) decoder: predictors 1-7, point transform, restart intervals, combined Huffman+extra-bits fast table. - DNG: uncompressed (8-16 bit, packed) and LJ92, strips and tiles, CFA and LinearRaw, linearization, black level (repeat, deltas), white level, active area, default crop, ColorMatrix/CameraCalibration/ForwardMatrix interpolation by CCT, AnalogBalance, AsShotNeutral/WhiteXY, BaselineExposure, orientation. - CR2 (LJ92 slices, SensorInfo borders, ColorData as-shot WB, measured black) and TIFF/EP raws (NEF/ARW/PEF uncompressed or LJ92, incl. Sony lossless ARW tiles, Nikon/Sony documented black and WB tags). - Develop: black/white scaling, WB with highlight clipping, bilinear / Malvar-He-Cutler / AHD demosaic (rayon bands, sequential on wasm), camera -> XYZ D50 -> ProPhoto, exposure, gamma 1.8, 16-bit, orientation. - Embedded JPEG preview finder; clear Unsupported errors for CR3, RAF, ORF, RW2, vendor-compressed NEF/ARW/PEF, lossy/JXL/float DNG, X-Trans. - Limits checked before every allocation; testgen feature with an LJ92 encoder and DNG/CR2/TIFF-EP writers; round-trip, colour-reference, truncation and corruption tests. Registered as a standalone crate in xtask layers. Co-Authored-By: Claude Opus 5.5 <[email protected]> * io: open camera raws through photocraft-raw (16-bit ProPhoto), preview fallback Co-Authored-By: Claude Opus 5.5 <[email protected]> * raw: DNG GainMap opcode, fuzz targets, stress tools; open raws from the apps - Apply DNG OpcodeList2 GainMap (lens shading, e.g. phone DNGs); report other opcodes. - cargo-fuzz targets (develop, ljpeg) and a mutation stress example. - Raw extensions in the desktop/web open dialogs and the batch folder list. - file.open returns the import notes (how a raw was developed, preview fallback). - codecs: the camera raw refusal points at photocraft-raw. Co-Authored-By: Claude Opus 5.5 <[email protected]> * raw: clippy 1.99 (is_multiple_of, clamp) Co-Authored-By: Claude Opus 5.5 <[email protected]> --------- Co-authored-by: Claude Opus 5.5 <[email protected]>
70 lines
1.9 KiB
TOML
70 lines
1.9 KiB
TOML
[workspace]
|
|
resolver = "3"
|
|
members = ["crates/*", "apps/*", "xtask"]
|
|
default-members = ["crates/*", "apps/photocraft-cli", "xtask"]
|
|
|
|
[workspace.package]
|
|
version = "0.1.1"
|
|
edition = "2024"
|
|
license = "MIT OR Apache-2.0"
|
|
rust-version = "1.90"
|
|
|
|
[workspace.dependencies]
|
|
# internal
|
|
photocraft-geom = { path = "crates/geom" }
|
|
photocraft-color = { path = "crates/color" }
|
|
photocraft-cms = { path = "crates/cms" }
|
|
photocraft-raster = { path = "crates/raster" }
|
|
photocraft-doc = { path = "crates/doc" }
|
|
photocraft-ops = { path = "crates/ops" }
|
|
photocraft-psd = { path = "crates/psd" }
|
|
photocraft-codecs = { path = "crates/codecs" }
|
|
photocraft-raw = { path = "crates/raw" }
|
|
photocraft-compose = { path = "crates/compose" }
|
|
photocraft-gpu = { path = "crates/gpu" }
|
|
photocraft-paint = { path = "crates/paint" }
|
|
photocraft-algo = { path = "crates/algo" }
|
|
photocraft-io = { path = "crates/io" }
|
|
photocraft-text = { path = "crates/text" }
|
|
photocraft-vector = { path = "crates/vector" }
|
|
photocraft-format = { path = "crates/format" }
|
|
photocraft-automation = { path = "crates/automation" }
|
|
photocraft-engine = { path = "crates/engine" }
|
|
photocraft-ui-egui = { path = "crates/ui-egui" }
|
|
photocraft-testkit = { path = "crates/testkit" }
|
|
|
|
# external
|
|
thiserror = "2"
|
|
serde = { version = "1", features = ["derive", "rc"] }
|
|
serde_json = "1"
|
|
arc-swap = "1"
|
|
bytemuck = { version = "1", features = ["derive"] }
|
|
flate2 = { version = "1", default-features = false, features = ["rust_backend"] }
|
|
image = { version = "0.25", default-features = false }
|
|
proptest = "1"
|
|
eframe = { version = "0.36", default-features = false }
|
|
egui = "0.36"
|
|
egui_kittest = "0.36"
|
|
rfd = "0.17"
|
|
log = "0.4"
|
|
rayon = "1"
|
|
criterion = { version = "0.5", default-features = false }
|
|
getrandom = "0.3"
|
|
|
|
[workspace.lints.rust]
|
|
unsafe_code = "forbid"
|
|
|
|
[workspace.lints.clippy]
|
|
dbg_macro = "warn"
|
|
todo = "warn"
|
|
|
|
[profile.dev.package."*"]
|
|
opt-level = 2
|
|
|
|
[profile.dev]
|
|
opt-level = 1
|
|
|
|
[profile.release]
|
|
lto = "thin"
|
|
codegen-units = 1
|