diff --git a/AGENTS.md b/AGENTS.md index edd7b8ba..700fe851 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -2,7 +2,7 @@ ArtCraft Launcher installs, updates and launches the **Craft App Suite** (PhotoCraft, LightCraft, FilmCraft, DesignCraft, VectorCraft, PdfCraft, EffectCraft, WordCraft, DeckCraft, GridCraft, -CADCraft, SoundCraft, FigCraft, Craft Anything), plus approved **community apps** made outside ArtCraft and labelled +CADCraft, SoundCraft, FigCraft, Craft Anything, TextureCraft), plus approved **community apps** made outside ArtCraft and labelled as such (today SolidCraft, by Tangency Labs). It is written in **Rust only** (no JavaScript or TypeScript): the desktop app is native egui/eframe, and the web build is the same Rust compiled to WebAssembly (trunk + wasm-bindgen). **No Tauri, Electron or webview shells**, ever. diff --git a/ATTRIBUTION.md b/ATTRIBUTION.md index 082cf0bd..a28ced82 100644 --- a/ATTRIBUTION.md +++ b/ATTRIBUTION.md @@ -50,6 +50,7 @@ licensed like those apps. Refresh them from the source path, never redraw them. | `assets/app-icons/solidcraft.png` | SolidCraft app icon (app icon), 128 px | Tangency Labs and the SolidCraft contributors | [`tangency-labs/solidcraft`](https://github.com/tangency-labs/solidcraft) `assets/icons/app/linux/exports/hicolor/128x128/apps/io.tangencylabs.solidcraft.png`, copied unmodified | MIT OR Apache-2.0, [`assets/app-icons/LICENSE-MIT-SolidCraft.txt`](assets/app-icons/LICENSE-MIT-SolidCraft.txt), [`assets/app-icons/LICENSE-APACHE-SolidCraft.txt`](assets/app-icons/LICENSE-APACHE-SolidCraft.txt) | | `assets/app-icons/soundcraft.png` | SoundCraft app icon (nightingale (placeholder)), 128 px | ArtCraft Team and the SoundCraft contributors | [`storytold/soundcraft`](https://github.com/storytold/soundcraft) `assets/app-icon/hicolor/128x128/apps/ai.storyteller.soundcraft.png`, copied unmodified | MIT OR Apache-2.0 (SoundCraft's [`LICENSE-MIT`](https://github.com/storytold/soundcraft/blob/main/LICENSE-MIT), [`LICENSE-APACHE`](https://github.com/storytold/soundcraft/blob/main/LICENSE-APACHE)) | | `assets/app-icons/figcraft.png` | FigCraft app icon (chameleon), 128 px | ArtCraft Team and the FigCraft contributors | [`storytold/figcraft`](https://github.com/storytold/figcraft) `assets/app-icon/hicolor/128x128/apps/ai.storyteller.figcraft.png`, copied unmodified | MIT OR Apache-2.0 (FigCraft's [`LICENSE-MIT`](https://github.com/storytold/figcraft/blob/main/LICENSE-MIT), [`LICENSE-APACHE`](https://github.com/storytold/figcraft/blob/main/LICENSE-APACHE)) | +| `assets/app-icons/texturecraft.png` | TextureCraft app icon (engraved zebra), 128 px | TextureCraft project owner | [`storytold/texturecraft`](https://github.com/storytold/texturecraft) `assets/app-icon/hicolor/128x128/apps/ai.storyteller.texturecraft.png`, copied unmodified | MIT OR Apache-2.0 ([icon license](https://github.com/storytold/texturecraft/blob/main/assets/app-icon/LICENSE.txt)) | | `assets/app-icons/craft-anything.png` | Craft Anything app icon (engraved raven), 128 px | ArtCraft Team | [`storytold/craft-anything`](https://github.com/storytold/craft-anything) `assets/app-icon/hicolor/128x128/apps/ai.storyteller.craft-anything.png`, copied unmodified | **Not open source; not MIT or Apache-2.0.** Used on the terms of the ArtCraft brand assets (Craft Anything's [`assets/app-icon/LICENSE.txt`](https://github.com/storytold/craft-anything/blob/main/assets/app-icon/LICENSE.txt), [`docs/brand/LICENSE-brand.txt`](docs/brand/LICENSE-brand.txt)) | ## Documentation and README diff --git a/README.md b/README.md index 85dee497..85bf6a99 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@
One place to install, update and open every app in the Craft App Suite, rebuilt in pure Rust.
PhotoCraft, LightCraft, FilmCraft, DesignCraft, VectorCraft, PdfCraft, EffectCraft, WordCraft,
- DeckCraft, GridCraft, CADCraft, SoundCraft, FigCraft, Craft Anything and the community app SolidCraft: the right build for your computer, kept up to date.
+ DeckCraft, GridCraft, CADCraft, SoundCraft, FigCraft, Craft Anything, TextureCraft and the community app SolidCraft: the right build for your computer, kept up to date.
@@ -272,6 +272,7 @@ stand on its own.
|
| **DeckCraft** | Presentations and slide decks | [GitHub](https://github.com/storytold/deckcraft) | [Website](https://getartcraft.com/apps/deckcraft) |
|
| **CADCraft** | Computer-aided design | [GitHub](https://github.com/storytold/cadcraft) | [Website](https://getartcraft.com/apps/cadcraft) |
|
| **GridCraft** | Spreadsheets and data | [GitHub](https://github.com/storytold/gridcraft) | [Website](https://getartcraft.com/apps/gridcraft) |
+|
| **TextureCraft** | 3D texture painting | [GitHub](https://github.com/storytold/texturecraft) | [Website](https://getartcraft.com/apps/texturecraft) |
|
| **Craft Anything** | See how any software works, then build your own | [GitHub](https://github.com/storytold/craft-anything) | [Website](https://getartcraft.com/apps/craft-anything) |
|
| **SolidCraft** | Parametric 3D CAD by Tangency Labs (community app) | [GitHub](https://github.com/tangency-labs/solidcraft) | |
diff --git a/assets/app-icons/texturecraft.png b/assets/app-icons/texturecraft.png
new file mode 100644
index 00000000..8aed40a5
Binary files /dev/null and b/assets/app-icons/texturecraft.png differ
diff --git a/crates/core/src/catalog.rs b/crates/core/src/catalog.rs
index c94c90a0..4eb488c4 100644
--- a/crates/core/src/catalog.rs
+++ b/crates/core/src/catalog.rs
@@ -1,4 +1,4 @@
-//! The Craft App Suite: the fifteen apps the launcher knows about.
+//! The Craft App Suite: the sixteen apps the launcher knows about.
//!
//! The list is data so a later version can fetch it from an API; [`SUITE`] is the built-in copy.
//!
@@ -123,7 +123,7 @@ const fn app(
}
/// The Craft App Suite, in display order matching getartcraft.com, then the community apps:
-pub const SUITE: [CraftApp; 15] = [
+pub const SUITE: [CraftApp; 16] = [
app("photocraft", "PhotoCraft", "Image editing", [[0x2f, 0x7b, 0xf5], [0x1a, 0x5b, 0xc4], [0x7f, 0xb0, 0xff]], "storytold/photocraft"),
app("vectorcraft", "VectorCraft", "Vector illustration", [[0xe8, 0x57, 0x3f], [0xb8, 0x3a, 0x24], [0xff, 0x8a, 0x70]], "storytold/vectorcraft"),
app(
@@ -195,6 +195,13 @@ pub const SUITE: [CraftApp; 15] = [
"storytold/cadcraft",
),
app("gridcraft", "GridCraft", "Spreadsheets and data", [[0x1f, 0x9d, 0x55], [0x12, 0x70, 0x3a], [0x4f, 0xd6, 0x8a]], "storytold/gridcraft"),
+ app(
+ "texturecraft",
+ "TextureCraft",
+ "3D texture painting",
+ [[0xc2, 0x67, 0x2b], [0x9c, 0x4a, 0x15], [0xe5, 0x8a, 0x4e]],
+ "storytold/texturecraft",
+ ),
// The raven's tile blue, with its README's deep (#1659c4) and light (#74aaff) accents for text.
app(
"craft-anything",
@@ -277,6 +284,7 @@ pub fn app_icon_png(id: &str) -> Option<&'static [u8]> {
"wordcraft" => include_bytes!("../../../assets/app-icons/wordcraft.png"),
"deckcraft" => include_bytes!("../../../assets/app-icons/deckcraft.png"),
"gridcraft" => include_bytes!("../../../assets/app-icons/gridcraft.png"),
+ "texturecraft" => include_bytes!("../../../assets/app-icons/texturecraft.png"),
"craft-anything" => include_bytes!("../../../assets/app-icons/craft-anything.png"),
"solidcraft" => include_bytes!("../../../assets/app-icons/solidcraft.png"),
"cadcraft" => include_bytes!("../../../assets/app-icons/cadcraft.png"),
@@ -300,8 +308,8 @@ mod tests {
}
#[test]
- fn suite_has_fifteen_apps_with_unique_ids() {
- assert_eq!(SUITE.len(), 15);
+ fn suite_has_sixteen_apps_with_unique_ids() {
+ assert_eq!(SUITE.len(), 16);
let mut ids: Vec<_> = SUITE.iter().map(|a| a.id).collect();
ids.sort_unstable();
ids.dedup();
@@ -331,6 +339,16 @@ mod tests {
assert_eq!(CraftApp::by_id("gridcraft").unwrap().mac_team, Some(ARTCRAFT_TEAM_ID));
}
+ #[test]
+ fn texturecraft_is_an_official_app() {
+ let app = CraftApp::by_id("texturecraft").unwrap();
+ assert_eq!(app.kind, AppKind::Official);
+ assert_eq!(app.repo, "storytold/texturecraft");
+ assert_eq!(app.bundle_id(), "ai.storyteller.texturecraft");
+ assert_eq!(app.website(), "https://getartcraft.com/apps/texturecraft");
+ assert_eq!(app.mac_team, Some(ARTCRAFT_TEAM_ID));
+ }
+
#[test]
fn craft_anything_is_an_official_app() {
let ca = CraftApp::by_id("craft-anything").unwrap();
diff --git a/crates/core/src/details.rs b/crates/core/src/details.rs
index 6863383e..9c6ab9b9 100644
--- a/crates/core/src/details.rs
+++ b/crates/core/src/details.rs
@@ -139,7 +139,7 @@ pub fn screenshot_within_budget(bytes: &[u8]) -> bool {
/// Where every Craft App runs (getartcraft.com lists the same for each of them).
const PLATFORMS: &str = "macOS, Windows, Linux, FreeBSD, web";
-pub const DETAILS: [AppDetails; 15] = [
+pub const DETAILS: [AppDetails; 16] = [
AppDetails {
id: "photocraft",
headline: "The image editor you already know how to use.",
@@ -471,6 +471,17 @@ pub const DETAILS: [AppDetails; 15] = [
shots: &[],
platforms: PLATFORMS,
},
+ AppDetails {
+ id: "texturecraft",
+ headline: "Paint textures on 3D models.",
+ about: "Paint materials on 3D models and export textures.",
+ features: &[
+ feature("Materials", "Paint materials on 3D models and export textures."),
+ feature("Mesh maps", "Bake mesh maps and use smart materials."),
+ ],
+ shots: &[],
+ platforms: PLATFORMS,
+ },
AppDetails {
id: "craft-anything",
headline: "See how any website, app or game works, then build your own.",
diff --git a/crates/core/src/platform.rs b/crates/core/src/platform.rs
index 3467e579..bc34c2f5 100644
--- a/crates/core/src/platform.rs
+++ b/crates/core/src/platform.rs
@@ -288,6 +288,22 @@ mod tests {
}
}
+ #[test]
+ fn texturecraft_selects_published_desktop_assets() {
+ let release =
+ crate::release::parse_github_release(include_str!("../tests/fixtures/texturecraft-release.json"), "storytold/texturecraft").unwrap();
+ for (os, kind, expected) in [
+ (Os::Windows, PackageKind::Msi, "texturecraft-0.1.0-windows-x64.msi"),
+ (Os::MacOs, PackageKind::Dmg, "texturecraft-0.1.0-macos-universal.dmg"),
+ (Os::Linux, PackageKind::Flatpak, "texturecraft-0.1.0-linux-x86_64.flatpak"),
+ ] {
+ let platform = Platform { os, arch: Arch::X64 };
+ let (asset, selected) = pick_asset(&release, &["texturecraft"], platform, &[kind]).unwrap();
+ assert_eq!(asset.name, expected);
+ assert_eq!(selected, kind);
+ }
+ }
+
#[test]
fn freebsd_picks_the_tarball_for_the_processor() {
// SoundCraft v0.10.0's GitHub metadata, trimmed to its FreeBSD tarballs.
diff --git a/crates/core/tests/fixtures/texturecraft-release.json b/crates/core/tests/fixtures/texturecraft-release.json
new file mode 100644
index 00000000..f3e4e03a
--- /dev/null
+++ b/crates/core/tests/fixtures/texturecraft-release.json
@@ -0,0 +1,34 @@
+{
+ "assets": [
+ {
+ "browser_download_url": "https://github.com/storytold/texturecraft/releases/download/v0.1.0/SHA256SUMS.txt",
+ "digest": "sha256:cd6ef3c6ab6dc63a8bf3783635eb5861825e3ec20ee318373b3e50b791900aa3",
+ "name": "SHA256SUMS.txt",
+ "size": 2327
+ },
+ {
+ "browser_download_url": "https://github.com/storytold/texturecraft/releases/download/v0.1.0/texturecraft-0.1.0-linux-x86_64.flatpak",
+ "digest": "sha256:7e36e02205a9d44086cd76cce4b077e883bfb80caf19dcbdb7725faceb429cb9",
+ "name": "texturecraft-0.1.0-linux-x86_64.flatpak",
+ "size": 27105696
+ },
+ {
+ "browser_download_url": "https://github.com/storytold/texturecraft/releases/download/v0.1.0/texturecraft-0.1.0-macos-universal.dmg",
+ "digest": "sha256:12f7aff8904a80f9c86a16a8b10debfa863bee46ec9334c93582cd1caf3b3aa4",
+ "name": "texturecraft-0.1.0-macos-universal.dmg",
+ "size": 54396612
+ },
+ {
+ "browser_download_url": "https://github.com/storytold/texturecraft/releases/download/v0.1.0/texturecraft-0.1.0-windows-x64.msi",
+ "digest": "sha256:36b9bfd6db83bfef47f32f750d437cc67dc8ff0588f017682534ea5c58d4cf26",
+ "name": "texturecraft-0.1.0-windows-x64.msi",
+ "size": 29990912
+ }
+ ],
+ "draft": false,
+ "html_url": "https://github.com/storytold/texturecraft/releases/tag/v0.1.0",
+ "name": "TextureCraft v0.1.0",
+ "prerelease": false,
+ "published_at": "2026-10-24T17:22:30Z",
+ "tag_name": "v0.1.0"
+}
diff --git a/crates/native/src/desktop_entry.rs b/crates/native/src/desktop_entry.rs
index 6b1538c5..3860dea3 100644
--- a/crates/native/src/desktop_entry.rs
+++ b/crates/native/src/desktop_entry.rs
@@ -32,6 +32,7 @@ pub fn meta(app: &CraftApp) -> (&'static str, Option<&'static str>) {
"cadcraft" => ("Graphics;Engineering;VectorGraphics;", None),
"soundcraft" => ("AudioVideo;Audio;Midi;Mixer;Sequencer;Recorder;", None),
"figcraft" => ("Graphics;2DGraphics;VectorGraphics;X-Design;", Some("figcraft")),
+ "texturecraft" => ("Graphics;3DGraphics;", Some("texturecraft")),
"craft-anything" => ("Development;Debugger;", None),
_ => ("Graphics;", None),
}
diff --git a/crates/ui-egui/src/details.rs b/crates/ui-egui/src/details.rs
index ad9fcb11..4db01ae2 100644
--- a/crates/ui-egui/src/details.rs
+++ b/crates/ui-egui/src/details.rs
@@ -13,6 +13,7 @@ use artcraft_launcher_core::status::AppStatus;
use egui::{Color32, CornerRadius, Id, Margin, Order, Rect, RichText, Sense, Stroke, Ui, emath::easing, pos2, vec2};
use crate::app::LauncherUi;
+use crate::i18n::{current, tr_ctx};
use crate::model::AppEntry;
use crate::theme::{self, Tokens, rgb, tint};
use crate::views::date_text;
@@ -190,7 +191,7 @@ impl LauncherUi {
ui.set_width(left_w);
ui.spacing_mut().item_spacing.y = 8.0;
for p in details.paragraphs() {
- ui.add(egui::Label::new(RichText::new(p).size(14.5).color(t.ink)).wrap());
+ ui.add(egui::Label::new(RichText::new(tr_ctx(current(), details.id, p)).size(14.5).color(t.ink)).wrap());
}
ui.add_space(14.0);
features(ui, details, entry.app, t);
@@ -214,7 +215,7 @@ impl LauncherUi {
self.gallery(ui, details, t, app_color);
ui.add_space(8.0);
for p in details.paragraphs() {
- ui.add(egui::Label::new(RichText::new(p).size(14.5).color(t.ink)).wrap());
+ ui.add(egui::Label::new(RichText::new(tr_ctx(current(), details.id, p)).size(14.5).color(t.ink)).wrap());
}
});
ui.vertical(|ui| {
@@ -232,7 +233,7 @@ impl LauncherUi {
self.gallery(ui, details, t, app_color);
ui.add_space(8.0);
for p in details.paragraphs() {
- ui.add(egui::Label::new(RichText::new(p).size(14.5).color(t.ink)).wrap());
+ ui.add(egui::Label::new(RichText::new(tr_ctx(current(), details.id, p)).size(14.5).color(t.ink)).wrap());
}
ui.add_space(14.0);
features(ui, details, entry.app, t);
@@ -364,7 +365,7 @@ impl LauncherUi {
ui.set_width(text_w);
ui.spacing_mut().item_spacing.y = 5.0;
widgets::wordmark(ui, app, theme::PAGE_TITLE);
- ui.add(egui::Label::new(RichText::new(details.headline).size(15.0).color(t.ink)).wrap());
+ ui.add(egui::Label::new(RichText::new(tr_ctx(current(), details.id, details.headline)).size(15.0).color(t.ink)).wrap());
// "Version 0.5.0 · Oct 8, 2026", or the installed-versus-latest line.
let version = crate::views::version_line(entry, status);
if !version.trim().is_empty() {
@@ -604,9 +605,9 @@ fn features(ui: &mut Ui, details: &AppDetails, app: &CraftApp, t: &Tokens) {
ui.spacing_mut().item_spacing.y = 3.0;
ui.horizontal(|ui| {
widgets::hud(ui, &format!("{:02}", i + 1), t.app_ink(app));
- ui.label(RichText::new(f.title).size(15.0).family(theme::semibold()).color(t.ink_strong));
+ ui.label(RichText::new(tr_ctx(current(), details.id, f.title)).size(15.0).family(theme::semibold()).color(t.ink_strong));
});
- ui.add(egui::Label::new(RichText::new(f.text).size(13.5).color(t.muted)).wrap());
+ ui.add(egui::Label::new(RichText::new(tr_ctx(current(), details.id, f.text)).size(13.5).color(t.muted)).wrap());
});
}
}
diff --git a/crates/ui-egui/src/i18n/cs.tsv b/crates/ui-egui/src/i18n/cs.tsv
index 473b2655..7c1aa41e 100644
--- a/crates/ui-egui/src/i18n/cs.tsv
+++ b/crates/ui-egui/src/i18n/cs.tsv
@@ -364,3 +364,9 @@ column Author Autor
Older launcher versions require a manual reinstall. Starší verze spouštěče vyžadují ruční přeinstalaci.
Your files may not open in older versions. Starší verze nemusí vaše soubory otevřít.
Enable automatic installs in Settings to follow new nightly builds. Chcete-li automaticky dostávat nová noční sestavení, zapněte v nastavení automatické instalace.
+texturecraft 3D texture painting Malování textur ve 3D
+texturecraft Paint materials on 3D models and export textures. Malujte materiály na 3D modely a exportujte textury.
+texturecraft Materials Materiály
+texturecraft Mesh maps Mapy sítí
+texturecraft Bake mesh maps and use smart materials. Vypékejte mapy sítí a používejte inteligentní materiály.
+texturecraft Paint textures on 3D models. Malujte textury na 3D modely.
diff --git a/crates/ui-egui/src/i18n/de.tsv b/crates/ui-egui/src/i18n/de.tsv
index 55279bb7..e028c56c 100644
--- a/crates/ui-egui/src/i18n/de.tsv
+++ b/crates/ui-egui/src/i18n/de.tsv
@@ -396,3 +396,9 @@ column Author Autor
Older launcher versions require a manual reinstall. Ältere Launcher-Versionen müssen manuell neu installiert werden.
Your files may not open in older versions. Ältere Versionen können deine Dateien möglicherweise nicht öffnen.
Enable automatic installs in Settings to follow new nightly builds. Aktiviere automatische Installationen in den Einstellungen, um neuen Nightly-Builds zu folgen.
+texturecraft 3D texture painting 3D-Texturmalerei
+texturecraft Paint materials on 3D models and export textures. Materialien auf 3D-Modelle malen und Texturen exportieren.
+texturecraft Materials Materialien
+texturecraft Mesh maps Mesh-Maps
+texturecraft Bake mesh maps and use smart materials. Mesh-Maps backen und intelligente Materialien verwenden.
+texturecraft Paint textures on 3D models. Texturen auf 3D-Modelle malen.
diff --git a/crates/ui-egui/src/i18n/es.tsv b/crates/ui-egui/src/i18n/es.tsv
index 82a669fb..d06abb58 100644
--- a/crates/ui-egui/src/i18n/es.tsv
+++ b/crates/ui-egui/src/i18n/es.tsv
@@ -377,3 +377,9 @@ column Author Autor
Older launcher versions require a manual reinstall. Las versiones anteriores del iniciador requieren una reinstalación manual.
Your files may not open in older versions. Es posible que tus archivos no se abran en versiones antiguas.
Enable automatic installs in Settings to follow new nightly builds. Activa las instalaciones automáticas en Ajustes para recibir las nuevas versiones nocturnas.
+texturecraft 3D texture painting Pintura de texturas 3D
+texturecraft Paint materials on 3D models and export textures. Pinta materiales en modelos 3D y exporta texturas.
+texturecraft Materials Materiales
+texturecraft Mesh maps Mapas de malla
+texturecraft Bake mesh maps and use smart materials. Hornea mapas de malla y usa materiales inteligentes.
+texturecraft Paint textures on 3D models. Pinta texturas en modelos 3D.
diff --git a/crates/ui-egui/src/i18n/fr.tsv b/crates/ui-egui/src/i18n/fr.tsv
index 74c31fe9..e2789fe7 100644
--- a/crates/ui-egui/src/i18n/fr.tsv
+++ b/crates/ui-egui/src/i18n/fr.tsv
@@ -394,3 +394,9 @@ column Author Auteur
Older launcher versions require a manual reinstall. Les anciennes versions du lanceur nécessitent une réinstallation manuelle.
Your files may not open in older versions. Tes fichiers pourraient ne pas s’ouvrir avec une ancienne version.
Enable automatic installs in Settings to follow new nightly builds. Active les installations automatiques dans les paramètres pour recevoir les nouvelles versions nocturnes.
+texturecraft 3D texture painting Peinture de textures 3D
+texturecraft Paint materials on 3D models and export textures. Peignez des matériaux sur des modèles 3D et exportez les textures.
+texturecraft Materials Matériaux
+texturecraft Mesh maps Cartes de maillage
+texturecraft Bake mesh maps and use smart materials. Calculez des cartes de maillage et utilisez des matériaux intelligents.
+texturecraft Paint textures on 3D models. Peignez des textures sur des modèles 3D.
diff --git a/crates/ui-egui/src/i18n/hu.tsv b/crates/ui-egui/src/i18n/hu.tsv
index 325d5279..6118520b 100644
--- a/crates/ui-egui/src/i18n/hu.tsv
+++ b/crates/ui-egui/src/i18n/hu.tsv
@@ -397,3 +397,9 @@ column Author Szerző
Older launcher versions require a manual reinstall. Az indító régebbi verzióit kézzel kell újratelepíteni.
Your files may not open in older versions. Előfordulhat, hogy a régebbi verziók nem tudják megnyitni a fájljaidat.
Enable automatic installs in Settings to follow new nightly builds. Az új éjszakai kiadások követéséhez kapcsold be az automatikus telepítést a beállításokban.
+texturecraft 3D texture painting 3D textúrafestés
+texturecraft Paint materials on 3D models and export textures. Fess anyagokat 3D modellekre, és exportáld a textúrákat.
+texturecraft Materials Anyagok
+texturecraft Mesh maps Hálótérképek
+texturecraft Bake mesh maps and use smart materials. Süss ki hálótérképeket, és használj intelligens anyagokat.
+texturecraft Paint textures on 3D models. Fess textúrákat 3D modellekre.
diff --git a/crates/ui-egui/src/i18n/ja.tsv b/crates/ui-egui/src/i18n/ja.tsv
index bbcdda8e..0a220f83 100644
--- a/crates/ui-egui/src/i18n/ja.tsv
+++ b/crates/ui-egui/src/i18n/ja.tsv
@@ -399,3 +399,9 @@ column Author 作者
Older launcher versions require a manual reinstall. 古いランチャーに戻すには手動で再インストールする必要があります。
Your files may not open in older versions. 古いバージョンではファイルを開けない場合があります。
Enable automatic installs in Settings to follow new nightly builds. 新しいナイトリービルドを自動的に受け取るには、設定で自動インストールを有効にしてください。
+texturecraft 3D texture painting 3Dテクスチャペイント
+texturecraft Paint materials on 3D models and export textures. 3Dモデルにマテリアルを塗り、テクスチャを書き出します。
+texturecraft Materials マテリアル
+texturecraft Mesh maps メッシュマップ
+texturecraft Bake mesh maps and use smart materials. メッシュマップをベイクし、スマートマテリアルを使用します。
+texturecraft Paint textures on 3D models. 3Dモデルにテクスチャを描きます。
diff --git a/crates/ui-egui/src/i18n/pl.tsv b/crates/ui-egui/src/i18n/pl.tsv
index 0bb74404..860e0b45 100644
--- a/crates/ui-egui/src/i18n/pl.tsv
+++ b/crates/ui-egui/src/i18n/pl.tsv
@@ -398,3 +398,9 @@ column Author Autor
Older launcher versions require a manual reinstall. Starsze wersje programu uruchamiającego wymagają ręcznej ponownej instalacji.
Your files may not open in older versions. Starsza wersja może nie otwierać Twoich plików.
Enable automatic installs in Settings to follow new nightly builds. Włącz automatyczne instalacje w Ustawieniach, aby otrzymywać nowe wersje nocne.
+texturecraft 3D texture painting Malowanie tekstur 3D
+texturecraft Paint materials on 3D models and export textures. Maluj materiały na modelach 3D i eksportuj tekstury.
+texturecraft Materials Materiały
+texturecraft Mesh maps Mapy siatki
+texturecraft Bake mesh maps and use smart materials. Wypiekaj mapy siatki i używaj inteligentnych materiałów.
+texturecraft Paint textures on 3D models. Maluj tekstury na modelach 3D.
diff --git a/crates/ui-egui/src/i18n/pt-BR.tsv b/crates/ui-egui/src/i18n/pt-BR.tsv
index 03aa085d..1894f16d 100644
--- a/crates/ui-egui/src/i18n/pt-BR.tsv
+++ b/crates/ui-egui/src/i18n/pt-BR.tsv
@@ -384,3 +384,9 @@ column Author Autor
Older launcher versions require a manual reinstall. Versões antigas do inicializador exigem reinstalação manual.
Your files may not open in older versions. Seus arquivos podem não abrir em versões antigas.
Enable automatic installs in Settings to follow new nightly builds. Ative as instalações automáticas nas Configurações para receber as novas versões noturnas.
+texturecraft 3D texture painting Pintura de texturas 3D
+texturecraft Paint materials on 3D models and export textures. Pinte materiais em modelos 3D e exporte texturas.
+texturecraft Materials Materiais
+texturecraft Mesh maps Mapas de malha
+texturecraft Bake mesh maps and use smart materials. Gere mapas de malha e use materiais inteligentes.
+texturecraft Paint textures on 3D models. Pinte texturas em modelos 3D.
diff --git a/crates/ui-egui/src/i18n/ru.tsv b/crates/ui-egui/src/i18n/ru.tsv
index 22a7c9bf..716ac5f2 100644
--- a/crates/ui-egui/src/i18n/ru.tsv
+++ b/crates/ui-egui/src/i18n/ru.tsv
@@ -392,3 +392,9 @@ column Author Автор
Older launcher versions require a manual reinstall. Для возврата к старой версии лаунчера нужна переустановка вручную.
Your files may not open in older versions. В старой версии ваши файлы могут не открыться.
Enable automatic installs in Settings to follow new nightly builds. Чтобы получать новые ночные сборки, включите автоматическую установку в настройках.
+texturecraft 3D texture painting Рисование 3D-текстур
+texturecraft Paint materials on 3D models and export textures. Рисуйте материалы на 3D-моделях и экспортируйте текстуры.
+texturecraft Materials Материалы
+texturecraft Mesh maps Карты сетки
+texturecraft Bake mesh maps and use smart materials. Запекайте карты сетки и используйте умные материалы.
+texturecraft Paint textures on 3D models. Рисуйте текстуры на 3D-моделях.
diff --git a/crates/ui-egui/src/i18n/zh-CN.tsv b/crates/ui-egui/src/i18n/zh-CN.tsv
index 6df4e802..42313791 100644
--- a/crates/ui-egui/src/i18n/zh-CN.tsv
+++ b/crates/ui-egui/src/i18n/zh-CN.tsv
@@ -364,3 +364,9 @@ column Version 版本
Older launcher versions require a manual reinstall. 旧版启动器需要手动重新安装。
Your files may not open in older versions. 旧版可能无法打开你的文件。
Enable automatic installs in Settings to follow new nightly builds. 在设置中启用自动安装,即可跟进新的每日构建版。
+texturecraft 3D texture painting 3D 纹理绘制
+texturecraft Paint materials on 3D models and export textures. 在 3D 模型上绘制材质并导出纹理。
+texturecraft Materials 材质
+texturecraft Mesh maps 网格贴图
+texturecraft Bake mesh maps and use smart materials. 烘焙网格贴图并使用智能材质。
+texturecraft Paint textures on 3D models. 在 3D 模型上绘制纹理。
diff --git a/packaging/windows/package.ps1 b/packaging/windows/package.ps1
index 0306ceb3..edc97152 100644
--- a/packaging/windows/package.ps1
+++ b/packaging/windows/package.ps1
@@ -113,7 +113,7 @@ function New-InstallerArt([string] $BannerOut, [string] $DialogOut) {
$line = [System.Drawing.Color]::FromArgb(38, 242, 241, 238)
# The Craft App Suite, in the launcher's order (crates/core/src/catalog.rs).
$apps = 'photocraft', 'vectorcraft', 'filmcraft', 'lightcraft', 'pdfcraft', 'effectcraft',
- 'designcraft', 'figcraft', 'wordcraft', 'soundcraft', 'deckcraft', 'cadcraft', 'gridcraft', 'craft-anything'
+ 'designcraft', 'figcraft', 'wordcraft', 'soundcraft', 'deckcraft', 'cadcraft', 'gridcraft', 'craft-anything', 'texturecraft'
$mark = [System.Drawing.Image]::FromFile((Join-Path $Root 'assets\app-icon\hicolor\256x256\apps\ai.storyteller.artcraft-launcher.png'))
$wordmark = [System.Drawing.Image]::FromFile((Join-Path $Root 'docs\brand\artcraft-logo-white.png'))
$icons = $apps | ForEach-Object { [System.Drawing.Image]::FromFile((Join-Path $Root "assets\app-icons\$_.png")) }
diff --git a/xtask/src/local.rs b/xtask/src/local.rs
index 88e6871f..a795f9c1 100644
--- a/xtask/src/local.rs
+++ b/xtask/src/local.rs
@@ -33,6 +33,7 @@ const APPS: &[(&str, &str)] = &[
("cadcraft", "CADCraft"),
("gridcraft", "GridCraft"),
("craft-anything", "Craft Anything"),
+ ("texturecraft", "TextureCraft"),
];
const DEFAULT_PORT: u16 = 8787;