diff --git a/LocalTranscription.ico b/LocalTranscription.ico new file mode 100644 index 0000000..a80aaa8 Binary files /dev/null and b/LocalTranscription.ico differ diff --git a/LocalTranscription.iconset/icon_128x128.png b/LocalTranscription.iconset/icon_128x128.png new file mode 100644 index 0000000..e969b9d Binary files /dev/null and b/LocalTranscription.iconset/icon_128x128.png differ diff --git a/LocalTranscription.iconset/icon_128x128@2x.png b/LocalTranscription.iconset/icon_128x128@2x.png new file mode 100644 index 0000000..7f64355 Binary files /dev/null and b/LocalTranscription.iconset/icon_128x128@2x.png differ diff --git a/LocalTranscription.iconset/icon_16x16.png b/LocalTranscription.iconset/icon_16x16.png new file mode 100644 index 0000000..64d8731 Binary files /dev/null and b/LocalTranscription.iconset/icon_16x16.png differ diff --git a/LocalTranscription.iconset/icon_16x16@2x.png b/LocalTranscription.iconset/icon_16x16@2x.png new file mode 100644 index 0000000..21a7f60 Binary files /dev/null and b/LocalTranscription.iconset/icon_16x16@2x.png differ diff --git a/LocalTranscription.iconset/icon_256x256.png b/LocalTranscription.iconset/icon_256x256.png new file mode 100644 index 0000000..7f64355 Binary files /dev/null and b/LocalTranscription.iconset/icon_256x256.png differ diff --git a/LocalTranscription.iconset/icon_256x256@2x.png b/LocalTranscription.iconset/icon_256x256@2x.png new file mode 100644 index 0000000..f0f4f71 Binary files /dev/null and b/LocalTranscription.iconset/icon_256x256@2x.png differ diff --git a/LocalTranscription.iconset/icon_32x32.png b/LocalTranscription.iconset/icon_32x32.png new file mode 100644 index 0000000..21a7f60 Binary files /dev/null and b/LocalTranscription.iconset/icon_32x32.png differ diff --git a/LocalTranscription.iconset/icon_32x32@2x.png b/LocalTranscription.iconset/icon_32x32@2x.png new file mode 100644 index 0000000..ed0acd9 Binary files /dev/null and b/LocalTranscription.iconset/icon_32x32@2x.png differ diff --git a/LocalTranscription.iconset/icon_512x512.png b/LocalTranscription.iconset/icon_512x512.png new file mode 100644 index 0000000..f0f4f71 Binary files /dev/null and b/LocalTranscription.iconset/icon_512x512.png differ diff --git a/LocalTranscription.iconset/icon_512x512@2x.png b/LocalTranscription.iconset/icon_512x512@2x.png new file mode 100644 index 0000000..5437666 Binary files /dev/null and b/LocalTranscription.iconset/icon_512x512@2x.png differ diff --git a/LocalTranscription.png b/LocalTranscription.png new file mode 100644 index 0000000..6090ea0 Binary files /dev/null and b/LocalTranscription.png differ diff --git a/create_icons.py b/create_icons.py new file mode 100644 index 0000000..c36ce44 --- /dev/null +++ b/create_icons.py @@ -0,0 +1,89 @@ +#!/usr/bin/env python3 +""" +Create platform-specific icon files from LocalTranscription.png +Generates .ico (Windows) and .icns (macOS) from the PNG source. +""" + +from PIL import Image +import sys +from pathlib import Path + +def create_ico(png_path, ico_path): + """Create Windows ICO file from PNG.""" + img = Image.open(png_path) + + # ICO files typically contain multiple sizes + # Windows uses 16, 32, 48, 256 pixel sizes + sizes = [(16, 16), (32, 32), (48, 48), (256, 256)] + + # Create list of resized images + icons = [] + for size in sizes: + resized = img.resize(size, Image.Resampling.LANCZOS) + icons.append(resized) + + # Save as ICO + img.save(ico_path, format='ICO', sizes=sizes) + print(f"✓ Created {ico_path}") + +def create_iconset_for_icns(png_path, iconset_dir): + """Create .iconset directory with all required sizes for macOS ICNS.""" + img = Image.open(png_path) + + # macOS requires these specific sizes and naming + sizes = { + 'icon_16x16.png': (16, 16), + 'icon_16x16@2x.png': (32, 32), + 'icon_32x32.png': (32, 32), + 'icon_32x32@2x.png': (64, 64), + 'icon_128x128.png': (128, 128), + 'icon_128x128@2x.png': (256, 256), + 'icon_256x256.png': (256, 256), + 'icon_256x256@2x.png': (512, 512), + 'icon_512x512.png': (512, 512), + 'icon_512x512@2x.png': (1024, 1024), + } + + iconset_dir.mkdir(exist_ok=True) + + for filename, size in sizes.items(): + resized = img.resize(size, Image.Resampling.LANCZOS) + output_path = iconset_dir / filename + resized.save(output_path, format='PNG') + + print(f"✓ Created iconset directory: {iconset_dir}") + print(" To create ICNS on macOS, run:") + print(f" iconutil -c icns {iconset_dir}") + +def main(): + """Main function to create all icon files.""" + script_dir = Path(__file__).parent + png_path = script_dir / "LocalTranscription.png" + + if not png_path.exists(): + print(f"✗ Error: {png_path} not found!") + sys.exit(1) + + print("Creating platform-specific icons from LocalTranscription.png...") + print("=" * 60) + + # Create Windows ICO + ico_path = script_dir / "LocalTranscription.ico" + create_ico(png_path, ico_path) + + # Create macOS iconset (need iconutil on macOS to convert to ICNS) + iconset_dir = script_dir / "LocalTranscription.iconset" + create_iconset_for_icns(png_path, iconset_dir) + + print("=" * 60) + print("✓ Icon creation complete!") + print() + print("Files created:") + print(f" - {ico_path} (Windows)") + print(f" - {iconset_dir}/ (macOS - needs iconutil)") + print() + print("Note: On macOS, run this to create .icns:") + print(f" iconutil -c icns {iconset_dir}") + +if __name__ == "__main__": + main() diff --git a/gui/main_window_qt.py b/gui/main_window_qt.py index b6c6588..f2bcd1c 100644 --- a/gui/main_window_qt.py +++ b/gui/main_window_qt.py @@ -100,6 +100,12 @@ class MainWindow(QMainWindow): self.setWindowTitle("Local Transcription") self.resize(900, 700) + # Set application icon + icon_path = Path(__file__).parent.parent / "LocalTranscription.png" + if icon_path.exists(): + from PySide6.QtGui import QIcon + self.setWindowIcon(QIcon(str(icon_path))) + # Update splash self._update_splash("Creating user interface...") diff --git a/local-transcription.spec b/local-transcription.spec index ca01f80..dd48df5 100644 --- a/local-transcription.spec +++ b/local-transcription.spec @@ -157,7 +157,7 @@ exe = EXE( target_arch=None, codesign_identity=None, entitlements_file=None, - icon=None, # Add icon file path here if you have one + icon='LocalTranscription.ico' if is_windows else 'LocalTranscription.icns', # Platform-specific icon ) coll = COLLECT( diff --git a/main.py b/main.py index f41f871..9d4a3e0 100644 --- a/main.py +++ b/main.py @@ -74,6 +74,12 @@ def main(): app.setApplicationName("Local Transcription") app.setOrganizationName("LocalTranscription") + # Set application icon + icon_path = project_root / "LocalTranscription.png" + if icon_path.exists(): + from PySide6.QtGui import QIcon + app.setWindowIcon(QIcon(str(icon_path))) + # Create and show splash screen splash = create_splash_screen() splash.show()