Home Assistant Brands
\nThis repository holds the icons and logos for all the brands Home Assistant\nsupports.
\nThis repository is used to generate a static website, serving these images\nfor use in our Home Assistant projects. The goal is to have a centralized\nrepository of brand images.
\nInner workings
\nThis repository provides two main folders to store images in:
\n- \n
core_integrations: Contains images for integrations bundled with the\nHome Assistant Core. \ncustom_integrations: Contains images for custom integrations\n(custom components). \n
Each of these two main folders contain domain folders. Each domain folder is\nnamed to the integration domain and must match the domain set in the\nintegration manifest.json file.
A domain folder can contain four files:
\n- \n
icon.png: A square avatar-like icon, representing the brand or product for that domain. \nlogo.png: The logo of the brand or product for that domain. \nicon@2x.png: hDPI version oficon.png\nlogo@2x.png: hDPI version oflogo.png\n
Those images are served in the following format:
\n- \n
https://brands.home-assistant.io/[domain]/icon.png\nhttps://brands.home-assistant.io/[domain]/logo.png\nhttps://brands.home-assistant.io/[domain]/icon@2x.png\nhttps://brands.home-assistant.io/[domain]/logo@2x.png\nhttps://brands.home-assistant.io/_/[domain]/icon.png\nhttps://brands.home-assistant.io/_/[domain]/logo.png\nhttps://brands.home-assistant.io/_/[domain]/icon@2x.png\nhttps://brands.home-assistant.io/_/[domain]/logo@2x.png\n
Missing image handling
\nThe website can service images with and without a fallback to a placeholder\nimage.
\nWithout placeholder fallback
\nThis method uses the plain URLs, WITHOUT the /_/ in the URL path.\nA missing image will result in a 404 being served.
For example: <https://brands.home-assistant.io/[domain]/icon.png>
- \n
- If a domain is missing the
icon.pngfile, 404 will be served \n - If a domain is missing the
logo.pngfile, theicon.pngis served instead (if available). \n - If a domain is missing the
icon@2x.pngfile, theicon.pngis served instead (if available). \n - If a domain is missing the
logo@2x.pngfile:\n- \n
- the
icon@2x.pngis served if available andlogo.pngis missing \n - the
logo.pngis served instead (if available). \n
\n - the
- If a image optimised for dark themes (image is prefixed with 'dark_') is missing, it's non-prefixed match will be served instead (if available). \n
With placeholder fallback
\nThis method uses the plain URLs, WITH the /_/ in the URL path.\nA missing image will result in placeholder image being served telling the logo/icon is missing.\nThis also applies to domains, in case the integration domain is missing.
For example: <https://brands.home-assistant.io/_/[domain]/icon.png>
Caching
\nAll icons and logos are cached by browsers for 7 days, so additions and changes may take time to reach all users. This gives users the full benefits of local caching with minimal revalidation, and protects against missing content during an internet outage.
\nImages are simultaneously cached by Cloudflare for 24 hours. This allows changes to begin being distributed to users relatively quickly without losing the CDN benefits. It also guarantees a simple refresh (F5) will bring content no more than 1 day old.
\nThe Cloudflare cache is also fully flushed in each major version of Home Assistant Core.
\nImage specification
\nAll images must have the following requirements:
\n- \n
- The filetype of all images must be PNG. \n
- They should be properly compressed and optimized (lossless is preferred) for use on the web. \n
- Interlaced is preferred (also known as progressive). \n
- Images with transparency is preferred. \n
- If multiple images are available, the ones optimized for a white background are preferred.\n
- \n
- Images optimized for a dark background can be prefixed with
dark_\n
\n - Images optimized for a dark background can be prefixed with
- The image should be trimmed, so it contains the minimum amount of empty space on the edges.\nThis includes things like white/black/any color borders or transparent spacing around the actual\nsubject in the image. \n
- Custom integrations must not use Home Assistant branded images, as this might confuse the end-user into thinking that the integration is an internal/official integration. \n
Icon image requirements
\nAdditional to the general image requirements listed above, for the icon image,\nthe following requirements are applied as well:
\n- \n
- Aspect ratio needs to be 1:1 (square). \n
- Icon size must be 256x256 pixels, for the hDPI this is 512x512 pixels. \n
- The maximum icon pixel size is, of course, preferred. \n
Logo image requirements
\nAdditional to the general image requirements listed, for the logo image,\nthe following requirements are applied as well:
\n- \n
- A landscape image is preferred. \n
- Aspect ratio should respect the logo of the brand. \n
- The shortest side of the image must be at least 128 pixels, 256 pixels for the hDPI version. \n
- The shortest side of the image must be no bigger than 256 pixels, 512 pixels for the hDPI version. \n
- The maximum pixel size for the shortest side of the images is, of course, preferred. \n
Using the same image for logo & icon
\nIf the brand uses the same image for the logo and icon (e.g., if the logo has a square aspect ratio),\nonly add the icon images. The icon will be used as a fallback for the logo.
\nUsing the same logo & icon for different brands
\nTo keep the size of this repository as efficient as possible,\nsymlinking domain folders for the same icon/logos is allowed for core integrations. The deployment\nprocess at our hosting provider will unpack these symlinks to actual files\nduring the deployment process.
\nPlease note, symlinks should only be created between integration domain\ndirectories. The _placeholder & _homeassistant directories are special\ncases and new directories with an underscore (_) should not be created.
Symlinks are currently not allowed in the custom integrations folder.
\nThe names of directories must always match the integration domain. Additional\ndirectories are not allowed.
\nIntegration domain conflict between custom and core integrations
\nIt is possible for a custom integration and a core integration to collide on\na domain name level. In these cases, the core integration domain get\npreference.
Tips, Tools & Resources
\nWhen adding a new set of icons and logos, the following resources can help you\nfinding the needed images and getting them to match our specifications:
\n- \n
- RedKetchup Image Resizer:\nResizes most images formats, including SVG, into any format using just your\nbrowser. \n
- Worldvectorlogo:\nThousands of SVG brand images, which are perfect to use as a base. \n
- Wikimedia Commons:\nHas a lot of good quality images on file. \n
A lot of brands (especially the larger ones) often offer a press kit on\ntheir (corporate) website, that contains high quality images.
\nTrademark Legal Notices
\nAll product names, trademarks and registered trademarks in the images in this\nrepository, are property of their respective owners. All images in this\nrepository are used by the Home Assistant project for identification purposes\nonly.
\nThe use of these names, trademarks and brands appearing in these image files,\ndo not imply endorsement.
\n