| |
| 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() |
|
|