{
  "schema_version": 1,
  "family": "muscriptor",
  "display_name": "MuScriptor",
  "description": "MuScriptor is an audio-to-symbolic model that converts music audio into symbolic note events or MIDI files, with instrument constraints, sampling, beam search, batch chunk decoding, and streaming final-result output.",
  "category": "audio_tools",
  "status": "supported",
  "tasks": [
    "midi"
  ],
  "modes": [
    "offline",
    "streaming"
  ],
  "languages": [
    "music"
  ],
  "runtime": {
    "tags": [
      "gguf",
      "stream"
    ]
  },
  "capabilities": {},
  "options": {
    "request": [
      {
        "name": "instruments",
        "type": "string",
        "description": "Comma-separated instrument group names to constrain generated MIDI events; empty allows all instruments.",
        "required": false,
        "default": ""
      },
      {
        "name": "output_format",
        "type": "enum",
        "description": "Primary output serialization written by --out; midi writes a MIDI file, json writes generated note events. Default midi.",
        "values": [
          "midi",
          "json"
        ],
        "required": false,
        "default": "midi"
      },
      {
        "name": "max_tokens",
        "type": "int",
        "description": "Maximum generated MIDI-event token count per chunk; default 2000.",
        "required": false,
        "min": 1,
        "default": 2000
      },
      {
        "name": "do_sample",
        "type": "bool",
        "description": "Use temperature sampling instead of greedy token selection; default false.",
        "required": false,
        "default": false
      },
      {
        "name": "temperature",
        "type": "float",
        "description": "Sampling temperature when do_sample=true; 0 is accepted for compatibility and behaves deterministically, default 1.0.",
        "required": false,
        "min": 0.0,
        "default": 1.0
      },
      {
        "name": "guidance_scale",
        "type": "float",
        "description": "Classifier-free guidance coefficient; 1 disables CFG, default 1.0.",
        "required": false,
        "default": 1.0
      },
      {
        "name": "batch_size",
        "type": "int",
        "description": "Number of audio chunks processed per batch when prelude_forcing=false; default 1.",
        "required": false,
        "min": 1,
        "default": 1
      },
      {
        "name": "num_beams",
        "type": "int",
        "description": "Beam-search width; 1 disables beam search, default 1.",
        "required": false,
        "min": 1,
        "default": 1
      },
      {
        "name": "prelude_forcing",
        "type": "bool",
        "description": "Force open-note prelude tokens between sequential chunks; default true.",
        "required": false,
        "default": true
      },
      {
        "name": "seed",
        "type": "int",
        "description": "Sampling seed; default 0.",
        "required": false,
        "min": 0,
        "default": 0
      }
    ],
    "session": [
      {
        "name": "weight_type",
        "type": "enum",
        "description": "Transformer weight storage type; default native.",
        "preset": "weight_type_full",
        "required": false,
        "default": "native"
      },
      {
        "name": "perf_mode",
        "type": "enum",
        "description": "Decoder attention mode; flash_attention uses the CUDA fast path, off keeps the exact attention path. Default flash_attention.",
        "values": [
          "off",
          "flash_attention"
        ],
        "required": false,
        "default": "flash_attention"
      },
      {
        "name": "weight_context_mb",
        "type": "int",
        "description": "Weight context arena size in MiB; default 512.",
        "required": false,
        "min": 1,
        "default": 512
      },
      {
        "name": "conditioning_graph_arena_mb",
        "type": "int",
        "description": "Condition graph arena size in MiB; default 128.",
        "required": false,
        "min": 1,
        "default": 128
      },
      {
        "name": "decoder_prefill_graph_arena_mb",
        "type": "int",
        "description": "Decoder prefill graph arena size in MiB; default 768.",
        "required": false,
        "min": 1,
        "default": 768
      },
      {
        "name": "decoder_decode_graph_arena_mb",
        "type": "int",
        "description": "Decoder cached-step graph arena size in MiB; default 512.",
        "required": false,
        "min": 1,
        "default": 512
      }
    ],
    "load": []
  },
  "package_defaults": {
    "download": {
      "kind": "huggingface_snapshot",
      "repo": "audio-cpp/audio.cpp-gguf",
      "revision": "main",
      "gated": false
    }
  },
  "packages": [
    {
      "id": "muscriptor_small_f32",
      "display_name": "MuScriptor Small F32 GGUF",
      "default": true,
      "format": "gguf",
      "precision": "f32",
      "target_directory": "MuScriptor-Small-GGUF",
      "files": [
        "MuScriptor-Small-GGUF/muscriptor-small-f32.gguf"
      ],
      "strip_prefix": "MuScriptor-Small-GGUF"
    }
  ],
  "dependencies": [],
  "ui": {
    "recommended_package": "muscriptor_small_f32",
    "tags": [
      "Music",
      "MIDI",
      "GGUF",
      "Stream"
    ],
    "docs": [
      "docs/models/muscriptor.md",
      "docs/gguf.md"
    ]
  },
  "sources": [
    {
      "format": "gguf",
      "roots": {
        "model": ".",
        "weights": "$gguf"
      },
      "files": {
        "config": "model:config.json"
      },
      "tensors": {
        "weights": "weights:"
      }
    },
    {
      "format": "safetensors",
      "roots": {
        "model": "."
      },
      "files": {
        "config": "model:config.json"
      },
      "tensors": {
        "weights": "model:model.safetensors"
      }
    }
  ]
}
