dsh-model-logos: Add recognizable brand logos to the model selector

Introduction

DSH’s model selector used to be a short list. Now it is often a sea of them: DeepSeek, GPT, Claude, Gemini, Qwen, GLM, Kimi, Doubao, Llama, Mistral, all rendered as the same gray text on the interface. Which model you use to send a message relies on recalling the name after reading it letter by letter. Two models that differ only by a suffix are also easy to click the wrong one.

dsh-model-logos was written for this: it does not change the selector’s interaction, only replaces the text box next to each model with a recognizable marker, changing selection from “recall” to “recognition”. Below is an introduction to this plugin.

What is it

dsh-model-logos is a DSH Web interface plugin, author Altermoe, MIT license, current commit version 0.5.0. Its scope is small:

  • In the input area (composer), the model button, the top of the model selector, and each option row, display the current model’s marker;
  • In Settings → Model, the provider rows, the provider editor title, and the model rows, reserve and fill in the brand marker slots;
  • Provide a model icon page and an icon selector to modify the current marker by model.

One thing the plugin does not do is rewrite the selector itself. Clicking, searching, check state, and reasoning strength tags still belong to built-in components. The plugin only repaints the content of the label itself (only one label can be placed in the same position), so the model name and release badges are reproduced within it. This is the only replacement point in the whole text.

The directory page categorizes it under the “Fun Skins” category.

Why Use Icons

The original method was reading text. A marker can give the answer at a glance, for the same reason a phone desktop doesn’t list apps as a column of names; more importantly, models that differ only by a suffix are easy to click wrong, and a wrong decision will be stopped by a marker before you send the message.

There is also a less obvious design in the plugin: A model can have two brands. The vendor is the channel providing it — OpenRouter, Volcengine, local relays; the model is the object of your conversation — Claude, Qwen, DeepSeek. In the aggregator row, this is two different answers, so they get two different markers, and the plugin won’t let one impersonate the other.

Core Features

Listed below by interface position, all from the “What you get” section of the README.

Input Area and Model Selector. The model button shows the current model’s marker; the top of the selector shows the current model; each option row carries its own marker. The label is redrawn rather than wrapped, so the plugin reproduces the model name and release badges on the built-in label. Clicking, searching, checking, and reasoning strength tags are still handled by built-in components.

Marker Slots in Settings → Model. A 22px marker slot is reserved on the left of each provider row and editor title: official channels fill with the vendor marker, hand-written providers leave it empty as a placeholder, just for alignment. Each model row starts with a 22px icon slot, showing a dashed placeholder when the model marker hasn’t been parsed yet; when the marker appears, the name won’t shift.

Add Provider Dropdown with Logos. Replaces the native <select>, bringing brand markers; the native select remains below as the source of state.

Model Icon Page. The plugin’s own settings entry lists the models in your providers, shows their current marker, and provides an entry to modify it.

Selector Accessible Anytime. Clicking a model icon in Settings → Model opens the selector; the Model Icon page opens by model, so fixing a wrong choice is one click, no config file change needed.

Where Do Icons Come From

The plugin first does an auto-match: gives an initial marker based on model ID and name, then falls back to the provider. This is just a default value, not a rule, and every model can override:

  • Auto Recognize — Back to auto-match result;
  • No Icon — This model does not show a marker;
  • Initial Icon — Generate a deterministic color block from the name, suitable for local or niche models, looks intentional rather than impersonating a brand;
  • Vendor Icon — Company or channel markers (Anthropic, Google, Alibaba, ByteDance, OpenRouter, etc.);
  • Model Icon — Model product markers (Claude, Gemini, Qwen, Doubao, Kimi, etc.).

The selector arranges the two groups vertically, searching both groups simultaneously. Some companies and models share a single graphic (DeepSeek, Mistral, MiniMax); such markers are placed in the model group, and official channel rows reuse the same artwork; when they are indeed different — Anthropic vs. Claude, Google vs. Gemini, Alibaba vs. Qwen, ByteDance vs. Doubao — the selector provides both at the same time. The order within groups is not alphabetical, but based on a reproducible snapshot of online popularity, synthesizing signals from GitHub, npm, Wikipedia, Hugging Face, and Bilibili. The method and raw data are in docs/rankings.md.

