故意掩盖
MCP服务器,用于使用Remotion和React Three Fiber渲染Ready Player Me化身的唇形同步。
特性
- render_frame -使用表情、姿势、相机和照明选项渲染化身的单个静止图像
- 渲染_峰值_视频 -从音频中渲染一个化身用基于真实音素的唇形同步说话的视频
需求
- Node.js 18+
- macOS、Linux或Windows
安装
cd intentional-masking
npm install
npm run build用法
作为MCP服务器
添加到您的Claude代码配置中(~/.claude.json 或项目 .claude/settings.local.json):
{
"mcpServers": {
"intentional-masking": {
"command": "node",
"args": ["/path/to/intentional-masking/dist/server/index.js"],
"env": {
"INTENTIONAL_MASKING_ROOT": "/path/to/intentional-masking"
}
}
}
}MCP工具
render_frame
渲染化身的单个静止帧。
{
"avatar_path": "/path/to/avatar.glb",
"expression": "happy",
"pose": "greeting",
"camera_preset": "closeup",
"lighting_preset": "soft",
"background": "#1a1a2e"
}选项:
expression:neutral|happy|thinking|surprisedpose:default|greeting|listeningcamera_preset:closeup|medium|fulllighting_preset:soft|dramatic|naturalbackground:十六进制颜色(默认值:#1a1a2e)
退货: { "success": true, "image_path": "/path/to/output.png" }
渲染_峰值_视频
从音频中渲染一个与嘴唇同步说话的化身。
{
"avatar_path": "/path/to/avatar.glb",
"audio_path": "/path/to/speech.wav",
"camera_preset": "closeup",
"lighting_preset": "soft",
"background": "#1a1a2e"
}音频要求:
- 16kHz 16位单声道PCM WAV(由 信息转储)
退货: { "success": true, "video_path": "/path/to/output.mp4", "duration_seconds": 5.2 }
建筑
src/
├── server/
│ ├── index.ts # MCP server entry point
│ ├── services/
│ │ └── lip-sync.ts # Rhubarb lip-sync integration
│ └── tools/
│ ├── render-frame.ts # Still image rendering
│ └── render-speaking-video.ts # Video rendering
├── config/
│ └── viseme-map.ts # Rhubarb → RPM morph target mapping
└── remotion/
├── index.ts # Remotion entry point
├── Root.tsx # Composition registration
├── AvatarFrame.tsx # Still frame composition
├── AvatarSpeaking.tsx # Speaking video composition
└── components/
├── Avatar.tsx # GLB model loader
├── Scene.tsx # Three.js scene setup
└── LipSyncController.tsx # Morph target application唇部同步流水线
- 音频分析: 大黄唇形同步 分析16kHz音频
- 电话映射:大黄形状(A-H,X)→ 准备玩家我viseme变形目标
- 帧插值:虎钳形状之间的平滑混合
- 视频渲染:Remion逐帧捕获Three.js场景
大黄形状映射
| 形状 | 音素 | RPM变形目标 |
|---|---|---|
| A | P、B、M(闭合) | viseme_PP |
| B | K,S,T(齿) | viseme_kk,viseme_nn |
| C | EH,AE(元音) | viseme_I,viseme_E |
| D | AA(全开) | viseme_AA |
| E | AO, ER (rounded) | viseme_O, viseme_aa |
| F | UW、OW、W(起皱) | viseme_U |
| G | F,V(唇齿) | viseme_FF |
| H | L声音 | viseme_TH,viseme_nn |
| X | 沉默 | viseme_sil |
与信息转储集成
此服务器与配对 信息转储 完整的TTS→ 化身渲染:
info-dump generate_audio("Hello!", voice, output_path)
↓
intentional-masking render_speaking_video(avatar_path, audio_path)
↓
MP4 video with lip-synced avatar头像要求
化身必须是Ready Player Me GLB文件,具有标准视位变形目标:
viseme_aa,viseme_E,viseme_I,viseme_O,viseme_Uviseme_PP,viseme_FF,viseme_TH,viseme_DD,viseme_kk,viseme_nn,viseme_sil
在以下位置创建头像 readyplayer.me
发展
# Run tests
npm test
# Watch mode
npm run dev
# Preview Remotion compositions
npm run remotion:preview环境变量
INTENTIONAL_MASKING_ROOT-项目根目录(默认:cwd)INTENTIONAL_MASKING_OUTPUT-渲染文件的输出目录(默认:{root}/output)
许可证
麻省理工学院
