DEV Community

Cover image for Real-Time Lip Sync for Rive 2D Characters: Visemes, State Machines, AI Voice & Production Setup
Praneeth Kawya Thathsara
Praneeth Kawya Thathsara

Posted on

Real-Time Lip Sync for Rive 2D Characters: Visemes, State Machines, AI Voice & Production Setup


Voice AI is getting very good.

The visual side often isn't.

You can connect an application to OpenAI Realtime, ElevenLabs, Gemini Live, or another voice system and create a conversation that sounds natural — but if the character on screen simply opens and closes its mouth, the illusion breaks immediately.

For a believable 2D AI character, you need more than audio playback.

You need a complete pipeline:

Voice / Audio
      ↓
Audio Analysis
      ↓
Phoneme / Viseme Detection
      ↓
Viseme Values
      ↓
Rive Character Rig
      ↓
Mouth Interpolation
      ↓
Expressions + Blinks + Gestures
      ↓
Living Interactive Character
Enter fullscreen mode Exit fullscreen mode

This guide focuses on the part that is often missing from lip-sync tutorials:

How do you actually prepare a production-ready Rive character for real-time lip sync?

We will cover:

  • What phonemes and visemes actually are
  • The mouth shapes a character needs
  • How to build the mouth system in Rive
  • State Machine vs Data Binding approaches
  • How to avoid robotic lip sync
  • How lip sync should coexist with expressions and gestures
  • Performance considerations for web and mobile
  • AI voice integration architecture
  • Stylized and non-human mascot lip sync
  • Production testing
  • When you need a custom Rive character instead of a generic avatar

If you need a custom production-ready Rive mascot rather than building the character system yourself, Mascot Engine creates interactive Rive characters, rigs, state machines, expressions, lip-sync systems and developer-ready .riv files.


1. Why Simple Mouth Open/Close Animation Doesn't Work

The most basic talking animation uses audio amplitude.

When the voice gets louder:

mouth = open
Enter fullscreen mode Exit fullscreen mode

When it gets quieter:

mouth = closed
Enter fullscreen mode Exit fullscreen mode

This can work for a tiny game character or a decorative animation.

But it does not look like speech.

Consider these sounds:

M
F
O
A
TH
S
Enter fullscreen mode Exit fullscreen mode

Your mouth forms completely different shapes for each one.

For example:

  • M / B / P require the lips to close
  • F / V bring the upper teeth toward the lower lip
  • O creates a rounded mouth
  • A creates a wider open mouth
  • S / Z keep the teeth relatively close
  • TH has its own recognizable tongue/teeth relationship

Amplitude cannot understand those differences.

That is why realistic 2D lip sync usually works with visemes.


2. Phonemes vs Visemes

A phoneme represents a unit of sound.

A viseme represents how a group of speech sounds looks visually on the mouth.

Several phonemes can share one viseme.

For example:

/p/
/b/
/m/
Enter fullscreen mode Exit fullscreen mode

sound different, but visually all three involve the lips closing.

So they can share a similar mouth position.

This is important because a character does not need a unique drawing for every possible speech sound.

Instead, we create a smaller collection of meaningful mouth poses and interpolate between them.


3. A Practical Viseme Set for Rive Characters

One widely referenced system is the Meta/Oculus viseme set.

A production character can use mouth targets such as:

Viseme Typical Sound Group Visual Direction
sil silence relaxed neutral mouth
PP p, b, m lips pressed together
FF f, v upper teeth touching lower lip
TH th tongue/teeth position
DD t, d slightly open articulation
kk k, g open rear articulation
CH ch, j, sh forward compressed mouth
SS s, z teeth close together
nn n, l relaxed open articulation
RR r rounded/contracted mouth
aa a wide open mouth
E e wider horizontal mouth
I ih smaller stretched mouth
O oh rounded mouth
U oo tighter rounded mouth

You may see systems described as having 15 or 16 positions depending on whether the neutral/silence pose is counted separately.

The important thing is not the marketing number.

The important thing is that the character artwork and runtime mapping agree on exactly what each value means.


4. You Don't Always Need Every Viseme

This is especially important for stylized mascots.

A realistic human face may benefit from a detailed viseme set.

A tiny cartoon robot probably doesn't.

A practical setup might look like this:

Simple mascot

Neutral
Closed
Wide
Open
Round
Teeth
Enter fullscreen mode Exit fullscreen mode