Icons are not hand-drawn: they are all self-contained 24×24 SVGs, from the fixed version @lobehub/icons-static-svg 1.102.0 (MIT), Xiaomi from Simple Icons (CC0), and the DeepSeek official whale taken from this app’s Web frontend. The build check compares the generated path data with the committed upstream files line by line; changing one marker can only change its source. Nothing is fetched at runtime.

Installation and Enablement

Add the public repository to the DSH config file:

dsh plugin --profile web add github:Altermoe/dsh-model-logos

Source installation builds the plugin locally (the repository’s prepare script runs pnpm run build), requires Node.js ≥ 26.13.0 and pnpm; the marketplace requests build authorization on the first install. To skip the build, download dsh-model-logos.tgz from the latest release and add the file directly:

dsh plugin --profile web add ./dsh-model-logos.tgz

A local checkout can also go through the plugin manager:

plugin_manager action=install_bundle target=<absolute path to this directory>

Then refresh the Web interface. The plugin shows as Model Logos / 模型 Logo in “Plugins”; disabling it removes all decorations and the page returns to normal. Stars are 0 (as of the directory page scrape), indicating this is a fledgling project, upgrades and compatibility need to be verified by yourself.

Typical Usage

After installation, there’s plenty to see by default, no config change needed: open the input area, the current model button next to it has its marker; open Settings → Model, provider rows and model rows have graphics, and the add provider dropdown can be selected directly by shape.

To change a model’s marker, click the model’s icon in Settings → Model, pick one in the selector, or go to the “Model Icon” page and change it by model. To return to the plugin’s own judgment, select “Auto Recognize”; for local models without brand attribution, “Initial Icon” is more appropriate than fabricating a vendor marker; if you really don’t need a marker, select “No Icon”.

Configuration items are saved in the DSH user settings document — the config file’s cordis.patch.yml, kept with other preferences. Not in localStorage, and no network requests are generated. Override items are bound to the provider + model pair, so when two providers each serve a model with the same name, different markers can be displayed.

Applicable Scenarios and Notes

Who is it for: Web interface users with a long model list, or running several aggregators and local channels simultaneously, where finding the model to start with is prone to clicking errors from a pile of gray text. Hand-written providers and local URLs also benefit, just lacking vendor logos to fill.

Several boundaries are explicitly stated by the plugin, worth knowing before use:

  • Vendor Logos Belong Only to Official Channels. Relays, self-hosted servers, or local URLs do not have a vendor brand behind them, so vendor logos are not displayed — the plugin explicitly states that fabricating one is lying. The marker slot is still reserved and left empty to align rows. All official channels have markers, and niche channels fall back to a deterministic letter block.
  • Uncertain models will not be left blank. The settings row reserves a 22px icon slot and dashed placeholder; a click opens the selector.
  • Names are always present. Every button and menu row still carries the name, the interface is fully usable even without recognizing the marker.

Normal steps before installation must still be done: this is a third-party plugin, running inherits current DSH process permissions; source code, package.json, and license text (MIT) suggest reviewing it yourself before installing; the plugin declares that cordis.patch.yml will be written to the user settings document, so check what it says if you mind. Additionally, icon assets are trademarks, used only to identify the provider or model you are actually using.

Conclusion

dsh-model-logos solves an interface information density problem: compressing “reading a name” into “recognizing a marker”, at the cost of one plugin installation and a small amount of configuration, with full restoration upon disabling. It doesn’t take over selection logic, doesn’t generate network requests, and all icons are self-contained. In other words, how much convenience it adds depends on how many models and aggregators you have.

  • Community directory page: https://www.skillhub.cn/plugins/Altermoe/dsh-model-logos
  • Source code and documentation: https://github.com/Altermoe/dsh-model-logos
  • For more detailed runtime contracts and design trade-offs, see docs/architecture.md in the repository, and the relationship with other DSH icon plugins see docs/prior-art.md.
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye