Codex Skill · WeChat GIF Sticker Pack

agent-meme-forge

从参考图或纯文字角色概念生成一套真的会被发送的动态表情包。默认让 image_gen 只画 2x2 关键姿势,本地再按动作模板渲染 16 帧 GIF,避免自由 16 格带来的跳闪。 每个表情都要过 sendability gate:复用场景、情绪价值、创意钩子和视觉笑点缺一不可。

梗优先

每个表情都要有明确聊天场景:催进度、假装听懂、组会渡劫、生产别碰、早八索命。

风格化本人

保留发型、脸型、气质和标志特征,但避免高仿真人换脸,更适合公开发布。

微信打包

同时输出人类可读 GIF 名和微信上传所需的数字文件、缩略图、封面、图标、横幅。

主动生图

支持 text_concept 直接起角色,自动写无文字 2x2 keypose 提示词,再统一导演动作和加中文梗。

交互选择

新手可以用 plan-wizard 选择参考图片或文字概念、场景人设、画面风格、数量、质量模式和生图 provider。

模板导演

把收到离线、加载中、先装懂、文献山等高频动作产品化,本地按模板渲染 16 帧。

QC 门禁

投稿模式默认跑 strict QC 和连续性 QC:假透明、边缘出格、跳帧、首尾不闭合和单图 bounce 都会被拒绝。

AI Mascot Sample

当前推荐链路会先用 text_concept 生成原创 AI 吉祥物的 2x2 keypose 提示词, 再用 Codex image_gen 交互生成,或用 openai_images_api 批量生成纯 #FF00FF / 真 alpha 的 4 个关键姿势。本地脚本会先跑 qc-sheet, 再统一尺度、按 motion template 渲染 16 帧、添加本地非文字特效、跑 continuity QC、加中文梗、压成微信规格 GIF。

这里的 demo 是原创暖色 AI 助手,不使用官方 logo 或品牌标识。完整测试包为 24 张, 默认展示为 keypose-first 路线;旧的 2x4 / 4x4 motion sheet 仍可作为 expert 模式,并在 manifest 记录来源和最终 GIF 帧数。

如果你在 Codex 里看到四格 keypose 原图,那只是中间素材,不是最终表情包。最终交付看 preview.html、named-gifs 里的中文命名 GIF,以及 wechat-submit/main 里的微信上传文件。

AI mascot meme GIF sample: 收到但灵魂已离线
收到离线
AI mascot meme GIF sample: 别催我在加载
加载中
AI mascot meme GIF sample: 文献又长出来了
文献山

Quick Start

python3 -m venv .venv
. .venv/bin/activate
pip install -e '.[dev]'
python skills/generate-meme-gif-pack/scripts/meme_pack.py plan-wizard

# Or build the plan directly:
python skills/generate-meme-gif-pack/scripts/meme_pack.py plan-pack \
  --subject "warm geometric AI assistant mascot with cream body and coral accents, original character, no official logo" \
  --persona 科研打工人 \
  --style clean-sticker \
  --pack-size 24 \
  --mode wechat \
  --source-mode keyposes \
  --keypose-layout 2x2 \
  --render-frame-count 16 \
  --quality-mode submission \
  --image-provider openai_images_api \
  --output output/ai-research-plan.json

# Automated provider path:
python skills/generate-meme-gif-pack/scripts/meme_pack.py generate-raw-batch \
  --plan output/ai-research-plan.json \
  --provider openai_images_api \
  --concurrency 3

# Codex built-in image_gen is a terminal action; external_files / ai_studio_hermes
# may continue with accept/QC in the same workflow after local files exist.
python skills/generate-meme-gif-pack/scripts/meme_pack.py qc-sheet \
  --input raw-frames/01-收到离线-2x2.png \
  --source-mode keyposes \
  --source-layout 2x2 \
  --quality-mode submission \
  --output output/qc/01-qc.json

	# Static 4x6 contact sheets are preview-only. If image_gen returns one:
	python skills/generate-meme-gif-pack/scripts/meme_pack.py split-sheet \
	  --input output/raw-sheets/ai-research-sheet.png \
	  --output-dir raw-frames \
	  --rows 6 \
	  --cols 4

	# First build a real preview from the first 3 accepted sheets:
	python skills/generate-meme-gif-pack/scripts/meme_pack.py build-preview \
	  --source-dir raw-frames \
	  --output-dir output/preview-first-3 \
	  --preview-count 3 \
	  --source-mode keyposes \
	  --keypose-layout 2x2 \
	  --source-layout auto \
	  --quality-mode submission \
	  --strict-qc \
	  --strict-continuity-qc

	# The first 3 are only a QC checkpoint, not the final pack.
	# Full build requires one accepted source image per sticker.
	python skills/generate-meme-gif-pack/scripts/meme_pack.py build-pack \
	  --source-dir raw-frames \
	  --output-dir output/my-pack \
  --persona 科研打工人 \
  --style clean-sticker \
  --pack-size 24 \
  --mode wechat \
  --source-mode keyposes \
  --keypose-layout 2x2 \
  --source-layout auto \
  --render-frame-count 16 \
  --quality-mode submission \
  --strict-qc \
  --strict-continuity-qc

WeChat Defaults

GIF 240x240, under 500KB
Thumb 120x120 PNG, under 50KB
Icon 50x50 PNG, transparent
Cover 240x240 PNG, transparent
Banner 750x400 PNG, no text
Reward user-provided 750x560 guide, 750x750 thanks, 5-15 char prompt
Album 16 or 24 animated stickers
Upload Playwright + Microsoft Edge for sticker.weixin.qq.com
Submit setInputFiles, save first, submit after user authorization
Review real copyright subject, 人物角色 - 女人 for portrait-like women
Effects local soul puff, loading dots, sweat drop, awkward lines
QC rejects checkerboard, edge touch, jump cuts, one-frame props, prop jumps, face/head drift
Manifest includes source_mode, motion_template, local_effects, prop_position_jump, face_shape_drift_score