Skip to content

Cross-device sync

Pyre syncs through devices you control: a desktop hub, a headless self-host hub, or a paired browser session. There is no Pyre cloud account and no central Pyre database.

How it works

A hub serves a small private HTTP API on your trusted network. Other Pyre clients pair with it, pull changes, and push their own changes back.

Common hub options:

  • Desktop Pyre on Windows or Linux.
  • Self-host server (pyre-server) in Docker, when using the source tree that includes the server package.
  • Experimental headless source path for self-hosting without the desktop window.

Warning

Run a hub only on a network you trust, or behind your own TLS reverse proxy / private tunnel. Do not expose a raw hub port to the public internet.

Pairing

Phones can pair by scanning the desktop hub's QR code or by entering host, port, and token manually.

Browsers served by a desktop hub can use the one-click flow: open http://<pc>:<port>/, request pairing, and approve the browser from the desktop app. Headless hubs use a pairing token because there is no desktop window to approve from.

The hub can revoke a device at any time.

What syncs

Sync covers the app library and the settings that shape it:

  • Characters and personas
  • Chats
  • Lorebooks
  • Presets and Creator presets
  • Regex rules
  • Folders and tags
  • App settings, including appearance
  • BotBooru profile data
  • Creator drafts
  • Optional provider keys, encrypted and native-app only
  • Images and attachments, content-addressed by hash

Custom local choices that are intentionally device-specific can stay local.

Merge model

Sync is per record, not all-or-nothing. Characters, personas, chats, lorebooks, presets, settings, and other records each carry modification metadata. The newest edit wins for that record.

Chats merge as whole chat records. Pyre does not promise per-message sync granularity, so if the same chat is edited independently on two devices between syncs, treat that as a conflict risk and use the in-app sync status/conflict signals.

Deletions propagate through tombstone records. If you delete a character, persona, chat, lorebook, or folder on one paired device, offline devices pick up that deletion the next time they sync instead of resurrecting the item.

Images and attachments

Images are content-addressed, so Pyre transfers only the bytes the other side does not already have. Avatar originals, recrops, gallery images, backgrounds, and attachments can travel without re-sending duplicates.

Provider keys

Provider selections can sync as settings. Provider keys are separate:

  • Key sync is opt-in.
  • Keys are encrypted in transit/storage for the sync payload.
  • Browser clients are excluded by design; a browser never stores provider keys.

See Your data & API keys for the security model.

Browser and PWA use

A browser can load Pyre from your hub and sync the same library. The browser does not need a provider configured locally. Chat requests go to the hub, and the hub calls the provider using its securely-stored key.

The hub proxy forwards normal chat streaming, image attachments for OpenAI-style multimodal providers, and reasoning deltas when the host/provider emits them.

Browser limitations are intentional: provider management, model browsing, OS key storage, smart fallback chains, and direct Anthropic-native calls stay native/hub-side.

Self-host notes

The self-host hub defaults to port 6767. It can serve the web app, proxy chat, and sync paired clients. BotBooru Discover embed uses a separate-origin proxy on port 6768 by default so marketplace scripts stay isolated from the app.

Minimal Docker start from the source tree that includes Dockerfile and pyre_server:

docker compose up -d --build
docker compose logs -f pyre

Open http://<host>:6767 on your trusted network, then pair with the token printed in the logs.

You can configure a server provider through environment variables, or on supported web builds from API Connections after pairing. The key is stored on the server and is never shown back to the browser.

Check sync

Check sync compares per-collection fingerprints between devices. It does not expose content or keys; it only tells you whether the paired libraries are in step.

Status signals

  • Status pill: idle, syncing, success, offline.
  • Last-sync summary: how much was pulled and pushed.
  • Schema-version nudge when the other side is on a newer build.
  • Clean disconnect if a token is revoked.

See also