forked from harry0703/MoneyPrinterTurbo
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconfig.example.toml
More file actions
698 lines (610 loc) · 29.9 KB
/
Copy pathconfig.example.toml
File metadata and controls
698 lines (610 loc) · 29.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
# MoneyPrinterTurbo configuration example.
# The app copies this file to config.toml on first run. Keep API keys and other
# credentials in config.toml; do not commit your local config.toml.
# =============================================================================
# API Service / API 服务
# =============================================================================
# Log level: DEBUG, INFO, WARNING, or ERROR.
log_level = "DEBUG"
# Use 127.0.0.1 for local-only access. 0.0.0.0 listens on all network interfaces.
listen_host = "0.0.0.0"
listen_port = 8080
[app]
# Optional protection for API routes and generated files under /tasks.
# Leave empty for local backward-compatible access. When configured, clients
# must send the same value in the x-api-key request header. Keep real keys only
# in config.toml and never commit them.
# API 路由和 /tasks 生成文件的可选保护。留空时保持本地免认证行为;
# 配置后客户端必须通过 x-api-key 请求头传入同一个值。
# Task artifact requests also require this header; a browser address bar cannot
# attach custom headers, so authenticated clients should download them via HTTP.
# 任务产物下载同样需要该请求头;浏览器地址栏无法附加自定义请求头,启用鉴权后
# 应由 API 客户端携带请求头下载。
api_key = ""
# -----------------------------------------------------------------------------
# General / 通用设置
# -----------------------------------------------------------------------------
# Hide the basic configuration panel in the WebUI.
# 是否隐藏 WebUI 基础配置面板。
hide_config = false
# Script generation backend. "local" keeps the existing LLM workflow.
# "loomloom" uses a configured LoomLoom Market SkillBot to return multiple
# independently generated script candidates. The WebUI integration is optional.
script_generation_backend = "local"
# LoomLoom Public API settings. The WebUI supports the public MoneyPrinterTurbo
# SkillBot below out of the box. Configure the key in the WebUI or a private
# config.toml, and never commit a real key. The fixed SkillBot accepts subject,
# requirements, and candidateIndex for each row
# and returns inline JSON {script, videoTerms} on port "output".
loomloom_base_url = "https://loomloom.shengsuanyun.com/loom/v1"
loomloom_api_token = ""
loomloom_request_timeout_seconds = 30
loomloom_poll_interval_seconds = 2
loomloom_run_timeout_seconds = 600
loomloom_video_run_timeout_seconds = 1800
# Timeout in seconds for a single Edge TTS streaming request.
# 单次 Edge TTS 流式请求超时时间。慢网络可适当调大,设置为 0 表示禁用超时。
edge_tts_timeout = 30
# Verify TLS certificates for external APIs and material downloads.
# 默认应保持开启;仅在可信代理或自签名证书环境中临时关闭。
tls_verify = true
# -----------------------------------------------------------------------------
# Video Materials / 视频素材
# -----------------------------------------------------------------------------
# Available values: "pexels", "pixabay", "coverr", "wavespeed",
# "volcengine_seedance", "ofox", "metaso_minimax", "muapi", "loomloom",
# "openai_image", "local".
# "wavespeed" generates brand-new clips with WaveSpeed AI text-to-video models
# instead of searching stock footage; generation is billed per request.
# "loomloom" is a paid Shengsuan Cloud source and requires explicit
# confirmation in the WebUI before each generation request.
# "ofox" generates brand-new clips through the OFox multi-model video API
# (Seedance / Wan and other text-to-video models behind one key); generation
# is billed per submitted clip.
# "openai_image" generates one image per script keyword through any
# OpenAI-compatible /images/generations endpoint (local ComfyUI/SD gateways
# or cloud relays) and renders it into a video clip.
video_source = "pexels"
# API key lists support key rotation. Use straight ASCII double quotes and
# separate multiple keys with commas, for example: ["key-1", "key-2"].
# Key 必须使用英文半角双引号,多个 Key 使用英文逗号分隔。
# Register at https://www.pexels.com/api/
pexels_api_keys = []
# Register at https://pixabay.com/api/docs/
pixabay_api_keys = []
# Register at https://coverr.co/developers?ctx=header_navigation
coverr_api_keys = []
# WaveSpeed AI generates clips from your script keywords with text-to-video
# models. Create an API key at https://wavespeed.ai
wavespeed_api_keys = []
# Optional. Any WaveSpeed text-to-video model id that accepts
# prompt / aspect_ratio / duration works here.
# wavespeed_text_to_video_model = "bytedance/seedance-2.0-fast/text-to-video"
# The default model only accepts durations of 4-15 seconds. Requested clip
# durations outside the range are clamped automatically before submission
# (extra footage is trimmed by the editing pipeline). Override only if your
# chosen model supports a different range.
# wavespeed_min_duration = 4
# wavespeed_max_duration = 15
# Volcano Engine Ark Seedance uses the official asynchronous video-generation API.
# Create an Ark API key at:
# https://console.volcengine.com/ark/region:ark+cn-beijing/apikey
# When empty, VOLCENGINE_ARK_API_KEY is used, followed by the existing
# volcengine_api_key LLM setting. A single provider-specific environment variable
# avoids ambiguity with unrelated SDKs that may also use generic Ark names.
# Generation is billed per submitted clip.
volcengine_seedance_api_key = ""
volcengine_seedance_base_url = "https://ark.cn-beijing.volces.com/api/v3"
# This stable official model supports text-to-video, 2-12 second clips and 1080p.
# You may replace it with an enabled model or Endpoint ID from your Ark account.
volcengine_seedance_model = "doubao-seedance-1-0-pro-250528"
volcengine_seedance_resolution = "1080p" # "480p", "720p", or "1080p"
volcengine_seedance_min_duration = 2
volcengine_seedance_max_duration = 12
volcengine_seedance_poll_interval = 5
volcengine_seedance_run_timeout = 1800
volcengine_seedance_watermark = false
# OFox (https://ofox.ai) exposes multiple text-to-video models (Seedance, Wan,
# and more) behind one API key using an asynchronous /v1/videos API.
# Create an API key at https://ofox.ai
# When empty, the OFOX_API_KEY environment variable is used.
# Generation is billed per submitted clip.
ofox_api_key = ""
ofox_base_url = "https://api.ofox.ai/v1"
# Any text-to-video model id from the OFox catalog (GET /v1/models) works here.
ofox_text_to_video_model = "bytedance/seedance-2.0-fast"
# Supported resolutions depend on the chosen model (the default model accepts
# "480p" and "720p"); invalid values are rejected by the API with a clear
# error before any task is created.
ofox_resolution = "720p"
# The default model only accepts durations of 4-15 seconds; other models have
# different ranges (for example alibaba/wan-2.7 accepts 2-15 seconds).
# Requested clip durations outside the range are clamped automatically before
# submission (extra footage is trimmed by the editing pipeline).
ofox_min_duration = 4
ofox_max_duration = 15
# Upstream vendor pinning. Some models are served by multiple upstream
# vendors (for example the Seedance series is available from both
# "volcengine" and "byteplus"). Vendors apply their own content policies and
# regional availability. The default pins "byteplus" (the international
# vendor) for a consistent content policy and predictable routing; set
# "volcengine" for the mainland-China vendor, or set an empty string "" to
# let OFox load-balance across the available vendors. Unknown vendor names
# are rejected by the API before any task is created. Note: vendor coverage
# is per model — the default pinning targets the Seedance series; when
# switching to a non-Seedance model (e.g. alibaba/wan-2.7), set the matching
# vendor or an empty string, otherwise the API rejects the request with
# provider_type_unavailable (no task is created, nothing is billed).
ofox_provider = "byteplus"
ofox_poll_interval = 5
ofox_run_timeout = 1800
# MuAPI exposes asynchronous text-to-video endpoints under the public API.
# Create a key at https://muapi.ai and keep the API base URL rooted at
# https://api.muapi.ai/api/v1 (the endpoint value is a relative path below it).
# When empty, MUAPI_API_KEY is used. Generation is billed per submitted clip;
# the WebUI and CLI require explicit charge confirmation before generation.
muapi_api_key = ""
muapi_base_url = "https://api.muapi.ai/api/v1"
# The budget Seedance Lite route accepts 3-12 second clips and 480p/720p/1080p.
muapi_video_endpoint = "seedance-lite-t2v"
muapi_resolution = "480p"
muapi_min_duration = 3
muapi_max_duration = 12
muapi_poll_interval = 5
muapi_run_timeout = 1800
# Metaso proxies the MiniMax H3 V2 asynchronous video API. Register and obtain
# an independent API key through https://metaso.cn/minimax-h3/?s=MPT. Its mk-*
# key belongs to a separate credential system and must not reuse the MiniMax LLM key.
# When this value is empty, METASO_MINIMAX_API_KEY is used. Generation is billed
# per submitted clip; the WebUI and CLI require explicit charge confirmation.
metaso_minimax_api_key = ""
metaso_minimax_base_url = "https://metaso.cn/api/minimax"
metaso_minimax_resolution = "2K" # "768P" or "2K"
metaso_minimax_poll_interval = 10
metaso_minimax_run_timeout = 1800
# OpenAI-compatible text-to-image material source ("openai_image"). Point the
# base URL at any endpoint that speaks the OpenAI /images/generations protocol:
# a local ComfyUI/SD gateway, a self-hosted relay, or a cloud aggregator.
# Images are generated on demand (one per script keyword, billed per image by
# your provider) and rendered into short zoom-effect video clips.
# Example: "https://api.openai.com/v1" or "http://127.0.0.1:8080/v1"
openai_image_base_url = ""
# Optional for local gateways that need no auth. Leave empty to send requests
# without an Authorization header; provide one or more keys for cloud relays.
openai_image_api_keys = []
# Any image model id your endpoint accepts, for example a local SD checkpoint
# alias or a provider model name.
openai_image_model = ""
# Optional image size sent to the endpoint. The official OpenAI image API only
# accepts model-defined sizes (e.g. 1024x1024, 1024x1536, 1536x1024 or "auto"),
# so the default picks a compatible size per video aspect (portrait 1024x1536,
# landscape 1536x1024, square 1024x1024). Set a custom value (e.g. "1080x1920")
# for local gateways that accept arbitrary resolutions.
openai_image_size = ""
# Optional prompt template applied to every search term. Use the "{term}"
# placeholder to inject the keyword; leave empty to send terms as-is.
# Example: "cinematic photo of {term}, photorealistic, high detail"
openai_image_prompt_template = ""
# Optional TwelveLabs integration for semantic material ranking and video QA.
# Install the optional dependency with: uv sync --extra twelvelabs
# Create an API key at https://playground.twelvelabs.io/
twelvelabs_api_keys = []
# Reorder search terms using Marengo before downloading materials. This option
# is ignored when match_materials_to_script is enabled.
twelvelabs_rerank_terms = false
# Optional model overrides. Uncomment only when a different model is required.
# twelvelabs_marengo_model = "marengo3.0"
# twelvelabs_pegasus_model = "pegasus1.5"
# Match search terms and downloaded materials to the script narrative order.
# 默认关闭,开启后会减少随机性,使素材顺序更贴近文案结构。
match_materials_to_script = false
# Optional Sonilo video-matched original background music.
# Create a key at https://platform.sonilo.com/dashboard. The WebUI can also save
# this value, or you can set the SONILO_API_KEY environment variable instead.
sonilo_api_key = ""
sonilo_base_url = "https://api.sonilo.com"
# 单次生成流连续无数据时的最长等待秒数;它不是整个请求的总耗时上限。
sonilo_timeout = 600
# -----------------------------------------------------------------------------
# LLM Providers / 大模型提供商
# -----------------------------------------------------------------------------
# Provider definitions, default models, and default Base URLs are maintained in
# app/models/llm_provider.py. Leave model_name and base_url empty to follow the
# Registry defaults; only set them when you need an explicit override.
llm_provider = "moonshot"
# Kimi / Moonshot AI
# API key: https://platform.kimi.com?track_id=track-6eec1e56a4494e52adcaebbcbbefce59&aff=moneyprinterturbo
moonshot_api_key = ""
moonshot_base_url = ""
moonshot_model_name = ""
# Shengsuan Cloud, OpenAI-compatible multi-model API.
# API docs: https://lean.shengsuanyun.com/apidocs/api/openai-api
shengsuanyun_api_key = ""
shengsuanyun_base_url = ""
shengsuanyun_model_name = ""
# APIMart, OpenAI-compatible multi-model API.
# Sign up: https://go.apimart.ai/gh-moneyprinterturbo
# API docs: https://docs.apimart.ai/cn
apimart_api_key = ""
apimart_base_url = ""
apimart_model_name = ""
# Fluxion AI:使用 OpenAI 接口分组的 API Key,地址和模型可按分组覆盖。
# 留空时默认使用 https://fluxionai.space/v1 和 gpt-5.5。
# 模型广场:https://fluxionai.space/model-plaza
fluxionai_api_key = ""
fluxionai_base_url = ""
fluxionai_model_name = ""
# Cheaper Inference, an OpenAI-compatible multi-model gateway.
# API key: https://cheaperinference.com/signup
# Model list: https://cheaperinference.com/#models
cheaperinference_api_key = ""
cheaperinference_base_url = ""
cheaperinference_model_name = ""
# Requesty, an OpenAI-compatible multi-model gateway.
# API key: https://app.requesty.ai/api-keys
# Model list: https://www.requesty.ai/models
# EU endpoint: https://router.eu.requesty.ai/v1
requesty_api_key = ""
requesty_base_url = ""
requesty_model_name = ""
# OpenAI or another OpenAI Chat Completions-compatible provider.
# API key: https://platform.openai.com/api-keys
openai_api_key = ""
openai_base_url = ""
openai_model_name = ""
# Anthropic Claude, called through the OpenAI-compatible endpoint.
# API key: https://platform.claude.com/settings/keys
anthropic_api_key = ""
anthropic_base_url = ""
anthropic_model_name = ""
# Google Gemini
# API key: https://aistudio.google.com/app/apikey
gemini_api_key = ""
gemini_model_name = ""
# DeepSeek
# API key: https://platform.deepseek.com/api_keys
deepseek_api_key = ""
deepseek_base_url = ""
deepseek_model_name = ""
# Alibaba Cloud Qwen
# API key: https://dashscope.console.aliyun.com/apiKey
qwen_api_key = ""
qwen_model_name = ""
# Microsoft Azure OpenAI. model_name is the deployment name.
# Documentation: https://learn.microsoft.com/azure/ai-services/openai/reference
azure_api_key = ""
azure_base_url = ""
azure_model_name = ""
azure_api_version = "2024-02-15-preview"
# ByteDance VolcEngine Ark
# Console: https://console.volcengine.com/ark
volcengine_api_key = ""
volcengine_base_url = ""
volcengine_model_name = ""
# xAI Grok
# API key: https://console.x.ai/
grok_api_key = ""
grok_base_url = ""
grok_model_name = ""
# MiniMax. The API key and Base URL must use the same platform.
# China: https://platform.minimaxi.com/ | https://api.minimaxi.com/v1
# International: https://platform.minimax.io/ | https://api.minimax.io/v1
minimax_api_key = ""
minimax_base_url = ""
minimax_model_name = ""
# Xiaomi MiMo
# Documentation: https://platform.xiaomimimo.com/docs/zh-CN/quick-start/first-api-call
mimo_api_key = ""
mimo_base_url = ""
mimo_model_name = ""
# Cloudflare AI Gateway. The token requires AI Gateway Read/Edit and Workers AI
# Read permissions. Leave gateway_id empty to use the Registry default.
# Dashboard: https://dash.cloudflare.com/
cloudflare_api_key = ""
cloudflare_account_id = ""
cloudflare_gateway_id = ""
cloudflare_model_name = ""
# Alibaba ModelScope. Bind an Alibaba Cloud account before using API inference.
# Documentation: https://modelscope.cn/docs/model-service/API-Inference/intro
modelscope_api_key = ""
modelscope_base_url = ""
modelscope_model_name = ""
# AIHubMix, an OpenAI-compatible multi-model gateway.
# API key: https://aihubmix.com/
aihubmix_api_key = ""
aihubmix_base_url = ""
aihubmix_model_name = ""
# AIML API, an OpenAI-compatible multi-model API.
# API key: https://aimlapi.com/app/keys
aimlapi_api_key = ""
aimlapi_base_url = ""
aimlapi_model_name = ""
# EvoLink, an OpenAI-compatible multi-model gateway.
# API key: https://evolink.ai/dashboard/keys
evolink_api_key = ""
evolink_base_url = ""
evolink_model_name = ""
# OpenRouter, an OpenAI-compatible multi-model gateway.
# API key: https://openrouter.ai/settings/keys
# Free models: https://openrouter.ai/models?variant=free
openrouter_api_key = ""
openrouter_base_url = ""
openrouter_model_name = ""
# API Route, an OpenAI-compatible multi-model routing platform.
# API key: https://www.api-route.com
# Model list: https://www.api-route.com/pricing
api_route_api_key = ""
api_route_base_url = ""
api_route_model_name = ""
# Ollama. Leave base_url empty to use the environment-aware local default.
# Set model_name to a model installed by `ollama pull` or shown by `ollama list`.
ollama_base_url = ""
ollama_model_name = ""
# Claude Code (Claude Pro / Max / Team subscription).
# Uses the locally installed, logged-in `claude` CLI in headless mode instead of
# an API key, so no Anthropic API credit is needed. Requirements:
# - the `claude` CLI must be installed in whatever runs MoneyPrinterTurbo
# - it must be authenticated: interactively via `claude` on the host, or with
# a long-lived token from `claude setup-token` exported as
# CLAUDE_CODE_OAUTH_TOKEN (needed for Docker)
# Leave model_name empty to use the CLI's current default model, or set one such
# as "claude-opus-5" / "claude-sonnet-5". Leave cli_path empty to resolve
# `claude` from PATH. Leave timeout empty to use the 300s default.
# Calls use your Claude subscription usage limits; conflicting ANTHROPIC_* and
# CLAUDE_CODE_USE_* environment variables are removed before the CLI runs.
claude_code_model_name = ""
claude_code_cli_path = ""
claude_code_timeout = ""
# OneAPI. Use the token, Base URL, and model ID from your OneAPI deployment.
# Project: https://github.com/songquanpeng/one-api
oneapi_api_key = ""
oneapi_base_url = ""
oneapi_model_name = ""
# LiteLLM uses provider credentials from environment variables, such as
# OPENAI_API_KEY, ANTHROPIC_API_KEY, GEMINI_API_KEY, or AWS_ACCESS_KEY_ID.
# Model formats: openai/gpt-4o, anthropic/claude-sonnet-4, ollama/llama3.
# Providers: https://docs.litellm.ai/docs/providers
litellm_model_name = ""
# Groq
# API key: https://console.groq.com/keys
groq_api_key = ""
groq_base_url = ""
groq_model_name = ""
# Pollinations AI: https://enter.pollinations.ai/
pollinations_api_key = ""
pollinations_base_url = ""
pollinations_model_name = ""
# -----------------------------------------------------------------------------
# Speech, Subtitles, and Video / 语音、字幕与视频
# -----------------------------------------------------------------------------
# Xiaomi MiMo TTS shares mimo_api_key and mimo_base_url with the MiMo LLM.
mimo_tts_model_name = "mimo-v2.5-tts"
mimo_tts_style_prompt = "请用自然、清晰、适合短视频旁白的语气朗读。"
# Subtitle provider: "edge" or "whisper". Whisper is loaded only when selected
# explicitly; Edge failures do not trigger an automatic Whisper model download.
# Leave empty to skip generation.
subtitle_provider = "edge"
# FFmpeg is normally downloaded and detected automatically. If detection fails,
# download it from https://www.gyan.dev/ffmpeg/builds/ and set the executable.
# Windows example: ffmpeg_path = "C:\\path\\to\\ffmpeg.exe"
# ffmpeg_path = ""
# Fail a stalled FFmpeg concatenation after this many seconds (default: 3600).
# Increase this for unusually long videos or slow machines. On timeout, FFmpeg
# is stopped and the task reports a failure instead of staying at 50% forever.
# ffmpeg_concat_timeout_seconds = 3600
# No-voice MP3 and pause-tag narration use FFmpeg. Bound each invocation so a
# stuck conversion fails the task rather than waiting indefinitely (default:
# 600 seconds per invocation). Increase this on unusually slow machines or for
# very long narration chunks.
# ffmpeg_tts_timeout_seconds = 600
# Leave unset to follow the app default (libx264). Hardware encoders are optional;
# unsupported encoders automatically fall back to libx264.
# Available values: "libx264", "h264_nvenc", "h264_amf", "h264_qsv",
# "h264_mf", "h264_videotoolbox".
# video_codec = "libx264"
# -----------------------------------------------------------------------------
# Storage and Task Runtime / 存储与任务运行
# -----------------------------------------------------------------------------
# Public base URL used to build generated video download links. Leave empty to
# use the current API service address, or set an external reverse-proxy URL.
endpoint = ""
# Material storage: "" uses ./storage/cache_videos, "task" stores materials in
# each task directory, and an absolute path stores materials in that directory.
# Example: material_directory = "/path/to/videos"
material_directory = ""
# Optional Redis-backed task state. Keep Redis private to this application;
# untrusted writers must not be able to modify serialized task records.
enable_redis = false
redis_host = "localhost"
redis_port = 6379
redis_db = 0
redis_password = ""
# Maximum number of concurrent and queued API video-generation tasks.
max_concurrent_tasks = 5
max_queued_tasks = 100
# -----------------------------------------------------------------------------
# Cross-platform Publishing / 跨平台发布
# -----------------------------------------------------------------------------
# Upload-Post can publish generated videos to TikTok, Instagram, and YouTube.
# Create an account and API key at https://upload-post.com/
# API documentation: https://docs.upload-post.com/
upload_post_enabled = false
upload_post_api_key = ""
upload_post_username = ""
# Available values: "tiktok", "instagram", "youtube".
upload_post_platforms = ["tiktok", "instagram"]
# Automatically publish successful video outputs after generation.
upload_post_auto_upload = false
# YouTube privacy: "public", "unlisted", or "private".
upload_post_youtube_privacy_status = "public"
# Declare whether the video is made for children. Choose based on its audience.
# If unset, future YouTube uploads explicitly declare "not made for kids".
# Set true for children's content. Previously uploaded videos are not changed.
# 是否面向儿童:请根据视频实际受众设置,必须使用 TOML 布尔值 true / false。
# 未配置时,后续 YouTube 上传默认声明为非面向儿童;儿童内容请显式设置为 true。
# 与旧版省略声明字段不同,此设置不会修改已上传的视频。
upload_post_youtube_made_for_kids = false
# Maximum number of running and queued cross-post jobs per process. When the
# limit is reached, video generation still succeeds and only cross-posting is
# rejected.
# Cross-post jobs run in the current process and are not resumed after restart.
upload_post_max_pending_tasks = 10
# =============================================================================
# Whisper Subtitles / Whisper 字幕
# =============================================================================
[whisper]
# The model is downloaded automatically on first use unless a matching local
# directory exists at ./models/whisper-{model_size}.
model_size = "large-v3"
# device: "cpu" or "cuda". Common compute types include "int8" for CPU and
# "float16" or "int8_float16" for CUDA.
device = "cpu"
compute_type = "int8"
# Optional prompt that biases Whisper's decoder toward specific vocabulary
# (brand names, technical terms). Passed as initial_prompt to transcribe().
# Leave empty to disable.
# initial_prompt = ""
# =============================================================================
# Material Request Proxy / 素材请求代理
# =============================================================================
[proxy]
# Optional proxy used by Pexels, Pixabay, Coverr, and material downloads.
# Format: "http://<username>:<password>@<proxy>:<port>"
# Documentation: https://requests.readthedocs.io/en/latest/user/advanced/#proxies
# http = "http://127.0.0.1:3128"
# https = "http://127.0.0.1:1080"
# =============================================================================
# TTS Providers / 语音合成服务
# =============================================================================
[azure]
# Azure Speech TTS credentials. These are separate from Azure OpenAI settings.
# API key: https://portal.azure.com/#view/Microsoft_Azure_ProjectOxford/CognitiveServicesHub/~/SpeechServices
speech_key = ""
speech_region = ""
[siliconflow]
# SiliconFlow TTS API key: https://siliconflow.cn/
api_key = ""
[minimax_tts]
# API key: https://platform.minimax.io/user-center/basic-information/interface-key
# Global endpoint: https://api.minimax.io/v1/t2a_v2
# China endpoint: https://api.minimaxi.com/v1/t2a_v2
# When api_key is empty, the MiniMax LLM key and its matching regional endpoint
# are reused automatically. Set both fields only when TTS uses a separate key.
api_key = ""
base_url = ""
model_id = "speech-2.8-hd"
voice_id = "English_expressive_narrator"
sample_rate = 32000
bitrate = 128000
audio_format = "mp3"
channel = 1
pitch = 0
[elevenlabs]
# API key: https://elevenlabs.io/app/settings/api-keys
# Favorite voices in the ElevenLabs voice library are shown in the WebUI.
api_key = ""
# Available models include eleven_multilingual_v2, eleven_flash_v2_5, and eleven_v3.
model_id = "eleven_multilingual_v2"
# Video-to-Music uses a separate model family while sharing the same API key.
# music_base_url only configures the Video-to-Music endpoint, so it can point at
# a proxy or a self-hosted gateway while the voice API keeps the default host.
music_base_url = "https://api.elevenlabs.io"
music_model_id = "music_v2"
music_timeout = 600
[chatterbox]
# OpenAI-compatible Chatterbox TTS server. The defaults target
# travisvn/chatterbox-tts-api running locally on port 4123.
base_url = "http://127.0.0.1:4123/v1"
api_key = ""
model_id = "chatterbox"
# Voice names exposed by the configured Chatterbox server.
voices = ["default-Female"]
[kokoro]
# OpenAI-compatible Kokoro TTS server (hexgrad/Kokoro-82M, Apache-2.0, runs on CPU).
# The defaults target remsky/Kokoro-FastAPI running locally on port 8880.
base_url = "http://127.0.0.1:8880/v1"
api_key = ""
model_id = "kokoro"
# Voice names (af_heart, bf_emma, hf_alpha, ...). Leave empty to read the list
# from the server (GET {base_url}/audio/voices).
voices = []
[fish_audio]
# Fish Audio TTS service: https://fish.audio
# API key: https://fish.audio/app/developers
# You can also set the FISH_API_KEY environment variable.
api_key = ""
# Available models: "s2.1-pro-free", "s2.1-pro", "s2-pro"
model = "s2.1-pro-free"
# ── Voice selection ──────────────────────────────────────────────────────────
# Built-in presets for clear female, male, and neutral default voices are
# available out of the box. To use additional public or cloned voices, add
# entries below. Each entry is either:
# "<reference_id>:<display_name>" – a Fish Audio voice model ID with label
# "<reference_id>" – bare ID (used as both ID and label)
#
# Browse public voices at https://fish.audio and copy the model ID from the URL.
# Example: voices = ["7f92f8afb8ec43bf81429cc1c9199cb1:Friendly Narrator"]
voices = []
# ── Model & Pricing Notice ───────────────────────────────────────────────────
# The "s2.1-pro-free" model is provided under Fish Audio's developer terms and
# is subject to Fair Use Policy, rate limits, and time-limited promotional
# windows (e.g. through August 2026). There is no SLA. Please check
# https://fish.audio/pricing for current availability and commercial terms.
[voxcpm]
# ModelBest VoxCPM cloud TTS. Create an API Key and select a model with the
# `speech_synthesis` capability at https://platform.modelbest.cn/console/
# The Audio Speech API returns a streaming WAV response; MoneyPrinterTurbo
# converts it to its internal MP3 voiceover format automatically.
base_url = "https://api.modelbest.cn/v1"
api_key = ""
model_id = ""
voice_id = "default"
# =============================================================================
# WebUI Preferences / WebUI 偏好
# =============================================================================
[ui]
# Hide generation logs in the WebUI.
hide_log = false
# Open the task folder automatically after video generation completes.
# 视频生成完成后是否自动打开任务目录;关闭后仍可在任务管理中手动打开。
open_task_folder_on_completion = true
# The WebUI writes the remaining preferences automatically. Uncomment values
# below only when you want to define initial defaults manually.
# language = "zh"
# video_language = ""
# paragraph_number = 1
# video_script_prompt = ""
# custom_system_prompt = ""
# loomloom_candidate_count = 3
# loomloom_script_duration_seconds = 60
# loomloom_video_scene_count = 1
# video_concat_mode = "random" # "random" or "sequential"
# video_transition_mode = "None" # "None", "Shuffle", "FadeIn", etc.
# video_aspect_pexels = "9:16" # Stored separately for each video source.
# video_fit_mode = "cover" # "cover" fills/crops; "contain" adds black bars.
# video_clip_duration = 3
# video_clip_speed = 1.0
# video_count = 1
# tts_server = "azure-tts-v1"
# voice_name = ""
# voice_mode = "tts" # "tts", "upload", or "none"
# voice_volume = 1.0
# voice_rate = 1.0
# bgm_type = "random"
# bgm_volume = 0.2
# custom_bgm_file = ""
# sonilo_bgm_prompt = ""
# elevenlabs_music_prompt = ""
# subtitle_enabled = true
# subtitle_display_mode = "sentence" # "sentence" or "word_by_word"
# subtitle_animation = "none" # "none" or "pop_spring"
# font_name = "MicrosoftYaHeiBold.ttc"
# font_size = 60
# text_fore_color = "#FFFFFF"
# stroke_color = "#000000"
# stroke_width = 1.5
# subtitle_position = "bottom" # "top", "center", "bottom", "two_thirds_bottom", or "custom"
# custom_position = 70.0 # Percentage from the top when using "custom"
# subtitle_background_enabled = false
# subtitle_background_color = "#000000"
# rounded_subtitle_background = false