[AI-video] Web UI | Streamlit(py to web) | 应用配置config.toml
链接:https://reccloud.cn/start?position=tab1
docs:AI creates videos
MoneyPrinterTurbo 是一个自动化短视频创作流程的开源项目。
它通过输入主题或关键词,利用人工智能(大语言模型)生成脚本和搜索条件,接着合成语音、查找相关视频素材、创建字幕,最终将所有组件组装成完整的视频文件。
通过网页界面,我们可以配置设置并启动生成流程。
架构流程图
章节导航
- 网页用户界面(UI)
- 应用配置
- 任务编排
- 任务状态管理
- 数据模型与架构
- 大语言模型服务
- 语音合成服务
- 字幕服务
- 视频素材服务
- 视频生成服务
第一章:网页用户界面(UI)
欢迎来到MoneyPrinterTurbo的第一章!
-
我们将从项目中最直观可见的组成部分开始探索——网页用户界面(简称Web UI)。
-
我们可以把Web UI想象成MoneyPrinterTurbo的控制中枢。
-
就像通过
汽车仪表盘
控制行驶方向、调整收音机或查看车速一样,Web UI让我们能够告诉MoneyPrinterTurbo想要制作的视频类型、自定义创作方式、启动生成流程并查看最终成果。
MoneyPrinterTurbo的核心目标是帮助我们轻松实现自动化短视频创作,而Web UI正是实现这一目标的友好界面,它将背后所有复杂步骤都隐藏在简洁的操作面板之下
。
什么是Web UI?
Web UI是MoneyPrinterTurbo应用程序中通过网页浏览器(如Chrome、Firefox、Edge等)访问的可视化界面。
它基于名为Streamlit的创新工具构建,这个工具让我们能够用Python代码轻松创建交互式网页应用。
通过Web UI,我们可以实现:
- 告知系统视频创作主题
- 定制视频、音频和字幕的各类参数
- 启动视频生成流程
- 监控进度并查看异常状态
- 下载成品视频文件
让我们通过实际案例了解它的操作流程。
首个视频创作:快速体验
假设我们要创作关于"阅读的益处"的短视频,典型操作流程如下:
- 启动系统:在计算机上运行MoneyPrinterTurbo应用程序
- 访问界面:在浏览器中打开UI运行地址(通常为
http://localhost:8501
) - 输入主题:定位到"视频脚本设置"区域,在"视频主题"输入框键入"阅读的益处"
- 参数调整(可选):浏览"视频设置"、“音频设置"和"字幕设置"区域,初次可保留默认参数,但可以探索"视频宽高比”(竖屏适用于TikTok/短视频,横屏适用于YouTube)或"背景音乐"等选项
- 生成启动:定位到醒目的"生成视频"按钮(通常位于底部区域)并点击
- 过程追踪:界面将显示实时日志消息,展示系统正在执行的步骤
- 成果获取:完成后,界面将显示视频下载链接
这就是基本操作流程~
Web UI在此过程中承担着全程控制中心的角色。
AI生成视频初体验
界面功能模块
Web UI通过模块化设计实现信息输入与参数调整,代码片段显示主要包含以下功能区域:
-
视频脚本设置:提供核心创意(
视频主题
)或完整脚本(视频脚本
)的输入区域,支持自动生成关键词(视频关键词
)st.text_input(tr("视频主题"), # 来自语言文件的标签value=st.session_state["video_subject"],key="video_subject_input", ) st.text_area(tr("视频脚本"), # 来自语言文件的标签value=st.session_state["video_script"],height=280 ) # 其他脚本相关输入...
此简化示例展示Streamlit如何创建主题与脚本的输入组件
-
视频设置:控制素材来源(
视频源
)、剪辑模式(视频拼接模式
、转场效果
)、画面比例(视频宽高比
)和片段时长(片段持续时间
)等视觉参数st.selectbox(tr("视频源"), # 来自语言文件的标签options=range(len(video_sources)),format_func=lambda x: video_sources[x][0],index=saved_video_source_index, ) st.selectbox(tr("视频宽高比"), # 来自语言文件的标签options=range(len(video_aspect_ratios)),format_func=lambda x: video_aspect_ratios[x][0], ) # 其他视频设置...
Streamlit通过
selectbox
创建视频源与宽高比等下拉菜单 -
音频设置:管理语音合成(
语音合成
、TTS服务商
、语音区域
、语音密钥
)、语音属性(语音音量
、语速
)和背景音乐(背景音乐
、背景音乐音量
)等音频参数st.selectbox(tr("TTS服务商"), # 来自语言文件的标签options=range(len(tts_servers)),format_func=lambda x: tts_servers[x][1],index=saved_tts_server_index, ) st.selectbox(tr("语音音量"), # 来自语言文件的标签options=[0.6, 0.8, 1.0, 1.2, 1.5, 2.0, 3.0, 4.0, 5.0],index=2, ) # 其他音频设置...
使用
selectbox
实现TTS服务商选择与音量调节 -
字幕设置:配置字幕显示(
启用字幕
)及其视觉样式(字体
、位置
、字号
、字体颜色
、描边颜色
、描边宽度
)st.checkbox(tr("启用字幕"), value=True) # 来自语言文件的标签 st.selectbox(tr("字体"), font_names, index=saved_font_name_index) # 来自语言文件的标签 st.color_picker(tr("字体颜色"), saved_text_fore_color) # 来自语言文件的标签 # 其他字幕设置...
通过
checkbox
、selectbox
和color_picker
实现字幕定制 -
基础设置:可折叠区域(默认可能隐藏)包含关键配置项,包括界面语言、大语言模型与视频素材源(Pexels、Pixabay)的API密钥,以及TTS服务商(Azure、SiliconFlow)配置
with st.expander(tr("基础设置"), expanded=False):# API密钥输入及其他基础配置...st.text_input(tr("Pexels API密钥"), # 来自语言文件的标签value=pexels_api_key,type="password" # 隐藏输入)# 其他API密钥与语言设置...
st.expander
创建折叠区域保持界面整洁,type="password"
保护敏感信息 -
日志区域:点击"生成视频"后显示进度信息与错误提示,对问题诊断至关重要
log_container = st.empty() # 日志显示容器 # 后续代码... with log_container:st.code("\n".join(log_records)) # 代码格式显示日志
通过占位符
st.empty
实现动态日志更新 -
下载链接:视频生成成功后显示最终文件下载入口
这些界面组件本质上将我们的操作选择转化为MoneyPrinterTurbo系统可识别的指令集合。
点击"生成视频
"后的系统响应
当我们完成表单填写并点击生成按钮时,界面不仅呈现视觉反馈,更重要的是启动复杂的视频生成流程。以下是简化的系统交互示意图:
界面本身并不直接生成视频,其核心职责是收集需求并通知系统的任务管理器启动新任务。
任务管理器继而协调各子系统(如大语言模型生成脚本、语音合成服务、视频素材检索等)完成视频创作,界面则持续展示任务管理器反馈的进度信息直至视频生成完成。
关于任务编排与服务协同的深入解析,我们将在后续章节详细探讨!
总结
网页用户界面是我们与MoneyPrinterTurbo交互的核心工具,它通过可视化表单接收视频内容需求,并提供脚本、视频片段、音频(语音与背景音乐)及字幕的各类参数定制功能。
-
当点击"生成视频"时,界面将指令传递至后端系统,监控执行进度,最终呈现创作成果的下载入口。
-
在掌握
控制面板
的基本操作后,我们需要进行必要的系统配置
(如API密钥设置)才能充分发挥系统功能。
下一章我们将深入解析应用配置,了解MoneyPrinterTurbo的核心参数存储机制与管理方法。
下一章:应用配置
第二章:应用配置
在第一章中,我们探索了网页用户界面(UI)——这是MoneyPrinterTurbo的友好控制面板。
我们学习了如何通过按钮和输入框告知系统所需的视频类型。
但系统如何确定使用具体哪个AI模型?如何定位请求的视频素材?OpenAI或Pexels等服务的API密钥又该存放在何处?
这正是应用配置的核心作用。我们可以将配置理解为整个MoneyPrinterTurbo项目的记忆中枢与参数控制台。它承载着系统运行所需的关键信息,承担着全局参数存储库的角色。
为何需要配置?
试想若要在未知食材存放位置、不明调料品牌的情况下烹饪复杂料理,我们必定手足无措!
MoneyPrinterTurbo正如这道复杂料理,它需要明确的"食材"与操作指南:
- 食材:AI服务的API密钥(用于生成脚本与语音)、视频素材源的API密钥(用于检索片段)、外部工具路径(如视频剪辑工具FFmpeg)
- 操作指南:通用行为参数(如临时文件存储路径、日志记录级别、并发任务上限)
配置系统为这些信息提供了标准化存储与管理机制。缺乏配置时,系统既无法连接外部服务,也无法根据用户需求调整自身行为。
核心组件:config.toml
文件
MoneyPrinterTurbo的配置核心是一个名为config.toml
的文件:
- TOML格式:TOML(Tom’s Obvious, Minimal Language)是一种人类易读、机器易解析的配置文件格式,通过
key = "value"
键值对与[section]
区块头组织参数 - 文件位置:该文件位于项目根目录,与
app
、webui
等文件夹同级。初次部署时通常存在config.example.toml
模板文件,需手动复制或重命名为config.toml
后进行编辑
以下是一个简化的config.example.toml
片段示例:
# --- config.example.toml(简化版)---
[app]
video_source = "pexels"# Pexels API密钥
pexels_api_keys = [] # 支持多密钥列表形式[openai]
# OpenAI API密钥
openai_api_key = ""
openai_model_name = "gpt-4o-mini"
此片段展示:
[app]
区块包含video_source
等通用参数[openai]
区块包含openai_api_key
等专属参数- 列表型参数(如
pexels_api_keys
)支持多值存储 - 字符串型参数(如
openai_api_key
)需填入单值
首次配置任务通常包括:
- 将
config.example.toml
重命名为config.toml
- 填入已获取的API密钥(如OpenAI、Azure、Pexels等)
例如添加OpenAI密钥的修改过程:
# 修改前:
openai_api_key = ""# 修改后:
openai_api_key = "sk-YOUR_ACTUAL_OPENAI_KEY_HERE" # 替换为真实密钥
注:部分基础参数修改后需重启系统生效。
在gmini-cli第一章,我们也有过相同的配置操作~
系统如何运用配置?
配置并非静态文件,而是动态参与系统运行:
-
启动加载:系统启动时,核心代码首先读取
config.toml
文件,将TOML格式解析为Python变量# 摘自app/config/config.py的简化代码 import toml import os import shutil from loguru import loggerroot_dir = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) config_file = f"{root_dir}/config.toml"def load_config():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("已从模板创建配置文件")logger.info(f"加载配置文件: {config_file}")return toml.load(config_file)_cfg = load_config() app = _cfg.get("app", {}) openai = _cfg.get("openai", {})
该代码实现:
- 自动创建配置文件(若缺失)
- 加载配置至内存字典
- 按区块划分配置参数
-
参数调用:各功能模块通过导入配置模块获取参数
# 功能模块调用示例 from app.config import configdef generate_script(subject: str):llm_provider = config.app.get("llm_provider", "openai")openai_key = config.openai.get("openai_api_key")if llm_provider == "openai" and openai_key:return llm_service.generate(subject, api_key=openai_key)else:return "错误:缺失有效配置"
此例展示脚本生成功能如何根据配置选择AI服务商。
-
界面保存:如第一章所述,网页界面的"基础设置"支持直接修改参数并保存至配置文件
# 网页界面保存功能代码示例 import streamlit as st from app.config import config, save_configdef render_basic_settings():with st.expander("基础设置"):pexels_key = st.text_input("Pexels API密钥",value=config.app.get("pexels_api_keys", [""])[0],type="password")if st.button("保存配置"):config._cfg["app"]["pexels_api_keys"] = [pexels_key]save_config()
该代码实现:
- 从内存配置读取初始值
- 将界面修改写入内存配置
- 调用保存函数持久化至文件
配置交互流程示意图:
核心配置区块解析
config.toml
包含多个功能区块,关键部分如下:
区块名称 | 功能描述 | 典型参数示例 |
---|---|---|
[app] | 应用通用设置 | video_source , ffmpeg_path |
[openai] | OpenAI服务参数 | openai_api_key , openai_model_name |
[azure] | Azure语音合成参数 | azure_api_key , azure_region |
[siliconflow] | SiliconFlow服务参数 | api_key |
[proxy] | 代理服务器配置 | http , https |
[whisper] | 字幕生成参数 | model_size , compute_type |
[ui] | 界面显示参数 | hide_log , theme |
这些参数的具体应用场景将在后续章节详解,例如:
- 第六章:大语言模型服务解析
[openai]
配置 - 第七章:语音合成服务展示
[azure]
配置用法
总结
应用配置作为MoneyPrinterTurbo的核心机制,通过config.toml
文件集中管理API密钥、服务参数、工具路径等关键信息。
系统启动时加载配置
至内存,各功能模块按需调用。网页界面提供可视化配置
修改能力,实现参数动态更新
。
掌握配置管理使我们能够:
- 灵活切换AI服务供应商
- 定制化系统运行环境
- 快速部署多环境实例
在理解系统配置机制后,我们将进一步探索任务编排机制——了解系统如何协调脚本生成、语音合成、视频剪辑等子任务。
下一章:任务编排