# MARE MAYHEM: asset licence ledger

Every file the front end ships, where it came from and its licence. Kept current by hand; regenerate the sound tables from `tools/pack_assets.py`.

## Fonts (SIL Open Font License 1.1, licence files shipped in `fonts/`)

| File | Font | Source | Licence |
|---|---|---|---|
| fonts/DelaGothicOne.woff2 | Dela Gothic One (The Dela Gothic Project Authors), Latin subset | github.com/google/fonts (ofl/delagothicone) | SIL OFL 1.1 (`fonts/OFL-DelaGothicOne.txt`) |
| fonts/LilitaOne.woff2 | Lilita One (Juan Montoreano) | github.com/google/fonts (ofl/) | SIL OFL 1.1 (`fonts/OFL-LilitaOne.txt`) |
| fonts/Nunito.woff2 | Nunito (Vernon Adams et al.), instanced at weight 800 | github.com/google/fonts (ofl/) | SIL OFL 1.1 (`fonts/OFL-Nunito.txt`) |
| fonts/NunitoTab.woff2 | "Nunito Tab": the same Nunito 800 with the ten digits set to one advance width (tabular figures for the HUD), renamed as a Modified Version (Nunito has no Reserved Font Name) | derived locally with fontTools | SIL OFL 1.1 (`fonts/OFL-Nunito.txt`) |

## Art (v2 2026-10-24, v3 additions 2026-10-25). No v1 art ships.

