Back to home

jonnycafong

dsh-plugin-office-farmer

No description

Stars
1
Language
JavaScript
Created
Aug 16, 2026
Updated
Aug 17, 2026

Introduction

办公室农民微信表情插件(dsh-plugin-office-farmer)

DeepSeek Harness (DSH) 自定义工具插件:怀旧农具专辑「农忙打工人」+ 新农具表情制作流水线。

内置两个工具:

generate_sticker — 微信表情专辑「农忙打工人」(风格模板)

16 张农具主题原创表情(锄头摸鱼、镰刀割韭菜、水桶跑路……),240×240 透明底投稿成品打包进插件。 本工具的 16 张成品即为 craft_sticker 制作新农具表情的风格模板参考——制作新农具前可先用本工具查看已有成品的风格与排版。

  • id(tool_01~16)/ keyword(摸鱼、割韭菜、压力大、退退退、上进、捞一把、缓一缓、带上我、好运来、跑路、打气、稳住、勿扰、果断、暴击、解气)/ 农具名选取
  • caption 自定义底部梗文字(与投稿管线同款楷体红字白描边,基于逐像素一致的无文字素材重绘)
  • animated: true → 透明底 GIF 动图(bounce / wiggle / shake / blink)
generate_sticker(
  id?:      'tool_01'~'tool_16',
  keyword?: '摸鱼'|'割韭菜'|'压力大'|'退退退'|'上进'|'捞一把'|'缓一缓'|'带上我'|'好运来'|'跑路'|'打气'|'稳住'|'勿扰'|'果断'|'暴击'|'解气',
  caption?: 自定义梗文字(默认保留专辑原文字),
  animated?: true → 透明底 GIF,
  motion?:  'bounce'|'wiggle'|'shake'|'blink',
  size?:    默认 240
)

craft_sticker — 新农具表情制作流水线

输入任意农具名,走「农忙打工人」同款搪瓷缸怀旧风流水线,产出 240×240 透明底投稿规格成品。两阶段调用(图片生成由 harness 的 Agent 用自身图片能力完成,插件负责其余全部确定性步骤):

阶段一(备料):
craft_sticker(tool: '背篓', text: '背着KPI')
→ { refPath: 结构参考图, styleAnchorPath: 风格锚点, imagePrompt: 图生图提示词, specPath: 制作单 }

Agent 用图片生成工具按图生图生成白底农具图(参考图依次为 refPath、styleAnchorPath,提示词用 imagePrompt)

阶段二(成品):
craft_sticker(imagePath: '生成图路径', specPath: '阶段一返回的 specPath')
→ { path: 240×240 透明底 PNG, report: 投稿规格自检 }
  • 农具目录 24 件(16 专辑件 + 背篓/箩筐/风谷车/碌碡/耧车/辘轳/竹筛/水车),目录内自动出结构参考图;目录外农具传 structure 结构描述即可
  • text 梗文字(≤10 字)、meaning 含义词(≤4 字,微信投稿要求)自动兜底
  • 后期与投稿管线 sticker-album/scripts/process.mjs 同款几何:flood-fill 抠图 → 168px 贴底定位 → 楷体红字白描边 → 240×240 透明底 + 规格自检(尺寸/透明/≤500KB/红字渲染)

使用步骤:用模板制作新农具表情

以下演示用户输入新农具「石碾」时的完整流程,Agent 依次调用两个工具:

第 1 步:用 generate_sticker 查看风格模板

制作新农具前,先选取 1~2 张专辑成品作为风格参考,确认搪瓷缸怀旧风的视觉调性与排版位置。

generate_sticker(keyword: '摸鱼')   → 锄头·摸鱼(tool_01)
generate_sticker(keyword: '退退退') → 簸箕·退退退(tool_04)

产出:240×240 透明底 PNG,供 Agent 理解「农具居中偏上、底部楷体红字白描边、搪瓷缸质感」的风格标准。

第 2 步:craft_sticker 阶段一 — 备料

传入新农具名与梗文字。目录内 24 件自动出结构参考图;目录外农具需额外传 structure

目录内农具(如背篓、箩筐、风谷车……):

craft_sticker(tool: '背篓', text: '背着KPI')
→ refPath:          结构参考图 512×512(SVG 栅格化,白底线稿标注部件)
  styleAnchorPath:  风格锚点图(锄头定版原图,搪瓷缸质感锚定)
  imagePrompt:      图生图提示词(含风格关键词 + 农具名 + 结构描述)
  specPath:         制作单 spec.json(阶段二回传)

