Brand assets
Home Assistant serves these. Since 2026.3 a custom integration ships its own brand images in a brand/ folder inside the integration, and HA exposes them at /api/brands/integration/cafe/, taking priority over the brands CDN. The central home-assistant/brands repository no longer accepts custom integrations, so there is nothing to submit anywhere — the files here are the whole story. See the Brands Proxy API announcement.
On Home Assistant older than 2026.3 the integration shows the generic puzzle-piece icon. Nothing breaks.
| File | Size | Used for |
|---|---|---|
icon.png |
256×256 | The integration tile, the device page, the "add integration" list |
icon@2x.png |
512×512 | The same, on a retina display |
logo.png |
≤256 tall | The wordmark, shown in the config flow header |
logo@2x.png |
≤512 tall | The same, on a retina display |
dark_logo.png / dark_logo@2x.png |
as above | The logo on a dark theme |
The icon's tile is self-contained — a roast-brown squircle with the bean on it — so it reads the same on light and dark themes and there is no dark_icon.png to keep in sync. The logo is a bare glyph and a wordmark with no background of their own, which is exactly why the dark variant exists.
The wordmark is drawn by the generator rather than set in a typeface, so there are no glyph outlines in here that someone else owns and no font to install before regenerating.
Regenerating
Every SVG in here is generated, not hand-edited. Change tools/make_icon.py and re-run it; it writes all three, renders the PNGs beside them, and copies the icon to packages/frontend/public/icon.svg, which is the panel's favicon.
python3 tools/make_icon.py
Needs rsvg-convert (brew install librsvg). Use it rather than Chromium or Inkscape — librsvg is what Home Assistant's own tooling uses, and the three disagree about filters.