Standard conversational character

8–12 meaningful mouth positions
Enter fullscreen mode Exit fullscreen mode

High-fidelity conversational character

Full viseme set
+ tongue
+ teeth
+ jaw
+ expression compensation
Enter fullscreen mode Exit fullscreen mode

More mouth shapes do not automatically produce better animation.

The quality of the rig and transitions matters just as much.


5. Designing the Character Before Opening Rive

One of the biggest mistakes is building the character first and thinking about lip sync later.

For voice-driven characters, the face should be designed for animation.

The mouth area may need separate elements for:

Upper Lip
Lower Lip
Mouth Interior
Teeth
Tongue
Jaw
Cheeks
Enter fullscreen mode Exit fullscreen mode

Not every design needs every layer.

A flat mascot might only require:

Mouth Shape
Mouth Interior
Teeth
Enter fullscreen mode Exit fullscreen mode

The important part is keeping enough separation to create convincing deformation.

This is one area where a specialist character workflow matters.

At Mascot Engine, interactive mascot artwork can be designed specifically around the final Rive rig instead of treating animation as an afterthought.

That makes later additions such as talking, expressions, props, gestures and additional states much easier.


6. Two Ways to Build Mouth Shapes in Rive

There are two broad approaches.

Method A — Separate Mouth Shapes

Create separate vector artwork for different mouth positions.

For example:

mouth_sil
mouth_PP
mouth_FF
mouth_TH
mouth_DD
...
Enter fullscreen mode Exit fullscreen mode

Then control visibility or blend between states.

Advantages

  • Easy to understand
  • Easy to art-direct
  • Good for highly stylized characters
  • Individual shapes can look very different

Disadvantages

  • More artwork
  • More layers
  • Transitions can look like swapping images if poorly implemented

Method B — One Deformable Mouth Rig

Build a reusable mouth using vector paths, bones, constraints or controlled deformation.

Then create mouth poses from the same underlying structure.

Conceptually:

Neutral
   ↓
Closed
   ↓
Wide
   ↓
Open
   ↓
Round
Enter fullscreen mode Exit fullscreen mode

The geometry transitions between positions rather than simply switching artwork.

Advantages

  • Smoother transitions
  • Smaller visual system
  • Easier interpolation
  • Better for expressive characters

Disadvantages

  • Harder to rig correctly
  • Bad topology can create ugly deformation
  • Extreme mouth shapes may require additional corrective artwork

For many production mascots, a hybrid approach works best.


7. Recommended Rive Structure

Keep the runtime structure predictable.

For example:

Character
├── Body
├── Head
│   ├── Eyes
│   ├── Brows
│   └── Mouth
│       ├── MouthInterior
│       ├── Teeth
│       ├── Tongue
│       └── LipRig
├── Arms
└── Accessories
Enter fullscreen mode Exit fullscreen mode

Then keep runtime controls logically separated.

For example:

CharacterController

Speech
├── viseme
├── speaking
└── speechIntensity

Expression
├── emotion
├── blink
└── lookDirection

Behavior
├── idle
├── gesture
└── reaction
Enter fullscreen mode Exit fullscreen mode

The exact names are flexible.

Consistency is not.

Your developer should be able to understand the .riv contract without opening every animation manually.


8. State Machines and Data Binding

Modern Rive applications are not limited to playing linear animations.

Runtime code can control character behavior through Rive's interactive systems.

A useful architecture is to separate:

Speech
Expression
Behavior
Appearance
Enter fullscreen mode Exit fullscreen mode

instead of creating one giant state machine containing every possible combination.

For example, a voice assistant might conceptually expose:

viseme
speechIntensity
isSpeaking

emotion
lookX
lookY

activity
Enter fullscreen mode Exit fullscreen mode

The application can then update those values while Rive handles the visual result.

With Rive Data Binding, runtime applications can read and update exposed properties through View Models and View Model Instances.

This is particularly useful for reusable character systems because your application data can be separated from the visual implementation.


9. Do Not Build 15 Hard Cuts

Imagine receiving:

PP
aa
O
SS
PP
Enter fullscreen mode Exit fullscreen mode

and instantly switching the artwork every time.

The result will look mechanical.

Speech is continuous.

Your animation needs coarticulation — mouth movement naturally begins moving toward upcoming sounds while leaving previous ones.

A simplified conceptual model is:

