MoneyPrinterTurbo: a pinned Python stack that turns a topic into a short video
MoneyPrinterTurbo uses language models and an automated media pipeline to create short videos from a topic or keyword.
At a glance
- What is it?
- harry0703/MoneyPrinterTurbo chains a language model, stock footage matching, text to speech, Whisper subtitles and MoviePy into one WebUI and API. It works as a self-hosted tool, but its pins, Docker defaults and provider keys decide how smoothly it runs for you.
- Who is it for?
- MoneyPrinterTurbo fits people who want a self-hosted pipeline from topic to finished short video and are comfortable managing API keys and a pinned Python 3.11+ environment. It is a poor fit if you need to upgrade PyAV or Pillow freely, or expect the Docker setup to be reachable from other machines without editing it.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on November 13, 2026, and from our analysis. They are not legal advice.
Star history
- harry0703/MoneyPrinterTurbo143,286 ★ · +43,607
| Repository | 2026-07-28 | 2026-11-13 |
|---|---|---|
| harry0703/MoneyPrinterTurbo | 99.7k | 143.3k |
43,607 Stars in the last 108 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
One pipeline from topic to video, exposed as WebUI, API and CLI
You give MoneyPrinterTurbo a video topic or a keyword. It then writes the video script with a language model, matches footage to it, generates subtitles and background music, and composes a high definition short video. The same pipeline is reachable three ways. The Streamlit WebUI lives in webui/Main.py, the HTTP API starts from main.py, and pyproject.toml registers a console script named mpt that points at app.launcher:main, which the package description calls the WebUI and CLI entry. There is also a cli.py at the top of the repository. The Python package itself is named mpt, not moneyprinterturbo, so search for that name if you install it as a package.
pyproject.toml and uv.lock are the source of truth, requirements.txt is legacy
The comment at the top of pyproject.toml says the main dependencies now live there and that uv.lock fixes the environment so different machines do not resolve different version combinations. requirements.txt is kept for legacy pip installs and mirrors the same pins. The project requires Python 3.11 or newer, and the Docker image builds on python:3.11-slim-trixie. On Python 3.13 and later an extra package, audioop-lts 0.2.2, is pulled in, alongside pydub 0.25.1. If you install with plain pip from requirements.txt you lose the lock file guarantees, so two machines can still drift apart on transitive packages.
faster-whisper holds PyAV below version 19, and MoviePy caps Pillow
Almost every dependency is pinned to an exact version: moviepy 2.2.1, streamlit 1.66.1, fastapi 0.136.3, openai 2.24.0, litellm 1.103.1, faster-whisper 1.1.0. One pin is a ceiling rather than an exact value. av is held below 19 because faster-whisper passes metadata_errors to av.open(), and PyAV 19 removed that argument. You cannot upgrade PyAV past 18 without breaking subtitle transcription. Pillow has a similar problem: MoviePy caps the Pillow version, so the patched Pillow release does not install by default. requirements.txt gives the override command for that case:
uv pip install --overrides requirements-security.txt -r requirements.txtIf your environment already has other packages that need a newer av, Pillow or starlette, you will need a separate virtual environment for MoneyPrinterTurbo.
The Docker build defaults to Chinese package mirrors
The Dockerfile declares ARG DOCKER_BUILD_MIRROR=china and ARG PIP_USE_OFFICIAL=0. Local builds therefore prefer domestic Chinese mirrors for apt and pip. Only the GitHub Actions job that publishes the GHCR image switches the argument to default, because overseas runners were slow against the Chinese mirrors and image publishing stalled. The apt step installs git and ffmpeg over HTTPS, retries three times with a five second pause, and now fails the build if every mirror fails. An older loop ended with sleep, which always returned 0 and produced unusable images with no ffmpeg. If you build outside China, a stock build pulls from mirrors that may be slow for you, and you have to pass the build argument yourself.
docker-compose.yml binds to 127.0.0.1 and mounts your whole checkout
The default compose file defines two services built from the same Dockerfile. webui runs Streamlit on port 8501 and api runs python3 main.py on port 8080:
- "127.0.0.1:8501:8501"
- "127.0.0.1:8080:8080"Both ports are bound to the loopback address, so another machine on your network cannot open the WebUI or call the API until you edit the port mapping. That is a safe default, but a remote server will not expose the WebUI until you change the binding. Both services mount the repository root at /MoneyPrinterTurbo, so generated files and your config land inside your checkout. The image runs chmod 777 on that directory, and both services use restart: always, so they come back after a reboot until you stop them. The repository also ships docker-compose.gpu.yml, docker-compose.release.yml and docker-compose.claude.yml with matching Dockerfiles; read them before assuming which one fits your hardware.
Every stage depends on a provider key you configure
MoneyPrinterTurbo does not generate anything on its own models. The dependency list shows the integrations it calls: openai, litellm and google-genai for text, dashscope, azure-cognitiveservices-speech and edge-tts for voice, and faster-whisper for local subtitle timing. Configuration starts from config.example.toml. TwelveLabs video understanding is optional and only needed when twelvelabs_api_keys is set; install it with:
uv sync --extra twelvelabsThe README opens with a long sponsor table of model and API resellers, several with referral links, and the Kimi note claims that K3.1 Pro writes the copy, extracts footage search keywords and picks the shots. Treat that table as advertising, not as a benchmark of which provider produces better videos. The project gives you no cost ceiling, so each generated video spends tokens and media credits on whatever accounts you connect.
Arabic subtitles work without system font libraries
Subtitle rendering for Arabic script goes through khatt 0.4.0 with its video extra, which bundles HarfBuzz and FreeType in the wheel, so no system libraries are needed for shaping. The README is available in Simplified Chinese, English and Japanese.
Frequent releases on a fully pinned stack
The repository is not archived and the last push was on 2026-11-02. Releases came in quick succession: v1.3.7 on 2026-09-13, v1.3.8 on 2026-10-03 and v1.3.9 on 2026-10-21, which matches the version in pyproject.toml. Because nearly every package is pinned exactly, an upgrade means moving to a new release and re-syncing the lock file, not bumping a single library. Mixing a newer streamlit or fastapi into an existing install breaks the tested combination, and the starlette pin carries a comment saying it keeps a media response compatibility test passing.
Editorial conclusion
MoneyPrinterTurbo fits people who want a self-hosted pipeline from topic to finished short video and are comfortable managing API keys and a pinned Python 3.11+ environment. It is a poor fit if you need to upgrade PyAV or Pillow freely, or expect the Docker setup to be reachable from other machines without editing it. Before committing, check config.example.toml for the providers you plan to pay for and decide whether the default Chinese build mirrors suit your network.
Frequently asked questions
How do I install MoneyPrinterTurbo?
Clone harry0703/MoneyPrinterTurbo from GitHub, then either sync the locked environment from pyproject.toml and uv.lock with uv, install requirements.txt with pip for the legacy path, or use docker-compose.yml to build the webui and api services. Python 3.11 or newer is required.
Can AI print money with MoneyPrinterTurbo?
MoneyPrinterTurbo creates short videos from a topic or keyword using language models and an automated media pipeline. It produces videos, and every run spends credits on the model and media providers you configure.
Which ports does MoneyPrinterTurbo use in Docker Compose?
The WebUI runs on 8501 and the API on 8080, both bound to 127.0.0.1 in docker-compose.yml, so they are only reachable from the host machine by default.
Why does MoneyPrinterTurbo pin av below 19?
faster-whisper passes metadata_errors to av.open(), and PyAV 19 removed that argument, so MoneyPrinterTurbo requires av<19.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/harry0703-moneyprinterturbo)[](https://hysenlabs.com/projects/harry0703-moneyprinterturbo)Star history chart for your README
[](https://hysenlabs.com/projects/harry0703-moneyprinterturbo)Was this useful?