{"record":{"id":"bff1ac05243ae735","repo":"RVC-Boss/GPT-SoVITS","slug":"the-following-condition-must-be-satisfied-min-len","errorCode":null,"errorMessage":"The following condition must be satisfied: min_length >= min_interval >= hop_size","messagePattern":"The following condition must be satisfied: min_length >= min_interval >= hop_size","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"tools/slicer2.py","lineNumber":49,"sourceCode":"\r\n    # Calculate power\r\n    power = np.mean(np.abs(x) ** 2, axis=-2, keepdims=True)\r\n\r\n    return np.sqrt(power)\r\n\r\n\r\nclass Slicer:\r\n    def __init__(\r\n        self,\r\n        sr: int,\r\n        threshold: float = -40.0,\r\n        min_length: int = 5000,\r\n        min_interval: int = 300,\r\n        hop_size: int = 20,\r\n        max_sil_kept: int = 5000,\r\n    ):\r\n        if not min_length >= min_interval >= hop_size:\r\n            raise ValueError(\"The following condition must be satisfied: min_length >= min_interval >= hop_size\")\r\n        if not max_sil_kept >= hop_size:\r\n            raise ValueError(\"The following condition must be satisfied: max_sil_kept >= hop_size\")\r\n        min_interval = sr * min_interval / 1000\r\n        self.threshold = 10 ** (threshold / 20.0)\r\n        self.hop_size = round(sr * hop_size / 1000)\r\n        self.win_size = min(round(min_interval), 4 * self.hop_size)\r\n        self.min_length = round(sr * min_length / 1000 / self.hop_size)\r\n        self.min_interval = round(min_interval / self.hop_size)\r\n        self.max_sil_kept = round(sr * max_sil_kept / 1000 / self.hop_size)\r\n\r\n    def _apply_slice(self, waveform, begin, end):\r\n        if len(waveform.shape) > 1:\r\n            return waveform[:, begin * self.hop_size : min(waveform.shape[1], end * self.hop_size)]\r\n        else:\r\n            return waveform[begin * self.hop_size : min(waveform.shape[0], end * self.hop_size)]\r\n\r\n    # @timeit\r\n    def slice(self, waveform):\r","sourceCodeStart":31,"sourceCodeEnd":67,"githubUrl":"https://github.com/RVC-Boss/GPT-SoVITS/blob/d523079fc05d9a8028d6085bffe4a2757c32abb6/tools/slicer2.py#L31-L67","documentation":"ValueError from Slicer.__init__: the audio slicer's parameters must satisfy min_length >= min_interval >= hop_size (values in milliseconds). These derive window geometry — win_size = min(min_interval, 4*hop_size) — and a violation would produce non-sensitive or negative window sizes, so the constructor refuses it immediately.","triggerScenarios":"Constructing Slicer(sr, min_length=..., min_interval=..., hop_size=...) (or calling the slicing webui/API with custom params) where min_interval > min_length or hop_size > min_interval, e.g. Slicer(32000, min_length=5000, min_interval=6000) or hop_size=400 with min_interval=300.","commonSituations":"User tweaks UVR5/slicing config for very aggressive silence removal and inverts a value; config file edited by hand; defaults overridden partially (large hop for speed) leaving the ordering violated.","solutions":["Fix parameter ordering: choose hop_size <= min_interval <= min_length (defaults 20 <= 300 <= 5000 ms).","If you want a bigger hop for speed, raise min_interval/min_length accordingly (e.g. hop 60 → min_interval >= 60).","Clamp/sort user-supplied values in UI code before constructing Slicer.","Reset to defaults in the webui advanced panel if unsure."],"exampleFix":"# before\nslicer = Slicer(32000, min_length=2000, min_interval=3000, hop_size=10)  # ValueError\n\n# after\n# enforce ordering\nhop, interval, length = sorted([hop_size, min_interval, min_length])\nslicer = Slicer(32000, min_length=length, min_interval=interval, hop_size=hop)","handlingStrategy":"validation","validationCode":"hop, interval, length = sorted([hop_size, min_interval, min_length])\nslicer = Slicer(sr, min_length=length, min_interval=interval, hop_size=hop)","typeGuard":"def valid_slicer_params(min_length: int, min_interval: int, hop_size: int) -> bool:\n    return min_length >= min_interval >= hop_size","tryCatchPattern":null,"preventionTips":["Treat the triple as ordered (hop <= interval <= length) when editing configs.","Clamp-and-sort user-supplied values in UI/config loaders.","Reset slicing advanced settings to defaults before debugging."],"tags":["audio-slicing","parameter-validation","config","preprocessing"],"backgroundTag":null,"analyzedSha":"d523079fc05d9a8028d6085bffe4a2757c32abb6","analyzedAt":"2026-08-15T01:06:46.402Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}