为 DeepSeek Harness 提供实时 WebGPU 海洋皮肤与半透明玻璃界面,支持波浪大小、昼夜、玻璃透明度调节,所有资源本地运行、不上传数据。
- Language
- JavaScript
- License
- MIT
- Branch
- main
Install
$ dsh plugin --profile web add github:d-dev0101/open-sea-skinRun the command above in your terminal to install this plugin via the dsh CLI. You can switch Profile in the top-right corner. New to dsh? Read the beginner tutorial
一句话定位
为 DeepSeek Harness 换上实时 WebGPU 大海背景与半透明玻璃界面,并把波浪大小、日光、玻璃亮度做成可即时调节的左下角快捷控制。
核心能力
- 在 Harness 三个界面栏之后挂一张实时 WebGPU 海面(5 组 Gerstner 浪、FBM 细节、Fresnel 天空反射、太阳闪烁与白沫),并把整个 Harness 切换为半透明玻璃主题
- 通过左下角按钮直接调波浪大小、白天/黄昏、自动昼夜循环与玻璃不透明度(40%–90%),拖动即时生效并自动保存
- 12 分钟自动昼夜循环;手动拖动「日光」会让画面停在当前时间,再打开自动循环可继续
- 一行 DSH 插件命令完成安装,并通过宿主路由
/open-sea-skin提供皮肤所用的本地资源 - 提供 Chrome/Edge 浏览器扩展、静态前端注入脚本与 Harness 源码集成三种备用安装方式,同一套 UI 与渲染器
- 跨路径共用同一个 iframe 标识,避免 DSH 插件、扩展、静态安装器同时存在时出现重复渲染
技术实现
- 语言: JavaScript(原生 ECMAScript 模块,少量 TypeScript 仅存在于
harness-plugin/源码集成路径) - 关键依赖: three.js 0.178.0(完整 modules + WebGPU 后端 + TSL,已 vendored)、DeepSeek Harness Host
webServer、Cordis 注入点(cordis.patch.yml) - 架构模式: DSH 插件方式在宿主
webServer上注册/open-sea-skin前缀路由读取native-dist/静态资源;客户端再注入一个 iframe 加载skin.html+ocean.js,并通过postMessage把偏好参数传给渲染器 - 入口文件:
plugin/index.js(Host 路由注册,plugin/client.js(浏览器客户端控制器,可选经cordis.patch.yml注入)
适用场景
想要让 DeepSeek Harness 看起来不再像普通后台、想加点活气的用户。装上后聊天界面背后会有持续起伏的海面,正午、下午、黄昏的金光会缓慢切换;同时想保留 Harness 原生视觉风格的人也可以降低玻璃不透明度,让背景当陪衬。
前置依赖与兼容性
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DeepSeek Harness | 0.1.0-rc.6 | 插件在该版本实测通过;老版本界面层级可能与皮肤叠加冲突 |
| Node.js(本地开发/构建) | >=20 | 仓库 engines 字段声明,仅构建脚本需要 |
| 浏览器(DSH 插件、扩展) | Chrome 113+ / Edge 113+ | 渲染依赖 WebGPU,且扩展 manifest.json 声明 minimum_chrome_version: 113 |
| 平台 | 跨平台 | 只要浏览器支持 WebGPU 即可,macOS / Windows / Linux 均无限制 |
| 原生模块 | 无 | 全部为纯前端 JavaScript、three.js 与字体,无 node-pty / node:sqlite 等原生依赖 |
安装方式
dsh plugin --profile web add github:d-dev0101/open-sea-skin
配置项
| 配置 | 类型 | 范围 | 说明 | 默认值 |
|---|---|---|---|---|
| 启用皮肤 | 开关 | 开 / 关 | 关闭后整片海面与玻璃界面都不显示 | 开启 |
| 波浪大小 | 数值滑块 | 0–100 | 越大浪越高、间距越密 | 45 |
| 日光位置 | 数值滑块 | 0–100 | 0 为黄昏、100 为正午;拖动后停止自动循环 | 55 |
| 玻璃不透明度 | 数值滑块 | 40%–90% | 调节 Harness 卡片、侧栏的半透明程度 | 72% |
| 自动昼夜循环 | 开关 | 开 / 关 | 开启时按 12 分钟节奏缓慢推进日光 | 开启 |
| 渲染质量(仅原生 Harness 集成) | 选项 | auto / low / high | 自动检测低性能设备并降级网格与帧率 | auto |
偏好存在浏览器本地:DSH 插件与静态安装器用
localStorage键ossEnabled、ossSea、ossTime、ossGlass、ossAutoCycle;浏览器扩展改用chrome.storage.sync;原生源码集成则用 Harness 自己的设置服务。
常见问题
Q: 这个插件需要 WebGPU 吗?老一点的电脑能用吗?
A: 需要。皮肤的海面完全跑在 WebGPU 上,没有 WebGPU 时背景不会显示,只剩玻璃配色。系统会自动识别低性能设备并降低网格精度与帧率,无需手动调节。
Q: 插件会收集或上传我的对话内容吗?
A: 不会。three.js、字体与所有渲染资源都打包在本地,没有任何 CDN、遥测或分析接口。偏好只存到浏览器的本地存储或宿主设置服务。
Q: 装上 DSH 插件后左下角按钮没出现怎么办?
A: 先确认 dsh web 与 dsh plugin add 指向同一个 profile,然后重启 dsh web 进程并做一次浏览器硬刷新。DSH 插件、浏览器扩展、静态安装器三种方式不要同时启用,会有重复渲染拦截。
Q: 怎么彻底卸载?
A: DSH 插件用 dsh plugin --profile web remove open-sea-skin;浏览器扩展在 chrome://extensions(Edge 在 edge://extensions)里移除;静态安装器用 --uninstall。本地偏好只是孤立数据,删除不影响其他功能。
Q: 必须用 DSH 插件方式吗?还有别的安装途径吗?
A: 不是必须。仓库还提供 Chrome/Edge 浏览器扩展(仅作用于 127.0.0.1 / localhost 上的 Harness)和一次性 curl 注入脚本(直接改 Harness 已构建的前端),以及把皮肤原生接入 Harness 源码的集成方式。
Q: 自动昼夜循环可以关掉吗?
A: 可以。手动拖「日光」滑块就会停在当前时间并自动关闭自动循环;想恢复只需再次开启自动循环开关即可。
Q: 浏览器扩展会影响其他本地开发网站吗?
A: 不会。扩展只匹配 127.0.0.1 和 localhost,并且在注入前会校验页面标题、root 节点与服务端启动标记,确认是 DeepSeek Harness 后才挂皮肤,其他本地项目保持原样。
Q: 玻璃不透明度能调到多低?
A: 范围固定 40%–90%,默认 72%。这是为了在深色与浅色主题下都保留足够的文字对比度,避免玻璃完全透明造成可读性问题。
上手难度
入门 — 单条 DSH 插件命令即可启用,左下角按钮提供图形化控制,不需要配置环境或阅读源码。
已知问题与限制
- 浏览器扩展最低支持 Chrome 113 / Edge 113,更早版本直接无法加载扩展(来源:
extension/manifest.json:7) - DSH 插件安装后必须重启
dsh web进程并刷新一次浏览器,否则左下角按钮不会显示(来源:docs/dsh-plugin.md:30-32) - 静态安装器必须在 Harness 停止状态下执行,且执行后需重新启动
dsh web;如执行后浏览器提示Failed to load plugins,先确认 Harness 进程是否仍在运行(来源:README.md:115-118) - 三种安装方式(DSH 插件、浏览器扩展、静态安装器)共享同一份 iframe 标识,但建议只启用一种,避免排查时混淆状态(来源:
docs/dsh-plugin.md:46-52) - 自动昼夜循环没有独立的总开关 UI,必须通过手动拖动「日光」并再启用反向动作恢复(来源:
shared/skin-core.js:333-339) - 渲染器只接受来自
window.parent与预期父域名的postMessage消息,其他来源的指令会被忽略(来源:docs/architecture.md:84-90)
Interactive website · 中文 · Architecture · Release guide
A self-contained WebGPU ocean skin for DeepSeek Harness. It keeps the original five-wave Gerstner/TSL look, adds a translucent Harness theme, and is available as a one-line DSH plugin, Harness-only Chrome/Edge extension, one-command static installer, or native Harness source integration.

Recommended — install as a DSH plugin
Install the complete local-only ocean runtime and lower-left quick controls directly from GitHub:
dsh plugin --profile web add 'github:d-dev0101/open-sea-skin#v1.2.1'
Restart dsh web, then use Skin settings at the lower left to adjust wave
size, daylight, 40% glass opacity, and the automatic day/night cycle. Remove it
with:
dsh plugin --profile web remove open-sea-skin
This package is tested with DeepSeek Harness 0.1.0-rc.6. Use the source
integration below only when you also want the controls embedded inside the
native General settings page. See the DSH installation and troubleshooting
guide for verification and recovery details.
Gallery
Every animation below is recorded from the native DeepSeek Harness integration at 40% glass opacity. The overview baseline is wave size 56 and daylight Afternoon (55).
1 — Dark Harness overview

2 — Light Harness overview

3 — Adjusting wave size
Daylight stays at Afternoon (55) while the wave control moves from moderate to calm, through high sea, and back to the baseline of 56.

4 — Daylight to sunset
Wave size stays at 56 while daylight moves smoothly from Midday to Dusk.

Install option 1 — Chrome or Edge extension
- Download and unzip the latest
open-sea-skin-extension-*.ziprelease, or clone this repository. - Open
chrome://extensions(Edge:edge://extensions) and enable Developer mode. - Select Load unpacked and choose this repository's
extension/folder. - Open DeepSeek Harness on
127.0.0.1orlocalhost, then reload it once.
The extension does not replace Chrome or Edge's new-tab page, change the
browser homepage, or interfere with an existing new-tab extension. It verifies
the Harness title, root, and server-injected boot marker before changing a page,
so other local development sites also remain untouched. Use the toolbar popup
to disable the Harness skin. The lower-left wave button opens sea-state,
daylight, and glass-opacity controls. Values are saved with
chrome.storage.sync.
Install option 2 — Harness static build (no source compilation)
Run this from any directory. It downloads the pinned v1.2.1 source archive
to a temporary directory, runs the installer, and removes the download when it
finishes. Stop Harness before running it, then start dsh web again, keep
that terminal process running, and reload the browser:
curl -fsSL https://raw.githubusercontent.com/d-dev0101/open-sea-skin/main/install.sh | bash
The script finds a built/installed Harness frontend, makes a local backup, copies the self-contained assets, and injects one marked loader block. If automatic detection cannot find the frontend, pass it explicitly:
curl -fsSL https://raw.githubusercontent.com/d-dev0101/open-sea-skin/main/install.sh | bash -s -- --dist /absolute/path/to/apps/web/dist
Re-run the bootstrap with --update after every Harness upgrade:
curl -fsSL https://raw.githubusercontent.com/d-dev0101/open-sea-skin/main/install.sh | bash -s -- --update
Remove only Open Sea's marker and assets with:
curl -fsSL https://raw.githubusercontent.com/d-dev0101/open-sea-skin/main/install.sh | bash -s -- --uninstall
The command is safe to copy while your terminal is in ~; it does not assume
that this repository already exists locally. You can inspect the bootstrap
script before running it. See
native-dist/README.md for clone-based installation,
detection, and recovery details.
If the browser says Failed to load plugins immediately after installation
or removal, first confirm that dsh web is still running. The static installer
changes files only; it does not start or keep the Harness server alive.
Native Harness source plugin
For a first-class General-settings row and layout slot, integrate the package into a Harness source checkout:
git clone https://github.com/deepseek-ai/deepseek-harness.git
bash harness-plugin/install-into-harness.sh /absolute/path/to/deepseek-harness
cd /absolute/path/to/deepseek-harness
corepack pnpm install
corepack pnpm run build
corepack pnpm dsh web
Use the native Skin settings action at the lower left for fast adjustments,
or open Settings → General → Open Sea Skin for every option. Both surfaces
use Harness settings, locale, slots, and reversible theme-token APIs; neither
depends on CSS-module hashes. The integration is tested against Harness commit
47f943859bef (2026-08-13) and deliberately stops if upstream anchors have
changed. More details are in harness-plugin/README.md.
What is included
- WebGPU + three.js 0.178.0 + TSL, five Gerstner waves, analytic normals, FBM detail, Fresnel sky reflection, sun glitter, foam, fog, sky/cloud band, bloom, and ACES tone mapping.
- A local-only runtime: three.js and Geist are vendored; the extension and installers make no CDN or analytics requests.
- 256×256 mesh (160×160 in low/reduced-motion mode), DPR cap 1.5, adaptive render scale 0.5–1.0, 60/30/20 FPS caps, hidden-tab pause, distance-based shader work skips, reduced skin bloom, and automatic low-end detection.
- Twelve-minute daylight cycle; manual daylight adjustment pins the selected time until automatic cycling is re-enabled.
- Shared host controller for the extension and static installer, with only the
persistence adapter changing (
chrome.storageversuslocalStorage). - Duplicate-render prevention across all installation methods, bilingual UI,
keyboard focus trapping, Escape close, ARIA labels, and
prefers-reduced-motionsupport. - A corrected layout stacking model: Settings stays above the conversation composer at wide aspect ratios, while the ocean remains behind every column.
site/ preserves the original CDN-backed showcase byte-for-byte. The optimized
self-contained runtime has its canonical source in shared/; npm run build
produces the three installable copies.
Development and verification
Node.js 20+ is required for repository checks:
npm run build
npm run check
npm run package:extension
The full browser acceptance run requires Chrome for Testing and Playwright:
npm ci
npx playwright install chromium
npm run test:browser
The launcher uses a persistent profile, --load-extension, and
ignoreDefaultArgs: ['--disable-extensions'], which is required because branded
Chrome 137+ removed the old extension-loading path. The four full-width README
GIFs are regenerated from a running native Harness with npm run capture;
FFmpeg is required for palette-optimized output.
Privacy and permissions
Open Sea Skin collects, transmits, sells, or shares no data. The extension
requests only storage plus access to http://127.0.0.1/* and
http://localhost/* so it can skin a local Harness page. It has no remote host
permission. See docs/privacy.md.
License
Project code is MIT licensed. three.js 0.178.0 remains under MIT; the self-hosted Geist fonts remain under SIL OFL 1.1. See THIRD_PARTY_NOTICES.md and the vendored license copies.