Back to home

Liu-ZA-81

dsh-theme-firefly

No description

Stars
0
Language
JavaScript
Created
Aug 16, 2026
Updated
Aug 16, 2026

Introduction

dsh-theme-firefly · 流萤主题

🌌 崩坏:星穹铁道「流萤」主题的 DeepSeek Harness Web UI 皮肤插件。 萤火绿霓虹配色 × 立绘/动态壁纸 × 开屏变身动画 × 萤火氛围粒子 × 背景音乐 × 打字音效。

让夜之城之外,星穹列车的萤火也为你点亮。🪰✨


✨ 功能特性

壁纸系统(图片 / 动态视频)

  • 全屏 cover 铺底,界面容器半透明让壁纸透出;左暗右亮渐变遮罩保证聊天区可读
  • 右下角「」按钮弹出常驻面板:
    • 类型:动态(mp4)/ 静态(图片),各自独立记忆当前壁纸
    • 模式:「切换」= 手动换一张并保持;「随机」= 自动随机轮换
    • 随机间隔:自定义分钟数(默认 5 分钟)
    • 点「确定」收起面板,所有设置实时生效并持久化

流萤配色

  • 深空海军蓝黑 × 萤火虫青绿(#00ff87 / #7dff9e)× 莹白文字
  • 覆盖 100+ 个 --dsw-* 设计令牌,随主题即时生效

开屏变身动画

  • 内嵌 GIF 居中淡入,带绿色辉光边框 + 「流萤 // FIREFLY」标题
  • 每次刷新播放,时长跟随 GIF,点击任意处或「点击跳过」可跳过
  • 尊重系统 prefers-reduced-motion,自动跳过

萤火氛围粒子

  • 右下角「」按钮分档:关 / 星点(12)/ 曳光(28)/ 流萤(80)
  • 数量切换带 0.9s 淡入淡出过渡,不陡然变化、不刷新页面
  • 每只萤火虫有独立尺寸、亮度、漂浮轨迹与呼吸式闪烁

背景音乐

  • 右下角「」按钮点击开/关,弹出迷你播放卡片
  • 支持 上一首 / 播放暂停 / 下一首 / 循环模式(单曲循环 → 列表循环 → 随机播放)
  • 当前曲目与循环模式持久化

打字音效

  • 聊天输入框打字时播放「咔哒 + 低频咚」的萤火质感按键音
  • Web Audio 实时合成,零音频文件;空格/回车音色更低;「」按钮开关

彩蛋

  • 开屏动画:输入框发送 SAM → 重播开屏变身动画(精确匹配,普通消息不误触)
  • 表情包GIF/表情包/ 目录,按对话内容触发,每回合最多一个,右下角弹出):
    • 你夸赞时 → 「开心」/「得意」(谢谢/太棒/厉害/绝了…)
    • 你确认开干时 → 「变身」(开始/开干/动手/走起/冲…)
    • 我确认时 → 「没错」(没错/正是/确实…)
    • 我需要你提供时 → 「期待」(发我/提供/给我…)
    • 我需要你确认时 → 「疑惑」(确认一下/要我…吗/可以吗…)

🎛️ 界面操作

右下角四个按钮(自右向左):

按钮功能
打字音效 开/关
氛围粒子分档(关/星点/曳光/流萤)
壁纸设置面板(类型 + 模式 + 随机间隔 + 确定)
背景音乐 开/关 + 播放卡片

🎨 灵感来源

  • 角色与主题:本主题致敬米哈游《崩坏:星穹铁道》中的角色 流萤(Firefly) 与其机甲 S.A.M. ——「完全燃烧」的变身、萤火虫般的荧光、以及那句「我将点燃大海」。
  • 音乐:默认曲目为 HOYO-MiX 出品的《使一颗心免于哀伤》(知更鸟演唱),曲库另含《在银河中孤独摇摆》《希望有羽毛和翅膀》《若我不曾见过太阳》。
  • 实现参考:客户端主题的「令牌层 + 身份层」架构与 cordis 插件结构,学习自 dsh-theme-cyberpunk2077(作者 Tommy00748),特此致谢。
  • 生态:DSH 插件目录 awesome-dsh-plugin

📁 目录结构