Previous Viseme
      ↓
Interpolation
      ↓
Current Viseme
      ↓
Interpolation
      ↓
Next Viseme
Enter fullscreen mode Exit fullscreen mode

This is where Rive becomes particularly useful.

Instead of treating every viseme as an isolated frame, the character can transition through a designed animation system.


10. 120 FPS Is Not What Makes Lip Sync Good

High frame rates sound impressive.

But:

120 FPS ≠ good lip sync
Enter fullscreen mode Exit fullscreen mode

A badly designed mouth system at 120 FPS is still a badly designed mouth system.

The biggest factors are usually:

Viseme accuracy
+ timing
+ interpolation
+ coarticulation
+ character design
+ expression handling
+ audio synchronization
Enter fullscreen mode Exit fullscreen mode

A well-designed system running at 60 FPS can look excellent.

Frame rate should be treated as a performance characteristic, not as the primary measure of lip-sync quality.


11. Audio-to-Character Architecture

A typical real-time voice character architecture looks like this:

                ┌──────────────────────┐
                │   Voice AI / TTS     │
                │ OpenAI / ElevenLabs  │
                │ Gemini / Custom TTS  │
                └──────────┬───────────┘
                           │
                           ▼
                    Audio Playback
                           │
                           ▼
                    Audio Analysis
                           │
                           ▼
                  Viseme Detection
                           │
                           ▼
                   Viseme Timeline
                           │
                           ▼
                Rive Runtime Controller
                           │
              ┌────────────┼────────────┐
              ▼            ▼            ▼
            Mouth       Expression    Gesture
              │            │            │
              └────────────┼────────────┘
                           ▼
                    Final Character
Enter fullscreen mode Exit fullscreen mode

Notice something important:

The AI model should not directly control every visual layer.

It should provide meaningful data.

The animation system should decide how that data becomes motion.


12. Separate Speech From Emotion

A character can be:

Happy + Talking
Sad + Talking
Concerned + Talking
Excited + Talking
Neutral + Talking
Enter fullscreen mode Exit fullscreen mode

If your talking animation contains the entire face, you may accidentally overwrite the expression.

Instead, think in layers.

Layer 1 → Body / Idle
Layer 2 → Head movement
Layer 3 → Expression
Layer 4 → Eyes / Blink
Layer 5 → Mouth / Lip Sync
Layer 6 → Gesture / Reaction
Enter fullscreen mode Exit fullscreen mode

Now speech can continue while emotion changes.

For example:

activity = speaking
emotion = happy
viseme = O
Enter fullscreen mode Exit fullscreen mode

could simultaneously produce:

  • happy eyebrows
  • smiling eyes
  • a speaking mouth
  • subtle breathing
  • occasional hand gestures

That feels much more like a character than a talking SVG.


13. The Neutral Mouth Is Extremely Important

Do not underestimate sil.

The neutral mouth is used during:

  • pauses
  • breathing
  • sentence breaks
  • thinking
  • waiting
  • transitions between speech and idle

If the system immediately snaps back to a perfectly static closed mouth after every word, the character feels robotic.

A better system can transition:

Speech
 ↓
Short pause
 ↓
Soft neutral
 ↓
Idle expression
Enter fullscreen mode Exit fullscreen mode

The neutral mouth should also respect emotion.

A happy neutral mouth and a sad neutral mouth may not be visually identical.


14. Add Speech Intensity

Viseme ID tells us:

What mouth shape should be visible?

But it does not necessarily tell us:

How strongly should that shape be expressed?

An optional value such as:

speechIntensity = 0.0 → 1.0
Enter fullscreen mode Exit fullscreen mode

can influence:

  • jaw opening
  • mouth exaggeration
  • cheek movement
  • head movement
  • subtle body response

For example:

Quiet speech
speechIntensity = 0.25

Normal speech
speechIntensity = 0.55

Excited speech
speechIntensity = 0.90
Enter fullscreen mode Exit fullscreen mode

This creates much more personality than visemes alone.


15. Add Micro-Movements

Perfect mouth synchronization can still feel dead if everything else freezes.

During speech, consider subtle:

Blinking
Eye movement
Head movement
Breathing
Eyebrow reactions
Body weight shifts
Hand gestures
Enter fullscreen mode Exit fullscreen mode

These should not be random chaos.

They should be subtle secondary animation supporting the dialogue.

The goal is not:

