Custom 3D Models
Bring your own avatars to Avatarium.
Supported Formats
- GLB/GLTF – Recommended format
- Ready Player Me – Direct import supported
From Ready Player Me
The easiest way to create a custom avatar:
Step 1: Create Your Avatar
- Visit readyplayer.me (opens in a new tab)
- Create or customize an avatar
- Copy the avatar URL (ends in
.glb)
Step 2: Use in Avatarium
<Avatar
model={{
type: 'ready-player-me',
url: 'https://models.readyplayer.me/YOUR_AVATAR_ID.glb'
}}
/>Required Morph Targets
Add these parameters to your Ready Player Me URL for lip sync:
?morphTargets=ARKit,Oculus+Visemes,mouthOpen,mouthSmile,eyesClosed,eyesLookUp,eyesLookDown
&textureSizeLimit=1024
&textureFormat=pngFull URL example:
https://models.readyplayer.me/YOUR_ID.glb?morphTargets=ARKit,Oculus+Visemes,mouthOpen,mouthSmile,eyesClosed,eyesLookUp,eyesLookDown&textureSizeLimit=1024&textureFormat=pngFrom Custom GLB
Requirements
Your 3D model must have:
- Standard humanoid skeleton – Head, neck, spine bones
- ARKit blend shapes – For lip sync and expressions
- Proper scale – 1 unit = 1 meter
Required Blend Shapes
For lip sync to work, include these visemes:
| Blend Shape | Description |
|---|---|
viseme_sil | Silence |
viseme_aa | "ah" sound |
viseme_E | "ee" sound |
viseme_I | "ih" sound |
viseme_O | "oh" sound |
viseme_U | "oo" sound |
viseme_FF | "f/v" sound |
viseme_TH | "th" sound |
viseme_DD | "d/t" sound |
viseme_kk | "k/g" sound |
viseme_CH | "ch/j" sound |
viseme_SS | "s/z" sound |
viseme_nn | "n" sound |
viseme_RR | "r" sound |
viseme_PP | "p/b/m" sound |
Optional Expression Blend Shapes
| Blend Shape | Description |
|---|---|
mouthSmile | Happy expression |
eyesClosed | Blinking |
browDownLeft | Frowning |
browInnerUp | Concerned |
Uploading Your Model
Via Dashboard
- Go to Dashboard > Avatars > Create
- Select Custom Model
- Upload your GLB file
- Configure personality and voice
- Save
Via API
POST /v1/avatars
Content-Type: multipart/form-data
{
"name": "My Custom Avatar",
"model": <GLB file>,
"personality": "You are a helpful assistant..."
}Using Custom Model in SDK
<Avatar
model={{
type: 'custom',
url: 'https://your-cdn.com/avatar.glb'
}}
personality="You are a helpful assistant..."
/>Or reference an uploaded avatar by ID:
<Avatar avatarId="avt_your_custom_avatar" />Performance Optimization
File Size
- Keep models under 10MB
- Compress textures to 1024x1024 or smaller
- Use Draco compression for geometry
Texture Tips
- Use PNG for transparency, JPEG for opaque
- Atlas multiple textures when possible
- Avoid textures larger than 2048x2048
Polygon Count
- Target: 20,000-50,000 triangles
- Mobile: Under 30,000 triangles
- Test on low-end devices
Testing Your Avatar
In Dashboard
- Upload your model
- Use the Preview tab
- Test lip sync with sample text
- Check all expressions work
Common Issues
| Issue | Solution |
|---|---|
| Lips don't move | Check blend shape names match exactly |
| Avatar too big/small | Ensure 1 unit = 1 meter in export |
| Textures missing | Embed textures in GLB file |
| Slow to load | Reduce file size and texture resolution |
Best Practices
- Test on mobile – Most users are on phones
- Optimize aggressively – Smaller = faster
- Use Ready Player Me – Easiest path to custom avatars
- Keep expressions simple – 15 visemes is enough
- Validate blend shapes – Use Blender to verify