← all repositories
mrslimslim/gpt-image-canvas

A whiteboard that actually generates the pictures you scribble about

Local-first AI image workspace built on tldraw, with an Agent that plans multi-image jobs and executes them as dependency graphs.

610 stars TypeScript Image · Video · AudioAgents
gpt-image-canvas
Velocity · 7d
+15
★ / day
Trend
steady
star history

What it does

GPT Image Canvas is a self-hosted creative workspace where you arrange AI-generated images on an infinite tldraw canvas. You prompt, generate, drag, and connect images; the app stores everything—project state, generation history, assets—in local SQLite. It wraps GPT Image 2 (or any OpenAI-compatible image endpoint) with a Hono API and a Vite React frontend.

The interesting bit

The Agent tab is where it gets weird-in-a-good-way. You describe a multi-image task, the planner LLM builds a DAG of generation jobs, and execution runs independent branches in parallel while dependent jobs wait for their upstream outputs. A single plan caps at 16 images, and you can retry failed nodes without regenerating the whole graph. It’s basically Makefiles for mood boards.

Key highlights

  • Reference-image generation: select any canvas image and use it as visual context for the next generation
  • Three provider fallbacks: .env config, in-app saved keys (masked in SQLite), or Codex OAuth login
  • Cloud backup to Tencent COS or S3/R2, with test-upload validation before persisting credentials
  • Gallery with rerun, locate, download, and upload-status tracking
  • Docker Compose with GHCR prebuilt images; local dev requires Node 24.15.0 and pnpm 9.14.2 exactly

Caveats

  • Agent planning messages are not persisted; only the resulting plan nodes survive in canvas snapshots
  • The app is explicitly designed for local workstation use—no built-in auth, don’t expose it publicly
  • SQLite on Docker bind mounts needs DELETE journal mode and EXCLUSIVE locking to avoid corruption; running local dev and Docker against the same data/ directory simultaneously is asking for SQLITE_IOERR_SHMOPEN

Verdict

Worth a spin if you want a private, non-subscription alternative to Midjourney/Leonardo with actual layout tools and batch workflows. Skip it if you need collaboration, cloud-native hosting, or can’t stomach pinning Node to a specific patch version.

heatdrop uses Google Analytics to see which pages get read — nothing else. Your call. How we handle data.