소스 정보
- 저장소
- infometa/workbuddyskills
- 최근 소스 활동
- 2026년 7월 21일 03:35
- 감지된 SKILL.md 언어
- 중국어
- 스타
- 205
- 포크
- 65
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/infometa/workbuddyskills --skill handdraw명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SKILL.md 표시 중
SOC 직업 분류 기준
| name | handdraw |
| description | 手绘动画生成本地能力——按风格目录用 ImageGen 出图,调 vibeknow 手绘绘制,再本地渲染成「绘制→落定」手绘视频。 |
本 skill 的脚本在本 SKILL.md 所在目录下的 scripts/。而你的 shell 工作目录是用户工作目录(沙箱),不是插件目录 —— 所以不能用相对路径。
每次会话先设一次(把路径换成加载本技能时告知你的 SKILL.md 绝对路径的所在目录):
SKILL_DIR="/Users/<你>/.workbuddy/plugins/marketplaces/my-experts/plugins/vibeknow-handdraw/skills/handdraw"
下文所有命令都用 "$SKILL_DIR/scripts/xxx.mjs"。
(产物目录 JOBDIR 仍然要落在当前工作目录下 —— 沙箱只允许写这里。)
可用风格见 @references/styles.md(id / 名称 / 分类 / style_prompt)。出图时把所选风格的 style_prompt 拼在画面描述前。
本专家以「纯源码」分发,运行依赖(remotion 渲染引擎、chrome-headless-shell)在首次使用时自动装进包内:
node "$SKILL_DIR/scripts/run.mjs" init(已装则秒过;chrome 走国内镜像 npmmirror,失败回退官方源)。
render/node_modules、render/node_modules/.remotion(chrome 缓存)。run.mjs/handdraw-page.mjs)+ Bash 调用;mcp/ 目录只是零依赖的客户端函数库。一次生成 = 一个 job 目录 JOBDIR:开工先 node "$SKILL_DIR/scripts/workspace.mjs" new --topic "<主题>" 拿到它的绝对路径。目录内用两位页号 NN 同号绑定:
<JOBDIR>/ 01.png 01.vec.json 01.mp3 02.png 02.vec.json 02.mp3 … scenes.json 成片.mp4
NN.png / 绘制数据 NN.vec.json / 音频 NN.mp3 必须同一个 NN;scenes.json 第 N 项也同号。这是防止图与绘制数据错位、渲染出错的关键。NN.* 后重跑渲染。visual 画面描述:严格按 @references/visual-rules.md(禁抽象总结句、不提文字、屏幕/UI/照片做画风适配转译、人物锁进画风、跨页角色一致且禁指代)。出图 prompt 用脚本生成(自动拼画风+锁画风尾巴,勿手拼):
node "$SKILL_DIR/scripts/build-gen-prompt.mjs" --style "<style_prompt>" --visual "<visual>" → 输出整串喂 ImageGen,存 <JOBDIR>/NN.png。
📐 出图尺寸 = 成片尺寸(同比例、同大小)。由 --aspect × --resolution 唯一确定:
--aspect | 比例 | 720p(默认) | 1080p | 540p |
|---|---|---|---|---|
horizontal(默认) | 16:9 | 1280×720 | 1920×1080 | 960×540 |
vertical | 9:16 | 720×1280 | 1080×1920 | 540×960 |
square | 1:1 | 720×720 | 1080×1080 | 540×540 |
classic | 4:3 | 960×720 | 1440×1080 | 720×540 |
portrait43 | 3:4 | 720×960 | 1080×1440 | 540×720 |
🚦 这是硬约束,不是建议:所有页出完后、掏钱绘制之前,先跑一次 check-images.mjs <JOBDIR>(见下)统一校验每张 NN.png,不合格先重新出图再画(退 4,此步不花积分),它会告诉你该出多大、哪几页不合格。拦截的四种情况:比例不对(→黑边/裁切)、短边小于成片档位(→定格画面糊)、长边 >1920(→服务端拒)、各页尺寸不一致(→成片画面忽大忽小)。
💰 出图花 WorkBuddy 积分(渲染只花本地时间),分辨率越高越贵 —— 默认就用 720p 那一档,别主动往上加;用户要更高档时顺带告知会多花生图积分。
生图模型出不了该尺寸时,必须保持同宽高比(比例变了必被拦)。
⚠️ 长边 ≤ 1920px(出图与任何图片素材都是):1920 恰好合规;超过会被 handdraw 服务端拒(提示 long edge must not exceed 1920px),需先等比缩到 ≤1920。
node "$SKILL_DIR/scripts/run.mjs" login → JSON {status:"pending",verification_uri,user_code},把链接+验证码展示给用户在浏览器确认;再 run.mjs login-status → {status:"success"} 即登录成功(pending 稍等再查,error 重新 login)。登录态存本机固定路径,后续免登。
先预检、再逐页绘制。
出图尺寸预检(掏钱前,一次过):
node "$SKILL_DIR/scripts/check-images.mjs" <JOBDIR> [--aspect <画幅>] [--resolution <档位>]
⚠️ --aspect / --resolution 要和出图、渲染时用的完全一致。合格 → {"ok":true,...} 退 0;不合格 → {"ok":false,"problems":[...]} 退 4(此步不花积分),按提示把不合格的页重新出图后再画。
逐页绘制:对每一张 NN.png
node "$SKILL_DIR/scripts/handdraw-page.mjs" <JOBDIR>/NN.png --title "<视频主题>"
→ 调服务端画好该页,按图名派生写出 <JOBDIR>/NN.vec.json(同名同目录,结构上杜绝图/数据错位,别手写 json)。打印生成的路径。
计费口径:逐页各扣各的 —— 每页一次冻结→结算,积分明细一页一条「手绘绘制 · 《主题》· 第 n 页」,带 workbuddy 标签。
login(handdraw-page 会报未登录)。NN.vec.json 就不必再画(重跑会再扣一次费);只对缺 NN.vec.json 的页跑 handdraw-page。handdraw-page 非 0 退出、stderr 是错误原因 → 重跑该页重试,或按 SOP 降级(放 NN.static)。脚本绝不写出空的 NN.vec.json(返回空绘制数据即报错退出,不落盘)。handdraw-page 输出 {"error":"insufficient_credits","service":"handdraw"} 退 2 → 走下方 SOP(优先充值)。逐页扣费,遇到不足即停在当前页,已画好的页不受影响。handdraw-page / synthesize 遇积分不足时,stdout 输出 {"error":"insufficient_credits","service":"handdraw"|"tts"} 且非 0 退出。收到此信号:
handdraw(绘制不足)——绘制只有 vibeknow 一条路:
NN.static(: > <JOBDIR>/NN.static),跳过 handdraw-page,其余流程照常。不主动替用户选降级。tts(vibeknow 音色不足)——因默认就是免费微软,正常遇不到;只有用户主动选了 --engine vibeknow 才会。提示用户:改回默认免费微软音色继续(去掉 --engine vibeknow 重跑)或充值。NN 自动配对(LLM 不参与配对,配不错):
node "$SKILL_DIR/scripts/build-manifest.mjs" <JOBDIR> → 生成 <JOBDIR>/scenes.json(NN.png+NN.vec.json+NN.mp3同号配对;NN.txt 作 narration;缺 NN.vec.json 的页报错,按提示补跑 handdraw-page)。
NN.static → 该页用原图直接定格(不逐笔绘制),此时不要求 NN.vec.json。仅在积分不足降级时用(见「积分不足与降级」)。audio 的页:时长按旁白音频自动校准(音频时长 + 尾留 --tail-seconds,默认 1.0s);无 audio 页用 --scene-seconds(默认 4s)。node "$SKILL_DIR/scripts/render-reel.mjs" --manifest <JOBDIR>/scenes.json --out <JOBDIR>/成片.mp4 --aspect <horizontal|vertical> --transition <fade|slide|wipe> [--scene-seconds 4] [--transition-seconds 0.5] [--tail-seconds 1.0]
--aspect:horizontal(16:9,默认) / vertical(9:16) / square(1:1) / classic(4:3) / portrait43(3:4)。按用户要求选;不认识的值会直接报错,不会静默当横版。--resolution:按「短边」表示,默认 720p(540p 实测偏糊,720p 是发布的合理下限);可选 1080p(上限)/ 540p。
clamped 说明,不报错、不卡流程。把这个说明如实转告用户(合成短边就 1080,再放大只会糊)。--aspect / --resolution 必须和出图时用的完全一致(check-images.mjs 预检也要传同样的值,它会据此校验出图尺寸)。渲染并发默认限到 2(而非 remotion 缺省的 ≈核数/2)——本专家跑在用户个人电脑上、同时还在跑 WorkBuddy,并发拉满会把机器占死。默认就好,别动。 机器很闲、想快点可设环境变量 HANDDRAW_RENDER_CONCURRENCY=4 重跑;想更省资源设 =1。
渲染一条几分钟的片子可能要好几分钟甚至更久(分辨率越高越久)。请这样处理:
成片.mp4。所以 成片.mp4 一旦存在就一定是完整可播的;渲染期间它根本不存在。ls -la <JOBDIR>/成片.mp4,等它出现即可。{"status":"done","out":"…/成片.mp4","width":1280,"height":720,"durationSec":46.55,"bytes":2104538}
交付时直接用这里的 width/height/durationSec/bytes 汇报(这是校验过的真实值)。handdraw 返回 {coarse, full},整个原样写入 json。⚠️ 切勿只取 .full 拍平——渲染层取 j.full,拍平数据会判空走兜底,结果只剩原图淡入、没有逐笔手绘过程。
(以下由 AI 在实际使用中自动积累,请勿手动删除。遇到反复出错的点,简短记一条,供后续参考。)
handdraw-page.mjs(派生同名 vec.json)+ build-manifest.mjs(按 NN 自动配对)根治,别再手写 scenes.json。NN.png(每出一张立即移到 NN.png,确认落好再出下一张)。🚫 不要并行出图,更不能「并行写同一目录 + 事后按关键词重命名」—— 猜错一页就会让第 3 页配上第 5 页的画面,视频照渲、内容全错、无从发现。handdraw-page.mjs <JOBDIR>/NN.png [--title <主题>].vec.jsonnode "$SKILL_DIR/scripts/run.mjs" synthesize "<narration>" --out <JOBDIR>/NN.mp3(同号落盘)。可选把旁白文本写 <JOBDIR>/NN.txt。
microsoft(edge-tts,免费、免登录、不扣积分)——旁白默认走这个,正常无需登录/积分。--voice <id> 可选,缺省 zh-CN-XiaoxiaoNeural。--engine vibeknow 为可选高级音色/声音克隆(需登录 + 扣积分);仅在用户明确要 vibeknow 音色时用。