dsh-virus-cat 🐈⬛
一只住在桌面上的猫:平时蹲在角落,点它会喵;连着点 9 下就"失控",按一条 37.6 秒的音轨演完整段(消失 → 视频 → 上升 → 乱撞 → 猫堆 → 三只分身 → 四只分身 → 消失),演完藏 1.4 秒再回到原位。
待机的小猫
演出中:发光上升
四只分身
设置面板
截图仅示意。素材(猫图 / 视频 / 音频)随仓库提供,可自行替换(见下文「换素材」)。
安装
方式一:一键脚本(推荐)
git clone https://github.com/xixixi-114514/dsh-virus-cat.git
cd dsh-virus-cat
powershell -ExecutionPolicy Bypass -File install.ps1
脚本会做三件事:把仓库复制到 %USERPROFILE%\.dsh\dsh-virus-cat、在 %USERPROFILE%\.dsh\profiles\desktop\node_modules 建目录联接、把 dsh-virus-cat 写进该 profile 的 bundles 与 dependencies。
装在别的 profile 上用 -ProfileName 名字;卸载用 -Uninstall。
⚠️ 改了代码要重跑一次 install.ps1:DSH(Electron)加载插件时会先 fs.realpath 解析目录联接,拿到的是 %USERPROFILE%\.dsh\dsh-virus-cat 那份真实副本,所以「联接 = 改源码即时生效」只在独立版(启动猫.cmd 直接读源码)成立。插件版想拿到新代码,重跑一次脚本把副本刷一下即可(它只复制文件,不会重复注册)。
方式二:只要独立版(不装插件)
git clone https://github.com/xixixi-114514/dsh-virus-cat.git
cd dsh-virus-cat
.\启动猫.cmd
需要本机有 Electron(默认用 %USERPROFILE%\.dsh\electron\electron.exe,可用环境变量 DSH_VC_ELECTRON 指定)。
怎么用
| 方式 | 操作 |
|---|
| 独立运行 | 双击 启动猫.cmd(正常模式)或 启动猫-绿幕录制.cmd(绿幕模式,录屏用)。脚本会先关掉已经在跑的猫,不会出现两只 |
| 作为 DSH 插件 | 已在 ~/.dsh/profiles/desktop 里注册,重启 DSH 后自动启动,不用点脚本。改了代码要重跑 install.ps1 才会生效 |
猫在桌面上的操作:
- 拖动:按住猫身拖到任意位置(按下后移动超过 8px 才算拖,不然算点击),松手有速度会甩出去并 Q 弹反弹
- 点击:喵一声、压一下;连点累计(叫声可在菜单里换成自己的音效文件)
- 右上角三横杠:鼠标靠近猫才出现,点开是设置面板
- 加自己的音效:双击
打开音效文件夹.cmd,把音频丢进去,菜单「叫声」里就会多出按钮(见下文)
连点规则
- 每下点击间隔 < 0.4 秒才累加;超过 0.4 秒从头数
- 停手 0.4 秒自动清零
- 点到第 9 下开始整段演出
完整流程(第二段音频开始记 t=0)
| 阶段 | 时间 | 表现 |
|---|
| 9 下点击 | — | 猫静悄悄消失 |
| 消失 | 2.0s | 窗口隐藏 |
| 第一段 | +0.0s | 出现在下方中间,播 spin1.mp4(带原声),不发光、不移动 |
| 第二段 | +7.64s | 开始上升 + 画面烧白;音频 scene2345678.mp3 从头串到尾 |
| 第三段 | +12.59s | 白光剪影 + 循环 spin2.mp4(静音),在中心 476px 方块里极速乱撞,碰边随机拐 15°~90° |
| 第四段 | +24.14s | 瞬移到屏幕正中,冒出 90 只小猫堆,旋转猫永远最上层 |
| 第五段 | +25.73s | 猫堆散掉,中间那只不发光但继续转 |
| 第六段 | +28.71s | 0.2s 静态 → 上方多一只,两只一起播旋转视频 → 结尾 0.2s 变静态并亮出左下 30° 那只 |
| 第七段 | +31.94s | 0.2s 静态 → 三只一起播 → 结尾 0.2s 变静态并亮出右下 30° 那只(共四只) |
| 第八段 | +35.22s | 0.2s 静态 → 四只一起播 → 提前 0.4s 全部消失并藏起猫 |
| 收尾 | +37.6s | 音频放完后再等 1 秒,猫重新出现在原位 |
四只分身的位置:上方 (768,156)、正中 (768,456)、左下 (508,606)、右下 (1028,606),距离中心都是 300px。
设置菜单
鼠标靠近猫 → 右上角出现三横杠 → 点开。面板固定在猫咪初始位置上方,不跟着猫跑;鼠标离开 0.45 秒自动收起(演出期间不收起):
| 项目 | 说明 |
|---|
| 音量 | 0~100%,实时生效 |
| 体型 | 60%~180%,猫窗口按比例缩放 |
| 叫声 | 内置「合成喵」+ 你放进 assets/audio/sounds/ 的每个音频文件各一个按钮,点哪个用哪个(会立刻试听一声) |
| 平时隐身 | 勾上后猫只在鼠标靠近时出现(演出的 37 秒期间强制可见) |
| 录屏用绿幕底 | 勾上立刻变纯绿底,让"窗口捕获"式录屏也能拍到猫 |
| ⏹ 停止并回到初始状态 | 演出到一半不想看了就点它:音乐/视频立刻停掉、所有阶段中断、猫回到初始位置变回普通小猫 |
设置存在 runtime/electron-helper/settings.json。绿幕开关不写进文件,下次启动仍是正常透明猫。
加自己的音效(叫声)
- 双击
打开音效文件夹.cmd(或直接进 runtime/electron-helper/assets/audio/sounds/);
- 把 mp3 / wav / ogg / m4a / flac 丢进去,文件名就是按钮名;
- 鼠标靠近猫 → 点三横杠 → 「叫声」那行会多出你的按钮,点一下即生效并试听。
选中项记在 settings.json 的 meow 字段(存的是文件名),重启后保持;把文件删掉会自动退回「合成喵」。
每点一下猫播一次,建议 0.5~1.5 秒一声,太长会叠在一起。
演出期间:初始位置(左下角)会固定出现一个三横杠,猫跑到屏幕中间也能点开菜单;面板里的「停止并回到初始状态」= 直接收摊回原位(不是暂停)。
待机动作
安静待机 2 分钟之后,猫会在原地自己播放第二段旋转视频(只走半段内容 + 0.6 倍慢放,约 10.5 秒),静音,放完回到静态小猫,然后继续循环:
- 期间点它一下(或拖它、开菜单、触发整段演出)立刻回到静态小猫,并重新开始计时;
- 位置不动、不发光、不出声,就是"自己在原地转一会儿"。
可调:
| 变量 | 默认 | 作用 |
|---|
DSH_VC_IDLE_ANIM | 120000 | 安静多久后开始待机动作(毫秒,默认 2 分钟) |
DSH_VC_IDLE_LEN | 10500 | 待机动作持续多久(毫秒,默认=半段/0.6 倍速) |
DSH_VC_IDLE_RATE | 0.6 | 待机动作的播放倍速(越小越慢) |
录屏拍不到猫?
猫是透明 + 置顶 + 不可激活的分层窗口:
- 「窗口捕获」式录制(Xbox 游戏栏、剪映窗口录制、OBS 窗口采集)只合成选中的那个窗口 → 拍不到猫
- 「全屏 / 显示器 / 区域采集」(OBS 显示器采集、系统区域录像、
ffmpeg -f gdigrab)→ 能拍到
要在窗口捕获里也拍到,就用绿幕模式:菜单勾「录屏用绿幕底」,或双击 启动猫-绿幕录制.cmd,后期把绿幕抠掉。
可调环境变量
| 变量 | 默认 | 作用 |
|---|
DSH_VC_STANDALONE | — | 1 = 独立运行(不接管宿主管道) |
DSH_VC_RECBG | 空 | 录制底色:green / black / #RRGGBB |
DSH_VC_LOG | %USERPROFILE%\.dsh\dsh-virus-cat\helper.log | 日志路径 |
DSH_VC_EXIT_AFTER_MS | — | 到点自动退出(测试用) |
DSH_VC_TRAIL_COUNT / _SPRITE / _MS | 10 / 132 / 4200 | 已停用的"复制猫"参数 |
DSH_VC_CLICKGAP | 400 | 连点允许的最大间隔(ms) |
DSH_VC_IMG_LEAD | 300 | 第五段结束前多久换静态图 |
DSH_VC_S6STATIC / S7STATIC / S8STATIC | 200 | 各段开头静态保持时长 |
DSH_VC_S6ENDLEAD / S7ENDLEAD | 200 | 各段结尾提前换静态 |
DSH_VC_S8ENDLEAD | 400 | 第八段提前多少毫秒消失 |
DSH_VC_POST8 | 1000 | 收工后隔多久重新出现 |
DSH_VC_LLANG / LRANG | 30 | 左下 / 右下分身的角度(度) |
文件结构
dsh-virus-cat/
├─ install.ps1 ← 一键装进 DSH profile(-Uninstall 卸载)
├─ LICENSE / docs/ ← MIT 协议、截图
├─ 启动猫.cmd / 启动猫-绿幕录制.cmd / 打开音效文件夹.cmd
├─ package.json / cordis.patch.yml / lib/index.js ← DSH 插件外壳
└─ runtime/electron-helper/
├─ main.js 主进程:窗口、位置、阶段调度、菜单、设置
├─ renderer.js 渲染:猫、视频、猫堆、分身、音效、菜单面板
├─ preload.js IPC 桥
├─ settings.json
└─ assets/
├─ cat.png 初始静态猫
├─ video/spin1.mp4 第一段视频(带原声)
├─ video/spin2.mp4 第二段旋转视频(循环、静音)
├─ audio/scene2345678.mp3 37.6s 整条音轨
└─ audio/sounds/ ← 放你自己的喵叫 / 音效(自动出现在菜单「叫声」里)
换素材
| 想换什么 | 放哪 |
|---|
| 待机的小猫 | 覆盖 runtime/electron-helper/assets/cat.png(透明背景 PNG,建议竖图 400~600px 高) |
| 第一段 / 旋转视频 | 覆盖 assets/video/spin1.mp4、spin2.mp4(纯绿背景 #00fe00,程序会在播放时实时抠掉绿色) |
| 演出音轨 | 覆盖 assets/audio/scene2345678.mp3,然后按第 24.14s / 25.73s / 28.71s / 31.94s / 35.22s 这几个位置改 main.js 顶部的 DASH_BASE / AUDIO4_MS / AUDIO5_MS / AUDIO6_MS / AUDIO7_MS / AUDIO8_MS |
| 喵叫 | 丢进 assets/audio/sounds/(见上文「加自己的音效」) |
素材来源
仓库里的猫图、视频、音轨来自作者自己的剪辑素材,仅用于演示;MIT 协议只覆盖代码,不覆盖这些素材。二次分发请自行替换成你有权使用的素材。
已知限制
- 插件版改动后需要重启 DSH 才会加载新的宿主代码;改
runtime/ 里的渲染代码只要重启 helper 即可
- 猫进程是独立 Electron 实例,约 150MB 内存,属正常范围