intentional-masking
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@intentional-maskingRender a speaking video using avatar.glb and speech.wav"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
intentional-masking
MCP server for rendering Ready Player Me avatars with lip-sync using Remotion and React Three Fiber.
Features
render_frame - Render a single still image of an avatar with expression, pose, camera, and lighting options
render_speaking_video - Render a video of an avatar speaking with real phoneme-based lip-sync from audio
Related MCP server: Remotion Video Generator
Requirements
Node.js 18+
macOS, Linux, or Windows
Installation
cd intentional-masking
npm install
npm run buildUsage
As MCP Server
Add to your Claude Code configuration (~/.claude.json or project .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 Tools
render_frame
Render a single still frame of an avatar.
{
"avatar_path": "/path/to/avatar.glb",
"expression": "happy",
"pose": "greeting",
"camera_preset": "closeup",
"lighting_preset": "soft",
"background": "#1a1a2e"
}Options:
expression:neutral|happy|thinking|surprisedpose:default|greeting|listeningcamera_preset:closeup|medium|fulllighting_preset:soft|dramatic|naturalbackground: Hex color (default:#1a1a2e)
Returns: { "success": true, "image_path": "/path/to/output.png" }
render_speaking_video
Render an avatar speaking with lip-sync from audio.
{
"avatar_path": "/path/to/avatar.glb",
"audio_path": "/path/to/speech.wav",
"camera_preset": "closeup",
"lighting_preset": "soft",
"background": "#1a1a2e"
}Audio requirements:
16kHz 16-bit mono PCM WAV (as produced by info-dump)
Returns: { "success": true, "video_path": "/path/to/output.mp4", "duration_seconds": 5.2 }
Architecture
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 applicationLip-Sync Pipeline
Audio analysis: rhubarb-lip-sync-wasm analyzes 16kHz audio
Phoneme mapping: Rhubarb shapes (A-H, X) → Ready Player Me viseme morph targets
Frame interpolation: Smooth blending between viseme shapes
Video rendering: Remotion captures Three.js scene frame-by-frame
Rhubarb Shape Mapping
Shape | Phonemes | RPM Morph Targets |
A | P, B, M (closed) | viseme_PP |
B | K, S, T (teeth) | viseme_kk, viseme_nn |
C | EH, AE (vowels) | viseme_I, viseme_E |
D | AA (wide open) | viseme_aa |
E | AO, ER (rounded) | viseme_O, viseme_aa |
F | UW, OW, W (puckered) | viseme_U |
G | F, V (teeth-on-lip) | viseme_FF |
H | L sound | viseme_TH, viseme_nn |
X | Silence | viseme_sil |
Integration with info-dump
This server pairs with info-dump for complete TTS → avatar rendering:
info-dump generate_audio("Hello!", voice, output_path)
↓
intentional-masking render_speaking_video(avatar_path, audio_path)
↓
MP4 video with lip-synced avatarAvatar Requirements
Avatars must be Ready Player Me GLB files with standard viseme morph targets:
viseme_aa,viseme_E,viseme_I,viseme_O,viseme_Uviseme_PP,viseme_FF,viseme_TH,viseme_DD,viseme_kk,viseme_nn,viseme_sil
Create avatars at readyplayer.me
Development
# Run tests
npm test
# Watch mode
npm run dev
# Preview Remotion compositions
npm run remotion:previewEnvironment Variables
INTENTIONAL_MASKING_ROOT- Project root directory (default: cwd)INTENTIONAL_MASKING_OUTPUT- Output directory for rendered files (default:{root}/output)
License
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/IzzyFuller/intentional-masking'
If you have feedback or need assistance with the MCP directory API, please join our Discord server