Brand assets for the glinet4 project — logo, icon, colours, and the files ready to submit to the Home Assistant brands repository.
A router hub connected to four nodes — the network motif also reads as the 4 in glinet4. It is a distinct community mark, intentionally not the GL.iNet trademark (this is an independent community project, not affiliated with or endorsed by GL.iNet).
| Hex | Use | |
|---|---|---|
| Teal | #2DD4BF |
gradient start |
| Blue | #3B82F6 |
gradient end |
| Text (light bg) | #1F2937 |
wordmark on light |
| Text (dark bg) | #F9FAFB |
wordmark on dark |
| Text (any bg) | #3B82F6 |
wordmark for theme-blind renderers |
The badge uses a top-left → bottom-right teal→blue gradient with a white glyph, so the icon works on both light and dark backgrounds.
| File | Size | Notes |
|---|---|---|
icon.png / icon@2x.png |
256² / 512² | square app icon |
logo.png / logo@2x.png |
≤256 / ≤512 | wordmark, dark text (light theme) |
dark_logo.png / dark_logo@2x.png |
≤256 / ≤512 | wordmark, light text (dark theme) |
logo_universal.png / logo_universal@2x.png |
≤256 / ≤512 | wordmark, brand blue — readable on any theme |
logo.png and dark_logo.png keep those exact names because Home Assistant
looks them up by filename. logo_universal.png is the one to embed in Markdown
— see below.
All PNGs are transparent RGBA and trimmed. Regenerate them from source:
uv run --with pillow python generate.pyEmbed logo_universal.png with a plain <img>. Its wordmark is brand blue,
which clears the 3:1 large-text contrast bar on both white (3.7:1) and dark
(4.6:1), so one file covers every theme:
<p align="center">
<img alt="glinet4" src="URL/logo_universal.png" width="300">
</p>Do not use <picture>. GitHub supports it, but it is not portable: renderers
that sanitise HTML against an allow-list drop the tag. Home Assistant (and so
HACS, which renders a repo's README.md in the HACS panel) runs Markdown through
js-xss, whose default allow-list has
img but no picture and no source. Unknown tags there are escaped, not
stripped, so a <picture> block renders as literal <picture> <source …> text
on the page — and the <img> fallback inside it is the light logo, whose dark
wordmark then sits invisibly on the dark theme. The same allow-list gives p no
attributes, so align="center" is dropped too and the logo simply renders
left-aligned there.
The icon (icon.png) has its own gradient background and is readable on any
theme, so it needs no variant.
As of Home Assistant 2026.3, custom integrations ship their own brand
images — no home-assistant/brands PR needed. The integration carries these
files at custom_components/glinet4/brand/ (icon.png, icon@2x.png,
logo.png, logo@2x.png, dark_logo.png, dark_logo@2x.png); local brand
images take priority over the brands CDN. See the
announcement.
The custom_integrations/glinet4/ folder here is
kept as the canonical source for those images.
The icon uses transparent rounded corners (verified), so it adapts to any surface — it shows the card background through the corners (white on a light card, dark on a dark card), which is the intended app-icon behaviour.
Brands requires square icons (256²/512²), logos with the longest side exactly 256/512, transparency, and trimmed whitespace — all satisfied here.
These brand assets are released under CC0-1.0 (public domain) so they can be redistributed with the integration and the brands repo.
