Generate beautiful, editable, on-brand images, videos, and marketing assets. Brand-aware. Text-overlay-native. Export-ready.
Star this repo ⭐ — it helps more designers and founders find it.
Most AI image tools can keep up until you need text on the image, the same look across a 10-slide deck, or a hero shot that matches last week's hero shot. Manu Design is the workflow engine for that.
Three things in one app:
| What it does | Where you live | |
|---|---|---|
| 🪄 Studio | Prompt → style preset → aspect → Generate. fal.ai, Replicate, or Lovable Gemini, your call. | /studio |
| ✍️ Compose Editor | Live SVG/PNG text overlay on any image. Eyebrow, headline, accent, sub, CTA — re-renders in 300 ms. Zero AI re-spend. | /compose-editor |
| 🎨 Canvas | Multi-layer, Canva-style compositor. Drag, resize, rotate, stack. Export PNG. | /canvas |
git clone https://github.com/manujajay/manudesign.git
cd manudesign
echo "FAL_KEY=$YOUR_FAL_KEY" > .env
bun install && bun dev # → http://localhost:5173/studioThis is the loop, top to bottom. Every step on its own works fine — the power is in chaining them.
┌──────────────┐ ┌──────────────────┐ ┌──────────────────┐ ┌────────────────┐
│ STUDIO │ ──▶ │ COMPOSE EDITOR │ ──▶ │ CANVAS │ ──▶ │ DOWNLOAD │
│ │ │ │ │ │ │ │
│ prompt → │ │ swap headline, │ │ multi-layer, │ │ PNG / MP4 │
│ style → │ │ eyebrow, CTA, │ │ drag, resize, │ │ saved locally │
│ generate │ │ brand mark │ │ rotate, stack │ │ (auto) │
└──────────────┘ └──────────────────┘ └──────────────────┘ └────────────────┘
(AI spend) (no AI spend) (no AI spend)
Pick a marketing style preset (Apple Minimal, Editorial Chromatic, Nike Bold, …), type a prompt, hit Generate. Behind the scenes the preset locks in lighting, lens, mood, and picks the recommended composer template so the text overlay sits where it should.
- Image · 14 style presets · 5+ models · fal.ai · Replicate · Lovable Gemini
- Video · Kling 2.5 Turbo Pro · Seedance · Veo 3 · Hailuo 02
- Best-of-N: 1–4 variants in parallel, auto-pick the cleanest layout
- Auto-download every result to your computer (toggle in the Studio) — generated URLs at fal/replicate expire eventually; this keeps them yours forever
Paste any image URL (or click "Edit text" on a Studio result). Choose a composer template, edit the copy fields:
| Field | What it controls |
|---|---|
brandLead + brandLabel |
Top-left brand mark (e.g. your/ BRAND) |
eyebrow |
Small uppercase tag line above the headline |
headline |
Main multi-line statement |
accent |
Substring of the headline rendered in italic serif |
sub |
Smaller paragraph under the headline |
ctaLabel |
Pill-style call-to-action button |
footerUrl |
Bottom-right URL stamp |
Every keystroke triggers a ~300 ms SVG re-render. No AI spend. Switch between light and dark templates with one click. Built-in WCAG-AA contrast check flags unreadable text-over-image and suggests a theme flip.
hero_light · problem_dark · cta_light · story_light ·
story_dark · stat_card · quote_card · linkedin_wide ·
modules_grid · trusted_by
Same prompt-style, different composer:
![]() hero_light
|
![]() problem_dark
|
![]() stat_card
|
![]() cta_light
|
![]() story_light
|
Open the same generated image (or any uploaded file) in Canvas for Canva-style multi-layer editing: text layers with full font / weight / colour / stroke / shadow / opacity / rotation control, drag-snap alignment, undo/redo, layer reorder, export as PNG per layer or as a combined flatten.
History lives in your browser's localStorage (zero backend), but two
things make it durable:
- Auto-download toggle in the Studio — every successful generation is
saved straight to your Downloads folder with a sensible filename
(
manudesign-warm-analog-film-2026-05-19T10-00-00.png). - Export / Import JSON buttons on the History panel — dump the whole index as a portable JSON file you can sync between machines, archive, or version-control.
![]() 01 · Hero |
![]() 02 · Problem |
![]() 03 · Stat |
![]() 04 · Modules |
![]() 05 · CTA |
![]() 07 · Quote |
![]() 08 · Story hero |
![]() 09 · Story body |
![]() 10 · LinkedIn |
Plus Liquid Death, TikTok Native, Gary Vee Hustle, Jordi Colin Samir, Mobile Editing Club. Add your own in
src/lib/marketing-styles.ts.
git clone https://github.com/manujajay/manudesign.git
cd manudesign
bun install # or: npm install / pnpm install
cp .env.example .env # then paste your FAL_KEY
bun dev # → http://localhost:5173Open http://localhost:5173/studio. Type a prompt, pick a style, hit Generate.
| Env var | What it unlocks |
|---|---|
REPLICATE_API_TOKEN |
Replicate provider (Flux 1.1 Pro / Ultra / Schnell, Ideogram v2). Get one. |
LOVABLE_API_KEY |
"✦ AI variants" prompt rewriting + Lovable Gemini image editing. |
| Manu Design | Canva Magic | Midjourney | Lovable / v0 image | |
|---|---|---|---|---|
| Self-hostable & MIT | ✅ | ❌ | ❌ | ❌ |
| Crisp text (SVG, not in-image) | ✅ | partial | ❌ | partial |
| Brand-aware style presets | ✅ | partial | ❌ | ❌ |
| Multi-provider (fal, Replicate, Lovable, …) | ✅ | n/a | n/a | n/a |
| Bring-your-own model keys | ✅ | ❌ | ❌ | ❌ |
| Local-first history | ✅ | ❌ | ❌ | ❌ |
| Multi-layer canvas editor | ✅ | ✅ | ❌ | ❌ |
| Video generation | ✅ (Kling/Seedance/Veo) | ❌ | ❌ | ❌ |
| Free and private | ✅ | ❌ | ❌ | ❌ |
We aren't trying to replace Figma. We're trying to replace the "prompt → Photoshop the headline back in" loop.
| Layer | Choice |
|---|---|
| Framework | TanStack Start (Vite + React) |
| Runtime | Bun (dev) · Cloudflare Workers (prod) |
| Generation | fal.ai · Replicate · Lovable Gemini |
| Persistence | Browser localStorage · auto-download to disk · JSON export |
| Styling | Tailwind v4 · shadcn/ui · Radix primitives |
| Language | TypeScript everywhere |
| Provider | Models |
|---|---|
| fal.ai | Seedream v4 · Flux Pro 1.1 Ultra · Flux Dev · Recraft v3 · Ideogram v2 · Kling 2.5 Turbo Pro · Seedance v1 Pro · Veo 3 Fast · Hailuo 02 |
| Replicate | Flux 1.1 Pro · Flux 1.1 Pro Ultra · Flux Schnell · Ideogram v2 |
| Lovable Gemini | Nano Banana 2 · Gemini 3 Pro · Gemini 2.5 Flash |
Adding OpenAI Images, Together, or local ComfyUI is ~30 lines in
src/lib/generate.core.ts. PRs welcome.
src/
├── routes/
│ ├── index.tsx # Landing page
│ ├── _authenticated/
│ │ ├── studio.tsx # Generate images and video
│ │ ├── compose-editor.tsx # Edit text overlay on existing image
│ │ └── canvas.tsx # Multi-layer Canva-style compositor
├── lib/
│ ├── marketing-styles.ts # 14 curated style presets — add your own
│ ├── composers.ts # SVG overlay templates
│ ├── generate.core.ts # Provider-agnostic generation pipeline
│ ├── generation-history.ts # localStorage + auto-download + export/import
│ └── contrast-check.ts # WCAG-AA contrast analyzer
└── server.ts # Cloudflare Worker entry
The
/_authenticateddirectory is a leftover from a prior auth-gated build — it's now a pass-through. Routes there are just "the main app surface."
Open src/lib/marketing-styles.ts. Each
preset is a single object — paste a new one with your own prompt clause and
recommended composer template, drop a showcase image into
src/assets/showcase/, and it appears in the Studio picker immediately.
src/lib/composers.ts defines every SVG template.
Add a new one and register it in COMPOSE_TEMPLATES to use from the
Compose Editor.
src/lib/generate.core.ts ships with
adapters for fal.ai, Replicate, and Lovable Gemini. Adding Together,
OpenAI Images, or local ComfyUI is ~30 lines: implement a new generator
function, add a case to runProvider, register it in
MODELS_BY_PROVIDER in src/routes/_authenticated/studio.tsx.
Production target is Cloudflare Workers via Wrangler:
bun run build
bunx wrangler deploy
bunx wrangler secret put FAL_KEY
bunx wrangler secret put REPLICATE_API_TOKEN # optional
bunx wrangler secret put LOVABLE_API_KEY # optionalOr one-click:
Self-host on Netlify, Fly, or any Node-compatible host — every key is read at runtime, no secrets baked into the build.
This repo is the engine. It's MIT, batteries included, and runs standalone. Fork it, ship internal tooling, build a vertical product on top, roll your own SaaS — the license allows it.
We run a commercial layer on top at manudesign.theaiinternship.com for teams that want it managed:
| Open-source core (this repo) | Managed / hosted | |
|---|---|---|
| Single-user studio | ✅ | ✅ |
| All 14 style presets + composer templates | ✅ | ✅ |
| Bring-your-own provider keys | ✅ | ✅ (managed billing optional) |
| Local history + JSON export | ✅ | ✅ + synced across devices |
| Team workspaces & shared brand kits | ✅ | |
| Premium brand-tuned style presets | ✅ | |
| Enterprise SSO + audit log | ✅ | |
| Premium workflows (carousels-from-archive, brand-compliance, ad-pack generation) | ✅ | |
| Asset library with team-wide search | ✅ | |
| White-glove brand-kit setup | ✅ |
Want the hosted version, a brand-tuned preset pack, or a custom team workflow? hello@theaiinternship.com
The core gets more useful when more contributors bring providers, templates, and presets. Up next:
- Replicate provider — shipped in 0.1.0
- OpenAI Images provider
- Local ComfyUI provider (zero API keys)
- Brand-kit JSON spec → consumed by every composer
- Workflow YAML — declarative multi-step generation
- CLI:
manudesign generate --style editorial-chromatic --prompt "…"
PRs welcome on any of these.
- Never commit
.env— already gitignored. FAL_KEY/REPLICATE_API_TOKEN/LOVABLE_API_KEYare server-side only; they never reach the browser. All provider calls go through TanStack server functions.- If you accidentally push a key, rotate it in the provider dashboard
first, then rewrite history with
git filter-repo.
Found a vulnerability? See SECURITY.md.
PRs welcome — see CONTRIBUTING.md and CODE_OF_CONDUCT.md. Easy wins:
- ✨ New marketing style presets — drop a preset + showcase image
- 🎨 New compose templates — typography overlays
- 🔌 New providers — OpenAI Images, Together, ComfyUI, custom backends
- 🧠 Workflow recipes — multi-step pipelines as code
- 🐛 Bug fixes with a clear repro
If this is useful, ⭐ on GitHub — each star helps another designer / founder find this tool.
MIT. Use it, fork it, ship it.
Made by @manujajay for The AI Internship. If you build something with this, tell me — I'd love to see.






















