{
  "name": "YAMA-BRUH",
  "version": "1.0.0",
  "description": "Deterministic 2-operator FM synth ringtone generator. Seeded PRNG + YM2413-style synthesis = same seed, same sound, every time.",
  "url": "https://yama-bruh.lucianlabs.ca",
  "script": "https://cdn.lucianlabs.ca/scripts/yamabruh-notify.js",

  "parameters": {
    "seed": { "type": "string", "description": "Instance/app seed — prefixes patch + melody seeds for app-wide identity" },
    "patchSeed": { "type": "string", "description": "Patch seed — combined with instance seed to determine FM preset (timbre)" },
    "preset": { "type": "integer", "min": 0, "max": 99, "description": "Explicit preset index — overrides patchSeed when set" },
    "mode": { "type": "integer", "min": 0, "max": 9, "default": 1, "description": "Mood index — controls scale pool, note movement, resolution" },
    "bpm": { "type": "integer", "default": 140, "description": "Tempo in beats per minute" },
    "volume": { "type": "number", "min": 0, "max": 1, "default": 0.8, "description": "Master volume" },
    "sampleRate": { "type": "integer", "default": 44100, "description": "Sample rate in Hz" },
    "minLength": { "type": "integer", "min": 1, "default": 2, "description": "Minimum number of notes (floor for mode range)" },
    "maxLength": { "type": "integer", "min": 1, "default": null, "description": "Maximum number of notes — null = use mode default" },
    "speed": { "type": "number", "min": 0.25, "max": 4, "default": 1, "description": "BPM multiplier — 2 = double speed, 0.5 = half speed" },
    "octave": { "type": "integer", "min": -5, "max": 5, "default": 0, "description": "Octave offset applied to all notes" },
    "note": { "type": "integer", "min": -12, "max": 12, "default": 0, "description": "Semitone offset applied to all notes" }
  },

  "modes": [
    { "index": 0, "name": "pretty",       "resolves": true,  "character": "Major/pentatonic, stepwise, bright" },
    { "index": 1, "name": "experimental",  "resolves": false, "character": "All 39 scales, wild, full range" },
    { "index": 2, "name": "depressing",    "resolves": false, "character": "Minor/Phrygian, descending, slow, low" },
    { "index": 3, "name": "spooky",        "resolves": false, "character": "Diminished/whole-tone, tritones, large jumps" },
    { "index": 4, "name": "dreamy",        "resolves": true,  "character": "Lydian/pentatonic, floaty, long sustains" },
    { "index": 5, "name": "aggressive",    "resolves": false, "character": "Phrygian/blues, fast, low, wide intervals" },
    { "index": 6, "name": "exotic",        "resolves": false, "character": "Double harmonic/Persian/Arabian/gypsy" },
    { "index": 7, "name": "jazzy",         "resolves": true,  "character": "Dorian/bebop, chromatic passing tones" },
    { "index": 8, "name": "ethereal",      "resolves": true,  "character": "Whole-tone/augmented, wide intervals" },
    { "index": 9, "name": "mechanical",    "resolves": false, "character": "Diminished/whole-tone, repetitive, fast" }
  ],

  "banks": [
    {
      "id": "A",
      "name": "Classic",
      "description": "99 presets inspired by 90s Yamaha keyboards (YM2413 OPLL)",
      "file": "yamabruh-notify.js",
      "global": "YAMABRUH_PRESETS",
      "categories": [
        { "range": [0, 9],   "name": "Piano / Electric Piano" },
        { "range": [10, 19], "name": "Organ" },
        { "range": [20, 29], "name": "Brass" },
        { "range": [30, 39], "name": "Strings / Pad" },
        { "range": [40, 49], "name": "Bass" },
        { "range": [50, 59], "name": "Lead / Plucked" },
        { "range": [60, 69], "name": "Bell / Mallet" },
        { "range": [70, 79], "name": "Reed / Pipe" },
        { "range": [80, 89], "name": "SFX" },
        { "range": [90, 99], "name": "Retro / Digital" }
      ],
      "patches": [
        { "index": 0,  "name": "Piano 1" },
        { "index": 1,  "name": "Piano 2" },
        { "index": 2,  "name": "Honky-Tonk Piano" },
        { "index": 3,  "name": "Electric Piano 1" },
        { "index": 4,  "name": "Electric Piano 2" },
        { "index": 5,  "name": "Harpsichord 1" },
        { "index": 6,  "name": "Harpsichord 2" },
        { "index": 7,  "name": "Harpsichord 3" },
        { "index": 8,  "name": "Honky-Tonk Clavi" },
        { "index": 9,  "name": "Glass Celesta" },
        { "index": 10, "name": "Reed Organ" },
        { "index": 11, "name": "Pipe Organ 1" },
        { "index": 12, "name": "Pipe Organ 2" },
        { "index": 13, "name": "Electronic Organ 1" },
        { "index": 14, "name": "Electronic Organ 2" },
        { "index": 15, "name": "Jazz Organ" },
        { "index": 16, "name": "Accordion" },
        { "index": 17, "name": "Vibraphone" },
        { "index": 18, "name": "Marimba 1" },
        { "index": 19, "name": "Marimba 2" },
        { "index": 20, "name": "Trumpet" },
        { "index": 21, "name": "Mute Trumpet" },
        { "index": 22, "name": "Trombone" },
        { "index": 23, "name": "Soft Trombone" },
        { "index": 24, "name": "Horn" },
        { "index": 25, "name": "Alpenhorn" },
        { "index": 26, "name": "Tuba" },
        { "index": 27, "name": "Brass Ensemble 1" },
        { "index": 28, "name": "Brass Ensemble 2" },
        { "index": 29, "name": "Brass Ensemble 3" },
        { "index": 30, "name": "Flute" },
        { "index": 31, "name": "Panflute" },
        { "index": 32, "name": "Piccolo" },
        { "index": 33, "name": "Clarinet" },
        { "index": 34, "name": "Bass Clarinet" },
        { "index": 35, "name": "Oboe" },
        { "index": 36, "name": "Bassoon" },
        { "index": 37, "name": "Saxophone" },
        { "index": 38, "name": "Bagpipe" },
        { "index": 39, "name": "Woodwinds" },
        { "index": 40, "name": "Violin 1" },
        { "index": 41, "name": "Violin 2" },
        { "index": 42, "name": "Cello" },
        { "index": 43, "name": "Strings" },
        { "index": 44, "name": "Electric Bass" },
        { "index": 45, "name": "Slap Bass" },
        { "index": 46, "name": "Wood Bass" },
        { "index": 47, "name": "Synth Bass" },
        { "index": 48, "name": "Banjo" },
        { "index": 49, "name": "Mandolin" },
        { "index": 50, "name": "Classic Guitar" },
        { "index": 51, "name": "Jazz Guitar" },
        { "index": 52, "name": "Folk Guitar" },
        { "index": 53, "name": "Hawaiian Guitar" },
        { "index": 54, "name": "Ukulele" },
        { "index": 55, "name": "Koto" },
        { "index": 56, "name": "Shamisen" },
        { "index": 57, "name": "Harp" },
        { "index": 58, "name": "Harmonica" },
        { "index": 59, "name": "Music Box" },
        { "index": 60, "name": "Brass & Marimba" },
        { "index": 61, "name": "Flute & Harpsichord" },
        { "index": 62, "name": "Oboe & Vibraphone" },
        { "index": 63, "name": "Clarinet & Harp" },
        { "index": 64, "name": "Violin & Steel Drum" },
        { "index": 65, "name": "Handsaw" },
        { "index": 66, "name": "Synth Brass" },
        { "index": 67, "name": "Metallic Synth" },
        { "index": 68, "name": "Sine Wave" },
        { "index": 69, "name": "Reverse" },
        { "index": 70, "name": "Human Voice 1" },
        { "index": 71, "name": "Human Voice 2" },
        { "index": 72, "name": "Human Voice 3" },
        { "index": 73, "name": "Whisper" },
        { "index": 74, "name": "Whistle" },
        { "index": 75, "name": "Gurgle" },
        { "index": 76, "name": "Bubble" },
        { "index": 77, "name": "Raindrop" },
        { "index": 78, "name": "Popcorn" },
        { "index": 79, "name": "Drip" },
        { "index": 80, "name": "Dog Pianist" },
        { "index": 81, "name": "Duck" },
        { "index": 82, "name": "Baby Doll" },
        { "index": 83, "name": "Telephone Bell" },
        { "index": 84, "name": "Emergency Alarm" },
        { "index": 85, "name": "Leaf Spring" },
        { "index": 86, "name": "Comet" },
        { "index": 87, "name": "Fireworks" },
        { "index": 88, "name": "Crystal" },
        { "index": 89, "name": "Ghost" },
        { "index": 90, "name": "Hand Bell" },
        { "index": 91, "name": "Chimes" },
        { "index": 92, "name": "Bell" },
        { "index": 93, "name": "Steel Drum" },
        { "index": 94, "name": "Cowbell" },
        { "index": 95, "name": "Synth Tom 1" },
        { "index": 96, "name": "Synth Tom 2" },
        { "index": 97, "name": "Snare Drum" },
        { "index": 98, "name": "Machine Gun" },
        { "index": 99, "name": "Wave" }
      ]
    },
    {
      "id": "B",
      "name": "VIBE BANK",
      "description": "100 experimental FM presets with optional per-preset sequence algorithms",
      "file": "yamabruh-bank-b.js",
      "global": "YAMABRUH_PRESETS_B",
      "categories": [
        { "range": [0, 9],   "name": "Glitch Textures" },
        { "range": [10, 19], "name": "Evolving Pads" },
        { "range": [20, 29], "name": "Aggressive Bass" },
        { "range": [30, 39], "name": "Metallic Chaos" },
        { "range": [40, 49], "name": "Noise Sculptures" },
        { "range": [50, 59], "name": "Percussive Hits" },
        { "range": [60, 69], "name": "Frequency Sweeps" },
        { "range": [70, 79], "name": "Algorithmic Sequences" },
        { "range": [80, 89], "name": "Layered / Combo" },
        { "range": [90, 99], "name": "Extreme Experiments" }
      ],
      "patches": [
        { "index": 0,  "name": "Static Burst" },
        { "index": 1,  "name": "Tone Shred" },
        { "index": 2,  "name": "Bit Crush" },
        { "index": 3,  "name": "Noise Shatter" },
        { "index": 4,  "name": "FM Grinder" },
        { "index": 5,  "name": "Quarter Noise" },
        { "index": 6,  "name": "Tone+Noise Sine" },
        { "index": 7,  "name": "AbsSine Crackle" },
        { "index": 8,  "name": "Half-sine Grit" },
        { "index": 9,  "name": "High-ratio Static" },
        { "index": 10, "name": "Silk Pad" },
        { "index": 11, "name": "Half Bloom" },
        { "index": 12, "name": "AbsSine Haze" },
        { "index": 13, "name": "Slow Drift" },
        { "index": 14, "name": "Half Carrier Pad" },
        { "index": 15, "name": "Quarter-mod Bloom" },
        { "index": 16, "name": "AbsSine Vapor" },
        { "index": 17, "name": "Gentle Plume" },
        { "index": 18, "name": "AbsMod Cloud" },
        { "index": 19, "name": "High-ratio Aura" },
        { "index": 20, "name": "Sub Thump" },
        { "index": 21, "name": "Half Bass" },
        { "index": 22, "name": "Abs Bass" },
        { "index": 23, "name": "Grit Bass" },
        { "index": 24, "name": "Quarter Bass" },
        { "index": 25, "name": "Noise Thud" },
        { "index": 26, "name": "Noise Mod Bass" },
        { "index": 27, "name": "Round Bass" },
        { "index": 28, "name": "Tone+Noise Bass" },
        { "index": 29, "name": "Distort Bass" },
        { "index": 30, "name": "Clash Metal" },
        { "index": 31, "name": "Anvil Strike" },
        { "index": 32, "name": "Chaos Bell" },
        { "index": 33, "name": "Reactor Hum" },
        { "index": 34, "name": "Turbine Blade" },
        { "index": 35, "name": "Steel Rain" },
        { "index": 36, "name": "Mirror Crash" },
        { "index": 37, "name": "Wreck Cymbal" },
        { "index": 38, "name": "Noise Metal" },
        { "index": 39, "name": "Tone-Metal Grind" },
        { "index": 40, "name": "White Wall" },
        { "index": 41, "name": "Tone+Noise Sculpt" },
        { "index": 42, "name": "Noise Carrier Sine" },
        { "index": 43, "name": "Full Noise" },
        { "index": 44, "name": "Tone+Noise Abs" },
        { "index": 45, "name": "Noise Quarter" },
        { "index": 46, "name": "Scatter Noise" },
        { "index": 47, "name": "Tone+Noise High" },
        { "index": 48, "name": "Noise Half-Mod" },
        { "index": 49, "name": "Double Noise" },
        { "index": 50, "name": "Sine Kick" },
        { "index": 51, "name": "Abs Snare" },
        { "index": 52, "name": "Noise Hat" },
        { "index": 53, "name": "Half Tom" },
        { "index": 54, "name": "Noise Blip" },
        { "index": 55, "name": "Quarter Tom" },
        { "index": 56, "name": "Clave Hit" },
        { "index": 57, "name": "Abs Tick" },
        { "index": 58, "name": "Tone+Noise Perc" },
        { "index": 59, "name": "Abs Crash" },
        { "index": 60, "name": "Sine Rise" },
        { "index": 61, "name": "Half-sine Sweep" },
        { "index": 62, "name": "Abs Glide" },
        { "index": 63, "name": "Abs-Qtr Swoop" },
        { "index": 64, "name": "Trem Sweep" },
        { "index": 65, "name": "Quarter Rise" },
        { "index": 66, "name": "Noise Streak" },
        { "index": 67, "name": "Tone+Noise Swoop" },
        { "index": 68, "name": "AbsAbs Crash Sweep" },
        { "index": 69, "name": "Max Ratio Dive" },
        { "index": 70, "name": "Arp Motor" },
        { "index": 71, "name": "Half Stepper" },
        { "index": 72, "name": "Ping Pong Half" },
        { "index": 73, "name": "Abs Step" },
        { "index": 74, "name": "Quarter Stutter" },
        { "index": 75, "name": "Quarter Carrier Seq" },
        { "index": 76, "name": "Abs Pattern" },
        { "index": 77, "name": "Noise Walk" },
        { "index": 78, "name": "Tone+Noise Step" },
        { "index": 79, "name": "Scatter Step" },
        { "index": 80, "name": "Vibrato Pad+Bass" },
        { "index": 81, "name": "Half+Abs Layer" },
        { "index": 82, "name": "Trem Layer" },
        { "index": 83, "name": "Abs+Vib Combo" },
        { "index": 84, "name": "Quarter Mod Blend" },
        { "index": 85, "name": "Quarter Carrier Blend" },
        { "index": 86, "name": "Noise+Tone Dual" },
        { "index": 87, "name": "Abs-Half Vib" },
        { "index": 88, "name": "Trem Abs Spread" },
        { "index": 89, "name": "Half+Qtr KSR Vib" },
        { "index": 90, "name": "Singularity" },
        { "index": 91, "name": "Infinite Sustain" },
        { "index": 92, "name": "Quarter Spark" },
        { "index": 93, "name": "Slow Bloom Max" },
        { "index": 94, "name": "Abs Mirror Max" },
        { "index": 95, "name": "Noise+Tone Extreme" },
        { "index": 96, "name": "Sub Noise Perc" },
        { "index": 97, "name": "Quarter Sub Drone" },
        { "index": 98, "name": "Abs Perc Extreme" },
        { "index": 99, "name": "Full Chaos Drone" }
      ]
    }
  ],

  "scales": [
    "major", "dorian", "phrygian", "lydian", "mixolydian", "aeolian", "locrian",
    "harmonicMinor", "melodicMinor", "pentMajor", "pentMinor", "blues", "wholeTone",
    "doubleHarmonic", "hungarianMinor", "neapolitanMin", "neapolitanMaj", "altered",
    "prometheus", "kumoi", "japanese", "hirajoshi", "iwato", "enigmatic",
    "persian", "arabian", "pelog", "gypsy", "flamenco", "bebopDom", "lydianDom",
    "bluesMajor", "dimWH", "dimHW", "augmented", "egyptian", "balinese", "bebopMinor",
    "phrygianDom"
  ],

  "waveforms": [
    { "index": 0, "name": "Sine" },
    { "index": 1, "name": "Half-sine" },
    { "index": 2, "name": "Abs-sine" },
    { "index": 3, "name": "Quarter-sine" },
    { "index": 4, "name": "Noise" },
    { "index": 5, "name": "Tone+Noise" }
  ],

  "patchFormat": {
    "description": "21-element array per patch. Both banks use this format.",
    "fields": [
      { "index": 0,  "key": "cRatio",   "description": "Carrier frequency multiplier",    "range": "0.5, 1-15" },
      { "index": 1,  "key": "mRatio",   "description": "Modulator frequency multiplier",  "range": "0.5, 1-15" },
      { "index": 2,  "key": "mDepth",   "description": "FM modulation depth (radians)",   "range": "0-12.566" },
      { "index": 3,  "key": "cAttack",  "description": "Carrier attack time (seconds)",   "range": "0+" },
      { "index": 4,  "key": "cDecay",   "description": "Carrier decay time (seconds)",    "range": "0+" },
      { "index": 5,  "key": "cSustain", "description": "Carrier sustain level",           "range": "0-1" },
      { "index": 6,  "key": "cRelease", "description": "Carrier release time (seconds)",  "range": "0+" },
      { "index": 7,  "key": "feedback",  "description": "Modulator self-feedback (radians)", "range": "0-12.566" },
      { "index": 8,  "key": "cWave",    "description": "Carrier waveform index",          "range": "0-5" },
      { "index": 9,  "key": "mWave",    "description": "Modulator waveform index",        "range": "0-5" },
      { "index": 10, "key": "tremolo",  "description": "Tremolo depth (3.7 Hz AM LFO)",   "range": "0-1" },
      { "index": 11, "key": "vibrato",  "description": "Chip vibrato depth (6.4 Hz PM LFO)", "range": "0-1" },
      { "index": 12, "key": "ksr",      "description": "Key-rate scaling",                "range": "0-1" },
      { "index": 13, "key": "ksl",      "description": "Key-level scaling",               "range": "0-3" },
      { "index": 14, "key": "modLevel", "description": "Modulator output amplitude scale", "range": "0-1" },
      { "index": 15, "key": "egType",   "description": "Carrier envelope type (0=sustained, 1=percussive)", "range": "0-1" },
      { "index": 16, "key": "mAttack",  "description": "Modulator attack time (seconds)", "range": "0+" },
      { "index": 17, "key": "mDecay",   "description": "Modulator decay time (seconds)",  "range": "0+" },
      { "index": 18, "key": "mSustain", "description": "Modulator sustain level",         "range": "0-1" },
      { "index": 19, "key": "mRelease", "description": "Modulator release time (seconds)", "range": "0+" },
      { "index": 20, "key": "mEgType",  "description": "Modulator envelope type (0=sustained, 1=percussive)", "range": "0-1" }
    ]
  }
}
