Refboard - PureRef, but Collaborative, GPU-Accelerated, Self-Hosted

Web · Collaborative · Real-time · GPU · PixiJS · Open Source · Self-hosted
INTRODUCTION
PureRef is the gold-standard tool for visual reference moodboards — every illustrator, concept artist, and designer I know uses it. But it's local-only: the board lives on one machine and can't be shared with collaborators in real time.

I work distributed. My designers work distributed. The reference flow didn't survive that — we kept ending up in some other tool (a Notion page, a Slack thread, a shared folder) the moment two people needed to see the same references at the same time. Figma and Miro exist, but they're general-purpose whiteboards that don't match PureRef's image-first, low-chrome rhythm. And no open-source collaborative reference board existed at all.

So I built one. Refboard is the same instinct as PureRef — drop images on an infinite canvas, scribble pins, group, align — plus everything PureRef can't do: live multi-user collaboration with cursors, threaded review comments pinned to images, video and PDF on the canvas, markdown notes inline, and a GPU-accelerated renderer that holds 60fps with hundreds of high-resolution items on screen.

It's MIT-licensed. One docker compose up runs the whole stack on your own box. There's an admin dashboard for organizations: create accounts, toggle self-registration, manage roles. There's a per-board activity log so you can see who added what.
MY ROLE
Solo Designer & Developer — full stack. Architecture, frontend canvas engine, backend API + Socket.IO, infra, the admin and review tooling, the public open-source repo.
timeline
2026 (March – April). Active.
situation
For four years, every collaborative reference flow I had with my designers ended in friction — PureRef boards screenshotted into Slack, Notion pages full of broken image embeds, Miro boards that rendered like a website rather than a reference workflow. PureRef itself is excellent at being PureRef, but it's a desktop app and it's local. The collaboration layer doesn't exist.

What I actually wanted: PureRef's whole interaction model, exactly as is, but with another person's cursor on the canvas alongside mine. Plus video, because half the references I ship to game-side teams are gameplay clips. Plus PDFs, because client decks come as PDFs. Plus markdown text on the board itself, because a reference without rationale rots within a week. Plus the ability to host it on my own machine so the references stay mine.

No tool ticked all of those boxes. So I made one.
task
  1. Match PureRef's core experience — infinite canvas, drop-in images, almost no chrome, fast pan/zoom, alignment/distribute power-tools.
  2. Real-time multi-user collaboration — cursors, presence, scene sync, follow-mode.
  3. Go beyond PureRef where it makes sense — video with playback controls, PDF with per-page renders, markdown notes as on-canvas cards, threaded review comments pinned to objects.
  4. Performance — GPU renderer with viewport culling and LOD so the board stays at 60fps with hundreds of items.
  5. Production-grade self-hosting — Dockerfile, docker-compose with bundled MinIO, admin dashboard, runtime configurable self-registration, JWT auth, activity log.
  6. Open-source it. MIT. No SaaS. No lock-in.

action
Sound Canvas system architecture diagram — iPad input through    TouchDesigner show controller to ComfyUI inference, outputting to live projection and gallery wall, with ~800ms end-to-end latency.

GPU canvas (Pixi.js v8). The canvas isn't HTML/Fabric — it's a Pixi.js scene graph with viewport culling, LOD-aware texture loading, and GPU-batched draw calls. PureRef itself isn't GPU-accelerated; on the same set of high-res references the comparison is visible. I wrote a custom scene-converter so canvas state serializes to a portable JSON that survives sync, undo/redo, copy-paste, and round-trips through MinIO.

Real-time collaboration (Socket.IO). Full-scene sync inspired by Excalidraw — the whole canvas JSON is broadcast on changes (300ms throttle), with lightweight 50ms throttled object-transform events during drags so motion stays smooth. Interaction-aware deferral queues remote scene updates while a user is mid-drag, so other people's edits never yank objects out from under your cursor. Cursor positions are streamed separately. Follow-mode lets you snap your viewport to another collaborator and see what they're seeing. Presence is shown as stacked avatars in the toolbar.

PureRef-parity power tools. 40+ shortcuts, mapped 1:1 to PureRef's defaults — align left/right/top/bottom, distribute H/V, normalize size/scale/width/height, flip H/V, reset transform, lock, group/ungroup, optimal pack, arrange in grid/row/column/by name/by z-order/random/stack, overlay-compare (Ctrl+Y), grayscale toggle. Right-click context menu carries the same set. Tools the keyboard people will recognize without thinking.

Media pipeline. Sharp generates image thumbnails and LOD variants on upload. ffmpeg pulls the first-frame poster and metadata for videos. Poppler renders PDF pages individually — first 20 pages get thumbnails immediately, single-page PDFs get a hires render queued at higher priority. All processing runs in a background media worker, so uploads feel instant.

Threaded review. Pin a comment to any object on the canvas — that starts a thread. Replies, status (open / resolved), denormalized author labels so threads survive user deactivation. Review mode toggles a clean overlay for walking through feedback. This solves the gap I had where designers were leaving reference comments in Slack DMs that got lost.

Activity log. Per-board audit trail visible from a clock-icon in the toolbar — uploads, board create/rename/delete, threads, replies. Live updates over Socket.IO. Time-grouped feed (Today / Yesterday / older), live append on new events. Author labels denormalised at log time so a deactivated user's history doesn't go anonymous.

Admin dashboard. Organisation-friendly user management at /admin — create accounts, reset passwords, promote/demote between admin and member, deactivate / reactivate, runtime toggle for self-registration. Backed by a hybrid middleware that accepts either a JWT-with-admin-role (UI path) or an X-API-Key header (bot/server-to-server path). The very first user is auto-promoted to admin; SEED_ADMIN_* env vars can bootstrap an admin idempotently on first boot.

Self-hostable. Multi-stage Dockerfile bundles the frontend build into the backend image. docker-compose.yml brings up Refboard + a MinIO sidecar in one command. .env.example annotates every knob. README documents the path to a public domain via Cloudflare Tunnel (zero open ports), Caddy + Let's Encrypt, nginx with WebSocket upgrade headers, or Tailscale for tailnet-only access. Default config refuses to start in production without a real JWT_SECRET.

variants - same engine, different surface
Personal explorations after the event, applying the pipeline to product customization. Same TouchDesigner + ComfyUI plumbing — input swapped from a freehand drawing to a reference photo, with IP-Adapter added to the workflow for stylized outputs conditioned on a single reference image.
👇 Converse
👇 T-shirt #1
👇 T-shirt #1
result
  • Shipped. v0.5.0. 230+ commits of preserved development history. Public on GitHub under MIT.
  • Real-time multi-user works — verified end-to-end with two browsers: cursors, scene sync, presence, follow-mode.
  • Holds 60fps with hundreds of high-resolution images on the canvas, where PureRef itself drops frames.
  • Self-hosting actually works — verified with the bundled docker compose recipe; MinIO + backend + frontend all start cleanly from a fresh clone.
  • Goes beyond PureRef in three real ways: live collaboration, video and PDF on the canvas, threaded review.
  • Org-ready — admin dashboard, runtime self-registration toggle, JWT auth, activity log; not a hobby toy.
  • My designers and I use it. That was the original ask, and that's the test that matters.