Skip to main content
Docker is the recommended way to run MoneyPrinterTurbo. It handles all system dependencies — including ImageMagick and ffmpeg — automatically, and works consistently across Windows, macOS, and Linux.

Prerequisites

Before you begin, make sure you have the following installed:
Windows users: Docker Desktop on Windows requires WSL2 (Windows Subsystem for Linux 2). Follow Microsoft’s setup guides before installing Docker:
  1. Install WSL2
  2. Use WSL2 with Docker containers

Setup

1

Clone the repository

git clone https://github.com/harry0703/MoneyPrinterTurbo.git
cd MoneyPrinterTurbo
2

Copy the configuration file

cp config.example.toml config.toml
This creates your local configuration file. You must edit it before starting the container — the app will not work without valid API keys.
3

Edit config.toml with your API keys

Open config.toml in a text editor and fill in at minimum:
[app]
# Video material source — get a free key at https://www.pexels.com/api/
pexels_api_keys = ["your_pexels_api_key"]

# Which LLM provider to use (e.g. "openai", "moonshot", "azure", "ollama")
llm_provider = "openai"
openai_api_key = "sk-..."
openai_model_name = "gpt-4o-mini"
MoneyPrinterTurbo supports many LLM providers: OpenAI, Moonshot, Azure, gpt4free, Qwen, Google Gemini, Ollama, DeepSeek, ERNIE, Pollinations, ModelScope, and more. Set llm_provider to match the provider whose API key you have, then fill in that provider’s section in config.toml.
4

Start the containers

docker-compose up
This builds and starts two containers: one for the Web UI (port 8501) and one for the API server (port 8080). The first run takes several minutes while the image is built and Python dependencies are installed.
Newer versions of Docker ship with Compose as a built-in plugin. If docker-compose is not found, use the alternative syntax instead:
docker compose up
5

Access the application

Once the containers are running, open your browser:
InterfaceURL
Web UIhttp://localhost:8501
API docs (Swagger)http://localhost:8080/docs
API docs (ReDoc)http://localhost:8080/redoc

docker-compose.yml reference

The project’s docker-compose.yml defines two services that build from the same Dockerfile:
x-common-volumes: &common-volumes
  - ./:/MoneyPrinterTurbo

services:
  webui:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: "moneyprinterturbo-webui"
    ports:
      - "8501:8501"
    command: ["streamlit", "run", "./webui/Main.py", "--browser.serverAddress=127.0.0.1", "--server.enableCORS=True", "--browser.gatherUsageStats=False"]
    volumes: *common-volumes
    restart: always
  api:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: "moneyprinterturbo-api"
    ports:
      - "8080:8080"
    command: ["python3", "main.py"]
    volumes: *common-volumes
    restart: always
Both services mount the current directory into the container, so changes to config.toml and any generated content in storage/ are immediately reflected on the host without rebuilding.

Updating to the latest version

To pull the latest changes and restart the containers:
git pull
docker-compose down
docker-compose up --build
The --build flag forces Docker to rebuild the image with any updated dependencies.
If you have made local changes to source files (not just config.toml), use git stash before pulling to avoid merge conflicts:
git stash
git pull
git stash pop
docker-compose down
docker-compose up --build

Running in detached mode

To run the containers in the background so they persist after closing the terminal:
docker-compose up -d
To view logs from a detached deployment:
docker-compose logs -f
To stop detached containers:
docker-compose down

Build docs developers (and LLMs) love