* Add the Remove tool with non-local patch completion Tool::Remove (J flyout) paints a hole that paint.remove fills from its surroundings as a background job, in one undo step. A stroke around an object also removes what it encloses; the selection limits the hole. The fill (photocraft_algo::nonlocal) follows Newson, Almansa, Gousseau and Pérez (IPOL 2017): texture features in the patch distance, onion-peel initialisation, match fields upsampled between levels and a best-patch final copy, plus gradient-domain hiding of edge and interior seams. Sparse holes are filled in tiles. inpaint::complete (Content-Aware Fill, Spot Healing, Content-Aware Move) is unchanged. On 20 holes in public-domain photos (remove_quality) the fill keeps 0.89 of the texture it replaces, against 0.54 with the Wexler/PatchMatch completion. 24 MP (remove_bench): 100 px ring 120 ms, 1000 px ring 2.5 s. * Translate the Remove tool's label and tighten comments Adds "Remove Tool" to every UI catalog, following each one's pattern for tool names and its existing word for Remove. Corrects comments that no longer matched the code: the benchmark's description, the tile and margin minimums, and the reasons given for two parameters. * Put the Remove tool first in the J group The J flyout's slot now shows Remove until another J tool is picked, and J from another group selects it; repeated J goes on to Spot Healing Brush, Healing Brush, Patch, Content-Aware Move and Red Eye. --------- Co-authored-by: Brandon Thomas <[email protected]>
16 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 |
|---|---|---|---|---|
crates/ui-egui/src/i18n/el.tsv |
Greek UI translations | PhotoCraft contributors | Original translations of PhotoCraft's English labels | MIT OR Apache-2.0, LICENSE-translations.txt |
crates/ui-egui/src/i18n/de.tsv |
German UI translations | PhotoCraft contributors | Original translations of PhotoCraft's English labels | MIT OR Apache-2.0, LICENSE-translations.txt |
crates/ui-egui/src/i18n/it.tsv |
Italian UI translations | PhotoCraft contributors | Original translations of PhotoCraft's English labels | MIT OR Apache-2.0, LICENSE-translations.txt |
crates/ui-egui/src/i18n/ko.tsv |
Korean UI translations | PhotoCraft contributors | Original translations of PhotoCraft's English labels | MIT OR Apache-2.0, LICENSE-translations.txt |
crates/ui-egui/src/i18n/nl.tsv |
Dutch UI translations | PhotoCraft contributors | Original translations of PhotoCraft's English labels | MIT OR Apache-2.0, LICENSE-translations.txt |
crates/ui-egui/src/i18n/pl.tsv |
Polish UI translations | PhotoCraft contributors | Original translations of PhotoCraft's English labels | MIT OR Apache-2.0, LICENSE-translations.txt |
crates/ui-egui/src/i18n/pt-br.tsv |
Brazilian Portuguese UI translations | PhotoCraft contributors | Original translations of PhotoCraft's English labels | MIT OR Apache-2.0, LICENSE-translations.txt |
crates/ui-egui/src/i18n/uk.tsv |
Ukrainian UI translations | PhotoCraft contributors | Original translations of PhotoCraft's English labels | MIT OR Apache-2.0, LICENSE-translations.txt |
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, clip-below.svg, clip-release.svg, layer-mask.svg, adjustment-layer.svg, eraser-background.svg, eraser-magic.svg, lasso-magnetic.svg, direct-select.svg, bandage-sparkle.svg, painting-symmetry.svg and symmetry-*.svg (110 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,link-2,lock,minus,monitor,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/clip-below.svg, assets/icons/clip-release.svg |
Clipping-mask cursors (⌥ over the line between two layers): a hooked arrow onto the layer below; the same with a small "no" badge to release | PhotoCraft contributors | Original work | MIT OR Apache-2.0 |
assets/icons/layer-mask.svg, assets/icons/adjustment-layer.svg |
Layers panel footer glyphs: Add a mask (a frame around a solid disc) and New Fill or Adjustment Layer (a circle, one half solid), drawn on Lucide's 24 px grid and stroke | 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/icons/bandage-sparkle.svg |
Remove tool glyph: Lucide bandage moved down, plus a sparkle mark |
Lucide Icons and Contributors; mark by PhotoCraft contributors | Derived from https://github.com/lucide-icons/lucide icons/bandage.svg |
ISC, assets/icons/LICENSE-lucide.txt |
assets/icons/direct-select.svg |
Direct Selection tool glyph: Lucide mouse-pointer-2 plus an anchor square |
Lucide Icons and Contributors; square by PhotoCraft contributors | Derived from https://github.com/lucide-icons/lucide icons/mouse-pointer-2.svg |
ISC, assets/icons/LICENSE-lucide.txt |
assets/icons/painting-symmetry.svg |
Painting symmetry glyph: Lucide heart with a central axis |
Lucide Icons and Contributors; adapted by @shorbank | Derived from https://github.com/lucide-icons/lucide icons/heart.svg |
ISC, assets/icons/LICENSE-lucide.txt |
assets/icons/symmetry-{vertical,horizontal,dual,diagonal}.svg |
Painting symmetry axis glyphs | @shorbank | Original work; supplied SVG line geometry centred on a common square canvas, stroke adjusted to match the painting-symmetry glyph | MIT OR Apache-2.0, assets/icons/LICENSE-symmetry-axes.txt |
assets/icons/lasso-magnetic.svg |
Magnetic Lasso tool glyph, adapted from "Magnetic Lasso Tool" (redrawn on the 24 px toolbar grid) | Lil' Seal (Noun Project); adapted by PhotoCraft contributors | https://thenounproject.com/icon/magnetic-lasso-tool-177513/ | CC BY 3.0, assets/icons/LICENSE-noun-magnetic-lasso.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 |
packaging/macos/dmg/ (all files) |
PhotoCraft DMG window background and layout | @XusBadia, from the PhotoCraft app icon | Original work, see packaging/macos/dmg/README.md |
MIT OR Apache-2.0, like the code |
crates/ui-egui/src/theme.rs (Solarized Dark palette) |
Solarized colour scheme used by the Solarized Dark theme | Ethan Schoonover | https://ethanschoonover.com/solarized/ | MIT, LICENSE-solarized.txt |
Optional build input: craft-fonts (not files in this repo)
Builds made with CRAFT_FONTS_DIR (all official releases) embed fonts from
storytold/craft-fonts at a pinned commit; no font file
from it is committed here. Per-file authors, sources and licences:
craft-fonts ATTRIBUTION.md.
| Font (embedded at build time) | Use | License |
|---|---|---|
| BIZ UDPGothic Regular, Bold (Morisawa) | Japanese UI and sans Type fallback (desktop) | SIL OFL 1.1, shipped as OFL-biz-ud-pgothic.txt |
| Shippori Mincho Regular (FONTDASU) | Japanese serif Type fallback (desktop) | SIL OFL 1.1, shipped as OFL-shippori-mincho.txt |
| BIZ UDMincho Regular (Morisawa) | Japanese serif Type fallback (desktop) | SIL OFL 1.1, shipped as OFL-biz-ud-mincho.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 |
docs/images/preferences-apply-*.png |
Preferences before and after adding Apply (no artwork) | PhotoCraft contributors | PhotoCraft control-channel capture and offscreen snapshot example |
MIT OR Apache-2.0 |
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 and no test fixtures are committed to the repository.
cargo xtask corpus --all fetches every corpus at the pinned commits in xtask/src/corpus_pins.rs
and verifies each file against the sha256 lists in xtask/*.sha256, with the upstream licence
next to the files:
| Path (fetched) | Title | Author | Source | License |
|---|---|---|---|---|
corpus/photoshop/ (256 PSDs) |
Photoshop oracle corpus: smart filters, layer-style effects, type, adjustments in every mode and depth | PhotoCraft contributors (authored with Adobe Photoshop 2026 by a script) | https://github.com/storytold/photocraft-corpus (photoshop/, with its generator and README) |
MIT OR Apache-2.0 |
corpus/psd-tools/ (309 files) |
psd-tools test set | Kota Yamaguchi and contributors | psd-tools tests/psd_files |
MIT, Copyright (c) 2019 Kota Yamaguchi |
corpus/psd/ (170 files) |
Small selection of the psd-tools and ag-psd test files | Kota Yamaguchi; Agamnentzar | psd-tools (above) and ag-psd test/ |
MIT (both) |
corpus/heif/ (9 files, 0.1 MB) |
HEIC/HEIF test files: heic-rs/ checkerboards, RGB strips and a grid-tiled photo with EXIF and XMP (synthetic pixels encoded by macOS sips, each .ref.png Apple's decode); pillow-heif/ the 10-bit RGBA RGBA_10__29x100.heif and its source RGBA_16__29x100.png |
Thomas Braun (heic-rs); Pillow-Heif contributors | heic-rs tests/fixtures, pillow-heif tests/images |
MIT OR Apache-2.0 (heic-rs); BSD-3-Clause (pillow-heif) |
corpus/exr/ (5 files, 2.3 MB) |
The deep OpenEXR test images 11, 42, 64, multivariate and objectid.deep.exr |
Contributors to the OpenEXR Project | openexr src/test/bin/test_images |
BSD-3-Clause |
corpus/affinity/ (60 files) |
Public Affinity documents and PNG references: vector-art/ (9 documents), afdesignload/ (9), jac21/ (2), asset-store-template/ (1), and affinity-samples/ (18 CC0 documents plus exported references) |
samuel-etver; Nick Beeuwsaert; Jeremy Cantu; DAIKI (eviltwo); satoshoe-dev | vector-art simple/, AFDesignLoad testDesigns/, Jac21/Branding Logos/JC/DesignerFiles/Affinity, AssetStoreTemplate AssetStoreTemplate/, affinity-samples |
CC0-1.0 (vector-art and affinity-samples); MIT, Copyright (c) 2015 Nick Beeuwsaert; MIT, Copyright (c) 2018 Jeremy Cantu; MIT, Copyright (c) 2024 DAIKI |
corpus/pngsuite/ |
PngSuite | Willem van Schaik | http://www.schaik.com/pngsuite/ | Public domain |
corpus/pixls/ (7 files, 226 MB) |
Real camera raws, one per decode path: Canon PowerShot SX50 HS (CR2 and its DNG conversion), Nikon D3 uncompressed NEF, Sony DSC-RX0 cRAW ARW, Panasonic DC-G9 high-res RW2, Olympus E-1 GRBG ORF, plus the E-5 packed ORF as the documented known-unsupported case. Per file (each CC0, per its database entry): IMG_4059.CR2, CRW_4061.DNG, JD1_8203.NEF, DSC00009.ARW, P1000475.RW2, E_1__C106743_gredos.ORF, _7061961_copy.ORF | The photographers of the pixls.us raw samples database | raw.pixls.us data/, fetched per xtask/src/corpus_pins.rs |
CC0 / public domain, per file as linked |
Files copied into corpus/ by hand (tiff, exr, raw) must be MIT, BSD or CC0.