File: README.md
MoneyPrinter V2
An Application that automates the process of making money online.
MPV2 (MoneyPrinter Version 2) is, as the name suggests, the second version of the MoneyPrinter project. It is a complete rewrite of the original project, with a focus on a wider range of features and a more modular architecture.
Note: MPV2 needs Python 3.12 to function effectively.
Watch the YouTube video here
Features
- Twitter Bot (with CRON Jobs =>
scheduler) - YouTube Shorts Automator (with CRON Jobs =>
scheduler) - Affiliate Marketing (Amazon + Twitter)
- Find local businesses & cold outreach
Versions
MoneyPrinter has different versions for multiple languages developed by the community for the community. Here are some known versions:
- Chinese: MoneyPrinterTurbo
If you would like to submit your own version/fork of MoneyPrinter, please open an issue describing the changes you made to the fork.
Installation
โ ๏ธ If you are planning to reach out to scraped businesses per E-Mail, please first install the Go Programming Language.
git clone https://github.com/FujiwaraChoki/MoneyPrinterV2.git
cd MoneyPrinterV2
# Copy Example Configuration and fill out values in config.json
cp config.example.json config.json
# Create a virtual environment
python -m venv venv
# Activate the virtual environment - Windows
.\venv\Scripts\activate
# Activate the virtual environment - Unix
source venv/bin/activate
# Install the requirements
pip install -r requirements.txtUsage
# Run the application
python src/main.pyDocumentation
All relevant documents can be found here.
Scripts
For easier usage, there are some scripts in the scripts directory that can be used to directly access the core functionality of MPV2 without the need for user interaction.
All scripts need to be run from the root directory of the project, e.g. bash scripts/upload_video.sh.
Contributing
Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us. Check out docs/Roadmap.md for a list of features that need to be implemented.
Code of Conduct
Please read CODE_OF_CONDUCT.md for details on our code of conduct, and the process for submitting pull requests to us.
License
MoneyPrinterV2 is licensed under Affero General Public License v3.0. See LICENSE for more information.
Acknowledgments
Disclaimer
This project is for educational purposes only. The author will not be responsible for any misuse of the information provided. All the information on this website is published in good faith and for general information purposes only. The author does not make any warranties about the completeness, reliability, and accuracy of this information. Any action you take upon the information you find on this website (FujiwaraChoki/MoneyPrinterV2) is strictly at your own risk. The author will not be liable for any losses and/or damages in connection with the use of our website.
File: docs/AffiliateMarketing.md
AFM
This class is responsible for the Affiliate Marketing part of MPV2. It uses Ollama (as all other classes) as its way to utilize the power of LLMs, in this case, to generate tweets, based on information about an Amazon Product. MPV2 will scrape the page of the product, and save the product title, and product features, thus having enough information to be able to create a pitch for the product, and post it on Twitter.
Relevant Configuration
In your config.json, you need the following attributes filled out, so that the bot can function correctly.
{
"firefox_profile": "The path to your Firefox profile (used to log in to Twitter)",
"headless": true,
"ollama_base_url": "http://127.0.0.1:11434",
"threads": 4
}Roadmap
Here are some features that are planned for the future:
- Scrape more information about the product, to be able to create a more detailed pitch.
- Join online communities related to the product, and post a pitch (with a link to the product) there.
- Reply to tweets that are related to the product, with a pitch for the product.
File: docs/Configuration.md
Configuration
All your configurations will be in a file in the root directory, called config.json, which is a copy of config.example.json. You can change the values in config.json to your liking.
Values
verbose:boolean- Iftrue, the application will print out more information.firefox_profile:string- The path to your Firefox profile. This is used to use your Social Media Accounts without having to log in every time you run the application.headless:boolean- Iftrue, the application will run in headless mode. This means that the browser will not be visible.ollama_base_url:string- Base URL of your local Ollama server (default:http://127.0.0.1:11434).ollama_model:string- Ollama model to use for text generation (e.g.llama3.2:3b). If empty, the app queries Ollama at startup and lets you pick from the available models interactively.twitter_language:string- The language that will be used to generate & post tweets.nanobanana2_api_base_url:string- Nano Banana 2 API base URL (default:https://generativelanguage.googleapis.com/v1beta).nanobanana2_api_key:string- API key for Nano Banana 2 (Gemini image API). If empty, MPV2 falls back to environment variableGEMINI_API_KEY.nanobanana2_model:string- Nano Banana 2 model name (default:gemini-3.1-flash-image-preview).nanobanana2_aspect_ratio:string- Aspect ratio for generated images (default:9:16).threads:number- The amount of threads that will be used to execute operations, e.g. writing to a file using MoviePy.is_for_kids:boolean- Iftrue, the application will upload the video to YouTube Shorts as a video for kids.google_maps_scraper:string- The URL to the Google Maps scraper. This will be used to scrape Google Maps for local businesses. It is recommended to use the default value.zip_url:string- The URL to the ZIP file that contains the to be used Songs for the YouTube Shorts Automater.email:object:smtp_server:string- Your SMTP server.smtp_port:number- The port of your SMTP server.username:string- Your email address.password:string- Your email password.
google_maps_scraper_niche:string- The niche you want to scrape Google Maps for.scraper_timeout:number- The timeout for the Google Maps scraper.outreach_message_subject:string- The subject of your outreach message.{{COMPANY_NAME}}will be replaced with the company name.outreach_message_body_file:string- The file that contains the body of your outreach message, should be HTML.{{COMPANY_NAME}}will be replaced with the company name.stt_provider:string- Provider for subtitle transcription. Default islocal_whisper. Options:local_whisperthird_party_assemblyai
whisper_model:string- Whisper model for local transcription (for examplebase,small,medium,large-v3).whisper_device:string- Device for local Whisper (auto,cpu,cuda).whisper_compute_type:string- Compute type for local Whisper (int8,float16, etc.).assembly_ai_api_key:string- Your Assembly AI API key. Get yours from here.tts_voice:string- Voice for KittenTTS text-to-speech. Default isJasper. Options:Bella,Jasper,Luna,Bruno,Rosie,Hugo,Kiki,Leo.font:string- The font that will be used to generate images. This should be a.ttffile in thefonts/directory.imagemagick_path:string- The path to the ImageMagick binary. This is used by MoviePy to manipulate images. Install ImageMagick from here and set the path to themagick.exeon Windows, or on Linux/MacOS the path toconvert(usually /usr/bin/convert).script_sentence_length:number- The number of sentences in the generated video script (default:4).post_bridge:object:enabled:boolean- Enables Post Bridge cross-posting after successful YouTube uploads.api_key:string- Your Post Bridge API key. If empty, MPV2 falls back toPOST_BRIDGE_API_KEY.platforms:string[]- Platforms to target. Supported values in v1 aretiktokandinstagram.account_ids:number[]- Optional fixed Post Bridge account IDs to avoid account-selection prompts.auto_crosspost:boolean- Iftrue, cross-post automatically after a successful YouTube upload. Iffalse, interactive runs ask and cron runs skip.
Example
{
"verbose": true,
"firefox_profile": "",
"headless": false,
"ollama_base_url": "http://127.0.0.1:11434",
"ollama_model": "",
"twitter_language": "English",
"nanobanana2_api_base_url": "https://generativelanguage.googleapis.com/v1beta",
"nanobanana2_api_key": "",
"nanobanana2_model": "gemini-3.1-flash-image-preview",
"nanobanana2_aspect_ratio": "9:16",
"threads": 2,
"zip_url": "",
"is_for_kids": false,
"google_maps_scraper": "https://github.com/gosom/google-maps-scraper/archive/refs/tags/v0.9.7.zip",
"email": {
"smtp_server": "smtp.gmail.com",
"smtp_port": 587,
"username": "",
"password": ""
},
"google_maps_scraper_niche": "",
"scraper_timeout": 300,
"outreach_message_subject": "I have a question...",
"outreach_message_body_file": "outreach_message.html",
"stt_provider": "local_whisper",
"whisper_model": "base",
"whisper_device": "auto",
"whisper_compute_type": "int8",
"assembly_ai_api_key": "",
"tts_voice": "Jasper",
"font": "bold_font.ttf",
"imagemagick_path": "Path to magick.exe or on linux/macOS just /usr/bin/convert",
"script_sentence_length": 4,
"post_bridge": {
"enabled": false,
"api_key": "",
"platforms": ["tiktok", "instagram"],
"account_ids": [],
"auto_crosspost": false
}
}Environment Variable Fallbacks
GEMINI_API_KEY: used whennanobanana2_api_keyis empty.POST_BRIDGE_API_KEY: used whenpost_bridge.api_keyis empty.
Example:
export GEMINI_API_KEY="your_api_key_here"
export POST_BRIDGE_API_KEY="your_post_bridge_api_key_here"See PostBridge.md for the full Post Bridge setup and behavior details.
File: docs/Roadmap.md
MPV2 Roadmap
This document outlines the features that need to be implemented in MPV2.
Features
- Automated Cold Calling
- Item Flipping (such as sneakers)
- Create a Short based on long-form content
- Subtitles for Shorts
Adding a new feature
If you want to add a new feature to MPV2, please create a new issue and label it with enhancement. After that, create a new branch and start working on the feature. Once you are done, create a pull request and assign it to the issue you created earlier.
Contributing
Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.
File: docs/TwitterBot.md
Twitter Bot
This bot is designed to automate the process of growing a Twitter account. Once you created a new account, provide the path to the Firefox Profile and the bot will start posting tweets based on the subject you provided during the account creation.
Relevant Configuration
In your config.json, you need the following attributes filled out, so that the bot can function correctly.
{
"twitter_language": "Any Language, formatting doesn't matter",
"headless": true,
"llm": "The Large Language Model you want to use, check Configuration.md for more information",
}File: docs/YouTube.md
YouTube Shorts Automater
MPV2 uses a similar implementation of V1 (see MPV1), to generate Video-Files and upload them to YouTube Shorts.
In contrast to V1, V2 uses AI generated images as the visuals for the video, instead of using stock footage. This makes the videos more unique and less likely to be flagged by YouTube. V2 also supports music right from the get-go.
Relevant Configuration
In your config.json, you need the following attributes filled out, so that the bot can function correctly.
{
"firefox_profile": "The path to your Firefox profile (used to log in to YouTube)",
"headless": true,
"llm": "The Large Language Model you want to use to generate the video script.",
"image_model": "What AI Model you want to use to generate images.",
"threads": 4,
"is_for_kids": true
}Roadmap
Here are some features that are planned for the future:
- Subtitles (using either AssemblyAI or locally assembling them)