AI-powered ad creative generator built on the WAT framework (Workflows, Agents, Tools).
AdPrinter separates AI reasoning from deterministic execution. Claude handles orchestration and decision-making. Python scripts handle API calls, image generation, and file operations. The result: reliable, repeatable ad generation that gets smarter with every iteration.
Workflows (Markdown SOPs) define what to do. Agents (Claude) decide how to do it. Tools (Python scripts) execute it. This separation keeps accuracy high -- when AI tries to handle every step directly, five steps at 90% accuracy each drops to 59% overall. WAT keeps AI focused on what it does best.
You need two API services:
- Kie.ai -- Image generation using Nano Banana 2
- Cloudinary -- Image hosting and asset management (free tier works)
# Clone the repo
git clone https://github.com/adamnoobdev/adprinter.git
cd adprinter
# Set up API keys
cp .env.example .env
# Open .env in your editor and fill in your Kie.ai and Cloudinary credentials
# Install dependencies
pip install -r requirements.txt
# Launch with Claude Code
# Claude detects you're new and walks you through brand setup automaticallytools/ Python scripts for deterministic execution
workflows/ Markdown SOPs defining what to do and how
briefs/ Ad briefs (JSON) -- source of truth for every ad
.tmp/campaigns/ Generated images (disposable, can be regenerated)
references/ Reference ads for visual inspiration
.env API keys (never committed)
| Script | Purpose |
|---|---|
brief_manager.py |
Create, update, and manage ad briefs |
generate_from_brief.py |
Generate images from brief specifications |
generate_kie.py |
Low-level Kie.ai API client |
upload_image.py |
Upload images to Cloudinary with MD5 caching |
manage_cloudinary.py |
List, delete, move Cloudinary assets |
gallery.py |
Zero-dependency local web gallery at localhost:8765 |
campaign_config.py |
Brand and category configuration |
Every generated ad teaches the system something. Feedback is saved to briefs, distilled into the brand brain, and applied to future generations. The more you use it, the better it gets.
Built by Adam Larson