CatPtain commited on
Commit
d33f5e5
·
verified ·
1 Parent(s): b70be0e

Upload 5 files

Browse files
Files changed (4) hide show
  1. config.example.toml +214 -0
  2. packages.txt +30 -0
  3. requirements_hf.txt +51 -0
  4. streamlit_app.py +125 -0
config.example.toml ADDED
@@ -0,0 +1,214 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [app]
2
+ video_source = "pexels" # "pexels" or "pixabay"
3
+
4
+ # 是否隐藏配置面板
5
+ hide_config = false
6
+
7
+ # Pexels API Key
8
+ # Register at https://www.pexels.com/api/ to get your API key.
9
+ # You can use multiple keys to avoid rate limits.
10
+ # For example: pexels_api_keys = ["123adsf4567adf89","abd1321cd13efgfdfhi"]
11
+ # 特别注意格式,Key 用英文双引号括起来,多个Key用逗号隔开
12
+ pexels_api_keys = []
13
+
14
+ # Pixabay API Key
15
+ # Register at https://pixabay.com/api/docs/ to get your API key.
16
+ # You can use multiple keys to avoid rate limits.
17
+ # For example: pixabay_api_keys = ["123adsf4567adf89","abd1321cd13efgfdfhi"]
18
+ # 特别注意格式,Key 用英文双引号括起来,多个Key用逗号隔开
19
+ pixabay_api_keys = []
20
+
21
+ # 支持的提供商 (Supported providers):
22
+ # openai
23
+ # moonshot (月之暗面)
24
+ # azure
25
+ # qwen (通义千问)
26
+ # deepseek
27
+ # gemini
28
+ # ollama
29
+ # g4f
30
+ # oneapi
31
+ # cloudflare
32
+ # ernie (文心一言)
33
+ llm_provider = "openai"
34
+
35
+ ########## Pollinations AI Settings
36
+ # Visit https://pollinations.ai/ to learn more
37
+ # API Key is optional - leave empty for public access
38
+ pollinations_api_key = ""
39
+ # Default base URL for Pollinations API
40
+ pollinations_base_url = "https://pollinations.ai/api/v1"
41
+ # Default model for text generation
42
+ pollinations_model_name = "openai-fast"
43
+
44
+ ########## Ollama Settings
45
+ # No need to set it unless you want to use your own proxy
46
+ ollama_base_url = ""
47
+ # Check your available models at https://ollama.com/library
48
+ ollama_model_name = ""
49
+
50
+ ########## OpenAI API Key
51
+ # Get your API key at https://platform.openai.com/api-keys
52
+ openai_api_key = ""
53
+ # No need to set it unless you want to use your own proxy
54
+ openai_base_url = ""
55
+ # Check your available models at https://platform.openai.com/account/limits
56
+ openai_model_name = "gpt-4o-mini"
57
+
58
+ ########## Moonshot API Key
59
+ # Visit https://platform.moonshot.cn/console/api-keys to get your API key.
60
+ moonshot_api_key = ""
61
+ moonshot_base_url = "https://api.moonshot.cn/v1"
62
+ moonshot_model_name = "moonshot-v1-8k"
63
+
64
+ ########## OneAPI API Key
65
+ # Visit https://github.com/songquanpeng/one-api to get your API key
66
+ oneapi_api_key = ""
67
+ oneapi_base_url = ""
68
+ oneapi_model_name = ""
69
+
70
+ ########## G4F
71
+ # Visit https://github.com/xtekky/gpt4free to get more details
72
+ # Supported model list: https://github.com/xtekky/gpt4free/blob/main/g4f/models.py
73
+ g4f_model_name = "gpt-3.5-turbo"
74
+
75
+ ########## Azure API Key
76
+ # Visit https://learn.microsoft.com/zh-cn/azure/ai-services/openai/ to get more details
77
+ # API documentation: https://learn.microsoft.com/zh-cn/azure/ai-services/openai/reference
78
+ azure_api_key = ""
79
+ azure_base_url = ""
80
+ azure_model_name = "gpt-35-turbo" # replace with your model deployment name
81
+ azure_api_version = "2024-02-15-preview"
82
+
83
+ ########## Gemini API Key
84
+ gemini_api_key = ""
85
+ gemini_model_name = "gemini-1.0-pro"
86
+
87
+ ########## Qwen API Key
88
+ # Visit https://dashscope.console.aliyun.com/apiKey to get your API key
89
+ # Visit below links to get more details
90
+ # https://tongyi.aliyun.com/qianwen/
91
+ # https://help.aliyun.com/zh/dashscope/developer-reference/model-introduction
92
+ qwen_api_key = ""
93
+ qwen_model_name = "qwen-max"
94
+
95
+
96
+ ########## DeepSeek API Key
97
+ # Visit https://platform.deepseek.com/api_keys to get your API key
98
+ deepseek_api_key = ""
99
+ deepseek_base_url = "https://api.deepseek.com"
100
+ deepseek_model_name = "deepseek-chat"
101
+
102
+ # Subtitle Provider, "edge" or "whisper"
103
+ # If empty, the subtitle will not be generated
104
+ subtitle_provider = "edge"
105
+
106
+ #
107
+ # ImageMagick
108
+ #
109
+ # Once you have installed it, ImageMagick will be automatically detected, except on Windows!
110
+ # On Windows, for example "C:\Program Files (x86)\ImageMagick-7.1.1-Q16-HDRI\magick.exe"
111
+ # Download from https://imagemagick.org/archive/binaries/ImageMagick-7.1.1-29-Q16-x64-static.exe
112
+
113
+ # imagemagick_path = "C:\\Program Files (x86)\\ImageMagick-7.1.1-Q16\\magick.exe"
114
+
115
+
116
+ #
117
+ # FFMPEG
118
+ #
119
+ # 通常情况下,ffmpeg 会被自动下载,并且会被自动检测到。
120
+ # 但是如果你的环境有问题,无法自动下载,可能会遇到如下错误:
121
+ # RuntimeError: No ffmpeg exe could be found.
122
+ # Install ffmpeg on your system, or set the IMAGEIO_FFMPEG_EXE environment variable.
123
+ # 此时你可以手动下载 ffmpeg 并设置 ffmpeg_path,下载地址:https://www.gyan.dev/ffmpeg/builds/
124
+
125
+ # Under normal circumstances, ffmpeg is downloaded automatically and detected automatically.
126
+ # However, if there is an issue with your environment that prevents automatic downloading, you might encounter the following error:
127
+ # RuntimeError: No ffmpeg exe could be found.
128
+ # Install ffmpeg on your system, or set the IMAGEIO_FFMPEG_EXE environment variable.
129
+ # In such cases, you can manually download ffmpeg and set the ffmpeg_path, download link: https://www.gyan.dev/ffmpeg/builds/
130
+
131
+ # ffmpeg_path = "C:\\Users\\harry\\Downloads\\ffmpeg.exe"
132
+ #########################################################################################
133
+
134
+ # 当视频生成成功后,API服务提供的视频下载接入点,默认为当前服务的地址和监听端口
135
+ # 比如 http://127.0.0.1:8080/tasks/6357f542-a4e1-46a1-b4c9-bf3bd0df5285/final-1.mp4
136
+ # 如果你需要使用域名对外提供服务(一般会用nginx做代理),则可以设置为你的域名
137
+ # 比如 https://xxxx.com/tasks/6357f542-a4e1-46a1-b4c9-bf3bd0df5285/final-1.mp4
138
+ # endpoint="https://xxxx.com"
139
+
140
+ # When the video is successfully generated, the API service provides a download endpoint for the video, defaulting to the service's current address and listening port.
141
+ # For example, http://127.0.0.1:8080/tasks/6357f542-a4e1-46a1-b4c9-bf3bd0df5285/final-1.mp4
142
+ # If you need to provide the service externally using a domain name (usually done with nginx as a proxy), you can set it to your domain name.
143
+ # For example, https://xxxx.com/tasks/6357f542-a4e1-46a1-b4c9-bf3bd0df5285/final-1.mp4
144
+ # endpoint="https://xxxx.com"
145
+ endpoint = ""
146
+
147
+
148
+ # Video material storage location
149
+ # material_directory = "" # Indicates that video materials will be downloaded to the default folder, the default folder is ./storage/cache_videos under the current project
150
+ # material_directory = "/user/harry/videos" # Indicates that video materials will be downloaded to a specified folder
151
+ # material_directory = "task" # Indicates that video materials will be downloaded to the current task's folder, this method does not allow sharing of already downloaded video materials
152
+
153
+ # 视频素材存放位置
154
+ # material_directory = "" #表示将视频素材下载到默认的文件夹,默认文件夹为当前项目下的 ./storage/cache_videos
155
+ # material_directory = "/user/harry/videos" #表示将视频素材下载到指定的文件夹中
156
+ # material_directory = "task" #表示将视频素材下载到当前任务的文件夹中,这种方式无法共享已经下载的视频素材
157
+
158
+ material_directory = ""
159
+
160
+ # Used for state management of the task
161
+ enable_redis = false
162
+ redis_host = "localhost"
163
+ redis_port = 6379
164
+ redis_db = 0
165
+ redis_password = ""
166
+
167
+ # 文生视频时的最大并发任务数
168
+ max_concurrent_tasks = 5
169
+
170
+
171
+ [whisper]
172
+ # Only effective when subtitle_provider is "whisper"
173
+
174
+ # Run on GPU with FP16
175
+ # model = WhisperModel(model_size, device="cuda", compute_type="float16")
176
+
177
+ # Run on GPU with INT8
178
+ # model = WhisperModel(model_size, device="cuda", compute_type="int8_float16")
179
+
180
+ # Run on CPU with INT8
181
+ # model = WhisperModel(model_size, device="cpu", compute_type="int8")
182
+
183
+ # recommended model_size: "large-v3"
184
+ model_size = "large-v3"
185
+ # if you want to use GPU, set device="cuda"
186
+ device = "CPU"
187
+ compute_type = "int8"
188
+
189
+
190
+ [proxy]
191
+ ### Use a proxy to access the Pexels API
192
+ ### Format: "http://<username>:<password>@<proxy>:<port>"
193
+ ### Example: "http://user:pass@proxy:1234"
194
+ ### Doc: https://requests.readthedocs.io/en/latest/user/advanced/#proxies
195
+
196
+ # http = "http://10.10.1.10:3128"
197
+ # https = "http://10.10.1.10:1080"
198
+
199
+ [azure]
200
+ # Azure Speech API Key
201
+ # Get your API key at https://portal.azure.com/#view/Microsoft_Azure_ProjectOxford/CognitiveServicesHub/~/SpeechServices
202
+ speech_key = ""
203
+ speech_region = ""
204
+
205
+ [siliconflow]
206
+ # SiliconFlow API Key
207
+ # Get your API key at https://siliconflow.cn
208
+ api_key = ""
209
+
210
+ [ui]
211
+ # UI related settings
212
+ # 是否隐藏日志信息
213
+ # Whether to hide logs in the UI
214
+ hide_log = false
packages.txt CHANGED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # System packages required for MoneyPrinterTurbo on Huggingface Spaces
2
+ # Video processing dependencies
3
+ ffmpeg
4
+ libavcodec-extra
5
+ libavformat58
6
+ libavutil56
7
+ libswscale5
8
+ libswresample3
9
+
10
+ # Image processing
11
+ libgl1-mesa-glx
12
+ libglib2.0-0
13
+ libsm6
14
+ libxext6
15
+ libxrender-dev
16
+ libgomp1
17
+
18
+ # Audio processing
19
+ libasound2
20
+ pulseaudio
21
+
22
+ # Font support
23
+ fonts-liberation
24
+ fonts-dejavu-core
25
+ fontconfig
26
+
27
+ # Additional utilities
28
+ wget
29
+ curl
30
+ unzip
requirements_hf.txt ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # MoneyPrinterTurbo - Huggingface Spaces Dependencies
2
+ # Optimized for FREE tier deployment
3
+
4
+ # Core Streamlit
5
+ streamlit>=1.28.0
6
+ streamlit-option-menu>=0.3.6
7
+
8
+ # Configuration
9
+ toml>=0.10.0
10
+
11
+ # Logging
12
+ loguru>=0.7.0
13
+
14
+ # AI/LLM Libraries
15
+ openai>=1.0.0
16
+ requests>=2.31.0
17
+
18
+ # Video Processing (lightweight)
19
+ pillow>=10.0.0
20
+ moviepy>=1.0.3
21
+
22
+ # Audio Processing
23
+ pydub>=0.25.1
24
+
25
+ # Data Handling
26
+ pandas>=2.0.0
27
+ numpy>=1.24.0
28
+
29
+ # HTTP Client
30
+ httpx>=0.24.0
31
+
32
+ # Image Processing
33
+ opencv-python-headless>=4.8.0
34
+
35
+ # Compatibility fixes
36
+ protobuf<=3.20.3
37
+
38
+ # File handling
39
+ pathlib2>=2.3.7
40
+
41
+ # JSON handling
42
+ jsonschema>=4.17.0
43
+
44
+ # Time utilities
45
+ python-dateutil>=2.8.2
46
+
47
+ # UUID utilities
48
+ uuid>=1.30
49
+
50
+ # System utilities
51
+ psutil>=5.9.0
streamlit_app.py ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """
3
+ MoneyPrinterTurbo - 简化版Streamlit应用
4
+ 一键启动,无需复杂配置
5
+ """
6
+
7
+ import os
8
+ import sys
9
+ import subprocess
10
+ from pathlib import Path
11
+
12
+ # 修复protobuf兼容性问题
13
+ os.environ["PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION"] = "python"
14
+
15
+ # 添加项目根目录到Python路径
16
+ project_root = Path(__file__).parent
17
+ sys.path.insert(0, str(project_root))
18
+
19
+ def check_dependencies():
20
+ """检查基础依赖是否安装"""
21
+ required_packages = ['streamlit', 'toml', 'loguru']
22
+ missing_packages = []
23
+
24
+ for package in required_packages:
25
+ try:
26
+ __import__(package)
27
+ print(f"✅ {package} 已安装")
28
+ except ImportError:
29
+ missing_packages.append(package)
30
+ print(f"❌ {package} 缺失")
31
+
32
+ if missing_packages:
33
+ print(f"\n🔧 需要安装: {', '.join(missing_packages)}")
34
+ print("自动安装中...")
35
+ try:
36
+ subprocess.run([
37
+ sys.executable, "-m", "pip", "install",
38
+ *missing_packages, "protobuf==3.20.3"
39
+ ], check=True, capture_output=True)
40
+ print("✅ 依赖安装完成")
41
+ return True
42
+ except subprocess.CalledProcessError:
43
+ print("❌ 自动安装失败,请手动运行:")
44
+ print(f"pip install {' '.join(missing_packages)} protobuf==3.20.3")
45
+ return False
46
+ return True
47
+
48
+ def setup_directories():
49
+ """创建必要的目录"""
50
+ dirs = [
51
+ "storage/tasks",
52
+ "storage/temp",
53
+ "storage/cache_videos"
54
+ ]
55
+ for dir_path in dirs:
56
+ os.makedirs(dir_path, exist_ok=True)
57
+ print(f"📁 创建目录: {dir_path}")
58
+
59
+ def find_streamlit_file():
60
+ """查找可用的Streamlit文件"""
61
+ candidates = [
62
+ ("webui/SimpleMain.py", "📱 简化版界面"),
63
+ ("webui/Main.py", "🖥️ 完整版界面"),
64
+ ("app.py", "☁️ HF Spaces版界面")
65
+ ]
66
+
67
+ for file_path, description in candidates:
68
+ full_path = project_root / file_path
69
+ if full_path.exists():
70
+ print(f"找到界面文件: {description}")
71
+ return full_path
72
+
73
+ print("❌ 未找到任何界面文件")
74
+ return None
75
+
76
+ def main():
77
+ """主启动函数"""
78
+ print("🚀 MoneyPrinterTurbo 简化启动器")
79
+ print("=" * 50)
80
+
81
+ # 检查依赖
82
+ print("📦 检查依赖...")
83
+ if not check_dependencies():
84
+ input("按回车键退出...")
85
+ return
86
+
87
+ # 创建目录
88
+ print("\n📁 设置目录...")
89
+ setup_directories()
90
+
91
+ # 查找界面文件
92
+ print("\n🔍 查找界面文件...")
93
+ target_file = find_streamlit_file()
94
+ if not target_file:
95
+ input("按回车键退出...")
96
+ return
97
+
98
+ # 启动Streamlit
99
+ print(f"\n🌐 启动Streamlit...")
100
+ print(f"📍 访问地址: http://localhost:8501")
101
+ print("=" * 50)
102
+
103
+ cmd = [
104
+ sys.executable, "-m", "streamlit", "run", str(target_file),
105
+ "--server.port=8501",
106
+ "--server.address=localhost",
107
+ "--browser.gatherUsageStats=false",
108
+ "--server.enableCORS=true",
109
+ "--theme.base=light"
110
+ ]
111
+
112
+ try:
113
+ subprocess.run(cmd, check=True)
114
+ except KeyboardInterrupt:
115
+ print("\n👋 应用已停止")
116
+ except FileNotFoundError:
117
+ print("❌ Streamlit未安装,请运行: pip install streamlit")
118
+ except Exception as e:
119
+ print(f"❌ 启动失败: {e}")
120
+ print("💡 尝试手动运行: streamlit run webui/Main.py")
121
+
122
+ input("按回车键退出...")
123
+
124
+ if __name__ == "__main__":
125
+ main()