Install and Run MoneyPrinterTurbo on Windows (v1.2.7, April 2026 Guide)

Quick answer. Install MoneyPrinterTurbo v1.2.7 on Windows via the one-click package for demos, Docker Desktop for repeatability, or conda plus uv for full control. Use Python 3.11, the static Q16-x64 ImageMagick build (the dynamic one silently fails inside MoviePy), and free both port 8501 for the Streamlit WebUI and 8080 for the FastAPI service.

Last updated April 2026 — refreshed for the current MoneyPrinterTurbo release (tag v1.2.7 on the upstream repo at the time of writing), Python 3.11, the new uv dependency workflow, and current ImageMagick/FFmpeg PATH guidance for Windows 10 and Windows 11.

This is a deployment guide for getting MoneyPrinterTurbo — the open-source AI short-video generator (22k+ GitHub stars, 3.3k forks) — running cleanly on a Windows machine. It covers the three supported install paths (one-click package, Docker Desktop, manual conda + uv), the config.toml fields you actually have to fill in, and the PATH/firewall pitfalls that account for most "it doesn't start" tickets on the upstream repo.

What changed in 2026The current upstream tag is v1.2.7, which restored Edge TTS compatibility, hardened the video-merge pipeline, and adopted uv + pyproject.toml as the primary dependency manifest. requirements.txt still works for legacy installs.Default Gemini model is now gemini-2.5-flash in config.example.toml; the openai_model_name default is gpt-4o-mini; deepseek_model_name defaults to deepseek-chat (DeepSeek-V3.2 / V4 depending on the upstream alias).13+ LLM providers are now wired in: OpenAI, Azure, Moonshot, Qwen, Gemini, DeepSeek, Ollama, g4f, OneAPI, Cloudflare Workers AI, MiniMax, ERNIE, ModelScope, Pollinations, SiliconFlow.Pixabay is now a first-class video source alongside Pexels (video_source = "pexels" or "pixabay" in config.toml).WebUI default port is 8501 (Streamlit), API default port is 8080 (FastAPI). Older guides referencing only port 8080 missed the WebUI port — both must be free or remapped.The static-library ImageMagick build is now mandatory on Windows; the dynamic build silently fails inside MoviePy. Use the Q16-x64-static installer.

Want the full picture? Read our continuously-updated AI Coding Agents: Complete Guide (2026) — Cursor, Cline, Aider, OpenHands, Claude Code — how engineering teams pick and deploy AI coding agents..

TL;DR — which install path should you pick?

PathBest forSetup timeUpdatesPain points
Windows one-click package (v1.2.6 base + update.bat)Non-developers, quick demos~10 minupdate.bat pulls latest mainOlder binary; some users hit update.bat lock errors
Docker Desktop + docker compose upAnyone with WSL2 already enabled~15 mindocker compose pullNeeds Docker Desktop license for >250-employee orgs; first build is ~3 GB
Manual: conda + uv syncDevelopers iterating on the code~25 mingit pull && uv syncYou manage ImageMagick + FFmpeg + PATH yourself

If you just want videos out the door, take Docker. If you want to hack on the code, take the manual path. The one-click package is a third option, but you will hit the same PATH issues described below the moment something breaks.

What MoneyPrinterTurbo actually does

MoneyPrinterTurbo takes a topic or keyword and produces a finished short-form video (9:16 portrait or 16:9 landscape) by chaining four steps:

  1. Script generation — an LLM (your choice of provider) writes the voice-over copy.
  2. Material sourcing — the script is segmented into search terms and B-roll clips are pulled from Pexels or Pixabay.
  3. Voice + subtitles — Microsoft Edge TTS (default, free) or local Whisper handles the audio and captions; SiliconFlow is the optional paid alternative.
  4. Compositing — MoviePy + FFmpeg + ImageMagick stitch the clips, audio, captions, and background music into a 1080×1920 (or 1920×1080) MP4.

The architecture is two services: a Streamlit WebUI on port 8501 for interactive use and a FastAPI REST API on port 8080 with Swagger docs at /docs. Both can run side-by-side; Docker Compose ships them as separate containers.

System prerequisites (verified for v1.2.7)

  • OS: Windows 10 (build 19045+) or Windows 11. WSL2 is required only for the Docker path.
  • CPU / RAM: 4 cores / 4 GB minimum; 6–8 cores / 8 GB recommended. No GPU is required if you use cloud LLMs and Edge TTS.
  • Disk: ~6 GB free for the venv + Whisper models + clip cache.
  • Python: 3.11 (3.12 currently breaks one of the audio dependencies — stay on 3.11).
  • Miniconda: the latest installer from Anaconda. Used for environment isolation; venv works, but conda makes Python pinning easier on Windows.
  • Git for Windows: 2.45+.
  • ImageMagick: ImageMagick-7.x-Q16-x64-static.exe. The static build is mandatory on Windows; the dynamic build silently fails inside MoviePy.
  • FFmpeg: optional — MoneyPrinterTurbo will auto-download a portable build on first run if FFmpeg is not on your PATH.

Path A — Windows one-click package (fastest)

  1. Open the README on the official MoneyPrinterTurbo repo and follow the Baidu Netdisk or Google Drive link in the "Windows Integrated Package" section.
  2. Extract the archive to a path that contains only ASCII characters, no spaces, and no Chinese/Korean/accented characters. C:\MPT is a safe choice; C:\Users\名前\Downloads\MoneyPrinterTurbo is not.
  3. Run update.bat once. This pulls the latest main branch on top of the v1.2.6 binary and is the only way to get the v1.2.7 patches into the bundled distribution today.
  4. Edit config.toml — see the configuration reference below.
  5. Run start.bat. The WebUI opens at http://localhost:8501.

Path B — Docker Compose (most reliable)

Install Docker Desktop with WSL2 backend enabled. Then:

git clone https://github.com/harry0703/MoneyPrinterTurbo.git
cd MoneyPrinterTurbo
copy config.example.toml config.toml
notepad config.toml
docker compose up -d

The compose file launches two services: webui on :8501 and api on :8080. Both bind to 0.0.0.0 inside the container, so make sure neither host port is in use. To remap, edit the ports: stanza in docker-compose.yml before the first up.

Gotchas:

  • If docker compose up hangs at "Pulling fs layer" for >5 min, it's almost always Docker Desktop's DNS getting wedged. Restart Docker Desktop and retry.
  • The first build downloads ~3 GB of layers (Python base + FFmpeg + Whisper). Subsequent docker compose pull calls are incremental.
  • You do not need ImageMagick installed on the host — it's baked into the container image.

Path C — Manual install with conda and uv (developer mode)

Step 1 — Install Python, Miniconda, Git, ImageMagick

  • Python 3.11.x — tick Add Python to PATH on the first installer screen.
  • Miniconda — accept the default "Just me" install; do not tick "Add Miniconda3 to PATH" (it conflicts with the system Python on a lot of corporate images). Instead, always launch the "Anaconda Prompt" shortcut from the Start menu.
  • Git for Windows — defaults are fine.
  • ImageMagick 7.x Q16-x64-static — during install, tick Install development headers and libraries for C and C++ and Add application directory to your system path. The default install path is C:\Program Files\ImageMagick-7.1.x-Q16.

Step 2 — Verify your PATH (the step that fixes 80% of issues)

Open a fresh Command Prompt (not a leftover one from before the installs) and run:

python --version
git --version
magick --version
ffmpeg -version

Expected: Python 3.11.x, git version 2.45+, ImageMagick 7.1.x, and either an FFmpeg version banner or "not recognized" (FFmpeg is optional — MoneyPrinterTurbo will fetch a portable build on first run).

