BCL_TTS

A from-scratch, non-autoregressive flow-matching text-to-speech model with zero-shot voice cloning from a short reference clip. Not a fine-tune or wrapper of an existing TTS model (e.g. F5-TTS) - its text encoder, internal aligner, speaker encoder, and flow-matching decoder are all trained from scratch. See "Architecture" below for what makes it a distinct design rather than a copy of an existing one.

Status: no trained checkpoint in this repo yet. This upload is the architecture code, config, and model card only - checkpoint/ is a placeholder. Training is in progress separately; a .pt checkpoint will be added as a follow-up commit once available. inference_example.py will raise a clear FileNotFoundError until then.

Repo contents

β”œβ”€β”€ README.md              - this file (also the HF model card, via the YAML header above)
β”œβ”€β”€ config.yaml              - full model + training hyperparameters
β”œβ”€β”€ checkpoint/              - trained weights go here (bcl_tts_latest.pt / bcl_tts_final.pt) - not present yet
β”œβ”€β”€ bcl_tts/                 - the model's source code (required to load the checkpoint -
β”‚                              this is a custom architecture, not built on a
β”‚                              standard library that ships it for you)
β”œβ”€β”€ inference_example.py     - minimal load-and-synthesize script/notebook helper
└── requirements-minimal.txt - pyyaml + vocos (torch/torchaudio assumed already installed)

Quickstart

pip install huggingface_hub pyyaml vocos torch torchaudio
huggingface-cli download kkmanikandan/bcl-tts --local-dir ./bcl-tts
import sys
sys.path.insert(0, "./bcl-tts")

from inference_example import load_model, synthesize

model, model_config, trained_steps = load_model()  # once checkpoint/ has a .pt file
synthesize(
    model, model_config,
    text="Hello, this is BCL TTS.",
    ref_audio_path="/path/to/a/reference_clip.wav",
    output_path="output.wav",
)

Architecture

BCL_TTS differs from F5-TTS-style flow-matching models in three deliberate ways:

  1. Explicit alignment, not implicit. Many flow-matching TTS models pad text to the target mel length and let the model discover alignment as a side effect of denoising. BCL_TTS instead learns alignment itself via Glow-TTS-style Monotonic Alignment Search (bcl_tts/alignment.py) and trains an explicit duration predictor from it - no forced-aligner tool needed.
  2. Cross-attention conditioning. The flow-matching decoder (bcl_tts/modules/flow_decoder.py) attends to length-regulated text features via cross-attention, rather than concatenating text and noisy audio into one sequence.
  3. Global AdaLN-Zero speaker conditioning, from a single pooled reference-voice embedding (bcl_tts/modules/speaker_encoder.py), rather than a raw reference-mel segment prepended to the flow input.

Mel-spectrograms are converted to waveform by Vocos, a separate pretrained vocoder (not part of BCL_TTS's own weights, loaded via bcl_tts/vocoder.py)

  • exactly as most flow-matching TTS models delegate that final step.

Training status

Trained with scripts/train_bcl_tts.py (Monotonic-Alignment-Search-derived duration targets + conditional flow matching loss) on a single-speaker corpus, on a Colab T4 GPU. Once a checkpoint is uploaded here, inference_example.py's load_model() prints the exact number of steps it was trained for - check that output for the actual training progress of whichever checkpoint is present, since it may be an intermediate (not fully converged) snapshot.

License / provenance

BCL_TTS's own code and weights are released under Apache-2.0 (see the license field above - change it any time from the repo settings on Hugging Face if you'd prefer something else). Vocos (the vocoder used at inference time, not bundled here - loaded from Hugging Face at runtime) has its own license; check charactr/vocos-mel-24khz on Hugging Face if you plan to redistribute audio generated with it.

Downloads last month
10
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support