Type-Think-AI/doodle-ai

🎨 Turn any photo into a hand-drawn doodle avatar β€” AI-powered creative studio with 12 pluggable skills. Astro 5 + Cloudflare Workers + Mastra Agent

4

stars

1

commits

TypeScript

primary language

Sep 10, 2026

updated

doodleai.art
ai
ai-art
astro
avatar
cloudflare-workers
creative-ai
doodle
hackathon
image-generation
mastra
open-source

README

Doodle AI β€” Turn any photo into a hand-drawn doodle

🎨 Doodle AI

Turn any photo into a playful hand-drawn doodle avatar β€” powered by AI.

🌐 Live Demo β€’ ✨ Skills β€’ πŸš€ Quick Start β€’ 🀝 Contributing

Astro 5 Cloudflare Workers Mastra MIT License Stars


What is Doodle AI?

Doodle AI is a conversational creative studio that turns your photos into hand-drawn doodle art. Chat with an AI agent, attach a photo, pick a skill β€” and get a unique doodle avatar, collage, sticker sheet, or gift image in seconds.

Try it now: doodleai.art β€” 5 free credits on signup, no credit card needed.


✨ Skills

Every generation style is a pluggable Skill. Drop in a SKILL.md file and you've added a new creative mode.


Doodle Avatar
1:1 hand-drawn avatar from a photo

Doodle Collage
6 close-up poses in a 3Γ—2 grid

Full-Body Collage
6 full-body action poses

Surprise Me
Fictional character, no photo needed

Sticker Pack
Die-cut sticker sheet image

Mood Captions
3Γ—2 collage with hand-lettered text

Gift Doodle
Greeting card image from a photo

Chibi Mini-Me
Overlay chibi on your original photo

Crayon Self
Ugly-cute crayon marker style

Couple Doodle
Two-person doodle from a couple photo

Pet Portrait
Your pet as a hand-drawn character

Faceless Portrait
Aesthetic portrait without facial features

+ more coming: Emotional Modes, Seasonal Pack, and community-contributed skills.


πŸ–ΌοΈ Sample Outputs

Doodle avatar with wavy hair and round glasses Doodle avatar with curly hair in a top bun Doodle avatar in a knitted beanie


πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Browser (Astro 5 SSG + client scripts)             β”‚
β”‚  Chat β†’ Prompt Composer β†’ Skill Picker β†’ Canvas     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                         β”‚ POST /api/chat
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Cloudflare Worker (doodleai-agent)                  β”‚
β”‚  Mastra Agent β†’ picks skill β†’ calls generate tool   β”‚
β”‚  Credits: 1/gen, 5 free on signup, refund on fail   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                         β”‚ PicX API
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  PicX Studio β€” image generation + CDN hosting       β”‚
β”‚  Permanent URL returned immediately                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
LayerTech
FrontendAstro 5, TypeScript, scoped CSS
RuntimeCloudflare Workers + D1 + KV
AgentMastra framework
ModelOpenRouter (configurable, default: Gemini 3.7 Flash)
GenerationPicX API (server-owned key)
AuthBetter Auth (Google OAuth)
Canvastldraw 5.3 (React island)
Package managerpnpm

πŸš€ Quick Start

git clone https://github.com/Type-Think-AI/doodle-ai.git
cd doodle-ai
pnpm install
cp .dev.vars.example .dev.vars
# Fill in: OPENROUTER_API_KEY, PICX_API_KEY, GOOGLE_CLIENT_ID/SECRET, BETTER_AUTH_SECRET
pnpm dev:local

Open http://localhost:4321 β€” local D1/KV, no Cloudflare account needed.

Environment variables

VariableRequiredDescription
OPENROUTER_API_KEYβœ…Routes to the configured LLM
OPENROUTER_MODEL❌Default: google/gemini-3.7-flash
PICX_API_KEYβœ…Server-owned key for image generation
BETTER_AUTH_SECRETβœ…Session signing secret
GOOGLE_CLIENT_IDβœ…Google OAuth
GOOGLE_CLIENT_SECRETβœ…Google OAuth

πŸ› οΈ Adding a New Skill

Every skill is a self-contained directory under src/mastra/skills/:

