mirror of
https://github.com/linyqh/NarratoAI.git
synced 2025-12-12 19:52:48 +00:00
feat: 更新 webui 界面以支持新功能
This commit is contained in:
parent
238c1c13f1
commit
5254798464
86
webui.py
86
webui.py
@ -131,18 +131,11 @@ def render_generate_button():
|
|||||||
"""渲染生成按钮和处理逻辑"""
|
"""渲染生成按钮和处理逻辑"""
|
||||||
if st.button(tr("Generate Video"), use_container_width=True, type="primary"):
|
if st.button(tr("Generate Video"), use_container_width=True, type="primary"):
|
||||||
from app.services import task as tm
|
from app.services import task as tm
|
||||||
|
from app.services import state as sm
|
||||||
# 重置日志容器和记录
|
from app.models import const
|
||||||
log_container = st.empty()
|
import threading
|
||||||
log_records = []
|
import time
|
||||||
|
import uuid
|
||||||
def log_received(msg):
|
|
||||||
with log_container:
|
|
||||||
log_records.append(msg)
|
|
||||||
st.code("\n".join(log_records))
|
|
||||||
|
|
||||||
from loguru import logger
|
|
||||||
logger.add(log_received)
|
|
||||||
|
|
||||||
config.save_config()
|
config.save_config()
|
||||||
|
|
||||||
@ -155,9 +148,6 @@ def render_generate_button():
|
|||||||
st.error(tr("视频文件不能为空"))
|
st.error(tr("视频文件不能为空"))
|
||||||
return
|
return
|
||||||
|
|
||||||
st.toast(tr("生成视频"))
|
|
||||||
logger.info(tr("开始生成视频"))
|
|
||||||
|
|
||||||
# 获取所有参数
|
# 获取所有参数
|
||||||
script_params = script_settings.get_script_params()
|
script_params = script_settings.get_script_params()
|
||||||
video_params = video_settings.get_video_params()
|
video_params = video_settings.get_video_params()
|
||||||
@ -175,29 +165,61 @@ def render_generate_button():
|
|||||||
# 创建参数对象
|
# 创建参数对象
|
||||||
params = VideoClipParams(**all_params)
|
params = VideoClipParams(**all_params)
|
||||||
|
|
||||||
# 使用新的统一裁剪策略,不再需要预裁剪的subclip_videos
|
|
||||||
# 生成一个新的task_id用于本次处理
|
# 生成一个新的task_id用于本次处理
|
||||||
import uuid
|
|
||||||
task_id = str(uuid.uuid4())
|
task_id = str(uuid.uuid4())
|
||||||
|
|
||||||
result = tm.start_subclip_unified(
|
# 创建进度条
|
||||||
task_id=task_id,
|
progress_bar = st.progress(0)
|
||||||
params=params
|
status_text = st.empty()
|
||||||
)
|
|
||||||
|
|
||||||
video_files = result.get("videos", [])
|
def run_task():
|
||||||
st.success(tr("视生成完成"))
|
try:
|
||||||
|
tm.start_subclip_unified(
|
||||||
|
task_id=task_id,
|
||||||
|
params=params
|
||||||
|
)
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"任务执行失败: {e}")
|
||||||
|
sm.state.update_task(task_id, state=const.TASK_STATE_FAILED, message=str(e))
|
||||||
|
|
||||||
try:
|
# 在新线程中启动任务
|
||||||
if video_files:
|
thread = threading.Thread(target=run_task)
|
||||||
player_cols = st.columns(len(video_files) * 2 + 1)
|
thread.start()
|
||||||
for i, url in enumerate(video_files):
|
|
||||||
player_cols[i * 2 + 1].video(url)
|
# 轮询任务状态
|
||||||
except Exception as e:
|
while True:
|
||||||
logger.error(f"播放视频失败: {e}")
|
task = sm.state.get_task(task_id)
|
||||||
|
if task:
|
||||||
|
progress = task.get("progress", 0)
|
||||||
|
state = task.get("state")
|
||||||
|
|
||||||
|
# 更新进度条
|
||||||
|
progress_bar.progress(progress / 100)
|
||||||
|
status_text.text(f"Processing... {progress}%")
|
||||||
|
|
||||||
|
if state == const.TASK_STATE_COMPLETE:
|
||||||
|
status_text.text(tr("视频生成完成"))
|
||||||
|
progress_bar.progress(1.0)
|
||||||
|
|
||||||
|
# 显示结果
|
||||||
|
video_files = task.get("videos", [])
|
||||||
|
try:
|
||||||
|
if video_files:
|
||||||
|
player_cols = st.columns(len(video_files) * 2 + 1)
|
||||||
|
for i, url in enumerate(video_files):
|
||||||
|
player_cols[i * 2 + 1].video(url)
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"播放视频失败: {e}")
|
||||||
|
|
||||||
|
st.success(tr("视频生成完成"))
|
||||||
|
break
|
||||||
|
|
||||||
|
elif state == const.TASK_STATE_FAILED:
|
||||||
|
st.error(f"任务失败: {task.get('message', 'Unknown error')}")
|
||||||
|
break
|
||||||
|
|
||||||
|
time.sleep(0.5)
|
||||||
|
|
||||||
# file_utils.open_task_folder(config.root_dir, task_id)
|
|
||||||
logger.info(tr("视频生成完成"))
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user