DSH Plugins Marketplace

DSH Plugins

Plugins

/

UI & Experience

/

dsh-columbina-theme-sn

C

dsh-columbina-theme-sn

Identified★ 1

Columbina-themed glassmorphism skin for DeepSeek Harness — patch edition: theme-takeover switch, background upload with blur/clarity, editable hero title.

Columbina Theme — Patch Edition

English | 中文

A moonlit silver-blue glassmorphism skin for the DeepSeek Harness Web GUI, with an editable Columbina persona.

This is a patch, not an original theme. The bulk of the code comes from Columbina-sn, the font palette from hyposelen1a, and the host/client structure from berhbro. See Credits.

Disclaimer

This theme is pure CSS rendered by your browser, so the final look depends on your machine:

  • Glass blur (backdrop-filter) needs Chromium 76+ / Edge / Chrome. Old engines, disabled hardware acceleration, some remote desktops, VMs or integrated-GPU drivers fall back to a flat translucent layer — no blur.
  • Gradient text (background-clip:text) may fail to paint on a few GPU drivers. There is a @supports solid-colour fallback, but it looks different.
  • Light/dark follows your system/Harness appearance (prefers-color-scheme and body[data-ds-dark-theme]), not a plugin switch.
  • High DPI (125% / 150% / 200%) changes how the 72px avatar, 1px borders and 2px letter-spacing read; screenshot pixels are not CSS pixels.
  • Wide-gamut displays / colour management make saturated purples such as #78007a look brighter or duller. The "same colour" never is, across screens.
  • Fonts: the hero title prefers Source Han Serif / STSong and falls back to a system serif, which changes metrics.
  • Host wallpaper overlay: if your Harness frontend ships its own full-screen wallpaper layer (e.g. #dsh-wall-layer, opaque, z-index:0), it paints over this theme's z-index:-1 background layer. Since v0.2.2 the theme hides that layer while its own background image is active, and restores it in plain mode.

Screenshots are illustrative, not a guarantee of pixel-identical rendering.

What it is

A DSH theme plugin: palette, background image, glass effects, editable persona and sticker conventions. This patched edition adds a theme-takeover switch, background upload, blur/clarity sliders and an editable hero title.

What's changed

ChangeNotes
Theme takeoverWhen two Columbina themes are installed they fight over the same tokens. Toggle on → the other package (dsh-columbina-theme) is disabled through the host pluginManager; toggle off → it is restored and this theme steps aside. Persisted across restarts.
Background uploadUpload from the panel; files land in Background/ and become the anchor. Hover × on a thumbnail to delete (with confirm). Never overwrites existing files, duplicates get a suffix.
Blur & clarityTwo independent sliders: blur 0–40px (preview while dragging, persist on release; the layer scales by 1 + radius/200 to hide the soft edge) and clarity, the positive phrasing of the veil opacity.
Editable hero titleThe title lives in the state file and is editable from the panel. Empty hero.image hides the avatar entirely, leaving one line of text.
Editable welcome pageTitle and a multi-line body are both editable from the panel (v0.3.0). An empty body renders nothing at all; an empty title falls back to the built-in line.
Font paletteLabel tokens now use hyposelen1a's palette: #78007a light, #acabf2 dark, with secondary/tertiary derived at 0.82 / 0.6 alpha. The hero gradient follows.
Viewer text colourThe plain-text preview ships its own green (#2b8a3e) that a container-level color cannot beat, so it is pinned on pre[class*="_plain"]. Syntax-highlighted spans keep their own colours.
Hero image cacheThe image URL carries ?v=<path> so Cache-Control: max-age=300 cannot serve a stale avatar after a swap.
Host wallpaper overlayHides a host-side full-screen wallpaper layer (#dsh-wall-layer) while the theme background is active (v0.2.2).

Everything else (persona section, sticker manifest, fenced routes, slot registration, glass CSS) is unchanged from upstream.

Install

Requirements: a DSH desktop or web profile that loads client plugins. Verified on DSH 0.2.1-rc.2; the Linux test also passed on 0.2.0-rc.2.

dsh plugin needs pnpm on PATH. If it fails with spawn pnpm ENOENT, run corepack enable pnpm first.

From GitHub:

dsh plugin --profile desktop add github:Columbla/dsh-columbina-theme-sn

From a local folder:

dsh plugin --profile desktop add D:\path\to\dsh-columbina-theme-sn

Refresh the page afterwards (the client half is read on page load). Host-half changes need a plugin row reload or a DSH restart.

dsh plugin --profile desktop remove dsh-columbina-theme-sn

Quick start

  1. A ☾ 哥伦比娅 button appears next to Settings at the sidebar foot; the same editor is also under Settings → 哥伦比娅 · 主题.
  2. Top switches: persona / skin / theme takeover / stickers / proactive stickers / no-repeat.
  3. Background block: upload, pick an anchor, drag blur and clarity.
  4. 恢复默认 refills the default persona draft; 重新载入 discards unsaved edits.

When changes apply

WhatApplies
Persona / switches / background settings (panel save)Immediately, next turn
lib/client.jsPage refresh
lib/index.js, cordis.patch.ymlPlugin row reload or restart
Background/ add / remove / renamePage refresh

State & settings

The state file lives at $DSH_HOME/columbina-theme.json, or ~/.dsh/columbina-theme.json when DSH_HOME is unset.

{
  "persona": "…persona prompt…",
  "enabled": true,
  "theme": true,
  "takeover": true,
  "stickers": true,
  "proactive": true,
  "noRepeat": true,
  "stickerSize": 128,
  "customStickers": [],
  "stickerOverrides": {},
  "hero": { "image": "", "title": "今天的 token,能分我一口吗?", "body": "" },
  "background": {
    "enabled": true, "current": "01-columbina-light.png",
    "rotate": false, "interval": 90, "dim": 0.6, "blur": 0
  },
  "rev": 3
}
FieldMeaning
personaPersona prompt; empty disables injection
enabled / themePersona switch / skin switch
takeovertrue disables the rival theme
stickers / proactive / noRepeatSticker switches — prompt rules only, not message filters
stickerSizeMax sticker edge, 48–320px
customStickers / stickerOverridesUser-added entries / renames and hiding of bundled ones
hero.imageIn-package relative path; empty hides the avatar
hero.titleThe hero line
hero.bodyMulti-line text under the title, rendered with white-space: pre-wrap (max 2000 chars); empty hides the whole block
background.dimVeil opacity 0–0.95, higher is paler; the panel's "clarity" = 1 - dim
background.blurBlur radius 0–40px
revWrite revision; bump it when editing by hand

Writes go through a temp file + rename and carry optimistic concurrency: missing rev → 400 client-outdated, stale → 409 stale.

Theme takeover

Both packages override --dsw-alias-* and paint their own background layer, so only one can win. This fork does not fight over CSS specificity:

const RIVAL_PACKAGE = 'dsh-columbina-theme'          // the other package
const manager = ctx.get('pluginManager')
await manager.setPluginEnabled(rival.entryId, !takeover)
  • On → the rival row is written as disabled: true in the profile's cordis.patch.yml (persistent; it will not come back on reboot).
  • Off → disabled: false is restored and this theme's theme flag is turned off too, so you never end up with no theme at all.
  • 1.5s after host start, the plugin re-checks takeover from the state file.
  • If the rival is absent or pluginManager is not available, the switch only reports a message — it never breaks the plugin.

Background & blur

ControlRangeField
Blur0–40 pxbackground.blur
Clarity5–100%background.dim = 1 - clarity/100
Interval15–600 sbackground.interval (only with rotate)

Upload goes through POST /columbina/backgrounds (data:image/*;base64, ≤ 24MB). File names are stripped of path separators and reserved characters; duplicates get a suffix and existing files are never overwritten. Deletion uses POST /columbina/backgrounds/remove and only accepts names present in the scanned list.

Assets

The repo ships a default asset set so it looks complete out of the box:

PathContent
meme/12 Columbina stickers (WebP) + an optional hero avatar 星眸.png (shipped, not used by default)
Background/3 presets: 01-columbina-light.png, 02-columbina-dark.png, 03-columbina-dusk.jpg

These images are not covered by MIT. Character art and official stickers belong to miHoYo / HoYoverse; the avatar and backgrounds belong to their respective artists. Non-commercial fan use only — open an issue and the assets will be removed on request. See NOTICE.md.

To use your own images: drop them into Background/ and refresh; name sticker files after stickers.json's items[].file; point hero.image at any in-package path (a circular PNG with alpha at 72px works best).

Known issues & fixes

SymptomCauseFix
Hero avatar comes back after a restartBefore the state arrives heroReady defaults to true, so the browser paints a cached avatarFixed: nothing is rendered while heroKey is empty
Swapped avatar still shows the old image/columbina/hero sends Cache-Control: max-age=300Fixed: the URL carries ?v=<path>
Switching the background image or dragging blur does nothingThe host frontend draws its own opaque wallpaper layer (#dsh-wall-layer) above this theme's z-index:-1 layerFixed in v0.2.2: that layer is hidden while the theme background is active
dsh plugin add rejected with Unexpected token '\uFEFF'package.json was saved with a UTF-8 BOM, which JSON.parse rejectsFixed in v0.2.2; .gitattributes keeps it from coming back
Viewer text refused to change colourThe plain preview has its own green #2b8a3e; a container color losesFixed: pinned on pre[class*="_plain"] (!important, plain renderer only)
Two themes fight over coloursBoth override --dsw-alias-*, last one winsTurn on theme takeover
Whole window goes blurrybackdrop-filter on [data-shell-overlay], which covers the frameOnly blur the direct children of floating layers
UI flickers when hovering the send button[data-composer-card] became the containing block of a position:fixed tooltipPaint the blur on ::before
The collapsed right panel stays foggyBlur applied to [data-sidebar-right-panel]Blur the real pane [data-dockkit-pane] instead
Dark hero title turns into a pale blockbackground shorthand resets background-clip:textUse background-image and re-declare the clip
Stickers do not show upstickers.json paths do not match real filesCheck missing from /columbina/stickers
Proactive stickers do nothingThe rule lives in the host half; a page refresh is not enoughReload the plugin row or restart DSH
Dark primary text looks faint#acabf2 reaches 5.99:1 on this theme's darker backdrop (below the 7:1 the upstream targets, above AA 4.5:1)Use #c3c2fb instead (7.55:1)
A CJK filename became custom-xxxx on uploadThe request body was not UTF-8, so the name was strippedBrowsers are fine; scripts must send charset=utf-8

Full reproduction guide for the "background / blur does nothing" class of bugs: docs/repro-background-not-changing.md (English) · 中文版.

Compatibility

ItemNotes
EngineChromium 76+ (Edge / Chrome / Electron); older engines lack backdrop-filter
GPUWith acceleration off, the glass degrades to a flat translucent layer
DPI100%–200% works; at 125% the 1px borders and 72px avatar read slightly differently
OSVerified on Windows 10/11 and Alibaba Cloud Linux; macOS untested
DSHVerified on 0.2.1-rc.2 and 0.2.0-rc.2; slots/APIs may differ in other versions
FontsThe hero prefers Source Han Serif / STSong, falls back to a system serif

Tests

node test/contrast.mjs      # contrast, CSS-only
node test/client.smoke.mjs  # client half with DOM stubs
node test/host.smoke.mjs    # host half, needs assets

Baseline: contrast 31/31, client 130/130, host 115/115 (host prints SKIP when assets are absent).

Credits

ProjectAuthorUsed for
dsh-columbina-themeColumbina-snThe theme itself: host/client halves, fenced routes, slot registration, persona section, the "moonlit silver-blue" palette and glass CSS, sticker manifest, test suites
dsh-columbina-themehyposelen1aThe font palette (#78007a / #acabf2) and the mask-dim idea; the package that theme takeover disables
dsh-cyrene-themeberhbroOriginal host/client structure, rev optimistic concurrency, slot registration and the test harness

The original MIT notice is kept in LICENSE (Copyright © 2026 berhbro).

Character & art: Columbina and all Genshin Impact character names, likenesses and official stickers belong to miHoYo / HoYoverse and are not covered by MIT. This project is not affiliated with, endorsed by, or sponsored by miHoYo, HoYoverse or DeepSeek. See NOTICE.md.

License

Code is MIT. Image assets are not.

Comments

Loading…

From the same category

dsh-desktop

by anywhere-labs

为 DeepSeek Harness (DSH) 插件生态打造的现代化桌面端解决方案。万物皆「插件」,桌面本身也是「插件」。

UI & ExperienceManifest valid

★ 35k

↓ 148/wk

MIT

TypeScript

Nov 4, 2026

dsh plugin --profile web add dsh-plugin-desktop

by zhu1090093659

DeepSeek Harness (DSH) Web Plugin Aggregation Ecosystem · Everything is a plugin, distributed via the Creative Workshop

UI & ExperienceManifest valid

★ 10.1k

↓ 178/wk

Apache-2.0

TypeScript

Nov 6, 2026

dsh plugin --profile web add dsh-web

A collection of independent Web UI plugins and skins, including task boards, Git graphs, mobile access, and live token stats.

UI & ExperienceManifest valid

★ 8.6k

↓ 178/wk

Apache-2.0

TypeScript

dsh plugin --profile web add dsh-web

by PC2005-cloud

DSH 桌面宠物:一行命令装好即用的透明动画小桌宠,支持多开、大小位置随心配置;还内置 DIY 素材链,能用 AI 视频自造专属宠物

UI & ExperienceManifest valid

★ 5.7k

↓ 222.8k/wk

MIT

TypeScript

Nov 6, 2026

dsh plugin --profile web add dsh-pet

by omdsh-dev

开放的侧边栏底座,支持三方拓展注册新侧边栏页面。内置文件渲染编辑/终端/侧边对话/Git/子代理页面 | Open sidebar foundation, supports third-party extensions to register new sidebar pages. Built-in file rendering/editing, terminal, side chat, Git,

UI & ExperienceManifest valid

★ 4.9k

↓ 80.6k/wk

MIT

TypeScript

Nov 5, 2026

dsh plugin --profile web add dsh-better-sidebar

by bowenliang123

The best DeepSeek Harness plugin for context insight and management, with context dashboard / browser / sidebar and context command, for context statistics, composition, breakdown, evolution details,

Tools & CapabilitiesUI & ExperienceTerminal & ClientsManifest valid

★ 4.3k

↓ 156.4k/wk

Apache-2.0

TypeScript

Nov 6, 2026

dsh plugin --profile web add dsh-context