animate everything.

The goal is:

remove the feeling that only the mouth is alive.


16. Lip Sync for Non-Human Mascots

This is where generic avatar systems often become limiting.

What if your character is:

  • a dog
  • a fox
  • a blob
  • a flame
  • a robot
  • a floating orb
  • a slash-shaped brand mascot
  • a creature without human lips?

You should not force human anatomy onto every mascot.

Instead, translate speech into the visual language of that character.

A robot might use:

LED mouth shapes
+ face panel deformation
Enter fullscreen mode Exit fullscreen mode

A creature might use:

Jaw
+ muzzle
+ tongue
Enter fullscreen mode Exit fullscreen mode

A minimal mascot might use:

4–6 abstract mouth shapes
Enter fullscreen mode Exit fullscreen mode

An orb could communicate speech through:

Shape deformation
+ amplitude
+ glow
+ internal motion
Enter fullscreen mode Exit fullscreen mode

This is why custom character rigging is often more valuable than simply attaching a generic lip-sync API.

Mascot Engine can build custom Rive mascots around the character's actual visual identity, including non-human characters where traditional human visemes would look wrong.


17. Expressions Need Corrective Mouth Poses

Here is a problem that appears later in production.

Suppose your normal aa mouth looks good.

Now apply a big smile.

The same mouth deformation may no longer look correct.

You may need corrective behavior for:

Happy + aa
Sad + aa
Concerned + O
Excited + PP
Enter fullscreen mode Exit fullscreen mode

You do not necessarily need to manually create every possible combination.

Instead, design the rig so the base expression and viseme deformation can coexist.

For high-quality character systems, this is often one of the most important parts of the rig.


18. Avoid State Explosion

Suppose you have:

15 visemes
×
5 emotions
×
5 activity states
Enter fullscreen mode Exit fullscreen mode

That already gives:

375 combinations
Enter fullscreen mode Exit fullscreen mode

Do not create 375 separate animations.

Build a layered system.

For example:

Viseme → mouth

Emotion → brows + eyes + mouth bias

Activity → body behavior

Intensity → exaggeration

Look direction → pupils/head
Enter fullscreen mode Exit fullscreen mode

The final character is the combination of those systems.

That is much more scalable.


19. Suggested Developer Contract

Before handing a .riv file to developers, document the runtime interface.

For example:

Artboard:
AICharacter

Controller:
CharacterController
Enter fullscreen mode Exit fullscreen mode

Possible runtime properties:

viseme
0–14

isSpeaking
boolean

speechIntensity
0.0–1.0

emotion
0 = neutral
1 = happy
2 = empathetic
3 = concerned
4 = surprised

activity
0 = idle
1 = listening
2 = thinking
3 = speaking
4 = error

lookX
-1.0–1.0

lookY
-1.0–1.0
Enter fullscreen mode Exit fullscreen mode

This is only an example.

Your actual contract should match the application architecture.

But documenting it prevents one of the most common Rive handoff problems:

The animation works in the Editor, but nobody knows how the app is supposed to control it.


20. Web and Mobile Performance

A production voice character may be running alongside:

Rive
+
WebGL / renderer
+
Audio playback
+
Audio analysis
+
AI voice streaming
+
Application UI
+
Network communication
Enter fullscreen mode Exit fullscreen mode

So optimization matters.

Do not benchmark only on a powerful development machine.

Test:

Desktop Chrome
Safari
iPhone
Android
Older mobile hardware
Low-power mode
Different screen sizes
Long conversations
Enter fullscreen mode Exit fullscreen mode

Watch:

CPU
GPU
Memory
Battery usage
Thermals
Frame stability
Audio synchronization
Enter fullscreen mode Exit fullscreen mode

A beautiful demo that overheats a phone after ten minutes is not production-ready.


21. Optimize the Rive File Too

The lip-sync engine is only part of performance.

The .riv file itself can become expensive.

Watch for:

  • unnecessary vector complexity
  • excessive clipping
  • too many nested artboards
  • unnecessarily heavy effects
  • unused assets
  • oversized embedded images
  • excessive simultaneous animations
  • complicated deformation where a simpler rig would work

A production mascot should be designed for the target runtime from the beginning.

This is another reason Mascot Engine focuses on developer-ready Rive character systems rather than only delivering animation videos.

The final asset needs to work inside the product.


22. Language and Accent Testing Matters

