pixel-asset-gen
ドット絵ワークスペース用のキャラクタースプライトを、codexのimage_genに指示して生成する手順。 承認済みシートを土台にしたidentity差し替え、10行の意味的一貫性、実画面プレビュー、 runtime反映前の承認までを扱う。Animaのpixel_sheet.pngを新規作成・差し替え・修復するとき、…
音声ポップアップの疑似Live2Dアニメーション用フレームセット(表情×5フレーム)を、 grokのimage_editで既存bustupから生成しPIL合成で揃える手順。Animaのボイスチャットで 口パク・瞬きを動かしたい、新しいanimaにアニメーションフレームを追加したい、 「bustupをLive2D風に動かして」「口パクフレームを作って」と言われたときに使う。 リギング・Live2D SDKは使わない(AIアバター用途は別途ライセンス契約対象になり得るため不採用)。
$ npx -y skills add xuiltul/animaworks --skill bustup-frame-gen --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/bustup-frame-genContext preview
The summary Claude sees to decide when to auto-load this skill.
音声ポップアップの疑似Live2Dアニメーション用フレームセット(表情×5フレーム)を、 grokのimage_editで既存bustupから生成しPIL合成で揃える手順。Animaのボイスチャットで 口パク・瞬きを動かしたい、新しいanimaにアニメーションフレームを追加したい、 「bustupをLive2D風に動かして」「口パクフレームを作って」と言われたときに使う。 リギング・Live2D SDKは使わない(AIアバター用途は別途ライセンス契約対象になり得るため不採用)。
name: bustup-frame-gen description: >- 音声ポップアップの疑似Live2Dアニメーション用フレームセット(表情×5フレーム)を、 grokのimage_editで既存bustupから生成しPIL合成で揃える手順。Animaのボイスチャットで 口パク・瞬きを動かしたい、新しいanimaにアニメーションフレームを追加したい、 「bustupをLive2D風に動かして」「口パクフレームを作って」と言われたときに使う。 リギング・Live2D SDKは使わない(AIアバター用途は別途ライセンス契約対象になり得るため不採用)。
音声ポップアップ(animaタブ長押し)のbustupを、静止画フレーム切替+CSS/JSで動かすための アセット生成手順。2026-08-20にmeiで確立。
方式: リギングなし。口3段階×瞬きのフレーム切替 + CSS呼吸/揺れ + lerp視線追従 + TTS音量(RMS)口パク。AI VTuberのデファクト(感情タグ→プリセット切替、Neuro-samaも同方式)。
配置先 `<data_dir>/animas/<name>/assets/`(通常 `~/.animaworks/animas/<name>/assets/`):
avatar_bustup_<expr>_frame_base.png # 目開き+口閉じ(その表情の口) avatar_bustup_<expr>_frame_blink.png # 目閉じ avatar_bustup_<expr>_frame_half.png # 口半開き avatar_bustup_<expr>_frame_open.png # 口開き avatar_bustup_<expr>_frame_blinkhalf.png # 目閉じ+口半開き
neutral / smile / laugh / troubled / surprised / thinking / embarrassed。 **neutralも明示的に `_neutral_` を含む**(既存 `avatar_bustup.png` の命名特例は適用しない)
**表情単位で5枚揃えて置く**(中途半端に置かない)
仕様の正本は `docs/issues/20260820_mei-pseudo-live2d-popup.md`
scratchpadに表情ごとのサブディレクトリを作り、既存bustupを `src.png` としてコピーする。
W=<scratchpad>/bustup-frames; A=~/.animaworks/animas/<name>/assets
for e in neutral smile laugh troubled surprised thinking embarrassed; do
mkdir -p $W/$e
cp $A/avatar_bustup_${e}.png $W/$e/src.png # neutralは avatar_bustup.png の場合あり
done`scripts/gen_one.sh <expr_dir>` を直列実行する(grokのheadlessに `image_edit` ツールがある。 プロンプト全文はスクリプト内。要点: src.png と完全同一を保ち、指定の1変化だけ加える)。
for e in neutral smile laugh troubled surprised thinking embarrassed; do bash .claude/skills/bustup-frame-gen/scripts/gen_one.sh $W/$e done
各dirに `eyes_closed.png` / `mouth_half.png` / `mouth_open.png` ができる。 1表情10分程度(timeout 600)。
**grok image_editは元画像と解像度・フレーミングが変わる**(実測: 1024×1365→864×1152)。 ただし**同一呼び出しで生成された差分3枚同士はピクセル一致**する。したがって:
python3 .claude/skills/bustup-frame-gen/scripts/compose_frames.py $W/neutral $W/smile ...
口領域は `mouth_half` と `eyes_closed` の差分の行分布から自動検出(最下クラスタ=口、 マージン18px)。スクリプトがサイズ一致assertと検出失敗assertを持つ。
**smile/laughの注意**: 元絵が笑い目+開口の表情では「rest状態=元表情の見た目」になるよう 合成結果を目視確認する(口閉じフレームが不自然に真顔化していないか)。
配置前に必ず各表情5枚を実際に開いて確認する:
A=~/.animaworks/animas/<name>/assets
for e in neutral smile laugh troubled surprised thinking embarrassed; do
cp $W/$e/frame_base.png $A/avatar_bustup_${e}_frame_base.png
cp $W/$e/eyes_closed.png $A/avatar_bustup_${e}_frame_blink.png
cp $W/$e/mouth_half.png $A/avatar_bustup_${e}_frame_half.png
cp $W/$e/mouth_open.png $A/avatar_bustup_${e}_frame_open.png
cp $W/$e/frame_blinkhalf.png $A/avatar_bustup_${e}_frame_blinkhalf.png
done
ls $A/*_frame_*.png | wc -l # 35 になること静的JSもアセットもサーバー再起動不要で即反映される。
**nginx経由は認証で503になる**ので localhost:18500 直結 + agent-browser を使う:
curl -s "http://127.0.0.1:18500/api/animas/<name>/assets/avatar_bustup_neutral_frame_base.png" \
-o /dev/null -w "%{http_code}\n" # 200
# agent-browserでチャットページを開き、ポップアップを直接呼ぶ
agent-browser eval "openVoicePopup('<name>')"
agent-browser eval "document.querySelector('.bustup-animator-set.active') ? 'active-set' : 'no-active'"確認項目: 常時の呼吸・揺れ・ランダム瞬き / TTS再生中の音量連動口パク / 感情タグでの表情クロスフェード / フレーム無しanimaが静的bustupのままであること。
| 罠 | 対処 | | --- | --- | | image_editの解像度・フレーミング変化 | 差分同士だけで合成。src.pngとは絶対に混ぜない | | Live2D Cubism SDK | AIアバター用途は規模問わず別途ライセンス契約対象になり得る。使わない | | nginx経由のE2Eが503 | localhost:18500直結 + `agent-browser eval` | | 表情フレームの部分配置 | `_frame_base.png` の存在=5枚全部あるとみなされる。5枚単位で置く | | 笑い目表情のbase合成 | rest状態が元表情の見た目になっているか目視必須 |
Organization-as-Code for autonomous AI agents. Brain-inspired memory that grows, consolidates, and forgets. Multi-model (Claude/Codex/Gemini/Cursor/Ollama).
Repo: xuiltul/animaworks
ドット絵ワークスペース用のキャラクタースプライトを、codexのimage_genに指示して生成する手順。 承認済みシートを土台にしたidentity差し替え、10行の意味的一貫性、実画面プレビュー、 runtime反映前の承認までを扱う。Animaのpixel_sheet.pngを新規作成・差し替え・修復するとき、…