generate-icons.cjs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. const sharp = require('sharp');
  2. const path = require('path');
  3. const fs = require('fs');
  4. const svgPath = path.resolve(__dirname, '../client/public/favicon.svg');
  5. const iconsDir = path.resolve(__dirname, '../client/public/icons');
  6. // Standard icon sizes for web/electron apps
  7. const iconSizes = [16, 24, 32, 48, 64, 128, 256, 512];
  8. // Tray icon sizes (simpler variant needed at 16 and 32)
  9. const traySizes = [
  10. { name: 'tray-icon.png', size: 16 },
  11. { name: 'tray-icon@2x.png', size: 32 },
  12. ];
  13. // Logo (512px)
  14. const logoSize = { name: 'logo.png', size: 512 };
  15. async function generate() {
  16. if (!fs.existsSync(svgPath)) {
  17. console.error(`SVG not found: ${svgPath}`);
  18. process.exit(1);
  19. }
  20. fs.mkdirSync(iconsDir, { recursive: true });
  21. const svgBuffer = fs.readFileSync(svgPath);
  22. // Generate standard icon sizes
  23. for (const size of iconSizes) {
  24. const outPath = path.join(iconsDir, `icon-${size}.png`);
  25. await sharp(svgBuffer)
  26. .resize(size, size)
  27. .png()
  28. .toFile(outPath);
  29. console.log(` ✓ icon-${size}.png (${size}x${size})`);
  30. }
  31. // Generate tray icons (smaller, may need simplification - use same source)
  32. for (const { name, size } of traySizes) {
  33. const outPath = path.join(iconsDir, name);
  34. await sharp(svgBuffer)
  35. .resize(size, size)
  36. .png()
  37. .toFile(outPath);
  38. console.log(` ✓ ${name} (${size}x${size})`);
  39. }
  40. // Generate logo
  41. const logoPath = path.join(iconsDir, logoSize.name);
  42. await sharp(svgBuffer)
  43. .resize(logoSize.size, logoSize.size)
  44. .png()
  45. .toFile(logoPath);
  46. console.log(` ✓ ${logoSize.name} (${logoSize.size}x${logoSize.size})`);
  47. console.log(`\nDone! All icons generated in ${iconsDir}`);
  48. }
  49. generate().catch(err => {
  50. console.error('Failed:', err);
  51. process.exit(1);
  52. });