quick-convert is a modular framework for speech privacy research. It provides reusable components for datasets, feature extraction, preprocessing, training, and evaluation, allowing new experiments to be assembled through Hydra configuration rather than extensive code changes.
📚 Documentation: https://benluks.github.io/quick-convert/
The framework is designed around composition. Datasets, resources, models, feature extractors, trainers, and pipelines are all interchangeable, making it straightforward to build new workflows while reusing existing infrastructure.
Many components rely on optional dependencies. These are grouped into extras so that only the libraries required for a particular workflow need to be installed.
| Extra | Description |
|---|---|
w2vbert | W2V-BERT feature extraction |
whisper | Whisper ASR model |
jiwer | JIWER implementation of WER metric |
chatterbox | Chatterbox decoder. |
lightning | pytorch-lightning, and associated tools for training with lightning. |
emotion-compensation | To run this one specific emotion-compensation pipeline (needs Python 3.9. Total nightmare) |
espnet-wavlm-joint | ESPnet WavLM implementation |
pyannote | For the pyannote WeSpeaker implementation |
dac | Descript Audio Codec support |
nac | Neural audio codec anonymizer. Relies on Coqui TTS, which is deprecated. Also a total nightmare. |
web | Web interface components. I think she's currently broken. |
Normally, when you import a module, you'll get a ModuleNotFoundError if the requisite dependencies are missing. Check out pyproject.toml to see which extras are needed to run whatever it is you're trying to run.
For example:
uv sync --extra w2vbert --extra module-training
Note
Some extras depend on conflicting versions of third-party libraries and therefore cannot be installed together. See
pyproject.tomlfor the defined compatibility groups. I can't promise it's up-to-date. I didn't fully understand how conflicts worked back when I started writing it. Currently in the process of fixing it, and writing tests.
The recommended introduction to the framework is the Quickstart guide.
Starting from a downloaded LibriSpeech dataset, it walks through:
Along the way, it introduces the core abstractions used throughout the project:
quick-convert is organized into three conceptual layers:
Pipelines │ ▼ Systems │ ▼ Components
Pipelines define complete executable workflows. These can be found under quick_convert/pipelines/{[PIPELINE_NAME]/pipeline.py,[PIPLEINE_NAME].py}.
Examples include:
Model training pipelines, which is agnostic to the task (system) and architecture (components); Evaluation which is similarly agnostic; Anonymization a dataset; Precomputing features (although maybe this should be under an "inference" pipeline, we'll see);
A pipeline coordinates data loading, systems, output handling, and runtime configuration.
Systems implement a complete task-level capability. They're found under quick_convert/pipelines/{[PIPELINE_NAME]/[SYSTEM_NAME]/...}. I put ASR in a dedicated systems folder quick_convert/systems/asr. That's the plan for the future. I just haven't done the refactoring yet.
Examples include:
ASR system, invariant to the exact architecture; Automatic Speaker Verification (ASV); Anonymization/Voice Converstion.
A system may combine multiple models, and, frankly, a model may utilize multiple systems.
Components are the reusable building blocks from which systems are constructed. This are analogous to pytorch nn.Modules, and are similarly recursive.
Examples include:
encoders and decoders; self-supervised speech models; neural network layers; losses; feature extractors; x-vector extractors
This separation allows low-level components to be reused across different systems, while pipelines remain focused on how those systems are trained, evaluated, or applied.
Configuration │ ▼ Pipeline │ ▼ System │ ▼ Components │ ▼ Output
Most experiments in quick-convert are created by selecting a pipeline, configuring a system, and composing its components through Hydra.
Contributions are welcome. Bug reports, feature requests, documentation improvements, and pull requests are all appreciated.
Python
100.0%
quick-convert is a modular framework for speech privacy research. It provides reusable components for datasets, feature extraction, preprocessing, training, and evaluation, allowing new experiments to be assembled through Hydra configuration rather than extensive code changes.
📚 Documentation: https://benluks.github.io/quick-convert/
The framework is designed around composition. Datasets, resources, models, feature extractors, trainers, and pipelines are all interchangeable, making it straightforward to build new workflows while reusing existing infrastructure.
Many components rely on optional dependencies. These are grouped into extras so that only the libraries required for a particular workflow need to be installed.
| Extra | Description |
|---|---|
w2vbert | W2V-BERT feature extraction |
whisper | Whisper ASR model |
jiwer | JIWER implementation of WER metric |
chatterbox | Chatterbox decoder. |
lightning | pytorch-lightning, and associated tools for training with lightning. |
emotion-compensation | To run this one specific emotion-compensation pipeline (needs Python 3.9. Total nightmare) |
espnet-wavlm-joint | ESPnet WavLM implementation |
pyannote | For the pyannote WeSpeaker implementation |
dac | Descript Audio Codec support |
nac | Neural audio codec anonymizer. Relies on Coqui TTS, which is deprecated. Also a total nightmare. |
web | Web interface components. I think she's currently broken. |
Normally, when you import a module, you'll get a ModuleNotFoundError if the requisite dependencies are missing. Check out pyproject.toml to see which extras are needed to run whatever it is you're trying to run.
For example:
uv sync --extra w2vbert --extra module-training
Note
Some extras depend on conflicting versions of third-party libraries and therefore cannot be installed together. See
pyproject.tomlfor the defined compatibility groups. I can't promise it's up-to-date. I didn't fully understand how conflicts worked back when I started writing it. Currently in the process of fixing it, and writing tests.
The recommended introduction to the framework is the Quickstart guide.
Starting from a downloaded LibriSpeech dataset, it walks through:
Along the way, it introduces the core abstractions used throughout the project:
quick-convert is organized into three conceptual layers:
Pipelines │ ▼ Systems │ ▼ Components
Pipelines define complete executable workflows. These can be found under quick_convert/pipelines/{[PIPELINE_NAME]/pipeline.py,[PIPLEINE_NAME].py}.
Examples include:
Model training pipelines, which is agnostic to the task (system) and architecture (components); Evaluation which is similarly agnostic; Anonymization a dataset; Precomputing features (although maybe this should be under an "inference" pipeline, we'll see);
A pipeline coordinates data loading, systems, output handling, and runtime configuration.
Systems implement a complete task-level capability. They're found under quick_convert/pipelines/{[PIPELINE_NAME]/[SYSTEM_NAME]/...}. I put ASR in a dedicated systems folder quick_convert/systems/asr. That's the plan for the future. I just haven't done the refactoring yet.
Examples include:
ASR system, invariant to the exact architecture; Automatic Speaker Verification (ASV); Anonymization/Voice Converstion.
A system may combine multiple models, and, frankly, a model may utilize multiple systems.
Components are the reusable building blocks from which systems are constructed. This are analogous to pytorch nn.Modules, and are similarly recursive.
Examples include:
encoders and decoders; self-supervised speech models; neural network layers; losses; feature extractors; x-vector extractors
This separation allows low-level components to be reused across different systems, while pipelines remain focused on how those systems are trained, evaluated, or applied.
Configuration │ ▼ Pipeline │ ▼ System │ ▼ Components │ ▼ Output
Most experiments in quick-convert are created by selecting a pipeline, configuring a system, and composing its components through Hydra.
Contributions are welcome. Bug reports, feature requests, documentation improvements, and pull requests are all appreciated.
Python
100.0%