import os import socket import toml import shutil from loguru import logger root_dir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__)))) config_file = f"{root_dir}/config.toml" version_file = f"{root_dir}/project_version" def get_version_from_file(): """从project_version文件中读取版本号""" try: if os.path.isfile(version_file): with open(version_file, "r", encoding="utf-8") as f: return f.read().strip() return "0.1.0" # 默认版本号 except Exception as e: logger.error(f"读取版本号文件失败: {str(e)}") return "0.1.0" # 默认版本号 def load_config(): # fix: IsADirectoryError: [Errno 21] Is a directory: '/NarratoAI/config.toml' if os.path.isdir(config_file): shutil.rmtree(config_file) if not os.path.isfile(config_file): example_file = f"{root_dir}/config.example.toml" if os.path.isfile(example_file): shutil.copyfile(example_file, config_file) logger.info(f"copy config.example.toml to config.toml") logger.info(f"load config from file: {config_file}") try: _config_ = toml.load(config_file) except Exception as e: logger.warning(f"load config failed: {str(e)}, try to load as utf-8-sig") with open(config_file, mode="r", encoding="utf-8-sig") as fp: _cfg_content = fp.read() _config_ = toml.loads(_cfg_content) return _config_ def save_config(): with open(config_file, "w", encoding="utf-8") as f: _cfg["app"] = app _cfg["azure"] = azure _cfg["ui"] = ui f.write(toml.dumps(_cfg)) _cfg = load_config() app = _cfg.get("app", {}) whisper = _cfg.get("whisper", {}) proxy = _cfg.get("proxy", {}) azure = _cfg.get("azure", {}) ui = _cfg.get("ui", {}) frames = _cfg.get("frames", {}) hostname = socket.gethostname() log_level = _cfg.get("log_level", "DEBUG") listen_host = _cfg.get("listen_host", "0.0.0.0") listen_port = _cfg.get("listen_port", 8080) project_name = _cfg.get("project_name", "NarratoAI") project_description = _cfg.get( "project_description", "https://github.com/linyqh/NarratoAI", ) # 从文件读取版本号,而不是从配置文件中获取 project_version = get_version_from_file() reload_debug = False imagemagick_path = app.get("imagemagick_path", "") if imagemagick_path and os.path.isfile(imagemagick_path): os.environ["IMAGEMAGICK_BINARY"] = imagemagick_path ffmpeg_path = app.get("ffmpeg_path", "") if ffmpeg_path and os.path.isfile(ffmpeg_path): os.environ["IMAGEIO_FFMPEG_EXE"] = ffmpeg_path logger.info(f"{project_name} v{project_version}")