New: Earn 20% as an AgentAlley affiliate. Share your link and earn on every sale you refer. Join now New: Earn 20% as an affiliate. Join now

Turn a character image into a full pack of animated chat

Animated Sticker Studio · 动态表情包工坊

by fantuan-lab · MIT license · ★ 26 on GitHub

Animated Sticker Studio · 动态表情包工坊 cover

Turn a character image (mascot, OC, pet photo, 3D render, or just a text description) into a full pack of animated chat stickers — real keyframe animation plus motion, captions and effects — exported to the exact spec of WeChat 表情开放平台,…

---
name: animated-sticker-studio
description: Turn a character image (mascot, OC, pet photo, 3D render, or just a text description) into a full pack of animated chat stickers — real keyframe animation plus motion, captions and effects — exported to the exact spec of WeChat 表情开放平台, Telegram, LINE, Discord, Slack, WhatsApp or plain GIF, auto-compressed under each size limit, visually verified and zipped. Use for 表情包/动态表情/贴纸/sticker pack requests of any size (8 to 100+), for redoing single stickers, or for converting an existing pack to another platform.
---

# Animated Sticker Studio · 动态表情包工坊

Pipeline: **plan → reference → atlases → cut → build → look → fix → deliver**. Scripts live in `scripts/` (Python 3 + Pillow; ffmpeg for Telegram/MP4). Run every script with `--help` before first use.

## 1. Plan (manifest.json)

Ask only what you cannot default. Defaults: 16 stickers, Simplified Chinese captions, `generic` GIF; add `wechat` if they mention 微信表情开放平台/上架, `telegram`/`line`/`discord`/`slack`/`whatsapp` if named. WeChat albums take any 8–24 stickers; LINE packs must be 8, 16 or 24.

Write `manifest.json` next to the work (format: [references/manifest.md](references/manifest.md)). Pick captions from [references/phrases.md](references/phrases.md) unless the user gave their own, and give every entry:

- `pose` — what the body does, in English, concrete enough to draw (arms, props, expression). Two entries may never share the same pose with only new text.
- `motion` + `icon` + optional `caption_fx` — chosen to match the line (table in phrases.md).
- For the 4–8 stickers where the gesture IS the joke (挥手, 鼓掌, 打字, 干饭, 点赞, 哭, 打哈欠, 比心…) put them in a group with `"keys": 4` and write four `key_poses`. These become real frame-by-frame animation. Single poses get procedural motion only.

Overview

Pipeline: plan → reference → atlases → cut → build → look → fix → deliver. Scripts live in scripts/ (Python 3 + Pillow; ffmpeg for Telegram/MP4). Run every script with --help before first use.

Manual install (npx, ZIP)
Claude Codenpx skills add fantuan-lab/animated-sticker-studio -g -a claude-code
Claude.ai / desktopZip the folder and upload it under Settings → Capabilities → Skills.
Codex, Cursor, other agentsPoint them at SKILL.md. The other files are plain text.

Connects with Agent Alley MCP · agentalley.io/mcp

Files included

  • SKILL.md5.4 KB
Read SKILL.md here
fantuan-lab/main1 file
SKILL.md
Show the full text64 lines

Animated Sticker Studio · 动态表情包工坊

Pipeline: plan → reference → atlases → cut → build → look → fix → deliver. Scripts live in scripts/ (Python 3 + Pillow; ffmpeg for Telegram/MP4). Run every script with --help before first use.

1. Plan (manifest.json)

Ask only what you cannot default. Defaults: 16 stickers, Simplified Chinese captions, generic GIF; add wechat if they mention 微信表情开放平台/上架, telegram/line/discord/slack/whatsapp if named. WeChat albums take any 8–24 stickers; LINE packs must be 8, 16 or 24.

Write manifest.json next to the work (format: references/manifest.md). Pick captions from references/phrases.md unless the user gave their own, and give every entry:

  • pose — what the body does, in English, concrete enough to draw (arms, props, expression). Two entries may never share the same pose with only new text.
  • motion + icon + optional caption_fx — chosen to match the line (table in phrases.md).
  • For the 4–8 stickers where the gesture IS the joke (挥手, 鼓掌, 打字, 干饭, 点赞, 哭, 打哈欠, 比心…) put them in a group with "keys": 4 and write four key_poses. These become real frame-by-frame animation. Single poses get procedural motion only.

