Skip to content

Commit 18f09ec

Browse files
committed
feat(gui): source brand marks for 23 providers that rendered a letter tile
The provider rail, details panel and dashboard rows fall back to a coloured initial tile when providerIconSrc returns nothing, which was 38 of 83 registry providers. This sources marks for 23 of them. Eleven vendors publish a usable square SVG and are committed as fetched, with only comments, <title>/<desc> and data-name stripped. Twelve publish no square vector, so their favicon or app icon is traced -- potrace for a single-ink silhouette, k-means colour layers for multi-colour art, the same technique that produced hermes-agent.svg and gajae-code.svg. The first tracing pass shipped a bug worth recording. A favicon is usually a glyph on a filled rounded square, and tracing by luminance captured the square: baseten came out 97.7% ink, bizrouter 89.3% -- black boxes, not marks. The fix reads the border ring, takes its median colour as the plate when the ring is uniform, and masks by distance from that colour rather than by darkness. It found real plates behind baseten (#19e76e), cerebras (#ef5b27), hyperbolic (#1a1a1a), umans and bizrouter (#000000), and orcarouter (#ffffff). Two candidates were rejected rather than shipped. nousresearch.com publishes only safari-pinned-tab.svg, whose first path is the full 512-unit frame -- the exact file the Hermes client mark rejected for rendering as a black square. LiteLLM has no mark of its own on its site; the SVGs there are third-party model logos. Both keep their fallback tile with the attempt recorded. Two guards. One fails a mark that passes an SVG parse but is a <text> glyph, an embedded raster or a base64 payload -- none of which is visible in review and all of which break in a 19px box. The other fails a horizontal wordmark by viewBox ratio, which is what disqualified six vendor logos here and the MiniMax docs asset in the previous unit. Providers with no resolved mark: 38 -> 15 on this branch. Measured after: 18 of the 23 fall under 2:1 against one of the two surfaces, because ProviderIcon has no themed path at all. That is wp5, not a defect in these assets. Verification: 2 pass in the new file, each driven red (a text glyph, a 5.1:1 lockup). tsc 0 both roots, oxlint clean, privacy:scan clean, full GUI suite 1156 pass / 0 fail across 187 files. Every mark rendered at 19px in the real tile in both themes with no load failures.
1 parent a11038c commit 18f09ec

26 files changed

Lines changed: 1426 additions & 0 deletions

gui/public/provider-icons/README.md

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,3 +140,63 @@ Both directions are enforced in `gui/tests/integration-marks.test.ts`, including
140140
luminance check that fails any single-ink near-neutral mark left as an image. That
141141
direction was missing until it caught `grok`; the same class of defect had already
142142
shipped once for `prime`, `opencode` and `kimi`.
143+
144+
## Provider marks (2026-09-01)
145+
146+
Sourced for the providers that were rendering a coloured initial tile. Every
147+
entry below was fetched from the vendor's own domain, taken from the registry's
148+
`baseUrl`/`dashboardUrl` rather than guessed.
149+
150+
Published as SVG and committed with only comments, `<title>`/`<desc>` and
151+
`data-name` attributes stripped:
152+
153+
- `digitalocean.svg``digitalocean.com` favicon, 32x32.
154+
- `featherless.svg``featherless.ai/favicon.svg`, 256x256.
155+
- `kilo.svg``kilo.ai/favicon/favicon.svg`, 32x32. Keeps its `oklch()` plate.
156+
- `nanogpt.svg``nano-gpt.com/logo.svg`, 181x187, gradient.
157+
- `nebius.svg``nebius.com/favicon/favicon.svg`, 96x96.
158+
- `neuralwatt.svg` — the site's Webflow-hosted brand asset, 32x32.
159+
- `parallel.svg``parallel.ai/icon.svg`, 96x96.
160+
- `scaleway.svg``scaleway.com/favicon/website/favicon.svg`, 16x16.
161+
- `synthetic.svg``synthetic.new/favicon.svg`, 54x54.
162+
- `zai.svg``z-cdn.chatglm.cn/z-ai/static/logo.svg`, 30x30.
163+
- `zenmux.svg` — the site's CDN-hosted brand mark, 160x160.
164+
165+
Traced from raster, because the vendor publishes no square SVG mark. Same
166+
technique as `hermes-agent.svg` and `gajae-code.svg`: `potrace -s --flat` for a
167+
single-ink silhouette, k-means colour layers (seeded at 3, largest area first)
168+
for multi-colour art, downsampled to a 160px box first so the trace does not
169+
follow every upscaled pixel edge.
170+
171+
- `cerebras.svg`, `novita.svg`, `siliconflow.svg`, `deepinfra.svg` — single-ink.
172+
- `baseten.svg`, `hyperbolic.svg`, `sambanova.svg`, `umans.svg`, `venice.svg`,
173+
`vultr.svg`, `bizrouter.svg`, `orcarouter.svg` — colour-layered.
174+
175+
**The plate problem, recorded because the first pass shipped it.** A favicon is
176+
usually a glyph on a filled rounded square. Tracing luminance alone captured the
177+
square and produced a solid box: `baseten` came out 97.7% ink, `bizrouter` 89.3%.
178+
The fix reads the border ring, takes its median colour as the plate when the ring
179+
is uniform, and masks by distance from that colour instead of by darkness. It
180+
found real plates behind `baseten` (#19e76e), `cerebras` (#ef5b27), `hyperbolic`
181+
(#1a1a1a), `umans`/`bizrouter` (#000000) and `orcarouter` (#ffffff).
182+
183+
### Rejected, and why
184+
185+
- **`nous`**`nousresearch.com/safari-pinned-tab.svg` opens with the full
186+
512-unit frame as its first path, so it renders as a black square. This is the
187+
identical candidate the Hermes client mark rejected. Nous Research keeps its
188+
fallback tile; reusing `hermes-agent.svg` would attribute a product's mark to
189+
its publisher.
190+
- **`litellm`** — the traced favicon is a muddy multi-colour blob with no legible
191+
silhouette at 19px. The homepage SVGs are third-party model logos, not LiteLLM's
192+
own mark.
193+
- **Wordmarks refused** for `cerebras` (843x320 from Sanity CDN), `siliconflow`
194+
(188x28), `zhipu-bigmodel` (123x25), `vultr` (218x52), `baseten` (1001x151) and
195+
`chutes` (192x30). A lockup in the rail's 19px box is an illegible smear, so
196+
each was replaced by a traced square mark or left to the fallback.
197+
- **Nothing found** for `chutes`, `nscale`, `together`, `volcengine` and
198+
`tencent-coding-plan`: no square SVG and no usable raster icon at the
199+
registry's domains. They keep their fallback tiles.
200+
201+
`zhipu-bigmodel` and `zhipu-bigmodel-coding` share `zai.svg`: Z.AI and BigModel
202+
are the same company, and the mainland console publishes only the wordmark.
Lines changed: 13 additions & 0 deletions
Loading
Lines changed: 41 additions & 0 deletions
Loading
Lines changed: 26 additions & 0 deletions
Loading
Lines changed: 75 additions & 0 deletions
Loading
Lines changed: 10 additions & 0 deletions
Loading
Lines changed: 4 additions & 0 deletions
Loading
Lines changed: 18 additions & 0 deletions
Loading

gui/public/provider-icons/kilo.svg

Lines changed: 13 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)