This version auto-loads static files: one WAV, one JSON schedule, and one PNG per viseme using the Oculus / Meta viseme naming convention. It keeps the idle GIF mounted underneath and overlays transparent viseme PNGs during scheduled lip-sync segments.
./assets/idle.gif
./assets/audio.wav
./assets/visemes.json
./assets/viseme_sil.png
./assets/viseme_PP.png
./assets/viseme_FF.png
./assets/viseme_TH.png
./assets/viseme_DD.png
./assets/viseme_kk.png
./assets/viseme_CH.png
./assets/viseme_SS.png
./assets/viseme_nn.png
./assets/viseme_RR.png
./assets/viseme_aa.png
./assets/viseme_E.png
./assets/viseme_I.png
./assets/viseme_O.png
./assets/viseme_U.png
{ "visemes": [...], "visemeStartTimesMs": [...],
"visemeDurationsMs": [...] }
{"visemes":["viseme_sil","viseme_aa"],"visemeStartTimesMs":[0,120],"visemeDurationsMs":[120,180]}