跳到正文

tonychuhai

Cove

Mac 桌面上的活场景:一个能钓鱼的水族箱,一只追着鼠标扫帚咬的垂耳兔。开源,macOS,Three.js。

README 已保存到本站,可直接阅读

Documentation snapshot

README 快照

本页保存的是公开项目资料快照,阅读过程不需要连接 GitHub。

Cove

English

https://github.com/user-attachments/assets/675e99c0-0e4f-43cf-b887-8cfe9d6ef589

https://github.com/user-attachments/assets/dea84ad3-d054-4328-b521-40fcbdb68cec

https://github.com/user-attachments/assets/00aa7a90-b081-4724-a405-42f3d7d9ed08

Mac 桌面上的活场景。四个场景,菜单栏一键切换:

  • Riverscape 鱼缸 —— 一缸会认鼠标的鱼。鼠标是一根钓线,停在鱼群边上会有鱼咬钩,提到屏幕顶端就能把它拎出来再放回去。
  • Bunny 兔子 —— 一只住在阳光房间里的垂耳兔。鼠标是一把小扫帚,挥一挥它就追着咬;停下来慢慢摸它,是抚摸。会记住亲密度和心情。
  • Muse 互动换装 —— 点击人物转一圈,在日常、上海、伦敦、东京四套穿搭间切换,城市背景同步过渡。
  • Critters 纸上小伙伴 —— 一群用线条画出来的小动物。鼠标靠近,附近的会转头盯着你;离得远的打哈欠、说小话。菜单栏可以换一批。

全部本地渲染(Three.js / WebGL2 与 Canvas 2D),不联网、不要账号、不要任何权限。目前只支持 macOS 13 及以上。

安装

用 Codex 一键安装

打开 Codex(终端里输入 codex;用 Cursor 或 Claude Code 也一样),把下面这段话整段粘贴给它:

帮我安装 Cove 桌面壁纸:
1. 先检查 Xcode 命令行工具装没装(swiftc --version),没有就运行 xcode-select --install 并等它完成;
2. 把 https://github.com/tonychuhai/cove.git 克隆到 ~/Documents/code/cove;
3. 进入该目录运行 sh wallpaper/install.sh;
4. 装完告诉我菜单栏图标在哪、怎么切换场景。

它会拉代码、编译、装到 ~/Applications/Cove.app,并设为登录自启。第一帧几秒后出现。App 会把当前场景的一帧设为桌面图片垫在动画下面——锁屏、调度中心看到的就是它,切场景后几秒会跟着换。不想让它碰桌面图片:defaults write com.tonyzhu.cove still -bool false。

手动安装

xcode-select --install        # 已装过可跳过
git clone https://github.com/tonychuhai/cove.git && cd cove
sh wallpaper/install.sh

更新:git pull 之后再跑一次 sh wallpaper/install.sh。 卸载:sh wallpaper/uninstall.sh,然后在系统设置里换回你原来的壁纸。

怎么玩

左侧竖条一键换场景,菜单栏图标也可以:

菜单作用
Feed鱼缸撒一把鱼食;兔子放一根胡萝卜
Change outfit · 转身换装Muse 转身切换下一套穿搭
New friends · 换一批纸上小伙伴换一批新面孔
Pause / Resume暂停 / 继续,选择会记住
Scene切换 Riverscape / Bunny / Muse / Critters
Quit退出,直到下次登录或手动打开

鱼缸:把钓线停在鱼旁边等它咬钩;上钩后鱼会拽线乱窜,把鼠标提到屏幕最顶端停一秒多就”收鱼”,随后放生;猛甩鼠标鱼会脱钩。空钩提出水面半秒自动换饵。

兔子:挥动鼠标,它先竖耳,再蹦过来对着扫帚头起跳、咬住、甩头;连咬三口会得意地歇一会儿。扫帚不动它就过来闻闻;没人理会洗脸、溜达,四分钟后趴下睡觉,鼠标靠近就醒。

Muse:点击人物或右下角「转身换装」,也可点左下角色板选择穿搭。转到背面时换装,转回正面后停住;会记住上次穿搭。人物使用按参考图生成的八方向照片序列,并非可自由旋转的 3D 模型。

