Update icon assets and improve icon management script

- Replaced the main Voicebox icon with a new microphone-themed design.
- Removed outdated appearance variants from the icon assets.
- Updated the icon management script to generate a landing page logo and streamline icon compilation.
- Adjusted icon.json to reflect the new icon structure and positioning.
This commit is contained in:
Jamie Pine
2026-01-25 16:01:44 -08:00
parent 041ca15a09
commit 45c4c2f488
52 changed files with 39 additions and 280 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 MiB

After

Width:  |  Height:  |  Size: 2.5 MiB

+31 -174
View File
@@ -10,6 +10,7 @@ EXPORTS_DIR="tauri/assets/voicebox_exports"
ICON_BUNDLE="tauri/assets/voicebox.icon"
ASSETS_DIR="$ICON_BUNDLE/Assets"
ICONS_DIR="tauri/src-tauri/icons"
LANDING_LOGO="landing/public/voicebox-logo.png"
SOURCE_ICON="$EXPORTS_DIR/[email protected]"
echo "🎨 Updating all Voicebox icons from exports..."
@@ -22,183 +23,27 @@ if [ ! -f "$SOURCE_ICON" ]; then
fi
# ============================================
# PART 1: Update voicebox.icon Bundle
# PART 1: Compile Liquid Glass Icon Bundle
# ============================================
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📦 Part 1: Updating Liquid Glass Icon Bundle"
echo "📦 Part 1: Compiling Liquid Glass Icon Bundle"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
mkdir -p "$ASSETS_DIR"
echo "Compiling voicebox.icon with actool..."
# Remove old generated icons to force rebuild
rm -rf tauri/src-tauri/gen/*.icns tauri/src-tauri/gen/Assets.car 2>/dev/null
echo "Copying appearance variants..."
cp "$EXPORTS_DIR/[email protected]" "$ASSETS_DIR/Voicebox.png"
echo " ✓ Default"
cd tauri/src-tauri
cargo build 2>/dev/null || echo " ⚠ Cargo build had warnings (this is normal)"
cd ../..
[ -f "$EXPORTS_DIR/[email protected]" ] && {
cp "$EXPORTS_DIR/[email protected]" "$ASSETS_DIR/Voicebox-Dark.png"
echo " ✓ Dark"
}
if [ -f "tauri/src-tauri/gen/voicebox.icns" ]; then
echo " ✓ voicebox.icns generated"
else
echo " ⚠ Warning: voicebox.icns not generated (will use fallback)"
fi
[ -f "$EXPORTS_DIR/[email protected]" ] && {
cp "$EXPORTS_DIR/[email protected]" "$ASSETS_DIR/Voicebox-ClearLight.png"
echo " ✓ Clear Light"
}
[ -f "$EXPORTS_DIR/[email protected]" ] && {
cp "$EXPORTS_DIR/[email protected]" "$ASSETS_DIR/Voicebox-ClearDark.png"
echo " ✓ Clear Dark"
}
[ -f "$EXPORTS_DIR/[email protected]" ] && {
cp "$EXPORTS_DIR/[email protected]" "$ASSETS_DIR/Voicebox-TintedLight.png"
echo " ✓ Tinted Light"
}
[ -f "$EXPORTS_DIR/[email protected]" ] && {
cp "$EXPORTS_DIR/[email protected]" "$ASSETS_DIR/Voicebox-TintedDark.png"
echo " ✓ Tinted Dark"
}
echo ""
echo "Updating icon.json..."
cat > "$ICON_BUNDLE/icon.json" << 'EOF'
{
"fill" : "automatic",
"groups" : [
{
"layers" : [
{
"blend-mode" : "normal",
"glass" : true,
"image-name" : "Voicebox.png",
"name" : "Voicebox",
"position" : {
"scale" : 0.37,
"translation-in-points" : [
-0.12338405356129378,
297.27705195772353
]
}
}
],
"shadow" : {
"kind" : "neutral",
"opacity" : 0.5
},
"translucency" : {
"enabled" : true,
"value" : 0.5
}
}
],
"appearances" : [
{
"appearance" : "light",
"groups" : [
{
"layers" : [
{
"blend-mode" : "normal",
"glass" : true,
"image-name" : "Voicebox.png",
"name" : "Voicebox"
}
]
}
]
},
{
"appearance" : "dark",
"groups" : [
{
"layers" : [
{
"blend-mode" : "normal",
"glass" : true,
"image-name" : "Voicebox-Dark.png",
"name" : "Voicebox Dark"
}
]
}
]
},
{
"appearance" : "light",
"contrast" : "clear",
"groups" : [
{
"layers" : [
{
"blend-mode" : "normal",
"glass" : true,
"image-name" : "Voicebox-ClearLight.png",
"name" : "Voicebox Clear Light"
}
]
}
]
},
{
"appearance" : "dark",
"contrast" : "clear",
"groups" : [
{
"layers" : [
{
"blend-mode" : "normal",
"glass" : true,
"image-name" : "Voicebox-ClearDark.png",
"name" : "Voicebox Clear Dark"
}
]
}
]
},
{
"appearance" : "light",
"contrast" : "tinted",
"groups" : [
{
"layers" : [
{
"blend-mode" : "normal",
"glass" : true,
"image-name" : "Voicebox-TintedLight.png",
"name" : "Voicebox Tinted Light"
}
]
}
]
},
{
"appearance" : "dark",
"contrast" : "tinted",
"groups" : [
{
"layers" : [
{
"blend-mode" : "normal",
"glass" : true,
"image-name" : "Voicebox-TintedDark.png",
"name" : "Voicebox Tinted Dark"
}
]
}
]
}
],
"supported-platforms" : {
"circles" : [
"watchOS"
],
"squares" : "shared"
}
}
EOF
echo " ✓ icon.json updated"
echo ""
# ============================================
@@ -219,8 +64,13 @@ sips -s format png -z 128 128 "$SOURCE_ICON" --out "$ICONS_DIR/128x128.png" 2>/d
sips -s format png -z 256 256 "$SOURCE_ICON" --out "$ICONS_DIR/[email protected]" 2>/dev/null
sips -s format png -z 512 512 "$SOURCE_ICON" --out "$ICONS_DIR/icon.png" 2>/dev/null
# Generate ICNS
echo "Generating icon.icns..."
# Copy Liquid Glass compiled ICNS or generate fallback
echo "Copying icon.icns..."
if [ -f "tauri/src-tauri/gen/voicebox.icns" ]; then
cp tauri/src-tauri/gen/voicebox.icns "$ICONS_DIR/icon.icns"
echo " ✓ Copied Liquid Glass compiled icon.icns"
else
echo " ⚠ Liquid Glass icon not found, generating fallback icon.icns..."
mkdir -p /tmp/voicebox-iconset.iconset
sips -s format png -z 16 16 "$SOURCE_ICON" --out /tmp/voicebox-iconset.iconset/icon_16x16.png 2>/dev/null
sips -s format png -z 32 32 "$SOURCE_ICON" --out /tmp/voicebox-iconset.iconset/[email protected] 2>/dev/null
@@ -231,9 +81,11 @@ sips -s format png -z 256 256 "$SOURCE_ICON" --out /tmp/voicebox-iconset.iconset
sips -s format png -z 256 256 "$SOURCE_ICON" --out /tmp/voicebox-iconset.iconset/icon_256x256.png 2>/dev/null
sips -s format png -z 512 512 "$SOURCE_ICON" --out /tmp/voicebox-iconset.iconset/[email protected] 2>/dev/null
sips -s format png -z 512 512 "$SOURCE_ICON" --out /tmp/voicebox-iconset.iconset/icon_512x512.png 2>/dev/null
sips -s format png -z 1024 1024 "$SOURCE_ICON" --out /tmp/voicebox-iconset.iconset/[email protected] 2>/dev/null
iconutil -c icns /tmp/voicebox-iconset.iconset -o "$ICONS_DIR/icon.icns"
rm -rf /tmp/voicebox-iconset.iconset
sips -s format png -z 1024 1024 "$SOURCE_ICON" --out /tmp/voicebox-iconset.iconset/[email protected] 2>/dev/null
iconutil -c icns /tmp/voicebox-iconset.iconset -o "$ICONS_DIR/icon.icns"
rm -rf /tmp/voicebox-iconset.iconset
echo " ✓ Generated fallback icon.icns"
fi
# Windows Square Logos
echo "Generating Windows icons..."
@@ -300,6 +152,10 @@ sips -s format png -z 192 192 "$SOURCE_ICON" --out "$ICONS_DIR/android/mipmap-xx
sips -s format png -z 192 192 "$SOURCE_ICON" --out "$ICONS_DIR/android/mipmap-xxxhdpi/ic_launcher_round.png" 2>/dev/null
sips -s format png -z 192 192 "$SOURCE_ICON" --out "$ICONS_DIR/android/mipmap-xxxhdpi/ic_launcher_foreground.png" 2>/dev/null
# Landing Page Logo
echo "Generating landing page logo..."
sips -s format png -z 1024 1024 "$SOURCE_ICON" --out "$LANDING_LOGO" 2>/dev/null
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "✅ All icons updated successfully!"
@@ -311,5 +167,6 @@ echo " ✓ macOS/Desktop fallback icons"
echo " ✓ Windows Square logos"
echo " ✓ iOS AppIcons (18 sizes)"
echo " ✓ Android mipmap icons (5 densities)"
echo " ✓ Landing page logo"
echo ""
echo "Next: Rebuild the app with 'cd tauri && bun run tauri build'"
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 MiB

+6 -104
View File
@@ -4,15 +4,13 @@
{
"layers" : [
{
"blend-mode" : "normal",
"glass" : true,
"image-name" : "Voicebox.png",
"name" : "Voicebox",
"image-name" : "Voicebox_Microphone.png",
"name" : "Voicebox_Microphone",
"position" : {
"scale" : 0.37,
"scale" : 0.36,
"translation-in-points" : [
-0.12338405356129378,
297.27705195772353
0.140625,
270.1875
]
}
}
@@ -27,106 +25,10 @@
}
}
],
"appearances" : [
{
"appearance" : "light",
"groups" : [
{
"layers" : [
{
"blend-mode" : "normal",
"glass" : true,
"image-name" : "Voicebox.png",
"name" : "Voicebox"
}
]
}
]
},
{
"appearance" : "dark",
"groups" : [
{
"layers" : [
{
"blend-mode" : "normal",
"glass" : true,
"image-name" : "Voicebox-Dark.png",
"name" : "Voicebox Dark"
}
]
}
]
},
{
"appearance" : "light",
"contrast" : "clear",
"groups" : [
{
"layers" : [
{
"blend-mode" : "normal",
"glass" : true,
"image-name" : "Voicebox-ClearLight.png",
"name" : "Voicebox Clear Light"
}
]
}
]
},
{
"appearance" : "dark",
"contrast" : "clear",
"groups" : [
{
"layers" : [
{
"blend-mode" : "normal",
"glass" : true,
"image-name" : "Voicebox-ClearDark.png",
"name" : "Voicebox Clear Dark"
}
]
}
]
},
{
"appearance" : "light",
"contrast" : "tinted",
"groups" : [
{
"layers" : [
{
"blend-mode" : "normal",
"glass" : true,
"image-name" : "Voicebox-TintedLight.png",
"name" : "Voicebox Tinted Light"
}
]
}
]
},
{
"appearance" : "dark",
"contrast" : "tinted",
"groups" : [
{
"layers" : [
{
"blend-mode" : "normal",
"glass" : true,
"image-name" : "Voicebox-TintedDark.png",
"name" : "Voicebox Tinted Dark"
}
]
}
]
}
],
"supported-platforms" : {
"circles" : [
"watchOS"
],
"squares" : "shared"
}
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 MiB

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 MiB

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 MiB

After

Width:  |  Height:  |  Size: 2.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 MiB

After

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 MiB

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 MiB

After

Width:  |  Height:  |  Size: 2.6 MiB

+2 -2
View File
@@ -5,8 +5,8 @@ fn main() {
#[cfg(target_os = "macos")]
{
let project_root = env!("CARGO_MANIFEST_DIR");
// voicebox.icon is in the root, two levels up from src-tauri
let icon_source = format!("{}/../../voicebox.icon", project_root);
// voicebox.icon is in tauri/assets/voicebox.icon (one level up from src-tauri)
let icon_source = format!("{}/../assets/voicebox.icon", project_root);
let gen_dir = format!("{}/gen", project_root);
std::fs::create_dir_all(&gen_dir).expect("Failed to create gen directory");
Binary file not shown.
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 297 KiB

After

Width:  |  Height:  |  Size: 293 KiB