Skip to content

Commit 2734a8e

Browse files
committed
Prepared to work with SillyTavern
1 parent 65738b3 commit 2734a8e

File tree

3 files changed

+34
-3
lines changed

3 files changed

+34
-3
lines changed

xtts_api_server/__main__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import os
44

55
parser = ArgumentParser(description="Run the Uvicorn server.")
6-
parser.add_argument("-hs", "--host", default="0.0.0.0", help="Host to bind")
6+
parser.add_argument("-hs", "--host", default="localhost", help="Host to bind")
77
parser.add_argument("-p", "--port", default=8020, type=int, help="Port to bind")
88
parser.add_argument("-sf", "--speaker_folder", default="speakers/", type=str, help="The folder where you get the samples for tts")
99
parser.add_argument("-o", "--output", default="output/", type=str, help="Output folder")
@@ -12,6 +12,7 @@
1212

1313
os.environ['OUTPUT'] = args.output # Set environment variable for output folder.
1414
os.environ['SPEAKER'] = args.speaker_folder # Set environment variable for speaker folder.
15+
os.environ['BASE_URL'] = "http://" + args.host + ":" + str(args.port) # Set environment variable for base url."
1516

1617
from xtts_api_server.server import app
1718

xtts_api_server/server.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
# Default Folders , you can change them via API
1818
OUTPUT_FOLDER = os.getenv('OUTPUT', 'output')
1919
SPEAKER_FOLDER = os.getenv('SPEAKER', 'speakers')
20+
BASE_URL = os.getenv('BASE_URL', '127.0.0.1:8020')
2021

2122
# Create an instance of the TTSWrapper class and server
2223
app = FastAPI()
@@ -49,10 +50,15 @@ class SynthesisFileRequest(BaseModel):
4950
language: str
5051
file_name_or_path: str
5152

52-
@app.get("/speakers/")
53+
@app.get("/speakers_default/")
5354
def get_speakers():
5455
speakers = XTTS.get_speakers()
55-
return {"speakers": speakers}
56+
return speakers
57+
58+
@app.get("/speakers/")
59+
def get_speakers():
60+
speakers = XTTS.get_speakers_special()
61+
return speakers
5662

5763
@app.get("/languages/")
5864
def get_languages():
@@ -65,6 +71,14 @@ def get_folders():
6571
output_folder = XTTS.output_folder
6672
return {"speaker_folder": speaker_folder, "output_folder": output_folder}
6773

74+
@app.get("/sample/{file_name}")
75+
def get_sample(file_name: str):
76+
file_path = os.path.join(XTTS.speaker_folder, file_name)
77+
if os.path.isfile(file_path):
78+
return FileResponse(file_path, media_type="audio/wav")
79+
else:
80+
raise HTTPException(status_code=404, detail="File not found")
81+
6882
@app.post("/set_output/")
6983
def set_output(output_req: OutputFolderRequest):
7084
try:

xtts_api_server/tts_funcs.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,22 @@ def get_speakers(self):
8080
speakers_list = [os.path.splitext(f)[0] for f in os.listdir(self.speaker_folder) if f.endswith('.wav')]
8181
return speakers_list
8282

83+
def get_speakers_special(self):
84+
speakers_list = []
85+
BASE_URL = os.getenv('BASE_URL', '127.0.0.1:8020')
86+
87+
for file in os.listdir(self.speaker_folder):
88+
if file.endswith('.wav'):
89+
speaker_name = os.path.splitext(file)[0]
90+
preview_url = f"{BASE_URL}/sample/{file}"
91+
speaker = {
92+
'name': speaker_name,
93+
'voice_id': speaker_name,
94+
'preview_url': preview_url
95+
}
96+
speakers_list.append(speaker)
97+
return speakers_list
98+
8399
def list_languages(self):
84100
return reversed_supported_languages
85101

0 commit comments

Comments
 (0)