Model reference · open weights

xcodec-hubert-librispeech

Embeddings hf-audio Embeddings 1 build Open weights 1k dl/mo

xcodec-hubert-librispeech is an open-weight embedding model from hf-audio. xcodec-hubert-librispeech (FP32) weighs 355 MB; the smallest configuration that runs it is RTX 3060 12 GB.

For self-hosting, compare this build's requirements below with the GPU you plan to rent.

  • xcodec-hubert-librispeech is a feature-extraction model developed by hf-audio that functions as a neural audio codec for speech.
  • It is part of the X-Codec family and utilizes the facebook/hubert-base-ls960 semantic model, having been trained on the Librispeech dataset.
  • The model contains 177 million parameters and supports encoding and decoding at bandwidths ranging from 0.5 to 4 kbps.
  • It is released under the cc-by-4.0 licence.

Summary of the hf-audio/xcodec-hubert-librispeech model card, 2026-10-01

What it is

Released byhf-audio
Released2025-08-18
Parameters177M
VRAM355 MB for the weights

What it runs on

Memory and cards for xcodec-hubert-librispeech (FP32)

355 MBweights, file size
1.1 GBruntime overhead
CardRunsMemory
RTX 3060 12 GBfits11.6 GB
RTX 4060 Ti 16 GBfits15.4 GB
RTX 3090 24 GBfits23.4 GB
RTX 4090 24 GBfits23.4 GB
RTX 5090 32 GBfits31.0 GB
L40S 48 GBfits44.0 GB
A100 80 GBfits78.2 GB
H100 80 GBfits78.1 GB
RTX PRO 6000 Blackwell 96 GBfits93.8 GB
DGX Spark (GB10) 128 GB unifiedfits107 GB
H200 141 GBfits138 GB
B200 180 GBfits176 GB

From the model card

What hf-audio says about xcodec-hubert-librispeech

Read the model card

This codec is part of the X-Codec family of codecs as shown below:

Model checkpointSemantic ModelDomainTraining Data
xcodec-hubert-librispeech (this model)facebook/hubert-base-ls960SpeechLibrispeech
xcodec-wavlm-mlsmicrosoft/wavlm-base-plusSpeechMLS English
xcodec-wavlm-more-datamicrosoft/wavlm-base-plusSpeechMLS English + Internal data
xcodec-hubert-generalZhenYe234/hubert_base_general_audioGeneral audio200k hours internal data
xcodec-hubert-general-balancedZhenYe234/hubert_base_general_audioGeneral audioMore balanced data

Original model is xcodec_hubert_librispeech from this table.

Example usage

The example below applies the codec over all possible bandwidths.


from datasets import Audio, load_dataset
from transformers import XcodecModel, AutoFeatureExtractor
import torch
import os
from scipy.io.wavfile import write as write_wav

model_id = "hf-audio/xcodec-hubert-librispeech"
torch_device = "cuda" if torch.cuda.is_available() else "cpu"
available_bandwidths = [0.5, 1, 1.5, 2, 4]

# load model
model = XcodecModel.from_pretrained(model_id, device_map=torch_device)
feature_extractor = AutoFeatureExtractor.from_pretrained(model_id)

# load audio example
librispeech_dummy = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
librispeech_dummy = librispeech_dummy.cast_column(
    "audio", Audio(sampling_rate=feature_extractor.sampling_rate)
)
audio_array = librispeech_dummy[0]["audio"]["array"]
inputs = feature_extractor(
    raw_audio=audio_array, sampling_rate=feature_extractor.sampling_rate, return_tensors="pt"
).to(model.device)
audio = inputs["input_values"]

for bandwidth in available_bandwidths:
    print(f"Encoding with bandwidth: {bandwidth} kbps")
    # encode
    audio_codes = model.encode(audio, bandwidth=bandwidth, return_dict=False)
    print("Codebook shape", audio_codes.shape)
    # 0.5 kbps -> torch.Size([1, 1, 293])
    # 1.0 kbps -> torch.Size([1, 2, 293])
    # 1.5 kbps -> torch.Size([1, 3, 293])
    # 2.0 kbps -> torch.Size([1, 4, 293])
    # 4.0 kbps -> torch.Size([1, 8, 293])

    # decode
    input_values_dec = model.decode(audio_codes).audio_values

    # save audio to file
    write_wav(f"{os.path.basename(model_id)}_{bandwidth}.wav", feature_extractor.sampling_rate, input_values_dec.squeeze().detach().cpu().numpy())

write_wav("original.wav", feature_extractor.sampling_rate, audio.squeeze().detach().cpu().numpy())

🔊 Audio Samples

Original

0.5 kbps

1 kbps

1.5 kbps

2 kbps

4 kbps

Batch example


from datasets import Audio, load_dataset
from transformers import XcodecModel, AutoFeatureExtractor
import torch

model_id = "hf-audio/xcodec-hubert-librispeech"
torch_device = "cuda" if torch.cuda.is_available() else "cpu"
bandwidth = 4
n_audio = 2  # number of audio samples to process in a batch

# load model
model = XcodecModel.from_pretrained(model_id, device_map=torch_device)
feature_extractor = AutoFeatureExtractor.from_pretrained(model_id)

# load audio example
ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
ds = ds.cast_column(
    "audio", Audio(sampling_rate=feature_extractor.sampling_rate)
)
audio = [audio_sample["array"] for audio_sample in ds[-n_audio:]["audio"]]
print(f"Input audio shape: {[_sample.shape for _sample in audio]}")
# Input audio shape: [(113840,), (71680,)]
inputs = feature_extractor(
    raw_audio=audio, sampling_rate=feature_extractor.sampling_rate, return_tensors="pt"
).to(model.device)
audio = inputs["input_values"]
print(f"Padded audio shape: {audio.shape}")
# Padded audio shape: torch.Size([2, 1, 113920])

# encode
audio_codes = model.encode(audio, bandwidth=bandwidth, return_dict=False)
print("Codebook shape", audio_codes.shape)
# Codebook shape torch.Size([2, 8, 356])

# decode
decoded_audio = model.decode(audio_codes).audio_values
print("Decoded audio shape", decoded_audio.shape)
# Decoded audio shape torch.Size([2, 1, 113920])

Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.

© 2026 AxForge · EU-hosted AI infrastructure Pricing Docs Trust Privacy Terms