---
author: 이승은 (seungeun@goodganglabs.com)
date: 2026-05-04
purpose: Inventory of all my work on the GPU server, prepared ahead of mono-repo reorg meeting with Sunghoon + Dasol
status: Initial draft — please review & correct anything wrong before deciding migration
---

# 0. TL;DR for the mono-repo meeting

| What | Where | Lines up with Sunghoon's draft as |
|---|---|---|
| **V3 expression engine + dataset pipeline** (current focus) | `/dataset/AnimaSync-mic-fix/` (this repo, untracked) | New package — no existing slot in his draft |
| **V3 emotion-detection model** (MicroALBERT) | `/dataset/AnimaSync-mic-fix/models/microalbert/` | `packages/lipsync-training/` (or its own slot) |
| **V2 lipsync model — training & ONNX export** | `/dataset/mead-expression-training/` | `packages/lipsync-training/` |
| **V2 + V1 lipsync runtime (WASM, npm published)** | `/dataset/lipsync-wasm-se/` | `packages/lipsync-wasm/` (canonical) |
| **V1 phoneme model — training & lipsync server** | `/dataset/lipsync-server/` | `packages/lipsync-server/` |
| **AnimaSync public landing site** | github.com/GoodGangLabs/AnimaSync — local clone in this repo | `packages/animasync-site/` (separate from V3 work) |

**Owner correction for everyone:** Linux files under `/dataset/` owned by the `gpuuser` account were authored by me. I worked under a shared GPU login before getting my own `se` account. The npm-publish commits in lipsync-wasm-se attributed to `jckim` / `jcggl` were also my work — they handled only the public-facing publish step due to security/access constraints.

**Action ask for whoever holds root:** `chown -R se:se` on the gpuuser-owned dirs listed in §5 so I can move/clean them.

---

# 1. Active V3 work — `/dataset/AnimaSync-mic-fix/`

This is my current working repo. Branch `mic-streaming`. Cloned from `github.com/GoodGangLabs/AnimaSync.git`.

The repo's git tree contains the **public AnimaSync landing page** (index.html, examples/, nginx.conf, Dockerfile). Everything below was added on top as untracked work — it has never been committed and never been pushed.

## 1a. V3 source code (untracked — should migrate to mono-repo's V3 package)

| Path | Size | Purpose |
|---|---|---|
| `scripts/compiler/` | 1.3 MB | The V3 expression engine: parametric / archetype / expressive compilers, eye_motion, blend, data_pipeline, lam_wrapper, abc_experiment, generate_audio, tts |
| `scripts/clamp_vad.py`, `restore_and_smart_clamp_vad.py`, `stratified_resplit.py`, `export_dataset_xlsx.py`, `demo_server.py` | small | VAD utilities + dataset tooling |
| `models/microalbert/` | 952 KB | V3 emotion-detection model (train, distill, teacher, dataset, tokenizer, eval, report) |
| `data/emotion/` (Python + JSON only) | small | Dataset code: seed_scenarios_final.jsonl, vad_assignments.jsonl, emotion_vad_anchors.json, augment scripts, label_kote.py, kote_relabeled.jsonl, 데이터셋_설명서.md |
| `expression_presets.json` (root) | 95 KB | 47 user-authored L1/L3/L5 presets — runtime data the compiler reads |
| `tools/blendshape-editor.html`, `tools/blendshape-player.html` | small | Browser viewers for previewing blendshapes (used in ABC experiments) |
| `examples/guide/lipsync-wasm-wrapper.js` | small | Wrapper for the V2 WASM bundle on the guide page |

## 1b. Big binary / regenerable artifacts (gitignored — too large or reproducible)

| Path | Size | Action |
|---|---|---|
| `checkpoints/klue_teacher_clean_ctx2/` | 2.7 GB | KLUE-distilled teacher checkpoints (`best.pt`, `latest.pt`). Keep on disk for retraining/reload but do NOT commit. |
| `data/wikipedia_ko/` | 828 MB | HuggingFace cache of `wikimedia/wikipedia/20231101.ko`. Re-downloadable. |
| `data/audio_preview/` | bulk of remaining 2 GB | TTS-generated audio samples for V3 scenarios. Regenerable from `scripts/compiler/generate_audio.py`. |
| `data/v3_training/` | 140 KB | Training samples produced by `data_pipeline.py` (currently just `daily_003.npz` from the V2 spike). Regenerable. |
| `data/viewer/` | small | Rendered ABC viewer JSONs from `abc_experiment.py`. Regenerable. |
| `avatar/` | 98 MB | VRM/GLB avatars used by the viewer. Source models — keep but don't commit. |
| `examples/guide/lipsync_wasm_v2.js`, `lipsync_wasm_v2_bg.wasm` | small | V2 WASM bundle copied from lipsync-wasm-se. Build artifact, not source. |