Show the user the plan as a short table (编号 / 文案 / 动作) before spending on generation when the pack is ≥24 or the user seems picky; otherwise go.

2. Reference

  • User image → copy into ref/, set character.reference. Write character.anchors: one English sentence listing what must never change (shape, colours, markings, accessories).
  • 3D model → render a front/three-quarter view with the face visible, use that.
  • Only a description → gen_atlas.py manifest.json --provider hiapi --make-reference "<description>", show the result, get a yes.
  • Use only art the user owns or may adapt. Do not recreate a third party's character from memory.

3. Atlases

One sheet per group (≤16 cells). Either:

  • Your own image tool (Codex image_gen, etc.): gen_atlas.py manifest.json --print-prompts, generate each sheet with the reference attached, save as the printed path, then set the group's atlas and grid.
  • Bundled providers: gen_atlas.py manifest.json --provider hiapi|openai (keys only from env: HIAPI_API_KEY, or OPENAI_API_KEY + optional OPENAI_BASE_URL/OPENAI_IMAGE_MODEL). Skips groups that already have an atlas; --group N redraws one. Never print or echo a key.

Open every sheet at full size. Reject and redraw (--group N) when the identity drifts, a cell is missing or doubled, limbs are clipped, or two poses are the same.

4. Cut

cut_atlas.py manifest.json — removes solid or fake-checkerboard backgrounds, finds each sprite by its pixels (not by a rigid grid), writes sprites/ and fills every entry's sprites list. Open each atlases/*.index.png and confirm number N shows the pose written for entry N. If the model swapped cells, fix by editing sprites paths in the manifest — never by renaming captions to fit wrong art.

5. Build

python3 scripts/build_pack.py manifest.json out --mp4          # platforms from manifest
python3 scripts/build_pack.py manifest.json out --only 3,7-9   # quick re-render of a few while iterating

Fonts are found automatically (PingFang/Hiragino/Noto CJK/YaHei); --font overrides. Each platform file is re-encoded until it fits that platform's byte limit; report.json records the setting used.

6. Look (required — you cannot watch a GIF, so look at these)

  • out/review/motion-XX.png: every sticker as 4 frames side by side on alternating white/dark rows. Check: the motion reads as the caption's emotion, keyframes don't jitter sideways, nothing clipped, no white halo on dark rows, captions legible, accents not covering the face.
  • out/review/contact.png: whole pack at once — check variety and that no two look alike.
  • The build's JSON summary: failing (per-platform spec failures) and pack_issues (near-duplicate poses, wrong pack size, stickers that barely move). Fix all of them or tell the user exactly which remain and why.

Fix loop: wrong motion/icon/caption → edit manifest, --only; bad art → redraw that group or cell; then rebuild everything once at the end.

7. Deliver

Give the user: the ZIP path, 预览.html (opens offline; light/dark/checker backgrounds and a chat mock-up), the MP4 if made, and a one-line pass/fail per platform from the summary. Mention platform limits that still need a human: WeChat needs a 750×400 banner and copyright paperwork, LINE/Telegram need account-side upload. Specs are in references/platforms.md; say they are as of 2026-11 and the platform console wins.

Keep the original reference and atlases out of the ZIP unless asked.

