🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

毛玻璃主题 lsaa4/dsh-custom-ui

DeepSeek Harnessv0.1.1
lsaa416 天前有提交已提供中文文档扫描:含敏感能力

毛玻璃风格DSH主题,含壁纸、字体定制与网易云音乐

33.6/100
综合分
5
GitHub 星标
44
npm 周下载
—/5
用户评分

数据截至 2026/10/18 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-glass-ui
npm 源 · dsh-glass-ui 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · ui
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 16 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-glass-ui @ 0.1.1
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/28 15:43:19

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 99 处,展示前 78 条)
  • 读取本地文件
    lib/index.js:56
    const raw = JSON.parse(readFileSync(configPath(), 'utf8'));
  • 写入本地文件
    lib/index.js:78
    mkdirSync(dataRoot(), { recursive: true });
  • 写入本地文件
    lib/index.js:80
    writeFileSync(tmp, JSON.stringify(config, null, 2), 'utf8');
  • 写入本地文件
    lib/index.js:81
    renameSync(tmp, configPath());
  • 读取本地文件
    lib/index.js:119
    if (!existsSync(dir))
  • 读取本地文件
    lib/index.js:122
    for (const name of readdirSync(dir)) {
  • 读取本地文件
    lib/index.js:128
    const ageMs = Date.now() - statSync(join(dir, name)).mtimeMs;
  • 删除本地文件
    lib/index.js:136
    rmSync(join(dir, name), { force: true });
  • 写入本地文件
    lib/index.js:192
    const out = createWriteStream(target, { flags: 'w' });
  • 写入本地文件
    lib/index.js:311
    mkdirSync(mediaDir(), { recursive: true });
  • 删除本地文件
    lib/index.js:318
    rmSync(tmp, { force: true });
  • 写入本地文件
    lib/index.js:321
    renameSync(tmp, target);
  • 删除本地文件
    lib/index.js:324
    rmSync(tmp, { force: true });
  • 删除本地文件
    lib/index.js:354
    rmSync(join(mediaDir(), rel), { force: true });
  • 读取本地文件
    lib/index.js:369
    size = statSync(file).size;
  • 读取本地文件
    lib/index.js:382
    const stream = createReadStream(file);
  • 删除本地文件
    lib/index.js:401
    rmSync(join(dir, name), { force: true });
  • 发起网络请求
    client/client.js:350
    const res = await fetch("/glass-ui/config", { cache: "no-store" });
  • 发起网络请求
    client/client.js:355
    const res = await fetch("/glass-ui/config", {
  • 发起网络请求
    client/client.js:364
    const res = await fetch("/glass-ui/media", {
  • 发起网络请求
    client/client.js:373
    const res = await fetch(url, { method: "DELETE" });
  • 发起网络请求
    client/client.js:377
    const res = await fetch("/glass-ui/clear-data", { method: "POST" });
  • 发起网络请求
    client/client.js:3044
    const res = await fetch("/netease/weapi", {
  • 读取本地文件
    lib/netease.js:18
    const raw = JSON.parse(readFileSync(join(home, 'data', 'glass-ui', 'config.json'), 'utf8'));
  • 读取本地文件
    lib/netease.js:99
    const raw = JSON.parse(readFileSync(cookiePath(), 'utf8'));
  • 写入本地文件
    lib/netease.js:109
    mkdirSync(join(cookiePath(), '..'), { recursive: true });
  • 写入本地文件
    lib/netease.js:111
    writeFileSync(tmp, JSON.stringify({ cookie }), 'utf8');
  • 写入本地文件
    lib/netease.js:112
    renameSync(tmp, cookiePath());
  • 写入本地文件
    lib/netease.js:116
    writeFileSync(cookiePath(), JSON.stringify({ cookie: '' }), 'utf8');
  • 读取本地文件
    lib/netease.js:143
    const raw = JSON.parse(readFileSync(join(home, 'data', 'glass-ui', 'config.json'), 'utf8'));
  • 发起网络请求
    lib/netease.js:153
    const res = await fetch(url, {
  • 发起网络请求
    lib/netease.js:153
    const res = await fetch(url, {
  • 发起网络请求
    lib/netease.js:264
    const res = await fetch(`${API_BASE}${path}`, {
  • 发起网络请求
    lib/netease.js:264
    const res = await fetch(`${API_BASE}${path}`, {
  • 发起网络请求
    lib/netease.js:292
    const res = await fetch(url, {
  • 发起网络请求
    lib/netease.js:292
    const res = await fetch(url, {
  • 请求外部主机music.163.com
    lib/netease.js:464
    const redirect = await fetch(`https://music.163.com/song/media/outer/url?id=${encodeURIComponent(id)}.mp3`, { redirect: 'manual', ...(agent !== undefi
  • 发起网络请求
    src/client/config.ts:87
    const res = await fetch('/glass-ui/config', { cache: 'no-store' })
  • 发起网络请求
    src/client/config.ts:93
    const res = await fetch('/glass-ui/config', {
  • 发起网络请求
    src/client/config.ts:106
    const res = await fetch('/glass-ui/media', {
  • 发起网络请求
    src/client/config.ts:116
    const res = await fetch(url, { method: 'DELETE' })
  • 发起网络请求
    src/client/config.ts:121
    const res = await fetch('/glass-ui/clear-data', { method: 'POST' })
  • 发起网络请求
    src/client/netease.ts:26
    const res = await fetch('/netease/weapi', {
  • 发起网络请求
    src/client/netease.ts:38
    const res = await fetch('/netease/account', { cache: 'no-store' })
  • 发起网络请求
    src/client/netease.ts:47
    await fetch('/netease/logout', { method: 'POST' })
  • 发起网络请求
    src/client/netease.ts:115
    const res = await fetch('/netease/cookie', {
  • 发起网络请求
    src/client/netease.ts:221
    const res = await fetch(`/netease/lyric?id=${id}`, { cache: 'no-store' })
  • 发起网络请求
    src/client/netease.ts:247
    const res = await fetch('/netease/hot-playlists', { cache: 'no-store' })
  • 读取本地文件
    src/index.ts:125
    const raw = JSON.parse(readFileSync(configPath(), 'utf8')) as Record<string, unknown>
  • 写入本地文件
    src/index.ts:146
    mkdirSync(dataRoot(), { recursive: true })
  • 写入本地文件
    src/index.ts:148
    writeFileSync(tmp, JSON.stringify(config, null, 2), 'utf8')
  • 写入本地文件
    src/index.ts:149
    renameSync(tmp, configPath())
  • 读取本地文件
    src/index.ts:188
    if (!existsSync(dir)) return
  • 读取本地文件
    src/index.ts:190
    for (const name of readdirSync(dir)) {
  • 读取本地文件
    src/index.ts:195
    const ageMs = Date.now() - statSync(join(dir, name)).mtimeMs
  • 删除本地文件
    src/index.ts:201
    rmSync(join(dir, name), { force: true })
  • 写入本地文件
    src/index.ts:266
    const out = createWriteStream(target, { flags: 'w' })
  • 写入本地文件
    src/index.ts:391
    mkdirSync(mediaDir(), { recursive: true })
  • 删除本地文件
    src/index.ts:398
    rmSync(tmp, { force: true })
  • 写入本地文件
    src/index.ts:401
    renameSync(tmp, target)
  • 删除本地文件
    src/index.ts:403
    rmSync(tmp, { force: true })
  • 删除本地文件
    src/index.ts:432
    rmSync(join(mediaDir(), rel), { force: true })
  • 读取本地文件
    src/index.ts:446
    size = statSync(file).size
  • 读取本地文件
    src/index.ts:458
    const stream = createReadStream(file)
  • 删除本地文件
    src/index.ts:477
    rmSync(join(dir, name), { force: true })
  • 读取本地文件
    src/netease.ts:23
    const raw = JSON.parse(readFileSync(join(home, 'data', 'glass-ui', 'config.json'), 'utf8')) as {
  • 读取本地文件
    src/netease.ts:119
    const raw = JSON.parse(readFileSync(cookiePath(), 'utf8')) as { cookie?: string }
  • 写入本地文件
    src/netease.ts:128
    mkdirSync(join(cookiePath(), '..'), { recursive: true })
  • 写入本地文件
    src/netease.ts:130
    writeFileSync(tmp, JSON.stringify({ cookie }), 'utf8')
  • 写入本地文件
    src/netease.ts:131
    renameSync(tmp, cookiePath())
  • 写入本地文件
    src/netease.ts:136
    writeFileSync(cookiePath(), JSON.stringify({ cookie: '' }), 'utf8')
  • 读取本地文件
    src/netease.ts:164
    const raw = JSON.parse(readFileSync(join(home, 'data', 'glass-ui', 'config.json'), 'utf8')) as {
  • 发起网络请求
    src/netease.ts:176
    const res = await fetch(url, {
  • 发起网络请求
    src/netease.ts:176
    const res = await fetch(url, {
  • 发起网络请求
    src/netease.ts:300
    const res = await fetch(`${API_BASE}${path}`, {
  • 发起网络请求
    src/netease.ts:300
    const res = await fetch(`${API_BASE}${path}`, {
  • 发起网络请求
    src/netease.ts:329
    const res = await fetch(url, {
  • 发起网络请求
    src/netease.ts:329
    const res = await fetch(url, {
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
涉及外部主机:music.163.com

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-ui-primitives
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

1 张 · 点击查看大图

功能亮点

  • 调节毛玻璃外观
  • 定制壁纸字体
  • 播放网易云音乐

README

由 DeepSeek 最新模型翻译生成
dsh-glass-ui 为 DeepSeek Harness (DSH) Web 打造的毛玻璃 UI 主题插件:整体布局保持原样,风格替换为透明毛玻璃;在 设置 → 自定义UI设计 中可实时调节。 界面预览 功能 - 毛玻璃风格:界面表面半透明 + 背景模糊(背景层 filter: blur,不改动布局层级,安全无副作用) - 透明度滑块:玻璃透明度 10%–95% 实时调节 - 模糊滑块:背景模糊半径 4–40px 实时调节 - 自定义字体:预设字体 + 任意字体族输入 + 上传字体文件(woff2/woff/ttf/otf,自动注入 @font-face) - 背景壁纸:上传图片(jpg/png/webp/gif/avif)或动态壁纸视频(mp4/webm/mov,≤1GB,流式写入磁盘, 自动循环播放) - 背景模式:无背景 / 图片背景 / 动态壁纸三选一;图片支持多图轮播(可调间隔)、遮罩(暗化提高可读性)与三种铺放方式(铺满 / 完整显示 / 原始大小),切换平滑过渡 - 网易云音乐:扫码或 Cookie 登录、我的歌单 / 每日推荐 / 热门歌单 / 搜索、播放队列,输入框信息栏实时显示滚动歌词(位置可调:信息栏内 / 最右 / 隐藏);支持 HTTP/SOCKS 代理与远程 API 服务器两种绕风控方案
展开完整文档(README 剩余 1 节)
dsh-glass-ui

为 DeepSeek Harness (DSH) Web 打造的毛玻璃 UI 主题插件:整体布局保持原样,风格替换为透明毛玻璃;在 设置 → 自定义UI设计 中可实时调节。

界面预览

功能

- 毛玻璃风格:界面表面半透明 + 背景模糊(背景层 filter: blur,不改动布局层级,安全无副作用)
- 透明度滑块:玻璃透明度 10%–95% 实时调节
- 模糊滑块:背景模糊半径 4–40px 实时调节
- 自定义字体:预设字体 + 任意字体族输入 + 上传字体文件(woff2/woff/ttf/otf,自动注入 @font-face)
- 背景壁纸:上传图片(jpg/png/webp/gif/avif)或动态壁纸视频(mp4/webm/mov,≤1GB,流式写入磁盘, 自动循环播放)
- 背景模式:无背景 / 图片背景 / 动态壁纸三选一;图片支持多图轮播(可调间隔)、遮罩(暗化提高可读性)与三种铺放方式(铺满 / 完整显示 / 原始大小),切换平滑过渡
- 网易云音乐:扫码或 Cookie 登录、我的歌单 / 每日推荐 / 热门歌单 / 搜索、播放队列,输入框信息栏实时显示滚动歌词(位置可调:信息栏内 / 最右 / 隐藏);支持 HTTP/SOCKS 代理与远程 API 服务器两种绕风控方案
- 柔和动画:界面渐渐显现、交互过渡温柔平滑(无 / 轻柔 / 明显三档,支持 prefers-reduced-motion)
- 自定义 CSS:高级用户可粘贴任意样式,即时生效并自动保存
- 配置分享:一键导出 / 导入配置 JSON
- 首屏无闪烁:host 端在 index.html 注入已保存的配置,刷新页面立即呈现玻璃效果
- 配置持久化于 $DSH_HOME/data/glass-ui/config.json;上传的媒体由 host 自动垃圾回收(未被配置引用的文件会被清理),卸载插件后自动恢复默认外观

安装

插件只从本仓库分发,不经过 npm:

dsh plugin --profile web add github:lsaa4/dsh-custom-ui

仓库里已提交构建产物(lib/ 与 client/),安装后无需自行构建。重启 dsh web,打开 设置 → 自定义UI设计 即可开始调节。

卸载

dsh plugin --profile web remove dsh-glass-ui

重启后界面恢复默认。

使用

1. 打开 设置(左下角齿轮)→ 侧边栏 自定义UI设计
2. 拖动 透明度 / 模糊 滑块,实时预览毛玻璃效果
3. 字体:点选预设,或输入自定义字体族,或上传字体文件
4. 背景壁纸:选择 无/图片/动态壁纸,上传你的素材;图片可多张轮播
5. 网易云音乐:扫码登录(或粘贴网页版 Cookie),浏览歌单 / 每日推荐 / 热门歌单 / 搜索后点击歌曲即播放,歌词实时显示在输入框信息栏
6. 所有修改即时生效、自动保存(状态显示"已保存")

开发

pnpm install
pnpm typecheck
pnpm build # tsc (host) + tsdown (client) + __ModuleLoader__ 包装

本地安装到 web profile:

cd "$DSH_HOME/profiles/web"
pnpm add "link:<本仓库绝对路径>"
然后把 "dsh-glass-ui" 追加进 package.json 的 dsh.profile.bundles

迭代 client 时可 npx tsdown --watch,页面经 dsh-client-hmr 热更新;修改 host 或 manifest 后需重启 dsh web。

技术要点

| 机制 | 说明 |
| 浏览器半契约 | window.__ModuleLoader__.load({ id, factory }),导出 name / inject / apply(ctx) |
| 表面透明化 | ctx.theme.overrideTokens() 把 --dsw-alias-bg- 等覆盖为 var(--glass-surface-)(值跟随 :root 变量,滑块只改变量) |
| 玻璃模糊 | 背景层 filter: blur(var(--glass-blur)) + 表面半透明 —— 刻意不用 backdrop-filter(它会改变 #root 的 containing block,破坏内部 fixed 元素布局) |
| 壁纸切换 | 图片双缓冲交叉淡入淡出;视频先用隐藏 probe 预载到 loadeddata 再淡入(避免黑闪),旧视频随后释放 |
| 配置持久化 | host 半路由 GET/PUT /glass-ui/config,原子写入 $DSH_HOME/data/glass-ui/config.json |
| 媒体上传 | POST /glass-ui/media(raw body + x-media-kind),白名单校验类型/扩展名/大小,流式落盘;GET/HEAD/DELETE /glass-ui/media/<file> 流式服务与删除;保存配置与启动时自动 GC 未引用文件 |
| 首屏引导 | webServer.tapIndex() 注入 ,刷新无闪烁 |
| 网易云代理 | POST /netease/weapi(AES+RSA 加密)、/netease/lyric、/netease/hot-playlists、/netease/search、/netease/song-url、/netease/account、/netease/logout、/netease/cookie;直连被墙时可配 HTTP/SOCKS 代理或远程 NeteaseCloudMusicApi 服务器 |
| 动画 | body.dsh-glass-anim-* 门控的渐显/过渡,尊重 prefers-reduced-motion |

已知限制

- 主题 token 覆盖无完整性校验(DSH 官方标注):漏覆盖的变量回退内置值
- 动态壁纸为全屏视频背景,大分辨率视频请控制体积(上限 1GB)
- 多主题插件并存时由最后激活者生效;设置面板提供「恢复默认」一键还原
- token 名称随 DSH 版本迭代可能微调,升级 DSH 后如配色异常请重新构建
- 网易云歌曲直链受版权/VIP 限制,不可播的歌曲会提示并跳过
- 导出/导入配置只含 URL 引用,不含媒体文件本身(跨机器导入需重新上传素材)

License

MIT
预览分享卡片长什么样 ↓lsaa4/dsh-custom-ui
分享 · DeepSeek Harness Hub
lsaa4/dsh-custom-ui

毛玻璃风格DSH主题,含壁纸、字体定制与网易云音乐

这是你的仓库?认领条目

回到顶部