From 4a931a3400678b1f4c3d22af5bc8baa8237aaeee Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Fri, 2 Oct 2026 09:52:46 -0400 Subject: [PATCH] app icon: owl with ear tufts (owner's ArtCraft drawing), Dock/taskbar/launcher wiring, palette docs - assets/app-icon/: canonical SVG + light SVG, 1024 PNG, macOS runtime PNG, .icns, .ico, hicolor theme, LICENSE.txt and README (palette, geometry, provenance, regeneration). - packaging/icons.sh regenerates everything with resvg, iconutil and the new `cargo xtask ico`. - Native app sets the window icon (with_icon) and the Wayland app id; build.rs embeds the .ico and VERSIONINFO into filmcraft.exe on Windows (winresource, Windows-host build-dep only). - packaging/linux/ai.storyteller.filmcraft.desktop with Icon=ai.storyteller.filmcraft. - Web app: favicon.svg replaced by favicon.png from the same artwork; sidecars and ATTRIBUTION.md updated. Co-Authored-By: Claude Opus 5.5 --- ATTRIBUTION.md | 17 ++- Cargo.lock | 19 ++++ README.md | 4 + apps/filmcraft-web/web/favicon.png | Bin 0 -> 17152 bytes .../filmcraft-web/web/favicon.png.attribution | 8 ++ apps/filmcraft-web/web/favicon.svg | 16 --- .../filmcraft-web/web/favicon.svg.attribution | 9 -- apps/filmcraft-web/web/index.html | 4 +- apps/filmcraft/Cargo.toml | 5 + apps/filmcraft/build.rs | 43 ++++++++ apps/filmcraft/src/main.rs | 19 +++- assets/app-icon/LICENSE.txt | 13 +++ assets/app-icon/README.md | 60 ++++++++++ assets/app-icon/filmcraft-1024.png | Bin 0 -> 399999 bytes .../app-icon/filmcraft-1024.png.attribution | 8 ++ assets/app-icon/filmcraft-macos-512.png | Bin 0 -> 125210 bytes .../filmcraft-macos-512.png.attribution | 8 ++ assets/app-icon/filmcraft-small.svg | 1 + .../app-icon/filmcraft-small.svg.attribution | 8 ++ assets/app-icon/filmcraft.icns | Bin 0 -> 738627 bytes assets/app-icon/filmcraft.icns.attribution | 8 ++ assets/app-icon/filmcraft.ico | Bin 0 -> 91228 bytes assets/app-icon/filmcraft.ico.attribution | 8 ++ assets/app-icon/filmcraft.svg | 1 + assets/app-icon/filmcraft.svg.attribution | 8 ++ .../128x128/apps/ai.storyteller.filmcraft.png | Bin 0 -> 17152 bytes .../ai.storyteller.filmcraft.png.attribution | 8 ++ .../16x16/apps/ai.storyteller.filmcraft.png | Bin 0 -> 685 bytes .../ai.storyteller.filmcraft.png.attribution | 8 ++ .../24x24/apps/ai.storyteller.filmcraft.png | Bin 0 -> 1108 bytes .../ai.storyteller.filmcraft.png.attribution | 8 ++ .../256x256/apps/ai.storyteller.filmcraft.png | Bin 0 -> 58560 bytes .../ai.storyteller.filmcraft.png.attribution | 8 ++ .../32x32/apps/ai.storyteller.filmcraft.png | Bin 0 -> 1781 bytes .../ai.storyteller.filmcraft.png.attribution | 8 ++ .../48x48/apps/ai.storyteller.filmcraft.png | Bin 0 -> 3280 bytes .../ai.storyteller.filmcraft.png.attribution | 8 ++ .../512x512/apps/ai.storyteller.filmcraft.png | Bin 0 -> 164182 bytes .../ai.storyteller.filmcraft.png.attribution | 8 ++ .../64x64/apps/ai.storyteller.filmcraft.png | Bin 0 -> 5230 bytes .../ai.storyteller.filmcraft.png.attribution | 8 ++ .../apps/ai.storyteller.filmcraft.svg | 1 + .../ai.storyteller.filmcraft.svg.attribution | 8 ++ packaging/icons.sh | 63 +++++++++++ .../linux/ai.storyteller.filmcraft.desktop | 13 +++ xtask/src/ico.rs | 104 ++++++++++++++++++ xtask/src/main.rs | 10 +- 47 files changed, 500 insertions(+), 30 deletions(-) create mode 100644 apps/filmcraft-web/web/favicon.png create mode 100644 apps/filmcraft-web/web/favicon.png.attribution delete mode 100644 apps/filmcraft-web/web/favicon.svg delete mode 100644 apps/filmcraft-web/web/favicon.svg.attribution create mode 100644 apps/filmcraft/build.rs create mode 100644 assets/app-icon/LICENSE.txt create mode 100644 assets/app-icon/README.md create mode 100644 assets/app-icon/filmcraft-1024.png create mode 100644 assets/app-icon/filmcraft-1024.png.attribution create mode 100644 assets/app-icon/filmcraft-macos-512.png create mode 100644 assets/app-icon/filmcraft-macos-512.png.attribution create mode 100644 assets/app-icon/filmcraft-small.svg create mode 100644 assets/app-icon/filmcraft-small.svg.attribution create mode 100644 assets/app-icon/filmcraft.icns create mode 100644 assets/app-icon/filmcraft.icns.attribution create mode 100644 assets/app-icon/filmcraft.ico create mode 100644 assets/app-icon/filmcraft.ico.attribution create mode 100644 assets/app-icon/filmcraft.svg create mode 100644 assets/app-icon/filmcraft.svg.attribution create mode 100644 assets/app-icon/hicolor/128x128/apps/ai.storyteller.filmcraft.png create mode 100644 assets/app-icon/hicolor/128x128/apps/ai.storyteller.filmcraft.png.attribution create mode 100644 assets/app-icon/hicolor/16x16/apps/ai.storyteller.filmcraft.png create mode 100644 assets/app-icon/hicolor/16x16/apps/ai.storyteller.filmcraft.png.attribution create mode 100644 assets/app-icon/hicolor/24x24/apps/ai.storyteller.filmcraft.png create mode 100644 assets/app-icon/hicolor/24x24/apps/ai.storyteller.filmcraft.png.attribution create mode 100644 assets/app-icon/hicolor/256x256/apps/ai.storyteller.filmcraft.png create mode 100644 assets/app-icon/hicolor/256x256/apps/ai.storyteller.filmcraft.png.attribution create mode 100644 assets/app-icon/hicolor/32x32/apps/ai.storyteller.filmcraft.png create mode 100644 assets/app-icon/hicolor/32x32/apps/ai.storyteller.filmcraft.png.attribution create mode 100644 assets/app-icon/hicolor/48x48/apps/ai.storyteller.filmcraft.png create mode 100644 assets/app-icon/hicolor/48x48/apps/ai.storyteller.filmcraft.png.attribution create mode 100644 assets/app-icon/hicolor/512x512/apps/ai.storyteller.filmcraft.png create mode 100644 assets/app-icon/hicolor/512x512/apps/ai.storyteller.filmcraft.png.attribution create mode 100644 assets/app-icon/hicolor/64x64/apps/ai.storyteller.filmcraft.png create mode 100644 assets/app-icon/hicolor/64x64/apps/ai.storyteller.filmcraft.png.attribution create mode 100644 assets/app-icon/hicolor/scalable/apps/ai.storyteller.filmcraft.svg create mode 100644 assets/app-icon/hicolor/scalable/apps/ai.storyteller.filmcraft.svg.attribution create mode 100755 packaging/icons.sh create mode 100644 packaging/linux/ai.storyteller.filmcraft.desktop create mode 100644 xtask/src/ico.rs diff --git a/ATTRIBUTION.md b/ATTRIBUTION.md index 3fc73c92..32c3b7de 100644 --- a/ATTRIBUTION.md +++ b/ATTRIBUTION.md @@ -25,7 +25,22 @@ iconography, images or other Adobe assets; open licences only; every asset attri | `docs/images/filmcraft-scopes.png` | FilmCraft contributors | Original work: FilmCraft UI crop (scopes of a Charade (1963) frame, public domain) | MIT OR Apache-2.0 | | `docs/images/filmcraft-effects.png` | FilmCraft contributors | Original work: FilmCraft screenshot crop; NASA Earth Views (US Government work, public domain) | MIT OR Apache-2.0; footage public domain | | `docs/images/filmcraft-timeline.png` | FilmCraft contributors | Original work: FilmCraft UI crop; thumbnails from Night of the Living Dead (1968) and Carnival of Souls (1962), CC0 Chopin waveform | MIT OR Apache-2.0; film frames public domain | -| `apps/filmcraft-web/web/favicon.svg` | FilmCraft contributors | Original work: web app icon (disc, sprocket ring, play triangle) drawn from basic SVG shapes | MIT OR Apache-2.0 | +| `assets/app-icon/filmcraft.svg` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; canonical vector | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | +| `assets/app-icon/filmcraft-small.svg` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; lighter vector | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | +| `assets/app-icon/filmcraft-1024.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; 1024 px render | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | +| `assets/app-icon/filmcraft-macos-512.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; macOS runtime Dock icon (512 px) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | +| `assets/app-icon/filmcraft.icns` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; macOS .icns | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | +| `assets/app-icon/filmcraft.ico` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; Windows .ico (16-256 px) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | +| `assets/app-icon/hicolor/16x16/apps/ai.storyteller.filmcraft.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; Linux hicolor theme 16 px | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | +| `assets/app-icon/hicolor/24x24/apps/ai.storyteller.filmcraft.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; Linux hicolor theme 24 px | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | +| `assets/app-icon/hicolor/32x32/apps/ai.storyteller.filmcraft.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; Linux hicolor theme 32 px | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | +| `assets/app-icon/hicolor/48x48/apps/ai.storyteller.filmcraft.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; Linux hicolor theme 48 px | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | +| `assets/app-icon/hicolor/64x64/apps/ai.storyteller.filmcraft.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; Linux hicolor theme 64 px | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | +| `assets/app-icon/hicolor/128x128/apps/ai.storyteller.filmcraft.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; Linux hicolor theme 128 px | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | +| `assets/app-icon/hicolor/256x256/apps/ai.storyteller.filmcraft.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; Linux hicolor theme 256 px | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | +| `assets/app-icon/hicolor/512x512/apps/ai.storyteller.filmcraft.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; Linux hicolor theme 512 px | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | +| `assets/app-icon/hicolor/scalable/apps/ai.storyteller.filmcraft.svg` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; Linux hicolor theme scalable | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | +| `apps/filmcraft-web/web/favicon.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; 128 px | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | ## Golden test images diff --git a/Cargo.lock b/Cargo.lock index 946a9963..21917c02 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1671,6 +1671,7 @@ dependencies = [ "rfd", "serde_json", "winit", + "winresource", ] [[package]] @@ -5777,10 +5778,12 @@ version = "1.1.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "920602543f0911ab71da12c50d59701da54c196d1a2bf5cb4b75667f137a406a" dependencies = [ + "indexmap", "serde_core", "serde_spanned 1.1.1", "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", + "toml_writer", "winnow 1.0.4", ] @@ -5847,6 +5850,12 @@ dependencies = [ "winnow 1.0.4", ] +[[package]] +name = "toml_writer" +version = "1.1.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" + [[package]] name = "tracing" version = "0.1.44" @@ -6967,6 +6976,16 @@ dependencies = [ "memchr", ] +[[package]] +name = "winresource" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0986a8b1d586b7d3e4fe3d9ea39fb451ae22869dcea4aa109d287a374d866087" +dependencies = [ + "toml 1.1.6+spec-1.1.0", + "version_check", +] + [[package]] name = "wit-bindgen" version = "0.57.1" diff --git a/README.md b/README.md index 60f0871c..1c159994 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,10 @@

+

+ FilmCraft icon: an engraved owl on FilmCraft violet (#8b5cf6) +

+

FilmCraft

diff --git a/apps/filmcraft-web/web/favicon.png b/apps/filmcraft-web/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..3c217317bffd21c7d1183d7b339617588f0effde GIT binary patch literal 17152 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 - - - - - - - - - - - - - - - diff --git a/apps/filmcraft-web/web/favicon.svg.attribution b/apps/filmcraft-web/web/favicon.svg.attribution deleted file mode 100644 index 68ec8135..00000000 --- a/apps/filmcraft-web/web/favicon.svg.attribution +++ /dev/null @@ -1,9 +0,0 @@ -asset: favicon.svg -title: FilmCraft web app icon (favicon / install icon) -author: FilmCraft contributors -source: original work -license: MIT OR Apache-2.0 -added: 2026-10-01 by FilmCraft contributors (Claude agent, M13 web app) -notes: Hand-written SVG: a dark teal disc, an orange ring with eight sprocket dots and a play - triangle, drawn from scratch from basic shapes. Not derived from any other product's - icon. diff --git a/apps/filmcraft-web/web/index.html b/apps/filmcraft-web/web/index.html index 72ddb88f..73307f44 100644 --- a/apps/filmcraft-web/web/index.html +++ b/apps/filmcraft-web/web/index.html @@ -5,7 +5,7 @@ FilmCraft - +