Instructions to use SPRINGLab/SPRING_F5 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use SPRINGLab/SPRING_F5 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-to-speech", model="SPRINGLab/SPRING_F5", trust_remote_code=True)# Load model directly from transformers import SPRING_F5 model = SPRING_F5.from_pretrained("SPRINGLab/SPRING_F5", trust_remote_code=True, device_map="auto") - Notebooks
- Google Colab
- Kaggle
| set -e | |
| export PYTHONWARNINGS="ignore::UserWarning,ignore::FutureWarning" | |
| # Configuration parameters | |
| MODEL_NAME="F5TTS_v1_Base" | |
| SEEDS=(0 1 2) | |
| CKPTSTEPS=(1250000) | |
| TASKS=("seedtts_test_zh" "seedtts_test_en" "ls_pc_test_clean") | |
| LS_TEST_CLEAN_PATH="data/LibriSpeech/test-clean" | |
| GPUS="[0,1,2,3,4,5,6,7]" | |
| OFFLINE_MODE=false | |
| # Parse arguments | |
| if [ $OFFLINE_MODE = true ]; then | |
| LOCAL="--local" | |
| else | |
| LOCAL="" | |
| fi | |
| INFER_ONLY=false | |
| while [[ $# -gt 0 ]]; do | |
| case $1 in | |
| --infer-only) | |
| INFER_ONLY=true | |
| shift | |
| ;; | |
| *) | |
| echo "======== Unknown parameter: $1" | |
| exit 1 | |
| ;; | |
| esac | |
| done | |
| echo "======== Starting F5-TTS batch evaluation task..." | |
| if [ "$INFER_ONLY" = true ]; then | |
| echo "======== Mode: Execute infer tasks only" | |
| else | |
| echo "======== Mode: Execute full pipeline (infer + eval)" | |
| fi | |
| # Function: Execute eval tasks | |
| execute_eval_tasks() { | |
| local ckptstep=$1 | |
| local seed=$2 | |
| local task_name=$3 | |
| local gen_wav_dir="results/${MODEL_NAME}_${ckptstep}/${task_name}/seed${seed}_euler_nfe32_vocos_ss-1_cfg2.0_speed1.0" | |
| echo ">>>>>>>> Starting eval task: ckptstep=${ckptstep}, seed=${seed}, task=${task_name}" | |
| case $task_name in | |
| "seedtts_test_zh") | |
| python src/f5_tts/eval/eval_seedtts_testset.py -e wer -l zh -g "$gen_wav_dir" -n "$GPUS" $LOCAL | |
| python src/f5_tts/eval/eval_seedtts_testset.py -e sim -l zh -g "$gen_wav_dir" -n "$GPUS" $LOCAL | |
| python src/f5_tts/eval/eval_utmos.py --audio_dir "$gen_wav_dir" | |
| ;; | |
| "seedtts_test_en") | |
| python src/f5_tts/eval/eval_seedtts_testset.py -e wer -l en -g "$gen_wav_dir" -n "$GPUS" $LOCAL | |
| python src/f5_tts/eval/eval_seedtts_testset.py -e sim -l en -g "$gen_wav_dir" -n "$GPUS" $LOCAL | |
| python src/f5_tts/eval/eval_utmos.py --audio_dir "$gen_wav_dir" | |
| ;; | |
| "ls_pc_test_clean") | |
| python src/f5_tts/eval/eval_librispeech_test_clean.py -e wer -g "$gen_wav_dir" -n "$GPUS" -p "$LS_TEST_CLEAN_PATH" $LOCAL | |
| python src/f5_tts/eval/eval_librispeech_test_clean.py -e sim -g "$gen_wav_dir" -n "$GPUS" -p "$LS_TEST_CLEAN_PATH" $LOCAL | |
| python src/f5_tts/eval/eval_utmos.py --audio_dir "$gen_wav_dir" | |
| ;; | |
| esac | |
| echo ">>>>>>>> Completed eval task: ckptstep=${ckptstep}, seed=${seed}, task=${task_name}" | |
| } | |
| # Main execution loop | |
| for ckptstep in "${CKPTSTEPS[@]}"; do | |
| echo "======== Processing ckptstep: ${ckptstep}" | |
| for seed in "${SEEDS[@]}"; do | |
| echo "-------- Processing seed: ${seed}" | |
| # Store eval task PIDs for current seed (if not infer-only mode) | |
| if [ "$INFER_ONLY" = false ]; then | |
| declare -a eval_pids | |
| fi | |
| # Execute each infer task sequentially | |
| for task in "${TASKS[@]}"; do | |
| echo ">>>>>>>> Executing infer task: accelerate launch src/f5_tts/eval/eval_infer_batch.py -s ${seed} -n \"${MODEL_NAME}\" -t \"${task}\" -c ${ckptstep} $LOCAL" | |
| # Execute infer task (foreground execution, wait for completion) | |
| accelerate launch src/f5_tts/eval/eval_infer_batch.py -s ${seed} -n "${MODEL_NAME}" -t "${task}" -c ${ckptstep} -p "${LS_TEST_CLEAN_PATH}" $LOCAL | |
| # If not infer-only mode, launch corresponding eval task | |
| if [ "$INFER_ONLY" = false ]; then | |
| # Launch corresponding eval task (background execution, non-blocking for next infer) | |
| execute_eval_tasks $ckptstep $seed $task & | |
| eval_pids+=($!) | |
| fi | |
| done | |
| # If not infer-only mode, wait for all eval tasks of current seed to complete | |
| if [ "$INFER_ONLY" = false ]; then | |
| echo ">>>>>>>> All infer tasks for seed ${seed} completed, waiting for corresponding eval tasks to finish..." | |
| for pid in "${eval_pids[@]}"; do | |
| wait $pid | |
| done | |
| unset eval_pids # Clean up array | |
| fi | |
| echo "-------- All eval tasks for seed ${seed} completed" | |
| done | |
| echo "======== Completed ckptstep: ${ckptstep}" | |
| echo | |
| done | |
| echo "======== All tasks completed!" |