--- license: mit language: - multilingual datasets: - google/fleurs-r - parler-tts/libritts_r_filtered tags: - speech-restoration - speech-enhancement - dereverberation - gguf - crispasr base_model: sarulab-speech/sidon-v0.1 base_model_relation: quantized pipeline_tag: audio-to-audio --- # Sidon GGUF (quant ladder) GGUF conversions of [SaruLab Sidon v0.1](https://huggingface.co/sarulab-speech/sidon-v0.1), a multilingual speech-restoration model that removes noise and reverberation and restores speech bandwidth (16 kHz in → 48 kHz out). Packaged for native, no-PyTorch inference with [CrispASR](https://github.com/CrispStrobe/CrispASR). The model is the first eight layers of w2v-BERT 2.0 with the Sidon LoRA adapter merged, followed by Sidon's continuous DAC decoder. The SeamlessM4T log-mel window and filter bank are embedded in the GGUF. Port by [@KevinAHM](https://huggingface.co/KevinAHM/Sidon-GGUF) (CrispASR PR #283); this repo adds the quantization ladder. ## Files | File | Precision | Size | Notes | | --- | --- | ---: | --- | | `sidon-v0.1-f16.gguf` | FP16 weights, FP32 norms/biases | 470 MiB | Reference. Byte-identical to KevinAHM/Sidon-GGUF. | | `sidon-v0.1-q8_0.gguf` | Q8_0 predictor matmuls | 320 MiB | Highest-fidelity quant. | | `sidon-v0.1-q6_k.gguf` | Q6_K predictor matmuls | 281 MiB | Balanced. | | `sidon-v0.1-q4_k.gguf` | Q4_K predictor matmuls | 240 MiB | Smallest. Intelligible, but see fidelity note. | Only the w2v-BERT predictor's large linear weights are quantized; the DAC decoder convolutions and all norms/biases/Snake `alpha` parameters are kept at their original precision. ## Fidelity Validated by **ASR round-trip** (Whisper `base.en`) on the restored output — the metric that matters for a restoration model, since output-waveform correlation understates perceptual quality: | Quant | ASR round-trip (JFK clip) | Output-waveform corr. vs F16 | | --- | --- | ---: | | F16 | WER 0 (exact transcript) | 1.000 | | Q8_0 | WER 0 | r ≈ 0.99, SNR ≈ 16 dB | | Q4_K | WER 0 | r ≈ 0.61, SNR ≈ 1 dB | All quants restore fully intelligible speech (WER 0). Q4_K's low waveform correlation means its fine restored detail diverges from F16 even though intelligibility is preserved; prefer **Q8_0 or Q6_K** when output fidelity to the reference matters, and Q4_K when size is the priority. ## Validation against the original model The GGUF port was checked against the **upstream SaruLab TorchScript** modules (`feature_extractor_cpu.pt` + `decoder_cpu.pt`) on the JFK clip: | Stage | Metric | Result | | --- | --- | --- | | Predictor handoff (w2v-BERT) | cosine, our F16 vs upstream F32 | **0.998** | | End-to-end 48 kHz output | Pearson r | 0.945 | | ASR round-trip (Whisper base.en) | transcription | **identical** | The predictor reproduces the original almost exactly (0.998); the end-to-end drop to 0.945 is the continuous-DAC decoder amplifying F16 weight-rounding through its Snake activations, not a port error — the restored speech is functionally identical (same transcription). The reference intermediates used for this check are published here as `sidon-ref.gguf` (`input_16k`, `predictor_feats`, `output_48k`) with `sidon-ref-48k.wav`; regenerate with `tools/reference_backends/sidon_ref_dump.py` and re-run our side with `CRISPASR_SIDON_DUMP_HANDOFF=`. ## CrispASR usage ```bash crispasr --s2s -m sidon-v0.1-q8_0.gguf -f input.wav --s2s-output restored-48khz.wav ``` CrispASR auto-detects the `sidon` architecture from GGUF metadata. The S2S interface processes a complete clip and returns a complete restored clip (not streaming). GPU: `--gpu-backend cuda` / `--gpu-backend vulkan`. **Long inputs:** the predictor uses O(T²) self-attention (~50 feature frames/sec). Inputs are capped at ~60 s (3000 frames) by default and fail cleanly past that; raise `CRISPASR_SIDON_MAX_FRAMES` if you have the memory. ## Conversion ```bash # F16 from upstream weights: python models/convert-sidon-to-gguf.py --base w2v-bert-2.0 --sidon sidon_raw_weight --out sidon-v0.1-f16.gguf # quants: crispasr-quantize sidon-v0.1-f16.gguf sidon-v0.1-q4_k.gguf q4_k ```