If magick --version fails:

  1. Press Win, type "environment variables", open Edit the system environment variablesEnvironment Variables….
  2. Under System variables, select PathEdit….
  3. Confirm C:\Program Files\ImageMagick-7.1.x-Q16 is present. If not, add it.
  4. If it's present but magick still fails, the ImageMagick installer added the entry at the top of Path; some Windows shells truncate after a duplicate entry. Move the ImageMagick line to the bottom of the list.
  5. Open a brand-new Command Prompt — the old one keeps the stale environment.

If magick works but convert calls something else, that's the Windows built-in convert.exe (filesystem conversion utility). MoneyPrinterTurbo on v1.2.7 calls magick directly via MoviePy, so this no longer matters — but old imagemagick_path entries pointing at convert.exe will fail. Point at magick.exe instead.

Step 3 — Clone, create the env, install dependencies

git clone https://github.com/harry0703/MoneyPrinterTurbo.git
cd MoneyPrinterTurbo
conda create -n MoneyPrinterTurbo python=3.11 -y
conda activate MoneyPrinterTurbo

v1.2.7 standardised on uv for dependency resolution. Install once with:

pip install uv
uv sync --frozen

The legacy path still works if you need it:

pip install -r requirements.txt

uv sync --frozen is meaningfully faster (~40s vs ~3 min on a typical Windows laptop) and resolves against the committed uv.lock, so you get the exact dependency versions the maintainers tested.

Step 4 — Configure config.toml

Copy the example file and edit it:

copy config.example.toml config.toml
notepad config.toml

The fields you actually have to set:

FieldWhat it controlsExample
video_sourceB-roll provider"pexels" or "pixabay"
pexels_api_keysOne or more Pexels keys (rotated round-robin)["abcd1234..."]
pixabay_api_keysSame, for Pixabay["wxyz5678..."]
llm_providerWhich LLM the script generator hits"openai", "deepseek", "gemini", "ollama", "g4f", …
openai_api_key / openai_model_nameIf llm_provider = "openai""sk-..." / "gpt-4o-mini"
deepseek_api_key / deepseek_model_nameIf llm_provider = "deepseek""sk-..." / "deepseek-chat"
gemini_api_key / gemini_model_nameIf llm_provider = "gemini""AIza..." / "gemini-2.5-flash"
imagemagick_pathFull path to magick.exe if the auto-detect fails"C:\\Program Files\\ImageMagick-7.1.1-Q16\\magick.exe"
ffmpeg_pathFull path to ffmpeg.exe if not on PATH"C:\\ffmpeg\\bin\\ffmpeg.exe"
subtitle_providerCaption engine"edge" (fast, free) or "whisper" (more accurate, local model download)

How to get the keys:

  • Pexels: sign in at pexels.com/api → "Your API Key" → copy. Free tier is 200 requests/hour, 20,000/month — plenty for solo creators.
  • Pixabay: pixabay.com/api/docs after sign-in. Free tier is 100 requests/60s.
  • OpenAI: platform.openai.com/api-keys. gpt-4o-mini at the time of writing is the cheapest viable model — verify pricing on the OpenAI pricing page before committing to a model.
  • DeepSeek: platform.deepseek.com. Cheapest cloud-LLM option at this scale.
  • Gemini: Google AI Studio. gemini-2.5-flash has a generous free tier.
  • Ollama: no API key — run a local model (llama3.1:8b, qwen2.5:7b, etc.) and set ollama_base_url = "http://127.0.0.1:11434".

Step 5 — Launch

WebUI:

webui.bat

This wraps streamlit run webui/Main.py --server.port 8501 and opens http://localhost:8501 in your default browser.

API:

python main.py

Swagger UI lands at http://127.0.0.1:8080/docs; ReDoc is at /redoc.

Calling the API programmatically

Once the API service is up, the canonical generation request looks like this:

import requests

