{
  "family": "fish_audio",
  "display_name": "Fish Audio S2 Pro",
  "description": "Fish Audio S2 Pro text-to-speech model for expressive speech across 80+ languages, with automatic language handling, inline prosody/emotion controls, and rapid voice cloning from short reference samples.",
  "category": "tts",
  "status": "supported",
  "tasks": [
    "tts",
    "clone"
  ],
  "modes": [
    "offline"
  ],
  "languages": [
    "80+ languages"
  ],
  "capabilities": {
    "clone": [
      "speaker_reference"
    ]
  },
  "options": {
    "request": [
      {
        "name": "reference_text",
        "type": "string",
        "description": "Reference transcript used with speaker reference audio.",
        "required": false
      },
      {
        "name": "max_tokens",
        "type": "int",
        "description": "Maximum Fish Audio semantic tokens to generate; default 1024.",
        "required": false,
        "min": 1,
        "default": 1024
      },
      {
        "name": "text_chunk_size",
        "type": "int",
        "description": "Maximum characters per generated text chunk; default 200.",
        "required": false,
        "min": 1,
        "default": 200
      },
      {
        "name": "text_chunk_mode",
        "type": "enum",
        "description": "Framework text chunking mode; default word_budget.",
        "preset": "text_chunk_mode_full",
        "required": false,
        "default": "word_budget"
      },
      {
        "name": "top_p",
        "type": "float",
        "description": "Top-p sampling value in (0, 1]; default 0.8.",
        "required": false,
        "min": 0.0,
        "max": 1.0,
        "default": 0.8
      },
      {
        "name": "top_k",
        "type": "int",
        "description": "Top-k sampling value; default 30.",
        "required": false,
        "min": 1,
        "default": 30
      },
      {
        "name": "temperature",
        "type": "float",
        "description": "Semantic-token sampling temperature in (0, 2); default 0.8.",
        "required": false,
        "min": 0.0,
        "max": 2.0,
        "default": 0.8
      },
      {
        "name": "seed",
        "type": "int",
        "description": "Sampling seed for reproducible output; omitted uses a random seed.",
        "required": false,
        "min": 0
      }
    ],
    "session": [
      {
        "name": "mem_saver",
        "type": "bool",
        "description": "Release cached AR runtime graphs after each request; default false.",
        "required": false,
        "default": false
      },
      {
        "name": "reference_cache_slots",
        "type": "int",
        "description": "Prepared reference-audio cache slots; default 1.",
        "required": false,
        "min": 0,
        "default": 1
      },
      {
        "name": "weight_type",
        "type": "enum",
        "description": "AR matmul weight storage type; default native.",
        "preset": "weight_type_full",
        "required": false,
        "default": "native"
      },
      {
        "name": "codec_weight_type",
        "type": "enum",
        "description": "Codec conv/matmul weight storage type; default native.",
        "preset": "weight_type_codec_q8",
        "required": false,
        "default": "native"
      },
      {
        "name": "ar_graph_arena_mb",
        "type": "int",
        "description": "AR runtime graph arena size in MiB; default 512.",
        "required": false,
        "min": 0,
        "default": 512
      },
      {
        "name": "ar_weight_context_mb",
        "type": "int",
        "description": "AR weight context size in MiB; default 512.",
        "required": false,
        "min": 0,
        "default": 512
      },
      {
        "name": "codec_graph_arena_mb",
        "type": "int",
        "description": "Codec encode/decode graph arena size in MiB; default 512.",
        "required": false,
        "min": 0,
        "default": 512
      },
      {
        "name": "codec_weight_context_mb",
        "type": "int",
        "description": "Codec weight context size in MiB; default 512.",
        "required": false,
        "min": 0,
        "default": 512
      }
    ],
    "load": []
  },
  "runtime": {
    "tags": [
      "gguf"
    ]
  },
  "sources": [
    {
      "format": "gguf",
      "roots": {
        "model": ".",
        "weights": "$gguf"
      },
      "files": {
        "config": "model:config.json",
        "tokenizer_config": "model:tokenizer_config.json",
        "tokenizer_json": "model:tokenizer.json"
      },
      "tensors": {
        "model_weights": {
          "source": "weights:",
          "prefix": "model_weights"
        },
        "codec_weights": {
          "source": "weights:",
          "prefix": "codec_weights"
        }
      }
    },
    {
      "format": "safetensors",
      "roots": {
        "model": "."
      },
      "files": {
        "config": "model:config.json",
        "tokenizer_config": "model:tokenizer_config.json",
        "tokenizer_json": "model:tokenizer.json"
      },
      "tensors": {
        "model_weights": "model:model_audio_cpp.safetensors.index.json",
        "codec_weights": "model:codec.safetensors"
      }
    }
  ],
  "package_defaults": {
    "download": {
      "kind": "huggingface_snapshot",
      "repo": "audio-cpp/audio.cpp-gguf",
      "revision": "main",
      "gated": false
    }
  },
  "packages": [
    {
      "id": "fish_audio_s2_pro_q8_0",
      "display_name": "Fish Audio S2 Pro Q8_0 GGUF",
      "default": true,
      "format": "gguf",
      "precision": "q8_0",
      "target_directory": "Fish-Audio-S2-Pro-GGUF",
      "files": [
        "Fish-Audio-S2-Pro-GGUF/fish-audio-s2-pro-q8_0.gguf"
      ],
      "strip_prefix": "Fish-Audio-S2-Pro-GGUF"
    },
    {
      "id": "fish_audio_s2_pro_bf16",
      "display_name": "Fish Audio S2 Pro BF16 GGUF",
      "format": "gguf",
      "precision": "bf16",
      "target_directory": "Fish-Audio-S2-Pro-GGUF",
      "files": [
        "Fish-Audio-S2-Pro-GGUF/fish-audio-s2-pro-bf16.gguf"
      ],
      "strip_prefix": "Fish-Audio-S2-Pro-GGUF"
    }
  ]
}
