storytold/photocraft
60.2
Adequate · 7 November 2026
702.9k
lines of production code
Rust
primary language
3
measurements over time
What this system is
Behavioural changes
1 commit (0 fixes) modifying (repo-wide)
A change to existing behaviour in (repo-wide) — 1 commit, 4 files: “Reuse large buffers so returning freed memory to the OS doesn't slow filters (\#10479) (\#10514)” (refs \#10479, \#10514). Also in this area: 4 commits (0 fixes) modifying crates/testkit.
crates/testkit · low confidence · unverified
1 commit (0 fixes) modifying crates/plugins/examples, crates/plugins/src, examples/plugins/invert-rs
A change to existing behaviour in crates/plugins/examples, crates/plugins/src, examples/plugins/invert-rs — 1 commit, 11 files: “Sandboxed WebAssembly plug-ins: photocraft-plugins (wasmi), plugin.\* commands, Filter › Plug-ins (\#67)” (refs \#67).
crates/plugins/examples, examples/plugins/invert-rs · medium confidence · unverified
1 commit (0 fixes) modifying crates/tablet
A change to existing behaviour in crates/tablet — 1 commit, 2 files: “Pen tablets: Xwayland for a pen on Wayland, macOS monitor after NSApp (\#639, \#759) (\#1070)” (refs \#639, \#759, \#1070). Also in this area: 2 commits (1 fix) modifying crates/tablet; 1 commit adding/updating tests in crates/tablet; 34 commits (8 fixes) modifying crates/engine.
crates/algo/benches, crates/tablet, scripts · low confidence · unverified
1 commit (0 fixes) modifying crates/ui-egui/src/input/blend\_keys, crates/ui-egui/src/input/spring\_tools
A change to existing behaviour in crates/ui-egui/src/input/blend\_keys, crates/ui-egui/src/input/spring\_tools — 1 commit, 2 files: “refactor(ui-egui): move input modules under input/”.
_crates/ui-egui/src/input/blend\_keys, crates/ui-egui/src/input/spring\tools · low confidence · unverified
15 commits (2 fixes) modifying crates/algo
A change to existing behaviour in crates/algo — 15 commits (2 fixs), 33 files: “fix(algo): mesh warps filter their source when shrinking, so thin lines don't alias (\#3672) (\#3678)”; “Vanishing Point: on-canvas plane editor with Create/Edit Plane, grid and paste (\#3122) (\#3133)”; “fix(liquify): dab spacing runs on along the whole stroke, so pointer speed no longer changes the warp (\#2606) (\#4047)”; and 12 more (refs \#3672, \#3678, \#3122, \#3133, \#2606, …). Also in this area: 1 commit (0 fixes) modifying crates/geom; 3 commits (2 fixes) fixing crates/geom; 1 commit (1 fix) fixing crates/geom; 2 commits (1 fix) modifying crates/geom.
crates/geom · medium confidence · unverified
15 commits (6 fixes) modifying crates/compose
A change to existing behaviour in crates/compose — 15 commits (6 fixs), 16 files: “PSD effects fidelity: spread metric, emboss, gradient geometry, text gamma (113 -\> 118 oracle passes) (\#224) (\#224)”; “Fix flaky canvas\_geom undo test: isolate the text-gamma test in its own binary (\#135)”; “PSD fidelity: 16/32-bit colour modes, Lab, Levels, Exposure, Dissolve oracle (corpus 133 → 140, psd-tools 212 → 222) (\#202) (\#202)”; and 12 more (refs \#224, \#135, \#202, \#105, \#195, …). Also in this area: 1 commit (0 fixes) modifying (repo-wide); 4 commits (1 fix) modifying crates/vector; 3 commits (2 fixes) fixing crates/vector; 1 commit (1 fix) fixing crates/vector.
crates/vector · medium confidence · unverified
15 commits (7 fixes) modifying crates/io/src
A change to existing behaviour in crates/io/src — 15 commits (7 fixs), 15 files: “PSD export: write tagged blocks other readers can parse (\#200) (\#236) (\#236)”; “Brushes: Tilt Scale, Brush Projection, Spacing checkbox, section locks, Mixer Wetness/Mix; Brushes grid + drag and drop; options bar through tools.setBrush (\#174)”; “PSD effects fidelity: spread metric, emboss, gradient geometry, text gamma (113 -\> 118 oracle passes) (\#224) (\#224)”; and 12 more (refs \#200, \#236, \#174, \#224, \#137, …). Also in this area: 1 commit (1 fix) fixing crates/io/src/abr\_map; 13 commits (1 fix) modifying crates/io/src; 9 commits (5 fixes) fixing crates/io; 1 commit (0 fixes) modifying crates/io/src/abr\_map.
(repo-wide) · low confidence · unverified
15 commits (7 fixes) modifying crates/io/src
A change to existing behaviour in crates/io/src — 15 commits (7 fixs), 15 files: “PSD export: write tagged blocks other readers can parse (\#200) (\#236) (\#236)”; “Brushes: Tilt Scale, Brush Projection, Spacing checkbox, section locks, Mixer Wetness/Mix; Brushes grid + drag and drop; options bar through tools.setBrush (\#174)”; “PSD effects fidelity: spread metric, emboss, gradient geometry, text gamma (113 -\> 118 oracle passes) (\#224) (\#224)”; and 12 more (refs \#200, \#236, \#174, \#224, \#137, …). Also in this area: 3 commits (2 fixes) fixing crates/io/examples; 1 commit (0 fixes) modifying crates/io/examples; 13 commits (1 fix) modifying crates/io/src.
crates/engine/examples, crates/io/examples · low confidence · unverified
2 commits (0 fixes) modifying crates/engine/src/filters/validation
A change to existing behaviour in crates/engine/src/filters/validation — 2 commits, 1 file: “refactor(engine): move filters/validation.rs tests to filters/validation/tests.rs”; “refactor(engine): move the error, document state and Session impl out of lib.rs”.
crates/engine/src/filters/validation · medium confidence · unverified
206 commits (19 fixes) modifying (repo-wide)
A change to existing behaviour in (repo-wide) — 206 commits (19 fixs), 16 files: “Tools: Perspective Crop (\#1043) (\#2864)”; “Type Color Picker opens the full Color Picker; screen eyedropper with a pixel loupe (\#1232)”; “CI: workflows only call craft-common-actions at @main (\#10228)”; and 200 more (refs \#1043, \#2864, \#1232, \#10228, \#1045, …).
(repo-wide) · low confidence · unverified
3 commits (0 fixes) modifying apps/photocraft-cli
A change to existing behaviour in apps/photocraft-cli — 3 commits, 3 files: “CLI batch: skip shell-only Save and view steps inside played action sets (\#6860)”; “docs(cli): write product name as PhotoCraft in USAGE and description (\#5449)”; “Windows: start without Windows.Data.Pdf.dll; delay-load it for printing (\#5884)” (refs \#6860, \#5449, \#5884).
apps/photocraft · medium confidence · unverified
3 commits (0 fixes) modifying crates/cms
A change to existing behaviour in crates/cms — 3 commits, 8 files: “HEIF: read the nclx colour description; HLG/PQ HEICs open as linear BT.2020 32-bit (\#6752)”; “Color Lookup: PSD save keeps a .3dl/.look LUT file as loaded (\#6544)”; “docs: write product name as PhotoCraft in crate module docs (\#5455)” (refs \#6752, \#6544, \#5455). Also in this area: 1 commit (1 fix) fixing crates/heif; 7 commits (1 fix) modifying crates/codecs.
crates/heif · medium confidence · unverified
6 commits (0 fixes) modifying crates/codecs
A change to existing behaviour in crates/codecs — 6 commits, 47 files: “Clippy 1.99: chunks\_exact with a constant size -\> as\_chunks; drop a no-op Option filter”; “Camera raw: clean-room pure-Rust decoder (DNG, CR2, TIFF/EP raws) with develop pipeline (\#65)”; “Never crash: psd, codecs, format, io are panic-free (Rule 9) (\#34)”; and 3 more (refs \#65, \#34, \#25, \#71). Also in this area: 9 commits (1 fix) modifying crates/raw.
crates/raw/examples, crates/raw/fuzz · medium confidence · unverified
6 commits (0 fixes) modifying crates/ui-egui/src/panels/actions
A change to existing behaviour in crates/ui-egui/src/panels/actions — 6 commits, 1 file: “Actions: Check Spelling opened again keeps the waiting action's continuation”; “Actions: Check Spelling records and saves as the spellCheck event”; “Integration: the SVG clipboard service doc says ordinary paste reads it too; the bulk-load test checks the sets that stay loaded (\#10704, \#10601)”; and 3 more (refs \#10704, \#10601). Also in this area: 16 commits (1 fix) modifying crates/ui-egui/src.
crates/ui-egui/src/panels · medium confidence · unverified
6 commits (2 fixes) modifying assets/app-icon
A change to existing behaviour in assets/app-icon — 6 commits (2 fixs), 16 files: “app icon: nine-tailed kitsune (owner's ArtCraft drawing), Dock/taskbar/launcher wiring, palette docs”; “Release pipeline id renames and PhotoCraft branding”; “Windows taskbar icon: .exe icon id for the MSI shortcut + icon regression tests (\#248) (\#269) (\#269)”; and 3 more (refs \#248, \#269, \#4478).
assets/app-icon · medium confidence · unverified
7 commits (1 fix) modifying crates/algo
A change to existing behaviour in crates/algo — 7 commits (1 fix), 9 files: “Color Range presets: weigh dark colours like Photoshop (\#5243) (\#5293)”; “Free Transform: solid pixel stretch (edge-repeat sampling, selected-pixel bounds) (\#3867)”; “Fibers: fill an empty layer, as Photoshop does (\#5241) (\#5289)”; and 4 more (refs \#5243, \#5293, \#3867, \#5241, \#5289, …). Also in this area: 1 commit (0 fixes) modifying crates/color, crates/io/src/ora; 8 commits (0 fixes) modifying crates/compose; 1 commit (1 fix) fixing crates/color.
crates/color · low confidence · unverified
87 commits (24 fixes) modifying crates/engine
A change to existing behaviour in crates/engine — 87 commits (24 fixs), 82 files: “test(raw): a developed raw takes the Raw Defaults resolution on every open path; other files keep theirs (\#7789)”; “Fix up the merges of \#3535, \#3567 and \#6088: one catalog line per string, purge test as in \#3567”; “Layers: per-layer XMP metadata, as Photoshop's layer.xmpMetadata”; and 84 more (refs \#7789, \#3535, \#3567, \#6088, \#8302, …). Also in this area: 1 commit (0 fixes) modifying crates/doc, crates/ops; 1 commit (1 fix) fixing crates/doc; 5 commits (1 fix) modifying crates/doc.
crates/affinity/src, crates/doc, crates/paint · medium confidence · unverified
9 commits (1 fix) modifying crates/codecs/src
A change to existing behaviour in crates/codecs/src — 9 commits (1 fix), 7 files: “Codecs: refuse implausible PNG/WebP headers before allocating (\#3691) (\#3706)”; “feat(codecs): support full X11 rgb.txt color names in XPM (\#4263)”; “feat(save): File › Save keeps a JPEG's quality and a WebP's lossy/lossless encoding (\#2399) (\#4032)”; and 6 more (refs \#3691, \#3706, \#4263, \#2399, \#4032, …). Also in this area: 7 commits (2 fixes) modifying crates/codecs/src; 4 commits (3 fixes) fixing crates/codecs; 1 commit (0 fixes) modifying crates/codecs, crates/color, crates/testkit.
(repo-wide) · low confidence · unverified
Fixes
3 commits (3 fixes) fixing crates/gpu
A fix in crates/gpu — 3 commits (3 fixs), 6 files: “Fix-up for \#9182: build jobs carry their vertex entry point, and the test rules out a shared vs”; “fix(gpu): saturate effect band edges at the coordinate ceiling (\#11057)”; “Fix-up for \#9979, \#9182 and \#10837: review findings on the batch” (refs \#9182, \#11057, \#9979, \#10837). Also in this area: 11 commits (2 fixes) modifying crates/gpu.
crates/gpu/src/fx · medium confidence · unverified
Test coverage
1 commit adding/updating tests in apps/photocraft/tests; 1 commit adding/updating tests in apps/photocraft/tests/fixtures; 1 commit adding/updating tests in crates/io/tests; 12 commits adding/updating tests in crates/engine/tests; 2 commits adding/updating tests in crates/affinity/tests, crates/cms/tests.
Written by cca.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 60.
Lenses
- Code Health 87
- Architecture 95
- Maturity 70
- Readiness 72
- Security 65
- Accessibility 48
- Performance 91
Changes since last survey
- 300 commits — 237 feature/other, 63 fixes
By area
- (repo) — 116 commits
- crates/ui-egui — 85 commits
- crates/engine — 60 commits
- apps/photocraft-cli — 6 commits
- crates/algo — 5 commits
- crates/io — 5 commits
- crates/automation — 4 commits
- crates/codecs — 4 commits
- crates/compose — 3 commits
- crates/paint — 3 commits
- .github/workflows — 2 commits
- crates/raster — 2 commits
- (root) — 1 commit
- docs/atn.md — 1 commit
- docs/development.md — 1 commit
- docs/parity-checklist.md — 1 commit
- docs/scorecard.md — 1 commit
Notable commits
- fix: Fix Paint Bucket target with Gradient-style crosshair (#7994)
- fix: Fix content-aware crop targets and history labels
- fix: Fix imported gradient presets sharing selection names (#10521)
- fix: Fix-up #10360: only a click in the committing document waits for the commit
- fix: Fix-up #10396: Esc in crop_beyond_canvas hides the frame
- fix: Fix-up #10788 + #10612: build the merged batch
- fix: Fix-up #10965 (review): a continuation resumes once; a layer target checks its receiver
- fix: Fix-up #10986 with #10965: a play that changes nothing adds no history entry
- fix: Fix-up #11011: choosing Selection makes a live crop; a picked ratio fits the canvas
- fix: Fix-up #11077 (review): say that pixels past the canvas count for Empty
- fix: Fix-up #11165, #11247: the press decides a pasteboard click; a small box's centre moves it
- fix: Fix-up #11235 (review): a filter already on at the row's first draw deselects
- fix: Fix-up #11243 (review): Free Transform a Copy of a targeted mask still copies
- fix: Fix-up #11243: Free Transform a Copy of a linked layer makes no copy
- fix: Fix-up #11243: a lone copy of a linked layer joins its link group
- fix: Fix-up #9739: Reset under W x H x Resolution leaves nothing to reset
- fix: Keep unsupported Shape Blur origin in preservation regression
- fix: Merge PR #10360: fix(ui): a click during a background Free Transform commit runs when it lands (#9974)
- fix: Merge fix-up: check entity markup in main's bounded embedded-SVG parse too
- fix: Merge fix-up: the turned crop's hidden pixels after Layer 0 replaces the Background
- …and 280 more
Written by cca.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
storytold/photocraft was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 7 November 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit b837027c417fa92fa3579e663eac20126e48d6d8 — the exact code this score is about.
- Scored under rubric-2026.11.2 — the same rubric and the same method as every other entry in this index.
- Measured by Canine Code Analyzer (cca.canine.dev) using cca measure-2026.11.3+preprod-5f8314471808.