Pular para o conteúdo principal
C

dsh-whale-cursor

chen-en-run/dsh-whale-cursor

Cursor skins with a whale-girl white arrow and a maid-girl pointer, applied inside the Harness UI instantly or written into Windows system cursors with one-click restore. Its /state route is mounted with webServer.register without DSH Host/Origin admission, so a web page open in your browser can change the cursor settings.

Instalar

dsh plugin --profile web add github:chen-en-run/dsh-whale-cursor

README

鲸鱼娘鼠标皮肤 · dsh-whale-cursor

给 DeepSeek Harness 换一套鼠标皮肤:白色箭头、鲸鱼尾鳍、几颗小气泡,或者直接把一张立绘做成指针。 既能在 DSH 界面内 即时生效,也能一键写进 Windows 系统光标,随时还原。

箭头        链接/手型        文本 I 型
  ↗            ☝              I

两套皮肤

安装

插件市场:打开 DSH 的插件市场,搜索「鲸鱼娘鼠标皮肤」或 dsh-whale-cursor 安装即可。

命令行:

dsh plugin add https://github.com/Chen-en-run/dsh-whale-cursor

装完按 Ctrl+R 刷新页面,入口在 设置 → 鼠标皮肤。

功能

  • DSH 内即时生效:打开开关,当前窗口的箭头、链接手型、文本 I 型全部换掉,不用重启。
  • Windows 系统光标:同一套图写进注册表,桌面、浏览器、所有程序一起换;应用前自动备份,一键还原。
  • 皮肤系统:设置页里有皮肤库,现在有「鲸鱼娘 · 白羽箭头」和「鲸尾蓝发的梦幻女仆少女」两套,结构上可以继续加别的形象。
  • 两种画法都支持:矢量绘制的皮肤放大也清晰;位图皮肤直接读包里的 PNG,任意立绘都能做成指针。
  • 零运行时依赖:PNG、CUR 编码、注册表操作全部自带,不依赖 sharp / canvas。

入口:设置 → 鼠标皮肤。

使用

  1. 打开 设置 → 鼠标皮肤。
  2. 「在 DSH 中启用」默认是开着的,装好刷新页面就能看到新指针;关掉开关即可恢复系统箭头。
  3. 想连系统一起换,点「应用到系统」。Windows 会先记住你原来的光标设置。
  4. 想改回去,点「还原系统光标」;只关 DSH 的话关掉开关就行。

系统光标只接管三个:Arrow、Hand、IBeam,其余(等待、调整大小、移动等)保持系统原样。 备份文件:%USERPROFILE%\.dsh\whale-cursor\cursors-backup.reg。

指针尺寸跟随 Windows 的系统光标设置:插件固定输出 32 / 48 两档位图,系统放大光标时会挑选最接近的一档再缩放,和系统自带光标的行为一致。想改指针大小请到「设置 → 辅助功能 → 鼠标指针」,插件不会去改写你的系统设置。

皮肤系统怎么扩展

一个皮肤就是一个模块,导出 meta 和 roles:

// lib/skins/my-character.js
export const meta = {
  id: 'my-character',
  name: { zh: '我的角色', en: 'My character' },
  tagline: { zh: '一句话描述', en: 'One line' },
  description: { zh: '更长的描述', en: 'Longer description' },
  author: 'you',
  accent: '#8FCEF3',
};

export const roles = {
  arrow: { hotspot: [2, 1], draw(r) { /* r.fillPolygon(...) */ } },
  hand:  { hotspot: [10, 2], draw(r) { /* ... */ } },
  text:  { hotspot: [16, 16], draw(r) { /* ... */ } },
};

然后在 lib/skins/index.js 里 import 并加入 SKINS 数组。设置页的皮肤库、系统光标的写入都会自动跟随,不需要改客户端代码。

draw(r) 拿到的是 32×32 逻辑坐标系的 Raster:

