Image search for AT Protocol

Find similar images across the ATmosphere

Powered by perceptual hashing.

Context

Track image reposts

Find image reposts on Bluesky, even when re-encoded. Surface the same image across different posts and accounts.

Features

Make annotations

Add image annotations to your app. Let users attach context, fact-checks, and commentary to images themselves.

Social Research

Watch popularity

Track image popularity over time. Understand how images spread across the network and who shares them.

Example use case

Pollen

Pollen is a browser extension that uses the Nectar API to surface image annotations across Bluesky.

Researchers, news organizations, and you can add more context to what gets posted. See claims, fact-checks, and commentary from people you trust — right on the images you're already looking at.

Developer experience

Simple API

Calculate a perceptual hash, then search for similar content.

Calculate image perceptual hash

Get a perceptual fingerprint (PFP) for an image. You have three options:

Send the API an ATProto record that includes an image. Nectar resolves it, fetches the blobs, and computes the hash(es).

curl "https://nectar-api.hypha.coop/pfps?\
  uri=at://did:plc:xyz/app.bsky.feed.post/abc123"
# Response:
{
  "uri": "at://did:plc:xyz/app.bsky.feed.post/abc123",
  "blobs": [
    {
      "cid": "bafyrei...",
      "pfp": "pafqtessmb3hk4bn..."
    }
  ]
}

Upload an image directly to get its perceptual fingerprint.

curl -X POST "https://nectar-api.hypha.coop/pfps" \
  -F "image=@photo.jpg"

Calculate the hash yourself using a PDQ library, then use the PFP directly with the search endpoints. No API call needed for this step.

# Use any PDQ implementation to compute the hash,
# then encode it as a PFP string:
# "p" + base32(0x01 + 0x20 + <32-byte PDQ hash>)

Find records with similar images

Search by blob content. Find AT Protocol records whose attached images are perceptually similar. Use this to surface similar content, find reposts, and collate commentary.

curl "https://nectar-api.hypha.coop/search/blobs?\
  pfp=pafqtessmb3hk4bn...&\
  threshold=31"
{
  "matches": [
    {
      "uri": "at://did:plc:abc/app.bsky.feed.post/123",
      "pfp": "pafqtessmb3hk4bn...",
      "distance": 0
    },
    {
      "uri": "at://did:plc:def/app.bsky.feed.post/456",
      "pfp": "pafqtessmc4jl5co...",
      "distance": 3
    }
  ]
}

Search by PFP references

Find records that contain PFP references as data — like claim records, annotations, or tags. Use this to develop an app that can comment on images themselves, not just posts.

curl "https://nectar-api.hypha.coop/search/pfps?\
  pfp=pafqtessmb3hk4bn...&\
  wantedCollections=coop.hypha.pollen.*"
{
  "matches": [
    {
      "uri": "at://did:plc:abc/coop.hypha.pollen.claim/tid123",
      "pfp": "pafqtessmb3hk4bn...",
      "distance": 0
    }
  ]
}

Open ecosystem

Built on standards

Get access

Nectar will be available soon. If you're interested in partnering with us, we'd love to hear from you.

Common questions

FAQ

What do you store?

No images are ever stored on disk or retained. A fingerprint of each image is calculated and stored in our database. This cannot be turned back into the image.

Here is an example fingerprint: paeqeix3fx5nnv27yngyfeucikjug2qw6jtwdmtgnlgzglnmwfmzgvsq

Public records (like Bluesky posts) are stored so they can be served in the API. This is only text (in JSON format).

What makes images "similar"?

Our API matches images that are almost visually identical: think of a JPEG image vs a PNG of that same image, or a low resolution export of a photograph.

This means you can't search for faces, concepts, or similar vibes, only versions of the same image.

Does this use AI?
No. Images are matched using "perceptual hashing", a class of algorithms that does not involve any AI technology.
Could this deanonymize users?
No. The API matches images that are very visually similar, like a JPEG and PNG of the same photo. It won't find different images of the same face being posted across accounts, or similar environments.
What about deletions?
Deleted records, or records from deactivated accounts, are not served through our API.