yuzu.docsSiteOpen app
Docs/Appearance/Upload & decode
Appearance

Upload & decode

You upload a bundle. A separate agent figures out what the model can do — you never rig anything.

Live2D models ship with no shared convention: parameter names, expression groups, and motion sets differ wildly between artists. yuzu absorbs that mess with a decode agentso you don't have to.

The bundle

A Live2D Cubism 4 export, zipped — the .model3.json plus everything it references:

FileRoleRequired
*.model3.jsonmanifestThe entry point. required
*.moc3rigThe deformable mesh. Required.
textures/artAtlas pages the moc references. Required.
*.physics3.jsonswayHair/cloth physics. Optional; improves idle.
expressions / motionsposes & clipsUsed if present; synthesized if absent.

What happens on upload

You drop the zip

In the app under Appearance, or yuzu appearance set ./model.model3.zip.

The decode agent inspects it

It reads the manifest, enumerates parameters, expression groups, and motion sets, and probes what each actually does — independent of how it's named.

It builds a reaction map

A mapping from conversational signals to this model's specific capabilities. Stored with the presence — decoded once, not per session.

It comes online

The presence renders as the model and begins reacting. No configuration from you at any point.

The reaction map

The decoder maps signals the presence already produces onto capabilities it discovered in the model:

reaction map · sketch
tone:warm     → expr "smile_soft" · param EyeSmile
tone:focused  → motion "lean_in" · param BrowDown
event:tx_signed → motion "nod" · expr "spark"
idle          → synthesized blink + breath sway

Signals come from the conversation — affect, and beats like a message sending or an on-chain action landing (see Acting on-chain).

Missing capabilities

A model with no eye-blink group or no expressions still works. The decoder synthesizes gentle idle motion — blink, breath, small gaze — from raw parameters so it never looks frozen, and falls back gracefully when a mapped capability isn't there.

Reactions are always driven for you. There is no API to puppet the model frame-by-frame — appearance reflects the presence; it is not a separate thing to program.