{
  "run": "a0-poc",
  "date": "2026-09-09",
  "model": "AudioLDM2 (cvssp/audioldm2), RTX 3090 fp16 (torch 2.14.0+cu130), diffusers 0.35.2 + transformers 4.49.0",
  "env": "~/.cache/rpg-ai/venv-aiaudio (pinned; diffusers 0.40 несовместим с transformers 4.x — _update_model_kwargs_for_generation удалён в 5.x)",
  "license_note": "веса CC-BY-NC-SA 4.0 — только PoC; основной пайплайн по плану — Stable Audio Open Small (gated: 401 анонимно, нужен HF-токен + принятие Stability Community License)",
  "pipeline": "gen_audioldm2.py -> review/*.wav (16 кГц) -> post.py (ресэмпл 22050, нормализация 0.85, loopify: хвост кроссфейдом в голову, 1 с) -> review/*_loop.wav",
  "timing": "10 с аудио, 100 шагов: GPU ~15 с; CPU fp32 12 ядер ~3.5 мин",
  "loop_check": "пост.py --check: скачок на шве против максимума межсэмплового diff в середине записи",
  "criterion": "амбиент лучше процедурного на слух и формат сходится — АПРУВ 2026-09-09 (в игру: ponds, ponds_night, zvenets, tower_hum — seed 1; луга молчат по дизайну; SFX остаются спек-синтезом E4)",
  "items": [
    { "file": "amb_ponds_1.wav", "prompt": "amb_ponds.positive", "seed": 1, "steps": 100, "gate": "accept", "match": "?", "note": "луп; эталон gen.mjs ambiencePonds" },
    { "file": "amb_ponds_2.wav", "prompt": "amb_ponds.positive", "seed": 2, "steps": 100, "gate": "accept", "match": "?", "note": "луп" },
    { "file": "amb_zvenets_1.wav", "prompt": "amb_zvenets.positive", "seed": 1, "steps": 100, "gate": "accept", "match": "?", "note": "луп; эталон ambienceZvenets" },
    { "file": "amb_zvenets_2.wav", "prompt": "amb_zvenets.positive", "seed": 2, "steps": 100, "gate": "accept", "match": "?", "note": "луп" },
    { "file": "amb_meadows_1.wav", "prompt": "amb_meadows.positive", "seed": 1, "steps": 100, "gate": "accept", "match": "?", "note": "луп; в игре луга без амбиента (тишина пепла)" },
    { "file": "amb_meadows_2.wav", "prompt": "amb_meadows.positive", "seed": 2, "steps": 100, "gate": "accept", "match": "?", "note": "луп" },
    { "file": "amb_ponds_night_1.wav", "prompt": "amb_ponds_night.positive", "seed": 1, "steps": 100, "gate": "accept", "match": "?", "note": "луп; эталон ambiencePondsNight" },
    { "file": "amb_ponds_night_2.wav", "prompt": "amb_ponds_night.positive", "seed": 2, "steps": 100, "gate": "accept", "match": "?", "note": "луп" },
    { "file": "amb_tower_hum_1.wav", "prompt": "amb_tower_hum.positive", "seed": 1, "steps": 100, "gate": "accept", "match": "?", "note": "луп; слой layerTowerHum" },
    { "file": "sfx_step_1.wav", "prompt": "sfx_step.positive", "seed": 1, "steps": 100, "gate": "accept", "match": "?", "note": "SFX; в игре спек-синтез" },
    { "file": "sfx_click_1.wav", "prompt": "sfx_click.positive", "seed": 1, "steps": 100, "gate": "accept", "match": "?", "note": "SFX" },
    { "file": "sfx_bell_1.wav", "prompt": "sfx_bell.positive", "seed": 1, "steps": 100, "gate": "accept", "match": "?", "note": "SFX; эталон bellHit" },
    { "file": "sfx_bell_2.wav", "prompt": "sfx_bell.positive", "seed": 2, "steps": 100, "gate": "accept", "match": "?", "note": "SFX" },
    { "file": "sfx_whoosh_1.wav", "prompt": "sfx_whoosh.positive", "seed": 1, "steps": 100, "gate": "accept", "match": "?", "note": "SFX; эталон whoosh" },
    { "file": "sfx_hit_1.wav", "prompt": "sfx_hit.positive", "seed": 1, "steps": 100, "gate": "accept", "match": "?", "note": "SFX" },
    { "file": "sfx_pickup_1.wav", "prompt": "sfx_pickup.positive", "seed": 1, "steps": 100, "gate": "accept", "match": "?", "note": "SFX" },
    { "file": "sfx_drop_1.wav", "prompt": "sfx_drop.positive", "seed": 1, "steps": 100, "gate": "accept", "match": "?", "note": "SFX; эталон капли ambiencePonds" }
  ]
}