方法说明
r.fillPolygon(points, color)填充多边形
r.strokePolyline(points, width, color, closed?)描边折线,端点带圆角
r.fillCircle(cx, cy, r, color)圆
r.fillEllipse(cx, cy, rx, ry, color)椭圆
r.drawImage(png, { x, y, w, h }, { tint?, alpha? })贴一张 RGBA 位图(面积平均采样,可染成纯色做描边)

颜色支持 #rgb / #rrggbb / #rrggbbaa。矢量皮肤按目标尺寸重新渲染而不是缩放位图:运行时 DSH 内用 32px,系统光标用 32 / 48 两档。

位图皮肤

「鲸尾蓝发的梦幻女仆少女」就是位图皮肤,可以照着抄:

立绘做成指针

  1. 把原图处理成透明背景的 PNG,放进 lib/skins/assets/。
  2. 皮肤模块里 decodePng(fs.readFileSync(...)) 读一次并缓存(lib/png.js 自带解码器)。
  3. draw(r) 里 r.drawImage(artwork, frame) 贴到 32 单位画布上。

原图去白底那一步在 tools/build-maid.mjs:从四边泛洪只清掉与外部连通的近白像素(角色身上的白围裙、白头饰不会被误伤),再把边界像素降透明度去掉白边光晕,最后裁到外接框、缩到 512px。跑法:

node tools/build-maid.mjs path/to/原图.png   # 写 lib/skins/assets/maid-girl.png

tools/ 下的脚本只是开发期用的,需要本机装好 sharp(npm i -g sharp 或放在任意能 require 到的地方,用 DSH_SHARP_BASE 指向那个 package.json)。插件运行时完全不依赖它。

开发

node tools/preview.mjs   # 渲染各皮肤各尺寸 PNG + 拼版预览到 tools/out
node tools/smoke.mjs     # 离线跑一遍宿主路由、生成 .cur、校验文件

tools/preview.mjs 的输出里 <皮肤>-sheet.png 是 128px 原图和 32px 最近邻放大的对照,方便检查小尺寸下的可读性。

目录:

index.js            宿主半边:HTTP 路由 /dsh-whale-cursor-7a1c/state
client.js           客户端半边:设置页 + 注入光标 CSS
lib/raster.js       多边形/圆/椭圆的超采样光栅器,以及位图贴图
lib/png.js          PNG 编解码(zlib)
lib/cur.js          Windows .cur 编码
lib/system.js       注册表读写、备份还原、刷新光标
lib/skins/          皮肤注册表与具体形象
lib/skins/assets/   位图皮肤的素材
locale/             插件元数据(设置页导航里的标题与描述)
assets/             商店图标与截图

实现说明

  • DSH 内:客户端通过 ctx.styles.insert 注入 cursor:url(...) 规则,选择器覆盖 html body, html body *,并给按钮/链接、输入框分别换上手型与 I 型图;规则带 !important,才压得住组件自己的 cursor:pointer。三张图都是宿主渲染好的 32px PNG data URL,热点来自 assets[role].hotspot。指针大小由 Windows 的光标设置决定,浏览器会按系统光标尺寸缩放这张图。
  • 系统:渲染 32 / 48 两档写成 .cur,用 reg add 写 HKCU\Control Panel\Cursors,再调用 SystemParametersInfo(SPI_SETCURSORS) 刷新;失败时回退 rundll32 user32.dll,UpdatePerUserSystemParameters。旧版本写过的 CursorBaseSize 会在插件启动时按 cursor-meta.json 还原一次。
  • .cur 的坑:ICONDIRENTRY 的 wPlanes / wBitCount 字段在光标文件里存的是热点坐标,图像数据是裸 DIB——写错的话文件看着正常,但 LoadCursorFromFile 返回 0。

已知限制

  • 系统光标部分仅支持 Windows;其他平台只提供 DSH 内的皮肤。
  • 只接管箭头 / 手型 / I 型三个光标,忙碌、调整大小等仍是系统光标(避免影响拖拽手感)。
  • 指针尺寸不由插件控制:浏览器会把 cursor:url() 按系统的光标大小缩放,所以改大小请用 Windows 的指针设置。

License

MIT

Plugins relacionados