# Godfortune 2D Viseme Rig Direction

Last updated: 2026-07-14

## Decision

The primary Godfortune Shorts direction is no longer a calm talking-head `dosa`.

Primary direction:

- absurd fortune song / musical shorts
- 2D mascot identity
- fast captions
- repeated rhythm motion
- exaggerated reaction cuts
- final verdict cut

The active production path is a layered 2D viseme rig.

LatentSync is closed for the selected Godfortune character profile. It can work with
semi-real or human-proportioned 2.5D portraits, but that prerequisite changes the
character away from the approved simple 2D mascot identity. It must not be selected
for singing, narration, calm explanation, or fallback scenes in the current YouTube
Job pipeline. Its artifacts remain research evidence only.

## Character Consistency Rule

Consistency should mean brand recognition, not exact single-face continuity.

The Godfortune character must remain a cute boy `dosa` mascot in every mode.
The performance range can be exaggerated, but it should never feel like a different character.

Stable elements:

- black `gat`
- pale blue boy `dosa` outfit
- Godfortune role
- energetic fortune-musical persona
- rhythmic Korean caption style
- verdict stamp / ending cut
- repeated hook structure

Allowed variation:

- talking/singing face differs from reaction face
- expression sheets can be exaggerated
- body can squash/stretch on beats
- reaction cuts can be more absurd than the base pose

Performance modes:

- `overly_polite`: calm, gentle, and refined, but intentionally too polite and theatrical
- `overly_excited`: rhythm-driven, musical, absurd, and physically exaggerated
- `verdict_mode`: short final judgment pose with strong facial contrast and stamp-like impact

The key is not "normal calm" versus "random chaos".
It is the same cute character performing both extremes with recognizable costume, silhouette, eyes, and timing.

## Production Asset Split

Use separate assets instead of one image for every scene:

1. `singing_mascot_rig`
   - mouthless base
   - viseme mouth sprites
   - eyebrow/eye expression layers
   - body bounce/rotation
2. `reaction_cut_assets`
   - shock
   - blank stare
   - greed sparkle
   - soul leaving body
   - final verdict
3. `narration_pose_assets`
   - the same approved 2D mascot identity
   - restrained eye/brow layers and simple viseme timing
   - no detector-friendly semi-real alternate character

## Prototype V1

Output:

```text
/data/studio-core/artifacts/character_assets/char_godfortune_boy_dosa/rig/viseme_song_v1/godfortune_viseme_song_v1.mp4
/data/studio-core/artifacts/character_assets/char_godfortune_boy_dosa/rig/viseme_song_v1/godfortune_viseme_song_v1_contact_sheet.jpg
/data/studio-core/artifacts/character_assets/char_godfortune_boy_dosa/rig/viseme_song_v1/manifest.json
```

Renderer:

```text
/home/studio/studio-core/scripts/render_godfortune_viseme_prototype.py
```

Performance:

- duration: 5 seconds
- output: 1080x1920, 24fps
- elapsed wall time: about 14.6 seconds
- max RSS: about 633 MB
- GPU: not used

What it validates:

- detector-independent mouth switching
- body bounce
- beat-like visual energy
- Korean caption rendering
- final verdict cut direction

Known limitation:

- The current mouth sprites came from the earlier rough mouth pass.
- The mouth cleanup patch is still visible.
- Final production needs a proper mouthless base image and clean mouth layers created from the start.

## Next Required Asset

Generate or draw a proper `singing_mascot_rig_v2` source:

- 9:16 or high-resolution square master
- front-facing full body or upper body
- no mouth or tiny neutral mouth region designed for replacement
- no hand/prop crossing mouth
- separate hand/talisman layer if needed
- clean face area
- exaggerated but consistent eyes and eyebrows
- mouth layer anchor point documented

Required mouth sprites:

- closed
- A
- E
- I
- O
- U
- smile
- shout
- grit

Required expression layers:

- normal
- excited
- shock
- greedy sparkle
- blank stare
- verdict

## Implementation Direction

`fortune_song_short` should use this path:

1. content-ops sends lyrics, music_style, vocal_style, target_duration_seconds
2. studio-core music adapter creates or receives audio
3. viseme timing adapter maps audio/lyrics to mouth cues
4. 2D rig renderer produces singing scene clips
5. render stage adds captions, beats, effects, transitions
6. review_pending by default

For the first real implementation, the viseme timing can be rule-based or beat-grid-based before integrating Rhubarb Lip Sync.

## Related Research

Detailed 2D automation candidates and the recommended renderer path are tracked in:

```text
docs/2d-character-automation-research.md
```

The production target rig spec is tracked in:

```text
docs/godfortune-singing-mascot-rig-v2.md
```
