How to Install MoneyPrinterTurbo: Complete Setup Guide

Clone the repository, create a Python 3.11 virtual environment, install dependencies from requirements.txt, configure your API keys in config.toml, and run python main.py to start the FastAPI server on 127.0.0.1:8080.

MoneyPrinterTurbo is a FastAPI-based service that automatically generates short videos complete with AI scripts, stock footage, subtitles, and voiceovers. Installing MoneyPrinterTurbo requires only a lightweight Python setup to get the full MVC application running locally. This guide covers both local Python installation and Docker deployment using the actual source code structure from the harry0703/MoneyPrinterTurbo repository.

Local Installation Steps

Follow these steps to install MoneyPrinterTurbo in a local Python environment. This method is ideal for development and gives you direct control over the configuration files.

1. Clone the Repository

Start by cloning the source code from GitHub:

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

2. Create a Python Virtual Environment

The application requires Python 3.11. Use conda to create an isolated environment:

conda create -n MoneyPrinterTurbo python=3.11
conda activate MoneyPrinterTurbo

3. Install Dependencies

Install the required packages listed in requirements.txt:

pip install -r requirements.txt

This installs FastAPI, Uvicorn, and other core dependencies needed by the application entry point in main.py.

4. Install ImageMagick (Optional)

ImageMagick is required for subtitle rendering. Without it, video generation will fail at the subtitle composition stage.

  • Windows: Download the static build, install it, and set the path in config.toml.
  • macOS: brew install imagemagick
  • Ubuntu: sudo apt-get install imagemagick

5. Configure the Application

Copy the example configuration template and edit it with your credentials:

cp config.example.toml config.toml

Edit config.toml to add your Pexels API key, LLM provider (OpenAI, Azure, or local), and ImageMagick binary path. The configuration loader in app/config/config.py parses this file at runtime to populate config.app settings and config.listen_port.

6. Start the FastAPI Server

Run the entry point script to start the Uvicorn server:

python main.py

By default, the server listens on 127.0.0.1:8080. The interactive API documentation is available at http://127.0.0.1:8080/docs, which reflects all endpoints registered in app/router.py and implemented in app/controllers/v1/video.py.

7. Launch the Web UI (Optional)

To use the browser interface instead of direct API calls, start the Streamlit-based UI:

  • Linux/macOS: sh webui.sh
  • Windows: webui.bat

These scripts execute streamlit run webui/Main.py and automatically open your default browser.

Docker Deployment

For production servers or to avoid dependency conflicts, use the containerized setup.

Start with Docker Compose

From the project root, run:

docker compose up

This builds the image, installs ImageMagick automatically, and exposes:

  • The FastAPI backend on 0.0.0.0:8080
  • The Streamlit Web UI on 0.0.0.0:8501

Verifying the Installation

Test your setup by creating a video through the REST API. The business logic resides in app/services/, while the endpoint definitions live in app/controllers/v1/video.py.

Create a Video Task

import requests

api_url = "http://127.0.0.1:8080/videos"
payload = {
    "theme": "How to make coffee",
    "language": "en",
    "video_width": 1080,
    "video_height": 1920,
    "subtitle_provider": "edge"
}
resp = requests.post(api_url, json=payload)
print(resp.json())  # Contains task_id

Poll for Completion

Task state is managed by the controller layer in app/controllers/manager/:

import time
import requests

task_id = "your-task-id"
status_url = f"http://127.0.0.1:8080/tasks/{task_id}"

while True:
    r = requests.get(status_url)
    data = r.json()["data"]
    if data.get("status") == "finished":
        print("Video ready:", data["videos"])
        break
    time.sleep(2)

Download the Result

Retrieve the final MP4 file:

download_url = f"http://127.0.0.1:8080/download/{task_id}/final-1.mp4"
r = requests.get(download_url)

with open("final.mp4", "wb") as f:
    f.write(r.content)

Key Architecture Components

Understanding these files helps with troubleshooting:

Summary

  • Local install: Clone, create Python 3.11 environment, run pip install -r requirements.txt, copy config.example.toml to config.toml, then execute python main.py.
  • Docker install: Run docker compose up from the project root to expose ports 8080 (API) and 8501 (UI).
  • Prerequisites: Python 3.11 is required; ImageMagick is optional but necessary for subtitle rendering.
  • Configuration: Edit config.toml to set your Pexels API key and LLM provider before starting the server.
  • Entry points: main.py starts the API, while webui.sh or webui.bat launches the browser interface.
  • API location: Endpoints are defined in app/controllers/v1/video.py and documented at /docs when the server runs.

Frequently Asked Questions

What Python version is required to install MoneyPrinterTurbo?

Python 3.11 is recommended. The project uses modern type hints and async features that require this version. Create your environment specifically with python=3.11 to avoid compatibility issues with dependencies in requirements.txt.

Is ImageMagick mandatory for MoneyPrinterTurbo?

ImageMagick is optional for the API server but required for video generation. If you skip the installation, the FastAPI server will start, but video creation will fail when the subtitle service in app/services/ attempts to render text overlays. Install it via Homebrew on macOS, APT on Ubuntu, or download the static binary for Windows.

How do I run MoneyPrinterTurbo on a remote server?

Change the listen host in config.toml from 127.0.0.1 to 0.0.0.0, then start the server with python main.py. For production environments, use the Docker Compose setup instead of the local Python installation, as it handles networking and process isolation automatically.

Can I use MoneyPrinterTurbo without the Web UI?

Yes, the Web UI is completely optional. The core functionality is exposed through the REST API defined in app/controllers/v1/video.py. You can interact directly with endpoints like POST /videos and GET /tasks/{task_id} using HTTP clients or the Python requests library, as shown in the verification examples above.

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:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →