App icon is the ArtCraft "A"; thank the community launchers

- The app icon (Dock, taskbar, Start menu, Linux menus, installers) is
  now the black ArtCraft "A" mark, rendered unmodified from
  docs/brand/artcraft-mark-black.svg by packaging/icons.sh; the old
  tile icon is gone
- The app icon is an ArtCraft trademark, not MIT/Apache: say so in
  assets/app-icon/, ATTRIBUTION, NOTICE, README and AGENTS.md
- Settings shows the blue mark in dark theme so it stays visible
- README: a Thanks section crediting the eleven community launchers
  whose ideas shaped this one

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
Brandon ThomasandClaude Opus 5.5 committed 2026-10-09 22:38:23 -04:00
1 parent 4aa07a56f8
commit 7ddda925c1
22 files changed
+81 -116

No files matched your search

+2 -2
View File
@@ -68,8 +68,8 @@ settings file must produce an error the user can act on, never a panic. Shared s
author, source, license) in the same change. The ArtCraft name, logo and "A" mark in
`docs/brand/` (the header logo and the tray icon) are trademarks, **not MIT/Apache**
(`docs/brand/LICENSE-brand.txt`): use them exactly as supplied, never redraw or recolor them.
2. **Icons are generated.** Edit `assets/app-icon/artcraft-launcher.svg` (the tray icon is the
supplied ArtCraft mark, rendered from `docs/brand/`), then run `packaging/icons.sh` (needs `resvg`; `iconutil` on macOS) and commit the outputs.
2. **Icons are generated.** The app icon and the tray icon are the supplied ArtCraft "A" mark from
`docs/brand/` (a trademark, not MIT/Apache); never edit the renders by hand. Run `packaging/icons.sh` (needs `resvg`; `iconutil` on macOS) and commit the outputs.
`assets/app-icons/` is copied verbatim from each app's repo (`assets/app-icon/hicolor/128x128/apps/ai.storyteller.<app>.png`);
refresh it from there, never redraw.
3. **Never break wasm.** `cargo xtask wasm` must pass. File-system, process and OS code is
+1 -1
View File
@@ -10,7 +10,7 @@ next to them.
| Path | Title | Author | Source | License |
|---|---|---|---|---|
| `assets/app-icon/` (all files) | ArtCraft Launcher app icon (grid of app-coloured tiles with a launch arrow) | ArtCraft Launcher contributors | Original work, see [`assets/app-icon/README.md`](assets/app-icon/README.md) | MIT OR Apache-2.0, [`assets/app-icon/LICENSE.txt`](assets/app-icon/LICENSE.txt) |
| `assets/app-icon/` (all files) | ArtCraft Launcher app icon: the ArtCraft "A" mark in black | ArtCraft Team | Rendered unmodified from `docs/brand/artcraft-mark-black.svg` by `packaging/icons.sh`, see [`assets/app-icon/README.md`](assets/app-icon/README.md) | **Not open source; not MIT or Apache-2.0.** ArtCraft trademark, [`docs/brand/LICENSE-brand.txt`](docs/brand/LICENSE-brand.txt) |
| `assets/social/x.svg`, `youtube.svg`, `tiktok.svg`, `instagram.svg` | X, YouTube, TikTok and Instagram logos, linking to ArtCraft's accounts | [Simple Icons](https://simpleicons.org/) contributors | Simple Icons, `fill` set to white for tinting; see [`assets/social/README.md`](assets/social/README.md) | CC0 1.0. The logos are trademarks of X Corp., Google LLC, TikTok / ByteDance and Meta Platforms, Inc. |
| `docs/brand/artcraft-logo.svg`, `artcraft-logo-white.svg` | ArtCraft wordmark, shown in the window header | ArtCraft Team | Supplied brand files, unmodified (same as PhotoCraft's `docs/brand/`) | **Not open source; not MIT or Apache-2.0.** ArtCraft trademark, [`docs/brand/LICENSE-brand.txt`](docs/brand/LICENSE-brand.txt) |
| `docs/brand/artcraft-mark-64.png`, `artcraft-mark-black-44.png` | ArtCraft "A" mark, the tray / menu-bar icon | ArtCraft Team | Rendered unmodified from `docs/brand/artcraft-mark.svg` and `artcraft-mark-black.svg` by `packaging/icons.sh` | **Not open source; not MIT or Apache-2.0.** ArtCraft trademark, [`docs/brand/LICENSE-brand.txt`](docs/brand/LICENSE-brand.txt) |
+3 -2
View File
@@ -5,8 +5,9 @@ Licensed under the MIT License or the Apache License, Version 2.0, at your optio
The ArtCraft name, wordmark, logo and "A" mark (docs/brand/) are trademarks of the ArtCraft Team.
They are NOT open source and are NOT covered by the MIT or Apache-2.0 license above. This includes
everywhere ArtCraft Launcher shows them: the ArtCraft logo in the window header and the "A" mark
used as the tray / menu-bar icon (docs/brand/artcraft-mark-64.png, artcraft-mark-black-44.png).
everywhere ArtCraft Launcher shows them: the app icon (assets/app-icon/, the black "A" mark), the
ArtCraft logo in the window header and the "A" mark used as the tray / menu-bar icon
(docs/brand/artcraft-mark-64.png, artcraft-mark-black-44.png).
Their terms are in docs/brand/LICENSE-brand.txt; forks and modified versions must remove them.
Third-party material
+23 -1
View File
@@ -213,6 +213,27 @@ And [**ArtCraft**](https://getartcraft.com/) itself, our AI image and video stud
---
## Thanks
The community built launchers for the Craft App Suite before we did, and ArtCraft Launcher learned a
lot from them. Thank you to their authors:
| Project | Author | What we learned from it |
|---|---|---|
| [craftcenter](https://github.com/avokadosauce/craftcenter) | [@avokadosauce](https://github.com/avokadosauce) | Finding the latest release without spending API quota (the `releases/latest` redirect plus `SHA256SUMS.txt`), and verifying every file |
| [CRAFTSPACE](https://github.com/emircesur/CRAFTSPACE) | [@emircesur](https://github.com/emircesur) | Adopting apps that were already installed, falling back gracefully when GitHub rate-limits, background update notifications |
| [GetCraft](https://github.com/mbirnbach/getcraft) | [@mbirnbach](https://github.com/mbirnbach) | Picking the right download for each OS and CPU, recognising Windows Installer and macOS installs, a native Rust/egui launcher |
| [CraftHub](https://github.com/CraftHubLauncher/CraftHub) | [CraftHubLauncher](https://github.com/CraftHubLauncher) | Strict checks on where downloads come from, clear rate-limit messages, never replacing an app while it runs |
| [artcraft-suite](https://github.com/erikerikerik/artcraft-suite) | [@erikerikerik](https://github.com/erikerikerik) | ETag-cached release checks and installs that recover cleanly from interruptions |
| [Craft Apps Launcher & Installer](https://github.com/ZifuM/Craft-apps-launcher-installer) | [@ZifuM](https://github.com/ZifuM) | Release-page fallbacks and starting AppImage apps with a clean environment |
| [ArtCraft Launcher](https://github.com/EricVogt93/artcraft-launcher) | [@EricVogt93](https://github.com/EricVogt93) | Desktop integration for AppImages and a careful self-update design |
| [LandingCraft](https://github.com/rallegretti/LandingCraft) | [@rallegretti](https://github.com/rallegretti) | Working with the Windows Installer directly and offering stable releases only |
| [Craft Apps Manager](https://github.com/CryptoKey98/craft-apps-manager) | [@CryptoKey98](https://github.com/CryptoKey98) | Scheduled background update checks and per-app launch options |
| [ArtCraft Hub Launcher](https://github.com/tinyplayerss/artcraft-hub-launcher) | [@tinyplayerss](https://github.com/tinyplayerss) | A friendly, one-window hub for the whole suite |
| [CraftHub](https://github.com/MegaTheLEGEND/CraftHub) | [@MegaTheLEGEND](https://github.com/MegaTheLEGEND) | Serving the apps' web builds from a self-hosted launcher |
ArtCraft Launcher is a separate implementation and contains none of their code.
## License and credits
ArtCraft Launcher is dual-licensed under [MIT](LICENSE-MIT) or [Apache-2.0](LICENSE-APACHE), at your option.
@@ -225,7 +246,8 @@ The app icons of the Craft apps (`assets/app-icons/`) are each app's own icon, c
from its repository and licensed like that app (MIT OR Apache-2.0).
**The ArtCraft name, logo and "A" mark are not licensed under MIT or Apache-2.0.** They (everything
in [`docs/brand/`](docs/brand/), including the logo in the launcher's header and the "A" tray icon)
in [`docs/brand/`](docs/brand/), plus the app icon in [`assets/app-icon/`](assets/app-icon/), the
logo in the launcher's header and the "A" tray icon)
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 ArtCraft Launcher, under [`docs/brand/LICENSE-brand.txt`](docs/brand/LICENSE-brand.txt).
Forks and modified versions must remove them.
+6 -14
View File
@@ -1,16 +1,8 @@
ArtCraft Launcher app icon (artcraft-launcher.svg and every file derived from it in this
directory: artcraft-launcher-1024.png, artcraft-launcher.icns, artcraft-launcher.ico, hicolor/).
ArtCraft Launcher app icon (every file in this directory)
The tray / menu-bar icon is not here and not covered by this license: it is the ArtCraft "A"
mark, an ArtCraft trademark (docs/brand/, docs/brand/LICENSE-brand.txt).
These files are the ArtCraft "A" mark (docs/brand/artcraft-mark-black.svg), rendered unmodified by
packaging/icons.sh. The mark is a trademark of the ArtCraft Team. It is NOT open source and is NOT
covered by ArtCraft Launcher's MIT or Apache-2.0 license.
Original artwork made for this project: a grid of rounded tiles in the Craft apps' colours with a
launch arrow, drawn directly as SVG. No third-party material. Licensed like the rest of
ArtCraft Launcher, under either of
* Apache License, Version 2.0 (https://www.apache.org/licenses/LICENSE-2.0)
* MIT license (https://opensource.org/licenses/MIT)
at your option.
Regenerate the derived files with packaging/icons.sh.
Its terms are in docs/brand/LICENSE-brand.txt. In short: it may be used only unmodified, only as
part of this repository and ArtCraft Launcher, and forks and modified versions must remove it.
+15 -26
View File
@@ -1,40 +1,29 @@
# ArtCraft Launcher app icon
A dark rounded tile holding a 3×3 grid of smaller tiles in the Craft apps' colours: the suite of
apps. The middle tile is paper-coloured with an upward launch arrow. It is a plain geometric mark
rather than an engraved mascot (`../craftrules/standards/icon-design.md`), because the launcher
stands for the whole suite rather than one app.
The app icon is the **ArtCraft "A" mark in black**, exactly as supplied in
[`docs/brand/artcraft-mark-black.svg`](../../docs/brand/artcraft-mark-black.svg). Every file in this
directory is rendered from it by `packaging/icons.sh`.
## Palette
| Colour | Hex | Used for |
|---|---|---|
| Ink | `#0b0b0c` → `#26282e` | the tile (vertical gradient) and the arrow |
| Paper | `#efe9dc` | the centre tile |
| PhotoCraft, VectorCraft, FilmCraft, EffectCraft | `#2f7bf5`, `#e8573f`, `#8b5cf6`, `#e0368f` | top row, middle left |
| LightCraft, DesignCraft, GridCraft, PdfCraft | `#f2a516`, `#7bb51c`, `#1f9d55`, `#12a58a` | middle right, bottom row |
## Geometry
A 512-unit tile (`viewBox="0 0 512 512"`), rounded square with `rx=112`. Inner tiles are 104
units with 24-unit gaps (`rx=26`). The macOS renders pad it onto Apple's 824/1024 icon grid; the
Windows and Linux renders keep the whole tile with a hairline margin.
**These files are an ArtCraft trademark. They are not open source and not covered by ArtCraft
Launcher's MIT or Apache-2.0 license.** Their terms are in
[`docs/brand/LICENSE-brand.txt`](../../docs/brand/LICENSE-brand.txt): use them only as part of
ArtCraft Launcher, never redraw, recolor or crop them, and remove them from forks and modified
versions.
## Files
- `artcraft-launcher.svg`: canonical master; also the hicolor scalable icon.
- `artcraft-launcher-1024.png`: 1024 px render on the macOS grid.
- `artcraft-launcher.svg`: a copy of `docs/brand/artcraft-mark-black.svg`; also the hicolor scalable icon.
- `artcraft-launcher-1024.png`: 1024 px render, with extra transparent margin for Apple's icon grid.
- `artcraft-launcher.icns`: macOS bundle icon (`CFBundleIconFile`).
- `artcraft-launcher.ico`: Windows icon, 16–256 px, embedded in the `.exe` by
`apps/artcraft-launcher/build.rs` and used by the MSI.
- `hicolor/<size>/apps/ai.storyteller.artcraft-launcher.png` (16–512) and
`hicolor/scalable/apps/ai.storyteller.artcraft-launcher.svg`: Linux icon theme.
- The tray / menu-bar icon is **not** in this directory: it's the ArtCraft "A" mark, rendered by
`packaging/icons.sh` into `docs/brand/artcraft-mark-black-44.png` (macOS template, 22 pt @2x)
and `docs/brand/artcraft-mark-64.png` (Windows, Linux, FreeBSD). It is an ArtCraft trademark and
not MIT/Apache (`docs/brand/LICENSE-brand.txt`).
- The tray / menu-bar icon is the same mark, rendered into `docs/brand/artcraft-mark-black-44.png`
(macOS template, 22 pt @2x) and `docs/brand/artcraft-mark-64.png` (blue; Windows, Linux, FreeBSD).
## Regenerate
Edit the SVGs, then run `packaging/icons.sh`. It needs `resvg`, plus `iconutil` on macOS; the
`.ico` is packed by `cargo xtask ico`.
Run `packaging/icons.sh`. It needs `resvg`, plus `iconutil` on macOS; the `.ico` is packed by
`cargo xtask ico`. Never edit these files by hand: change the source only if the ArtCraft Team
supplies a new mark in `docs/brand/`.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 12 KiB

+3 -26
View File
@@ -1,27 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<!-- ArtCraft Launcher: the Craft App Suite as a grid of app-coloured tiles, with a launch arrow in the middle. -->
<defs>
<linearGradient id="bg" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#26282e"/>
<stop offset="1" stop-color="#0b0b0c"/>
</linearGradient>
<linearGradient id="sheen" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#ffffff" stop-opacity="0.18"/>
<stop offset="0.5" stop-color="#ffffff" stop-opacity="0"/>
</linearGradient>
</defs>
<rect width="512" height="512" rx="112" fill="url(#bg)"/>
<g>
<rect x="76" y="76" width="104" height="104" rx="26" fill="#2f7bf5"/>
<rect x="204" y="76" width="104" height="104" rx="26" fill="#e8573f"/>
<rect x="332" y="76" width="104" height="104" rx="26" fill="#8b5cf6"/>
<rect x="76" y="204" width="104" height="104" rx="26" fill="#e0368f"/>
<rect x="204" y="204" width="104" height="104" rx="26" fill="#efe9dc"/>
<path d="M256.0 286.0V230.0M230.0 254.0L256.0 228.0L282.0 254.0" fill="none" stroke="#0b0b0c" stroke-width="15" stroke-linecap="round" stroke-linejoin="round"/>
<rect x="332" y="204" width="104" height="104" rx="26" fill="#f2a516"/>
<rect x="76" y="332" width="104" height="104" rx="26" fill="#7bb51c"/>
<rect x="204" y="332" width="104" height="104" rx="26" fill="#1f9d55"/>
<rect x="332" y="332" width="104" height="104" rx="26" fill="#12a58a"/>
</g>
<rect x="2" y="2" width="508" height="508" rx="110" fill="none" stroke="url(#sheen)" stroke-width="4"/>
<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: 1.6 KiB

After

Width:  |  Height:  |  Size: 341 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 679 B

After

Width:  |  Height:  |  Size: 401 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 582 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 740 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

@@ -1,27 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<!-- ArtCraft Launcher: the Craft App Suite as a grid of app-coloured tiles, with a launch arrow in the middle. -->
<defs>
<linearGradient id="bg" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#26282e"/>
<stop offset="1" stop-color="#0b0b0c"/>
</linearGradient>
<linearGradient id="sheen" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#ffffff" stop-opacity="0.18"/>
<stop offset="0.5" stop-color="#ffffff" stop-opacity="0"/>
</linearGradient>
</defs>
<rect width="512" height="512" rx="112" fill="url(#bg)"/>
<g>
<rect x="76" y="76" width="104" height="104" rx="26" fill="#2f7bf5"/>
<rect x="204" y="76" width="104" height="104" rx="26" fill="#e8573f"/>
<rect x="332" y="76" width="104" height="104" rx="26" fill="#8b5cf6"/>
<rect x="76" y="204" width="104" height="104" rx="26" fill="#e0368f"/>
<rect x="204" y="204" width="104" height="104" rx="26" fill="#efe9dc"/>
<path d="M256.0 286.0V230.0M230.0 254.0L256.0 228.0L282.0 254.0" fill="none" stroke="#0b0b0c" stroke-width="15" stroke-linecap="round" stroke-linejoin="round"/>
<rect x="332" y="204" width="104" height="104" rx="26" fill="#f2a516"/>
<rect x="76" y="332" width="104" height="104" rx="26" fill="#7bb51c"/>
<rect x="204" y="332" width="104" height="104" rx="26" fill="#1f9d55"/>
<rect x="332" y="332" width="104" height="104" rx="26" fill="#12a58a"/>
</g>
<rect x="2" y="2" width="508" height="508" rx="110" fill="none" stroke="url(#sheen)" stroke-width="4"/>
<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: 1.6 KiB

After

Width:  |  Height:  |  Size: 341 B

+2 -1
View File
@@ -103,7 +103,8 @@ impl LauncherUi {
fn settings_dialog(&mut self, ui: &mut egui::Ui, host: &mut dyn Host) -> bool {
let t = Tokens::get(ui.ctx());
ui.set_width(460.0);
Self::title(ui, Some(crate::icons::launcher()), "Settings", &format!("ArtCraft Launcher {}", env!("CARGO_PKG_VERSION")));
// The app icon is the black mark; on a dark dialog show the blue one.
Self::title(ui, Some(crate::icons::artcraft_mark(t.dark)), "Settings", &format!("ArtCraft Launcher {}", env!("CARGO_PKG_VERSION")));
let section = |ui: &mut egui::Ui, s: &str| {
ui.add_space(10.0);
ui.label(RichText::new(s.to_uppercase()).size(11.0).family(theme::semibold()).color(t.text_faint));
+7 -3
View File
@@ -45,7 +45,11 @@ pub fn social(service: &str) -> Option<ImageSource<'static>> {
})
}
/// The launcher's icon.
pub fn launcher() -> ImageSource<'static> {
egui::include_image!("../../../assets/app-icon/hicolor/128x128/apps/ai.storyteller.artcraft-launcher.png")
/// The ArtCraft "A" mark as supplied: black for light backgrounds, the blue mark for dark ones.
pub fn artcraft_mark(dark_background: bool) -> ImageSource<'static> {
if dark_background {
egui::include_image!("../../../docs/brand/artcraft-mark.svg")
} else {
egui::include_image!("../../../docs/brand/artcraft-mark-black.svg")
}
}
+16 -14
View File
@@ -1,6 +1,9 @@
#!/usr/bin/env bash
# Regenerate every app icon from assets/app-icon/artcraft-launcher.svg (the canonical master), and
# the tray icons from the ArtCraft "A" mark in docs/brand/ (a trademark, not MIT/Apache).
# Regenerate every app and tray icon from the ArtCraft "A" mark in docs/brand/, rendered exactly as
# supplied. The mark is an ArtCraft trademark, NOT MIT/Apache: docs/brand/LICENSE-brand.txt.
#
# - App icon (Dock, taskbar, Start menu, Linux menus, installers): the black mark.
# - Tray: the black mark as the macOS menu-bar template; the blue mark on Windows, Linux and BSD.
#
# Needs: resvg (brew install resvg / cargo install resvg). On macOS, iconutil also writes the
# .icns. The outputs are committed, so packaging (and the Rust build, which include_bytes!s some
@@ -10,20 +13,21 @@
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
DIR="$ROOT/assets/app-icon"
SVG="$DIR/artcraft-launcher.svg"
BRAND="$ROOT/docs/brand"
SVG="$BRAND/artcraft-mark-black.svg"
ID="ai.storyteller.artcraft-launcher"
TMP="$(mktemp -d)"
trap 'rm -rf "$TMP"' EXIT
command -v resvg >/dev/null || { echo "error: resvg not found (brew install resvg)" >&2; exit 1; }
# The artwork is a 512-unit rounded tile (rx=112). macOS icons pad it to Apple's 824/1024 body
# grid (transparent margin). Windows and Linux icons use the whole tile with a hairline margin.
grep -q 'viewBox="0 0 512 512"' "$SVG" || { echo "error: expected viewBox=\"0 0 512 512\" in $SVG" >&2; exit 1; }
# The mark's artwork is untouched. macOS icons get a little more transparent margin (Apple's
# 824/1024 icon grid) by widening the view box around it; everything else uses the file as is.
BOX='viewBox="-10 -19.42 136.34 136.34"'
grep -q "$BOX" "$SVG" || { echo "error: expected $BOX in $SVG" >&2; exit 1; }
MAC="$TMP/mac.svg"
sed 's/viewBox="0 0 512 512"/viewBox="-62 -62 636 636"/' "$SVG" >"$MAC"
FLAT="$TMP/flat.svg"
sed 's/viewBox="0 0 512 512"/viewBox="-6 -6 524 524"/' "$SVG" >"$FLAT"
sed "s/$BOX/viewBox=\"-17.5 -26.92 151.34 151.34\"/" "$SVG" >"$MAC"
FLAT="$SVG"
render() { resvg -w "$2" -h "$2" "$1" "$3" </dev/null; }
@@ -36,6 +40,7 @@ for s in 16 24 32 48 64 128 256 512; do
done
mkdir -p "$DIR/hicolor/scalable/apps"
cp "$SVG" "$DIR/hicolor/scalable/apps/$ID.svg"
cp "$SVG" "$DIR/artcraft-launcher.svg"
# Windows .ico.
ICO_PNGS=()
@@ -58,11 +63,8 @@ else
echo "warning: iconutil not found (macOS only); artcraft-launcher.icns not regenerated" >&2
fi
# Tray icons: the ArtCraft "A" mark, rendered unmodified from the supplied brand files (an
# ArtCraft trademark, not MIT/Apache: docs/brand/LICENSE-brand.txt). The black mark is the macOS
# menu-bar template (44 px = 22 pt @2x; macOS tints it); the blue one is for the Windows
# notification area and Linux/BSD status notifiers.
BRAND="$ROOT/docs/brand"
# Tray icons: the black mark is the macOS menu-bar template (44 px = 22 pt @2x; macOS tints it);
# the blue one is for the Windows notification area and Linux/BSD status notifiers.
render "$BRAND/artcraft-mark-black.svg" 44 "$BRAND/artcraft-mark-black-44.png"
render "$BRAND/artcraft-mark.svg" 64 "$BRAND/artcraft-mark-64.png"
echo "icons written to $DIR"