Do not assume that a lip-sync model performing well with one English speaker will perform equally well everywhere.

Test:

Different accents
Different speaking speeds
Male and female voices
Synthetic voices
Whispering
Excited speech
Children's voices where relevant
Multiple languages
Enter fullscreen mode Exit fullscreen mode

For multilingual products, test the actual languages used by your audience.

Some visual mouth positions are shared broadly, but phoneme inventories and pronunciation patterns vary between languages.

Your character system should degrade gracefully when the input is imperfect.


23. Test With Difficult Words

Do not test only:

Hello, how can I help you today?

Test sequences that expose mouth problems.

For example:

baby
pepper
very
five
mother
think
zebra
school
round
beautiful
Enter fullscreen mode Exit fullscreen mode

Then test fast sentences.

Then slow speech.

Then interruptions.

Then silence.

Then rapid AI responses.

You are looking for:

missed closures
late closures
mouth popping
excessive jaw movement
bad O → wide transitions
teeth flickering
tongue popping
neutral-state snapping
expression conflicts
Enter fullscreen mode Exit fullscreen mode

24. Audio Synchronization Is More Important Than Maximum FPS

Users are sensitive to the relationship between:

what they hear
Enter fullscreen mode Exit fullscreen mode

and

what they see
Enter fullscreen mode Exit fullscreen mode

The goal is not simply rendering frames quickly.

The goal is keeping the mouth movement perceptually synchronized with the actual playback.

When benchmarking a lip-sync solution, document:

Device
Browser
Audio source
Model/runtime
Frame rate
Inference window
Average latency
Worst-case latency
Test duration
Enter fullscreen mode Exit fullscreen mode

Without that information, statements such as:

sub-10ms

or

120fps

are difficult to evaluate meaningfully.


25. Pre-Rendered vs Real-Time Lip Sync

These are different problems.

Pre-rendered lip sync

Best for:

Marketing videos
Explainer videos
Pre-recorded content
Cinematics
Enter fullscreen mode Exit fullscreen mode

The system can process the complete audio before rendering.

Real-time lip sync

Best for:

AI assistants
Voice agents
Interactive mascots
Education apps
Games
Kiosks
Virtual companions
Customer support characters
Enter fullscreen mode Exit fullscreen mode

The character has to respond while audio is happening.

For these products, Rive is particularly useful because lip sync can be part of a larger interactive character system rather than being exported as a fixed video.


26. Rive vs Lottie for Conversational Characters

Lottie is excellent for many predefined motion assets.

But conversational characters require dynamic runtime behavior.

You may need:

Idle
+
Listening
+
Thinking
+
Speaking
+
Emotion
+
Lip Sync
+
Blink
+
Look Direction
+
User Interaction
Enter fullscreen mode Exit fullscreen mode

That is not simply a timeline playback problem.

Rive's runtime-controlled animation architecture makes it much better suited to characters whose behavior changes continuously based on application state.


27. Think Beyond Lip Sync

A believable AI mascot should not simply have:

Idle
Talking
Enter fullscreen mode Exit fullscreen mode

Consider the entire conversation lifecycle:

Connecting
    ↓
Ready
    ↓
Listening
    ↓
Thinking
    ↓
Speaking
    ↓
Waiting
    ↓
Listening
Enter fullscreen mode Exit fullscreen mode

Then layer emotion:

Neutral
Happy
Empathetic
Concerned
Surprised
Enter fullscreen mode Exit fullscreen mode

Then micro-interaction:

Blink
Look
Tap reaction
Gesture
Celebrate
Error
Sleep
Enter fullscreen mode Exit fullscreen mode

Now you are no longer building a lip-sync animation.

You are building a character system.


28. Example AI Companion Architecture

Imagine an AI companion built with Rive.

The application receives:

activity = "speaking";
emotion = "happy";
viseme = "O";
speechIntensity = 0.68;
lookX = 0.2;
lookY = -0.1;
Enter fullscreen mode Exit fullscreen mode

The Rive character interprets those values visually.

The body knows:

I am speaking.

The face knows:

I am happy.

The mouth knows:

Form the current O-like viseme.

The rig knows:

Speech intensity is moderately high.

The eyes know:

Look slightly right and upward.

This separation makes the character reusable.

The AI controls meaningful data.

Rive controls animation.


29. Production Checklist

Before shipping a Rive lip-sync character, check:

