# Day 2 - MuseTalk 集成与服务器部署

**日期**：2026-01-14  
**开发环境**：Windows 11 (本地) / Ubuntu 24.04 (服务器)  
**目标平台**：Dell R730 (GPU1: RTX 3090 用于 MuseTalk)

---

## 🎯 今日目标

1. 端口配置（解决端口冲突）
2. MuseTalk 服务器部署
3. MuseTalk 完整集成测试

---

## 🔧 端口配置

### 问题描述
服务器上 8000 端口被 `xiaozhi-server` 占用，3000 端口被 `LunaTV` 占用。

### 解决方案
| 服务 | 原端口 | 新端口 |
|------|--------|--------|
| 后端 API | 8000 | **8006** |
| 前端 UI | 3000 | **3002** |

### 修改的文件
- `frontend/src/app/page.tsx` - API_BASE
- `frontend/src/app/publish/page.tsx` - API_BASE
- `frontend/next.config.ts` - rewrite destination
- `README.md` - 访问地址
- `Docs/DEPLOY_MANUAL.md` - 部署命令和验证步骤

**状态**：✅ 已完成

---

## 🔧 MuseTalk 服务器部署

### 环境配置
```bash
# 创建 conda 环境
conda create -n musetalk python=3.10 -y
conda activate musetalk

# 安装 PyTorch (CUDA 12.1)
pip install torch==2.1.0 --index-url https://download.pytorch.org/whl/cu121
pip install torchvision --index-url https://download.pytorch.org/whl/cu121

# 安装 MuseTalk 依赖
pip install -r requirements.txt
pip install openmim
mim install mmengine mmcv mmdet

# mmpose 安装问题 (chumpy 编译失败)
pip install mmpose --no-deps
pip install xtcocotools munkres json_tricks
```

### 模型权重下载
```bash
huggingface-cli download TMElyralab/MuseTalk --local-dir ./models/musetalk
huggingface-cli download stabilityai/sd-vae-ft-mse --local-dir ./models/sd-vae-ft-mse
huggingface-cli download openai/whisper-tiny --local-dir ./models/whisper
```

**状态**：✅ 完成（权重 ~7GB 已下载）

---

## 🔧 前端 API 请求问题

### 问题描述
前端请求 `http://127.0.0.1:8006` 失败，浏览器把 127.0.0.1 解析到本地机器而非服务器。

### 解决方案
改用动态 API 地址：
```typescript
const API_BASE = typeof window !== 'undefined' 
  ? `http://${window.location.hostname}:8006`
  : 'http://localhost:8006';
```

**状态**：✅ 已修复

---

## 🔧 venv/conda 环境隔离

### 问题描述
后端使用 Python venv，MuseTalk 使用 conda 环境，无法直接 import。

### 解决方案
重写 `lipsync_service.py`，通过 subprocess 调用 conda 环境：
```python
self.conda_python = Path.home() / "ProgramFiles" / "miniconda3" / "envs" / "musetalk" / "bin" / "python"

cmd = [str(self.conda_python), "-m", "scripts.inference", ...]
env["CUDA_VISIBLE_DEVICES"] = str(self.gpu_id)  # 使用 GPU1
subprocess.run(cmd, cwd=str(self.musetalk_dir), env=env, ...)
```

**状态**：✅ 代码已完成

---

## 🔧 模型权重路径问题

### 问题描述
健康检查返回 `weights: False`。

### 原因
huggingface-cli 下载后目录结构是嵌套的：
- 期望：`models/musetalkV15/`
- 实际：`models/musetalk/musetalkV15/`

### 修复
```python
# 修复后
required_dirs = [
    self.musetalk_dir / "models" / "musetalk" / "musetalkV15",
    self.musetalk_dir / "models" / "whisper",
]
```

**状态**：✅ 已修复，健康检查返回 `ready: True`

---

## 🚨 遗留问题：MuseTalk 未被调用

### 现象
视频生成成功，但日志显示未调用 MuseTalk 推理。

### 诊断结果

1. **健康检查通过**：
```json
{"conda_env": true, "weights": true, "gpu": true, "gpu_name": "NVIDIA GeForce RTX 3090", "ready": true}
```

2. **代码逻辑问题**（已修复但未验证）：
```python
# 之前 check_health() 返回字典，if 判断永远为 True
if await lipsync.check_health():  # 返回 dict，非 bool

# 修复后
health = await lipsync.check_health()
if health.get("ready", False):  # 正确检查
```

3. **服务器代码同步问题**：
   - 本地代码已修改
   - 服务器可能未完全拉取最新代码

### 待验证
1. 重启后端进程（当前进程可能还在用旧代码）
2. 观察终端日志是否显示 `[LipSync] Starting MuseTalk inference...`
3. 如果日志显示但推理失败，检查 subprocess 调用错误

---

## ✅ 今日完成

1. ✅ 端口配置（8000→8006, 3000→3002）
2. ✅ MuseTalk conda 环境安装
3. ✅ 模型权重下载 (~7GB)
4. ✅ 前端动态 API 地址
5. ✅ lipsync_service.py subprocess 调用方式
6. ✅ 模型权重路径修复
7. ✅ 健康检查功能验证
8. ✅ videos.py check_health() 返回值检查修复
9. ✅ 服务器代码同步验证

---

## ❌ 未完成

1. ❌ MuseTalk 实际推理调用（代码已就绪，需重启后端验证）
2. ❌ 端到端唇形同步测试
3. ❌ 社交媒体发布测试

---

## 📋 明日首要任务

```bash
# 1. 重启后端
cd /home/rongye/ProgramFiles/ViGent/backend
source venv/bin/activate
uvicorn app.main:app --host 0.0.0.0 --port 8006

# 2. 生成视频，观察终端日志
# 应该看到:
# [LipSync] Health check: {'ready': True, ...}
# [LipSync] Starting MuseTalk inference...

# 3. 如果推理失败，检查 subprocess 输出
```