纸上小伙伴:鼠标移过去,周围 3×3 格子里的小动物会转头看你;再近一点会眯眼被摸。点一下谁,谁就开心地蹦一下。菜单栏「换一批」换新朋友,这一批会记住。十五个物种,每一笔都是代码画的。

桌面图标、点击、拖拽一切照常,壁纸不拦截鼠标事件。左侧切换条和 Muse / 纸上小伙伴只旁听鼠标左键的按下与松开(不需要辅助功能权限,Finder 照常收到点击),仅响应未被窗口遮挡的桌面短点击,拖拽不触发。

常见问题

耗电吗? 比静态壁纸多一点。壁纸完全露出时最高 60 fps(电池 30),被窗口盖住大半降到 20,几乎全盖住就停,低电量模式、锁屏、合盖时不画。

会监听键盘吗? 不会。只读光标位置、窗口位置(用来判断露出多少),以及左键的按下松开(用来点切换条),不记录、不上传。

多显示器? 每块屏一个独立场景,Feed 对所有屏生效。

画面不动了? 打开菜单看状态行,多半是被盖住、低电量或开了”减弱动态效果”(此时会以暂停状态启动,点 Resume 即可)。

锁屏时鱼怎么不动? 锁屏画面是系统画的,第三方窗口到不了那一层,Cove 只能把当前场景的一帧交给它当背景。切场景后约 3 秒这张图会跟着换。旧版本把它存在 ~/Pictures/Cove.png,可以删掉。

浏览器里试试

需要 Node.js 20+,项目目录下运行 npm start,打开 http://127.0.0.1:8080 是鱼缸,/scenes/bunny/ 是兔子,/scenes/muse/ 是互动换装,/scenes/critters/ 是纸上小伙伴。浏览器版可以点击:点水面撒食,兔子那边有喂食 / 抚摸 / 逗它 / 休息按钮,纸上小伙伴点「换一批」或按空格。端口被占就 PORT=8081 npm start。

开发

位置内容
scenes/riverscape/鱼缸:src/fish*.js 鱼的解剖与行为,src/tackle.js 钓线
scenes/bunny/兔子:src/scene.js 房间,src/rabbit.js 兔子,src/broom.js 扫帚,src/pet-state.js 记忆
scenes/muse/互动换装:透明人物图集、城市背景、转身状态与按需绘制
scenes/critters/纸上小伙伴:物种、手绘线条、注视与随机小动作
wallpaper/Mac App(Swift,一个 WebView 放在桌面层)与安装 / 卸载脚本
vendor/随包附带的 Three.js

npm run check 做语法检查,npm test 跑鱼群行为、渲染预算、植物几何、Muse 换装和纸上小伙伴的无头测试。壁纸日志在 /tmp/cove.log,给进程发 SIGUSR1 会把第一块屏的画面存到 /tmp/cove.png。新场景放在 scenes/<名字>/,在 wallpaper/Wallpaper.swift 的 habitats 列表里登记一行即可出现在 Scene 菜单。

致谢与许可

Cove 以 AGPL-3.0 开源:可以自由使用、修改、分发,改了要开源,拿去做网络服务也要开源。

Cove 基于 Chase Lean 的 Desktop Habitats:Riverscape 鱼缸的水、植物、鱼,以及 macOS 壁纸 App 都是他的工作,MIT 协议,声明保留在 NOTICE;钓线、青鳉、兔子场景、Muse 互动换装、纸上小伙伴和场景切换是 Cove 加的。纸上小伙伴改编自 GordenSun 的 little-critters。

Three.js 0.180.0 以 MIT 附带。石头、木头、沙子纹理来自 Poly Haven(CC0):Rock Boulder Dry、Rough Wood、Sand 01。

Official distribution

获取与安装

暂未发现可确认的官方软件包地址

当前 README 快照没有出现 npm、PyPI、Crates.io、pub.dev 等官方包页链接。本站不会根据仓库名称猜测下载地址。

本站不托管项目文件;需要安装时,请以项目维护者发布的官方文档为准。

使用前核验

本站保存公开资料用于阅读,不代表安全审计或功能背书。安装前请核对许可证、依赖来源和发布签名,不要直接运行来源不明的二进制文件或高权限脚本。