## 1c. Known cleaned/removed today (2026-05-04)

- `audio_gen.logreset` (empty file) — deleted
- `AnimaSync V3 데이터셋 설명서.pdf` (root duplicate) — deleted; canonical is in docs/
- `elevenlabs/` (5 voice-preview mp3s, 2 MB) — deleted

## 1d. Open question

**Does any of `1a` belong on the `mic-streaming` branch of `GoodGangLabs/AnimaSync.git`?** That repo is the public AnimaSync landing page. My V3 research code is unrelated to the landing page and probably shouldn't be pushed there. Likely answer: leave untracked here, migrate to mono-repo when Dasol's structure is ready. **Confirm with Dasol.**

---

# 2. V2 lipsync model — full lineage

Production V2 = the `@goodganglabs/lipsync-wasm-v2` npm package powering the AnimaSync demo.

```
mead-expression-training/checkpoints_anime_face_v2i/epoch_200.pt
        ↓ (export via e2f/distill/export_onnx.py + INT8 quantize + streaming variant)
mead-expression-training/e2f/distill/emotion_face_streaming_int8.onnx   (5,581,388 bytes, Mar 30)
        ↓ (copy + rename, see commit "feat: add streaming ONNX model for WASM rebuild")
lipsync-wasm-se/model/lipsync_student.onnx                              (5,581,388 bytes — byte-identical)
        ↓ (wasm-pack build, lipsync-wasm-se/v2/build.sh)
lipsync-wasm-se/v2/pkg/                                                 → published as @goodganglabs/lipsync-wasm-v2 on npm
        ↓ (CDN)
AnimaSync site & customer integrations
```

**Cleaned in mead-expression-training (2026-05-04, by me):** intermediate epoch checkpoints, sibling experiment dirs, redundant ONNX exports.

**Kept (do not delete):**
- `checkpoints_anime_face_v2i/epoch_200.pt` — the deployed V2 PyTorch source
- `e2f/distill/emotion_face_streaming_int8.onnx` and its FP32 sibling — the deployed ONNX
- `e2f/distill/export_onnx.py`, `train_anime_face.py` — the export + training scripts

---

# 3. V1 lipsync model — full lineage

V1 = phoneme classifier, 111-dim, 13 MB ONNX. Older than V2, still published as `@goodganglabs/lipsync-wasm-v1` on npm.

| Layer | Location | Owner |
|---|---|---|
| Production ONNX | `lipsync-server/assets/lipsync/phoneme_clf_gglabs.onnx` (Feb 4, 2026) | gpuuser (= me) |
| Export script | `lipsync-server/convert_to_onnx.py` | gpuuser (= me) |
| WASM-side symlink | `lipsync-wasm/model/phoneme_clf_gglabs.onnx` → above | gpuuser (= me) |
| WASM build (`-se` fork) | `lipsync-wasm-se/v1/` — pulls ONNX in via `dev-setup.sh` symlink at build time | me |
| Stale duplicates | `text-to-face/archive/.../assets/lipsync/phoneme_clf_gglabs.onnx` (Jan 26) | gpuuser (= me) |
| Stale duplicates | `text-to-face-se/archive/text2avatar-inference/original/.../assets/lipsync/phoneme_clf_gglabs.onnx` (Jan 22) | gpuuser (= me) |

**Status:** V1 is in production but not under active development. The training source (the `.pt` that produced `phoneme_clf_gglabs.onnx`) is in `lipsync-server/` and needs review when I have time.

**Action:** for the mono-repo migration, V1 lives in `packages/lipsync-server/`. The two stale duplicates in `text-to-face*` archives can be deleted once the migration is done.

---

# 4. Repository inventory

