{
  "schema_version": 1,
  "family": "rvc",
  "display_name": "RVC",
  "description": "RVC is an offline retrieval-based voice conversion family packaged for audio.cpp with native HuBERT content features, RMVPE pitch extraction, optional IVF retrieval blending, packaged v1/v2 voices, and support for user-supplied RVC checkpoints.",
  "category": "voice_conversion",
  "status": "experimental",
  "tasks": [
    "vc"
  ],
  "modes": [
    "offline"
  ],
  "languages": [
    "language_agnostic"
  ],
  "runtime": {
    "tags": [
      "gguf"
    ]
  },
  "capabilities": {},
  "options": {
    "request": [
      {
        "name": "voice_id",
        "type": "enum",
        "description": "Packaged RVC voice id; default selects the v2 default voice. Ignored when voice_model_path is provided.",
        "values": [
          "default",
          "manthos",
          "chocola",
          "fraise"
        ],
        "required": false,
        "default": "default"
      },
      {
        "name": "voice_model_path",
        "type": "path",
        "description": "Optional user RVC .pth or .pt voice checkpoint path. When set, this overrides the packaged voice id.",
        "required": false
      },
      {
        "name": "pitch_extractor",
        "type": "enum",
        "description": "Pitch extraction method for F0-enabled voices; the native path currently supports rmvpe only.",
        "values": [
          "rmvpe"
        ],
        "required": false,
        "default": "rmvpe"
      },
      {
        "name": "pitch_path",
        "type": "path",
        "description": "Optional CSV F0 override file with time,Hz rows sorted by time.",
        "required": false
      },
      {
        "name": "retrieval_index_path",
        "type": "path",
        "description": "Optional user FAISS .index retrieval path used when retrieval_blend is greater than 0 for a user voice model.",
        "required": false
      },
      {
        "name": "retrieval_blend",
        "type": "float",
        "description": "IVF retrieval feature blend rate; default 0 disables retrieval blending.",
        "required": false,
        "min": 0.0,
        "max": 1.0,
        "default": 0.0
      },
      {
        "name": "semitone_shift",
        "type": "int",
        "description": "Semitone pitch shift applied before synthesis; default 0.",
        "required": false,
        "default": 0
      },
      {
        "name": "pitch_filter_radius",
        "type": "int",
        "description": "Median filter radius for F0 smoothing; values greater than 2 enable filtering, default 3.",
        "required": false,
        "min": 0,
        "default": 3
      },
      {
        "name": "output_sample_rate",
        "type": "int",
        "description": "Output sample rate in Hz; default 0 keeps the selected voice model sample rate.",
        "required": false,
        "min": 0,
        "default": 0
      },
      {
        "name": "rms_mix_rate",
        "type": "float",
        "description": "RMS envelope mix rate applied after conversion; default 0.25.",
        "required": false,
        "default": 0.25
      },
      {
        "name": "unvoiced_protection",
        "type": "float",
        "description": "Unvoiced consonant protection strength; must be in [0, 1], default 0.33.",
        "required": false,
        "min": 0.0,
        "max": 1.0,
        "default": 0.33
      },
      {
        "name": "speaker_id",
        "type": "int",
        "description": "Speaker embedding id for multi-speaker RVC checkpoints; default 0.",
        "required": false,
        "min": 0,
        "default": 0
      },
      {
        "name": "audio_pad_duration_sec",
        "type": "int",
        "description": "Long-audio chunk pad duration in seconds; default 1.",
        "required": false,
        "min": 1,
        "default": 1
      },
      {
        "name": "split_query_sec",
        "type": "int",
        "description": "Quiet-point query window in seconds for long-audio splitting; default 5.",
        "required": false,
        "min": 1,
        "default": 5
      },
      {
        "name": "split_center_sec",
        "type": "int",
        "description": "Long-audio split center stride in seconds; default 30.",
        "required": false,
        "min": 1,
        "default": 30
      },
      {
        "name": "split_threshold_sec",
        "type": "int",
        "description": "Input duration in seconds before quiet-point splitting is used; default 32.",
        "required": false,
        "min": 1,
        "default": 32
      }
    ],
    "session": [
      {
        "name": "weight_type",
        "type": "enum",
        "description": "Tensor storage type for native RVC, HuBERT, and RMVPE weights; default f32.",
        "preset": "weight_type_full",
        "required": false,
        "default": "f32"
      },
      {
        "name": "voice_cache_slots",
        "type": "int",
        "description": "User voice model cache slots; default 4, set 0 to disable caching.",
        "required": false,
        "min": 0,
        "default": 4
      }
    ],
    "load": []
  },
  "package_defaults": {
    "download": {
      "kind": "huggingface_snapshot",
      "repo": "audio-cpp/audio.cpp-gguf",
      "revision": "main",
      "gated": false
    }
  },
  "packages": [
    {
      "id": "rvc_f16",
      "display_name": "RVC F16 GGUF",
      "default": true,
      "format": "gguf",
      "precision": "f16",
      "target_directory": "RVC-GGUF",
      "files": [
        "RVC-GGUF/rvc-f16.gguf"
      ],
      "strip_prefix": "RVC-GGUF"
    }
  ],
  "dependencies": [],
  "ui": {
    "recommended_package": "rvc_f16",
    "tags": [
      "VC",
      "GGUF"
    ],
    "docs": [
      "docs/audio_tools.md",
      "docs/gguf.md"
    ]
  },
  "sources": [
    {
      "format": "gguf",
      "roots": {
        "model": ".",
        "weights": "$gguf"
      },
      "files": {
        "voice_v1_chocola_index": "model:voices/v1/chocola/added_IVF732_Flat_nprobe_1.index",
        "voice_v1_fraise_index": "model:voices/v1/fraise/added_IVF802_Flat_nprobe_1.index",
        "voice_v2_default_index": "model:voices/v2/default/added_IVF511_Flat_nprobe_1_default_v2.index",
        "voice_v2_manthos_index": "model:voices/v2/manthos/added_IVF2586_Flat_nprobe_1_manthos_v2.index"
      },
      "tensors": {
        "support_hubert_base": {
          "source": "weights:",
          "prefix": "support_hubert_base"
        },
        "support_rmvpe": {
          "source": "weights:",
          "prefix": "support_rmvpe"
        },
        "voice_v1_chocola_checkpoint": {
          "source": "weights:",
          "prefix": "voice_v1_chocola_checkpoint"
        },
        "voice_v1_chocola_index_vectors": {
          "source": "weights:",
          "prefix": "voice_v1_chocola_index_vectors"
        },
        "voice_v1_fraise_checkpoint": {
          "source": "weights:",
          "prefix": "voice_v1_fraise_checkpoint"
        },
        "voice_v1_fraise_index_vectors": {
          "source": "weights:",
          "prefix": "voice_v1_fraise_index_vectors"
        },
        "voice_v2_default_checkpoint": {
          "source": "weights:",
          "prefix": "voice_v2_default_checkpoint"
        },
        "voice_v2_default_index_vectors": {
          "source": "weights:",
          "prefix": "voice_v2_default_index_vectors"
        },
        "voice_v2_manthos_checkpoint": {
          "source": "weights:",
          "prefix": "voice_v2_manthos_checkpoint"
        },
        "voice_v2_manthos_index_vectors": {
          "source": "weights:",
          "prefix": "voice_v2_manthos_index_vectors"
        }
      }
    },
    {
      "format": "safetensors",
      "roots": {
        "safetensors": "../safetensors"
      },
      "files": {
        "voice_v1_chocola_index": "safetensors:voices/v1/chocola/added_IVF732_Flat_nprobe_1.index",
        "voice_v1_fraise_index": "safetensors:voices/v1/fraise/added_IVF802_Flat_nprobe_1.index",
        "voice_v2_default_index": "safetensors:voices/v2/default/added_IVF511_Flat_nprobe_1_default_v2.index",
        "voice_v2_manthos_index": "safetensors:voices/v2/manthos/added_IVF2586_Flat_nprobe_1_manthos_v2.index"
      },
      "tensors": {
        "support_hubert_base": "safetensors:support/hubert_base.safetensors",
        "support_rmvpe": "safetensors:support/rmvpe.safetensors",
        "voice_v1_chocola_checkpoint": "safetensors:voices/v1/chocola/chocola2333333.safetensors",
        "voice_v1_chocola_index_vectors": "safetensors:voices/v1/chocola/added_IVF732_Flat_nprobe_1.ivf.safetensors",
        "voice_v1_fraise_checkpoint": "safetensors:voices/v1/fraise/fraise2333333.safetensors",
        "voice_v1_fraise_index_vectors": "safetensors:voices/v1/fraise/added_IVF802_Flat_nprobe_1.ivf.safetensors",
        "voice_v2_default_checkpoint": "safetensors:voices/v2/default/default.safetensors",
        "voice_v2_default_index_vectors": "safetensors:voices/v2/default/added_IVF511_Flat_nprobe_1_default_v2.ivf.safetensors",
        "voice_v2_manthos_checkpoint": "safetensors:voices/v2/manthos/manthos.safetensors",
        "voice_v2_manthos_index_vectors": "safetensors:voices/v2/manthos/added_IVF2586_Flat_nprobe_1_manthos_v2.ivf.safetensors"
      }
    }
  ]
}
