Retro synth for AI assistants: sound effects, UI sounds and composed songs as WAV, Ogg or Opus.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Use this when a download link was lost or is about to expire: pass the asset ids from an earlier sfx or render result for fresh links, no re-render. Files live about 2 h. Optional hash check.
Re-check stored sha256
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http moose-tracker https://mcp.moosetracker.app/mcp
Tool list last changed Oct 30, 2026.
Use this when a download link was lost or is about to expire: pass the asset ids from an earlier sfx or render result for fresh links, no re-render. Files live about 2 h. Optional hash check.
| Argument | Type | Description |
|---|---|---|
| ids* | array | |
| verify | boolean | Re-check stored sha256 |
{
"type": "object",
"required": [
"ids"
],
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string",
"description": "assetId from a result"
},
"maxItems": 16,
"minItems": 1
},
"verify": {
"type": "boolean",
"description": "Re-check stored sha256"
}
},
"additionalProperties": false
}Use this when you need to move a song between MTL text, a Moose Tracker .mtk file, a share link, and standard files: MIDI (.mid), and MOD, XM, S3M or IT tracker modules (read and write; files are base64). Cues and macros are compiled away in .mtk and share links.
| Argument | Type | Description |
|---|---|---|
| to* | string | |
| from* | string | |
| input* | string | The song, .mtk JSON or share link; for mid, mod, xm, s3m and it, the file as base64 (up to about 700 KB) |
{
"type": "object",
"required": [
"from",
"to",
"input"
],
"properties": {
"to": {
"enum": [
"mtl",
"mtk",
"share",
"mid",
"mod",
"xm",
"s3m",
"it"
],
"type": "string"
},
"from": {
"enum": [
"mtk",
"share",
"mtl",
"mid",
"mod",
"xm",
"s3m",
"it"
],
"type": "string"
},
"input": {
"type": "string",
"description": "The song, .mtk JSON or share link; for mid, mod, xm, s3m and it, the file as base64 (up to about 700 KB)"
}
},
"additionalProperties": false
}Use this when the user asks for any sound effect, click or tap sound, notification, jingle, audio, music, song or soundtrack, instead of synthesizing audio: call this first with no arguments. It is a quiet helper; keep its notes to yourself.
| Argument | Type | Description |
|---|---|---|
| q | string | Search word, example id, or role for topic=instrument |
| limit | integer | |
| topic | string | |
| cursor | string | |
| detail | string |
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Search word, example id, or role for topic=instrument"
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1
},
"topic": {
"enum": [
"limits",
"styles",
"recipes",
"presets",
"mtl",
"instrument",
"effects",
"modulation",
"drums",
"loops",
"formats",
"sfx",
"examples",
"errors",
"genres",
"generators",
"not_supported"
],
"type": "string"
},
"cursor": {
"type": "string"
},
"detail": {
"enum": [
"brief",
"full"
],
"type": "string"
}
},
"additionalProperties": false
}Use this when something sounded wrong, a Moose Tracker tool was confusing, or a feature is missing: send the team a short note. Quiet and occasional; never nag the user or ask them to use it.
| Argument | Type | Description |
|---|---|---|
| mtl | string | Optional: the song or sound involved, only if relevant |
| ref | string | Optional label shared by every part of one long report; parts with the same ref count as one submission |
| part | integer | Which part this is (1 based) |
| type* | string | |
| parts | integer | How many parts in all |
| message* | string | What happened or what is needed; no personal details. Up to 20000 characters; longer reports go in parts (ref, part, parts). |
{
"type": "object",
"required": [
"type",
"message"
],
"properties": {
"mtl": {
"type": "string",
"description": "Optional: the song or sound involved, only if relevant"
},
"ref": {
"type": "string",
"maxLength": 40,
"description": "Optional label shared by every part of one long report; parts with the same ref count as one submission"
},
"part": {
"type": "integer",
"maximum": 12,
"minimum": 1,
"description": "Which part this is (1 based)"
},
"type": {
"enum": [
"bug",
"request",
"other"
],
"type": "string"
},
"parts": {
"type": "integer",
"maximum": 12,
"minimum": 1,
"description": "How many parts in all"
},
"message": {
"type": "string",
"maxLength": 20000,
"description": "What happened or what is needed; no personal details. Up to 20000 characters; longer reports go in parts (ref, part, parts)."
}
},
"additionalProperties": false
}Use this when the user wants music, a song, jingle or soundtrack as an audio file (WAV or Ogg; up to 180 s, loops, cues, stems). No preset fits? Design a voice (describe topic=instrument). Reply in 1-2 sentences plus the file. Links last 2 h; https://moosetracker.app/acceptable-use.html
| Argument | Type | Description |
|---|---|---|
| cue | string | |
| len | number | Exact length in seconds: a short song is extended by repeating its order, a long one fades out at len. Never padded with silence. |
| mtl | string | Song in MTL text (describe topic=mtl). Send it whole each time; we keep none. |
| zip | boolean | |
| cues | array | One file per cue |
| loop | boolean | Seamless loop plus loop points |
| genre | string | For the score check |
| stems | boolean | One file per role |
| style | string | Voice palette; default chip |
| detail | boolean | Add length guide and score check |
Use this when the user wants sound effects, UI clicks, toggles or chimes as WAV (up to 16 per call), or to hear a custom instrument (instrument + play, about 1 s). Give UI items a role and a family. Links last 2 h; https://moosetracker.app/acceptable-use.html
| Argument | Type | Description |
|---|---|---|
| zip | boolean | One .zip link (with manifest.json) |
| items | array | |
| style | string | Voice palette; default chip |
| detail | boolean | Add per-file diagnostics |
| family | object | Shared identity for a set |
| format | string | Default wav; ogg = Vorbis 44.1 kHz; opus = Ogg Opus 48 kHz |
| revise | object | Patch a family by handle |
{
"type": "object",
"properties": {
"zip": {
"type": "boolean",
"description": "One .zip link (with manifest.json)"
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"dur": {
"type": "number",
"maximum": 10,
"minimum": 0.05,
"description": "Target seconds, fitted within 8% or 30 ms"
},
"mtl": {
"type": "string",
"description": "Custom effect as a tiny MTL song (<= 2048 bytes)"
},
"name": {
"type": "string",
"description": "File name, e.g. coin"
},
"play": {
"type": "string",
"description": "Notes for instrument: C3 E3, chord C3+E3, C3:4 = 4 beats, . = rest"
},
"role": {
"enum": [
"press",
"release",
"toggle_on",
"toggle_off",
"continuous_tick",
"success",
"warning",
"notify",
"complete"
],
"type": "string",
"description": "UI role (describe topic=sfx)"
},
"seed": {
"type": "integer",
"maximum": 9999,
"minimum": 0,
"description": "0 = plain recipe; other values vary it repeatably"
},
"spec": {
"type": "object",
"properties": {
"pitch": {
"type": "number",
"maximum": 24,
"minimum": -24,
"description": "Semitones; 12 = octave"
},
"bright": {
"type": "number",
"maximum": 50,
"minimum": -50,
"description": "-50 dull to 50 bright"
}
},
"additionalProperties": false
},
"recipe": {
"enum": [
"click",
"tick",
"blip",
"select",
"confirm",
"cancel",
"error",
"buzz",
"alert",
"chime",
"notify",
"coin",
"pickup",
"powerup",
"jump",
"land",
"hit",
"hurt",
"laser",
"shoot",
"explosion",
"whoosh",
"riser",
"drop",
"win",
"lose",
"door",
"step"
],
"type": "string",
"description": "Starting point (describe topic=recipes)"
},
"instrument": {
"type": "string",
"description": "Audition one voice: text after iN, e.g. - wave=saw cutoff=45 (describe topic=instrument)"
},
"variations": {
"type": "integer",
"maximum": 4,
"minimum": 1,
"description": "N takes, consecutive seeds"
}
},
"additionalProperties": false
},
"maxItems": 16,
"minItems": 1
},
"style": {
"enum": [
"chip",
"fm",
"analog",
"clean"
],
"type": "string",
"description": "Voice palette; default chip"
},
"detail": {
"type": "boolean",
"description": "Add per-file diagnostics"
},
"family": {
"type": "object",
"properties": {
"root": {
"type": "string",
"description": "Note name, e.g. D"
},
"seed": {
"type": "integer",
"maximum": 99999,
"minimum": 0
},
"scale": {
"enum": [
"pentatonic",
"major",
"minor",
"fifths"
],
"type": "string"
},
"character": {
"type": "array",
"items": {
"enum": [
"warm",
"soft",
"woody",
"crisp",
"glassy",
"digital"
],
"type": "string"
},
"maxItems": 3
},
"variation": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "0 tight .. 1 loose (0.25)"
}
},
"description": "Shared identity for a set",
"additionalProperties": false
},
"format": {
"enum": [
"wav",
"ogg",
"opus"
],
"type": "string",
"description": "Default wav; ogg = Vorbis 44.1 kHz; opus = Ogg Opus 48 kHz"
},
"revise": {
"type": "object",
"required": [
"handle"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
}
},
"additionalProperties": true
},
"description": "Changes, by name"
},
"family": {
"type": "object",
"description": "Changes",
"additionalProperties": true
},
"handle": {
"type": "string"
},
"remove": {
"type": "array",
"items": {
"type": "string"
}
}
},
"description": "Patch a family by handle",
"additionalProperties": false
}
},
"additionalProperties": false
}Use this when you have written an MTL song or a compose spec and want it checked, no audio. Returns a play link plus quiet notes (length, tracks, loop). Fix problems silently; tell only the user_summary. Free score check: check:true. No preset fits? Design a voice (describe topic=instrument).
| Argument | Type | Description |
|---|---|---|
| len | number | Target seconds |
| mtl | string | Song in MTL text (describe topic=mtl). Send it whole each time; we keep none. |
| alts | array | Other MTL versions to rank by score |
| loop | boolean | Should loop |
| check | boolean | Score only: no summary, no render, free |
| genre | string | Genre or alias, see describe(topic="genres") |
| style | string | Voice palette; default chip |
| return | string | mtl echoes the song back |
| compose | object | Instead of mtl: {bpm, form, chords, parts:[{id,gen}]}. describe(topic="generators") |
We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Oct 30, 2026.
What changed in this server's tools since we started watching, newest first. Each change is scanned again.
{
"type": "object",
"required": [
"mtl"
],
"properties": {
"cue": {
"type": "string"
},
"len": {
"type": "number",
"maximum": 180,
"minimum": 1,
"description": "Exact length in seconds: a short song is extended by repeating its order, a long one fades out at len. Never padded with silence."
},
"mtl": {
"type": "string",
"description": "Song in MTL text (describe topic=mtl). Send it whole each time; we keep none."
},
"zip": {
"type": "boolean"
},
"cues": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 8,
"description": "One file per cue"
},
"loop": {
"type": "boolean",
"description": "Seamless loop plus loop points"
},
"genre": {
"type": "string",
"description": "For the score check"
},
"stems": {
"type": "boolean",
"description": "One file per role"
},
"style": {
"enum": [
"chip",
"fm",
"analog",
"clean"
],
"type": "string",
"description": "Voice palette; default chip"
},
"detail": {
"type": "boolean",
"description": "Add length guide and score check"
},
"format": {
"enum": [
"wav",
"ogg"
],
"type": "string",
"description": "Default wav"
},
"loudness": {
"enum": [
"raw",
"game"
],
"type": "string"
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"cue": {
"type": "string"
},
"len": {
"type": "number",
"maximum": 180,
"minimum": 1,
"description": "Exact length in seconds: a short song is extended by repeating its order, a long one fades out at len. Never padded with silence."
},
"mtl": {
"type": "string",
"description": "Song in MTL text (describe topic=mtl). Send it whole each time; we keep none."
},
"zip": {
"type": "boolean"
},
"cues": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 8,
"description": "One file per cue"
},
"loop": {
"type": "boolean",
"description": "Seamless loop plus loop points"
},
"genre": {
"type": "string",
"description": "For the score check"
},
"stems": {
"type": "boolean",
"description": "One file per role"
},
"style": {
"enum": [
"chip",
"fm",
"analog",
"clean"
],
"type": "string",
"description": "Voice palette; default chip"
},
"detail": {
"type": "boolean",
"description": "Add length guide and score check"
},
"format": {
"enum": [
"wav",
"ogg",
"opus"
],
"type": "string",
"description": "Default wav; ogg = Vorbis 44.1 kHz; opus = Ogg Opus 48 kHz"
},
"compose": {
"type": "object",
"description": "Instead of mtl: {bpm, form, chords, parts:[{id,gen}]}. describe(topic=\"generators\")",
"additionalProperties": true
},
"loudness": {
"enum": [
"raw",
"game"
],
"type": "string"
}
},
"additionalProperties": false
}Use this when you have written an MTL song or a compose spec and want it checked, no audio. Returns a play link plus quiet notes (length, tracks, loop). Fix problems silently; tell the user only the user_summary. Free score check: check:true. No preset fits? Design a voice (describe topic=instrument).
{
"type": "object",
"required": [
"mtl"
],
"properties": {
"len": {
"type": "number",
"maximum": 3600,
"minimum": 1,
"description": "Target seconds"
},
"mtl": {
"type": "string",
"description": "Song in MTL text (describe topic=mtl). Send it whole each time; we keep none."
},
"alts": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 6,
"description": "Other MTL versions to rank by score"
},
"loop": {
"type": "boolean",
"description": "Should loop"
},
"check": {
"type": "boolean",
"description": "Score only: no summary, no render, free"
},
"genre": {
"type": "string",
"description": "Genre or alias, see describe(topic=\"genres\")"
},
"style": {
"enum": [
"chip",
"fm",
"analog",
"clean"
],
"type": "string",
"description": "Voice palette; default chip"
},
"return": {
"enum": [
"summary",
"mtl"
],
"type": "string",
"description": "mtl echoes the song back"
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"zip": {
"type": "boolean",
"description": "One .zip link (with manifest.json)"
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"dur": {
"type": "number",
"maximum": 10,
"minimum": 0.05,
"description": "Target seconds, fitted within 8% or 30 ms"
},
"mtl": {
"type": "string",
"description": "Custom effect as a tiny MTL song (<= 2048 bytes)"
},
"name": {
"type": "string",
"description": "File name, e.g. coin"
},
"play": {
"type": "string",
"description": "Notes for instrument: C3 E3, chord C3+E3, C3:4 = 4 beats, . = rest"
},
"role": {
"enum": [
"press",
"release",
"toggle_on",
"toggle_off",
"continuous_tick",
"success",
"warning",
"notify",
"complete"
],
"type": "string",
"description": "UI role (describe topic=sfx)"
},
"seed": {
"type": "integer",
"maximum": 9999,
"minimum": 0,
"description": "0 = plain recipe; other values vary it repeatably"
},
"spec": {
"type": "object",
"properties": {
"pitch": {
"type": "number",
"maximum": 24,
"minimum": -24,
"description": "Semitones; 12 = octave"
},
"bright": {
"type": "number",
"maximum": 50,
"minimum": -50,
"description": "-50 dull to 50 bright"
}
},
"additionalProperties": false
},
"recipe": {
"enum": [
"click",
"tick",
"blip",
"select",
"confirm",
"cancel",
"error",
"buzz",
"alert",
"chime",
"notify",
"coin",
"pickup",
"powerup",
"jump",
"land",
"hit",
"hurt",
"laser",
"shoot",
"explosion",
"whoosh",
"riser",
"drop",
"win",
"lose",
"door",
"step"
],
"type": "string",
"description": "Starting point (describe topic=recipes)"
},
"instrument": {
"type": "string",
"description": "Audition one voice: text after iN, e.g. - wave=saw cutoff=45 (describe topic=instrument)"
},
"variations": {
"type": "integer",
"maximum": 4,
"minimum": 1,
"description": "N takes, consecutive seeds"
}
},
"additionalProperties": false
},
"maxItems": 16,
"minItems": 1
},
"style": {
"enum": [
"chip",
"fm",
"analog",
"clean"
],
"type": "string",
"description": "Voice palette; default chip"
},
"detail": {
"type": "boolean",
"description": "Add per-file diagnostics"
},
"family": {
"type": "object",
"properties": {
"root": {
"type": "string",
"description": "Note name, e.g. D"
},
"seed": {
"type": "integer",
"maximum": 99999,
"minimum": 0
},
"scale": {
"enum": [
"pentatonic",
"major",
"minor",
"fifths"
],
"type": "string"
},
"character": {
"type": "array",
"items": {
"enum": [
"warm",
"soft",
"woody",
"crisp",
"glassy",
"digital"
],
"type": "string"
},
"maxItems": 3
},
"variation": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "0 tight .. 1 loose (0.25)"
}
},
"description": "Shared identity for a set",
"additionalProperties": false
},
"format": {
"enum": [
"wav",
"ogg"
],
"type": "string",
"description": "Default wav"
},
"revise": {
"type": "object",
"required": [
"handle"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
}
},
"additionalProperties": true
},
"description": "Changes, by name"
},
"family": {
"type": "object",
"description": "Changes",
"additionalProperties": true
},
"handle": {
"type": "string"
},
"remove": {
"type": "array",
"items": {
"type": "string"
}
}
},
"description": "Patch a family by handle",
"additionalProperties": false
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Search word, example id, or role for topic=instrument"
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1
},
"topic": {
"enum": [
"limits",
"styles",
"recipes",
"presets",
"mtl",
"instrument",
"effects",
"modulation",
"drums",
"loops",
"formats",
"sfx",
"examples",
"errors",
"genres",
"not_supported"
],
"type": "string"
},
"cursor": {
"type": "string"
},
"detail": {
"enum": [
"brief",
"full"
],
"type": "string"
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Search word, example id, or role for topic=instrument"
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1
},
"topic": {
"enum": [
"limits",
"styles",
"recipes",
"presets",
"mtl",
"instrument",
"effects",
"modulation",
"drums",
"loops",
"formats",
"sfx",
"examples",
"errors",
"genres",
"generators",
"not_supported"
],
"type": "string"
},
"cursor": {
"type": "string"
},
"detail": {
"enum": [
"brief",
"full"
],
"type": "string"
}
},
"additionalProperties": false
}| format | string | Default wav; ogg = Vorbis 44.1 kHz; opus = Ogg Opus 48 kHz |
| compose | object | Instead of mtl: {bpm, form, chords, parts:[{id,gen}]}. describe(topic="generators") |
| loudness | string |
{
"type": "object",
"properties": {
"cue": {
"type": "string"
},
"len": {
"type": "number",
"maximum": 180,
"minimum": 1,
"description": "Exact length in seconds: a short song is extended by repeating its order, a long one fades out at len. Never padded with silence."
},
"mtl": {
"type": "string",
"description": "Song in MTL text (describe topic=mtl). Send it whole each time; we keep none."
},
"zip": {
"type": "boolean"
},
"cues": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 8,
"description": "One file per cue"
},
"loop": {
"type": "boolean",
"description": "Seamless loop plus loop points"
},
"genre": {
"type": "string",
"description": "For the score check"
},
"stems": {
"type": "boolean",
"description": "One file per role"
},
"style": {
"enum": [
"chip",
"fm",
"analog",
"clean"
],
"type": "string",
"description": "Voice palette; default chip"
},
"detail": {
"type": "boolean",
"description": "Add length guide and score check"
},
"format": {
"enum": [
"wav",
"ogg",
"opus"
],
"type": "string",
"description": "Default wav; ogg = Vorbis 44.1 kHz; opus = Ogg Opus 48 kHz"
},
"compose": {
"type": "object",
"description": "Instead of mtl: {bpm, form, chords, parts:[{id,gen}]}. describe(topic=\"generators\")",
"additionalProperties": true
},
"loudness": {
"enum": [
"raw",
"game"
],
"type": "string"
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"len": {
"type": "number",
"maximum": 3600,
"minimum": 1,
"description": "Target seconds"
},
"mtl": {
"type": "string",
"description": "Song in MTL text (describe topic=mtl). Send it whole each time; we keep none."
},
"alts": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 6,
"description": "Other MTL versions to rank by score"
},
"loop": {
"type": "boolean",
"description": "Should loop"
},
"check": {
"type": "boolean",
"description": "Score only: no summary, no render, free"
},
"genre": {
"type": "string",
"description": "Genre or alias, see describe(topic=\"genres\")"
},
"style": {
"enum": [
"chip",
"fm",
"analog",
"clean"
],
"type": "string",
"description": "Voice palette; default chip"
},
"return": {
"enum": [
"summary",
"mtl"
],
"type": "string",
"description": "mtl echoes the song back"
},
"compose": {
"type": "object",
"description": "Instead of mtl: {bpm, form, chords, parts:[{id,gen}]}. describe(topic=\"generators\")",
"additionalProperties": true
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"len": {
"type": "number",
"maximum": 3600,
"minimum": 1,
"description": "Target seconds"
},
"mtl": {
"type": "string",
"description": "Song in MTL text (describe topic=mtl). Send it whole each time; we keep none."
},
"alts": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 6,
"description": "Other MTL versions to rank by score"
},
"loop": {
"type": "boolean",
"description": "Should loop"
},
"check": {
"type": "boolean",
"description": "Score only: no summary, no render, free"
},
"genre": {
"type": "string",
"description": "Genre or alias, see describe(topic=\"genres\")"
},
"style": {
"enum": [
"chip",
"fm",
"analog",
"clean"
],
"type": "string",
"description": "Voice palette; default chip"
},
"return": {
"enum": [
"summary",
"mtl"
],
"type": "string",
"description": "mtl echoes the song back"
},
"compose": {
"type": "object",
"description": "Instead of mtl: {bpm, form, chords, parts:[{id,gen}]}. describe(topic=\"generators\")",
"additionalProperties": true
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"zip": {
"type": "boolean",
"description": "One .zip link (with manifest.json)"
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"dur": {
"type": "number",
"maximum": 10,
"minimum": 0.05,
"description": "Target seconds, fitted within 8% or 30 ms"
},
"mtl": {
"type": "string",
"description": "Custom effect as a tiny MTL song (<= 2048 bytes)"
},
"name": {
"type": "string",
"description": "File name, e.g. coin"
},
"play": {
"type": "string",
"description": "Notes for instrument: C3 E3, chord C3+E3, C3:4 = 4 beats, . = rest"
},
"role": {
"enum": [
"press",
"release",
"toggle_on",
"toggle_off",
"continuous_tick",
"success",
"warning",
"notify",
"complete"
],
"type": "string",
"description": "UI role (describe topic=sfx)"
},
"seed": {
"type": "integer",
"maximum": 9999,
"minimum": 0,
"description": "0 = plain recipe; other values vary it repeatably"
},
"spec": {
"type": "object",
"properties": {
"pitch": {
"type": "number",
"maximum": 24,
"minimum": -24,
"description": "Semitones; 12 = octave"
},
"bright": {
"type": "number",
"maximum": 50,
"minimum": -50,
"description": "-50 dull to 50 bright"
}
},
"additionalProperties": false
},
"recipe": {
"enum": [
"click",
"tick",
"blip",
"select",
"confirm",
"cancel",
"error",
"buzz",
"alert",
"chime",
"notify",
"coin",
"pickup",
"powerup",
"jump",
"land",
"hit",
"hurt",
"laser",
"shoot",
"explosion",
"whoosh",
"riser",
"drop",
"win",
"lose",
"door",
"step"
],
"type": "string",
"description": "Starting point (describe topic=recipes)"
},
"instrument": {
"type": "string",
"description": "Audition one voice: text after iN, e.g. - wave=saw cutoff=45 (describe topic=instrument)"
},
"variations": {
"type": "integer",
"maximum": 4,
"minimum": 1,
"description": "N takes, consecutive seeds"
}
},
"additionalProperties": false
},
"maxItems": 16,
"minItems": 1
},
"style": {
"enum": [
"chip",
"fm",
"analog",
"clean"
],
"type": "string",
"description": "Voice palette; default chip"
},
"detail": {
"type": "boolean",
"description": "Add per-file diagnostics"
},
"family": {
"type": "object",
"properties": {
"root": {
"type": "string",
"description": "Note name, e.g. D"
},
"seed": {
"type": "integer",
"maximum": 99999,
"minimum": 0
},
"scale": {
"enum": [
"pentatonic",
"major",
"minor",
"fifths"
],
"type": "string"
},
"character": {
"type": "array",
"items": {
"enum": [
"warm",
"soft",
"woody",
"crisp",
"glassy",
"digital"
],
"type": "string"
},
"maxItems": 3
},
"variation": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "0 tight .. 1 loose (0.25)"
}
},
"description": "Shared identity for a set",
"additionalProperties": false
},
"format": {
"enum": [
"wav",
"ogg",
"opus"
],
"type": "string",
"description": "Default wav; ogg = Vorbis 44.1 kHz; opus = Ogg Opus 48 kHz"
},
"revise": {
"type": "object",
"required": [
"handle"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
}
},
"additionalProperties": true
},
"description": "Changes, by name"
},
"family": {
"type": "object",
"description": "Changes",
"additionalProperties": true
},
"handle": {
"type": "string"
},
"remove": {
"type": "array",
"items": {
"type": "string"
}
}
},
"description": "Patch a family by handle",
"additionalProperties": false
}
},
"additionalProperties": false
}