The Type flyout (T, Shift+T cycle) gains Vertical Type Mask and Horizontal Type Mask, in Photoshop's order. They type like the Type tools, with the canvas under Quick Mask's colour and the glyphs clear while editing. On commit the glyph coverage replaces the selection; no layer is left behind and the whole session is one "Type Mask" history step. Escape always cancels and leaves the selection unchanged. The commit runs a new engine command, type.createSelection: a type layer's glyphs (optionally removing that layer, the tools' hidden working text) or type.create's keys directly, with new/add/subtract/intersect and an anti-aliasing override. type.create's layer building is shared through type_cmds::new_text_layer. Original dashed-T icons (ATTRIBUTION.md), tool label translations in every catalog, README tool list and the gaps/parity docs updated. Co-authored-by: Claude Opus 5.5 <[email protected]> Co-authored-by: Brandon Thomas <[email protected]>
18 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, type-mask.svg, type-mask-vertical.svg, clip-below.svg, clip-release.svg, layer-mask.svg, adjustment-layer.svg, brush-replace.svg, eraser-background.svg, eraser-magic.svg, lasso-magnetic.svg, direct-select.svg, pen-add-anchor.svg, pen-delete-anchor.svg, pen-freeform.svg, pen-curvature.svg, bandage-sparkle.svg, painting-symmetry.svg, symmetry-*.svg and marquee-{row,column}.svg (112 files; star-filled.svg is star.svg with a solid fill) |
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/type-mask.svg, assets/icons/type-mask-vertical.svg |
Horizontal and Vertical Type Mask tool glyphs: a T drawn as marching ants (the vertical one beside a downward arrow), on Lucide's 24 px grid and stroke | PhotoCraft contributors | Original work | MIT OR Apache-2.0 |
assets/icons/marquee-row.svg, assets/icons/marquee-column.svg |
Single Row and Single Column Marquee tool glyphs: a dashed row (column) between two edge bars, drawn on Lucide's 24 px grid and stroke | 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/brush-replace.svg |
Color Replacement tool glyph: Lucide brush plus two swap arrows |
Lucide Icons and Contributors; arrows by PhotoCraft contributors | Derived from https://github.com/lucide-icons/lucide icons/brush.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/pen-freeform.svg, assets/icons/pen-curvature.svg |
Freeform Pen and Curvature Pen tool glyphs: Lucide pen-tool scaled down, plus a freehand squiggle or a curve through two points |
Lucide Icons and Contributors; marks by PhotoCraft contributors | Derived from https://github.com/lucide-icons/lucide icons/pen-tool.svg |
ISC, assets/icons/LICENSE-lucide.txt |
assets/icons/pen-add-anchor.svg, assets/icons/pen-delete-anchor.svg |
Add Anchor Point and Delete Anchor Point tool glyphs: Lucide pen-tool plus a + or − mark |
Lucide Icons and Contributors; marks by PhotoCraft contributors | Derived from https://github.com/lucide-icons/lucide icons/pen-tool.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 |
crates/ui-egui/src/theme.rs (Breeze Light and Breeze Dark themes) |
The Breeze Light and Breeze Dark themes are original colour values on PhotoCraft's Studio layout, chosen to look close to KDE Plasma's Breeze (cool blue-greys, blue accent, 5 px frame radius) so the app blends into a Plasma desktop. None of Breeze's colour values, files or code are copied; the values are a few levels away from its schemes and tuned for text contrast | PhotoCraft contributors | Inspired by the look of KDE Breeze, https://invent.kde.org/plasma/breeze (its colour schemes are LGPL-2.0-or-later) | Original work |
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.