dsh-taptap-maker-dev
English | 中文
为 TapTap 制造(Maker) 本地开发而生的 DeepSeek Harness 插件: 守住「不花冤枉钱」的额度红线,接入可更新的游戏开发 skills,并提供自建的图片 / 音效 / BGM 素材通道—— 全部走你自己的 Key 或 CC0 素材库,不消耗任何 Maker MCP 内置额度。
你会得到什么
能力 · 说明 额度红线 · 注入系统守则:非你在对话中明确要求,禁止调用 12 个消耗 Maker 额度的生成工具。设置页有开关,关闭需二次确认,即时生效无需重启 ChatGPT 网页生图(首选) · 走你自己的 ChatGPT 账号在网页里出图(免费账号即可)。登录一次,之后全自动;支持多账号轮询,一个触配额自动换下一个 中转站生图(回退) · OpenAI 兼容 /images/generations。填 Base URL / Key / Model,支持「获取模型」自动列出可用模型。尺寸按需传,支持高质量缩小做图标 CC0 音效库 · Kenney 九个包共 706 个音频(CC0,可商用免署名),首次使用自动下载;本地没有时回落到 Mixkit / 小森平 / 効果音ラボ 完整 BGM · 自动生成提示词 + 打开 MiniMax Audio 网页;下载后自动导入(转格式 + 装进 assets/audio/bgm/ + 生成 .meta) BGM 工作台挂件 · 主界面输入框旁的 🎵 挂件:试听刚生成的 BGM、拖波形裁剪选区间(可加淡入淡出防爆音)、一键导入项目;生成完自动亮红点提醒 音频转换 · ffmpeg 批量转格式 / 压缩 / 响度归一 / 去静音 / 淡入淡出 / 短音拼循环 视频动作帧 · 视频模型按首尾帧出一段动作 → 精确时间点抽帧 → 本地抠像(绿/蓝/品红幕,带逐帧自检)→ 对齐合成透明序列帧 → 一键导入 Maker(.meta + seq.json + Lua 切图)。只有出视频那一步花钱,抽帧/抠像/合成可无限重调 视频三后端 · MiniMax 官方(订阅 Key / 按量 Key 自动识别)/ 视频中转站(OpenAI 兼容 / MiniMax 协议 / 自定义路径映射)/ 自选本地视频(零额度)。auto 按可用性挑,也可按作业指定 分组式设置页 · 十几张卡按「生成通道 / 音频素材 / 治理与工具 / 怎么用」四组收拢,顶部一条通道状态总览(绿点=现在能用),不用再在长页面里翻找 可更新 skills · 内置游戏开发 skills + 周期更新检测;设置页可勾选禁用不需要的 初始化引导 · 直接用中文说「帮我初始化 taptap maker」即可触发,不必记斜杠命令
视频动作帧(视频 → 序列帧素材)
手里只有一张静帧、想让角色动起来,这条链路就是干这个的:
/taptap-video doctor # 自检 ffmpeg / Key / 站点 / 有没有视频额度
/taptap-video new 剑士行走
/taptap-video first ./refs/swordsman.png # 首帧(绿幕全身图最理想)
/taptap-video last ./refs/swordsman_end.png # 尾帧可选(H3 / Hailuo-02 才支持)
/taptap-video prompt 角色原地走三步,全身入镜,相机固定,绿幕背景
/taptap-video run # 唯一花钱的一步:提交视频
/taptap-video poll # 1~6 分钟,可反复调;重启后也能接着查
/taptap-video frames --count 12 --arrange loop # 抽帧(本地)
/taptap-video key --chroma auto --tol 40 # 抠像(本地,带逐帧自检报告)
/taptap-video sheet --cell 256 # 对齐合成整图(本地)
/taptap-video import ../my-game --fps 12 # 导入 Maker
零额度路径(没有视频额度时):
/taptap-video use ./downloaded.mp4 # 挂本地视频(MiniMax Code 签到积分出的片也行)
/taptap-video frames && /taptap-video key && /taptap-video sheet
设计上的几个取舍:
- 抽帧排法可选:
uniform(等分取中点,首尾都不碰 —— 第 0 帧往往是还没动的静帧)、
first-last(首尾帧模式想让两张图都算数)、loop(行走/跑步/待机要无缝循环)。
- 抠像主判据是四边洪水填充,不是绿色优势值 —— 视频模型常把纯色背景重新打光成渐变,
只认绿色在那类帧上会整片失效。调色板只取背景主色簇,角色贴边时不会被顺着身体吃进去。
- 逐帧自检:每帧给背景占比与「可信」标记。主体只占画面一小块时占比 > 95%、
标记不可信是正确结论,不是 bug;真素材主体一般占 15%~50%。
- 对齐用同一包围盒:所有帧共用一个 alpha 包围盒、贴底放在同一基线,上下起伏不会飘。
包围盒必须在抠完的帧上算 —— 在原帧上算等于没裁,主体会被缩成一点。
- 只把成品写进 `assets/`:中间的视频与原始帧留在作业目录
(/sucai/video/-/),因为 Maker 运行时会给 assets/ 下任何新文件 补 .meta 并打进构建 —— sucai/ 整棵是自忽略的,放中间产物正合适。
三个后端(与生图中转站同一套思路)
后端 · 怎么配 · 计费 · 适合 MiniMax 官方 · 设置页填 Key(订阅 sk-cp-… 或按量 sk-api-…),或直接复用本机 mmx 登录态 · 套餐额度 / 账户余额 · 有 Explore+ 档或愿意按量付费 视频中转站 · 设置页填 Base URL / Key / 模型;三种协议(OpenAI 兼容 / MiniMax 协议 / 自定义路径映射) · 你的中转站 · 官方额度用完、或中转站更便宜 自选本地视频 · /taptap-video use · 零额度 · MiniMax Code 签到积分生成的、录屏、别人的素材
auto 按设置页里排的顺序选第一条「开着 + 配好了 + 不是本地文件」的通道(默认顺序即上表顺序)。 你可以在设置页「生成通道优先级」里拖拽调序、逐条开关,并决定额度不足时要不要自动换下一条 (默认关;打开后可能在你不知情的情况下动用付费通道)。也可以按作业显式指定: /taptap-video backend relay|minimax|local(显式指定时不回退)。命令行改顺序: /taptap-video lanes --order minimax,relay --off local --fallback on。
🚫 模型不会被自动替换(视频按秒计费)
你在设置页「MiniMax」里选了哪个模型,`/taptap-video` 就用哪个,一个字都不会改。 这条是硬约束,不是建议:
- 新建作业继承你设置的模型(以前会悄悄退回内置的
MiniMax-H3); - 模型与首尾帧不兼容、或模型为空时,直接报错并停下,绝不「顺手挑一个能用的」;
- 报错会给出你自己换的命令(
/taptap-video set --model )和替代方案
(如 /taptap-video last --clear 清掉尾帧),但换不换由你决定。
给 AI 助手的同一条规定:即使它认为「换个模型更合适」,也只能停下来把情况讲清楚并 询问你,不能替你改 —— 视频按秒计费,替你选模型就是替你决定花多少钱。
🛡️ 防呆护栏(不只靠守则,代码层硬拦)
注入给 AI 的守则只是建议,弱模型不一定照做。所以下面这些不可逆动作在 命令层也做了硬拦截:不带 --yes(或你没明说)就会停下来,把「会发生什么」 和「怎么撤销」讲清楚,然后等你决定 —— 既不擅自执行,也不默默跳过。
动作 · 以前 · 现在 /taptap-skills reset · 一句清空全部禁用表,无确认无备份 · 先备份 → 停下询问;新增 /taptap-skills restore 一行恢复 /taptap-skills disable · AI 觉得没用就禁用 · 属于你的清单,要你点头 /taptap-video use · 静默覆盖已生成的视频 · 已有付费视频时停下询问,并告诉你原文件在哪 /taptap-video set --model · 换模型 = 换价 · 停下询问,讲清「现在 → 想改成」 /taptap-video lanes --order/--on/--off/--fallback · AI 可能拨乱你排好的顺序 · 停下询问(换通道可能走到另一条要花钱的通道)
设计上刻意不把插件变成「什么都问」:抽帧张数、抠像阈值这类纯技术参数 不受限制,随便调。护栏只拦「不可逆」和「属于你的决定」两类。
⚠️ 已有的生成结果不会被自动改动 —— 护栏只拦住新的破坏性动作,不追溯清理。
💸 不白烧额度:提交「结果未知」时不许重跑
视频按秒计费,而最贵的坑是这个:提交请求其实成功了,只是本地网络抖了一下 / 进程被打断,没拿到 `task_id`。此时服务端已经在跑、额度可能已经扣了,但用户(尤其 AI)看到的是「提交失败」—— 于是很自然地再跑一次,两次都扣钱。
现在的处理:
环节 · 做法 发请求之前 · 先把提交台账写进 video-submit-ledger.json(状态 inflight)。断网、进程被杀都留痕 拿到 task_id · 台账转 confirmed,作业转 running 服务端明确拒收 · 4xx + 业务错误码 → 台账 failed,此时换通道重试是安全的 传输层故障 · fetch failed / 超时 / ECONNRESET 等 → 作业状态记为 `uncertain`(结果未知),不是 `error` uncertain 时再提交 · 被拦下,必须你显式 --yes;拦住时会把「为什么可能已扣费」讲清楚 幂等键 · 同一次提交(含跨通道重试)复用同一个 Idempotency-Key,服务端可去重 poll 限流 · 只提示「隔 30~60 秒再查」,不改任务状态(查询本身不花钱)
关键设计:uncertain 用独立状态而不是 error。因为 error 会诱导「失败了就再来 一次」,而 uncertain 的文案会直接劝阻重投,并指向 status / poll 去把片子找回来。
/taptap-video status 会显示台账(提交号、时间、task、是否可能已扣费), 所以「上次到底提交了没有」永远有一处可查,而不是靠猜。
生图链路同样处理:网络异常不再自动重试(以前会重试 7 次,很可能重复扣费), 如实报错并说明风险。但服务端明确答复的情况仍会安全重试 —— content_policy 误判、尺寸不支持、透明底参数不认,这些换请求就能过。
💾 配置不会莫名其妙丢
三个独立原因,都会造成「配置/Key 凭空消失」,已一并修掉:
问题 · 原因 · 现在 写配置写到一半被中断 / 并发读 · writeJson 原来直接 writeFileSync · 原子写(先写 .tmp 再 rename),崩溃或并发都不会留半截 JSON 配置文件损坏后静默当作「没配置」 · readJson 吞掉异常 · 另存一份 .corrupt- 留现场,事后可找回 改一个字段抹掉另一个 · 设置页不回显明文 Key,表单里 apiKey 恒为空;保存时把空串写回去 · 空串 = 不修改;真要清空用 clear: true
第三条是最隐蔽也最要命的:以前你在设置页只改个模型点保存,API Key 就被静默清空了, 生图通道当场失效,且界面上没有任何提示。
🎬 抽帧 / 抠像:先备后换,不做「先删后写」
抽帧和抠像都是覆盖式产物。以前抽帧是「先 rmSync 整个 frames/,再逐张写」—— 写到一半失败(磁盘满、权限、Ctrl-C)时,上一轮的帧就被删光了,只剩半截新帧, 而作业状态还没更新。用户既没新结果,也丢了旧结果。
现在统一「先写临时目录 → 全部成功才落位 → 失败自动回滚」:
- 抽帧写
.frames-staging/,抠像写 .keyed-staging/; - 落位时先备份成
.frames-prev/ / .keyed-prev/,逐个文件替换; - 中途失败回滚,恢复到本轮开始前的样子(注意:回滚必须覆盖已换上去的新文件,
只补「缺失的」会得到新旧混杂的结果,比全丢更难判断);
- 逐文件 rename 而非重命名整个目录 —— Windows 上重命名仍被占用的目录会 EPERM
(实测踩过)。
另外顺手堵了一个内存坑:chooseLayout 以前只卡宽度不卡高度,于是 「64 帧 × 2048 格子」会算出 8192×32768 的成品图 —— 既超纹理上限,单张 RGBA 还要 1 GB;格子再大就直接 OOM。现在宽高一起卡,超限明确报错并告诉用户 --cell 该调到多少,auto 和手动指定 columns 两条路都拦。
🔊 音效 / 素材落盘
- ffmpeg 用 `ffmpegPath()` 解析,不是裸名字。ffmpeg 可能装在
FFMPEG_PATH、
注册表或 winget 目录里而不在 PATH 上 —— 裸 spawnSync('ffmpeg') 会 ENOENT, 用户只看到一句毫无线索的「转换失败」。音频转换另有 5 分钟超时,不会无限挂起。
- 写进工程的 `.meta` / `.seq.json` 一律原子写(
.partial + rename)。
Maker 会监听 assets/ 并在构建时解析这些文件,非原子写留下的半截 JSON 会让构建报「meta 损坏」——而且 PNG 已经就位,那个窗口正好最容易被监听到。
🔐 登录时浏览器窗口会自动弹到前台
点「登录」或「添加并登录」后,Chromium 窗口会主动拉到前台。
以前窗口会开在 DSH 窗口后面,从来没被置前过 —— 用户点完按钮什么都没发生, 以为按钮坏了(进程其实在跑、profile 也建好了)。Windows 不允许后台进程直接抢 焦点,所以这里用「AttachThreadInput + ShowWindow(SW_RESTORE) + SetForegroundWindow」这套经典做法,并且按 profile 路径匹配窗口而不是抓 「最新的 chrome」—— 否则同机开着别的浏览器时,会把用户自己的窗口抢到前台。
实测:修复后约 3.8 秒窗口自动置前。
另外「添加并登录」改成服务端一步到位(/gpt-pool add 直接启动登录,带上该账号的 --account 用独立 profile);前端不再补发第二次 /gpt-login,避免同时开两个窗口、 第二个把第一个的 profile 锁清掉。
网页生图与 BGM 要在超时后按 profile 路径清理残留的 Chromium,音效库要解压 zip、 读 cookie。原先这些都是把路径直接拼进 PowerShell 的单引号字符串:
Where-Object { $_.CommandLine -like '*C:\Users\…\browser-profile*' }
Copy-Item -LiteralPath 'C:\…\Cookies' -Destination '…' -Force
PowerShell 里单引号必须写成两个才表示一个。所以路径里只要出现一个 ' (用户名 O'Brien、把 DSH_HOME 指到带引号的目录等),字符串就提前闭合, 后面的内容被当成命令执行。已实测可注入:
Write-Output '*C:\x' ; Set-Content -Path '<marker>' -Value 'INJECTED' ; #*'
标记文件被创建了吗: True 内容: INJECTED
现在统一走 src/win-proc.mjs:路径先转义(' → ''),-like 模式里的 * ? 转成 [*] [?],并且六处调用不再各自拼字符串。测试里有真实 PowerShell 的往返一致性断言(含 O'Brien、x'; Write-Output 'INJECTED' ; ')。
中转站的「OpenAI 兼容」协议只实现公共约定,不绑定任何一家:
项 · 实现 Base URL · 保留 /v1(只剥掉用户多粘的 /videos、/videos/{id}) 素材 · 本机图片先上传换公网 url;上传路径由你自己填(留空则要求直接传公网 URL) 参考素材字段 · 可选两种形态:metadata.mode + first_frame_url / last_frame_url,或 input_reference 数组 画幅 · metadata.ratio;全角 16:9、1920x1080、9/16 会自动纠正成 16:9 清晰度 · 默认不下发 size(很多型号自带清晰度档位) 幂等 · 每个任务带 Idempotency-Key(UUID) 状态 · completed + delivery_status=ready 才算完成;delivering 继续等 下载 · 带 Bearer 下 /content,按文件头校验容器;JSON/HTML 不会被当成片 过期 · download_expired 直接报「需要重新生成」,不空转轮询
不内置任何型号名、价格、能力表(时长范围 / 画幅支持 / 是否支持首尾帧)—— 各家中转站不一样,写死一家会误导其他家。型号列表用设置页「获取模型」从你自己的 /models 拉,或者手填;超范围时平台返回的 400 原文会直接回显。
各家协议不一样时切到「自定义」,填提交/查询路径与响应字段路径即可 —— 报错会明确说「哪个字段没取到」,不会只给一句「失败」。
额度与计费(实情)
Key / 套餐 · 能否出视频 M Plan Go(最低档) · ❌ 官方明确不含视频模型,调用返回 1008 insufficient balance / HTTP 402 M Plan Explore / Build · ✅ 含 H3,视频只受周窗口限制 积分包(¥7 / 1000 积分) · ✅ 支持 H3,套餐额度先用、超出扣积分 按量计费 Key(sk-api-…) · ✅ H3 768P ≈ ¥0.5/秒、2K ≈ ¥0.8/秒,4 秒 ≈ ¥2
设置页会自动识别 Key 类型并说清额度从哪扣,不用你自己判断该填哪一种 —— 两种 Key 打的是同一批接口,区别只在计费来源。
⚠️ 别只看前缀判断订阅(2026-10-21 修)。MiniMax 的 Key 至少有三种形态:
sk-cp-…(订阅)、sk-api-…(按量)、以及控制台签发的 JWT(eyJ…,payload 里带
TokenType,4 = 订阅)。本机用户的 M Plan 订阅 Key 就是最后这种,之前被插件无条件
判成「按量 Key,不走 M Plan 套餐额度」—— 明明有订阅额度却提示得像是没有。
现在 JWT 会解出 payload 看 TokenType 判定;解不出来就说「不确定」并引导跑自检,