Create once. Ship everywhere.
Visual Factory Kit is a deterministic image factory for marketing teams that need branded creative across every major platform without redesigning the same asset twenty different ways.
Give it a JSON request and a brand pack. It renders platform-ready PNGs for social posts, ads, thumbnails, Google Business Profile posts, Pinterest pins, carousels, Reels, Stories, OG cards, and blog headers. Every output gets a provenance file and a QA report.
No generic AI imagery. No mystery Canva resizing. No "it looked fine on my screen" creative handoff.
These are generated from the included KaiCalls brand pack and showcase request.
| Instagram Reel | Facebook Feed | Pinterest Pin |
|---|---|---|
![]() |
![]() |
![]() |
| LinkedIn Article Hero | X Landscape Post | Google Business Profile |
|---|---|---|
![]() |
![]() |
![]() |
The sample QA report is here:
examples/kaicalls-outputs/kaicalls-after-hours-qa-report.json
This repo uses KaiCalls as the live showcase because it is exactly the kind of brand this system was built for: a phone-first service that needs proof-backed images across every channel.
Most teams do not have a content problem. They have a production consistency problem.
One article, launch, offer, webinar, case study, or local promotion usually needs:
- LinkedIn image
- Facebook image
- Instagram square
- Instagram portrait
- Reel or Story cover
- Pinterest pin
- X image
- YouTube thumbnail
- Google Business Profile post
- OG card
- Blog header
- Ad variants
- Carousel slides
That work gets slow when every size is rebuilt by hand. It gets risky when brand, proof, alt text, and calls to action drift across channels.
Visual Factory Kit turns the creative into a repeatable system:
- Put the message in one request file.
- Put the brand in one brand pack.
- Render every format from a platform matrix.
- Check QA before anything ships.
The platform matrix includes formats for:
- LinkedIn article images, feed images, ads, and carousels
- Facebook feed, cover, Story, Reel, and ad images
- Instagram feed, Story, Reel, and carousel images
- Meta ad square, portrait, landscape, and Story/Reel images
- X posts, ads, and headers
- Threads square and portrait images
- TikTok vertical feed images
- YouTube thumbnails and Shorts covers
- Pinterest pins, square pins, and board covers
- Google Business Profile square and wide posts
- Google Display landscape and square ads
- Blog headers and OG cards
See the full list in:
visual_factory/platform-size-matrix.json
Visual Factory Kit has three moving parts.
- A visual request JSON
This contains the campaign message:
- headline
- subhead
- proof label
- proof source
- CTA
- phone number
- alt text
- output folder
- format list
Start with the KaiCalls showcase:
examples/kaicalls-request.json
Or start from the neutral example:
examples/sample-request.json
- A brand pack
This contains the brand system:
brand-packs/kaicalls/
├── brand.json
├── tokens.css
└── assets/
├── 26-icon-v2.png
├── 22-after-hours.png
└── ...
The repo includes:
brand-packs/kaicallsas the real showcase brand pack.brand-packs/exampleas a tiny neutral starter pack.brand-packs/fictional-lightcardandbrand-packs/fictional-darkcardas fully fictional two-brand examples, showing the same token family (--firm-*) producing a light-card and a dark-card layout from one template.
Create your own brand pack by copying either pack, replacing the transparent PNG assets, and editing brand.json and tokens.css.
- Deterministic templates
Templates live in:
visual_factory/templates/
They are HTML/CSS templates rendered through Playwright. Important text blocks are measured in-browser and shrink-to-fit before screenshots are saved.
Install dependencies:
pip install -r requirements.txt
python -m playwright install chromiumRender the KaiCalls showcase:
python visual_factory\render.py render --request examples\kaicalls-request.json --brand brand-packs\kaicallsRender the neutral example:
python visual_factory\render.py render --request examples\sample-request.json --brand brand-packs\exampleOpen the output folders:
examples/kaicalls-outputs/
examples/outputs/
Use the images only when the QA report says:
"passed": true{
"client": "KaiCalls",
"formats": [
"linkedin_article_hero",
"instagram_reel",
"facebook_feed_square",
"pinterest_pin",
"google_business_post"
],
"message": {
"headline": "Missed calls do not wait for office hours.",
"subhead": "Kai answers, remembers, acts, and briefs after the phone rings.",
"proof_label": "64% of calls came after hours",
"cta": "Call Kai",
"phone_number": "(417) 386-2898"
},
"output": {
"alt_text": "KaiCalls social graphic with Kai holding a retro phone beside a proof label about after-hours calls.",
"destination_dir": "examples/kaicalls-outputs",
"filename_prefix": "kaicalls-after-hours"
}
}The full schema is here:
visual_factory/schemas/visual-request.schema.json
Every render writes:
- a PNG
- a
.provenance.jsonsidecar - a request-level QA report
The QA report checks:
- exact platform dimensions
- text overflow
- mobile preview readability
- required alt text
- proof source presence
- provenance sidecar presence
- banned public-facing terms
This is useful for teams that care about claims, attribution, accessibility, and brand consistency.
Every image gets a sidecar file that records:
- request ID
- content ID
- template
- dimensions
- brand assets used
- font stack
- proof source
- render timestamp
- AI assistance notes
- approval status
This makes the system easier to audit later. It also helps creative teams remember where a claim, asset, or template came from.
Good brand packs include:
- a transparent logo or icon
- a transparent product, mascot, or brand visual
- real brand colors in
tokens.css - a default phone number or CTA only if useful
- enough contrast for small mobile previews
Avoid:
- low-resolution logos
- baked-in white backgrounds
- circular badge wrappers around transparent assets
- generic AI art
- proof claims without a source file
Use this for:
- launch announcement creative
- weekly social post batches
- local business profile posts
- article hero images
- Pinterest board seeding
- ad concept variations
- YouTube thumbnail systems
- founder-led LinkedIn posts
- carousel production
- proof-backed campaign assets
The factory now includes twelve differentiated, deterministic social-native layouts alongside its campaign-card formats. They are designed for thought leadership, proof, process education, event promotion, and customer stories without relying on generic generated imagery.
| Format key | Family | Primary use |
|---|---|---|
apple_notes_portrait |
Notes sheet | Concise insight |
message_thread_square |
Message thread | Objection handling |
tweet_card_square |
Public post card | Strong point of view |
search_autocomplete_portrait |
Search prompt | Search-led education |
receipt_audit_portrait |
Receipt audit | Cost of inaction |
notion_checklist_portrait |
Operating checklist | Process proof |
whiteboard_diagram_landscape |
Whiteboard model | Framework explainer |
metrics_scorecard_square |
Metrics scorecard | Benchmarks and proof |
launch_calendar_portrait |
Launch calendar | Dates and events |
testimonial_quote_square |
Testimonial quote | Approved customer voice |
inbox_alert_portrait |
Inbox alert | Response urgency |
workflow_timeline_landscape |
Workflow timeline | Step-by-step explanation |
Start with examples/social-native-request.json to render the complete library. Use fictional or approved display data for all interface-inspired formats; do not represent a real person’s private messages, inbox, receipts, reviews, or account activity.
The kit now contains 36 distinct template families. In addition to its platform-oriented campaign cards, it includes social-native notes, threads, search, checklists, whiteboards, scorecards, pull quotes, and an extended library of browser, pipeline, calendar, team-update, excerpt, redline, feedback, review, map, terminal, Kanban, newspaper, pricing, chart, funnel, product-release, case-study, contrast, offer, countdown, rules, and carousel-cover formats.
Read TEMPLATE_CATALOG.md for the complete catalog and render examples/template-catalog-request.json for the 24 extended categories.
The kit now includes an original twelve-role carousel system designed around strong hooks, simple teaching slides, visible progress, proof, contrast, and a clear closing action. The roles are cover hook, pattern interrupt, problem, mistake, framework, step, checklist, proof, before/after, myth/truth, quote, and CTA. See VIRAL_CAROUSEL_PLAYBOOK.md for the design logic and examples/viral-carousel-request.json for a complete twelve-slide example deck.
Add a platform:
- Add a key to
visual_factory/platform-size-matrix.json. - Point it at an existing template with
template_file. - Render the sample request.
- Fix template spacing until QA passes.
Add a template:
- Create a new HTML file in
visual_factory/templates/. - Use
shared.css. - Add
data-fitto important text blocks. - Add the template to the platform matrix.
- Render and check QA.
Add a brand:
- Copy
brand-packs/exampleorbrand-packs/kaicalls. - Replace the transparent PNGs in
assets. - Edit
brand.json. - Edit
tokens.css. - Render with
--brand brand-packs/your-brand.
This is not an AI image generator.
It is a production system for turning approved message, proof, brand assets, and templates into correctly sized marketing images. The creative direction stays human. The resizing, rendering, provenance, and QA become automatic.
MIT for the code in this repository. The KaiCalls brand pack and example images are included as a public showcase and marketing example. Bundled fonts are third-party assets under their own licenses. See:
visual_factory/fonts/NOTICE.md
Built and maintained by Connor Gallic — connect on LinkedIn.