1---
2name: animated-sticker-studio
3description: Turn a character image (mascot, OC, pet photo, 3D render, or just a text description) into a full pack of animated chat stickers — real keyframe animation plus motion, captions and effects — exported to the exact spec of WeChat 表情开放平台, Telegram, LINE, Discord, Slack, WhatsApp or plain GIF, auto-compressed under each size limit, visually verified and zipped. Use for 表情包/动态表情/贴纸/sticker pack requests of any size (8 to 100+), for redoing single stickers, or for converting an existing pack to another platform.
4---
5 
6# Animated Sticker Studio · 动态表情包工坊
7 
8Pipeline: **plan → reference → atlases → cut → build → look → fix → deliver**. Scripts live in `scripts/` (Python 3 + Pillow; ffmpeg for Telegram/MP4). Run every script with `--help` before first use.
9 
10## 1. Plan (manifest.json)
11 
12Ask only what you cannot default. Defaults: 16 stickers, Simplified Chinese captions, `generic` GIF; add `wechat` if they mention 微信表情开放平台/上架, `telegram`/`line`/`discord`/`slack`/`whatsapp` if named. WeChat albums take any 8–24 stickers; LINE packs must be 8, 16 or 24.
13 
14Write `manifest.json` next to the work (format: [references/manifest.md](references/manifest.md)). Pick captions from [references/phrases.md](references/phrases.md) unless the user gave their own, and give every entry:
15 
16- `pose` — what the body does, in English, concrete enough to draw (arms, props, expression). Two entries may never share the same pose with only new text.
17- `motion` + `icon` + optional `caption_fx` — chosen to match the line (table in phrases.md).
18- For the 4–8 stickers where the gesture IS the joke (挥手, 鼓掌, 打字, 干饭, 点赞, 哭, 打哈欠, 比心…) put them in a group with `"keys": 4` and write four `key_poses`. These become real frame-by-frame animation. Single poses get procedural motion only.
19 
20Show the user the plan as a short table (编号 / 文案 / 动作) before spending on generation when the pack is ≥24 or the user seems picky; otherwise go.
21 
22## 2. Reference
23 
24- User image → copy into `ref/`, set `character.reference`. Write `character.anchors`: one English sentence listing what must never change (shape, colours, markings, accessories).
25- 3D model → render a front/three-quarter view with the face visible, use that.
26- Only a description → `gen_atlas.py manifest.json --provider hiapi --make-reference "<description>"`, show the result, get a yes.
27- Use only art the user owns or may adapt. Do not recreate a third party's character from memory.
28 
29## 3. Atlases
30 
31One sheet per group (≤16 cells). Either:
32 
33- **Your own image tool** (Codex `image_gen`, etc.): `gen_atlas.py manifest.json --print-prompts`, generate each sheet with the reference attached, save as the printed path, then set the group's `atlas` and `grid`.
34- **Bundled providers**: `gen_atlas.py manifest.json --provider hiapi|openai` (keys only from env: `HIAPI_API_KEY`, or `OPENAI_API_KEY` + optional `OPENAI_BASE_URL`/`OPENAI_IMAGE_MODEL`). Skips groups that already have an atlas; `--group N` redraws one. Never print or echo a key.
35 
36Open every sheet at full size. Reject and redraw (`--group N`) when the identity drifts, a cell is missing or doubled, limbs are clipped, or two poses are the same.
37 
38## 4. Cut
39 
40`cut_atlas.py manifest.json` — removes solid or fake-checkerboard backgrounds, finds each sprite by its pixels (not by a rigid grid), writes `sprites/` and fills every entry's `sprites` list. **Open each `atlases/*.index.png`** and confirm number N shows the pose written for entry N. If the model swapped cells, fix by editing `sprites` paths in the manifest — never by renaming captions to fit wrong art.
41 
42## 5. Build
43 
44```sh
45python3 scripts/build_pack.py manifest.json out --mp4 # platforms from manifest
46python3 scripts/build_pack.py manifest.json out --only 3,7-9 # quick re-render of a few while iterating
47```
48 
49Fonts are found automatically (PingFang/Hiragino/Noto CJK/YaHei); `--font` overrides. Each platform file is re-encoded until it fits that platform's byte limit; `report.json` records the setting used.
50 
51## 6. Look (required — you cannot watch a GIF, so look at these)
52 
53- `out/review/motion-XX.png`: every sticker as 4 frames side by side on alternating white/dark rows. Check: the motion reads as the caption's emotion, keyframes don't jitter sideways, nothing clipped, no white halo on dark rows, captions legible, accents not covering the face.
54- `out/review/contact.png`: whole pack at once — check variety and that no two look alike.
55- The build's JSON summary: `failing` (per-platform spec failures) and `pack_issues` (near-duplicate poses, wrong pack size, stickers that barely move). Fix all of them or tell the user exactly which remain and why.
56 
57Fix loop: wrong motion/icon/caption → edit manifest, `--only`; bad art → redraw that group or cell; then rebuild everything once at the end.
58 
59## 7. Deliver
60 
61Give the user: the ZIP path, `预览.html` (opens offline; light/dark/checker backgrounds and a chat mock-up), the MP4 if made, and a one-line pass/fail per platform from the summary. Mention platform limits that still need a human: WeChat needs a 750×400 banner and copyright paperwork, LINE/Telegram need account-side upload. Specs are in [references/platforms.md](references/platforms.md); say they are as of 2026-11 and the platform console wins.
62 
63Keep the original reference and atlases out of the ZIP unless asked.
64 
View all files on GitHub →

Details

License
MIT
Stars on the repo
★ 26
Checked
Source
fantuan-lab/animated-sticker-studio ↗
Creator
fantuan-lab · 1 listing
View creator

Similar skills

See all →
SkillMake Japanese TV-anime style videos with codeAnime celedenfunf/reelmimic · by edenfunfMake Japanese TV-anime style videos (MP4) with code — cel-shaded characters with tapered line art, big detailed eyes, hair clumps with a specular band, comedic anime reactions (sweat drop, anger vein, sparkle eyes, ≥< eyes, dot eyes, tears), painted skies with cumulus clouds, school/street/classroom/rooftop sets with time-of-day palettes, speed/focus lines, impact frames, dramatic zooms, smears, sakura petals and anime subtitles (CJK). Canvas 2D rendered frame by frame in headless Chrome, encoded with ffmpeg. Use when a reference video or brief calls for anime / 動畫 / 日系動畫 / アニメ / cel-shaded / slice-of-life / school romance / shōnen-style reactions, or when the video-clone router picks the anime-cel style. 2D only; characters are original (Hina, Ren) or new ones built on the same rig.★ 3.6k GitHub starsSkillDirect and produce a short film made entirely in codeLemo opuscarlemomo-ai/lemo-opuscar · by lemomo-aiDirect and produce a short film made entirely in code, in one of the styles of the Lemo-Opuscar library (e.g. Impasto Oil Painting 油画厚涂, Watercolor Brush 水彩笔刷, Ukiyo-e 浮世绘, Satellite Briefing 卫星简报, Exploded Teardown 产品拆解, Microscope Story 显微叙事). Use when the user asks for a video, film, short, promo, explainer or animation (视频、短片、动画、宣传片) in a named style, including data, science and product explainers built from real material such as satellite imagery, laser scans, CAD files or archive scans (数据解说、科普、产品拆解); when they want a film made about their own topic and haven't chosen a style (help them choose); or when they ask which film styles there are. Not for editing or converting existing video files.★ 3k GitHub starsSkillGenerate Ian-style Xiaohei illustrations for articles, postsdzhng/skills · by dzhngGenerate Ian-style Xiaohei illustrations for articles, posts, blogs, Notion documents, workflows, methods, processes, structures, states, metaphors, and opinions. Use when the user asks for weird, hand-drawn, Xiaohei, article, editorial, body illustrations, illustration ideas, shot lists, title removal, image edits, or image regeneration. By default, all image text and annotations are English, even when the source article is Chinese; only use another language when the user explicitly asks.★ 1.3k GitHub starsSkillCreating game art through Scenario MCP: spritesScenario game assetsscenario-labs/skills · by scenario-labsUse when creating game art through Scenario MCP: sprites, sprite sheets, icons, props, loot, tilesets and autotile terrain transitions, seamless tiles, isometric buildings, top-down maps, pixel art, UI buttons and panels, parallax background layers or depth planes for side-scrollers, and character or concept art; or when assets need transparent backgrounds, background removal, style-consistent variation batches, upscaling, pixel-grid cleanup, or PNG export for Unity, Godot, or Unreal.★ 854 GitHub starsSkillTrain custom LoRAs with ostris AI-ToolkitAI-Toolkit LoRA Trainer (WAN 2.2 & Z-Image)artokun/comfyui-mcp · by artokunTrain custom LoRAs with ostris AI-Toolkit. Covers WAN 2.2/2.1 (people, styles, video motion) and Z-Image (Turbo & Base, low-VRAM image LoRAs). Use when the user wants to train a WAN or Z-Image LoRA; covers local + RunPod setup, dataset prep, key params, and using the result in a ComfyUI workflow.★ 759 GitHub starsSkillAnime/illustration text-to-imageANIMA 1.0 (Anima Base Ultra) Text-to-Image Workflowsartokun/comfyui-mcp · by artokunAnime/illustration text-to-image (ANIMA 1.0, ~2B Cosmos DiT). Use for anime, manga, illustrated characters; accepts Danbooru tags + natural language; runs/trains on <6GB VRAM; includes anime inpainting via Anima-LLLite ControlNet★ 759 GitHub stars