{"id":17903,"date":"2025-10-27T10:55:25","date_gmt":"2025-10-27T09:55:25","guid":{"rendered":"https:\/\/www.centigrade.de\/?post_type=blog&#038;p=17903"},"modified":"2025-11-04T10:31:48","modified_gmt":"2025-11-04T09:31:48","slug":"icon-libraries-in-the-age-of-ai-do-we-still-need-custom-icons","status":"publish","type":"blog","link":"https:\/\/www.centigrade.de\/en\/blog\/icon-libraries-in-the-age-of-ai-do-we-still-need-custom-icons\/","title":{"rendered":"Icon libraries in the age of AI: Do we still need custom icons?"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-17882\" src=\"https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/0-visual-1500x844.jpg\" alt=\"Illustration AI Produktionstra\u00dfe\" width=\"1500\" height=\"844\" srcset=\"https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/0-visual-1500x844.jpg 1500w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/0-visual-300x169.jpg 300w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/0-visual-768x432.jpg 768w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/0-visual-1536x864.jpg 1536w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/0-visual-2048x1152.jpg 2048w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/0-visual-24x13.jpg 24w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/0-visual-36x20.jpg 36w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/0-visual-48x27.jpg 48w\" sizes=\"auto, (max-width: 1500px) 100vw, 1500px\" \/><\/p>\n<p>In this era of powerful AI image generation and freely available icon libraries, the question quickly arises: \u201cWhy bother designing icons \u2018by hand\u2019 at all?\u201d For many, resorting to existing solutions may seem like the easiest and fastest way. But in reality, it has been proven time and again that \u201cout-of-the-box\u201d solutions are not enough\u2014especially when requirements become more complex and individualized. This was exactly the case for us when we wanted to translate our Centigrade service icons into automatically generatable 3D visuals. It was a project that simply could not be solved with off-the-shelf solutions.<\/p>\n<p>In this blog post, you can find out how I approached this design process, why we deliberately set creative limits, and what a Python script has to do with it all.<!--more--><\/p>\n<h2>Initial problem<\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-17892\" src=\"https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/1-image-1500x413.png\" alt=\"Centigrade Service Icons\" width=\"1500\" height=\"413\" srcset=\"https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/1-image-1500x413.png 1500w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/1-image-300x83.png 300w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/1-image-768x211.png 768w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/1-image-1536x423.png 1536w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/1-image-2048x564.png 2048w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/1-image-24x7.png 24w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/1-image-36x10.png 36w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/1-image-48x13.png 48w\" sizes=\"auto, (max-width: 1500px) 100vw, 1500px\" \/><\/p>\n<p>Centigrade offers a wide range of services\u2014and our website already features corresponding icons that visually illustrate each of our services, from user research and UX &amp; UI design to AI automation. In the future, there will be separate landing pages for each service, which will allow users to interactively experience these diverse services. These pages will not only provide information, but also offer playful experiences in a 3D world. So you can look forward to it! My part in this is to design the existing service icons in such a way that they can be modeled into interactive 3D visuals \u2013 as animated conveyor belts and production stations that transform customer inquiries into digital experiences.<\/p>\n<p>The respective 3D visuals should not be redesigned each time, but rather generated automatically from predefined segments and stations.<\/p>\n<p>That was precisely the initial question in my design process: \u201cHow should icons be structured so that they contain enough detail to be recognizable and distinguishable, but are also simple enough to serve as a blueprint for the 3D visuals?\u201d The icons had to follow a logic of reusable segments and also comply with formal design rules. As is so often the case, the motto was: \u201c<a href=\"https:\/\/www.centigrade.de\/en\/blog\/form-follows-function-an-unclear-design-principle\/\">Form follows function.<\/a>\u201d<\/p>\n<p>Since each of our service icons consists of a single line, and this line will later become a conveyor belt, we had to take the space for the stations into account in the design. To make this work, we had to limit the number of angles and create enough space along the lines to be able to place the stations neatly.<\/p>\n<h2><strong> Test setup<\/strong><\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-17894\" src=\"https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/2-image-1500x533.png\" alt=\"Centigrade Service Icons evolution\" width=\"1500\" height=\"533\" srcset=\"https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/2-image-1500x533.png 1500w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/2-image-300x107.png 300w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/2-image-768x273.png 768w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/2-image-1536x546.png 1536w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/2-image-2048x728.png 2048w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/2-image-24x9.png 24w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/2-image-36x13.png 36w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/2-image-48x17.png 48w\" sizes=\"auto, (max-width: 1500px) 100vw, 1500px\" \/><\/p>\n<p><strong>What i knew:<\/strong><br \/>\nThe icons should consist of a single, open line as described \u2013 with a clearly recognizable start and end point.<br \/>\nIn order to use the icons later as a basis for the 3D visuals, I had to export a continuous vector path as SVG. I was able to work with strokes in Figma.<br \/>\nIcons that were too complex had to be significantly reduced and abstracted to make room for the respective stations within the icon.<br \/>\n90\u00b0 angles work well \u2013 horizontal and vertical lines allow enough space for the stations.<br \/>\nAt the same time, visual curve transitions ensure that the later animated virtual conveyor belt maintains a consistent width.<\/p>\n<p><strong>What I needed to find out:<\/strong><\/p>\n<p>Which angles other than 90\u00b0 can be used effectively\u2014e.g., 30\u00b0, 45\u00b0, 60\u00b0?<br \/>\nWhat is the best way to simulate the curve segments technically in order to achieve a harmonious connection between the 2D icons and the 3D visualization? Are the stroke settings in Figma sufficient for this, or are manual adjustments necessary?<\/p>\n<p><strong>My approach<\/strong><\/p>\n<p>To find out which angles work best, I created different variants in Figma. First, I deactivated the curve and radius settings in order to work with clear edges. This showed that, in addition to the classic 90\u00b0 angles, 135\u00b0 angles are also a good compromise: on the one hand, they create sufficient freedom in the design and, at the same time, allow as much space as possible to be used within the icons thanks to the open angle.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-17896 size-large\" src=\"https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/3-image-1500x423.png\" alt=\"Figma Icon angles\" width=\"1500\" height=\"423\" srcset=\"https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/3-image-1500x423.png 1500w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/3-image-300x85.png 300w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/3-image-768x216.png 768w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/3-image-1536x433.png 1536w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/3-image-2048x577.png 2048w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/3-image-24x7.png 24w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/3-image-36x10.png 36w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/3-image-48x14.png 48w\" sizes=\"auto, (max-width: 1500px) 100vw, 1500px\" \/><\/p>\n<p>I deliberately limited myself to only two angles in the line design \u2013 90\u00b0 and 135\u00b0. This design limitation creates clear parameters and ensures an open, recognizable design language. However, I had to rethink some existing symbols because they no longer functioned as usual in this reduced language. A good example is the icon for \u201cusability testing\u201d: our classic magnifying glass looked more like a stop sign due to the flat angles. So I extracted the original core element \u2013 the video camera for recording usability tests \u2013 and reinterpreted it as an overarching symbol. I applied the same principle to the game controller (for the \u201cGamification\u201d service): the formal restrictions made it much less recognizable, which is why I initially opted for the \u2018trophy\u2019 as a motif, but ultimately chose the \u201cjoystick\u201d to convey the message behind the icon more clearly.<\/p>\n<h2>Automatically generate radiuses<\/h2>\n<p>Figma is well suited for designing icons because it is vector-based, allows for easy scaling, and facilitates SVG export. Practical functions such as snap-to-pixel and grid help you work with pixel precision. When working with contours, you can specify whether corners and line ends are displayed sharply or rounded. I took a closer look at these settings because in 3D visualization, all corner points are replaced by curves, which results in softer curves.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-17886\" src=\"https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/4-image-1500x423.png\" alt=\"Figma Icon radius\" width=\"1500\" height=\"423\" srcset=\"https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/4-image-1500x423.png 1500w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/4-image-300x85.png 300w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/4-image-768x216.png 768w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/4-image-1536x433.png 1536w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/4-image-2048x577.png 2048w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/4-image-24x7.png 24w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/4-image-36x10.png 36w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/4-image-48x14.png 48w\" sizes=\"auto, (max-width: 1500px) 100vw, 1500px\" \/><\/p>\n<p>My conclusion: The radius settings in Figma are limited\u2014especially when working with pixel precision. Although the outer radius is always displayed, the inner radius remains sharp up to a value of 1.5. Only at higher values does a slight rounding appear at the inner corners, but this would not correspond to the look of a conveyor belt.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-17888\" src=\"https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/5-image-1500x423.png\" alt=\"Figma Icon vector path\" width=\"1500\" height=\"423\" srcset=\"https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/5-image-1500x423.png 1500w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/5-image-300x85.png 300w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/5-image-768x216.png 768w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/5-image-1536x433.png 1536w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/5-image-2048x577.png 2048w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/5-image-24x7.png 24w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/5-image-36x10.png 36w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/5-image-48x14.png 48w\" sizes=\"auto, (max-width: 1500px) 100vw, 1500px\" \/><\/p>\n<p>A seemingly obvious solution would have been to convert all contours into outlines and draw the inner radius manually. However, from the outset, a 100% automated solution was preferred\u2014ideally without sacrificing the stroke structure of the icon. All that was needed was to turn one corner point into two points connected by a B\u00e9zier curve. Of course, this conversion had to be done equally for each corner. The logical consequence: we wrote a script that performs exactly this task.<\/p>\n<p>I used <a href=\"https:\/\/www.drawbot.com\/\" target=\"_blank\" rel=\"noopener\">DrawBot<\/a>, a free app that lets you create two-dimensional graphics using simple Python scripts, to automatically draw the icon coordinates. I replaced each existing single corner point with two new points using a corresponding function and then connected them with a Bezier curve that creates the radius. This allows me to adjust the distance between the points to change the curvature while keeping the line thickness constant. DrawBot shows me the result immediately, so I can visually adjust the radius to match the 3D visual.<\/p>\n<h2>Automation of icon creation<\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-17890\" src=\"https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/6-image-1500x474.png\" alt=\"Figma icon automation python n8n\" width=\"1500\" height=\"474\" srcset=\"https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/6-image-1500x474.png 1500w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/6-image-300x95.png 300w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/6-image-768x242.png 768w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/6-image-1536x485.png 1536w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/6-image-2048x647.png 2048w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/6-image-24x8.png 24w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/6-image-36x11.png 36w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/6-image-48x15.png 48w\" sizes=\"auto, (max-width: 1500px) 100vw, 1500px\" \/><\/p>\n<p>To keep the icon creation process streamlined in the future, we have decided to use a workflow automation engine to run the Python script for automatically generating the final SVG.<\/p>\n<p>Designers should still be able to design new icons in Figma, while the exact radii are generated automatically \u2013 similar to the exact curve segments in the 3D conveyor belt. The icon created in Figma serves as the basis for both processes.<\/p>\n<h2>Icon font with Markdown feature<\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-17911\" src=\"https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/icon-animation.webp\" alt=\"icon animation\" width=\"800\" height=\"173\" srcset=\"https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/icon-animation.webp 800w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/icon-animation-300x65.webp 300w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/icon-animation-768x166.webp 768w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/icon-animation-24x5.webp 24w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/icon-animation-36x8.webp 36w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/icon-animation-48x10.webp 48w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/p>\n<p>In addition to using the icons as strokes in Figma files, the icons are also available as a standalone font. Smart OpenType features allow the icons to be used in text: when you enter the keyword or icon name in Markdown style between two colons, it is automatically replaced by the corresponding symbol \u2013 wherever basic ligatures are supported (e.g., in Figma, InDesign, or Word). Alternatively, the symbols can also be accessed via their Unicode value.<\/p>\n<p>The icons are designed in different stroke weights and can be interpolated variably. This allows them to be adjusted from light to bold using a slider and the stroke weight of the icons to be dynamically adjusted, for example for CSS hover animations.<\/p>\n<h2>Premiere of our toolbox landing page<\/h2>\n<p>To kick things off, we had the opportunity to give a presentation at Bosch and showcase our tool with its new icons and 3D visuals for the first time. For the demonstration, we developed our own GOMS analyzer, which can be used to evaluate current screen designs based on a defined task description. A GOMS analysis allows us to predict how long an experienced user will need to complete a given task in a user interface.<\/p>\n<div style=\"padding: 0 0 0 0; position: relative;\"><div class=\"MediaEmbedContainer\"><iframe style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\" title=\"Bosch - CPT\" src=\"https:\/\/player.vimeo.com\/video\/1129833610?h=1ef5d36a08&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479\" frameborder=\"0\"><\/iframe><\/div><\/div>\n<p><script src=\"https:\/\/player.vimeo.com\/api\/player.js\"><\/script><br \/>\nThe screens are first exported as PDF files and uploaded to the toolbox. Before the analysis, the system asks the user for the goal \u2013 for example, a user story. It then automatically processes the data and creates a PDF report in which all recognized UI elements are broken down into individual components and the estimated interaction time per element and the total duration of the interactions are calculated.<\/p>\n<p>The calculation is based on the Key-Stroke Level Model (KLM): Each interaction is assigned a heuristic time value (e.g., pressing or releasing a mouse button takes 100 ms) and then added to a total time.<\/p>\n<h2>Conclusion<\/h2>\n<p>So why design your own icons \u201cby hand\u201d instead of generating them with AI? Because individual problems require tailor-made solutions\u2014especially when there are strict specifications and consistent application of formal rules. Pre-made designs quickly reach their limits here. Those who design icons themselves create consistent, recognizable, and distinctive designs, thereby making an essential contribution to a stronger brand identity and better UX. Mind you, this does not mean that designers do not have to deal with the topics of automation and generative AI \u2013 on the contrary! Only when you combine both skills, i.e., visual aesthetic sense and technical understanding, can you maintain a good balance between quality and effort in today&#8217;s world.<\/p>\n<p>As a visual designer, I find it extremely exciting to integrate design and function so closely\u2014and to see how a two-dimensional icon can become a vibrant 3D world that not only looks great but also creates real added value for users. The potential of icons is far from exhausted and, thanks to generative AI and workflow engine automation, offers scope for new visual innovations.<\/p>\n","protected":false},"author":84,"featured_media":0,"template":"","tags":[840,20,983],"class_list":["post-17903","blog","type-blog","status-publish","hentry","tag-ai","tag-icon-design","tag-ki-2"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.centigrade.de\/en\/wp-json\/wp\/v2\/blog\/17903","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.centigrade.de\/en\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.centigrade.de\/en\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.centigrade.de\/en\/wp-json\/wp\/v2\/users\/84"}],"version-history":[{"count":8,"href":"https:\/\/www.centigrade.de\/en\/wp-json\/wp\/v2\/blog\/17903\/revisions"}],"predecessor-version":[{"id":17924,"href":"https:\/\/www.centigrade.de\/en\/wp-json\/wp\/v2\/blog\/17903\/revisions\/17924"}],"wp:attachment":[{"href":"https:\/\/www.centigrade.de\/en\/wp-json\/wp\/v2\/media?parent=17903"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.centigrade.de\/en\/wp-json\/wp\/v2\/tags?post=17903"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}