# Godfortune Singing Mascot Rig V2

Last updated: 2026-05-21

## Purpose

`singing_mascot_rig_v2` is the production target for `fortune_song_short`.

The active source asset contract is now the registered 28-state pack. It keeps the
layered renderer but does not require every performance state to be regenerated from
small face pieces at render time.

It replaces the rough `viseme_song_v1` proof with a clean layered character rig:

- no baked-in mouth
- no baked-in brows
- replaceable mouth sprites
- replaceable eye/brow expression layers
- reusable pose presets
- reusable scene templates

## Character Rule

The character remains a cute boy `dosa` mascot in all scenes.

The acting can be extreme, but the identity cannot drift:

- same round cute face
- same black `gat`
- same pale blue outfit
- same Godfortune role
- same warm mischievous energy

Performance modes:

- `overly_polite`: too refined, too gentle, theatrical calm
- `overly_excited`: musical, absurd, beat-driven, exaggerated
- `verdict_mode`: sudden freeze and stamp-like final judgment

## Asset Location

```text
/data/studio-core/artifacts/character_assets/char_godfortune_boy_dosa/rig/singing_mascot_rig_v2/
```

Main manifest:

```text
/data/studio-core/artifacts/character_assets/char_godfortune_boy_dosa/rig/singing_mascot_rig_v2/rig_manifest.json
```

Active 28-state pack:

```text
/data/studio-core/artifacts/character_assets/char_godfortune_boy_dosa/rig/singing_mascot_rig_v2/state_pack_v1/manifest.json
```

Prompt:

```text
/data/studio-core/artifacts/character_assets/char_godfortune_boy_dosa/rig/singing_mascot_rig_v2/docs/asset_generation_prompt.md
```

## Required Asset Files

Base layers:

```text
base_layers/body.png
base_layers/robe_overlay.png
base_layers/neck.png
base_layers/head_no_mouth_no_brows.png
base_layers/hands_neutral.png
base_layers/gat.png
base_layers/shadow.png
```

Mouth shapes:

```text
mouth_shapes/mouth_closed.png
mouth_shapes/mouth_a.png
mouth_shapes/mouth_e.png
mouth_shapes/mouth_i.png
mouth_shapes/mouth_o.png
mouth_shapes/mouth_u.png
mouth_shapes/mouth_smile.png
mouth_shapes/mouth_shout.png
mouth_shapes/mouth_grit.png
```

Expression layers:

```text
expression_layers/eyes_normal.png
expression_layers/eyes_polite.png
expression_layers/eyes_excited.png
expression_layers/eyes_shock.png
expression_layers/eyes_blank.png
expression_layers/eyes_verdict.png
expression_layers/brows_normal.png
expression_layers/brows_polite.png
expression_layers/brows_excited.png
expression_layers/brows_shock.png
expression_layers/brows_blank.png
expression_layers/brows_verdict.png
```

## Scene Templates Added

```text
scene_templates/singing_dosa_front.json
scene_templates/overly_polite_explain.json
scene_templates/verdict_stamp.json
```

These cover the first three major acting modes:

- singing hook
- over-polite explanation
- final verdict

## Pose Presets Added

```text
pose_presets/singing_bounce.json
pose_presets/polite_bow.json
pose_presets/verdict_stamp.json
```

## Next Implementation Step

Before renderer work, the missing PNG layer files must be created or extracted.

The first acceptable proof is:

1. generate or clean a mouthless/browless base character
2. create at least `closed`, `a`, `o`, `smile`, `shout` mouth layers
3. create at least `polite`, `excited`, `verdict` eye/brow layers
4. render a 10-second `fortune_song_short` proof from the manifest

## Renderer Target

The renderer should read:

- `rig_manifest.json`
- scene template JSON
- pose preset JSON
- lyrics/caption timing
- viseme cue JSON

Then output:

- preview MP4
- final MP4
- contact sheet
- render log
- artifact manifest

## Validation

Run:

```bash
/home/studio/studio-core/scripts/validate_godfortune_rig_manifest.py
```

Current expected result:

- JSON specs are present.
- PNG layer assets are still missing.
- The rig is ready for asset generation, not yet ready for production rendering.
