3 Commits

Author SHA1 Message Date
Marcos Paulo 60f15e5c72 chore: release 0.7.2
Release / Linux aarch64 (push) Has been cancelled
Release / Linux x86_64 (push) Has been cancelled
Release / Flatpak aarch64 (push) Has been cancelled
Release / Flatpak x86_64 (push) Has been cancelled
Release / Linux riscv64 (push) Has been cancelled
Release / FreeBSD x86_64 (push) Has been cancelled
Release / Web (wasm) (push) Has been cancelled
Release / version (push) Has been cancelled
Release / macOS universal (push) Has been cancelled
Release / Windows arm64 (push) Has been cancelled
Release / Windows x64 (push) Has been cancelled
Release / Windows x86 (push) Has been cancelled
Release / Draft GitHub Release (push) Has been cancelled
2026-10-12 21:41:32 -03:00
Marcos Paulo 874f7ded26 build: use the masi/craft-libs fork; take the Catppuccin palette from craft-ui
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 20:53:01 -03:00
Marcos Paulo 3d8fb0078e chore: debrand ArtCraft and Discord references
Remove the Discord button/icon, Help menu links and brand assets; rewrite
docs, packaging URLs and catalogs. Add .debrand rules and the craft-skills
submodule (debrand skill). Add Catppuccin Latte, Frappe, Macchiato and Mocha
themes.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 20:53:01 -03:00
47 changed files with 263 additions and 388 deletions
+17
View File
@@ -0,0 +1,17 @@
# Strip upstream (ArtCraft / Discord) branding. Run: perl tools/craft-skills/skills/debrand/debrand.pl . (--check in CI)
delete docs/brand
# MIT/Apache texts stay verbatim. The copyright holder line stays everywhere (legal requirement).
keep ^(LICENSE-(MIT|APACHE)|\.debrand)$
dropline ^crates/ui-egui/locales/.*\.json$ :: \s*".*(?:ArtCraft|Discord)
dropline ^assets/ATTRIBUTION\.md$ :: \|\s*`docs/brand/
sub (?s)\nThe ArtCraft name, wordmark and logos in docs/brand/.*?LICENSE-brand\.txt\.\n =>
sub (?s)- \*\*Exception: `docs/brand/`\.\*\*.*?derive from them\.\n =>
sub drawn in ArtCraft\) => drawn by hand)
sub made in ArtCraft \( => drawn by hand (
sub owner in ArtCraft \(no => owner, drawn by hand (no
sub https://getartcraft\.com/apps/lightcraft => https://github.com/storytold/lightcraft
sub get it from getartcraft\.com/apps/photocraft => get it from github.com/storytold/photocraft
sub Get it from getartcraft\.com/apps/photocraft => Get it from github.com/storytold/photocraft
sub https://discord\.gg/artcraft => https://github.com/storytold/lightcraft/issues
forbid (?i)artcraft(?! Team and the LightCraft contributors)
forbid (?i)discord
+3
View File
@@ -0,0 +1,3 @@
[submodule "tools/craft-skills"]
path = tools/craft-skills
url = https://git.marcospaulo.dev.br/storytold/craft-skills.git
-1
View File
@@ -74,7 +74,6 @@ of it. Full standard: `../craftrules/standards/never-crash.md`
text, because nearly every OFL Chinese face derives from it. Use it unmodified under its OFL; this does not open the
door to Source Han under Adobe's name or to any other Adobe asset.
- Every asset in the repository must be one of: **our own original work** (e.g. icons drawn in code as vectors, procedurally generated demo photos), **public domain / CC0**, **Creative Commons** (CC-BY / CC-BY-SA with attribution honoured), **OFL** (fonts), or **permissive open-source** (MIT/Apache-2.0/BSD/ISC) — or contributed by a person who created the asset and licenses it openly.
- **Exception: `docs/brand/`.** The ArtCraft name, wordmark and logos there are ArtCraft Team trademarks, not open source and not covered by LightCraft's MIT OR Apache-2.0 licence (`LICENSE-MIT`, `LICENSE-APACHE`, `NOTICE`); their terms are in `docs/brand/LICENSE-brand.txt`. Use them only unmodified and never redraw, recolour or derive from them.
- **Every asset must have an entry in `assets/ATTRIBUTION.md`** (path, title, author/creator, source URL or "original work", licence, date added, modifications) and its licence text when required (e.g. `assets/fonts/OFL-*.txt`). Add the entry in the same commit as the asset. Assets without an attribution entry must not be committed.
- **Fonts live in [storytold/craft-fonts](https://github.com/storytold/craft-fonts), never in this repo.** Don't commit
font files here (Inter, already in `assets/fonts/`, is the one exception); add new fonts to craft-fonts. LightCraft
-1
View File
@@ -78,7 +78,6 @@ of it. Full standard: `../craftrules/standards/never-crash.md`
text, because nearly every OFL Chinese face derives from it. Use it unmodified under its OFL; this does not open the
door to Source Han under Adobe's name or to any other Adobe asset.
- Every asset in the repository must be one of: **our own original work** (e.g. icons drawn in code as vectors, procedurally generated demo photos), **public domain / CC0**, **Creative Commons** (CC-BY / CC-BY-SA with attribution honoured), **OFL** (fonts), or **permissive open-source** (MIT/Apache-2.0/BSD/ISC) — or contributed by a person who created the asset and licenses it openly.
- **Exception: `docs/brand/`.** The ArtCraft name, wordmark and logos there are ArtCraft Team trademarks, not open source and not covered by LightCraft's MIT OR Apache-2.0 licence (`LICENSE-MIT`, `LICENSE-APACHE`, `NOTICE`); their terms are in `docs/brand/LICENSE-brand.txt`. Use them only unmodified and never redraw, recolour or derive from them.
- **Every asset must have an entry in `assets/ATTRIBUTION.md`** (path, title, author/creator, source URL or "original work", licence, date added, modifications) and its licence text when required (e.g. `assets/fonts/OFL-*.txt`). Add the entry in the same commit as the asset. Assets without an attribution entry must not be committed.
- **Fonts live in [storytold/craft-fonts](https://github.com/storytold/craft-fonts), never in this repo.** Don't commit
font files here (Inter, already in `assets/fonts/`, is the one exception); add new fonts to craft-fonts. LightCraft
Generated
+32 -32
View File
@@ -1075,7 +1075,7 @@ dependencies = [
[[package]]
name = "craft-ui"
version = "0.1.0"
source = "git+https://github.com/storytold/craft-libs?rev=5c874d51eeb3de70e735c8ce87a59a7dedd47675#5c874d51eeb3de70e735c8ce87a59a7dedd47675"
source = "git+https://git.marcospaulo.dev.br/masi/craft-libs?rev=22544b6d619d4f16779b8bdfa3f0b642a86fc065#22544b6d619d4f16779b8bdfa3f0b642a86fc065"
dependencies = [
"egui",
"serde",
@@ -3073,7 +3073,7 @@ dependencies = [
[[package]]
name = "lightcraft"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"eframe",
"egui",
@@ -3097,7 +3097,7 @@ dependencies = [
[[package]]
name = "lightcraft-catalog"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"crc32fast",
"lightcraft-develop",
@@ -3114,7 +3114,7 @@ dependencies = [
[[package]]
name = "lightcraft-cli"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"dhat",
"lightcraft-codecs",
@@ -3130,7 +3130,7 @@ dependencies = [
[[package]]
name = "lightcraft-codecs"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"avif-serialize",
"bytemuck",
@@ -3159,7 +3159,7 @@ dependencies = [
[[package]]
name = "lightcraft-color"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"lightcraft-geom",
"proptest",
@@ -3168,7 +3168,7 @@ dependencies = [
[[package]]
name = "lightcraft-denoise"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"faer-core",
"lightcraft-denoise-core",
@@ -3185,7 +3185,7 @@ dependencies = [
[[package]]
name = "lightcraft-denoise-core"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"lightcraft-raster",
"miniz_oxide 0.8.9",
@@ -3200,7 +3200,7 @@ dependencies = [
[[package]]
name = "lightcraft-develop"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"lightcraft-color",
"lightcraft-geom",
@@ -3212,7 +3212,7 @@ dependencies = [
[[package]]
name = "lightcraft-engine"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"ab_glyph",
"harfrust",
@@ -3252,7 +3252,7 @@ dependencies = [
[[package]]
name = "lightcraft-faces"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"matrixmultiply",
"ndarray",
@@ -3266,7 +3266,7 @@ dependencies = [
[[package]]
name = "lightcraft-fetch"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"log",
"rustls",
@@ -3277,7 +3277,7 @@ dependencies = [
[[package]]
name = "lightcraft-geocode"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"miniz_oxide 0.8.9",
"serde",
@@ -3285,7 +3285,7 @@ dependencies = [
[[package]]
name = "lightcraft-geom"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"proptest",
"serde",
@@ -3293,7 +3293,7 @@ dependencies = [
[[package]]
name = "lightcraft-gpu"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"bytemuck",
"lightcraft-color",
@@ -3311,7 +3311,7 @@ dependencies = [
[[package]]
name = "lightcraft-heif"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"heic-rs",
"rayon",
@@ -3319,14 +3319,14 @@ dependencies = [
[[package]]
name = "lightcraft-inpaint"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"rayon",
]
[[package]]
name = "lightcraft-lensdb"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"lightcraft-develop",
"lightcraft-geom",
@@ -3335,7 +3335,7 @@ dependencies = [
[[package]]
name = "lightcraft-mcp"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"lightcraft-codecs",
"lightcraft-engine",
@@ -3346,7 +3346,7 @@ dependencies = [
[[package]]
name = "lightcraft-merge"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"lightcraft-codecs",
"lightcraft-color",
@@ -3362,7 +3362,7 @@ dependencies = [
[[package]]
name = "lightcraft-meta"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"lightcraft-geom",
"lightcraft-tiff",
@@ -3374,7 +3374,7 @@ dependencies = [
[[package]]
name = "lightcraft-pipeline"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"image",
"lightcraft-color",
@@ -3392,7 +3392,7 @@ dependencies = [
[[package]]
name = "lightcraft-preview"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"jpeg-encoder",
"lightcraft-raster",
@@ -3404,7 +3404,7 @@ dependencies = [
[[package]]
name = "lightcraft-raster"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"libc",
"lightcraft-color",
@@ -3416,7 +3416,7 @@ dependencies = [
[[package]]
name = "lightcraft-raw"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"jpeg-encoder",
"jxl-oxide",
@@ -3438,7 +3438,7 @@ dependencies = [
[[package]]
name = "lightcraft-scenes"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"image",
"lightcraft-color",
@@ -3449,7 +3449,7 @@ dependencies = [
[[package]]
name = "lightcraft-segment"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"candle-core",
"candle-nn",
@@ -3462,11 +3462,11 @@ dependencies = [
[[package]]
name = "lightcraft-sysmem"
version = "0.7.1"
version = "0.7.2"
[[package]]
name = "lightcraft-tiff"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"proptest",
"serde",
@@ -3475,7 +3475,7 @@ dependencies = [
[[package]]
name = "lightcraft-ui-egui"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"craft-ui",
"egui",
@@ -3502,7 +3502,7 @@ dependencies = [
[[package]]
name = "lightcraft-web"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"crc32fast",
"eframe",
@@ -6972,7 +6972,7 @@ checksum = "e450f9b2ed1dff33c94c12589a87338689467b9c4f5d8a5710bd09a847d2c8a7"
[[package]]
name = "xtask"
version = "0.7.1"
version = "0.7.2"
dependencies = [
"brotli",
"flate2",
+2 -2
View File
@@ -3,14 +3,14 @@ resolver = "3"
members = ["crates/*", "apps/*", "xtask"]
[workspace.package]
version = "0.7.1"
version = "0.7.2"
edition = "2024"
license = "MIT OR Apache-2.0"
rust-version = "1.90"
repository = "https://github.com/storytold/lightcraft"
[workspace.dependencies]
craft-ui = { git = "https://github.com/storytold/craft-libs", rev = "5c874d51eeb3de70e735c8ce87a59a7dedd47675", features = ["serde"] }
craft-ui = { git = "https://git.marcospaulo.dev.br/masi/craft-libs", rev = "22544b6d619d4f16779b8bdfa3f0b642a86fc065", features = ["serde"] }
# internal
lightcraft-denoise-core = { path = "crates/denoise-core" }
lightcraft-denoise = { path = "crates/denoise", default-features = false }
-4
View File
@@ -3,10 +3,6 @@ Copyright (c) 2026 ArtCraft Team and the LightCraft contributors.
Licensed under the MIT License or the Apache License, Version 2.0, at your option
(LICENSE-MIT, LICENSE-APACHE).
The ArtCraft name, wordmark and logos in docs/brand/ are trademarks of the ArtCraft Team. They are
not open source and are not covered by the license above; their terms are in
docs/brand/LICENSE-brand.txt.
Third-party material
This product bundles third-party material under its own licenses, listed below. The per-file
+10 -71
View File
@@ -1,13 +1,3 @@
<p align="center">
<a href="https://getartcraft.com/">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="docs/brand/artcraft-logo-white.svg">
<img alt="ArtCraft" src="docs/brand/artcraft-logo.svg" width="200">
</picture>
</a>
</p>
<h1 align="center">LightCraft</h1>
<h3 align="center">Your photos. Your pixels. Your machine.</h3>
@@ -30,16 +20,6 @@
<a href="ROADMAP.md"><img alt="Status: young and moving fast" src="https://img.shields.io/badge/status-young%20%26%20moving%20fast-f2a516?style=flat-square"></a>
</p>
<p align="center">
<a href="https://discord.gg/artcraft"><img alt="Join the ArtCraft community on Discord" src="https://img.shields.io/badge/Join%20us%20on%20Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" height="40"></a>
</p>
<p align="center">
<a href="https://getartcraft.com/apps/lightcraft"><b>LightCraft on getartcraft.com</b></a> ·
<a href="https://getartcraft.com/">ArtCraft</a> ·
<a href="https://getartcraft.com/apps">All Crafting Apps</a>
</p>
<br>
<p align="center">
@@ -48,10 +28,6 @@
<sub><i>Ansel Adams, "The Tetons and the Snake River" (1942). Public domain, U.S. National Archives. Developed in LightCraft.</i></sub>
</p>
> [!NOTE]
> **ArtCraft is a community of artists from all walks of life.** Digital, generative, music,
> games &mdash; if you make things, you're one of us. **[Come say hi on Discord](https://discord.gg/artcraft).**
<p align="center">
<a href="#edit-like-you-mean-it">Editing</a> ·
<a href="#color-grading-the-cinematic-way">Color grading</a> ·
@@ -452,14 +428,11 @@ Humans and agents follow the same rules, so read [AGENTS.md](AGENTS.md) first. T
`unsafe`, checked indexing on anything derived from input, and a regression test with every crash fix. Details in
[AGENTS.md](AGENTS.md#never-crash-outranks-feature-work).
Questions, ideas or a bug you'd like to talk through first? Bring them to [Discord](https://discord.gg/artcraft).
<br>
## Downloads
**New to LightCraft?** Download it from the [LightCraft page on getartcraft.com](https://getartcraft.com/apps/lightcraft). That's the easiest way to install it.
**Want a specific build or format?** On GitHub, the [latest release](https://github.com/storytold/lightcraft/releases/latest) has every build listed below, and [all releases](https://github.com/storytold/lightcraft/releases) has earlier versions and their notes. `<ver>` in the file names is the version number, and `SHA256SUMS.txt` lists a checksum for every file.
### Windows
@@ -513,42 +486,18 @@ windows file drag-and-drop; set `LIGHTCRAFT_WAYLAND=1` to use native Wayland (sh
## The Crafting Apps
LightCraft is one of the **Crafting Apps**: free, open-source creative tools from the
[ArtCraft](https://getartcraft.com/) team, each written from scratch in Rust and each able to
[storytold](https://github.com/storytold) team, each written from scratch in Rust and each able to
stand on its own.
| | App | What it's for | Code | Learn more |
|:-:|---|---|---|---|
| <img src="https://raw.githubusercontent.com/storytold/photocraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.photocraft.png" alt="" width="32" height="32"> | **PhotoCraft** | Image editing: layers, masks, type and real PSD files | [GitHub](https://github.com/storytold/photocraft) | [Website](https://getartcraft.com/apps/photocraft) |
| <img src="https://raw.githubusercontent.com/storytold/vectorcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.vectorcraft.png" alt="" width="32" height="32"> | **VectorCraft** | Vector illustration | [GitHub](https://github.com/storytold/vectorcraft) | [Website](https://getartcraft.com/apps/vectorcraft) |
| <img src="https://raw.githubusercontent.com/storytold/filmcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.filmcraft.png" alt="" width="32" height="32"> | **FilmCraft** | Video editing, color and sound | [GitHub](https://github.com/storytold/filmcraft) | [Website](https://getartcraft.com/apps/filmcraft) |
| <img src="https://raw.githubusercontent.com/storytold/lightcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.lightcraft.png" alt="" width="32" height="32"> | **LightCraft** | **Photo library and raw development · you are here** | [GitHub](https://github.com/storytold/lightcraft) | [Website](https://getartcraft.com/apps/lightcraft) |
| <img src="https://raw.githubusercontent.com/storytold/pdfcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.pdfcraft.png" alt="" width="32" height="32"> | **PdfCraft** | Reading, organizing and protecting PDFs | [GitHub](https://github.com/storytold/pdfcraft) | [Website](https://getartcraft.com/apps/pdfcraft) |
| <img src="https://raw.githubusercontent.com/storytold/effectcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.effectcraft.png" alt="" width="32" height="32"> | **EffectCraft** | Motion graphics and visual effects | [GitHub](https://github.com/storytold/effectcraft) | [Website](https://getartcraft.com/apps/effectcraft) |
| <img src="https://raw.githubusercontent.com/storytold/designcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.designcraft.png" alt="" width="32" height="32"> | **DesignCraft** | Page layout and publishing | [GitHub](https://github.com/storytold/designcraft) | [Website](https://getartcraft.com/apps/designcraft) |
And [**ArtCraft**](https://getartcraft.com/) itself, our AI image and video studio for artists who want real control.
<br>
<p align="center">
<a href="https://discord.gg/artcraft"><img alt="Join the ArtCraft community on Discord" src="https://img.shields.io/badge/Join%20us%20on%20Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" height="40"></a>
</p>
<h3 align="center">Come make things with us</h3>
<p align="center">
Our Discord is where artists of every kind hang out: people who paint, shoot, draw, cut film,
set type, and people still figuring out what they like to make. Share what you're working on,
ask for help, tell us what's broken, or tell us what you wish these tools could do.
Whatever your medium and however long you've been at it, you're welcome here.
</p>
<p align="center">
<a href="https://discord.gg/artcraft"><b>discord.gg/artcraft</b></a> ·
<a href="https://getartcraft.com/">getartcraft.com</a> ·
<a href="https://getartcraft.com/apps">The Crafting Apps</a> ·
<a href="https://getartcraft.com/apps/lightcraft">LightCraft</a>
</p>
| | App | What it's for | Code |
|:-:|---|---|---|
| <img src="https://raw.githubusercontent.com/storytold/photocraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.photocraft.png" alt="" width="32" height="32"> | **PhotoCraft** | Image editing: layers, masks, type and real PSD files | [GitHub](https://github.com/storytold/photocraft) |
| <img src="https://raw.githubusercontent.com/storytold/vectorcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.vectorcraft.png" alt="" width="32" height="32"> | **VectorCraft** | Vector illustration | [GitHub](https://github.com/storytold/vectorcraft) |
| <img src="https://raw.githubusercontent.com/storytold/filmcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.filmcraft.png" alt="" width="32" height="32"> | **FilmCraft** | Video editing, color and sound | [GitHub](https://github.com/storytold/filmcraft) |
| <img src="https://raw.githubusercontent.com/storytold/lightcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.lightcraft.png" alt="" width="32" height="32"> | **LightCraft** | **Photo library and raw development · you are here** | [GitHub](https://github.com/storytold/lightcraft) |
| <img src="https://raw.githubusercontent.com/storytold/pdfcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.pdfcraft.png" alt="" width="32" height="32"> | **PdfCraft** | Reading, organizing and protecting PDFs | [GitHub](https://github.com/storytold/pdfcraft) |
| <img src="https://raw.githubusercontent.com/storytold/effectcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.effectcraft.png" alt="" width="32" height="32"> | **EffectCraft** | Motion graphics and visual effects | [GitHub](https://github.com/storytold/effectcraft) |
| <img src="https://raw.githubusercontent.com/storytold/designcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.designcraft.png" alt="" width="32" height="32"> | **DesignCraft** | Page layout and publishing | [GitHub](https://github.com/storytold/designcraft) |
<br>
@@ -567,18 +516,8 @@ Inter (SIL OFL 1.1). Builds made with [craft-fonts](https://github.com/storytold
also embed its Chinese and Japanese fonts (Noto Sans CJK SC, BIZ UDPGothic, BIZ UDMincho, Shippori Mincho; SIL OFL 1.1), listed in its
[ATTRIBUTION.md](https://github.com/storytold/craft-fonts/blob/main/ATTRIBUTION.md). All icons are original.
The ArtCraft name, wordmark and logos in [`docs/brand/`](docs/brand/) are trademarks of the
ArtCraft Team and are not covered by this license. They may be used only unmodified, and only as
part of this repository and LightCraft, under [`docs/brand/LICENSE-brand.txt`](docs/brand/LICENSE-brand.txt).
Forks and modified versions must remove them.
<sub>Adobe, Photoshop, Illustrator, Premiere Pro, Lightroom, Acrobat, After Effects and InDesign are trademarks or registered trademarks of Adobe Inc. in the United States and/or other countries. LightCraft is an independent, open-source project and is not affiliated with, sponsored by or endorsed by Adobe Inc.; these names are used only to describe the workflows it is compatible with.</sub>
<p align="center">
<a href="https://getartcraft.com/"><img alt="ArtCraft" src="docs/brand/artcraft-mark.svg" width="28"></a><br>
<sub>Made by the <a href="https://getartcraft.com/">ArtCraft</a> team and community.</sub>
</p>
## Star history
[![Star History Chart](https://api.star-history.com/svg?repos=storytold/lightcraft&type=Date&legend=top-left)](https://www.star-history.com/?repos=storytold%2Flightcraft&type=date&legend=top-left)
+9 -70
View File
@@ -1,13 +1,3 @@
<p align="center">
<a href="https://getartcraft.com/">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="docs/brand/artcraft-logo-white.svg">
<img alt="ArtCraft" src="docs/brand/artcraft-logo.svg" width="200">
</picture>
</a>
</p>
<h1 align="center">LightCraft</h1>
<h3 align="center">Your photos. Your pixels. Your machine.</h3>
@@ -30,16 +20,6 @@
<a href="ROADMAP.md"><img alt="Status: young and moving fast" src="https://img.shields.io/badge/status-young%20%26%20moving%20fast-f2a516?style=flat-square"></a>
</p>
<p align="center">
<a href="https://discord.gg/artcraft"><img alt="Join the ArtCraft community on Discord" src="https://img.shields.io/badge/Join%20us%20on%20Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" height="40"></a>
</p>
<p align="center">
<a href="https://getartcraft.com/apps/lightcraft"><b>getartcraft.com 上的 LightCraft</b></a> ·
<a href="https://getartcraft.com/">ArtCraft</a> ·
<a href="https://getartcraft.com/apps">全部 Crafting Apps</a>
</p>
<br>
<p align="center">
@@ -48,10 +28,6 @@
<sub><i>安塞尔·亚当斯,《特顿山脉与蛇河》(1942)。公有领域,美国国家档案馆。在 LightCraft 中显影。</i></sub>
</p>
> [!NOTE]
> **ArtCraft 是一个由形形色色的创作者组成的社区。** 数字艺术、生成艺术、音乐、游戏 &mdash;
> 只要你在创作,你就是我们中的一员。**[来 Discord 打个招呼吧](https://discord.gg/artcraft)。**
<p align="center">
<a href="#edit-like-you-mean-it">编辑</a> ·
<a href="#color-grading-the-cinematic-way">颜色分级</a> ·
@@ -441,14 +417,11 @@ egui 前端是一个可替换的 crate;它下面没有任何东西知道 UI
`unsafe`,对任何来自输入的数据都做受检索引,并且每个崩溃修复都带一个回归测试。细节见
[AGENTS.md](AGENTS.md#never-crash-outranks-feature-work)。
有问题、想法,或者想先讨论一个 bug?来 [Discord](https://discord.gg/artcraft)。
<br>
## Downloads
**第一次用 LightCraft?** 从 [getartcraft.com 的 LightCraft 页面](https://getartcraft.com/apps/lightcraft)下载。那是最简单的安装方式。
**想要特定的构建或格式?** 在 GitHub 上,[最新发布](https://github.com/storytold/lightcraft/releases/latest)包含下面列出的所有构建,[全部发布](https://github.com/storytold/lightcraft/releases)则有更早的版本及其说明。文件名中的 `<ver>` 是版本号,`SHA256SUMS.txt` 列出了每个文件的校验和。
### Windows
@@ -496,42 +469,18 @@ egui 前端是一个可替换的 crate;它下面没有任何东西知道 UI
## The Crafting Apps
LightCraft 是 **Crafting Apps** 之一:来自 [ArtCraft](https://getartcraft.com/) 团队的免费开源创作工具,
LightCraft 是 **Crafting Apps** 之一:来自 [storytold](https://github.com/storytold) 团队的免费开源创作工具,
每一个都用 Rust 从零编写,每一个都能独立使用。
| | 应用 | 用途 | 代码 | 了解更多 |
|:-:|---|---|---|---|
| <img src="https://raw.githubusercontent.com/storytold/photocraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.photocraft.png" alt="" width="32" height="32"> | **PhotoCraft** | 图像编辑:图层、蒙版、文字和真正的 PSD 文件 | [GitHub](https://github.com/storytold/photocraft) | [网站](https://getartcraft.com/apps/photocraft) |
| <img src="https://raw.githubusercontent.com/storytold/vectorcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.vectorcraft.png" alt="" width="32" height="32"> | **VectorCraft** | 矢量插画 | [GitHub](https://github.com/storytold/vectorcraft) | [网站](https://getartcraft.com/apps/vectorcraft) |
| <img src="https://raw.githubusercontent.com/storytold/filmcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.filmcraft.png" alt="" width="32" height="32"> | **FilmCraft** | 视频剪辑、调色与声音 | [GitHub](https://github.com/storytold/filmcraft) | [网站](https://getartcraft.com/apps/filmcraft) |
| <img src="https://raw.githubusercontent.com/storytold/lightcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.lightcraft.png" alt="" width="32" height="32"> | **LightCraft** | **照片图库与 raw 显影 · 你在这里** | [GitHub](https://github.com/storytold/lightcraft) | [网站](https://getartcraft.com/apps/lightcraft) |
| <img src="https://raw.githubusercontent.com/storytold/pdfcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.pdfcraft.png" alt="" width="32" height="32"> | **PdfCraft** | 阅读、整理和保护 PDF | [GitHub](https://github.com/storytold/pdfcraft) | [网站](https://getartcraft.com/apps/pdfcraft) |
| <img src="https://raw.githubusercontent.com/storytold/effectcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.effectcraft.png" alt="" width="32" height="32"> | **EffectCraft** | 动态图形与视觉特效 | [GitHub](https://github.com/storytold/effectcraft) | [网站](https://getartcraft.com/apps/effectcraft) |
| <img src="https://raw.githubusercontent.com/storytold/designcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.designcraft.png" alt="" width="32" height="32"> | **DesignCraft** | 页面排版与出版 | [GitHub](https://github.com/storytold/designcraft) | [网站](https://getartcraft.com/apps/designcraft) |
以及 [**ArtCraft**](https://getartcraft.com/) 本身,我们为想要真正掌控力的创作者打造的 AI 图像与视频工作室。
<br>
<p align="center">
<a href="https://discord.gg/artcraft"><img alt="Join the ArtCraft community on Discord" src="https://img.shields.io/badge/Join%20us%20on%20Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" height="40"></a>
</p>
<h3 align="center">Come make things with us</h3>
<p align="center">
我们的 Discord 是各种创作者聚集的地方:画画的人、拍照的人、做动画的人、剪片子的人、
排版的人,还有仍在摸索自己喜欢做什么的人。分享你在做的东西,
寻求帮助,告诉我们哪里坏了,或者告诉我们你希望这些工具能做什么。
无论你用什么媒介,无论你做了多久,这里都欢迎你。
</p>
<p align="center">
<a href="https://discord.gg/artcraft"><b>discord.gg/artcraft</b></a> ·
<a href="https://getartcraft.com/">getartcraft.com</a> ·
<a href="https://getartcraft.com/apps">The Crafting Apps</a> ·
<a href="https://getartcraft.com/apps/lightcraft">LightCraft</a>
</p>
|:-:|---|---|---|
| <img src="https://raw.githubusercontent.com/storytold/photocraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.photocraft.png" alt="" width="32" height="32"> | **PhotoCraft** | 图像编辑:图层、蒙版、文字和真正的 PSD 文件 | [GitHub](https://github.com/storytold/photocraft) |
| <img src="https://raw.githubusercontent.com/storytold/vectorcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.vectorcraft.png" alt="" width="32" height="32"> | **VectorCraft** | 矢量插画 | [GitHub](https://github.com/storytold/vectorcraft) |
| <img src="https://raw.githubusercontent.com/storytold/filmcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.filmcraft.png" alt="" width="32" height="32"> | **FilmCraft** | 视频剪辑、调色与声音 | [GitHub](https://github.com/storytold/filmcraft) |
| <img src="https://raw.githubusercontent.com/storytold/lightcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.lightcraft.png" alt="" width="32" height="32"> | **LightCraft** | **照片图库与 raw 显影 · 你在这里** | [GitHub](https://github.com/storytold/lightcraft) |
| <img src="https://raw.githubusercontent.com/storytold/pdfcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.pdfcraft.png" alt="" width="32" height="32"> | **PdfCraft** | 阅读、整理和保护 PDF | [GitHub](https://github.com/storytold/pdfcraft) |
| <img src="https://raw.githubusercontent.com/storytold/effectcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.effectcraft.png" alt="" width="32" height="32"> | **EffectCraft** | 动态图形与视觉特效 | [GitHub](https://github.com/storytold/effectcraft) |
| <img src="https://raw.githubusercontent.com/storytold/designcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.designcraft.png" alt="" width="32" height="32"> | **DesignCraft** | 页面排版与出版 | [GitHub](https://github.com/storytold/designcraft) |
<br>
@@ -550,18 +499,8 @@ Inter(SIL OFL 1.1)。用 [craft-fonts](https://github.com/storytold/craft-fo
还会内嵌它的中文和日文字体(Noto Sans CJK SC、BIZ UDPGothic、BIZ UDMincho、Shippori Mincho;SIL OFL 1.1),列在其
[ATTRIBUTION.md](https://github.com/storytold/craft-fonts/blob/main/ATTRIBUTION.md) 中。所有图标均为原创。
[`docs/brand/`](docs/brand/) 中的 ArtCraft 名称、字标和标志是
ArtCraft 团队的商标,不在本许可范围内。它们只能在未修改的情况下,作为
本仓库和 LightCraft 的一部分,按 [`docs/brand/LICENSE-brand.txt`](docs/brand/LICENSE-brand.txt) 使用。
分支和修改版本必须移除它们。
<sub>Adobe、Photoshop、Illustrator、Premiere Pro、Lightroom、Acrobat、After Effects 和 InDesign 是 Adobe Inc. 在美国和/或其他国家的商标或注册商标。LightCraft 是一个独立的开源项目,与 Adobe Inc. 无隶属关系,也未获其赞助或认可;这些名称仅用于说明它所兼容的工作流。</sub>
<p align="center">
<a href="https://getartcraft.com/"><img alt="ArtCraft" src="docs/brand/artcraft-mark.svg" width="28"></a><br>
<sub>由 <a href="https://getartcraft.com/">ArtCraft</a> 团队和社区制作。</sub>
</p>
## Star history
[![Star History Chart](https://api.star-history.com/svg?repos=storytold/lightcraft&type=Date&legend=top-left)](https://www.star-history.com/?repos=storytold%2Flightcraft&type=date&legend=top-left)
+1 -1
View File
@@ -79,7 +79,7 @@ fn launcher(app: &str) -> Result<Launcher, String> {
return Ok(if cfg!(target_os = "macos") { Launcher::MacApp(app.to_string()) } else { Launcher::Program(PathBuf::from(app)) });
}
find_photocraft().ok_or_else(|| {
"PhotoCraft isn't installed. Get it from getartcraft.com/apps/photocraft, or give where it is in Settings ▸ External Editing.".to_string()
"PhotoCraft isn't installed. Get it from github.com/storytold/photocraft, or give where it is in Settings ▸ External Editing.".to_string()
})
}
+2 -2
View File
@@ -9,7 +9,7 @@ covers a whole directory), or if a licence file referenced in the Licence column
| Path | Asset | Creator | Source | Licence | Added | Modifications |
|---|---|---|---|---|---|---|
| `assets/fonts/Inter-*.ttf` (Regular, Medium, SemiBold) | Inter | Rasmus Andersson | https://github.com/rsms/inter | SIL Open Font License 1.1 (`assets/fonts/OFL-Inter.txt`) | 2026-09-30 | none |
| `assets/app-icon/` (`lightcraft.svg` and the PNG/ICNS/ICO/SVG files derived from it) | LightCraft app icon (lynx) | LightCraft project owner (drawn in ArtCraft) | original work (vectorised from the owner's drawing; see `assets/app-icon/README.md`) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | 2026-10-02 | vectorised to SVG; rendered to PNG/ICNS/ICO by `packaging/icons.sh` |
| `assets/app-icon/` (`lightcraft.svg` and the PNG/ICNS/ICO/SVG files derived from it) | LightCraft app icon (lynx) | LightCraft project owner (drawn by hand) | original work (vectorised from the owner's drawing; see `assets/app-icon/README.md`) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | 2026-10-02 | vectorised to SVG; rendered to PNG/ICNS/ICO by `packaging/icons.sh` |
| `assets/camera-profiles/*.json` | Camera colour profiles (matrix + hue/saturation/value table), built into LightCraft | ILCE-7M4: Harald Hoyer | original work: fitted by `lightcraft-cli calibrate` to the contributor's own raw photos and their in-camera JPEGs (597 ILCE-7M4 photos, 2026); aggregate colour statistics only, no image content; no Adobe or third-party profile data | MIT OR Apache-2.0 | 2026-10-07 | none |
| `packaging/macos/dmg/` (`background.svg`, the `background.tiff` rendered from it by `generate.py`, and the `dmg-layout.DS_Store` layout file) | LightCraft macOS DMG window background | @XusBadia | original work for this repository, derived from the LightCraft app icon (`assets/app-icon/lightcraft.svg`, referenced via `<image>`, not copied); text is outlined Inter / JetBrains Mono glyph paths | MIT OR Apache-2.0 | 2026-10-08 | none (original); used for the Finder window of the macOS DMG, `packaging/macos/dmg/generate.py` renders it to `background.tiff` |
| `assets/camera-profiles/ILCE-7CR.json` | Sony ILCE-7CR camera colour profile (matrix + hue/saturation/value table), built into LightCraft | LightCraft contributors; source photographs supplied by @AlexChambers | original work: fitted by `lightcraft-cli calibrate` to 125 usable ILCE-7CR ARWs (of 131, September 2025 to September 2026, Standard creative style) and their in-camera JPEGs; aggregate colour statistics only, no image content; no Adobe or third-party profile data | MIT OR Apache-2.0 | 2026-10-09 | none |
@@ -23,7 +23,7 @@ covers a whole directory), or if a licence file referenced in the Licence column
| `docs/images/*-earthrise.jpg`, `docs/images/grid-pd.jpg` | "Earthrise" (AS08-14-2383) | NASA / Bill Anders, Apollo 8 (1968) | https://commons.wikimedia.org/wiki/File:NASA-Apollo8-Dec24-Earthrise.jpg | Public domain (NASA) | 2026-09-30 | developed in LightCraft; shown inside app screenshots |
| `docs/images/*-blue-marble.jpg`, `docs/images/grid-pd.jpg` | "The Blue Marble" (AS17-148-22727) | NASA, Apollo 17 crew (1972) | https://commons.wikimedia.org/wiki/File:The_Earth_seen_from_Apollo_17.jpg | Public domain (NASA) | 2026-09-30 | developed in LightCraft; shown inside app screenshots |
| `docs/images/*.jpg` (UI) | LightCraft application screenshots | LightCraft contributors | original work (captured with `docs/showcase/`) | MIT OR Apache-2.0 | 2026-09-30 | n/a |
| `docs/brand/` (artcraft-logo and artcraft-mark, SVG and PNG) | ArtCraft wordmark and mark | ArtCraft Team | original work (https://getartcraft.com/) | ArtCraft trademark, see `docs/brand/LICENSE-brand.txt` (not open source) | 2026-10-01 | none |
| `crates/ui-egui/src/theme_catppuccin.rs` (Catppuccin palettes) | Catppuccin Latte, Frappé, Macchiato and Mocha colours used by the Catppuccin themes | Catppuccin | <https://catppuccin.com/palette> | MIT, [`LICENSE-catppuccin.txt`](../crates/ui-egui/src/LICENSE-catppuccin.txt) | 2026-10-11 | none |
| craft-fonts: optional build input, not files in this repository | BIZ UDPGothic (Regular, Bold), BIZ UDMincho Regular, Shippori Mincho Regular, Noto Sans CJK SC Regular | Morisawa Inc. / The BIZ UDGothic and BIZ UDMincho Project Authors; The Shippori Mincho Project Authors; Google and Adobe (Noto Sans CJK, maintainer-approved exception; see AGENTS.md) (per craft-fonts' attribution) | https://github.com/storytold/craft-fonts/blob/main/ATTRIBUTION.md | SIL Open Font License 1.1 (each font's OFL.txt in craft-fonts; release packages ship it as OFL-<family>.txt) | 2026-10-06 | none; native builds made with `CRAFT_FONTS_DIR` embed the manifest fonts (all official releases); the web build embeds BIZ UDPGothic Regular and ships Noto Sans CJK SC Regular as a separate font file |
| `crates/ui-egui/locales/uk.json`, `crates/ui-egui/locales/uk-formats.json` | Ukrainian interface catalogs | @dmatviichuk with Codex; PhotoCraft, FilmCraft and VectorCraft translation contributors for reused labels | original translations from English source; 337 initial English-key matches reviewed from [PhotoCraft 69c41f3](https://github.com/storytold/photocraft/blob/69c41f3523e147eb215da8c7b4c29b18b35d1c63/crates/ui-egui/src/i18n/uk.tsv), [FilmCraft 4854c27](https://github.com/storytold/filmcraft/blob/4854c277536fe8118257362304b6a7d82d8e704b/crates/ui-egui/src/i18n/uk.tsv), [VectorCraft 4b44265](https://github.com/storytold/vectorcraft/blob/4b44265965fdd6ffedfd6182a892c1a6c360d344/crates/ui-egui/src/i18n/uk.tsv) | MIT OR Apache-2.0 (`LICENSE-MIT`, `LICENSE-APACHE`, also the source repositories' licences) | 2026-10-09 | adapted to LightCraft photo-development context, completed catalogs, reviewed spelling and placeholders |
+1 -1
View File
@@ -2,7 +2,7 @@ LightCraft app icon (lightcraft.svg and every file derived from it in this direc
lightcraft-small.svg, lightcraft-1024.png, lightcraft-macos-512.png, lightcraft.icns,
lightcraft.ico, hicolor/).
Original artwork made for this project by the LightCraft project owner in ArtCraft (no
Original artwork made for this project by the LightCraft project owner, drawn by hand (no
third-party material). Licensed like the rest of LightCraft, under either of
* Apache License, Version 2.0 (https://www.apache.org/licenses/LICENSE-2.0)
+1 -1
View File
@@ -20,7 +20,7 @@ Windows and Linux files use the full-bleed tile so the lynx reads at 16-48 px.
## Provenance
The owner's original drawing, made in ArtCraft (2880 px, keyed to the three colours), vectorised with
The owner's original drawing, drawn by hand (2880 px, keyed to the three colours), vectorised with
craftrules `assets/logo-options/_tools/vectorize_tile.py`. The source drawing stays in craftrules at
`assets/app-icons/lightcraft/source.png`; `lightcraft.svg` here is the canonical artwork. Licence:
`LICENSE.txt` (MIT OR Apache-2.0, like the repo).
+4 -5
View File
@@ -95,8 +95,6 @@
"Aqua Luminance": "Aquamarin – Luminanz",
"Aqua Saturation": "Aquamarin – Sättigung",
"Arrange Panel": "Bereich anordnen",
"ArtCraft Website": "ArtCraft-Website",
"ArtCraft — more creative apps": "ArtCraft — weitere Kreativ-Apps",
"As Shot": "Wie Aufnahme",
"As shot": "Wie Aufnahme",
"Ascending": "Aufsteigend",
@@ -728,9 +726,6 @@
"JPEG (Large)": "JPEG (groß)",
"JPEG (Small)": "JPEG (klein)",
"JPEG with the same name (`IMG_0001.CR3` + `IMG_0001.JPG`) no longer share one sidecar: the raw keeps `IMG_0001.xmp`,": "JPEG mit gleichem Namen (`IMG_0001.CR3` + `IMG_0001.JPG`) keine Begleitdatei mehr: RAW verwendet `IMG_0001.xmp`,",
"Join the ArtCraft Discord": "ArtCraft auf Discord beitreten",
"Join the ArtCraft Discord…": "ArtCraft auf Discord beitreten…",
"Join the ArtCraft community on Discord": "Der ArtCraft-Community auf Discord beitreten",
"Keep in Local": "In „Lokal“ behalten",
"Keep it on a drive with room: smart previews are about 1 MB per photo. The thumbnail cache stays in the library.": "Wähle ein Laufwerk mit genügend Platz: Smart-Vorschauen benötigen etwa 1 MB pro Foto. Der Miniaturbild-Cache bleibt in der Bibliothek.",
"Keyboard Shortcuts": "Tastenkürzel",
@@ -2043,6 +2038,10 @@
"Midnight": "Mitternacht",
"Silver": "Silber",
"Paper": "Papier",
"Catppuccin Latte": "Catppuccin Latte",
"Catppuccin Frappé": "Catppuccin Frappé",
"Catppuccin Macchiato": "Catppuccin Macchiato",
"Catppuccin Mocha": "Catppuccin Mocha",
"Show less": "Weniger anzeigen",
"Quit while tasks are running?": "Beenden, während Aufgaben laufen?",
"Exporting contact sheet": "Kontaktabzug wird exportiert",
+4 -5
View File
@@ -80,8 +80,6 @@
"Aqua Luminance": "Luminancia aguamarina",
"Aqua Saturation": "Saturación aguamarina",
"Arrange Panel": "Organizar panel",
"ArtCraft Website": "Sitio web de ArtCraft",
"ArtCraft — more creative apps": "ArtCraft: más aplicaciones creativas",
"As Shot": "Como se tomó",
"As shot": "Como se tomó",
"Ascending": "Ascendente",
@@ -691,9 +689,6 @@
"Invert Mask": "Invertir máscara",
"JPEG (Large)": "JPEG (grande)",
"JPEG (Small)": "JPEG (pequeño)",
"Join the ArtCraft Discord": "Unirse al Discord de ArtCraft",
"Join the ArtCraft Discord…": "Unirse al Discord de ArtCraft…",
"Join the ArtCraft community on Discord": "Unirse a la comunidad de ArtCraft en Discord",
"Keep in Local": "Conservar en Local",
"Keep it on a drive with room: smart previews are about 1 MB per photo. The thumbnail cache stays in the library.": "Conviene un disco con espacio: las vistas previas inteligentes ocupan aproximadamente 1 MB por foto. La caché de miniaturas permanece en la biblioteca.",
"Keyboard Shortcuts": "Métodos abreviados de teclado",
@@ -1888,6 +1883,10 @@
"Midnight": "Medianoche",
"Silver": "Plata",
"Paper": "Papel",
"Catppuccin Latte": "Catppuccin Latte",
"Catppuccin Frappé": "Catppuccin Frappé",
"Catppuccin Macchiato": "Catppuccin Macchiato",
"Catppuccin Mocha": "Catppuccin Mocha",
"Show less": "Mostrar menos",
"Quit while tasks are running?": "¿Salir con tareas en curso?",
"Exporting contact sheet": "Exportando hoja de contactos",
+4 -5
View File
@@ -79,8 +79,6 @@
"Aqua Hue": "Teinte aigue-marine",
"Aqua Luminance": "Luminance aigue-marine",
"Aqua Saturation": "Saturation aigue-marine",
"ArtCraft Website": "Site web d'ArtCraft",
"ArtCraft — more creative apps": "ArtCraft : d'autres applications créatives",
"As Shot": "Tel quel",
"As shot": "Tel quel",
"Ascending": "Croissant",
@@ -688,9 +686,6 @@
"Invert Mask": "Inverser le masque",
"JPEG (Large)": "JPEG (grand)",
"JPEG (Small)": "JPEG (petit)",
"Join the ArtCraft Discord": "Rejoindre le Discord d'ArtCraft",
"Join the ArtCraft Discord…": "Rejoindre le Discord d'ArtCraft…",
"Join the ArtCraft community on Discord": "Rejoindre la communauté ArtCraft sur Discord",
"Keep in Local": "Conserver dans Local",
"Keep it on a drive with room: smart previews are about 1 MB per photo. The thumbnail cache stays in the library.": "Choisissez un disque avec de la place : les aperçus dynamiques font environ 1 Mo par photo. Le cache des miniatures reste dans la bibliothèque.",
"Keyboard Shortcuts": "Raccourcis clavier",
@@ -1947,6 +1942,10 @@
"Midnight": "Minuit",
"Silver": "Argent",
"Paper": "Papier",
"Catppuccin Latte": "Catppuccin Latte",
"Catppuccin Frappé": "Catppuccin Frappé",
"Catppuccin Macchiato": "Catppuccin Macchiato",
"Catppuccin Mocha": "Catppuccin Mocha",
"Add to Apple Photos": "Ajouter à Apple Photos",
"Adding to Apple Photos…": "Ajout à Apple Photos…",
"not added to Apple Photos (cancelled)": "non ajouté à Apple Photos (annulé)",
+4 -5
View File
@@ -82,8 +82,6 @@
"Aqua Luminance": "アクアの輝度",
"Aqua Saturation": "アクアの彩度",
"Arrange Panel": "パネルを配置",
"ArtCraft Website": "ArtCraftのウェブサイト",
"ArtCraft — more creative apps": "ArtCraft — その他のクリエイティブアプリ",
"As Shot": "撮影時の設定",
"As shot": "撮影時の設定",
"Ascending": "昇順",
@@ -536,9 +534,6 @@
"Invert Component": "構成要素を反転",
"JPEG (Large)": "JPEG(大)",
"JPEG (Small)": "JPEG(小)",
"Join the ArtCraft Discord": "ArtCraftのDiscordに参加",
"Join the ArtCraft Discord…": "ArtCraftのDiscordに参加…",
"Join the ArtCraft community on Discord": "DiscordのArtCraftコミュニティに参加",
"Keywords (K)": "キーワード(K)",
"Label": "ラベル",
"Label Set": "ラベルセット",
@@ -1890,6 +1885,10 @@
"Midnight": "ミッドナイト",
"Silver": "シルバー",
"Paper": "ペーパー",
"Catppuccin Latte": "Catppuccin Latte",
"Catppuccin Frappé": "Catppuccin Frappé",
"Catppuccin Macchiato": "Catppuccin Macchiato",
"Catppuccin Mocha": "Catppuccin Mocha",
"Show less": "表示を減らす",
"Quit while tasks are running?": "タスクの実行中に終了しますか?",
"Exporting contact sheet": "コンタクトシートを書き出し中",
+4 -5
View File
@@ -85,8 +85,6 @@
"Aqua Luminance": "Luminância do ciano",
"Aqua Saturation": "Saturação do ciano",
"Arrange Panel": "Organizar painel",
"ArtCraft Website": "Site do ArtCraft",
"ArtCraft — more creative apps": "ArtCraft — mais aplicativos criativos",
"As Shot": "Como capturado",
"As shot": "Como capturado",
"Ascending": "Crescente",
@@ -697,9 +695,6 @@
"Invert Mask": "Inverter máscara",
"JPEG (Large)": "JPEG (grande)",
"JPEG (Small)": "JPEG (pequeno)",
"Join the ArtCraft Discord": "Entrar no Discord do ArtCraft",
"Join the ArtCraft Discord…": "Entrar no Discord do ArtCraft…",
"Join the ArtCraft community on Discord": "Participe da comunidade ArtCraft no Discord",
"Keep in Local": "Manter em Local",
"Keep it on a drive with room: smart previews are about 1 MB per photo. The thumbnail cache stays in the library.": "Guarde em um disco com espaço: as pré-visualizações inteligentes ocupam cerca de 1 MB por foto. O cache de miniaturas permanece na biblioteca.",
"Keyboard Shortcuts": "Atalhos de teclado",
@@ -1888,6 +1883,10 @@
"Midnight": "Meia-noite",
"Silver": "Prata",
"Paper": "Papel",
"Catppuccin Latte": "Catppuccin Latte",
"Catppuccin Frappé": "Catppuccin Frappé",
"Catppuccin Macchiato": "Catppuccin Macchiato",
"Catppuccin Mocha": "Catppuccin Mocha",
"Show less": "Mostrar menos",
"Quit while tasks are running?": "Sair com tarefas em andamento?",
"Exporting contact sheet": "Exportando folha de contato",
+4 -5
View File
@@ -61,8 +61,6 @@
"Aqua Luminance": "Яркость голубого",
"Aqua Saturation": "Насыщенность голубого",
"Arrange Panel": "Расположить панель",
"ArtCraft Website": "Сайт ArtCraft",
"ArtCraft — more creative apps": "ArtCraft — другие творческие приложения",
"As Shot": "Как снято",
"As shot": "Как снято",
"Ascending": "По возрастанию",
@@ -576,8 +574,6 @@
"Invert Mask": "Инвертировать маску",
"JPEG (Large)": "JPEG (большой)",
"JPEG (Small)": "JPEG (малый)",
"Join the ArtCraft Discord": "Присоединяйтесь к Discord ArtCraft",
"Join the ArtCraft Discord…": "Присоединиться к Discord ArtCraft…",
"Keep in Local": "Оставить в «Локальном»",
"Keep it on a drive with room: smart previews are about 1 MB per photo. The thumbnail cache stays in the library.": "Храните их на диске со свободным местом: смарт-просмотр занимает около 1 МБ на фото. Кэш миниатюр остаётся в библиотеке.",
"Keyboard Shortcuts": "Сочетания клавиш",
@@ -1601,6 +1597,10 @@
"Midnight": "Полночь",
"Silver": "Серебро",
"Paper": "Бумага",
"Catppuccin Latte": "Catppuccin Latte",
"Catppuccin Frappé": "Catppuccin Frappé",
"Catppuccin Macchiato": "Catppuccin Macchiato",
"Catppuccin Mocha": "Catppuccin Mocha",
"Show less": "Показать меньше",
"Quit while tasks are running?": "Выйти, пока выполняются задачи?",
"Exporting contact sheet": "Экспорт контактного листа",
@@ -1832,7 +1832,6 @@
"Install Face Model": "Установить модель лиц",
"Invert Component": "Инвертировать компонент",
"JPEG with the same name (`IMG_0001.CR3` + `IMG_0001.JPG`) no longer share one sidecar: the raw keeps `IMG_0001.xmp`,": "JPEG с таким же именем (`IMG_0001.CR3` + `IMG_0001.JPG`) больше не используют общий XMP-файл: RAW сохраняет `IMG_0001.xmp`,",
"Join the ArtCraft community on Discord": "Присоединяйтесь к сообществу ArtCraft в Discord",
"Label": "Метка",
"Label Set": "Набор меток",
"Last GPU fallback": "Последний откат с GPU",
+4 -5
View File
@@ -9,7 +9,6 @@
"Aperture": "Діафрагма",
"Apply": "Застосувати",
"Aqua": "Бірюзовий",
"ArtCraft Website": "Вебсайт ArtCraft",
"Aspect Ratio": "Співвідношення сторін",
"Auto": "Авто",
"Automatic": "Автоматично",
@@ -100,8 +99,6 @@
"Horizontal inset (% of short edge)": "Відступ по горизонталі (% короткого краю)",
"ISO Speed": "Чутливість ISO",
"Imported": "Імпортовані",
"Join the ArtCraft Discord": "Приєднатися до Discord ArtCraft",
"Join the ArtCraft Discord…": "Приєднатися до Discord ArtCraft…",
"Label": "Мітка",
"Last commit": "Останній коміт",
"Lens Blur": "Розмиття об’єктива",
@@ -412,7 +409,6 @@
"Aqua Hue": "Тон бірюзового",
"Aqua Luminance": "Яскравість бірюзового",
"Aqua Saturation": "Насиченість бірюзового",
"ArtCraft — more creative apps": "ArtCraft — інші творчі застосунки",
"As Shot": "Як під час знімання",
"As shot": "Як під час знімання",
"Ascending": "За зростанням",
@@ -773,7 +769,6 @@
"Invert Component": "Інвертувати компонент",
"JPEG (Large)": "JPEG (великий)",
"JPEG (Small)": "JPEG (малий)",
"Join the ArtCraft community on Discord": "Приєднатися до спільноти ArtCraft у Discord",
"Keywords (K)": "Ключові слова (K)",
"Label Set": "Набір міток",
"Last GPU fallback": "Останній перехід із ГП",
@@ -2141,6 +2136,10 @@
"Midnight": "Опівніч",
"Silver": "Срібло",
"Paper": "Папір",
"Catppuccin Latte": "Catppuccin Latte",
"Catppuccin Frappé": "Catppuccin Frappé",
"Catppuccin Macchiato": "Catppuccin Macchiato",
"Catppuccin Mocha": "Catppuccin Mocha",
"Add to Apple Photos": "Додати до Apple Фото",
"Adding to Apple Photos…": "Додавання до Apple Фото…",
"not added to Apple Photos (cancelled)": "не додано до Apple Фото (скасовано)",
+4 -5
View File
@@ -84,8 +84,6 @@
"Aqua Luminance": "青色明度",
"Aqua Saturation": "青色饱和度",
"Arrange Panel": "排列面板",
"ArtCraft Website": "ArtCraft 网站",
"ArtCraft — more creative apps": "ArtCraft — 更多创意应用",
"As Shot": "拍摄时设置",
"As shot": "拍摄时设置",
"Ascending": "升序",
@@ -534,7 +532,6 @@
"Inspect Lightroom Catalog": "检查 Lightroom 目录",
"Inspecting Lightroom Catalog": "正在检查 Lightroom 目录",
"Invert Component": "反相组件",
"Join the ArtCraft community on Discord": "加入 Discord 上的 ArtCraft 社区",
"Label": "标签",
"Label Set": "标签集",
"Last GPU fallback": "最近一次 GPU 回退",
@@ -802,8 +799,6 @@
"Invert Mask": "反相蒙版",
"JPEG (Large)": "JPEG(大)",
"JPEG (Small)": "JPEG(小)",
"Join the ArtCraft Discord": "加入 ArtCraft Discord",
"Join the ArtCraft Discord…": "加入 ArtCraft Discord…",
"Keep in Local": "保留在本地",
"Keep it on a drive with room: smart previews are about 1 MB per photo. The thumbnail cache stays in the library.": "请选择空间充足的驱动器:智能预览每张照片约 1 MB。缩略图缓存仍保留在图库中。",
"Keyboard Shortcuts": "键盘快捷键",
@@ -1888,6 +1883,10 @@
"Midnight": "午夜",
"Silver": "银色",
"Paper": "纸白",
"Catppuccin Latte": "Catppuccin Latte",
"Catppuccin Frappé": "Catppuccin Frappé",
"Catppuccin Macchiato": "Catppuccin Macchiato",
"Catppuccin Mocha": "Catppuccin Mocha",
"Show less": "收起",
"Quit while tasks are running?": "要在任务运行时退出吗?",
"Exporting contact sheet": "正在导出联系表",
+4 -5
View File
@@ -84,8 +84,6 @@
"Aqua Luminance": "青色明度",
"Aqua Saturation": "青色飽和度",
"Arrange Panel": "排列面板",
"ArtCraft Website": "ArtCraft 網站",
"ArtCraft — more creative apps": "ArtCraft — 更多創作應用程式",
"As Shot": "拍攝時設定",
"As shot": "拍攝時設定",
"Ascending": "遞增",
@@ -534,7 +532,6 @@
"Inspect Lightroom Catalog": "檢查 Lightroom 目錄",
"Inspecting Lightroom Catalog": "正在檢查 Lightroom 目錄",
"Invert Component": "反轉元件",
"Join the ArtCraft community on Discord": "加入 Discord 上的 ArtCraft 社群",
"Label": "標籤",
"Label Set": "標籤集",
"Last GPU fallback": "最近一次 GPU 備援",
@@ -802,8 +799,6 @@
"Invert Mask": "反轉遮色片",
"JPEG (Large)": "JPEG(大尺寸)",
"JPEG (Small)": "JPEG(小尺寸)",
"Join the ArtCraft Discord": "加入 ArtCraft Discord",
"Join the ArtCraft Discord…": "加入 ArtCraft Discord…",
"Keep in Local": "保留在本機",
"Keep it on a drive with room: smart previews are about 1 MB per photo. The thumbnail cache stays in the library.": "請放在空間充足的磁碟:每張智慧型預覽約 1 MB。縮圖快取仍保留在照片庫中。",
"Keyboard Shortcuts": "鍵盤快速鍵",
@@ -1888,6 +1883,10 @@
"Midnight": "午夜",
"Silver": "銀色",
"Paper": "紙白",
"Catppuccin Latte": "Catppuccin Latte",
"Catppuccin Frappé": "Catppuccin Frappé",
"Catppuccin Macchiato": "Catppuccin Macchiato",
"Catppuccin Mocha": "Catppuccin Mocha",
"Show less": "收合",
"Quit while tasks are running?": "要在工作執行時結束嗎?",
"Exporting contact sheet": "正在匯出聯絡表",
+28
View File
@@ -0,0 +1,28 @@
Catppuccin
https://catppuccin.com/palette
https://github.com/catppuccin/catppuccin
The Catppuccin Latte, Frappé, Macchiato and Mocha themes' colour palettes in `theme_catppuccin.rs`
are the Catppuccin project's palettes, used under the MIT License below.
MIT License
Copyright (c) 2021 Catppuccin
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
-22
View File
@@ -78,9 +78,6 @@ pub enum Icon {
Edited,
/// Targeted adjustment: a ring with a centre dot and up/down arrows (drag vertically).
Target,
/// Community chat (opens the ArtCraft Discord): a speech bubble with three dots. Our own
/// generic drawing, not any service's logo.
Chat,
/// Face boxes on/off: four corner brackets round a small face.
FaceBox,
/// Colour grading, all three wheels: three small circles.
@@ -555,25 +552,6 @@ fn paint_with(p: &Painter, rect: Rect, icon: Icon, color: Color32, turn: Option<
pen.line(&[(13.5, 5.5), (15.5, 3.5), (17.5, 5.5)]);
pen.line(&[(13.5, 14.5), (15.5, 16.5), (17.5, 14.5)]);
}
Chat => {
// rounded bubble with a tail at the lower left
pen.closed(&[
(4.5, 3.5),
(15.5, 3.5),
(17.0, 5.0),
(17.0, 12.0),
(15.5, 13.5),
(9.0, 13.5),
(5.5, 16.8),
(5.5, 13.5),
(4.5, 13.5),
(3.0, 12.0),
(3.0, 5.0),
]);
for x in [6.8, 10.0, 13.2] {
pen.dot(x, 8.5, 1.1);
}
}
}
}
+2 -1
View File
@@ -36,6 +36,7 @@ pub mod sync;
pub mod tasks;
pub mod text_field;
pub mod theme;
mod theme_catppuccin;
pub mod titlebar;
pub mod widgets;
@@ -210,7 +211,7 @@ pub struct Services {
pub pick_folder: Option<PickFolder>,
/// Open a Lightroom Classic `.lrcat` catalog for read-only import.
pub pick_lightroom_catalog: Option<PickFolder>,
/// Open a web link in the browser (Help menu, About, Discord button).
/// Open a web link in the browser (Help menu, About).
pub open_url: Option<OpenUrlFn>,
/// Open a file in an external editor (Edit in External Editor; desktop only).
pub open_with: Option<OpenWithFn>,
+4 -17
View File
@@ -1,13 +1,7 @@
//! Community and project links (Help menu, About dialog, top-bar Discord button).
//! Community and project links (Help menu, About dialog).
/// The app's id in ArtCraft URLs.
/// The app's id in project URLs.
pub const APP: &str = "lightcraft";
/// The ArtCraft community Discord.
pub const DISCORD: &str = "https://discord.gg/artcraft";
/// The ArtCraft website.
pub const WEBSITE: &str = "https://getartcraft.com";
/// This app's page on the ArtCraft website.
pub const APP_PAGE: &str = "https://getartcraft.com/apps/lightcraft";
/// This app's source repository.
pub const GITHUB: &str = "https://github.com/storytold/lightcraft";
@@ -15,14 +9,8 @@ pub const GITHUB: &str = "https://github.com/storytold/lightcraft";
/// The user documentation (docs/ in the repository).
pub const HELP: &str = "https://github.com/storytold/lightcraft/tree/main/docs";
pub const LINKS: &[(&str, &str, &str)] = &[
("app.help", "LightCraft Help", HELP),
("app.discord", "Join the ArtCraft Discord…", DISCORD),
("app.website", "LightCraft Website", APP_PAGE),
("app.github", "LightCraft on GitHub", GITHUB),
("app.artcraft", "ArtCraft Website", WEBSITE),
("app.feedback", "Send Feedback…", FEEDBACK),
];
pub const LINKS: &[(&str, &str, &str)] =
&[("app.help", "LightCraft Help", HELP), ("app.github", "LightCraft on GitHub", GITHUB), ("app.feedback", "Send Feedback…", FEEDBACK)];
/// Where feedback and bug reports go.
pub const FEEDBACK: &str = "https://github.com/storytold/lightcraft/issues/new";
@@ -50,7 +38,6 @@ mod tests {
assert!(!label.is_empty());
assert_eq!(url_of(id), Some(*url));
}
assert!(APP_PAGE.ends_with(&format!("/apps/{APP}")));
assert!(GITHUB.ends_with(&format!("/storytold/{APP}")));
}
}
+3 -17
View File
@@ -232,21 +232,7 @@ const LAYOUT: &[(&str, &[&str])] = &[
),
(
"Help",
&[
"app.discord",
"app.feedback",
"---",
"app.website",
"app.github",
"app.artcraft",
"---",
"app.whatsNew",
"app.shortcuts",
"app.systemInfo",
"app.openLogFolder",
"---",
"app.about",
],
&["app.feedback", "---", "app.github", "---", "app.whatsNew", "app.shortcuts", "app.systemInfo", "app.openLogFolder", "---", "app.about"],
),
];
@@ -496,9 +482,9 @@ fn expanded(app: &LightcraftApp, name: &str) -> Option<Vec<MenuNode>> {
.collect();
v.push(item("view.appearance", Value::Null, "Next Appearance Mode", None, true, None));
// the saved theme of each family is checked
for group in [[ThemeKind::Charcoal, ThemeKind::Midnight], [ThemeKind::Silver, ThemeKind::Paper]] {
for dark in [true, false] {
v.push(MenuNode::Separator);
for k in group {
for k in ThemeKind::ALL.into_iter().filter(|k| k.is_dark() == dark) {
let on = if k.is_dark() { s.dark_theme.kind() == k } else { s.light_theme.kind() == k };
v.push(item("view.theme", json!({"theme": k.id()}), k.label(), None, true, Some(on)));
}
+2 -5
View File
@@ -202,11 +202,8 @@ pub const UI_COMMANDS: &[UiCommand] = &[
("app.whatsNew", "What's New", None, "Help"),
("dialog.cull", "Assisted Culling…", None, "Photo"),
("app.help", "LightCraft Help", Some("F1"), "Help"),
("app.discord", "Join the ArtCraft Discord…", None, "Help"),
("app.feedback", "Send Feedback…", None, "Help"),
("app.website", "LightCraft Website", None, "Help"),
("app.github", "LightCraft on GitHub", None, "Help"),
("app.artcraft", "ArtCraft Website", None, "Help"),
("app.shortcuts", "Keyboard Shortcuts", Some("Cmd+/"), "Help"),
("app.setShortcut", "Set Keyboard Shortcut", None, ""),
("app.resetShortcuts", "Reset All Keyboard Shortcuts", None, ""),
@@ -1783,8 +1780,8 @@ pub fn run_ui_command(app: &mut LightcraftApp, id: &str, p: &Value) -> Option<Re
"app.export" => crate::control::export_active(app, p),
"app.showInFinder" => show_in_finder(app),
"app.openLogFolder" => open_log_folder(app),
"app.discord" | "app.website" | "app.github" | "app.artcraft" | "app.help" | "app.feedback" => {
let url = crate::links::url_of(id).unwrap_or(crate::links::WEBSITE);
"app.github" | "app.help" | "app.feedback" => {
let url = crate::links::url_of(id).unwrap_or(crate::links::GITHUB);
crate::links::open(app, url)
}
"app.exportPrevious" => match app.session.last_export.clone() {
+3 -18
View File
@@ -1144,24 +1144,9 @@ pub fn show(app: &mut LightcraftApp, ctx: &egui::Context) {
crate::theme::font_credits(app.chinese_font.is_some())
));
ui.add_space(10.0);
let discord = egui::Button::new(egui::RichText::new(crate::i18n::tr("Join the ArtCraft Discord")).font(t.semibold(15.0)).color(egui::Color32::WHITE))
.fill(t.accent)
.min_size(egui::vec2(260.0, 34.0));
let r = ui.add(discord).on_hover_text(crate::links::DISCORD);
crate::widgets::register(ui.ctx(), "button:aboutDiscord", r.rect);
if r.clicked() {
let _ = crate::links::open(app, crate::links::DISCORD);
}
ui.add_space(6.0);
for (label, url) in [
("LightCraft website", crate::links::APP_PAGE),
("Source code on GitHub", crate::links::GITHUB),
("ArtCraft — more creative apps", crate::links::WEBSITE),
] {
let r = ui.link(crate::i18n::tr(label)).on_hover_text(url);
if r.clicked() {
let _ = crate::links::open(app, url);
}
let url = crate::links::GITHUB;
if ui.link(crate::i18n::tr("Source code on GitHub")).on_hover_text(url).clicked() {
let _ = crate::links::open(app, url);
}
}
}
-1
View File
@@ -159,7 +159,6 @@ pub fn show(app: &mut LightcraftApp, ui: &mut egui::Ui) {
});
let cloud_tip = unsaved.as_deref().unwrap_or("Local library — no cloud account needed");
for (id, icon, tip, cmd) in [
("discord", Icon::Chat, "Join the ArtCraft community on Discord", "app.discord"),
("cloud", Icon::Cloud, cloud_tip, ""),
("help", Icon::Help, "Keyboard shortcuts", "app.shortcuts"),
("share", Icon::Share, "Export", "dialog.export"),
+15 -2
View File
@@ -191,6 +191,9 @@ pub enum DarkTheme {
#[default]
Charcoal,
Midnight,
CatppuccinFrappe,
CatppuccinMacchiato,
CatppuccinMocha,
}
/// The theme the light appearance uses.
@@ -200,24 +203,30 @@ pub enum LightTheme {
#[default]
Silver,
Paper,
CatppuccinLatte,
}
impl DarkTheme {
pub const ALL: [DarkTheme; 2] = [DarkTheme::Charcoal, DarkTheme::Midnight];
pub const ALL: [DarkTheme; 5] =
[DarkTheme::Charcoal, DarkTheme::Midnight, DarkTheme::CatppuccinFrappe, DarkTheme::CatppuccinMacchiato, DarkTheme::CatppuccinMocha];
pub fn kind(self) -> crate::theme::ThemeKind {
match self {
DarkTheme::Charcoal => crate::theme::ThemeKind::Charcoal,
DarkTheme::Midnight => crate::theme::ThemeKind::Midnight,
DarkTheme::CatppuccinFrappe => crate::theme::ThemeKind::CatppuccinFrappe,
DarkTheme::CatppuccinMacchiato => crate::theme::ThemeKind::CatppuccinMacchiato,
DarkTheme::CatppuccinMocha => crate::theme::ThemeKind::CatppuccinMocha,
}
}
}
impl LightTheme {
pub const ALL: [LightTheme; 2] = [LightTheme::Silver, LightTheme::Paper];
pub const ALL: [LightTheme; 3] = [LightTheme::Silver, LightTheme::Paper, LightTheme::CatppuccinLatte];
pub fn kind(self) -> crate::theme::ThemeKind {
match self {
LightTheme::Silver => crate::theme::ThemeKind::Silver,
LightTheme::Paper => crate::theme::ThemeKind::Paper,
LightTheme::CatppuccinLatte => crate::theme::ThemeKind::CatppuccinLatte,
}
}
}
@@ -399,6 +408,10 @@ impl AppSettings {
ThemeKind::Midnight => self.dark_theme = DarkTheme::Midnight,
ThemeKind::Silver => self.light_theme = LightTheme::Silver,
ThemeKind::Paper => self.light_theme = LightTheme::Paper,
ThemeKind::CatppuccinLatte => self.light_theme = LightTheme::CatppuccinLatte,
ThemeKind::CatppuccinFrappe => self.dark_theme = DarkTheme::CatppuccinFrappe,
ThemeKind::CatppuccinMacchiato => self.dark_theme = DarkTheme::CatppuccinMacchiato,
ThemeKind::CatppuccinMocha => self.dark_theme = DarkTheme::CatppuccinMocha,
}
self.appearance_mode = if kind.is_dark() { AppearanceMode::Dark } else { AppearanceMode::Light };
}
+32 -3
View File
@@ -3,7 +3,8 @@
//!
//! Themes come in two families, picked by the Appearance Mode setting (Settings ▸ Interface):
//! - dark: **Charcoal** (the default, the observed dark look) and **Midnight** (near black);
//! - light: **Silver** (light grey chrome) and **Paper** (near white).
//! - light: **Silver** (light grey chrome) and **Paper** (near white);
//! - plus the four Catppuccin flavours: **Latte** (light), **Frappé**, **Macchiato** and **Mocha** (dark).
use std::sync::Arc;
@@ -87,13 +88,30 @@ pub enum ThemeKind {
Midnight,
Silver,
Paper,
/// Catppuccin Latte (light).
CatppuccinLatte,
/// Catppuccin Frappé (dark).
CatppuccinFrappe,
/// Catppuccin Macchiato (dark).
CatppuccinMacchiato,
/// Catppuccin Mocha (dark).
CatppuccinMocha,
}
impl ThemeKind {
pub const ALL: [ThemeKind; 4] = [ThemeKind::Charcoal, ThemeKind::Midnight, ThemeKind::Silver, ThemeKind::Paper];
pub const ALL: [ThemeKind; 8] = [
ThemeKind::Charcoal,
ThemeKind::Midnight,
ThemeKind::Silver,
ThemeKind::Paper,
ThemeKind::CatppuccinLatte,
ThemeKind::CatppuccinFrappe,
ThemeKind::CatppuccinMacchiato,
ThemeKind::CatppuccinMocha,
];
pub fn is_dark(self) -> bool {
matches!(self, ThemeKind::Charcoal | ThemeKind::Midnight)
!matches!(self, ThemeKind::Silver | ThemeKind::Paper | ThemeKind::CatppuccinLatte)
}
/// The theme's id (settings value and command suffix).
@@ -103,6 +121,10 @@ impl ThemeKind {
ThemeKind::Midnight => "midnight",
ThemeKind::Silver => "silver",
ThemeKind::Paper => "paper",
ThemeKind::CatppuccinLatte => "catppuccinLatte",
ThemeKind::CatppuccinFrappe => "catppuccinFrappe",
ThemeKind::CatppuccinMacchiato => "catppuccinMacchiato",
ThemeKind::CatppuccinMocha => "catppuccinMocha",
}
}
@@ -113,6 +135,10 @@ impl ThemeKind {
ThemeKind::Midnight => "Midnight",
ThemeKind::Silver => "Silver",
ThemeKind::Paper => "Paper",
ThemeKind::CatppuccinLatte => "Catppuccin Latte",
ThemeKind::CatppuccinFrappe => "Catppuccin Frappé",
ThemeKind::CatppuccinMacchiato => "Catppuccin Macchiato",
ThemeKind::CatppuccinMocha => "Catppuccin Mocha",
}
}
}
@@ -243,6 +269,9 @@ impl Tokens {
caution: rgb(0xb0761a),
..base
},
ThemeKind::CatppuccinLatte | ThemeKind::CatppuccinFrappe | ThemeKind::CatppuccinMacchiato | ThemeKind::CatppuccinMocha => {
crate::theme_catppuccin::tokens(kind, base)
}
}
}
+52
View File
@@ -0,0 +1,52 @@
//! Catppuccin Latte, Frappé, Macchiato and Mocha. Palette: the Catppuccin project's colours
//! (https://catppuccin.com/palette, MIT; see LICENSE-catppuccin.txt), accent Mauve.
use craft_ui::theme::catppuccin::Flavor;
use egui::Color32;
use crate::theme::{ThemeKind, Tokens};
/// Tokens for a Catppuccin kind, on top of `base` (which supplies the metrics). Any other kind
/// falls back to Mocha (never reached: `for_kind` only routes these four here).
pub(crate) fn tokens(kind: ThemeKind, base: Tokens) -> Tokens {
let f = match kind {
ThemeKind::CatppuccinLatte => Flavor::Latte,
ThemeKind::CatppuccinFrappe => Flavor::Frappe,
ThemeKind::CatppuccinMacchiato => Flavor::Macchiato,
_ => Flavor::Mocha,
};
let (p, light) = (f.palette(), !f.is_dark());
// Dark flavours: the photo area is the darkest step; Latte: the chrome is the lightest.
let (chrome, canvas, grid_bg, divider, field) =
if light { (p.mantle, p.crust, p.base, p.surface0, p.base) } else { (p.base, p.mantle, p.crust, p.crust, p.crust) };
Tokens {
chrome,
canvas,
grid_bg,
cell: canvas,
cell_selected: if light { p.surface1 } else { p.surface0 },
divider,
inset: if light { p.crust } else { p.mantle },
field,
field_border: p.surface1,
button: if light { p.base } else { p.mantle },
button_border: p.surface1,
hover: p.surface0,
pressed: p.surface1,
tool_active: p.surface1,
text: p.text,
text_label: p.subtext1,
text_dim: p.subtext0,
text_disabled: p.overlay0,
icon: p.subtext0,
track: p.surface1,
thumb: p.overlay1,
thumb_hover: p.text,
accent: p.mauve,
star: p.text,
pick: p.text,
reject: p.red,
caution: p.yellow,
..base
}
}
-42
View File
@@ -1,42 +0,0 @@
ArtCraft brand assets: license
The ArtCraft name, wordmark and mark (the "ArtCraft Marks"), including every file in this
directory in every color, size and format, are owned by the ArtCraft Team. They are trademarks
and are NOT open source. They are not covered by LightCraft's MIT OR Apache-2.0 license, and nothing in
that license, in NOTICE or in any other file of this repository grants any right to them.
Permission
The ArtCraft Team grants a limited, non-exclusive, non-transferable, revocable, royalty-free
permission to use the ArtCraft Marks only:
1. as part of copies of this repository; and
2. within LightCraft itself, its documentation and its official builds, to identify LightCraft as made
by the ArtCraft team and community and to link to getartcraft.com and its community.
Conditions
The permission holds only while every one of these is true:
- The marks are used exactly as supplied in this directory. Do not redraw, recolor, crop,
stretch, rotate, animate, outline or add effects to them, extract parts of them, or combine
them with any other name, mark or artwork.
- They are used only in the context of LightCraft, and only to say that the ArtCraft team makes it.
They must never suggest that the ArtCraft Team made, sponsors, endorses, certifies or supports
any other product, service, fork, modified version, plug-in, organization or person.
- Neither the marks nor the ArtCraft name appear in the name, logo, icon, domain, social media
handle, app-store listing, advertising or marketing of anything other than LightCraft.
Forks and modified versions
If you distribute or publish a modified version of LightCraft, or any work derived from it, you must
remove the ArtCraft Marks from it (or replace them with your own) and must not call it ArtCraft or
present it as an ArtCraft product. You may say, in plain text, that your work is based on LightCraft by
the ArtCraft team. A fork kept only to propose changes back to this repository may keep the marks
unchanged.
Everything else
Any use not expressly permitted here needs prior written permission from the ArtCraft Team
(https://getartcraft.com/). The permission ends automatically for anyone who breaks these terms.
All other rights are reserved.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

-4
View File
@@ -1,4 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-10 -19.42 136.34 136.34" role="img" aria-label="ArtCraft">
<title>ArtCraft</title>
<path fill="#0b0b0c" d="M104.28,49.49L81.55,0h-31.23l-3.17,4.76L14.75,53.63,0,75.85l21.55,21.55,63.79-36.94,16.99,37.04,14.01-21.74-12.06-26.27ZM32.89,65.66l32.42-48.87,10.91,23.77-43.32,25.09Z"/>
</svg>

Before

Width:  |  Height:  |  Size: 341 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

-4
View File
@@ -1,4 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-10 -19.42 136.34 136.34" role="img" aria-label="ArtCraft">
<title>ArtCraft</title>
<path fill="#4e7bfb" d="M104.28,49.49L81.55,0h-31.23l-3.17,4.76L14.75,53.63,0,75.85l21.55,21.55,63.79-36.94,16.99,37.04,14.01-21.74-12.06-26.27ZM32.89,65.66l32.42-48.87,10.91,23.77-43.32,25.09Z"/>
</svg>

Before

Width:  |  Height:  |  Size: 341 B

+1 -1
View File
@@ -199,7 +199,7 @@ rustPlatform.buildRustPackage {
layer as its UI. It ships with lightcraft-cli, a headless renderer, command runner and MCP
server for AI agents.
'';
homepage = "https://getartcraft.com/apps/lightcraft";
homepage = "https://github.com/storytold/lightcraft";
license = with lib.licenses; [
mit
asl20
@@ -18,10 +18,10 @@
<launchable type="desktop-id">ai.storyteller.lightcraft.desktop</launchable>
<icon type="stock">ai.storyteller.lightcraft</icon>
<!-- Only url types known to appstream 0.15 (Ubuntu 22.04, where CI validates): no vcs-browser. -->
<url type="homepage">https://getartcraft.com/apps/lightcraft</url>
<url type="homepage">https://github.com/storytold/lightcraft</url>
<url type="bugtracker">https://github.com/storytold/lightcraft/issues</url>
<url type="help">https://github.com/storytold/lightcraft</url>
<url type="contact">https://discord.gg/artcraft</url>
<url type="contact">https://github.com/storytold/lightcraft/issues</url>
<categories>
<category>Graphics</category>
<category>RasterGraphics</category>
+1 -1
View File
@@ -14,7 +14,7 @@ section: graphics
priority: optional
maintainer: ${LIGHTCRAFT_MAINTAINER}
vendor: Learning Machines LLC
homepage: https://getartcraft.com/apps/lightcraft
homepage: https://github.com/storytold/lightcraft
license: MIT OR Apache-2.0
description: |-
Open-source, native photo library and raw developer that works the way
+3 -3
View File
@@ -29,9 +29,9 @@
<Icon Id="LightcraftIcon.ico" SourceFile="$(var.IconPath)" />
<Property Id="ARPPRODUCTICON" Value="LightcraftIcon.ico" />
<Property Id="ARPURLINFOABOUT" Value="https://getartcraft.com/apps/lightcraft" />
<Property Id="ARPURLUPDATEINFO" Value="https://getartcraft.com/apps/lightcraft" />
<Property Id="ARPHELPLINK" Value="https://discord.gg/artcraft" />
<Property Id="ARPURLINFOABOUT" Value="https://github.com/storytold/lightcraft" />
<Property Id="ARPURLUPDATEINFO" Value="https://github.com/storytold/lightcraft" />
<Property Id="ARPHELPLINK" Value="https://github.com/storytold/lightcraft/issues" />
<StandardDirectory Id="ProgramFiles6432Folder">
<Directory Id="INSTALLFOLDER" Name="LightCraft" />
Submodule tools/craft-skills added at 2c1fed9237