J Z commited on
Update app.py
Browse files
app.py
CHANGED
|
@@ -56,7 +56,7 @@ async def init_tts():
|
|
| 56 |
logger.info(f"[{_ts()}] [STARTUP] Initializing TTS...")
|
| 57 |
t0 = _time.time()
|
| 58 |
try:
|
| 59 |
-
import
|
| 60 |
logger.info(f"[{_ts()}] [STARTUP] TTS module imported OK")
|
| 61 |
tts_module.initialize()
|
| 62 |
logger.info(f"[{_ts()}] [STARTUP] ✓ TTS ready in {_time.time()-t0:.2f}s")
|
|
@@ -74,7 +74,7 @@ async def generate_greeting():
|
|
| 74 |
t0 = _time.time()
|
| 75 |
|
| 76 |
try:
|
| 77 |
-
from
|
| 78 |
t_tts = _time.time()
|
| 79 |
audio_path = generate_audio(greeting_text)
|
| 80 |
t_tts_done = _time.time()
|
|
@@ -186,7 +186,7 @@ async def download_videos():
|
|
| 186 |
try:
|
| 187 |
api = HfApi()
|
| 188 |
files = api.list_repo_files(repo_id=REPO_ID, repo_type="space")
|
| 189 |
-
vids = [f for f in files if f.startswith("app/
|
| 190 |
logger.info(f"Found {len(vids)} video files")
|
| 191 |
for vf in vids:
|
| 192 |
dest = VIDEOS_DIR / Path(vf).name
|
|
@@ -242,8 +242,9 @@ def split_sentences(text):
|
|
| 242 |
parts = re.split(r'(?<=[.!?])\s+', text)
|
| 243 |
parts = [s.strip() for s in parts if s.strip()]
|
| 244 |
|
| 245 |
-
# Merge
|
| 246 |
-
|
|
|
|
| 247 |
merged = []
|
| 248 |
buffer = ""
|
| 249 |
for p in parts:
|
|
@@ -377,7 +378,7 @@ def _generate_chunk(sentence, idx, total):
|
|
| 377 |
# Both TTS (Orpheus) and FLOAT use GPU — serialize with lock
|
| 378 |
with _gpu_lock:
|
| 379 |
# 1. TTS (local Orpheus - GPU)
|
| 380 |
-
from
|
| 381 |
t_tts_start = _time.time()
|
| 382 |
audio_path = generate_audio(sentence)
|
| 383 |
t_tts_end = _time.time()
|
|
|
|
| 56 |
logger.info(f"[{_ts()}] [STARTUP] Initializing TTS...")
|
| 57 |
t0 = _time.time()
|
| 58 |
try:
|
| 59 |
+
import orpheus_tts as tts_module
|
| 60 |
logger.info(f"[{_ts()}] [STARTUP] TTS module imported OK")
|
| 61 |
tts_module.initialize()
|
| 62 |
logger.info(f"[{_ts()}] [STARTUP] ✓ TTS ready in {_time.time()-t0:.2f}s")
|
|
|
|
| 74 |
t0 = _time.time()
|
| 75 |
|
| 76 |
try:
|
| 77 |
+
from orpheus_tts import generate_audio
|
| 78 |
t_tts = _time.time()
|
| 79 |
audio_path = generate_audio(greeting_text)
|
| 80 |
t_tts_done = _time.time()
|
|
|
|
| 186 |
try:
|
| 187 |
api = HfApi()
|
| 188 |
files = api.list_repo_files(repo_id=REPO_ID, repo_type="space")
|
| 189 |
+
vids = [f for f in files if f.startswith("app/videos/") and f.endswith((".mp4",".webm",".mkv",".mov"))]
|
| 190 |
logger.info(f"Found {len(vids)} video files")
|
| 191 |
for vf in vids:
|
| 192 |
dest = VIDEOS_DIR / Path(vf).name
|
|
|
|
| 242 |
parts = re.split(r'(?<=[.!?])\s+', text)
|
| 243 |
parts = [s.strip() for s in parts if s.strip()]
|
| 244 |
|
| 245 |
+
# Merge sentences into longer chunks (minimum ~25 words per chunk)
|
| 246 |
+
# Voice cloning works much better with longer text context
|
| 247 |
+
MIN_WORDS = 25
|
| 248 |
merged = []
|
| 249 |
buffer = ""
|
| 250 |
for p in parts:
|
|
|
|
| 378 |
# Both TTS (Orpheus) and FLOAT use GPU — serialize with lock
|
| 379 |
with _gpu_lock:
|
| 380 |
# 1. TTS (local Orpheus - GPU)
|
| 381 |
+
from orpheus_tts import generate_audio
|
| 382 |
t_tts_start = _time.time()
|
| 383 |
audio_path = generate_audio(sentence)
|
| 384 |
t_tts_end = _time.time()
|