Files
openagent/scripts/generate_ios_icons.js
2025-12-17 17:03:47 +00:00

149 lines
25 KiB
JavaScript
Executable File

#!/usr/bin/env node
/**
* Generate iOS app icons with brain icon from favicon.svg
* Replaces simple dot with brain icon using indigo color (#6366F1)
*/
const fs = require('fs');
const path = require('path');
// Brain SVG path from favicon.svg
const BRAIN_SVG_PATH = `M 833.053284 61.133301 C 802.360046 49.853394 770.200012 42.773315 737.506653 41.040039 C 718.750977 38.795044 699.547974 40.932495 680.860962 43.012329 L 679.65332 43.146729 C 659.773315 45.626709 639.919983 49.573364 620.880005 55.906616 C 599.039978 61.866699 578.720032 72.333374 558.733337 81.800049 C 555.479492 83.595947 552.106873 82.623047 548.736877 81.650879 C 547.453064 81.280518 546.169678 80.9104 544.893372 80.693359 C 531.746643 77.93335 518.333313 76.280029 504.986664 74.839966 C 489.52002 74.23999 474.026642 74.199951 458.573334 74.773315 C 429.279999 77.119995 400.82666 82.613281 373.720001 94.23999 C 363.973358 98.719971 353.880005 102.119995 344.493317 107.41333 C 334.213348 112.58667 324.666656 118.893311 315 125.106689 C 304.040009 132.146729 294.386658 140.680054 284.293335 148.866699 C 265.626678 165.893311 248.573318 184.533325 234.226669 205.359985 C 224.386658 218.453308 216.840012 232.719971 209.080002 247.093323 C 205.880005 252.773315 204.066666 259.599976 200.133347 264.76001 C 194.893326 269.34668 188.199997 272.440002 182.466675 276.426697 C 164.826675 288.573303 148.080002 302.426697 133.266663 317.919983 C 117.720001 333.146667 104.786659 351.47998 93.519997 370.026672 C 88.333336 379.666687 82.333336 389.080017 78.293335 399.226685 C 67.293335 423.986633 61.960003 452.06665 58.373333 478.786682 C 57.519894 489.517212 57.569618 500.34491 57.619102 511.120544 C 57.627602 512.971069 57.636089 514.820007 57.639999 516.666687 C 57.679996 534.133362 60.986668 551.226685 65.559998 568.026672 C 69.533333 586.440002 76.853333 603.693298 86.49334 619.840027 C 92.09333 628.906677 97.386665 638.986633 104.613335 646.706665 C 109.466667 652.013367 113.90667 657.840027 118.920006 663.106628 C 122.626671 666.973328 126.853333 670.226685 130.666672 674.013306 C 137.786667 681.17334 146.360001 687.160034 154.720001 692.786743 C 166.373337 700.626587 178.733337 707.573364 191.639999 713.119995 C 211.266663 722.266724 232.133347 729.160034 253.440002 733.119995 C 269.186676 735.82666 285.279999 738.773315 301.266663 739.026733 C 310.267151 740.034729 319.093048 739.995239 328.050476 739.9552 C 330.703888 739.943359 333.368866 739.931396 336.053314 739.946655 C 339.968658 740.031616 343.802826 739.591797 347.645477 739.15094 C 349.835388 738.89978 352.028015 738.648193 354.23999 738.493286 C 353.426666 756.160034 354.973358 773.76001 359.466675 790.880005 C 362.720001 801.23999 365.253326 811.693359 369.613312 821.680054 C 374.119995 833.093384 380.880005 842.959961 387.626678 853.106689 C 393.160004 860.733276 399.773315 867.626587 406.160004 874.533325 C 419 885.946655 431.600006 896.666626 447.253326 904.093384 C 480.880005 921.773315 519.266663 931.773376 557.333313 931.133301 C 559.271423 931.119385 561.211914 931.111938 563.153809 931.104431 C 572.367065 931.069031 581.611145 931.033508 590.773315 930.306641 C 617.960022 926.786743 646.706665 922.013306 672.253357 911.813354 C 672.41333 911.755615 672.572449 911.697754 672.731018 911.640015 C 674.515503 910.990417 676.226318 910.367676 678.17334 910.453369 C 680.293335 911.76001 682.159973 913.640015 683.986633 915.319946 C 690.200012 921.213257 697.333313 925.839966 703.360046 931.973328 C 709.600037 938.280029 716.666687 943.546631 723.320007 949.360046 C 727.813293 953.786682 732.293274 958.159973 737.34668 961.986633 C 746.200012 968.693359 753.733337 976.600037 762.333313 983.666687 C 768.17334 988.47998 773.253357 994.040039 778.959961 999.040039 C 784.146667 1003.639954 789.080017 1008.453369 793.840027 1013.493347 C 802.320007 1022.47998 811.013367 1030.920044 818.559998 1040.733276 C 824.360046 1047.640015 829.82666 1054.613403 834.34668 1062.453369 C 844.213318 1077.026733 852.546631 1092.706665 865.360046 1104.65332 C 883.533386 1121.119995 908.200012 1129.973267 932.706726 1125.76001 C 949.786682 1122.253296 966.266663 1112.866699 977.06665 1099.053345 C 986.373352 1086.440063 992.213318 1070.959961 993.786682 1055.386597 C 995.693359 1030.866699 989.919983 1008.213318 981.840027 985.333313 C 978.386658 974.146667 973.76001 963.47998 968.426697 953.080017 C 979.769348 955.250305 990.935852 955.05249 1002.328613 954.850586 C 1004.234314 954.816833 1006.146362 954.782959 1008.06665 954.76001 C 1017.746643 954.76001 1026.65332 952.853333 1036.213257 951.47998 C 1056.053345 947.853333 1075.280029 943.919983 1094.06665 936.426697 C 1103.053345 933.146667 1111.359985 928.599976 1120 924.546631 C 1136.733276 916.573364 1152.053345 905.506714 1165.880005 893.226685 C 1171.666626 887.453369 1176.906616 881.119995 1182.546631 875.200073 C 1204.52002 848.293335 1218.613403 814.640015 1224.93335 780.613403 C 1226.533325 773.106689 1228.17334 765.666626 1228.853394 758 C 1229.026733 755.746704 1229.786743 753.76001 1231.640015 752.359985 C 1238.41333 746.986694 1246.17334 742.973267 1252.920044 737.506714 C 1259.786743 732.013306 1266.613403 726.400024 1273.119995 720.493286 C 1286.026733 706.853394 1298.65332 693.133301 1307.613403 676.439941 C 1316.453369 662.399963 1322.186646 646.65332 1326.373413 630.679993 C 1334.453369 602.919983 1337.293335 573.399963 1334.146606 544.666687 C 1332.47998 514.013367 1323.719971 483.65332 1313.666626 454.773315 C 1307.133301 438.559998 1300.266724 422.679993 1291.733276 407.399963 C 1281.813354 391.119995 1272.546631 375.226685 1260.133301 360.559998 C 1256.040039 355.746643 1252.333374 350.600037 1248.079956 345.919983 C 1233.946655 331.373352 1219.959961 317.186646 1203.82666 304.786682 C 1200.559937 302.093323 1196.34668 300.320007 1195.986694 295.613342 C 1193.146606 280.373352 1188.386597 265.693359 1182.58667 251.333313 C 1180.280029 245.359985 1177.866699 239.453308 1174.853394 233.799988 C 1171.34668 227.17334 1168.733276 220.82666 1164.52002 214.773315 C 1158.026733 205.466675 1152.23999 196.333313 1144.866699 187.813354 C 1138.853394 180.466675 1132.026733 174.013306 1125.559937 167.080017 C 1112.253296 153.546631 1096.400024 142.293335 1080.546631 131.959961 C 1064.626587 122.06665 1047 113.893311 1029.17334 108.133301 C 1012.080017 103 994.293274 99.706665 976.546631 98.093384 C 971.264771 97.296387 965.828247 97.349609 960.425171 97.402466 C 958.053955 97.425659 955.689148 97.448853 953.34668 97.400024 C 944.269836 97.201782 935.153992 98.302002 926.085571 99.396362 C 921.127014 99.994873 916.182678 100.591553 911.266663 100.973389 C 902.93335 96.959961 895.426697 91.06665 887.253357 86.666626 C 869.919983 77.133301 851.906677 67.23999 833.053284 61.133301 Z M 1173.640015 776.906616 C 1166.319946 804.880005 1153.640015 834.106689 1131.946655 853.946655 C 1115.493286 870.280029 1094.06665 882.026733 1072.386597 889.82666 C 1051.306641 897.706665 1029.133301 902.306641 1006.706665 903.946655 L 1005.907532 903.960205 C 996.622803 904.11731 987.043457 904.279419 977.879883 902.866699 C 965.066589 901.440063 952.399902 899.599976 939.933289 896.200073 C 932.879883 894.58667 925.853271 891.65332 918.679932 890.920044 C 911.999939 891.053345 905.013306 893.466675 900.039978 898.040039 C 894.266602 904.053345 891.253296 912.293335 892.653259 920.640015 C 894.973267 931.840027 902.039978 939.373352 908.226563 948.466614 C 912.906616 955.65332 917.399902 963.506653 921.199951 971.200012 C 930.426636 991.026672 938.279968 1012.399963 941.933289 1034.013306 L 941.941528 1034.06958 C 943.059021 1041.66626 944.234802 1049.658691 942.146606 1057.200073 C 940.599976 1063.546631 936.386597 1069.906616 930.266602 1072.626587 C 925.493286 1075.026733 920.159912 1075.359985 914.946655 1074.493286 C 905.399902 1072.333374 897.919922 1065.160034 892.626587 1057.253296 C 884.466553 1044.82666 876.9599 1030.733276 867.266602 1018.799988 C 859.399902 1009.333313 851.826599 999.58667 843.493286 990.533386 C 825.839966 970.679993 805.479919 953.266663 785.266602 935.41333 C 774.173279 926.079956 763.679932 916.093384 752.54657 906.799927 C 745.199951 900.746704 739.586609 893.693359 731.173279 888.986694 C 731.266602 888.386597 731.373291 887.773315 731.466553 887.17334 C 749.479919 879.599976 766.866638 871.040039 784.239929 862.133301 C 795.71991 856.186646 807.519958 850.959961 818.839966 844.733276 C 836.613281 836.079956 854.653259 828.226685 873.30658 821.65332 C 894.999939 814.466675 917.346619 809.106689 939.853271 805.253296 C 974.119995 798 1009.146606 797.200073 1044.053345 795.559937 C 1054.746704 794.41333 1065.466675 795 1076.146606 793.82666 C 1096.306641 793.013306 1116.400024 790.319946 1136.186646 786.41333 C 1148.853394 783.920044 1161.093384 779.799927 1173.640015 776.906616 Z M 1025.746704 161.786621 C 1034.333374 165.17334 1042.546631 169.306702 1050.34668 174.266663 C 1072.693359 187.293335 1092.119995 205.706665 1108.52002 225.573303 C 1116.079956 236.133362 1124.880005 246.973328 1129.58667 258.973328 C 1135.013306 270.320007 1138.386597 282.039978 1142.440063 294.013306 C 1147.65332 310.293335 1150.093384 327.613342 1150.333374 344.679993 C 1151.23999 351.279968 1151.133301 356.720032 1150.253296 363.320007 C 1150.133301 375.119995 1148.17334 386.679993 1146.013306 398.253357 C 1139.866699 426.600037 1129.34668 453.506653 1112.746704 477.399963 C 1104.47998 490.093323 1094.920044 502.133362 1083.973267 512.640015 C 1077.640015 518.906677 1071.773315 525.213318 1064.76001 530.720032 C 1055.119995 538.293335 1046.386597 546.213318 1036.06665 552.82666 C 1024.426636 560.399963 1012.613281 568.026672 1000.213257 574.306702 C 991.359985 578.813293 982.919922 583.93335 973.71991 587.76001 C 950.266602 598.640015 926.106628 608.93335 901.30658 616.333313 C 872.346619 625.986633 843.079956 634.52002 813.359985 641.506653 C 787.533325 648.359985 761.559937 654.866638 735.599976 661.200012 C 724.919922 664.013367 714.386597 667.226685 703.919922 670.720032 C 652.466614 685.65332 602.426697 705.013306 555.06665 730.160034 C 546.746643 734.573364 537.58667 738.706665 529.720032 743.959961 C 524.506653 747.186646 521.613342 753.680054 520.693298 759.533325 C 520.293335 763.920044 519.853333 769.386597 522.026672 773.386597 C 525.146667 779.559937 530.52002 785.079956 537.093323 787.506714 C 545 790.453369 554.200012 789.386597 561.226685 784.693359 C 566.786682 781.06665 572.866638 778.52002 578.65332 775.306641 C 587.946655 769.986694 598.06665 766.493286 607.466675 761.359985 C 616.080017 756.613403 625.119934 753.200073 634.093262 749.280029 C 660.599976 737.880005 687.773315 728.680054 715.359985 720.293335 C 758.679932 706.839966 802.239929 697.533325 846.239929 686.040039 C 861.733276 681.560059 877.359985 677.599976 892.759949 672.773315 C 910.626587 667.200012 929.239929 661.893372 946.54657 654.58667 C 962.89325 648.58667 979.293213 642.119995 994.946655 634.493347 C 1007.066589 628.906677 1018.973267 623.106628 1030.573364 616.506653 C 1044.626587 608.013367 1058.880005 600.053345 1072.040039 590.159973 C 1084.23999 582.053345 1095.440063 572.706665 1106.493286 563.133362 C 1122.986694 547.946655 1137.546631 530.986633 1150.93335 513.039978 C 1154.813354 507.960022 1157.866699 502.320007 1161.466675 497.013367 C 1175.866699 475.039978 1185.053345 451.093323 1192.133301 425.906677 C 1196.333374 408.266663 1199.013306 390.466675 1201.213257 372.493347 C 1206.359985 374.946655 1208.773315 379.93335 1212.546631 384.200012 C 1219.813354 392.626648 1226.853394 401.17334 1232.813354 410.600037 C 1240.200073 421 1246.880005 431.82666 1253.026733 442.986633 C 1257.386597 453.159973 1262.06665 463.186707 1266.306641 473.399963 C 1269.533325 481.906677 1272.52002 490.666687 1275.026733 499.399963 C 1278.893311 516.106628 1281.746704 533 1283.293335 550.080017 C 1283.640015 560.58667 1283.786743 571.146667 1283.386597 581.65332 C 1282.040039 599.119995 1278.813354 616.333313 1272.546631 632.746643 C 1267.680054 644.546692 1260.733276 655.573303 1253.626587 666.146667 C 1245.226685 678.506714 1234.253296 687.58667 1222.41333 696.47998 C 1208.106689 706.719971 1192.359985 715.093384 1176.093384 721.733276 C 1147.813354 732.799927 1118.559937 738.533325 1088.493286 741.986694 C 1081.680054 742.946655 1074.82666 742.333374 1068 743.426636 C 1061.306641 744.373413 1054.640015 743.706665 1047.973267 744.58667 C 1043.036499 745.3125 1037.975952 745.341125 1032.910278 745.369812 C 1028.576782 745.394348 1024.239624 745.418945 1019.973267 745.880005 C 1010.346619 747.160034 1000.653259 746.146606 990.999939 747.58667 C 979.333252 747.973267 967.933289 750.373413 956.279968 750.959961 C 931.053223 754.400024 905.999939 758.959961 881.466553 765.853394 C 868.026611 769.253296 855.346619 774.386597 842.213257 778.65332 C 827.053223 784.053345 812.533325 790.640015 798.026611 797.546631 C 787.213257 803.306641 775.973267 808.133301 765.226563 814.026733 C 746.199951 823.82666 727.173279 833.746704 707.706665 842.666626 C 692.159912 849.559937 676.533264 856.253296 660.639954 862.306641 C 645.693237 867.719971 630.399902 871.693359 614.919983 875.17334 C 604.52002 877.613403 593.559998 878.52002 582.906677 879.839966 C 579.597107 879.876709 576.355591 880.1521 573.135681 880.425537 C 567.002563 880.946533 560.948303 881.460754 554.65332 880.306641 C 536.440002 879.959961 518.373352 876.93335 501.093353 871.093384 C 483.41333 865.813354 466.52002 857.426636 451.800018 846.293335 C 441.426666 837.866699 431.266693 827.773315 424.733307 816.013306 C 412.82666 796.400024 405.546661 773.026733 405.959991 750 C 405.853363 737.119995 408.973358 724.093384 412.640015 711.813354 C 417.880005 698.160034 425.493317 685.226685 434.399994 673.640015 C 439.186676 667.41333 445.146637 663.52002 450.666656 657.986633 C 460.426666 648.440002 472.359985 641.41333 483.82666 634 C 498.119995 624.706665 513.17334 617.946655 528.386658 610.453308 C 561.58667 595.58667 596.333313 583.666687 631.399902 574.080017 C 638.986572 572.026672 646.279907 569.226685 653.959961 567.506653 C 678.346619 561.746643 702.799927 556.253357 727.333252 551.17334 C 758.933289 543.786682 789.573242 538.453308 820.466553 529.640015 C 843.666626 523.493347 866.71991 516.986633 889.373291 509.039978 C 905.733276 502.306702 922.479919 496.960022 938.333252 488.960022 C 953.226563 481.133362 968.919922 473.426697 982.13324 462.82666 C 991.30658 455.773315 1000.13324 449.146667 1007.319946 439.973328 C 1007.934326 439.232361 1008.553345 438.495544 1009.171204 437.76001 C 1015.713867 429.971985 1022.136475 422.326782 1021.746582 411.386658 C 1021.906616 397.093323 1008.559937 385.47998 994.639893 386.320007 C 989.039978 386.279968 983.773315 388.466675 980.053223 392.666687 C 971.866638 401.506653 964.30658 410.52002 955.13324 418.466675 C 948.626587 423.52002 941.626587 428.306702 934.626587 432.640015 C 901.439941 451.693298 863.373291 464.359985 826.639893 474.65332 C 799.626587 482.600037 772.119995 488.986633 744.639893 495.159973 C 727.693298 498.973328 710.653259 502.159973 693.919922 506.853333 C 693.448486 497.209045 694.28479 487.753784 695.126892 478.233276 C 695.38031 475.368225 695.634277 472.497192 695.853271 469.613342 C 698.026611 449.359985 701.239929 429.253357 705.333252 409.293335 C 709.506592 391.506653 713.826599 373.253357 720.226563 356.146667 C 729.533325 326.253357 744.54657 297.493347 760.54657 270.65332 C 770.093262 254 782.906616 238.626648 795.493286 224.159973 C 806.413269 213.106689 817.506592 202.280029 830.079956 193.426697 C 842.039978 183.679993 855.839966 175.76001 869.493286 168.640015 C 884.093262 160.626709 900.653259 156.186646 916.786621 152.41333 C 927.053223 149.906616 937.439941 149.133301 947.933289 148.199951 C 974.613281 147.333374 1000.759949 152.640015 1025.746704 161.786621 Z M 753.626648 94.41333 C 778.080017 96.920044 801.453308 103.76001 824.239929 112.800049 C 831.626648 115.839966 840.559998 118.373291 846.613342 123.693359 C 834.533386 129.400024 822.773376 135.293335 811.9599 143.213379 C 800.213318 150.400024 789.9599 159.333374 779.386658 168.053345 C 769.479919 176.76001 760.506653 186.533325 751.360046 196 C 745.986633 202.640015 740.559998 209.253357 735.213318 215.919983 C 728.653259 223.93335 723.746643 232.840027 717.853333 241.333313 C 709.333313 254.786682 701.986633 269.026672 694.559998 283.106689 C 685.320007 303.146667 676.693298 323.23999 670.093323 344.333313 C 665.600037 356.626648 662.159973 369.146667 659.173279 381.880005 C 650.906677 413.23999 646.253357 445.640015 644.053284 477.960022 C 643.080017 485.093323 643.626648 492.253357 642.626648 499.373352 C 641.786682 504.893372 642.399963 510.546692 641.533264 516.039978 C 641.066589 518.893372 636.666687 519.119995 634.466614 519.973328 C 618.106628 524.253357 601.986633 529.226685 585.76001 533.906677 C 566.279968 539.866638 547.226685 547.65332 528.146667 554.773315 C 510.680023 561.466675 494.093353 569.840027 477.426666 578.279968 C 460.65332 587.47998 444.160004 596.746643 429.279999 608.65332 C 416.399994 617.666687 404.973358 628.82666 394.626678 640.626648 C 388.986664 646.973328 384.893341 653.853333 380.226685 660.880005 C 377.733307 664.720032 375.146637 668.293335 373.253326 672.47998 C 371.47998 676.199951 370.23999 680.253296 368.226685 683.839966 C 367.626678 685.040039 366.65332 685.813354 365.306671 686.17334 C 359.013336 687.799927 352.839996 687.76001 346.453339 688.306641 C 339.775208 689.372192 333.2724 689.360962 326.627777 689.349426 C 324.874786 689.346375 323.111908 689.343323 321.333344 689.359985 C 313.714935 689.482178 306.079407 688.65625 298.456665 687.831665 C 294.432739 687.396362 290.412384 686.961487 286.399994 686.666626 C 270.853333 685.47998 256.653351 681.226685 241.719986 677.160034 C 233.213333 674.573364 224.800003 671.466675 216.666672 667.893372 C 202.919998 661.453308 188.986679 654.359985 176.746658 645.306702 C 168.720001 638.773315 160.653336 633.466675 153.639999 625.706665 C 149.266663 620.733337 144.973343 615.640015 141.039993 610.306702 C 122.68 586.159973 112.813332 555.546692 108.880005 525.746643 C 108.040001 512.546692 108.200005 499.17334 108.773338 485.960022 C 110.693329 467.960022 113.799995 450.453308 119.826668 433.333313 C 123.839996 421.82666 129.426666 410.733337 135.160004 399.986633 C 141.026657 388.640015 148.666672 378.013367 156.733337 368.119995 C 175.693344 344.679993 199.039993 326.106689 224.666672 310.426697 C 241.986679 301.186646 260.079987 292.746643 278.920013 287.133362 C 294.986664 282.666687 311.440002 279.06665 328.026672 277.280029 C 339.833282 275.608704 352.067108 275.768555 364.129333 275.926147 C 366.982941 275.963379 369.826935 276.000549 372.65332 276.013306 C 402.34668 278.280029 431.680023 283.76001 459.746674 293.893311 C 476.47998 300.733337 493.186676 308.106689 508.93335 317 C 520 324.026672 531.133362 331.053345 541.559998 338.986694 C 548.666687 344.34668 557.786682 346.746643 566.47998 344.200012 C 576.053345 341.986633 582.559998 332.640015 584.133362 323.386658 C 585.813293 313.706665 580.76001 304 573.466675 297.866638 C 555.080017 283.546692 535.159973 271.640015 514.47998 260.946655 C 504.266693 255.58667 493.399994 252 482.866669 247.266663 C 452.47998 235.280029 420.773315 228.906677 388.293335 226.146667 C 380.65332 224.960022 372.986664 225.426697 365.333344 224.52002 C 361.738861 224.181946 358.302399 224.471008 354.830963 224.762939 C 352.688751 224.943115 350.533478 225.124329 348.319977 225.159973 C 324.333344 225.58667 300.480011 228.919983 277.23999 234.813354 C 280.959991 225.840027 289.399994 218.333313 295.546661 210.840027 C 307.546661 197.82666 320 185.52002 334.253326 175.013306 C 341.053314 170.013306 347.386688 164.746643 354.76001 160.573364 C 371.959991 150.546631 389.026642 141.319946 408.333344 135.920044 C 424.706665 130.560059 441.58667 127.706665 458.613312 125.41333 C 469.266693 124.866699 479.986664 124.959961 490.65332 125.160034 C 502.269562 125.074829 513.970825 127.22583 525.501526 129.345581 C 528.408997 129.880127 531.30542 130.412598 534.186707 130.906616 C 537.380615 131.438965 540.638855 132.248291 543.917358 133.062744 C 550.657288 134.736938 557.483215 136.432495 564.013367 135.786621 C 569.693298 135.119995 575.186707 131.493286 580.213318 128.93335 C 590.279968 123.813354 600.106628 118.373291 610.426697 113.893311 C 637.586609 102.893311 664.986633 94.640015 694.453308 93.160034 C 704.952881 91.764038 715.64856 91.957642 726.350464 92.151367 L 726.352722 92.151367 C 727.812988 92.177856 729.273376 92.204346 730.733337 92.226685 C 738.360046 93.160034 746.026672 93.280029 753.626648 94.41333 Z`;
// Colors from design system
const INDIGO_COLOR = '#6366F1';
const DARK_BACKGROUND = '#121214'; // Primary dark background
// Icon sizes needed (in pixels)
const ICON_SIZES = [20, 29, 40, 58, 60, 76, 80, 87, 120, 152, 167, 180, 1024];
// Original SVG viewBox
const SVG_VIEWBOX = '0 0 1568 1186';
function createBrainSvg(size) {
// Calculate scale to fit brain in icon with padding (80% of size)
const padding = size * 0.1;
const contentSize = size - (padding * 2);
// Scale factor to fit brain in content area
const scaleX = contentSize / 1568;
const scaleY = contentSize / 1186;
const scale = Math.min(scaleX, scaleY);
// Center the brain with slight rightward shift for visual centering
const scaledWidth = 1568 * scale;
const scaledHeight = 1186 * scale;
const offsetX = (size - scaledWidth) / 2 + (size * 0.03); // Shift 3% right for visual centering
const offsetY = (size - scaledHeight) / 2;
return `<?xml version="1.0" encoding="UTF-8"?>
<svg width="${size}" height="${size}" viewBox="0 0 ${size} ${size}" xmlns="http://www.w3.org/2000/svg">
<rect width="${size}" height="${size}" fill="${DARK_BACKGROUND}"/>
<g transform="translate(${offsetX}, ${offsetY}) scale(${scale})">
<path fill="${INDIGO_COLOR}" stroke="none" d="${BRAIN_SVG_PATH}"/>
</g>
</svg>`;
}
async function generateIcon(size, outputPath) {
console.log(`Generating icon ${size}x${size}...`);
// Create SVG
const svgContent = createBrainSvg(size);
try {
// Try to use sharp if available (better quality)
const sharp = require('sharp');
const buffer = Buffer.from(svgContent);
await sharp(buffer)
.resize(size, size)
.png()
.toFile(outputPath);
console.log(` ✓ Saved to ${outputPath}`);
} catch (err) {
// Fallback: try svg2img or just write SVG and let user convert manually
console.log(` ⚠ Could not use sharp, trying alternative...`);
try {
const { svg2img } = require('svg2img');
await new Promise((resolve, reject) => {
svg2img(svgContent, { width: size, height: size }, (err, buffer) => {
if (err) reject(err);
else {
fs.writeFileSync(outputPath, buffer);
resolve();
}
});
});
console.log(` ✓ Saved to ${outputPath}`);
} catch (err2) {
// Last resort: write SVG file
const svgPath = outputPath.replace('.png', '.svg');
fs.writeFileSync(svgPath, svgContent);
console.log(` ⚠ Could not generate PNG, saved SVG to ${svgPath}`);
console.log(` Install sharp: npm install -g sharp`);
}
}
}
async function generateIconsForApp(iconDir, filenameMap, sizes) {
if (!fs.existsSync(iconDir)) {
console.log(`⚠ Icon directory not found: ${iconDir}`);
return;
}
console.log(`\nGenerating icons in: ${iconDir}`);
// Generate all icon sizes
for (const size of sizes) {
const filename = filenameMap[size];
if (!filename) {
console.log(`Warning: No filename mapping for size ${size}`);
continue;
}
const outputPath = path.join(iconDir, filename);
await generateIcon(size, outputPath);
}
}
async function main() {
const scriptDir = __dirname;
const projectRoot = path.resolve(scriptDir, '..');
console.log(`Generating iOS app icons`);
console.log(`Background: ${DARK_BACKGROUND}, Brain: ${INDIGO_COLOR}\n`);
// OpenAgentDashboard icons
const dashboardIconDir = path.join(projectRoot, 'ios_dashboard', 'OpenAgentDashboard', 'Assets.xcassets', 'AppIcon.appiconset');
const dashboardFilenameMap = {
20: 'icon-20.png',
29: 'icon-29.png',
40: 'icon-40.png',
58: 'icon-58.png',
60: 'icon-60.png',
76: 'icon-76.png',
80: 'icon-80.png',
87: 'icon-87.png',
120: 'icon-120.png',
152: 'icon-152.png',
167: 'icon-167.png',
180: 'icon-180.png',
1024: 'icon-1024.png',
};
await generateIconsForApp(dashboardIconDir, dashboardFilenameMap, ICON_SIZES);
// Calorily icons (only 1024x1024)
const calorilyIconDir = path.join(projectRoot, 'calorily', 'Calorily', 'Assets.xcassets', 'AppIcon.appiconset');
const calorilyFilenameMap = {
1024: 'icon_1024.png',
};
await generateIconsForApp(calorilyIconDir, calorilyFilenameMap, [1024]);
console.log('\n✓ All icons generated successfully!');
}
main().catch(err => {
console.error('Error:', err);
process.exit(1);
});