Expression fades
Lives in: character pack → composition_transitions
Two different fades:
| Kind | What it is | Where you set it |
|---|---|---|
| Show / hide | Character enters or leaves a place | Script sugar / char — [hana left fade 0.4] |
| Expression swap | Same person, new look while already on stage | Pack composition_transitions (or swap_mode on the command) |
This page is the second kind.
Pack policy
"composition_transitions": {
"default": { "kind": "fade", "duration": 0.2, "swap_mode": "auto" },
"pairs": {
"happy->angry": { "kind": "fade", "duration": 0.4, "swap_mode": "crossfade" }
}
}
| Key | Effect |
|---|---|
default | Used when no more specific rule matches |
pairs | "from->to" overrides (also wildcards like happy->*, *->angry, *->*) |
from / to | Maps keyed by expression id → same payload shape |
Payload
| Field | Values |
|---|---|
kind | instant, fade, slide_up / down / left / right |
duration | Seconds |
swap_mode | auto, in_only, crossfade, out_in, cross_slide |
auto: fade → crossfade; slide → in_only; otherwise in_only.
Resolve order: exact pair → from-wildcard → to-wildcard → *->* → from map → to map → default → instant.
When the command wins
If the char command names a transition (transition, transition_in / transition_out, or a duration), that command wins for that beat — including show/hide.
If the command says nothing about transitions:
- Expression change on someone already visible → pack
composition_transitions - Otherwise → instant
Force blend style with "swap_mode": "crossfade" (and friends) on the command when you need a one-off.
Usually you need
| Want | Do |
|---|---|
| Soft look changes by default | Pack default fade ~0.2s |
| Dramatic one pair | pairs entry for that from->to |
| Instant this beat | Command transition: "instant" or omit pack policy |