π¨ 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
Turn any photo into a playful hand-drawn doodle avatar β powered by AI.
π Live Demo β’ β¨ Skills β’ π Quick Start β’ π€ Contributing
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.
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.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 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 β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Layer | Tech |
|---|---|
| Frontend | Astro 5, TypeScript, scoped CSS |
| Runtime | Cloudflare Workers + D1 + KV |
| Agent | Mastra framework |
| Model | OpenRouter (configurable, default: Gemini 3.7 Flash) |
| Generation | PicX API (server-owned key) |
| Auth | Better Auth (Google OAuth) |
| Canvas | tldraw 5.3 (React island) |
| Package manager | pnpm |
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.
| Variable | Required | Description |
|---|---|---|
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 |
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
SKILL.md with frontmatter (id, displayName, category, etc.)src/lib/doodle-constants.tssrc/mastra/tools/generate-doodle.tspnpm build β the loader validates everything and fails with a helpful message if anything is missingThe build catches broken skills before they can reach production.
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
We welcome contributions! See CONTRIBUTING.md for guidelines.
Good first issues:
SKILL.md + prompt branch)src/content/articles/# Validate your changes
pnpm exec tsc --noEmit
pnpm build
pnpm lint
MIT Β© 2026 Type-Think-AI
1 commits
TypeScript
51.0%
Astro
23.8%
JavaScript
14.3%
HTML
7.9%
CSS
3.0%
π¨ 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
Turn any photo into a playful hand-drawn doodle avatar β powered by AI.
π Live Demo β’ β¨ Skills β’ π Quick Start β’ π€ Contributing
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.
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.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 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 β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Layer | Tech |
|---|---|
| Frontend | Astro 5, TypeScript, scoped CSS |
| Runtime | Cloudflare Workers + D1 + KV |
| Agent | Mastra framework |
| Model | OpenRouter (configurable, default: Gemini 3.7 Flash) |
| Generation | PicX API (server-owned key) |
| Auth | Better Auth (Google OAuth) |
| Canvas | tldraw 5.3 (React island) |
| Package manager | pnpm |
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.
| Variable | Required | Description |
|---|---|---|
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 |
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
SKILL.md with frontmatter (id, displayName, category, etc.)src/lib/doodle-constants.tssrc/mastra/tools/generate-doodle.tspnpm build β the loader validates everything and fails with a helpful message if anything is missingThe build catches broken skills before they can reach production.
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
We welcome contributions! See CONTRIBUTING.md for guidelines.
Good first issues:
SKILL.md + prompt branch)src/content/articles/# Validate your changes
pnpm exec tsc --noEmit
pnpm build
pnpm lint
MIT Β© 2026 Type-Think-AI
1 commits
TypeScript
51.0%
Astro
23.8%
JavaScript
14.3%
HTML
7.9%
CSS
3.0%