# Generation Quality Audit — Feb 5-12, 2026

Dataset: 258 generations, 131 unique products, 82.6% delivery rate.

## Key Findings

### 1. "Cinematic" Style Dominance (38%)

Out of 20+ visual styles, `cinematic` accounts for 88 of 233 generations. Next closest: `fashion_runway` (21), `russian_fairy_tale` (20), `art_deco` (17).

Top archetype+style combos are all cinematic:
- discovery+cinematic: 27
- product_lifestyle+cinematic: 19
- epic_hero+cinematic: 12
- problem_solution+cinematic: 12

**Root cause**: `cinematic` weight=20 in `creative_styles.py` (2x any other photorealistic style). First 2 gens locked to `photorealistic_only=True`. Critic picks safest option.

### 2. Formulaic Emotional Arc

93% of stage4 prompts use the same ~6 emotion words for Act 2 resolution.

| Act 2 emotion pattern | Frequency |
|---|---|
| "quiet satisfaction/contentment/confidence" | ~35% |
| "satisfaction" or "contentment" (unqualified) | ~15% |
| "delight" | ~13% |
| "triumphant satisfaction" | ~10% |

Canonical ending (50%+ of all videos):
> Person sits/stands with product, warm golden light, looks toward camera with satisfied smile, slight nod. Quiet satisfaction.

Word frequencies across 367 prompts:
- "smile" in 50% of prompts ("satisfied smile" alone: 40 times)
- "warm" or "golden" light: 118 / 61 times
- "quiet" modifies 40% of all Act 2 emotions

Only 7% of videos have non-formulaic emotional beats (e.g., "defiant smirk", "amused confusion", "confident swagger", "happy skip").

### 3. Archetype-Kind Lock-in

Certain combos are effectively fused:
- `ritual + asmr` = 28 (12% of all gens) — always "product on surface, camera dollies in, hand picks up, quiet contentment"
- `discovery + unboxing` = 17
- `product_lifestyle + standard` = 14

### 4. Archetype Distribution

| Archetype | Count | % |
|---|---|---|
| discovery | 50 | 21.5% |
| product_lifestyle | 48 | 20.6% |
| ritual | 43 | 18.5% |
| epic_hero | 30 | 12.9% |
| gift | 26 | 11.2% |
| problem_solution | 25 | 10.7% |
| before_after | 11 | 4.7% |

Gift is 5th (11.2%), not dominant. `before_after` is underused (4.7%) despite fashion/cosmetics being 34% of products.

### 5. "Dig In" Creates Clones

When user clicks "Поправить" (refine), system says `KEEP the same style and kind`. Result: 34% of multi-gen products (21/61) had zero variety across archetype, style, and kind.

Examples:
- Cotton underwear: 3 gens, ALL `ritual/fashion_runway/asmr`
- Galustyan mask: 3 gens, ALL `gift/rock_concert/infomercial`
- Self-leveling floor: 3 gens, ALL `problem_solution/cinematic/documentary`

### 6. Critic Behavior

Evaluates on 5 criteria: Feasibility, Product Appeal, Style Fit, Originality, Risk Level. Three of five reward conservative choices. Systematically filters out risky options.

### 7. What's Missing

- **Humor**: Only `epic_hero/meme` (9 gens = 4%)
- **Surprise/twist**: Almost none
- **Dynamic action**: 20/367 have "dance", 12 have "spin"
- **before_after**: 11 uses despite being perfect for fashion/cosmetics

## Product Categories

| Category | % of generations |
|---|---|
| Fashion/clothing | 34% |
| Utility products | 25% |
| Electronics | 9% |
| Home appliances | 9% |
| Kitchenware | 8% |
| Cosmetics/beauty | 7% |
| Other | 8% |

## Conversion Problem

Videos are technically competent but emotionally flat. With only 3 gift tokens, users see 3 variations of "warm golden light + satisfied smile." The variety that exists (20 styles x 18 kinds x 7 archetypes) collapses to ~5 effective combos through:
1. Cinematic weight dominance
2. Critic selecting safest option
3. "Dig in" locking style/kind

## Possible Improvements (Ideas)

- Rebalance style weights (cinematic 20 -> 10, boost others)
- Diversify Act 2 emotions in Stage 2 prompt (ban "quiet satisfaction" as default)
- Unlock artistic styles earlier (currently photorealistic-only for first 2 gens)
- Make "Dig in" vary emotional arc / physical action even when keeping style
- Add originality minimum to critic scoring

## How to Reproduce This Analysis

### 1. Find all generation directories

```bash
# List all generations for a date range
find /mnt/video/ -maxdepth 2 -type d -name "202602*" | sort

# Count by date
find /mnt/video/ -maxdepth 2 -type d -name "202602*" | \
  sed 's|.*/\(202602[0-9][0-9]\).*|\1|' | sort | uniq -c
```

### 2. Extract archetype/style/kind from metadata

```bash
for dir in /mnt/video/wb_*/202602*/; do
  python3 -c "
import json
try:
    with open('${dir}metadata.json') as f:
        m = json.load(f)
    arch = m.get('archetype', '?')
    style = m.get('visual_style', '?')
    kind = m.get('video_kind', '?')
    name = m.get('product_name', '?')[:40]
    print(f'$(basename $(dirname $dir))\t{arch}\t{style}\t{kind}\t{name}')
except: pass
" 2>/dev/null
done | sort
```

### 3. Analyze emotional patterns in video prompts

```bash
# Count emotion words in Act 2
find /mnt/video/ -path "*/202602*/prompts/stage4_veo3_prompt.txt" | \
  xargs grep -oiE "(smile|satisf|content|confiden|delight|triumph|quiet|warm|golden|glow)" | \
  sed 's/.*://' | sort | uniq -c | sort -rn | head -20

# Extract Act 2 lines
find /mnt/video/ -path "*/202602*/prompts/stage4_veo3_prompt.txt" | sort | \
  while read f; do grep -i "ACT 2" "$f" 2>/dev/null; done

# Find the emotion tag before "Duration:" in Act 2
find /mnt/video/ -path "*/202602*/prompts/stage4_veo3_prompt.txt" | \
  xargs grep -oP '\. \K[^.]+(?=\. Duration: 5)' | \
  sed 's/.*://' | sort | uniq -c | sort -rn | head -20
```

### 4. Check feedback flow for a specific product

```bash
PRODUCT=wb_437241487
for dir in /mnt/video/$PRODUCT/202602*/; do
  echo "=== $(basename $dir) ==="
  python3 -c "
import json
with open('${dir}generation.log') as f:
    d = json.load(f)
s2 = d.get('stages', {}).get('stage2', {})
print('  mode:', s2.get('creative_mode'))
print('  arch:', s2.get('archetype'))
print('  style:', s2.get('visual_style'))
print('  kind:', s2.get('video_kind'))
fb = s2.get('feedback_context', '')
if fb: print('  feedback:', str(fb)[:200])
" 2>/dev/null
done
```

### 5. Check style weight distribution

```bash
# In creative_styles.py, grep for weights
grep -A2 "weight" /home/videobot/dev/scripts/creative_styles.py | head -60

# Check photorealistic filter
grep -n "photorealistic" /home/videobot/dev/scripts/creative_styles.py
```

### 6. Review critic template

```bash
cat /home/videobot/dev/prompts/stages/stage2b_critic.md
```

### 7. Check "Dig in" vs "Try different" logic

```bash
# In full_pipeline_v2.py, search for refine/explore logic
grep -n "KEEP the same\|Try different\|refine\|explore\|Dig in" \
  /home/videobot/dev/scripts/full_pipeline_v2.py
```