目录外农具(如石碾):

craft_sticker(
  tool: '石碾',
  structure: '石制圆盘碾轮,中心立轴,上装木推架,用于碾谷去壳',
  text: '慢慢碾'
)
→ 同上四件产出;imagePrompt 会包含用户提供的结构描述

第 3 步:Agent 图生图生成白底农具图

Agent 使用自身的图片生成能力,按图生图方式生成一张白底农具图:

  • 参考图 1:refPath(结构参考图 — 保证农具结构正确)
  • 参考图 2:styleAnchorPath(风格锚点 — 保证搪瓷缸质感一致)
  • 提示词:imagePrompt(阶段一返回)
  • 要求:白底、农具居中、正面视角、无文字

将生成图保存到本地,拿到路径。

第 4 步:craft_sticker 阶段二 — 成品化

传入生成图路径与阶段一的 specPath,插件自动完成全部后期:

craft_sticker(
  imagePath: '/path/to/生成图.jpg',
  specPath:  '/path/to/spec.json'    // 阶段一返回,自动带出农具名/梗字/含义词
)
→ path:   240×240 透明底 PNG(投稿规格成品)
  report: ['PASS 尺寸 240×240', 'PASS 透明底', 'PASS ≤500KB', 'PASS 楷体红字已渲染']

后期管线自动执行:flood-fill 白底抠图 → 168px 贴底居中定位 → 楷体红字白描边渲染 → 240×240 透明底导出 → 规格自检。同名输入得到几何一致的可投稿成品。

完整流程示意

用户:「帮我做一张石碾表情,配"慢慢碾"」
  │
  ├─ ① generate_sticker(keyword: '摸鱼')     ← 查看风格模板
  │     → 锄头·摸鱼 240×240 透明底 PNG
  │
  ├─ ② craft_sticker(tool: '石碾', structure: '...', text: '慢慢碾')  ← 阶段一备料
  │     → refPath + styleAnchorPath + imagePrompt + specPath
  │
  ├─ ③ Agent 图生图(refPath + styleAnchorPath + imagePrompt)         ← 生成白底图
  │     → /workspace/memes/gen_石碾.jpg
  │
  └─ ④ craft_sticker(imagePath: '...', specPath: '...')               ← 阶段二成品
        → 240×240 透明底 PNG + 自检全 PASS

安装到 DSH profile

# 1. 安装(pnpm 转发)
dsh plugin --profile web add /path/to/dsh-plugin-office-farmer

# 2. 在 $DSH_HOME/profiles/web/cordis.patch.yml 注册
# - insert:
#     - id: dsh-plugin-office-farmer
#       name: 'dsh-plugin-office-farmer'

# 3. 重启
dsh web

兼容版本

依赖版本
Node.js>= 18(sharp 依赖要求)
@deepseek-ai/cordis^4.0.1
@deepseek-ai/dsh-tools^0.1.0-rc.6
插件版本0.2.0

开发

npm install          # sharp + gifenc(如遇 ~/.npm 权限问题:--cache ./.npm-cache)
node test.mjs        # 冒烟测试(专辑/craft 流水线,44 项)
node scripts/build-cutouts.mjs        # 从 sticker-album/raw 重建无文字素材并验证逐像素一致
node scripts/build-style-anchor.mjs   # 从 sticker-album/raw/hoe_c1.jpg 重建风格锚点

目录结构

lib/
  index.js      插件入口:注册两个工具
  album.js      generate_sticker 专辑引擎(成品/换字/GIF)
  craft.js      craft_sticker 制作流水线(参考图/提示词/抠图/成品/自检)
  catalog.js    24 件农具目录(结构 SVG + 结构描述 + 示例梗)
assets/
  album/        16 张投稿成品 + 无文字素材 cutouts/
  style-anchor/ 图生图风格锚点(锄头定版原图)

技术要点

  • 插件 = Cordis 插件(apply(ctx) 导出)+ ctx.tools.register(defineTool({...})),需声明规范化 output { schema, render }
  • 渲染管线:SVG 帧 → sharp 栅格化 → gifenc 编码 GIF(透明底:调色板索引 0 保留为透明色)
  • 文字替换几何:工具内容与文字区严格分离(sticker-album/scripts/process.mjs 设计约束),无文字素材与投稿成品逐像素一致
  • craft 两阶段设计:图片生成为非确定性步骤、由 Agent 执行;参考图渲染/抠图/排版/自检全部确定性、由插件执行——同名输入得到几何一致的可投稿成品