How to Configure MoneyPrinterTurbo Using config.toml
MoneyPrinterTurbo reads all runtime settings from a config.toml file in the repository root, automatically copying from config.example.toml on first launch, and exposes configuration sections as Python globals through app/config/config.py.
MoneyPrinterTurbo is an open-source AI video generation tool that automates content creation from text prompts. All operational parameters—from API keys to UI preferences—are controlled through a single TOML configuration file. This guide explains exactly how the configuration system works, where the config.toml file lives, and how to modify settings both manually and programmatically.
Where MoneyPrinterTurbo Stores Configuration
The application resolves the configuration file path dynamically in app/config/config.py. The loader calculates the repository root and expects config.toml to exist at the top level:
root_dir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))
config_file = f"{root_dir}/config.toml"
If config.toml is missing when the application starts, the load_config() function (lines 12‑33) automatically creates it by copying config.example.toml, ensuring users always begin with a documented template.
How the Configuration Loader Works
The load_config() function handles three critical tasks:
- Template fallback — If
config.tomldoes not exist, it copiesconfig.example.tomlto the expected location (lines 17‑21). - TOML parsing with BOM support — It parses the file using the
tomllibrary, with a UTF‑8‑SIG fallback to handle Windows-style byte-order marks (lines 25‑32). - Global exposure — The parsed dictionary is stored in module-level variable
_cfg, and top-level sections (app,azure,siliconflow,ui,proxy) are exposed as convenient globals (lines 44‑55).
The complementary save_config() function (lines 35‑42) serializes the in-memory configuration back to disk. This allows runtime changes—such as adding API keys through the Web UI—to persist across restarts.
Key Configuration Sections in config.toml
The config.example.toml template defines several functional groups. Below are the essential sections you must configure to run MoneyPrinterTurbo.
App Settings
The [app] section controls video sources, LLM providers, and API credentials:
[app]
# Choose video source: "pexels" or "pixabay"
video_source = "pexels"
# API keys for stock footage (comma-separated lists work in the UI)
pexels_api_keys = ["YOUR_PEXELS_KEY"]
pixabay_api_keys = ["YOUR_PIXABAY_KEY"]
# LLM configuration
llm_provider = "openai"
openai_api_key = "sk-..."
openai_model_name = "gpt-4o-mini"
# Optional: Hide the basic settings panel in the Web UI
hide_config = false
UI Customization
The [ui] section defines appearance parameters for the generated video overlays:
[ui]
font_name = "MicrosoftYaHeiBold.ttc"
font_size = 60
text_fore_color = "#FFFFFF"
hide_log = false
Proxy Configuration
For users behind corporate firewalls, the [proxy] section routes external API calls:
[proxy]
http = "http://user:pass@proxy:3128"
https = "http://user:pass@proxy:3128"
The underlying requests library automatically consumes these values when fetching assets from Pexels or Pixabay.
Modifying Configuration via the Web UI
The Streamlit interface in webui/Main.py interacts directly with the global configuration objects. When you edit a field—such as adding a new Pexels API key—the UI updates config.app["pexels_api_keys"] and immediately calls config.save_config() to persist the change (see implementation around lines 945‑959).
This design allows non-technical users to manage API keys without touching the filesystem, while developers can still version-control config.toml for deployment automation.
Accessing and Modifying Configuration in Python
Service modules throughout the codebase import the global configuration to retrieve credentials at runtime.
Reading Configuration Values
from app.config import config
# Retrieve video source with fallback default
source = config.app.get("video_source", "pexels")
print(f"Fetching footage from: {source}")
# Access Azure Speech credentials (as seen in app/services/voice.py)
azure_key = config.azure.get("speech_key")
Updating Configuration Programmatically
To modify settings in code and persist them to disk:
from app.config import config
# Append a new API key at runtime
new_key = "sk-new-api-key"
if new_key not in config.app.get("openai_api_key", []):
config.app["openai_api_key"] = new_key
config.save_config() # Writes to config.toml immediately
Initial Setup Commands
On first run, generate the configuration file by starting the application:
# Auto-creates config.toml from config.example.toml
python -m main
# Or with Docker:
docker compose up
After generation, edit config.toml directly or use the Web UI at http://localhost:8501 to complete setup.
Summary
- Location:
config.tomlresides in the repository root, resolved dynamically byapp/config/config.py. - Bootstrap: The system copies
config.example.tomltoconfig.tomlautomatically if the latter is missing. - Structure: Key sections include
[app]for API keys and providers,[ui]for visual styling, and[proxy]for network routing. - Persistence: The
save_config()function writes runtime changes back to disk, enabling both manual file edits and UI-driven updates. - Access: Import
from app.config import configto read current values anywhere in the codebase.
Frequently Asked Questions
What happens if I delete config.toml?
MoneyPrinterTurbo will regenerate it on the next startup by copying config.example.toml. You will lose any custom API keys or settings, so back up the file before deletion.
Can I use multiple API keys for the same service?
Yes. The [app] section supports arrays for providers like Pexels. Define them as TOML arrays: pexels_api_keys = ["key1", "key2"]. The application rotates through them or uses them for redundancy.
How do I change the font used in generated videos?
Edit the [ui] section in config.toml. Set font_name to a valid system font file (e.g., ArialBold.ttf) and adjust font_size and text_fore_color to match your branding.
Is it safe to commit config.toml to Git?
No. The file contains sensitive API keys. The repository includes config.toml in .gitignore by default. Commit config.example.toml instead, which contains placeholder values and documentation.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →