Axolotl stickers (美西螈表情包)
一切皆為純 Python(numpy + Pillow)加上 ffmpeg;無需 GPU,無需 Blender。儲存庫根目錄下包含 engine/、kit/ 和 out/ 資料夾。
pip install numpy pillow # ffmpeg 必須在 PATH 中
python engine/build.py 301 --force # 渲染單一規格(依 ID)
python engine/build.py 12,40-45 --force # 渲染多個規格
python engine/build.py # 渲染所有尚未完成的規格(可中斷續傳)
python engine/sheet.py 301-310 # 產生審閱表 -> ref/sheet_sel_N.png(封面 + 每個 3 幀)
python engine/manifest.py # 新增貼圖後重新整理 out/stickers.json
python engine/tornado.py 我沒事 # 水龍捲貼圖("-" 表示無文字);需先執行 engine/fetch_mc.py
輸出:out/NNN_文字.gif 及封面 out/_封面/NNN_文字.png。
新增貼圖
每行一個貼圖,寫在 engine/specs.py 中(在對應區段末尾新增,以保持現有 ID 穩定):
S('摸鱼', 'flagwave', 'happy', [], hold='fish', s=0.7)
# 文字 動作 表情 特效 額外參數
S('别催了', 'rage', 'angry', ['steam'], style='red', tmode='shake')
S('暴富', 'spin', 'money', ['coins', ('float', 'money', 3, 4)], style='gold')
選擇能演繹該短語的動作,再選表情、0–2 個特效,以及最多一個道具/帽子。文字保持在 2–5 個字元(6 個字元以上會換行成兩行並變小)。使用 / 強制換行。
- 動作(
engine/motions.py、engine/motions2.py,共 75 種):nod shake hop jump flip spin sink popup peek hide tremble rage tantrum dance wag bow kowtow doze flop melt dash slidein look lookup wave cheer clap belly flipover float zoom pounce approach tilt shrink puff grow drift buoy sway headbang headbob roll circle stare shy turnaway think boing wobble faint run launch stretch slosh petrify glitch squish hiccup shakeoff nuzzle rise recoil bonk,以及道具動作 swing flagwave offer chomp drink read typing scan umbrella(這些會讀取hold=參數)。 - 表情(
FACESin motions.py):normal smile happy joy love star shock surprise angry rage sad cry sob teary sleep sleepy tired meh dead dizzy smug wink focus struggle blep drool money awkward side cool eat shy tiny up grin catface blank pout sparkle determined worried xd — 或使用字典如{'L': 'big', 'R': 'big', 'mouth': 'o'}。 - 特效(
engine/fx.py):hearts question exclaim shock anger sweat panic zzz notes tears stream rain bulb confetti fireworks stars steam gloom sparkles speed fire sun moon blush coins snow leaves check cross boom bubbles ghost dots loading bolt flash thumb plus1 flowers swirl skull twinkle brokenheart;通用型可接受圖標名稱:('float', 'diamond', n, size)、('pop', 'pin', size, (dx, dy))、('stay', 'clock', size, (dx, dy))、('say', 'mail')、('orbit', 'star', n, (rx, ry), size)、('fall', 'flower', n, size)。 - hold=(手持立體方塊道具):pickaxe sword wrench flag fish rod heart diamond emerald cookie apple melon carrot potion bulb book cup boba phone laptop gift cake tnt grass brick bowl popcorn torch rtorch magnifier mail key trophy controller bucket umbrella …
- wear=[…](帽子/臉部裝備):party crown nightcap shades glasses band helmet halo horns phones bow chef grad flowers mask towel ice
- style= 文字顏色:pink(預設)blue purple red green gold gray cyan — 配合情緒(悲傷用 blue,生氣用 red,發財用 gold,完成用 green,疲憊用 gray,夜晚用 purple)。
- tmode= 文字動畫:stay(預設)wave bounce shake shiver pulse droop swing zoom spin pop type slam。
交付前審閱
渲染完成後,打開審閱表仔細檢查:
- 封面(第一幀)是否完整顯示文字及美西螈;
- 道具/特效在貼圖尺寸下是否清晰可見,且未藏於文字帶後方(頭部上方的任何物體會與文字共享空間);
- 白色背景是否保持白色(輸出器會在用 ffmpeg 染色後以全幀調色板重試);
- 檔案是否 ≤ 1000 KB(輸出器會自動從 64 色逐步降至 24 色)。
注意事項
- 會在循環中途離開畫面的動作(launch、sink、dash、popup、slidein、glitch)必須避免使用
pop/slam/type文字——否則封面會捕捉到美西螈在畫面外。 - 同一動作過多貼圖會顯得重複:整個貼圖組中單一動作最好約 6 次(
python -c "import sys; sys.path.insert(0,'engine'); import specs, collections; print(collections.Counter(s['motion'] for s in specs.all_specs()).most_common(10))")。 - 前腿很小且位於頭部下方;僅靠腿部的動作幾乎看不出——需搭配道具或特效。
- 道具的座標是基於頭部模型的像素:臉部在 z = -10,頭頂在 y = 9,+x 為觀看者的左方。
- 適合此受眾的幽默是「難繃」式的冷面搞笑,而非誇張尖叫。
水龍捲
engine/tornado.py 將漏斗繪製成與池塘相同的水體(一條輪廓線、同色,白色水線沿牆爬升),旋轉螺旋帶,飛濺水滴,並將美西螈與用 3D 製作的普通 Minecraft 物品(鐵/海龜頭盔、美西螈桶、TNT)一同 3D 翻滾。先執行一次 python engine/fetch_mc.py 從你的 Minecraft 客戶端(1.21.2+ jar)複製這些紋理——這些檔案不會被提交。