vits-api / app.py
Artrajz's picture
Update: GPT-SoVITS v2 (#186)
e0c636b unverified
Raw
History Blame Contribute Delete
2.89 kB
import logger
import logging
import os.path
import ngrok
from flask import Flask
from flask_apscheduler import APScheduler
from flask_login import LoginManager
from flask_wtf import CSRFProtect
from flask_cors import CORS
from utils.data_utils import clean_folder, check_is_none
from utils.phrases_dict import phrases_dict_init
from module import polyphonic
from tts_app.frontend.views import frontend
from tts_app.voice_api.views import voice_api
from tts_app.auth.views import auth
from tts_app.admin.views import admin
from config import config, BASE_DIR
app = Flask(__name__, template_folder=os.path.join(os.path.dirname(__file__), 'tts_app', 'templates'),
static_folder=os.path.join(os.path.dirname(__file__), 'tts_app', 'static'))
app.config.from_pyfile("config.py")
# app.config.update(config)
phrases_dict_init()
polyphonic.load_polyphonic()
csrf = CSRFProtect(app)
# 禁用tts api请求的CSRF防护
csrf.exempt(voice_api)
CORS(app, resources={r"/voice/*": {"origins": config.http_service.origins}})
if config.system.is_admin_enabled:
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'auth.login'
@login_manager.user_loader
def load_user(user_id):
admin = config.admin
if admin.get_id() == user_id:
return admin
return None
# Initialize scheduler
scheduler = APScheduler()
scheduler.init_app(app)
if config.system.clean_interval_seconds > 0:
scheduler.start()
app.register_blueprint(frontend, url_prefix='/')
app.register_blueprint(voice_api, url_prefix='/voice')
if config.system.is_admin_enabled:
app.register_blueprint(auth, url_prefix=config.system.admin_route)
app.register_blueprint(admin, url_prefix=config.system.admin_route)
def create_folders(paths):
for path in paths:
if not os.path.exists(path):
os.makedirs(path, exist_ok=True)
create_folders([os.path.join(BASE_DIR, config.system.upload_folder),
os.path.join(BASE_DIR, config.system.cache_path), ])
# regular cleaning
@scheduler.task('interval', id='clean_task', seconds=config.system.clean_interval_seconds,
misfire_grace_time=900)
def clean_task():
clean_folder(os.path.join(BASE_DIR, config.system.upload_folder))
clean_folder(os.path.join(BASE_DIR, config.system.cache_path))
if __name__ == '__main__':
try:
if not check_is_none(config.ngrok_config.auth_token):
listener = ngrok.forward(config.http_service.port, authtoken=config.ngrok_config.auth_token)
logging.info(f"Ingress established at {listener.url()}")
else:
logging.info(f"Not using ngrok.")
except Exception as e:
logging.error(f"Not using ngrok. Authtoken error:{e}")
app.run(host=config.http_service.host, port=config.http_service.port, debug=config.http_service.debug)