| Path | Branch | Last commit | Status / role |
|---|---|---|---|
| `/dataset/AnimaSync-mic-fix/` | mic-streaming | 2026-03-20 | **ACTIVE.** V3 work happens here on top of the public-site git tree. |
| `/dataset/AnimaSync/` | feat/emotion-demo | 2026-03-13 | **STALE clone** of same GitHub repo. Older branch checkout — anything in it that matters is on GitHub. Safe to archive. |
| `/dataset/lipsync-wasm-se/` | feat/emotion-demo | 2026-04-08 | **ACTIVE.** Production WASM repo (V1 + V2). Has admin-dashboard, license-server, build-api, gateway, npm publish setup. Migrates as `packages/lipsync-wasm/`. |
| `/dataset/lipsync-wasm/` | model-integration | 2026-02-24 | **STALE clone** of `GoodGangLabs/lipsync-wasm.git`, superseded by `-se` fork. No production infra. Safe to archive after confirming nothing was committed locally that wasn't pushed. |
| `/dataset/lipsync-server/` | (gpuuser-owned, no recent git activity) | 2026-02-20 | V1 phoneme classifier training + serving. Migrates as `packages/lipsync-server/`. **Needs chown.** |
| `/dataset/mead-expression-training/` | (gpuuser-owned) | — | V2 expression model training. Cleaned 2026-05-04. Migrates as part of `packages/lipsync-training/`. **Partially writable; some chown still useful.** |
| `/dataset/se-mead-expression-training/mead-expression-training/` | feat/lam-conditioning | 2026-03-09 | My fork with E2F + LAM conditioning work. Symlinks `output/` → the gpuuser dir above. Decide: still active? Or can fold back into the original? |
| `/dataset/text-to-face/` | (gpuuser-owned) | Jan 2026 | Earlier text→face exploration. Probably superseded by current V3 work. **Needs chown to clean.** |
| `/dataset/text-to-face-se/` | (my fork) | Feb 2026 | Same as above but my fork. Contains stale V1 ONNX duplicate in `archive/`. Decide: archive whole repo? |
| `/dataset/qwen-tts/` | (gpuuser) | Apr 2026 | TTS exploration. Probably superseded by ElevenLabs in current pipeline. |
| `/dataset/tts_emotion_data/`, `tts_conversational/`, `tts_bulk/`, `tts-server/` | (gpuuser) | various | TTS data generation experiments. Status unclear, please confirm. |
| `/dataset/MEAD/` | (gpuuser) | — | Source MEAD dataset (large). Used by mead-expression-training. Keep. |
| `/dataset/KOTE/` | — | — | Source KOTE dataset (14 MB). Used by `models/microalbert/distill.py`. Keep. |
| `/dataset/research/` | (gpuuser) | — | Sunghoon's body-motion repos (GestureVRM, GestureLSM, MeshRet). Not mine. |
| `/home/se/viewer_samples_distill/` | n/a | Mar 2026 | 4 distill JSONs (angry/happy/sad/surprised L3) in my home dir. Probably stale after current V3 work. |

---

# 5. Files / dirs I authored but can't write to (need chown)

These are all my work but the Linux owner is `gpuuser`, blocking me from cleaning them as `se`. Request: `chown -R se:se` on each.

- `/dataset/lipsync-server/`
- `/dataset/lipsync-wasm/`  *(also a candidate for outright archive — superseded)*
- `/dataset/text-to-face/`  *(candidate for outright archive)*
- `/dataset/qwen-tts/`  *(candidate — confirm)*
- `/dataset/tts_*` directories  *(confirm what's still relevant)*

---

# 6. Security note

Two GitHub Personal Access Tokens were embedded in remote URLs (visible to anyone with shell access to the GPU server). Resolved 2026-05-04:
- Old tokens revoked on github.com
- New token stored in `~/.git-credentials` (mode 600, my account only)
- Embedded tokens stripped from `git remote -v` output for both `AnimaSync` and `mead-expression-training` (my fork)

Long-term improvement: switch to SSH keys or `gh auth login` so no token is on disk at all.

---

# 7. Suggested decisions for the meeting

1. **V3 expression engine + dataset pipeline needs an explicit slot** in Sunghoon's draft. Suggest `packages/expression-compiler/` or `packages/v3-expression-engine/`. None of his existing slots match.
2. **Confirm: my V3 source does NOT get pushed to `GoodGangLabs/AnimaSync.git`.** It migrates directly into the mono-repo when ready.
3. **Two `mead-expression-training` dirs** (the gpuuser-original and my `-se` fork) — fold back into one, or keep my fork as canonical?
4. **Dataset versioning**: `checkpoints/` is 2.7 GB, MEAD is large, audio caches grow. LFS / DVC / mounted-only? My current ad-hoc approach is "regenerate or keep on disk forever."
5. **Label schema slots** (Sunghoon's item 2): for V3 I'd reserve at minimum `emotion` (16-enum), `vad` (3 floats), `level` (1/3/5), `speaker_id`, `audio_tag` (eleven_v3), `style`, `instruct`, `context`.
6. **Stale clones safe to archive after meeting**: `/dataset/AnimaSync/`, `/dataset/lipsync-wasm/`, possibly `/dataset/text-to-face*/`.
