* Magic Eraser and Background Eraser engine commands paint.magicEraser erases the wand region (tolerance, anti-alias, contiguous, sample all layers, opacity) to transparency, tile by tile in parallel; paint.backgroundEraser erases colours similar to the one under the brush hotspot (continuous / once / background swatch sampling, discontiguous / contiguous / find-edges limits, tolerance, protect foreground colour). Both compare and erase in the layer's own channels at any depth, respect the selection, turn the Background into Layer 0 like Photoshop, and are one undo step. The Magic Eraser paints the background colour on layers with locked transparency. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Magic Eraser and Background Eraser tools in the Eraser group Shift+E / E cycles Eraser, Background Eraser and Magic Eraser; the toolbar flyout lists all three. Options bars: Magic Eraser tolerance, anti-alias, contiguous, sample all layers and opacity; Background Eraser sampling toggles, limits, tolerance and protect foreground colour. The Background Eraser cursor always shows its sampling hotspot. Icons are derived from Lucide's eraser (ISC), recorded in ATTRIBUTION.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Image Rotation, Canvas Size, Crop, Trim and Image Size move vector geometry Canvas-wide operations remapped only pixels: type, shape and smart-object transforms, vector masks, saved/work paths, guides, slices, notes and Count/Ruler marks stayed put, so they jumped back on the next re-render. New engine module canvas_geom applies the canvas map to all non-pixel geometry. 90°/180°/flip turns remap every pixel surface exactly (incl. type/shape/smart/fill caches and smart filter masks) and move geometry through the matching affine; guides swap orientation under 90° turns; rect/ellipse/line live shapes stay live; gradient fill angles follow. Canvas Size/Crop/Trim translate geometry (shapes re-render for the new canvas), Image Size scales it and re-renders vectors, Arbitrary rotation also moves unlinked vector masks and document marks. Layer effect angles stay (Global Light), as in Photoshop. Tests compare the CPU composite of a rotated document (type, shapes, vector mask, smart object) against the rotated flattened original, also after re-rendering everything from geometry, at 8/16/32-bit RGB, CMYK and Gray. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Magic Eraser: edit encoded tile bytes in parallel (24 MP: 1260 -> 375 ms) Tiles are copied out as encoded bytes and only the touched samples are decoded, so the parallel workers do all the work and the serial write-back is a memcpy. The ignored bench prints a phase breakdown. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
5.9 KiB
Attribution
Every non-code asset in this repository, with its author, source and license. PhotoCraft's own
code and original assets are MIT OR Apache-2.0 (see LICENSE-MIT,
LICENSE-APACHE and NOTICE). When you add an asset, add a row here
in the same change; third-party assets must be permissively licensed and keep their license file
next to them.
Bundled in the app
| Path | Title | Author | Source | License |
|---|---|---|---|---|
assets/fonts/Inter-Regular.ttf, Inter-Medium.ttf, Inter-SemiBold.ttf |
Inter 4.001 (UI font) | The Inter Project Authors (Rasmus Andersson) | https://github.com/rsms/inter | SIL OFL 1.1, assets/fonts/OFL-Inter.txt |
assets/fonts/JetBrainsMono-Regular.ttf |
JetBrains Mono 2.305 (numeric font) | The JetBrains Mono Project Authors | https://github.com/JetBrains/JetBrainsMono | SIL OFL 1.1, assets/fonts/OFL-JetBrainsMono.txt |
assets/icons/*.svg except slice-knife.svg, eraser-background.svg and eraser-magic.svg (108 files) |
Lucide icons | Lucide Icons and Contributors | https://github.com/lucide-icons/lucide (icons/<name>.svg; align-* are now named text-align-* upstream) |
ISC, assets/icons/LICENSE-lucide.txt |
assets/icons/{check,chevron-down,chevron-right,chevron-up,chevrons-left,chevrons-right,circle,clock,compass,info,link,lock,minus,moon,move,navigation,plus,search,square,trash,triangle,type,x,zoom-in}.svg |
Lucide icons derived from Feather (subset of the row above) | Cole Bemis (Feather), Lucide Contributors | https://github.com/feathericons/feather via Lucide | MIT (Feather) and ISC (Lucide), assets/icons/LICENSE-lucide.txt |
assets/icons/slice-knife.svg |
Slice tool glyph | PhotoCraft contributors | Original work | MIT OR Apache-2.0 |
assets/icons/eraser-background.svg, assets/icons/eraser-magic.svg |
Background Eraser and Magic Eraser tool glyphs: Lucide eraser plus added marks |
Lucide Icons and Contributors; marks by PhotoCraft contributors | Derived from https://github.com/lucide-icons/lucide icons/eraser.svg |
ISC, assets/icons/LICENSE-lucide.txt |
assets/dict/en_US-scowl-50.txt.gz |
English word list for Check Spelling (SCOWL 2020.12.07, size 50, en_US; 72,403 words) | Kevin Atkinson and the SCOWL contributors | http://wordlist.aspell.net/ | SCOWL license (permissive, keep the notice), assets/dict/LICENSE-SCOWL.txt, which also has the build recipe |
crates/cms/profiles/photocraft-coated-cmyk.icc |
PhotoCraft Coated CMYK (synthetic) ICC profile | PhotoCraft contributors (generated by photocraft-cms, src/synth.rs) |
Original work, see crates/cms/README.md |
CC0-1.0 |
assets/app-icon/ (all files) |
PhotoCraft app icon (nine-tailed kitsune) | The project owner (drawn in ArtCraft, vectorised) | Original work, see assets/app-icon/README.md |
MIT OR Apache-2.0, assets/app-icon/LICENSE.txt |
The other built-in ICC profiles and the generated LUT looks are produced by code at runtime
(crates/cms/src/builtin.rs, crates/cms/src/lutfile.rs) and dedicated to the public domain
(CC0-1.0); they are not separate files.
Documentation and README
| Path | Title | Author | Source | License |
|---|---|---|---|---|
docs/brand/ (all files) |
ArtCraft name, wordmark and mark | ArtCraft Team | getartcraft.com | Not open source; trademarks of the ArtCraft Team, docs/brand/LICENSE-brand.txt |
docs/images/photocraft-*.jpg |
PhotoCraft screenshots | PhotoCraft contributors (UI) | Rendered offscreen with the snapshot example |
MIT OR Apache-2.0 (UI); the artwork in each is public domain, listed below |
Artwork shown in the screenshots (all public domain, via Wikimedia Commons; details in
docs/images/SOURCES.md):
| Screenshot | Artwork | Source |
|---|---|---|
photocraft-demo.jpg |
The Great Wave off Kanagawa, Katsushika Hokusai, c. 1831 | Commons |
photocraft-layer-styles.jpg |
Earthrise, William Anders, Apollo 8, 1968 (NASA) | Commons |
photocraft-masks.jpg |
Girl with a Pearl Earring, Johannes Vermeer, c. 1665 | Commons |
photocraft-vector.jpg |
Water Lilies, Claude Monet, 1906 | Commons |
photocraft-filters.jpg |
The Starry Night, Vincent van Gogh, 1889 | Commons |
photocraft-adjustments.jpg |
Impression, Sunrise, Claude Monet, 1872 | Commons |
photocraft-transform.jpg |
The Tetons and the Snake River, Ansel Adams, 1942 (U.S. National Archives) | Commons |
photocraft-type.jpg |
Among the Sierra Nevada, California, Albert Bierstadt, 1868 | Commons |
photocraft-export-light.jpg |
The Kiss, Gustav Klimt, 1907–1908 | Commons |
Test data (not committed, not shipped)
corpus/ is gitignored. corpus/psd holds MIT-licensed test PSDs (ag-psd, psd-tools), listed in
corpus/psd/SOURCES.md; cargo xtask corpus --download fetches PngSuite (public domain). Files
copied in by hand must be MIT, BSD or CC0. No test fixtures are committed to the repository.