|
4 | 4 |
|
5 | 5 | import torch |
6 | 6 | import torch.nn.functional as F |
7 | | -from huggingface_hub import hf_hub_download |
8 | | -import warnings |
9 | | - |
10 | | -# Use librosa fallback for Python 3.13 compatibility |
11 | | -from utils.audio.librosa_fallback import safe_load, safe_resample |
12 | | -# Import safetensors for multilanguage model support |
13 | | -from safetensors.torch import load_file |
| 7 | +from huggingface_hub import hf_hub_download |
| 8 | +import warnings |
| 9 | + |
| 10 | +# Use librosa fallback for Python 3.13 compatibility |
| 11 | +from utils.audio.librosa_fallback import safe_load, safe_resample |
| 12 | +from .perth_loader import create_perth_watermarker |
| 13 | +# Import safetensors for multilanguage model support |
| 14 | +from safetensors.torch import load_file |
14 | 15 |
|
15 | 16 | # Import folder_paths for model directory detection |
16 | 17 | try: |
17 | 18 | import folder_paths |
18 | 19 | except ImportError: |
19 | 20 | folder_paths = None |
20 | 21 |
|
21 | | -# Import perth with warnings disabled and graceful fallback |
22 | | -try: |
23 | | - with warnings.catch_warnings(): |
24 | | - warnings.simplefilter("ignore") |
25 | | - import perth |
26 | | - PERTH_AVAILABLE = True |
27 | | -except ImportError: |
28 | | - perth = None |
29 | | - PERTH_AVAILABLE = False |
30 | | - |
31 | | -from .models.t3 import T3 |
32 | | -from .models.s3tokenizer import S3_SR, drop_invalid_tokens |
33 | | -from .models.s3gen import S3GEN_SR, S3Gen |
| 22 | +from .models.t3 import T3 |
| 23 | +from .models.s3tokenizer import S3_SR, drop_invalid_tokens |
| 24 | +from .models.s3gen import S3GEN_SR, S3Gen |
34 | 25 | from .models.tokenizers import EnTokenizer |
35 | 26 | from .models.voice_encoder import VoiceEncoder |
36 | 27 | from .models.t3.modules.cond_enc import T3Cond |
@@ -197,20 +188,16 @@ def to(self, device): |
197 | 188 |
|
198 | 189 | return self |
199 | 190 |
|
200 | | - def _init_watermarker_if_needed(self): |
201 | | - """Initialize watermarker on first use if enabled""" |
202 | | - if self.enable_watermarking and not self._watermarker_init_attempted: |
203 | | - self._watermarker_init_attempted = True |
204 | | - try: |
205 | | - with warnings.catch_warnings(): |
206 | | - warnings.simplefilter("ignore") |
207 | | - self.watermarker = perth.PerthImplicitWatermarker() |
208 | | - if self.watermarker is None: |
209 | | - raise ValueError("PerthImplicitWatermarker returned None") |
210 | | - except Exception as e: |
211 | | - print(f"❌ Failed to initialize watermarker: {e}") |
212 | | - self.watermarker = None |
213 | | - self.enable_watermarking = False |
| 191 | + def _init_watermarker_if_needed(self): |
| 192 | + """Initialize watermarker on first use if enabled""" |
| 193 | + if self.enable_watermarking and not self._watermarker_init_attempted: |
| 194 | + self._watermarker_init_attempted = True |
| 195 | + try: |
| 196 | + self.watermarker = create_perth_watermarker() |
| 197 | + except Exception as e: |
| 198 | + print(f"❌ Failed to initialize watermarker: {e}") |
| 199 | + self.watermarker = None |
| 200 | + self.enable_watermarking = False |
214 | 201 |
|
215 | 202 | @classmethod |
216 | 203 | def from_local(cls, ckpt_dir, device, language=None) -> 'ChatterboxTTS': |
|
0 commit comments