url = "http://127.0.0.1:8080/api/v1/videos"
payload = {
    "video_subject": "Why vetted remote developers ship faster",
    "video_aspect": "9:16",
    "voice_name": "en-US-JennyNeural",
    "voice_volume": 1.0,
    "subtitle_enabled": True,
    "video_source": "pexels",
    "video_count": 1,
    "video_language": "en",
}
r = requests.post(url, json=payload, timeout=300)
print(r.json())

The endpoint returns a task_id; poll GET /api/v1/tasks/{task_id} for status and the final MP4 path. The exact endpoint shape can drift between point releases — always cross-check against your local /docs page.

If you're building this into a content pipeline and need engineers who can wire the API into a publishing workflow without you having to babysit the integration, Codersera can help you hire vetted remote developers for that work.

Troubleshooting — the issues people actually hit

"magick is not recognised"

Re-read the PATH section above. The most common root cause is that the user opened a Command Prompt before installing ImageMagick and never opened a fresh one. Restart the shell.

"RuntimeError: No ffmpeg exe could be found"

Either install FFmpeg from gyan.dev and add C:\ffmpeg\bin to your PATH, or set ffmpeg_path in config.toml to the full path of ffmpeg.exe. The auto-download path requires outbound HTTPS to GitHub Releases — corporate proxies sometimes block it.

"OSError: [WinError 10048] only one usage of each socket address … is normally permitted"

Port 8080 (or 8501) is already in use. Find and kill the process:

netstat -ano | findstr :8080
taskkill /PID <pid> /F

Or change the port in main.py / webui.bat. Hyper-V's reserved port ranges on Windows 11 also bite here — netsh int ipv4 show excludedportrange protocol=tcp shows what's been pre-claimed.

"FileNotFoundError: ... config.toml"

You forgot to copy config.example.toml to config.toml. The application refuses to start without it.

"Invalid API key" from the LLM

Quote your keys properly in TOML — openai_api_key = "sk-…" with double-quotes, not single-quotes. TOML parsers are strict about this and the failure mode looks like an upstream auth error.

Edge TTS request fails with "no audio received"

v1.2.7 fixed a long-standing Edge TTS regression — if you're on the v1.2.6 base distribution, run update.bat (one-click package) or git pull && uv sync (manual). Microsoft also occasionally throttles the free Edge TTS endpoint; the standard fix is to retry after 60 s or set tts_provider = "siliconflow" if you've configured a SiliconFlow key.

WebUI loads but generation hangs at "Searching materials"

Almost always the Pexels/Pixabay key — check the API request log in storage/logs/. If the key is fine, your search terms might be returning zero results; switch video_source or refine the topic.

Non-ASCII characters in the install path

MoviePy's subprocess invocation on Windows still doesn't handle UTF-8 paths reliably. Move the project to C:\MPT or similar.

Performance — what to expect on real hardware

MoneyPrinterTurbo's bottleneck on Windows is the FFmpeg encode at the end, not the LLM call. Rough numbers from the v1.2.7 default settings (60-second 1080×1920 video, Edge TTS, Pexels source, 6 clips concatenated):

HardwareEnd-to-end timeNotes
Ryzen 7 7840U laptop, 16 GB RAM, NVMe SSD, no GPU~90–120 sEncode is CPU-bound; ~70% on the FFmpeg step
i5-1240P, 16 GB, no GPU~150–180 sSame workload, ~30% slower
Docker on the same Ryzen 7~95–130 sWSL2 overhead is small for CPU work

These are observational ranges from community reports and our own runs; the upstream repo doesn't publish a benchmark suite. If you need deterministic numbers for capacity planning, generate 10 videos, average the elapsed time from the API task_id log, and use that — anything else is noise.

