# build.py import os import shutil import sys import subprocess from PIL import Image def generate_icon(): """Generate icon.ico from tray icon colors (green dot on transparent).""" sizes = [16, 32, 48, 256] frames = [] for size in sizes: img = Image.new("RGBA", (size, size), (0, 0, 0, 0)) from PIL import ImageDraw d = ImageDraw.Draw(img) margin = max(1, size // 16) d.ellipse([margin, margin, size - margin, size - margin], fill=(40, 200, 80)) frames.append(img) frames[0].save("icon.ico", format="ICO", sizes=[(s, s) for s in sizes], append_images=frames[1:]) print("icon.ico generated.") def build(): generate_icon() subprocess.run([sys.executable, "-m", "PyInstaller", "whisper-dictation.spec", "--noconfirm"], check=True) dist_dir = os.path.join("dist", "whisper-dictation") for fname in ["config.json", "vocabulary.json"]: dest = os.path.join(dist_dir, fname) if not os.path.exists(dest): shutil.copy(fname, dest) print(f"Copied {fname} -> {dist_dir}/") else: print(f"Skipped {fname} (already exists in dist — preserving user edits)") print(f"\nBuild complete: {dist_dir}/") if __name__ == "__main__": build()