---
name: project-agent-gui-lam
description: "GUI pour agents IA avec avatars LAM 3D parlants en temps réel — état d'avancement complet"
metadata: 
  node_type: memory
  type: project
  originSessionId: 7de9b929-9050-430b-9b36-f74849c1c0a7
---

## Projet principal

`/mnt/DATA/WORK/agent-gui` — web app locale (Python stdlib + vanilla JS) pour piloter des agents LLM avec interface graphique. V1 fonctionnelle avec avatar ASCII, canvas pixel-art animé, chat, sessions JSONL, adaptateurs CLI.

**Why:** Créer une surcouche graphique universelle pour agents IA (Hermes, Claude Code, etc.) avec avatars visuels modélisables.

**How to apply:** Quand on reprend le travail, partir de cet état et continuer vers l'intégration LAM.

---

## Intégration LAM — état au 2026-06-15

### Objectif
Ajouter des avatars 3D photoréalistes parlants en temps réel dans agent-gui. Pipeline :
```
[Agent répond] → [TTS → audio 16kHz mono]
    → [Python: Audio2Expression → 52 blendshapes ARKit @ 30fps]
        → [WebSocket JSON] → [Browser: WebGL Gaussian Splatting renderer]
```

### Ce qui est installé et fonctionnel ✅

**Conda envs sur cette machine :**
- `lam` (Python 3.11) — pour LAM core (génération avatar depuis photo)
  - PyTorch 2.11+cu128, pytorch3d 0.7.9, diff-gaussian-rasterization, nvdiffrast, simple-knn
  - gcc 13 installé dans l'env (nécessaire pour compiler pytorch3d avec CUDA 12.8)
- `lam_a2e` (Python 3.10) — pour Audio2Expression (live talking)
  - PyTorch 2.11+cu128, transformers, librosa, gradio-gaussian-render

**Repos clonés :**
- `/mnt/DATA/WORK/LAM` — modèle LAM core (génère avatar 3D depuis photo)
- `/mnt/DATA/WORK/LAM_Audio2Expression` — Audio2Expression (audio → blendshapes)
  - Poids téléchargés et extraits : `pretrained_models/lam_audio2exp_flow/`
  - **Testé et fonctionnel** : 52 canaux ARKit, 30 FPS, 4ms/seconde d'audio après warm-up

**Résultat test Audio2Expression :**
- Input : `assets/sample_audio/BarackObama_english.wav`
- Output : `bsData.json` — 240 frames à 30fps, 52 blendshapes ARKit par frame
- Format : `{ "names": ["browDownLeft", "jawOpen", ...], "frames": [[...], ...], "metadata": {"fps": 30} }`

**Hardware :**
- GPU : RTX 5090, 32 Go VRAM
- Drivers NVIDIA : 595.71, CUDA 13.2 (max supporté)
- CUDA Toolkit 12.8 installé via conda dans les envs

---

### Ce qui reste à faire

**Étape 1 — Exporter l'avatar 3D (bloquant : nécessite Blender 4.0+)**
- Vérifier si Blender est installé : `blender --version`
- Si oui : lancer `app_lam.py` dans l'env `lam`, charger une photo portrait, exporter le ZIP avatar
- Le ZIP contient : `animation.glb`, `skin.glb`, `offset.ply`, `bsData.json`, `vertex_order.json`
- Des avatars sample sont déjà dispo dans `LAM_Audio2Expression/assets/sample_lam/` (barbara, james, status, vfhq_case1) — peut être utilisé pour tester sans Blender

**Étape 2 — Ajouter TTS dans agent-gui**
- Options légères : `pyttsx3` (offline, stdlib-like), `edge-tts` (Microsoft gratuit), `kokoro` (qualité)
- Output : fichier WAV 16kHz mono → passé à Audio2Expression

**Étape 3 — Ajouter WebSocket dans agent_gui/app.py**
- Ajouter endpoint WebSocket `/ws/avatar`
- Au moment où l'agent répond : TTS → Audio2Expression → stream blendshapes JSON à 30fps vers browser

**Étape 4 — Remplacer canvas pixel-art par renderer WebGL**
- Package npm : `gaussian-splat-renderer-for-lam` (repo : `aigc3d/LAM_WebRender`)
- API : charge le ZIP avatar une fois, polling `getExpressionData()` à chaque frame rAF
- Ou utiliser les avatars sample GLB directement si le format est compatible

**Alternative rapide sans Blender :**
Utiliser les avatars sample fournis (`barbara`, `james`) pour tester le pipeline complet avant d'avoir son propre avatar.

---

### Architecture finale visée

```
agent_gui/
  app.py          ← ajouter WebSocket + appel subprocess Audio2Expression
  avatar_lam.py   ← nouveau module : lance lam_a2e env, streame blendshapes
  tts.py          ← nouveau module : TTS → WAV 16kHz
static/
  app.js          ← remplacer canvas pixel-art par WebGL renderer LAM
  avatar.zip      ← avatar exporté depuis photo (ou sample barbara/james)
```

### Commandes utiles pour reprendre

```bash
# Tester Audio2Expression
cd /mnt/DATA/WORK/LAM_Audio2Expression
$HOME/miniconda3/bin/conda run -n lam_a2e python inference_streaming_audio.py

# Lancer app Gradio LAM (pour exporter avatar depuis photo, nécessite Blender)
cd /mnt/DATA/WORK/LAM
$HOME/miniconda3/bin/conda run -n lam python app_lam.py

# Lancer app Gradio Audio2Expression (demo complète avec WebGL)
cd /mnt/DATA/WORK/LAM_Audio2Expression
$HOME/miniconda3/bin/conda run -n lam_a2e python app_lam_audio2exp.py
```
