Conversation
Updated installation instructions and formatting.
There was a problem hiding this comment.
Pull request overview
This PR updates the project to version 25.12.20 and refactors the TTS engine architecture. The primary purpose is to implement a registry pattern for TTS engines, replacing the previous conditional instantiation logic with a cleaner, more maintainable approach.
Key changes:
- Introduced
TTSRegistrybase class enabling automatic TTS engine registration - Migrated TTS engine implementations from
coqui.pyto dedicated engine-specific modules - Enhanced shell script robustness with improved error handling and variable initialization
Reviewed changes
Copilot reviewed 15 out of 16 changed files in this pull request and generated 23 comments.
Show a summary per file
| File | Description |
|---|---|
| lib/classes/tts_registry.py | New registry base class for automatic TTS engine registration |
| lib/classes/tts_manager.py | Refactored to use registry pattern instead of conditional logic |
| lib/classes/tts_engines/*.py | New dedicated modules for each TTS engine (XTTSv2, Bark, Vits, etc.) |
| lib/classes/tts_engines/coqui.py | Removed deprecated deepspeed parameter and fixed typo in error message |
| lib/classes/tts_engines/common/utils.py | Added load_xtts_builtin_list function for speaker data loading |
| lib/models.py | Changed xtts_builtin_speakers_list from list to dict type |
| ebook2audiobook.sh | Enhanced with safer variable handling and improved portability |
| VERSION.txt | Version bump to 25.12.20 |
| README.md | Updated language count and reformatted installation instructions |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| waveform = resampler(waveform) | ||
| wav_tensor = waveform.squeeze(0) | ||
| wav_numpy = wav_tensor.cpu().numpy() | ||
| os.path.join(self.session['process_dir'], 'tmp') |
There was a problem hiding this comment.
The result of os.path.join is not assigned to any variable. This line computes a path but does nothing with it, causing tmp_dir on line 309 to be undefined, which will result in a NameError.
| waveform = resampler(waveform) | ||
| wav_tensor = waveform.squeeze(0) | ||
| wav_numpy = wav_tensor.cpu().numpy() | ||
| os.path.join(self.session['process_dir'], 'tmp') |
There was a problem hiding this comment.
The result of os.path.join is not assigned to any variable. This line computes a path but does nothing with it, causing tmp_dir on line 319 to be undefined, which will result in a NameError.
| waveform = resampler(waveform) | ||
| wav_tensor = waveform.squeeze(0) | ||
| wav_numpy = wav_tensor.cpu().numpy() | ||
| os.path.join(self.session['process_dir'], 'tmp') |
There was a problem hiding this comment.
The result of os.path.join is not assigned to any variable. This line computes a path but does nothing with it, causing tmp_dir on line 318 to be undefined, which will result in a NameError.
| waveform = resampler(waveform) | ||
| wav_tensor = waveform.squeeze(0) | ||
| wav_numpy = wav_tensor.cpu().numpy() | ||
| os.path.join(self.session['process_dir'], 'tmp') |
There was a problem hiding this comment.
The result of os.path.join is not assigned to any variable. This line computes a path but does nothing with it, causing tmp_dir on line 336 to be undefined, which will result in a NameError.
| waveform = resampler(waveform) | ||
| wav_tensor = waveform.squeeze(0) | ||
| wav_numpy = wav_tensor.cpu().numpy() | ||
| os.path.join(self.session['process_dir'], 'tmp') |
There was a problem hiding this comment.
The result of os.path.join is not assigned to any variable. This line computes a path but does nothing with it, causing tmp_dir on line 310 to be undefined, which will result in a NameError.
| print(error) | ||
| return False | ||
| else: | ||
| error = f"audio_sentence not valide" |
There was a problem hiding this comment.
Corrected spelling of 'valide' to 'valid'.
| error = f"audio_sentence not valide" | |
| error = f"audio_sentence not valid" |
| print(error) | ||
| return False | ||
| else: | ||
| error = f"audio_sentence not valide" |
There was a problem hiding this comment.
Corrected spelling of 'valide' to 'valid'.
| error = f"audio_sentence not valide" | |
| error = f"audio_sentence not valid" |
| print(error) | ||
| return False | ||
| else: | ||
| error = f"audio_sentence not valide" |
There was a problem hiding this comment.
Corrected spelling of 'valide' to 'valid'.
| error = f"audio_sentence not valide" | |
| error = f"audio_sentence not valid" |
| print(error) | ||
| return False | ||
| else: | ||
| error = f"audio_sentence not valide" |
There was a problem hiding this comment.
Corrected spelling of 'valide' to 'valid'.
| error = f"audio_sentence not valide" | |
| error = f"audio_sentence not valid" |
| print(error) | ||
| return False | ||
| else: | ||
| error = f"audio_sentence not valide" |
There was a problem hiding this comment.
Corrected spelling of 'valide' to 'valid'.
| error = f"audio_sentence not valide" | |
| error = f"audio_sentence not valid" |
No description provided.