Artwork

  • [ ] Mouth layers are properly separated
  • [ ] Neutral mouth looks natural
  • [ ] Teeth do not flicker
  • [ ] Tongue is only visible when appropriate
  • [ ] Extreme poses maintain the character design

Visemes

  • [ ] Closed-lip sounds visibly close
  • [ ] F/V reads correctly
  • [ ] Rounded vowels are distinguishable
  • [ ] Wide/open vowels are distinguishable
  • [ ] Silence returns naturally to neutral

Animation

  • [ ] No hard popping between visemes
  • [ ] Transitions feel smooth
  • [ ] Fast speech remains readable
  • [ ] Slow speech does not look exaggerated

Expressions

  • [ ] Lip sync works while happy
  • [ ] Lip sync works while sad/concerned
  • [ ] Blinking does not interrupt speech
  • [ ] Eye movement remains independent
  • [ ] Gestures can run during speech

Runtime

  • [ ] Inputs/properties are documented
  • [ ] Default values are correct
  • [ ] Missing audio fails safely
  • [ ] Character returns to idle correctly
  • [ ] Long conversations remain stable

Performance

  • [ ] Desktop tested
  • [ ] iOS tested
  • [ ] Android tested
  • [ ] CPU/GPU usage checked
  • [ ] File size checked
  • [ ] Audio sync checked

30. Building a Custom Rive Lip-Sync Character

You can build this entire system internally if your team already has:

  • a character designer
  • a Rive animator
  • Rive rigging experience
  • runtime integration experience
  • knowledge of state machines/data binding
  • an audio/viseme pipeline

But if your team already has the AI voice technology and the missing part is the character, that is exactly where a specialized Rive mascot service can help.

Mascot Engine

Mascot Engine creates custom interactive mascot systems for apps, websites, AI products and games.

Depending on the project, a character can include:

Character Design
Rive Rigging
Idle Animation
Blinking
Expressions
Lip Sync / Viseme System
Listening State
Thinking State
Speaking State
Reactions
Gestures
State Machines
Data Binding Setup
Developer Handoff
Production .riv File
Enter fullscreen mode Exit fullscreen mode

The goal is not simply to make a character move.

The goal is to deliver a reusable character that developers can actually control from the product.

👉 Website: https://mascotengine.com

👉 Email: riveanimator@gmail.com

👉 WhatsApp: Chat on WhatsApp


31. What to Send When Requesting a Rive Character

If you contact a Rive animator or Mascot Engine, prepare:

1. Character artwork or visual reference
2. App / website screenshots
3. Target platforms
4. Voice provider
5. Required character states
6. Required emotions
7. Whether lip sync is required
8. Whether the character needs props
9. Expected runtime controls
10. Delivery timeline
Enter fullscreen mode Exit fullscreen mode

If you do not already have a character design, that can be part of the character development process too.


32. Final Thoughts

Real-time lip sync is not simply:

Audio → Open Mouth
Enter fullscreen mode Exit fullscreen mode

And it is not simply:

Audio → Viseme ID
Enter fullscreen mode Exit fullscreen mode

A good interactive character requires the entire chain:

Audio
   ↓
Speech Analysis
   ↓
Viseme Detection
   ↓
Timing
   ↓
Rive Mouth Rig
   ↓
Interpolation
   ↓
Expression
   ↓
Secondary Motion
   ↓
Character Behavior
Enter fullscreen mode Exit fullscreen mode

The technical lip-sync model solves only part of the problem.

The character rig and animation system determine what the user actually sees.

That is especially important for branded mascots, AI companions and non-human characters where generic human avatar systems are not enough.

Build the character as a system from the beginning.

Separate speech from emotion.

Separate emotion from behavior.

Keep the runtime contract clean.

Test on real devices.

And optimize for believable motion rather than impressive benchmark numbers.


Need a Custom Rive Character?

If you're building an AI assistant, voice agent, app mascot, game character or interactive website character and need the Rive side built for production:

Mascot Engine can help with character design, Rive rigging, interactive animation, state machines, expressions, lip-sync preparation and developer-ready .riv delivery.

🌐 mascotengine.com
📧 riveanimator@gmail.com
💬 WhatsApp: +94 71 700 0999


Building an AI product with a character? Bookmark this guide before designing the mascot — the decisions you make in the artwork stage can determine how good the final lip sync can become.

Top comments (0)