dsh-theme-firefly/
├── package.json            # dsh.client 声明(web 插件,注入 ui-theme 槽位)
├── lib/index.js            # 服务端占位
├── lib/client.template.js  # 浏览器端主题源码(含占位符,随仓库提交)
├── lib/client.js           # 构建产物(build.cjs 生成,含 base64 素材,git 忽略)
├── assets/                 # 壁纸:图片(jpg/png/webp) + mp4 动态壁纸
├── GIF/                    # 开屏动图(取第一个 .gif)
│   └── 表情包/             # 表情包 GIF(文件名即触发情绪:开心/得意/变身/没错/期待/疑惑)
├── music/                  # 背景音乐(mp3/ogg/m4a/wav),默认第一首「使一颗心免于哀伤」
├── build.cjs               # 构建:读取 client.template.js,把素材内嵌成 lib/client.js
├── LICENSE                 # MIT(仅代码)
├── .gitignore              # 忽略构建产物与第三方壁纸
└── README.md

🚀 快速开始

仓库不提交 lib/client.js(构建产物)。clone 后需先构建,再安装。

# 1. 构建:读取 lib/client.template.js,把素材内嵌成 lib/client.js
node build.cjs

# 2. 以 link 方式安装到 web profile(本插件声明了 dsh.bundle,会自动注册)
dsh plugin --profile web add "link:<本目录绝对路径>"

# 3. 重启 dsh web 生效

💡 默认开箱即用为静态壁纸(官方立绘)。如需动态壁纸,自行将已授权/原创的 .mp4 放入 assets/ 后再执行 node build.cjs

⚠️ 与其它主题(如赛博朋克主题)互斥:多个主题都会调用 ctx.theme.setTheme 并注入 !important 令牌样式,后加载的赢。建议同时只启用一个主题 (把其它主题的 patch 行注释掉即可,可随时恢复)。

卸载

dsh plugin --profile web remove dsh-theme-firefly
# 删除 cordis.patch.yml 里的 ui-theme-firefly 行,重启

🛠️ 自定义素材

DSH 只服务插件的 client.js 一个文件,因此 build.cjs 会把 assets/GIF/music/ 里的素材以 base64 内嵌进 lib/client.js

node build.cjs          # 在项目目录下运行;幂等,可重复执行
  • 壁纸assets/ 支持 .jpg/.jpeg/.png/.webp(静态)与 .mp4(动态)
  • 开屏动图GIF/ 目录取第一个 .gif
  • 音乐music/ 支持 .mp3/.ogg/.m4a/.wav,默认第一首为「使一颗心免于哀伤」

💡 体积建议:素材会 base64 内嵌进 JS 包,建议控制大小(mp3 ≤128kbps、图片 ≤500KB、 视频 ≤1080p),避免页面加载变慢。


🔧 技术实现

  1. 客户端插件机制:通过 window.__ModuleLoader__.load() 注册为 DSH 客户端模块, 导出 cordis 插件 { isPlugin, inject: ["theme"], apply }
  2. 设计令牌覆盖apply(ctx)ctx.theme.register({ id, colorScheme, tokens }) 向 ThemeRuntime 注册 --dsw-* 令牌并 setTheme 激活
  3. 身份层:注入 <style> 实现壁纸背景、粒子动画、开屏动画等;音频全部 Web Audio 实时合成,无外部资源依赖
  4. 壁纸/音乐渲染:动态壁纸用 <video muted loop autoplay>、静态用 CSS 背景层、 音乐用 <audio>;均以 base64 data-URI 内嵌

⚖️ 版权与合规(重要)

  • 代码:本项目源码采用 MIT 协议,欢迎自由使用与修改。
  • 素材
    • 仓库随代码开源的素材仅为米哈游 / HoYoverse / HOYO-MiX 官方内容: 音乐(如《使一颗心免于哀伤》等)、开屏 GIF、表情包 GIF,以及官方角色壁纸 (firefly-bg.jpgfirefly2.pngfirefly3.png)。米哈游对非商业同人二创较为友好, 不涉及商业盈利一般不予追究,但版权仍归米哈游所有。
    • 网络壁纸资源(部分静态图片与全部 mp4 动态壁纸,如「哲风壁纸」等第三方来源) 不随仓库分发。动态壁纸为可选功能:使用者自行将已授权/原创的 .mp4 放入 assets/ 后运行 build.cjs 即可启用;没有 mp4 时主题会自动回退为静态壁纸, 其余功能不受影响。

⚠️ 请勿将第三方壁纸资源随仓库公开分发;如需收录,请使用你自己的原创或已授权素材。

📄 免责声明

本项目为粉丝同人作品,与米哈游、HoYoverse、DeepSeek 无任何关联,也未获得官方授权。 仅用于技术学习与个人使用。如侵权请联系我删除。