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]>
No files matched your search
@@ -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
|
||||
|
||||
@@ -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) |
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
@@ -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/`.
|
||||
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 12 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 |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 679 B After Width: | Height: | Size: 401 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 582 B |
|
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 740 B |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 11 KiB |
|
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 |
@@ -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));
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||