微信表情包神器 24 张表情生成器
把用户的角色/宠物图片批量变成符合微信表情开放平台规范的动图主图。
核心分工:固定脚本负责生成与压缩,agent 负责看图、定参数、验收。
规格红线(每一张都要满足)
- 主图:GIF 240x240,≤100KB,无限循环,默认无文字
- 封面:PNG 240x240 ≤500KB;聊天页图标:PNG 50x50 ≤500KB
十个默认方向
| # | 方向 | 情绪 | # | 方向 | 情绪 |
|---|---|---|---|---|---|
| 1 | 疯狂摇摆 | 滑稽高频 | 6 | 旋转翻滚 | 夸张 |
| 2 | 爱心系列 | 爱意/感谢 | 7 | 崩溃抖动 | 无语/生气 |
| 3 | 弹跳挤压 | 开心 | 8 | 星夜可爱 | 萌/晚安 |
| 4 | 怼脸放大 | 压迫搞笑 | 9 | 火箭起飞 | 冲刺/加油 |
| 5 | 大手互动 | 拍/戳/赞/鼓掌 | 10 | 温柔陪伴 | 陪伴/晚安 |
每个方向含 1-4 个动效变体(详见 references/effects.md)。用户不指定方向时默认生成全部 24 个动效变体;用户选方向时只出所选方向的变体并凑满张数。
工作流
Step 1 确认输入
- 用户给图:记录图片路径。多张图(≤2 张效果最好)会交替出场,单图也能做。
- 问清(或从对话推断):动效方向(报 10 方向菜单)、要不要保留文字(默认无文字)、底色偏好(默认 6 色轮换)。
- 用户口头描述元素(如"就用猫头")优先于自动识别;用户没说就用 Read 看图自行判断主体。
Step 2 抠图(用户未给透明图时)
- 调
connect_cloud_service拿 clientTempToken(每次会话新鲜拿,会过期)。 - 调 buddy-image-processing 技能的 matting 操作:主体抠成透明 PNG。
- Read 抠图结果确认边缘干净、主体完整。
Step 3 素材检查(封面才需要;主图跳过)
跑 scripts/make_cover.py --image x.png --grid grid.png 出十分位网格图,Read 目测主体/头部比例,把比例写进 --crop "x0,y0,x1,y1"。禁止裸眼猜比例直接裁——bbox 后的坐标系与原图直觉差异很大。
Step 4 生成主图
python <skill_dir>/scripts/sticker_engine.py --image cutout.png [--image cutout2.png] \
[--effects 1,2,5] [--count 24] --out-dir stickers
- Python 用受管运行时;Pillow 需已装(缺则装入受管 venv,勿污染全局)。
- 脚本自动保证 ≤100KB(28 色 → 24 → 20 逐级降级,无抖动)。
- 环境报错时全部用绝对路径(部分会话 PATH 损坏,ls/grep 不可用)。
Step 5 浏览器验收(必做,不可用 PIL 读回代替)
python <skill_dir>/scripts/verify_gifs.py --dir stickers --count 24
Read 生成的 _verify_1.png/_verify_2.png 目检:每个格子有主体、无黑底、特效在。任何格子异常 → 修内存帧生成逻辑(几乎都是贴图坐标问题),重跑再验。
Step 6 交付
- present_files 全部 GIF。
- 用户要封面/图标时:Step 3 的比例 +
make_cover.py --crop ... --color "R,G,B" --out-cover cover.png --out-icon icon.png(50x50 图标从 240 封面缩放)。
坑清单(历史上真实踩过,改代码前必读)
- 负坐标 paste 毒化多帧 GIF:图层移出画布时直接
cv.paste(c, 负坐标, c)会产生黑色像素块或整层丢失,optimize/disposal/统一调色板都救不了。必须用paste_safe()(先 crop 出界部分)。带表达式参数的 paste 调用(如paste(c,(pos[0],pos[1]-dy)))批量替换时容易漏,改完必须 grep 复查cv\.paste确认零漏网。 - PIL ImageSequence 读回不可信:正常 GIF 读回也会缺帧/黑帧。验收唯一可信方式是浏览器无头截图(verify_gifs.py 已封装)。
- 微软雅黑渲染 ♡/♥ 字形变豆腐块:要心形一律自绘(两圆+三角 polygon),引擎已内置
draw_heart。 - 压缩参数链:128 色 20 帧约 305KB → 28 色 10 帧无抖动约 60-96KB。色数与帧数是两个独立杠杆,先减色再减帧。
- 抠图 bbox 坐标系陷阱:matting 输出 getbbox 后比例与原图直觉差异大(竖图可能变横图),封面裁剪必须走网格定位。
扩展模式(references/)
references/effects.md— 10 方向 × 24 动效的完整参数与情绪对照references/planning_prompts.md— 选题策划模式(人设/文案桶/6 维评分)与 16 格 AI 出图提示词模板(ImageGen 路线,与本引擎的 GIF 路线互补)