Doop
Doop is an open-source multiplayer design canvas and design MCP for Claude Code, Codex, and any AI agent. Design side by side with agents — free in beta.
Crop, compress, annotate and batch-edit photos without uploading them. A Rust and WebAssembly image editor that runs on your own machine — no account needed.
DesignTypeScript · RustGitHub @chrislanejonesOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Loading the full README. The saved excerpt is shown below.
A browser-based image annotation and editing tool powered by Rust/WASM for pixel-level operations, React + TypeScript with Zustand state stores for the UI, and Convex for optional cloud persistence. Edits run locally in WebAssembly and your originals + edits live in the browser's IndexedDB — your pixels never leave the tab unless you sign in for persistence or AI features.Read the full README ↗Live: imagehorse.app · Editor: edit.imagehorse.app ·
A browser-based image annotation and editing tool powered by Rust/WASM for pixel-level operations, React + TypeScript with Zustand state stores for the UI, and Convex for optional cloud persistence. Edits run locally in WebAssembly and your originals + edits live in the browser's IndexedDB — your pixels never leave the tab unless you sign in for persistence or AI features. Includes a batch editor that works across a whole gallery in one pass — stamp a logo, apply text, bulk-rename by pattern, or name every photo from what is actually in it with a local describer that needs no account and no per-image cost.
Previously called Clone Stamp App — the app grew well beyond its origins as a single clone stamp tool.
Needs Node + pnpm, and the Rust toolchain plus
wasm-pack to build the engine.
pnpm install
pnpm run build:wasm # compile the Rust engine -> pkg/ (required before first run)
pnpm run dev # editor at localhost:5173
pnpm run build bundles whatever is already in pkg/ — it does not rebuild the
engine. After changing anything under src/, run build:wasm again, or use
pnpm run build:all to do both. A stale pkg/ looks exactly like a broken feature.
Convex and Clerk are optional: with no keys set the app runs fully logged-out, which is a supported path and not a degraded one. Full setup, deploy notes and environment variables → Getting Started.
src/) and the React app (app/src/).Alt + /) is authoritative for the tool digits; this mirrors it.Design decisions live in docs/adr/. Superseded investigations and planning notes are kept in docs/archive/ rather than deleted — each one says what went stale about it.
wasm-bindgen, png crate, ab_glyph fonts, SIMD128 kernels)vite-plugin-wasm + top-level await)ConvexProviderWithClerk (convex/react-clerk)marketing/ — the site at imagehorse.app:
home, tool pages, architecture, features, pricing, Trail Log and what is in the works. Vite + React 19 + react-router,
plain CSS off the tokens in src/tokens.css (no Tailwind, no UI library).
The marketing Vercel project uses Root Directory marketing and
marketing/vercel.json, publishing marketing/dist. The root vercel.json
builds the editor at edit.imagehorse.app. See marketing/README.md.
pnpm run dev:marketing # local
pnpm run build:marketing # production → marketing/dist
node marketing/scripts/gen-trail-data.mjs # refresh the derived data (see below)
Its numbers are derived, never typed. src/data/commits.ts (the Trail Log's
commit squares) and src/data/features.ts come from git log and
docs/Features.md via scripts/gen-trail-data.mjs — run it on every release,
or the graph quietly keeps drawing last month. src/data/releases.ts is the
changelog itself, so that one is hand-written: add the new release at the top.
Latest release below. Full dated history → docs/Change-summary.md.
Copy a photo's look and paste it onto others.
Press Ctrl+Alt+C, or pick Copy look from Select ▾ or a photo's right-click menu, and the photo's Adjustments, Preset and Levels are copied. Tick some photos, press Ctrl+Alt+V, choose which of the three to bring, and paste. On the open photo the paste is one undo step. Fast A → B → A photo switching no longer ends on A showing B's picture, every tool panel now carries its tile's name, and five dependencies moved up.
Full release notes: Change Summary · Trail Log.
MIT