naniwet / dsh-themes

已收录

A configurable skin for the DeepSeek Harness web UI: palette, display font and every image slot are configuration, with two bundled presets.

main工具 查看源代码

安装

npx -y @deepseek-ai/dsh plugin --profile web add github:naniwet/dsh-themes

此安装命令根据 GitHub 仓库地址生成,是未经验证的安装起点。

README

维护者编写的文档快照。

在 GitHub 查看 ↗
提交版本 dc3c7bf同步于 2026年8月18日

dsh-theme

A configurable skin for the DeepSeek Harness web UI.

One plugin, many looks: colours, fonts and artwork are all configuration, so a new skin is a config block rather than a fork.

Presets

Code Geass, darkCode Geass, light
SPY×FAMILY, darkSPY×FAMILY, light
PresetPaletteDisplay font
presets/code-geass.ymlGold #c9a227 · crimson #a01c26 on near-black #0b0810Songti / serif
presets/spy-family.ymlForest green #2f5d50 · rose #d4788a on green-black #0f1512PingFang / rounded sans

Mount them all with presets/all.yml and switch in Settings → General; the choice applies at once and is remembered by the browser. active in the config only decides what a browser sees before it has chosen one.

The choice is stored locally rather than in the settings document: a namespace registered by an out-of-tree plugin does not reach the browser's settings wire, so a picker bound to it silently drops every write.

Both presets ship with the light scheme tuned separately, not derived: a pale ground needs a denser accent and darker secondary text than a dark ground does, so accentLight and labelLight are their own values.

What it restyles

SurfaceTreatment
Page backgroundYour wallpaper, separate images for light and dark
SidebarCharacter art behind the session list, on a vertical ramp so the list keeps a clean ground
Sidebar wordmarkReplaced
New-session buttonIcon replaced
Empty-state logoReplaced
FaviconReplaced, by claiming an exact route ahead of the SPA fallback
ComposerAccent border, blur, focus glow, centre ornament, hand-drawn corner flourishes
MessagesUser bubbles take the highlight colour; assistant prose gets a halo or a blurred ground
Secondary textContrast raised — the stock greys vanish over artwork
Tool rows, cards, dialogs, scrollbars, focus rings, selectionAll themed
Ambient motionDrifting motes, silenced under prefers-reduced-motion

Everything is scoped to one attribute and one <style> element, and the effect destructor removes both, so unloading the plugin restores the stock UI exactly. No DeepSeek Harness source is modified.

Install

dsh plugin --profile web add /path/to/dsh-theme

Installing a local checkout with link: does not install the plugin's own dependencies. Run npm install in this directory once, or the profile fails to boot with Cannot find package '@deepseek-ai/schemastery'.

Quick start

git clone https://github.com/naniwet/dsh-themes.git
cd dsh-themes && npm install
dsh plugin --profile web add .

Then paste a preset into $DSH_HOME/profiles/web/cordis.patch.yml, replace the /path/to/... lines with your own image files, and restart. dsh --profile web --dump-config prints the composed result and marks which layer patched what, which is the fastest way to confirm a change landed.

Configure

Copy a file from presets/ into your profile's cordis.patch.yml and point the asset paths at your own images. Switching skins means swapping that block — there is no second plugin to enable.

A config block REPLACES the whole config of an entry; it is not merged key by key. Keep every key you want in the block.

Artwork

Both presets ship with artwork under assets/, and their paths are relative to the plugin, so a fresh checkout renders without editing anything. An absolute path in any slot overrides the bundled file.

Provenance. The images in assets/code-geass/ and assets/spy-family/ are AI-generated (GPT) fan art made for this theme. They are not official studio material. The characters they depict belong to their respective rights holders — Code Geass to Sunrise, SPY×FAMILY to Tatsuya Endo / Shueisha — and neither rights holder is affiliated with or endorses this project. Use is non-commercial. assets/background-light.svg and assets/background-dark.svg are original abstract fallbacks used when a slot is left empty.

The plugin serves every image from the host process, so the browser never needs access to your filesystem and the paths never leave the machine.

SlotSuggested
backgroundLight / backgroundDark≥1920×1080. Keep the subject right of centre — the sidebar covers the left and the composer the lower middle
overlayTransparent PNG, portrait, ~800×1200
iconNewSessionSquare, ≥64×64, simple enough to read at 28px
faviconSVG or 512×512 PNG
heroLogoTransparent, landscape ~3:1
sidebarWordmarkTransparent, ~400×100
border9Slice120×120 with ~40px corners, transparent centre

Every option

KeyDefaultWhat it does
palette.accent#c9a227Borders, focus, ornament — dark scheme
palette.accentLight#8a6d13Same role, light scheme; needs to be denser
palette.highlight#a01c26Primary buttons, selection, user bubbles
palette.groundDark / groundLight#0b0810 / #f3ead6Base colour each scheme derives its washes and halos from
palette.labelDark / labelLight#e6ddc9 / #46392cSecondary text; tertiary and caption derive from it
palette.displayFontSongti serifHeadings and the empty-state title only; body copy keeps the system stack
backgroundOpacity0.5Wallpaper strength; also controls how evenly halo works
readingSurfacehalohalo / panel / none — see below
overlayPlacementsidebarsidebar / corner / none
overlayOpacity0.30How strongly the character art shows through its panel
sidebarOverlayHeight46Character art height, percent of the sidebar
overlayWidth320Character art width in pixels, corner placement only
frameOnToolCardsfalseDraw the nine-slice frame on tool cards; squares off their corners

Reading surface

Prose renders over the wallpaper, so it needs help. readingSurface picks which kind, and the two trade against each other:

  • halo (default) — outlines the glyphs. The artwork stays fully visible, but text crossing a region whose luminance matches the halo loses contrast.
  • panel — a blurred ground behind the conversation column, faded at its left and right edges. Always readable; hides the artwork it covers.
  • none — neither.

Lowering backgroundOpacity narrows the wallpaper's light-to-dark range, which is what lets halo work evenly across the whole image rather than only over its mid tones.

Known limits

  • border9Slice is drawn as four corner flourishes, not a full frame: border-image overrides border-radius and stops the background being clipped to it, so a full frame squares off corners the rest of the UI keeps round.
  • Built-in icons are matched by a substring of their CSS-module class name. That survives a changed build hash, but not a rename upstream.
  • The sidebar character art is hidden while the sidebar is collapsed; a 55px rail cannot show a figure.

Adding a theme

A theme is a file in presets/ plus a folder in assets/. No code changes: copy a preset, swap the seven palette values and the display font, point the slots at your own images. If you build one, a pull request is welcome.

License

MIT for the code. The bundled fan art is not covered by that licence — see Provenance above; it is AI-generated, non-commercial, and the characters belong to their rights holders.

项目文件与信号

以下项目是目录快照中检测到的公开仓库信号。

文档已检测

仓库信息

开发语言
JavaScript
许可证
MIT
最后更新
2026年8月18日 07:21

谨慎安装

请检查源代码、权限、生命周期脚本、依赖与网络访问;不受信任的插件应先在隔离环境中测试。