Skip to content
dsh-market Browse plugins GitHub 中文

tpmoonchefryan/dsh-joi-channel-theme

Two-suit VTuber theme for Joi: Flowers and Library are separate token systems for light and dark, with a standing portrait and a whale girl napping on the headline of the new-session page, two chibi companions above the composer that follow the turn state, a duo sidebar mark, and a context meter shaped as a ripening mandarin; a third card returns the stock DeepSeek look with the plugin still installed.

Stars ★ 8 Category Themes & Appearance Listed 2026-08-17 npm dsh-joi-channel-theme

Install

Inside DeepSeek Harness, with dsh-market

dsh plugin --profile web add dshmarket

Or from the command line

dsh plugin --profile web add dsh-joi-channel-theme

Installing runs third-party code with your own permissions — it can read your files, use your credentials and reach the network. Review the source first, and pin a commit (github:owner/repo#sha) when you can.

Screenshots

README


Overview

Joi is a VTuber active on the Chinese video platform Bilibili, part of the virtual artist group VirtuaReal.

She loves pixel art, cyberpunk, and the film Blade Runner; dislikes exercise; her special skill is "eating a whole orange in one bite with the peel on," and she considers the orange the most perfect fruit — which is how 🍊 became her de facto emoji (unofficial).

This theme turns her two official outfit sets into two complete rooms: the warm, stage-lit Joi·Flowers, and the cool, study-like Joi·Library. It is not one skin with a hue slider — grounds, panels, bubbles, syntax highlighting, textures and character acting are two self-contained systems that never mix. And the word wardrobe itself is where the film's Joi narrative lands on this interface.

Suits Appearance Semantic slots Characters Inlined assets
2 light · dark · system 7 + leaf Joi · Zhouxin · Whale Musume 10 files · 2.4 MB · zero external

[!IMPORTANT] Unofficial fan work. This project is not affiliated with, authorized, sponsored or endorsed by Joi, VirtuaReal, Bilibili, DeepSeek or any related rights holder. Character names, designs, settings and brand rights belong to their respective owners.

Gallery

The new-session page: she stands at the door of the room, her gaze resting on the headline; the whale girl naps on top of the title, claws sinking exactly four pixels into the glyphs — the only depth cue that reads as "lying on it."

Joi·Flowers Joi·Library
Light
Dark

Light and dark always follow the app's own appearance setting; a suit changes hue, never brightness. All four quadrants (two suits × light/dark) are verified value by value against one frozen baseline.

The duo portrait

The whale glyph in the sidebar's top-left corner is replaced by a duo portrait — the whale girl and Joi squeezed into one die-cut sticker: the engine and her, neither one optional. The portrait changes with the suit, its white outline is baked into the art so it holds up on light grounds, and both images are aligned on the same canvas so faces never shift when you change outfits.

State Show

On the conversation page, two little companions sit on top of the composer: Zhouxin (the fan mascot) on the left, chibi Joi on the right. They change faces with the current turn — same vocabulary, same settle moment, never out of sync:

Joi·Flowers Joi·Library
Idle info
Running running
Success success
Failure error

When a turn succeeds, both beam together; when it fails, both lower their eyes with a single tear — sad for five seconds, then back to their posts. Failure is never performed as wailing: that is not who they are.

In long conversations, any line of text that overlaps a character automatically gains a ground-colored outline — readability always outranks cuteness.

Install

Two prerequisites

Requirement Why Check
Node.js ^22.19 or >=24 What DeepSeek Harness runs on node -v
pnpm dsh plugin is a pnpm forwarder; without it you get pnpm not found on PATH pnpm -v

If pnpm is missing, install it (either works):

npm install -g pnpm
corepack enable pnpm

Case A: you run harness through npx

If your habit is npx @deepseek-ai/dsh web, then dsh is not on your PATH — typing dsh plugin ... on its own gives command not found. Use the same npx prefix:

npx @deepseek-ai/dsh plugin --profile web add dsh-joi-channel-theme

Then start as usual:

npx @deepseek-ai/dsh web

[!IMPORTANT] The profile name must be web. Only web and headless ship a template; any other name yields an empty profile with no web UI, and nothing will load.

Case B: you would rather type less

Install harness globally and dsh becomes available directly:

npm install -g @deepseek-ai/dsh
dsh plugin --profile web add dsh-joi-channel-theme && dsh web

Then

Open the address printed in the terminal (http://127.0.0.1:3080 by default), refresh once, and she is there.

If harness is already running, plugins do not hot-load — plugin-set changes take effect on restart. Press Ctrl+C, install, and start it again.

Uninstall

npx @deepseek-ai/dsh plugin --profile web remove dsh-joi-channel-theme

[!NOTE] That is the only time you touch a terminal. Everything afterwards lives in the UI: the wardrobe — and the way back to stock DeepSeek — both live in the same row under Settings → General. DeepSeek Harness currently ships no graphical plugin installer, so this one step is unavoidable.

[!TIP] After removal the UI returns to stock item by item — tokens, favicon, wordmark, syntax colors, zero residue — verified on a live instance.

dsh: command not found — harness is not installed globally. Use npx @deepseek-ai/dsh plugin ... (case A), or npm install -g @deepseek-ai/dsh first (case B).

dsh: pnpm not found on PATHdsh plugin needs pnpm to manage the profile's dependencies. Run npm install -g pnpm or corepack enable pnpm.

Installed but nothing changed — plugin-set changes take effect on restart. Stop harness, start it again, then hard-refresh the browser (Cmd/Ctrl+Shift+R).

Installing from a local checkout (for development)

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

Installing straight from GitHub is not recommended: pnpm ≥10 blocks the prepare build script, so the first add always fails and you must copy the printed package key into your profile's pnpm-workspace.yaml under allowBuilds and re-run. The npm package ships prebuilt and needs no build permission.

Wardrobe & Native

Wardrobe lives in Settings → General → 换装: three cards side by side; pick one and the room follows. The lower half keeps the native light / dark / system cubes — brightness always belongs to the app.

DeepSeek Native is the third card, sitting right beside the two suits: pick it and the UI returns to stock DeepSeek while the plugin stays installed; pick a suit again and it comes straight back. Installing the plugin never forces the skin.

It is not shaped as a plugin on/off switch, because it never was one — choosing it disables nothing: the bundle stays installed and loaded, and its state in the plugin list does not move. All it has ever switched is the look.

  • A ripening orange — context usage is not a progress ring but an orange ripening from deep green to red-orange. Overripe is the warning; the leaf stays green and the stem stays brown, because identity does not change with state.
  • Constant whale blue — model, usage and subagent colors are identical across both suits. People change clothes; tools do not.
  • The gold quota — her iris color #FFCE65 may flood user bubbles in Flowers, but in Library it only appears at brooch scale. Restraint is design too.
  • Texture as fabric — Flowers' petal dots come from her dress print; Library's grid paper from drafting lines.
  • Wordmark surgery — the sidebar's deepseek wordmark is carefully re-set into two lines, the HARNESS badge aligned precisely to the "e" of "ek" — without changing a byte of the native SVG, fully reversible.
  • 🍊 everywhere — the favicon and first-level list markers are that most perfect fruit.
  • Subagent whales — concurrent subtasks line up as tiny whales: eyes closed in queue, spouting while running, squinting when done.

Design & Tech

This theme had a frozen design baseline before it had code: every color value, anchor and sprite-cell ratio lives in a single baseline-4q.json; code generates its constants from that baseline at build time — hand-copying is forbidden. The regression script asserts all four quadrants against the same baseline (283 checks must pass).

Item Value
Plugin ID dsh-joi-channel-theme
Form dsh bundle + web client plugin (official install path, no client fork)
Token overlay per suit: 19-step neutral ramp + 44 semantic aliases + 9 syntax tokens, light & dark
Character assets Joi 2×2 ×2 suits · Zhouxin 2×2 · Whale Musume lying/standing · mini whales 1×3
Inlined assets 10 WebP data URIs, 2.4 MB total, zero external requests (CSP-friendly)
Compatibility DeepSeek Harness web 0.1.0-rc.5+
Deep dive Development doc
dsh-joi-channel-theme/
├── README.md                 # zh main (en/ja/ko/fr alongside)
├── LICENSE                   # code: MIT
├── LICENSE-ASSETS.md         # assets: CC BY-NC-SA 4.0
├── THIRD_PARTY_NOTICES.md
├── cordis.patch.yml          # dsh bundle layer
├── src/                      # host half + browser half
├── scripts/                  # baseline/asset generation · sprite alignment · 4-quadrant regression
├── stuff/                    # source assets (including unused takes)
└── docs/                     # screenshots & development doc

License & Rights

This repository uses split licensing:

  • Code, project-authored configuration and documentation text are under the MIT License;
  • Project-authored original visual contributions in stuff/ and docs/ are under CC BY-NC-SA 4.0 — attribution, non-commercial, share-alike.

[!WARNING] Both licenses cover only original contributions the maintainer or contributors are legally entitled to license. They grant no rights in Joi's name, character design or settings, nor in the names, trademarks, materials or references of VirtuaReal, Bilibili, DeepSeek or any other third party.

The full rights boundary is documented in THIRD_PARTY_NOTICES.md.


Content from the project README on GitHub ↗