src/mastra/skills/your-skill/
β”œβ”€β”€ SKILL.md          # Metadata + agent instructions
└── references/       # Optional supporting docs
  1. Create your SKILL.md with frontmatter (id, displayName, category, etc.)
  2. Add the generation mode to src/lib/doodle-constants.ts
  3. Add the prompt branch in src/mastra/tools/generate-doodle.ts
  4. Run pnpm build β€” the loader validates everything and fails with a helpful message if anything is missing

The build catches broken skills before they can reach production.


πŸ“ Project Structure

src/
β”œβ”€β”€ mastra/          # Agent, skills (SKILL.md), and generation tool
β”œβ”€β”€ pages/           # Astro routes (/, /c/[id], /skills/, /settings, /api/*)
β”œβ”€β”€ components/      # UI: Sidebar, Composer, Canvas, Footer, Navbar
β”œβ”€β”€ scripts/app/     # Client controllers (chat, sidebar, media-picker)
β”œβ”€β”€ lib/             # Auth, credits, content, admin queries
β”œβ”€β”€ content/         # Editorial articles (keyword-first URLs)
β”œβ”€β”€ db/              # Drizzle schema (D1)
└── styles/          # Global CSS layers

🀝 Contributing

We welcome contributions! See CONTRIBUTING.md for guidelines.

Good first issues:

  • Add a new skill (just a SKILL.md + prompt branch)
  • Improve an existing article in src/content/articles/
  • Fix a bug from the issues tab
# Validate your changes
pnpm exec tsc --noEmit
pnpm build
pnpm lint

πŸ—ΊοΈ Roadmap

  • 12 generation skills (avatar, collage, stickers, pet, couple, chibi, crayon, faceless, gift, mood, surprise, full-body)
  • tldraw infinite canvas for generated images
  • Multiplayer roadmap board (Durable Objects)
  • Team workspaces and shared credits
  • SEO: keyword-first URLs, JSON-LD, FAQ schema, llms.txt
  • Stripe checkout for credit packs
  • User-created custom skills
  • Video generation (provider-neutral adapter)
  • WhatsApp + Discord channel connectors
  • Character continuity across generations

πŸ“„ License

MIT Β© 2026 Type-Think-AI


Try Doodle AI
β†’ Try Doodle AI free

Contributors

Type-Think-AI/doodle-ai

🎨 Turn any photo into a hand-drawn doodle avatar β€” AI-powered creative studio with 12 pluggable skills. Astro 5 + Cloudflare Workers + Mastra Agent

4

stars

1

commits

TypeScript

primary language

Sep 10, 2026

updated

doodleai.art
ai
ai-art
astro
avatar
cloudflare-workers
creative-ai
doodle
hackathon
image-generation
mastra
open-source

README

Doodle AI β€” Turn any photo into a hand-drawn doodle

🎨 Doodle AI

Turn any photo into a playful hand-drawn doodle avatar β€” powered by AI.

🌐 Live Demo β€’ ✨ Skills β€’ πŸš€ Quick Start β€’ 🀝 Contributing

Astro 5 Cloudflare Workers Mastra MIT License Stars


What is Doodle AI?

Doodle AI is a conversational creative studio that turns your photos into hand-drawn doodle art. Chat with an AI agent, attach a photo, pick a skill β€” and get a unique doodle avatar, collage, sticker sheet, or gift image in seconds.

Try it now: doodleai.art β€” 5 free credits on signup, no credit card needed.


✨ Skills

Every generation style is a pluggable Skill. Drop in a SKILL.md file and you've added a new creative mode.


Doodle Avatar
1:1 hand-drawn avatar from a photo

Doodle Collage
6 close-up poses in a 3Γ—2 grid

Full-Body Collage
6 full-body action poses

Surprise Me
Fictional character, no photo needed

Sticker Pack
Die-cut sticker sheet image

Mood Captions
3Γ—2 collage with hand-lettered text

Gift Doodle
Greeting card image from a photo

Chibi Mini-Me
Overlay chibi on your original photo

Crayon Self
Ugly-cute crayon marker style

Couple Doodle
Two-person doodle from a couple photo

Pet Portrait
Your pet as a hand-drawn character

Faceless Portrait
Aesthetic portrait without facial features

+ more coming: Emotional Modes, Seasonal Pack, and community-contributed skills.


πŸ–ΌοΈ Sample Outputs

Doodle avatar with wavy hair and round glasses Doodle avatar with curly hair in a top bun Doodle avatar in a knitted beanie


πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Browser (Astro 5 SSG + client scripts)             β”‚
β”‚  Chat β†’ Prompt Composer β†’ Skill Picker β†’ Canvas     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                         β”‚ POST /api/chat
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Cloudflare Worker (doodleai-agent)                  β”‚
β”‚  Mastra Agent β†’ picks skill β†’ calls generate tool   β”‚
β”‚  Credits: 1/gen, 5 free on signup, refund on fail   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                         β”‚ PicX API
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  PicX Studio β€” image generation + CDN hosting       β”‚
β”‚  Permanent URL returned immediately                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
LayerTech
FrontendAstro 5, TypeScript, scoped CSS
RuntimeCloudflare Workers + D1 + KV
AgentMastra framework
ModelOpenRouter (configurable, default: Gemini 3.7 Flash)
GenerationPicX API (server-owned key)
AuthBetter Auth (Google OAuth)
Canvastldraw 5.3 (React island)
Package managerpnpm

πŸš€ Quick Start

git clone https://github.com/Type-Think-AI/doodle-ai.git
cd doodle-ai
pnpm install
cp .dev.vars.example .dev.vars
# Fill in: OPENROUTER_API_KEY, PICX_API_KEY, GOOGLE_CLIENT_ID/SECRET, BETTER_AUTH_SECRET
pnpm dev:local

Open http://localhost:4321 β€” local D1/KV, no Cloudflare account needed.

Environment variables

VariableRequiredDescription
OPENROUTER_API_KEYβœ…Routes to the configured LLM
OPENROUTER_MODEL❌Default: google/gemini-3.7-flash
PICX_API_KEYβœ…Server-owned key for image generation
BETTER_AUTH_SECRETβœ…Session signing secret
GOOGLE_CLIENT_IDβœ…Google OAuth
GOOGLE_CLIENT_SECRETβœ…Google OAuth

πŸ› οΈ Adding a New Skill

Every skill is a self-contained directory under src/mastra/skills/:

src/mastra/skills/your-skill/
β”œβ”€β”€ SKILL.md          # Metadata + agent instructions
└── references/       # Optional supporting docs
  1. Create your SKILL.md with frontmatter (id, displayName, category, etc.)
  2. Add the generation mode to src/lib/doodle-constants.ts
  3. Add the prompt branch in src/mastra/tools/generate-doodle.ts
  4. Run pnpm build β€” the loader validates everything and fails with a helpful message if anything is missing

The build catches broken skills before they can reach production.


πŸ“ Project Structure

src/
β”œβ”€β”€ mastra/          # Agent, skills (SKILL.md), and generation tool
β”œβ”€β”€ pages/           # Astro routes (/, /c/[id], /skills/, /settings, /api/*)
β”œβ”€β”€ components/      # UI: Sidebar, Composer, Canvas, Footer, Navbar
β”œβ”€β”€ scripts/app/     # Client controllers (chat, sidebar, media-picker)
β”œβ”€β”€ lib/             # Auth, credits, content, admin queries
β”œβ”€β”€ content/         # Editorial articles (keyword-first URLs)
β”œβ”€β”€ db/              # Drizzle schema (D1)
└── styles/          # Global CSS layers

🀝 Contributing

We welcome contributions! See CONTRIBUTING.md for guidelines.

Good first issues:

  • Add a new skill (just a SKILL.md + prompt branch)
  • Improve an existing article in src/content/articles/
  • Fix a bug from the issues tab
# Validate your changes
pnpm exec tsc --noEmit
pnpm build
pnpm lint

πŸ—ΊοΈ Roadmap

  • 12 generation skills (avatar, collage, stickers, pet, couple, chibi, crayon, faceless, gift, mood, surprise, full-body)
  • tldraw infinite canvas for generated images
  • Multiplayer roadmap board (Durable Objects)
  • Team workspaces and shared credits
  • SEO: keyword-first URLs, JSON-LD, FAQ schema, llms.txt
  • Stripe checkout for credit packs
  • User-created custom skills
  • Video generation (provider-neutral adapter)
  • WhatsApp + Discord channel connectors
  • Character continuity across generations

πŸ“„ License

MIT Β© 2026 Type-Think-AI


Try Doodle AI
β†’ Try Doodle AI free

Contributors

Languages

TypeScript

51.0%

Astro

23.8%

JavaScript

14.3%

HTML

7.9%

CSS

3.0%