Nishad Patne

Projects / PlainSight

Completed

PlainSight: hiding data in an image's colour

1 / 4A pixel-art campsite, signed, which looks unchanged

Product
  • PlainSight, the engine
  • Pixie, the product built on it
Role
  • I built the engine and ran its trials
  • the use cases and the UI were shared
Team
Nishad P and two colleagues
Timeline
March 2026
Status
Live
Made for
Figma Makeathon 2026
Built with
  • Claude
  • Figma Make

A photo that carries its own signature, a secret note or a link, and still looks exactly the same.

PlainSight treats colour the way a radio treats a carrier wave: the image is the signal, and its hue is where the data rides.

01

Context

  • Steganographyhiding information inside an ordinary file so the file looks unchanged. PlainSight does this with images.

  • Where it startedat the Figma Makeathon 2026, two colleagues and I brainstormed two directions: a new kind of QR code, and a way to hide information in images. The whole project took about a week of thinking and a day of building.

  • Two namesPlainSight is the engine I built. Pixie is the product the three of us built on top of it.

02

What it does

The demo: hiding a poem in a forest photo, revealing it, then Pixie's Paintbox and the How it works page.

Three modes, all working on the live Pixie site:

  • Invisible signaturemarks an image so tampering can be detected.

  • Hidden payloadtucks a message inside a photo; it only comes out when the photo is decoded.

  • Visual QRturns pixel art into a code that carries a short link.

On the site, the first two live in Pixie's Whispers, the visual QR lives in Pixie's Paintbox, and a How it works page explains the engine. Friends have used Pixie, though I never promoted it.

03

The experience

  • Any PNGIt works with any lossless PNG image.

  • Capacity up frontBefore you type anything, it calculates how many characters the image can carry. The 1500 by 1000 campsite above can carry 25,385; a signature holds up to 128.

04

Decision 1: hue

A colleague proposed LSB (least significant bit), a common way to hide data in images. I went with hue, because in principle one pixel's hue can hold one ASCII character.

In practice, after error correction and redundancy, the shipped encoder uses 2 to 4 pixels per character.

05

Decision 2: one colour layer, two uses

  • HiddenFor the signature and the payload, the colour change is invisible, and the data only comes out at the decoder.

  • VisibleFor the QR, the colour shifts sharply, following the grid of a retro 8-bit pixel-art image. It carries up to 50 characters, enough for a link. Screen use only for now; print and heavy compression are future work. Guide rails at the edges tell a decoder, or a vision AI, where to look and how to read it. We tested decoding it back with vision AI models.

06

How the engine works

  • PNG onlythe format has to be lossless, or the data is lost.

  • Hue carries the datathe engine converts each pixel from RGB to HSL. Where saturation is low, hue shifts are nearly invisible, so it writes there, inside two fixed ranges of muted colour.

  • The user's number is the keya number only the user knows decides where the data is scattered across the image. The engine itself stores no hidden keys.

  • Built for reliabilityHamming(7,4) error correction, and the message is written three times, with a majority vote on decode.

07

How we built it

  1. Trials in Claude first

    I built the engine as a working prototype inside Claude chats and ran it through three trial versions before the final build.

  2. Then Figma Make

    I gave the engine a passable UI in Figma Make, and the three of us built the final site together there.

  3. Who did what

    the engine and its trial runs were mine. One colleague worked on reliability, test cases, use cases and naming. The other worked on testing, validation and edge cases.

08

Testing

In October 2026, an AI agent ran each mode end to end on the live site in a headless browser:

  • Hidden payloadhid "Hidden in plain sight." in a pixel-art campsite, downloaded the image, and revealed the exact message.

  • Visual QRturned a preset pixel art into a charm carrying a link, and read the exact link back.

  • Signatureconfirmed an untouched signed image, and flagged a large edit. A very small edit (10 by 10 pixels) slipped past, a robustness gap still to fix.

09

Reflection

I came at PlainSight from the angle of digital trust and integrity.

It has become so easy to create and distribute images, and not only images but any digital media. That ease drives promising uses and is simply how the world works now, but it also makes it easy to spread fake news and false facts, or to pass off someone else's work as your own. To answer that, I drew on my education in electronics engineering, especially digital communication and modulation, and treated an image's colour as a channel that can carry a signature or a message. I feel validated seeing the same idea at scale, in projects like Google DeepMind's SynthID and the invisible watermarks Claude now puts in the text it writes.