The avatar pack format
This page is for people who build or check avatar packs: face packs, the .solelface file, figure packs, and the events a live face follows.
Face packs (format 1)
A face pack is a folder:
| File | Size | What |
|---|---|---|
pack.json |
What the pack is, its render data, and every file with its SHA-256 | |
sheet.full.webp |
2400 × 2160 | The 15 cells, 480 × 720 each, in a 5 × 3 grid. Only in a pack with adult cells |
sheet.tame.webp |
2400 × 2160 | The same sheet with the three adult cells left empty |
flow.full.png |
600 × 540 | Each cell's flow from neutral, at a quarter of the size. Only with adult cells |
flow.tame.png |
600 × 540 | The same, with the adult cells' flows at rest |
region.png |
120 × 180 | The head, in greyscale |
still.webp |
480 × 720 | The neutral cell alone |
thumbs/<cell>.webp |
192 × 192 | Circle crops |
The cells, in sheet order:
neutral listen smile laugh smirk
think focus concern surprise talk_a
talk_o blink flirt aroused euphoric
flirt, aroused and euphoric are the adult cells. Every cell shows the same figure, head and torso, in the same pose. Only the face changes.
pack.json has format (1), id (lower-case letters, digits and hyphens), name, about, adult, cells (always the 15 above), face, mismatch, thumb, grade and files. A pack that isn't Solel's own also needs consent, with permission (the person in the face agreed to it) and adult_subject (they're an adult), or it's refused.
The account's Adult expressions setting decides what's served: the full sheet and flow when it's on, the tame ones when it's off, with the adult feelings shown as smirk and laugh.
Check and export a pack
From the genesis-engine folder of the source:
python -m genesis_avatar.studio check path/to/pack
python -m genesis_avatar.studio export path/to/pack my-face.solelface
A .solelface file is a zip of the pack folder. An import refuses a file over 64 MB, any path outside the pack, links, a pack without its consent, one that fails the check, and Solel's own ids.
Figure packs (format 2)
A figure pack is a Sol's 3D body, drawn on the person's own device. It's checked, kept and served like a face pack.
| File | What |
|---|---|
pack.json |
Format 2, kind figure, its licence (required) and credits, and every file with its SHA-256 |
figure.glb |
Binary glTF 2 on a Mixamo skeleton, with the 52 ARKit face shapes and 15 mouth shapes. Up to 256 MB with the rest |
figure.json |
What the renderer needs to know about this body, only where it differs from the defaults |
still.webp |
480 × 720, the figure at rest |
thumbs/<cell>.webp |
192 × 192 circle crops, neutral at least |
Solel's own figure ids end in -3d, so a face and a body never share an id. Nothing in a figure pack is an adult file. Solel's figures are listed at https://solel.io/avatars/catalogue.json as .solelfigure files, which fetches and checks by size and SHA-256 before the Genesis Engine keeps them.
Events
A live face follows three events, each with a JSON schema:
| Event | Schema | What |
|---|---|---|
avatar.state |
https://solel.dev/schemas/avatar.state.v1.json |
What the Sol is doing: idle, listening, thinking, working, speaking, waiting or muted |
avatar.feeling |
https://solel.dev/schemas/avatar.feeling.v1.json |
A sentence's feeling, sent before its first word |
avatar.pack |
https://solel.dev/schemas/avatar.pack.v1.json |
The face changed, or Adult expressions was turned on or off, so load the manifest again |