|
|
|
import argparse |
|
import logging |
|
import logging.handlers |
|
import os |
|
import tornado.ioloop |
|
import tornado.web |
|
import config |
|
import api.main |
|
import api.svc |
|
import api.tool |
|
import api.vm |
|
|
|
logger = logging.getLogger(__name__) |
|
|
|
BASE_PATH = os.path.dirname(os.path.realpath(__file__)) |
|
WEB_ROOT = os.path.join(BASE_PATH, 'frontend', 'dist') |
|
LOG_FILE_NAME = os.path.join(BASE_PATH, 'log', 'sovits-webui.log') |
|
|
|
routes = [ |
|
(r'/api/svc/model', api.svc.ModelListHandler), |
|
(r'/api/svc/switch', api.svc.SwitchHandler), |
|
(r'/api/svc/run', api.svc.SingleInferenceHandler), |
|
(r'/api/svc/batch', api.svc.BatchInferenceHandler), |
|
|
|
(r'/api/vm/run', api.vm.VocalRemoverHandler), |
|
|
|
(r'/api/tool/norm', api.tool.AudioNormalizerHandler), |
|
|
|
(r'/(.*)', api.main.MainHandler, {'path': WEB_ROOT, 'default_filename': 'index.html'}) |
|
] |
|
|
|
|
|
def main(): |
|
args = parse_args() |
|
|
|
init_logging(args.debug) |
|
config.init() |
|
api.svc.init() |
|
|
|
run_server(args.host, args.port, args.debug) |
|
|
|
|
|
def parse_args(): |
|
parser = argparse.ArgumentParser(description="SOVITS WEBUI") |
|
parser.add_argument('--host', help='Server host, default to 127.0.0.1', default='127.0.0.1') |
|
parser.add_argument('--port', help='Server port, default to 7870', type=int, default=7870) |
|
parser.add_argument('--debug', help='debug mode', action='store_true') |
|
return parser.parse_args() |
|
|
|
|
|
def init_logging(debug): |
|
stream_handler = logging.StreamHandler() |
|
file_handler = logging.handlers.TimedRotatingFileHandler( |
|
LOG_FILE_NAME, encoding='utf-8', when='midnight', backupCount=7, delay=True |
|
) |
|
|
|
logging.basicConfig( |
|
format='{asctime} {levelname} [{name}]: {message}', |
|
datefmt='%Y-%m-%d %H:%M:%S', |
|
style='{', |
|
level=logging.INFO if not debug else logging.DEBUG, |
|
handlers=[stream_handler, file_handler] |
|
) |
|
|
|
|
|
logging.getLogger('tornado.access').setLevel(logging.WARNING) |
|
|
|
|
|
def run_server(host, port, debug): |
|
app = tornado.web.Application( |
|
routes, |
|
websocket_ping_interval=10, |
|
debug=debug, |
|
autoreload=True |
|
) |
|
cfg = config.get_config() |
|
try: |
|
app.listen( |
|
port=port, |
|
address=host, |
|
xheaders=cfg.tornado_xheaders |
|
) |
|
except OSError: |
|
logger.warning('Address is used %s:%d', host, port) |
|
return |
|
|
|
|
|
|
|
|
|
|
|
logger.info('Server started: %s:%d', host, port) |
|
try: |
|
tornado.ioloop.IOLoop.current().start() |
|
except KeyboardInterrupt: |
|
tornado.ioloop.IOLoop.current().instance().stop() |
|
|
|
|
|
if __name__ == '__main__': |
|
main() |
|
|