Skip to main content

Content Protection (Anti-capture Watermark)

Paid, creator-owned content carries (or is intended to carry) a dynamic forensic watermark: a tiled, semi-transparent overlay of the current viewer's username and a live timestamp. It does not try to block screenshots — that can't be done reliably on the web, and blocking capture would break legitimate use — instead, any screenshot or screen recording that leaks carries the identity of whoever leaked it, so a creator (or the platform) can trace the source. As of now the dynamic overlay is wired up on live streams, unlocked exclusive-post media, and unlocked paid message media — see the checklist below.

Each property has its own checkbox marking whether that specific piece is fully implemented and functional end to end (frontend + backend) — update these yourself as work lands; this page won't overwrite them.

  • Dynamic watermark (viewer's @username + timestamp) on unlocked exclusive-post media (PostCard.tsx / PostModal.tsx - the feed/profile grid card and the full post-detail modal). Fixed this session: the overlay component had been removed from both; it's now shown whenever isPaid && hasPostAccess && !isOwner
  • Dynamic watermark on non-public live streams (private / followers-only / close-friends), viewer side
  • Dynamic watermark on unlocked paid message images (recipient's view) (MessageBubble.tsx). Fixed this session: the overlay had been removed from the chat message bubble; it's now shown whenever isPaidMessage && !isMe
  • Timestamp refreshes periodically so a capture encodes roughly when it was taken
  • Screenshot/recording blocking — intentionally not attempted (not reliably possible on the web; product direction is a traceable watermark, not capture-blocking)
  • Server-side / baked-in watermarking of the media file itself, for paid post images — opt-in and off by default (BAKE_IN_WATERMARK env var); separate from the dynamic overlay above, see the technical reference's "Baked-in vs. dynamic" table

See the technical reference for the component, its integration points, and source file links.