Cost per video (cloud LLM only)

  • OpenAI gpt-4o-mini: ~$0.0005–$0.001 per 60-second script (the script is only ~150 tokens of output, plus a small prompt).
  • DeepSeek deepseek-chat: roughly half of gpt-4o-mini at current pricing.
  • Gemini 2.5 Flash: free tier covers most hobby workloads; paid tier is in the same range as gpt-4o-mini.
  • Edge TTS: free.
  • Pexels / Pixabay: free at the volumes a single user generates.

Verify on each vendor's pricing page before basing a business model on these numbers — LLM pricing has been moving every quarter and any number that's a month old is suspect.

Security and content-policy notes

  • Don't commit config.toml — it has plaintext API keys. The repo's .gitignore excludes it; keep it that way.
  • Pexels and Pixabay licences permit commercial use without attribution, but neither covers identifiable people — be careful with AI-generated voice-overs that put words in someone's mouth visually.
  • Edge TTS is intended for end-user accessibility scenarios; Microsoft's terms restrict redistributing the audio as a standalone TTS service. Using it as part of generated video content is fine in practice but read the current terms before scaling.
  • YouTube auto-upload at scale will get you flagged — YouTube's spam policy explicitly targets "mass-produced" content. Generate sparingly, edit before posting, and add a human-narrated intro if you care about monetisation eligibility.

Alternatives and when to skip MoneyPrinterTurbo

  • FujiwaraChoki/MoneyPrinterV2 — same broad idea, simpler scope, less actively maintained.
  • Asad-Ismail/MoneyPrinterTurbo-Extended — community fork with extra clip filters.
  • elebumm/RedditVideoMakerBot — Reddit-specific story format with TTS narration; better fit if your output is "AITA"-style story videos.
  • HeyGen, Pictory, Synthesia, Runway — commercial SaaS with avatars and stock libraries; pay-per-video, no install. Pick if you don't want to operate the pipeline.

MoneyPrinterTurbo is the right choice when you want full control over the prompt, voice, B-roll source, and aspect ratio — and you're comfortable owning the failure modes. If you'd rather not, a SaaS is cheaper than the engineering hours.

FAQ

Is MoneyPrinterTurbo free?

The software is MIT-licensed and free. You pay for the LLM (cents per video at gpt-4o-mini rates), and Pexels/Pixabay/Edge TTS are free at hobbyist volumes.

Do I need a GPU?

No, not if you use cloud LLMs and Edge TTS. A GPU helps only if you switch to local Whisper for subtitles or run an Ollama LLM locally.

Can I run it without Docker on Windows 10?

Yes — Path A (one-click) and Path C (manual conda + uv) both work on Windows 10. WSL2 is only required if you want Docker.

Why does the video have black bars / wrong aspect ratio?

Set video_aspect to "9:16" for portrait or "16:9" for landscape in the API payload (or pick it in the WebUI). The default is portrait. Black bars usually mean the source clip's aspect ratio didn't match and MoviePy padded it; switching the source clip selection in config.toml typically fixes it.

Can I use a local LLM instead of OpenAI?

Yes. Install Ollama, pull a model (ollama pull qwen2.5:7b), then set llm_provider = "ollama", ollama_model_name = "qwen2.5:7b", and ollama_base_url = "http://127.0.0.1:11434" in config.toml.

How do I update from v1.2.6 to v1.2.7?

For the one-click package, run update.bat. For the manual install, git pull then uv sync --frozen (or pip install -r requirements.txt). For Docker, docker compose pull && docker compose up -d.

Why is there no v1.3.x yet?

The maintainer's release cadence is irregular and the main branch is where active development happens, which is why update.bat exists in the bundled distribution. Check the releases page for the current state.

Can I deploy this to a server and call it from a SaaS?

Yes — the FastAPI service at :8080 is designed for this. Front it with Caddy/Nginx, lock down the /docs endpoint behind auth, and queue requests with Redis (the v1.2.7 release added Redis-based task state). If your team isn't sure how to productionise this, that's the kind of work where a vetted remote engineer shaves weeks off the timeline.

References & further reading