mirror of
https://github.com/linyqh/NarratoAI.git
synced 2025-12-11 18:42:49 +00:00
90 lines
2.8 KiB
Python
90 lines
2.8 KiB
Python
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["tencent"] = tencent
|
|
_cfg["soulvoice"] = soulvoice
|
|
_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", {})
|
|
tencent = _cfg.get("tencent", {})
|
|
soulvoice = _cfg.get("soulvoice", {})
|
|
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",
|
|
"<a href='https://github.com/linyqh/NarratoAI'>https://github.com/linyqh/NarratoAI</a>",
|
|
)
|
|
# 从文件读取版本号,而不是从配置文件中获取
|
|
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}")
|