Features

Collaborative sessions

Share a live editing session with a teammate over WebRTC — no media uploads, only operation descriptions stream peer-to-peer.

The editor includes a peer-to-peer collaborative session — share an ID with a teammate and edits stream directly between your browsers over WebRTC. Pixel data never touches a server. Useful for live design review, paired editing, or sending a quick "watch what I do" demo.

Starting a session (host)

  1. Open the Properties sidebar and expand 👥 Collaborative Session.
  2. Click 🟢 Start a new session.
  3. A session ID is generated (e.g. nss-ab12cd-3xy7).
  4. Click Copy and share the ID with your collaborator.
  5. The status pill goes from idleconnectingconnected as soon as the other browser joins.

Joining a session (guest)

  1. Open the Collaborative Session panel in your own editor.
  2. Paste the session ID into the input field.
  3. Click Join.
  4. The status pill goes from idleconnectingconnected.

What syncs

Every editor operation broadcast over the WebRTC DataChannel:

  • Background panel changes
  • Filter preset + intensity
  • Brightness / contrast / saturation / temperature
  • Lifestyle scene selection
  • Layer add / delete / reorder / opacity / visibility
  • Brush mode + size

What does not sync: raw pixel data, source images, mask buffers. Only the description of each operation travels over the wire ("set filter to cinematic at 70 %", "place product on marble background", "add text layer 'Sale'"). Each peer's editor re-applies the operation locally on its own canvas.

This means the bandwidth cost is tiny — a few hundred bytes per edit — and private images stay on each device.

Activity log

The panel shows the last 20 events: incoming peer operations, connection state changes, errors. Useful for debugging if something looks out of sync.

Disconnecting

Click Disconnect in the active session panel. The DataChannel closes cleanly; both peers go back to idle.

Privacy details

  • Signaling: a tiny Vercel Serverless endpoint at /api/collab-signal exchanges WebRTC offer / answer / ICE candidate messages so the two peers can find each other. It does not see or proxy any media.
  • STUN: stun.l.google.com:19302 (Google's public STUN) is used to discover each peer's public IP for the connection setup.
  • Data: every byte after connection setup is direct peer-to-peer over WebRTC, encrypted by DTLS.

Browser support

Requires a browser with WebRTC support (every modern desktop + mobile browser). Tested in Chrome / Edge / Firefox / Safari.

Limits

V1 is turn-based with last-write-wins conflict resolution. Two peers editing the same property simultaneously will see whichever message arrives last. Full operational-transform / CRDT is V2.

Pixel data still doesn't sync — if you want your teammate to see the same input image, send them the file first (or share a .nss-project file).

Related