# Godfortune ComfyUI 28-Asset Research

Last updated: 2026-07-20

## Corrected Goal

The benchmark is not only a pacing reference. It is the visual performance bar for
a reusable Godfortune character set generated through ComfyUI.

The one-time character deliverable is a registered 28-asset state pack:

- 5 reusable body poses
- 12 facial expressions
- 6 mouth states
- 5 extreme reaction states

Backgrounds, story clients, and story props remain per-job assets. The 28 fixed
character assets alone do not cover the complete video.

## Visual Translation

Do not copy the benchmark characters or branded drawing identity. Apply the broad
production grammar:

- simple geometric character construction
- round, compact characters between two and three heads tall, targeting 2.6 heads
- thick uniform outlines
- flat limited colors
- immediately readable silhouette
- strong pose and expression changes
- facial expression as the primary comedy channel, with a small reusable gesture set
- low detail that survives rapid cuts and mobile playback

## Benchmark Construction Finding

Direct comparison of repeated characters in shots 002, 026, 048, and 055, and of
the pink-shirt character in shots 006, 019, 036, and 046, shows a hybrid state
library rather than continuous generated animation:

- ordinary body-pose and extreme-reaction changes are complete character drawings
- the head silhouette, palette, and outline grammar remain stable across drawings
- eyes, eyebrows, and mouths use a compact reusable geometric vocabulary
- a revealed state is mostly held within a shot while framing, props, captions, and
  transitions provide motion
- deliberate full-style transformations are punchline assets, not identity drift

This evidence rules out both face-crop diffusion as the main production method and
fixed-seed text-to-image as an identity method. A diffusion seed is only useful for
reproducing one run; changing pose or prompt can still redesign the character.

The production match is a hybrid registered state library:

1. Generate five complete reusable body-pose and five extreme-reaction states using character-specific
   identity conditioning plus OpenPose or lineart structure control.
2. Keep a large round locked head design and compose twelve ordinary eye, eyebrow,
   and mouth expressions from registered 2D components.
3. Hold each completed state within a shot and add deterministic camera, prop,
   caption, and transition motion.

The previous Godfortune reference was too polished and detailed. It looked like a
generic illustration rather than a reusable comedy-animation sprite.

## Master Candidate Result

Generator:

```text
scripts/generate_godfortune_master_candidates.py
```

Research output:

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

Twelve candidates were generated across four SDXL model and LoRA combinations and
three seeds. `animagine_flat_seed_260714` was selected as a provisional master because
it had the most stable gat, pale-blue outfit, simple face, and readable outline among
the generated candidates. It is not production-approved until an expression method
preserves its facial design.

Contact sheet:

```text
/data/studio-core/artifacts/character_assets/char_godfortune_boy_dosa/rig/
singing_mascot_rig_v2/research/master_candidates_v1/contact_sheet.jpg
```

## Identity Experiments

### Independent text-to-image

Rejected. Earlier runs produced grids, missing gat silhouettes, and different
characters across seeds.

### IPAdapter Plus only

Rejected. The generated images kept some colors but lost the gat and changed face
geometry and hair.

### IPAdapter plus Lineart ControlNet and img2img

Partially successful. The gat, outfit, and body stayed stable, but expression prompts
could not overcome the locked source face.

### Narrow face-feature inpaint

Rejected after visual review. The body, gat, and outfit stayed stable, but the face
did not: eyes became oversized black ovals, line weight changed, and the facial
center shifted between states. The 768px full-frame input left too little effective
face resolution, while denoise 0.75 caused Animagine and the flat/boldline LoRAs to
redesign the face instead of changing only the expression.

Current proof:

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

## Production Method by Asset Class

| Asset class | Count | Method |
| --- | ---: | --- |
| Pose | 5 | reusable complete state; character identity conditioning plus pose control |
| Expression | 12 | registered eyes, eyebrows, and mouth on the large locked head |
| Mouth | 6 | deterministic registered mouth layers |
| Extreme reaction | 5 | complete state; identity conditioning plus structure control |

All 28 outputs must share a 1024x1024 transparent canvas, 2~3-head-tall round
proportions, character anchor, face anchor, gat silhouette, outfit colors, and line
treatment. Ordinary comedy beats should work by changing the registered face without
requiring another body drawing.

## State Pack Contract

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

The manifest names every required output and prevents the renderer from considering
the character production-ready until all 28 files pass validation.

## Remaining Work

1. Approve or replace the provisional master before producing more states.
2. Test three complete states with the same identity conditioning: 2.6-head neutral,
   speaking gesture, and extreme facial reaction. Use a character LoRA if IPAdapter
   alone changes identity.
3. Build fixed eye, eyebrow, and mouth components on the approved head and compose
   the ten ordinary expressions deterministically.
4. Generate the remaining five-body-pose vocabulary only after the three-state
   identity gate passes.
5. Remove the off-white background and export registered transparent PNGs.
6. Validate canvas, anchors, palette, silhouette, and file inventory.
7. Render a 10-second held-state performance proof before the full 60-second video.