| Asset | Source | Licence / status |
|---|---|---|
| Characters: Madame Paddock (idle `hero_madame_1`, react `cheerB_madame_1`, celebrate `cheer_madame_2`), the five racers (busts in the premium symbols and track badges, victory poses in the winner's circle, full-body heroes), and the TAME versions used only for the loading / intro key art and the lobby tile | **WAI-NSFW-Illustrious-SDXL v12** (`aisha-ai-official/wai-nsfw-illustrious-v12`) via Replicate, generation ledger `MM/art/chars_v2/ledger.jsonl`; cut out locally with rembg `isnet-anime` + `isnet-general-use` (MIT / Apache code, model weights from the rembg releases) by `game/tools/cut_chars.py` | Model licence **FAIPL-1.0-SD** (Fair AI Public License 1.0-SD): outputs are not covered by the licence and no contributor claims rights in them; the **Prohibited Uses** come from the Stable Diffusion (CreativeML Open RAIL) licence and must be respected. Content line held: no nudity, every character visibly adult. |
| Environment, symbols and UI art: `bg2_{base,steeple,night,winners}_{l,p}`, `track2`, `sym2_*` (housing, wild, gate, chip, stride, hot tip, lucky, silks, royals A K Q J 10), `frame2`, `tote2`, `banner2`, `logo2` | **Mai** (Jacob's Game Studio queue, $0), job ids in `MM/tools/studio_manifest.json`; lavender key + rembg by `game/tools/cut_studio.py` | Generated for this project on Mai. Verify the studio model's commercial terms before submission (media-gen rule 5). |
| Composites: premium symbols (bust in the shared housing, lane tints, backplates), special backplates, racer badges, reel-house kit (frame2 cut into a 5x5 stretch kit + crest), darkened / blurred backgrounds with floor line, key art and tile mock-ups | Built locally from the two rows above by `game/tools/art_v2.py` + the cohesion pass `game/tools/cohesion.py` (one grade, outline, rim light, drop shadow) | Derived from the above; same status |
| UI kit: glass panels, pills, plates, discs, the BUY BONUS coin, board panel, particles (coin particle from `sym2_chip`, rose from `banner2`), small props (crown, fence, water, beacon, champagne, film strip) | Procedurally painted by `game/tools/bake_ui2.py` (and the shared painter in `tools/bake_ui.py`) | Original work for this project |
| Icons | SVG path data drawn at runtime with Canvas Path2D (`src/icons.js`) | Original work for this project |
| v3 Heat-tier outfits `ch/t<1-4>_<char>` (rooftop pool, onsen, VIP suite, after-party) and step-up cut-ins `cut/cut3_<racer>` (tease), `cut/cut4_<racer>` (wink) | **WAI-NSFW-Illustrious-SDXL v12** via Replicate (Jacob-approved v3 generation queue, `MM/art/heat_v3/ledger.jsonl`), 2 renders per prompt; the cleaner render picked after vetting (`game/art/v3/picks.json` records every pick and every rejection with its reason: see-through cloth, watermark, bed scene, duplicate figure / extra limb, school-like setting). Cut out with rembg `isnet-anime` + the same clean-up and cohesion pass (`game/tools/art_v3.py heat`) | FAIPL-1.0-SD as above. Content line held: no nudity (lingerie is the ceiling), every character visibly adult; rejected renders never ship |
| v3 tier settings `bg/heat<1-4>_{l,p}` | Built locally from the vetted tier renders (blurred, darkened, graded, floor line) by `game/tools/art_v3.py heatbg` | Derived from the row above |
| v3 premium symbols re-crop (face-centred, headroom, slimmed housing), racer badges, Rosette `O` symbol | `game/tools/art_v3.py premiums / rosette` from the v2 bust cutouts and the studio housing; the Rosette is procedurally drawn | Derived from the v2 rows above / original work |

## Music and voice (v3 audio overhaul, 2026-10-25)

Music is wired through `game/music.json` (cue -> file); `tools/pack_assets.py` cuts each looping cue into a seamless loop (the tail crossfaded over the head, equal-power) and packs it as `au/mus_<cue>` (stereo 96 kbps MP3, loudnorm I=-16). Alternates kept out of the build: `audio/music_v2/sa_base_b_0.mp3`, `sa_rush_b_0.mp3`, `ly2_rush_0.wav` (swap by editing `music.json`).

| Key | Source file (MM/) | Origin | Licence / status |
|---|---|---|---|
| au/mus_base | audio/music_v2/sa_base_a_0.mp3 (61.5 s loop) | **Stability AI Stable Audio 2.5** via Replicate | Stability AI terms for Stable Audio 2.5 API outputs (commercial use of outputs permitted; verify the current terms before submission) |
| au/mus_rush | audio/music_v2/sa_rush_a_x1.15.mp3 (sa_rush_a sped up 1.15x, 53.6 s loop) | Stable Audio 2.5 via Replicate | as above |
| au/mus_stalls | audio/music_v2/sa_stalls_0.mp3 (61.5 s loop) | Stable Audio 2.5 via Replicate | as above |
| au/mus_bigwin | audio/music_v2/sa_bigwin_0.mp3 (12 s fanfare, played as a one-shot at the top big-win tier) | Stable Audio 2.5 via Replicate | as above |
| au/vo/<char>_<cat>_<NN> | audio/voice_v2/<char>_<cat>_<NN>_0.mp3 -> mono 48 kbps MP3, loudnorm I=-16 (130 lines: 5 racers + Madame in Japanese with English captions, plus the English announcer; text in `audio/voice_lines_v2.json`) | **MiniMax speech-2.8-hd** via Replicate (preset synthetic voices, no real person cloned) | MiniMax terms: no gambling clause found; verify before shipping |

## Sound effects (v3 audio overhaul, 2026-10-25)

All 24 cues are trimmed, normalised clips from `MM/audio/sfx_v2/trim/<name>_0.mp3` (generation ledger `MM/audio/sfx_v2/ledger.jsonl`), re-encoded mono 64 kbps, loudnorm I=-16. They replace every v2 SFX (Kenney / Mai); no Kenney or Mai sound ships any more.

| Keys | Origin | Licence |
|---|---|---|
| au/bugle, au/click, au/coin_lock, au/coins, au/crowd_gasp, au/crowd_roar, au/cutin_whoosh, au/fan_snap, au/gallop, au/gate_bang, au/gate_burst, au/heartbeat, au/heat_reveal, au/kiss, au/klaxon, au/power_down, au/reel_spin, au/reel_stop, au/riser, au/scatter_land, au/shutter, au/splash, au/whip, au/win_small | **Stable Audio Open 1.0** (Stability AI) | **Stability AI Community License**: commercial use allowed for organisations under USD 1M annual revenue (an Enterprise licence is needed above that) |
