前言¶
在 DeepSeek Harness(DSH)里让智能体「画像素图」时,常见做法是生成一张静态图或外链预览页:对话里只能看缩略图,缩放、逐帧、调色盘和导出往往要另开工具。若目标是可复用的游戏素材(透明 PNG、GIF、spritesheet + JSON、oy-pixel 的 .oypx),还要再手工整理文件结构。
下面介绍维护者 Fantety 的 dsh-pixel-studio(社区分类:趣味换装)。它是面向 DSH 的原生聊天内像素画与像素动画工作室:智能体通过程序化 shader、调色盘索引网格或模板/动作配方生成内容,结果在对话工具视图中以可交互 Canvas 呈现,并同步写出生产可用的导出文件。仓库采用 MIT 许可证,当前 package 版本为 1.3.1(以仓库 package.json 为准)。
- 目录页:https://www.skillhub.cn/plugins/Fantety/dsh-pixel-studio
- 源码:https://github.com/Fantety/dsh-pixel-studio
这是什么¶
dsh-pixel-studio 是 DSH 插件(同时打包为 bundle):宿主入口 lib/index.js,Web 客户端入口 lib/client.js,通过 cordis.patch.yml 与 dsh.client 声明挂载。设计要点包括:
- 原生 Canvas 优先:播放、逐帧、缩放、像素网格、洋葱皮、调色盘与 craft 分数在聊天工具视图内完成,而不是单独的交付卡片或独立预览站。
- 面向智能体:一字一格的网格紧凑、可 diff、写入文件前会校验;挂载插件时会注入改编自 oy-pixel 的像素画系统提示片段,每次结果附带确定性的 craft 报告。
- 零额外运行时依赖:宿主侧仅使用 Node 内置模块;客户端使用 DSH 已提供的 React 运行时。
- 安全边界:
pixel_shader在受限的树遍历解释器中执行,无宿主访问;内联画布数据有上限且本地解码;插件不发起网络请求。
核心功能¶
聊天内 Canvas¶
- 动画自动播放,以及播放/暂停、上一帧/下一帧
- 最近邻缩放(1–24×)、像素网格、洋葱皮
- 棋盘/深/浅背景
- 调色盘色块、帧数、FPS 与 craft 分数
- 从卡片直接打开 PNG、GIF、spritesheet、OYPX,或可选的独立 HTML 查看器
- 超出内联预算时提供紧凑回退面板
像素工具与素材¶
| 能力 | 说明 |
|---|---|
pixel_shader |
程序化生成,Lua 子集 Canvas API(pal、mix、hsv、alpha、rand、noise、phase/time、形状、填充、描边、stamp 等),设计沿袭 oy-pixel 的 pixel_run_shader 契约 |
pixel_art |
静帧、图标、精灵、场景、肖像 |
pixel_animation |
显式多帧,或基础精灵 + 动作配方 |
内置 7 套调色盘:PICO-8、Game Boy、Sweetie 16、DawnBringer 16/32、Studio Warm、Ink & Paper;支持自定义调色盘与单字符 legend 映射。支持 source-over 透明度的分层绘制。
内置 12 个 16×16 模板:slime、cat、robot、potion、sword、heart、ghost、star、coin、tree、mushroom、crystal。动作预设包括 bob、float、breathe、sway、shake、pulse、spin、orbit。可配置描边、阴影、背景、GIF 循环次数与每帧时长。
导出包括透明 PNG、GIF89a 动画、spritesheet + JSON atlas、可选独立 HTML 查看器,以及 oy-pixel 兼容的 OYPX v2(#RRGGBBAA 行 RLE,与当前 oy-pixel 解析器兼容)。
环境与依赖¶
- DeepSeek Harness:0.2.1-rc.2 或更高,且仍在 0.2.x 内(
engines.dsh:>=0.2.1-rc.2 <0.3.0) - Node.js:20 或更高(开发与测试)
- 需要带 Web GUI 的 DSH 配置(客户端
platform: "web")
安装与启用¶
该包既是插件也是 bundle;通过 Plugin Manager 安装时,不要把 bundle 补丁里的 pixel-studio loader 行手工抄进个人 profile 的 cordis.patch.yml。
Plugin Manager(推荐,含 Desktop)¶
在 Settings → Plugins → Install 粘贴以下地址之一:
https://github.com/Fantety/dsh-pixel-studio
若已配置 GitHub SSH:
git+ssh://git@github.com/Fantety/dsh-pixel-studio.git
管理器会安装包、把 dsh-pixel-studio 写入 profile 的 dsh.profile.bundles,并应用捆绑补丁。
CLI 管理 profile¶
将 my-profile 换成实际 profile 名(如 web、headless 或自定义名):
dsh plugin --profile my-profile add \
"git+ssh://git@github.com/Fantety/dsh-pixel-studio.git"
确认 ~/.dsh/profiles/my-profile/package.json 的 dsh.profile.bundles 中出现 dsh-pixel-studio。desktop profile 由 Electron 应用持有,请用 Plugin Manager 安装,勿手改。
重载 profile 后,刷新 Web GUI 一次以加载客户端 bundle;若工具卡片仍显示为通用形态,可重启 DSH。
预构建 release 压缩包¶
每个 v* 标签会发布无版本号的 tarball:
dsh plugin --profile my-profile add \
"https://github.com/Fantety/dsh-pixel-studio/releases/latest/download/dsh-pixel-studio.tgz"
典型用法¶
自然语言¶
在对话中直接描述需求,例如 README 中的示例:
Draw a 32×32 moss slime with top-left lighting and make an 8-frame floating animation. Export it as PNG, GIF and OYPX.
调用工具(模板 + 调色盘)¶
{
"name": "moss-slime",
"template": "slime",
"palette": "sweetie16",
"effects": { "outline": true, "shadow": true },
"outputDir": "pixel-art"
}
手绘网格 + legend¶
{
"name": "tiny-heart",
"legend": { "O": "#3B0D1A", "R": "#EF4B6B", "L": "#FF9FB2" },
"grid": [
".OO..OO.",
"ORROORRO",
"ORLRRRRO",
"ORRRRRRO",
".ORRRRO.",
"..ORRO..",
"...OO...",
"........"
],
"scale": 12
}
无 legend 时,字符 0-9a-z 表示调色盘索引(最多 36 色),. 为透明;默认调色盘为 sweetie16。
动画(模板 + 动作)¶
{
"name": "native-ghost",
"template": "ghost",
"palette": "sweetie16",
"effects": { "shadow": true, "shadowColor": "#00000055" },
"motion": { "preset": "float", "frames": 8, "amplitude": 1 },
"fps": 12,
"loop": 0,
"scale": 10
}
适用场景与注意¶
适合谁
- 在 DSH 对话里快速迭代像素精灵、小图标与循环动画,并需要标准游戏导出格式的开发者或智能体工作流作者。
- 希望智能体用紧凑网格或
pixel_shader程序化出图,同时在聊天里逐帧检查、缩放与查看 craft 报告的场景。
使用前请知悉
- DSH 插件以当前 DSH 进程的权限运行;安装前请自行审阅源码与 MIT 许可证,并确认与本地 DSH、Node 版本要求一致。
- 社区目录站点(如 skillhub.cn)与 DeepSeek / 幻方无官方从属关系;插件信息以 GitHub 仓库 README、
package.json为准。 - 内联画布有体积上限,超大作品会走紧凑回退面板,完整文件仍可通过导出路径获取。
结尾¶
dsh-pixel-studio 把 oy-pixel 风格的程序化 shader、模板与网格编辑收敛到 DSH 聊天工具视图,并把 PNG、GIF、spritesheet、OYPX 等导出与 manifest 一并写出,适合把「对话里试稿」和「落盘素材」放在同一步完成。