Image search for AT Protocol
Powered by perceptual hashing.
Find image reposts on Bluesky, even when re-encoded. Surface the same image across different posts and accounts.
Add image annotations to your app. Let users attach context, fact-checks, and commentary to images themselves.
Track image popularity over time. Understand how images spread across the network and who shares them.
Example use case
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
Calculate a perceptual hash, then search for similar content.
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>)
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
}
]
}
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
The decentralized social networking protocol from Bluesky. Nectar indexes image data across the entire AT Protocol network.
atproto.com
The PFP spec from DASL. A structured identifier for similar media using perceptual hashing algorithms.
dasl.ing
Perceptual hashing algorithm from Meta. Produces a 32-byte hash that's robust to resizing, compression, and re-encoding.
github.com/facebook
Nectar will be available soon. If you're interested in partnering with us, we'd love to hear from you.
Common questions
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).
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.