Spaces:
Sleeping
Sleeping
配置自动保存功能
Browse files
app.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
import streamlit as st
|
| 2 |
import os
|
| 3 |
-
from utils import VideoUtils
|
| 4 |
from stt_module import STTManager
|
| 5 |
from translator import Translator
|
| 6 |
import tempfile
|
|
@@ -9,6 +9,9 @@ from dotenv import load_dotenv
|
|
| 9 |
# 加载 .env 文件中的配置
|
| 10 |
load_dotenv()
|
| 11 |
|
|
|
|
|
|
|
|
|
|
| 12 |
# 取消 Streamlit 上传限制(虽然主要通过命令行配置,但在脚本中提醒用户)
|
| 13 |
# 实际上 Streamlit 的服务器配置需要在运行命令时指定,或者写在 config.toml 中
|
| 14 |
# 我们这里先通过 UI 提醒用户
|
|
@@ -50,13 +53,13 @@ st.title("🎬 AI 媒体字幕提取与翻译")
|
|
| 50 |
with st.sidebar:
|
| 51 |
st.header("⚙️ 配置参数")
|
| 52 |
|
| 53 |
-
# 从环境变量读取默认值
|
| 54 |
-
default_api_key = os.getenv("API_KEY", "")
|
| 55 |
-
default_base_url = os.getenv("BASE_URL", "https://api.siliconflow.cn/v1")
|
| 56 |
-
default_model = os.getenv("MODEL_NAME", "THUDM/glm-4-9b-chat")
|
| 57 |
-
default_stt_size = os.getenv("STT_MODEL_SIZE", "base")
|
| 58 |
-
default_lang = os.getenv("TARGET_LANG", "中文")
|
| 59 |
-
default_device = os.getenv("DEVICE", "cpu")
|
| 60 |
|
| 61 |
api_key = st.text_input("API Key", value=default_api_key, type="password", help="输入 API Key", disabled=st.session_state.processing)
|
| 62 |
base_url = st.text_input("API Base URL", value=default_base_url, disabled=st.session_state.processing)
|
|
@@ -111,6 +114,17 @@ with st.sidebar:
|
|
| 111 |
lang_index = lang_options.index(default_lang) if default_lang in lang_options else 0
|
| 112 |
target_lang = st.selectbox("目标语言", lang_options, index=lang_index, disabled=st.session_state.processing)
|
| 113 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 114 |
if st.session_state.processing:
|
| 115 |
st.divider()
|
| 116 |
if st.button("⏹️ 强制停止任务", type="secondary", use_container_width=True):
|
|
@@ -220,6 +234,9 @@ with tab1:
|
|
| 220 |
VideoUtils.write_srt(all_translated_segments, trans_srt_path)
|
| 221 |
|
| 222 |
status.update(label="处理完成!", state="complete", expanded=False)
|
|
|
|
|
|
|
|
|
|
| 223 |
|
| 224 |
# 保存结果到 session_state
|
| 225 |
st.session_state.process_results = {
|
|
@@ -344,6 +361,10 @@ with tab2:
|
|
| 344 |
"trans_srt": temp_trans_srt.name
|
| 345 |
}
|
| 346 |
st.success("翻译完成!")
|
|
|
|
|
|
|
|
|
|
|
|
|
| 347 |
st.session_state.processing = False
|
| 348 |
st.rerun()
|
| 349 |
except Exception as e:
|
|
|
|
| 1 |
import streamlit as st
|
| 2 |
import os
|
| 3 |
+
from utils import VideoUtils, SettingsManager
|
| 4 |
from stt_module import STTManager
|
| 5 |
from translator import Translator
|
| 6 |
import tempfile
|
|
|
|
| 9 |
# 加载 .env 文件中的配置
|
| 10 |
load_dotenv()
|
| 11 |
|
| 12 |
+
# 加载本地保存的设置
|
| 13 |
+
saved_settings = SettingsManager.load_settings()
|
| 14 |
+
|
| 15 |
# 取消 Streamlit 上传限制(虽然主要通过命令行配置,但在脚本中提醒用户)
|
| 16 |
# 实际上 Streamlit 的服务器配置需要在运行命令时指定,或者写在 config.toml 中
|
| 17 |
# 我们这里先通过 UI 提醒用户
|
|
|
|
| 53 |
with st.sidebar:
|
| 54 |
st.header("⚙️ 配置参数")
|
| 55 |
|
| 56 |
+
# 从本地保存的设置或环境变量读取默认值
|
| 57 |
+
default_api_key = saved_settings.get("API_KEY", os.getenv("API_KEY", ""))
|
| 58 |
+
default_base_url = saved_settings.get("BASE_URL", os.getenv("BASE_URL", "https://api.siliconflow.cn/v1"))
|
| 59 |
+
default_model = saved_settings.get("MODEL_NAME", os.getenv("MODEL_NAME", "THUDM/glm-4-9b-chat"))
|
| 60 |
+
default_stt_size = saved_settings.get("STT_MODEL_SIZE", os.getenv("STT_MODEL_SIZE", "base"))
|
| 61 |
+
default_lang = saved_settings.get("TARGET_LANG", os.getenv("TARGET_LANG", "中文"))
|
| 62 |
+
default_device = saved_settings.get("DEVICE", os.getenv("DEVICE", "cpu"))
|
| 63 |
|
| 64 |
api_key = st.text_input("API Key", value=default_api_key, type="password", help="输入 API Key", disabled=st.session_state.processing)
|
| 65 |
base_url = st.text_input("API Base URL", value=default_base_url, disabled=st.session_state.processing)
|
|
|
|
| 114 |
lang_index = lang_options.index(default_lang) if default_lang in lang_options else 0
|
| 115 |
target_lang = st.selectbox("目标语言", lang_options, index=lang_index, disabled=st.session_state.processing)
|
| 116 |
|
| 117 |
+
# 保存当前配置到本地文件的辅助函数
|
| 118 |
+
def save_current_settings():
|
| 119 |
+
SettingsManager.save_settings({
|
| 120 |
+
"API_KEY": api_key,
|
| 121 |
+
"BASE_URL": base_url,
|
| 122 |
+
"MODEL_NAME": model_name,
|
| 123 |
+
"STT_MODEL_SIZE": model_size,
|
| 124 |
+
"TARGET_LANG": target_lang,
|
| 125 |
+
"DEVICE": device
|
| 126 |
+
})
|
| 127 |
+
|
| 128 |
if st.session_state.processing:
|
| 129 |
st.divider()
|
| 130 |
if st.button("⏹️ 强制停止任务", type="secondary", use_container_width=True):
|
|
|
|
| 234 |
VideoUtils.write_srt(all_translated_segments, trans_srt_path)
|
| 235 |
|
| 236 |
status.update(label="处理完成!", state="complete", expanded=False)
|
| 237 |
+
|
| 238 |
+
# 成功处理后自动保存配置
|
| 239 |
+
save_current_settings()
|
| 240 |
|
| 241 |
# 保存结果到 session_state
|
| 242 |
st.session_state.process_results = {
|
|
|
|
| 361 |
"trans_srt": temp_trans_srt.name
|
| 362 |
}
|
| 363 |
st.success("翻译完成!")
|
| 364 |
+
|
| 365 |
+
# 成功处理后自动保存配置
|
| 366 |
+
save_current_settings()
|
| 367 |
+
|
| 368 |
st.session_state.processing = False
|
| 369 |
st.rerun()
|
| 370 |
except Exception as e:
|