Let’s have a look at what the various nodes are that we can add to our feed. Be sure to check out Creating Your First Feed to learn how to combine these. If you're a developer comfortable working with JSON, you can check out our Editor Documentation.
You can find all the nodes in the menu on the left side of the Editor.
Let's go through each in turn, what settings are involved, and how they might improve your feed.
First up: the backbone of our feed - Logic nodes.
When we're starting out - our first Logic node should be set to All of these. This lets us specify all the things that must be included. In this example, we're going to create a feed that has pictures or videos of user's LEGO builds.
So we want the feed to include all skeets including ("contains") our green word list and excluding ("missing") our red word list and meeting our content moderation requirements. Each of these individual nodes is discussed in more detail below.
Everything in the "All of These" node is required before a skeet will make the feed.
Then we can pop in a new Logic node, and add some Any of These logic. In this case we want to catch skeets that (having met all our other requirements) contain either an image or a video:
Now let's look at all our nodes in a bit more detail.
These are the basic building blocks of a feed, and enable us to include ("contains") or exclude ("missing") skeets that have our listed words in a variety of places:
As you can see, this instructs your feed to examine whether your listed words appear in the text of the skeet itself, in a reply, in the alt text of an image, and so on. By adding different Word List nodes, you can be precise about which skeets make the feed and which don't. You can also specify whether you want this search to be case sensitive or not (in the top left corner of the Node).
Important: if any of the words in your list appear in the skeet, then the node will operate. If you only want to catch skeets with words as part of a phrase (e.g. "LEGO Technic" but not "LEGO" on its own), you should enter the phrase.
Here, we want to include skeets that mention LEGO, but not if they mention "game" or "twitch" (to separate out video game skeets from skeets about blocks):
For a more detailed discussion of the attributes you can use, have a look at Attributes below.
Entity List nodes let us capture skeets in the feed that meet certain filters, like the language they are in, or the hashtags included:
An Embed node tells our feed to include or exclude skeets that have things embedded in them, like an image or video (as we discussed above) or a link or a gif:
This can be used to exclude quote posts, for example:
Note: in the above example, replies are excluded using an Attribute Comparison node, discussed below.
A Lists node instructs your feed to include or ignore skeets from users on a list. This might helpful if you have a list of experts you want to include, or a list or users you'd like to block:
Similarly, a Starter Pack node lets you include or exclude skeets from users in a Bluesky starter pack.
You can either copy the url from a starter pack you want to use, or search for a starter pack within the node:
A Social Graph node lets you include/exclude skeets based on where someone is following or followed by a user:
This can be used as a quick way for people to join your feed and build a community, like the crew in the BikeSky feed!
This lets you specifically include/exclude specific individual users. To do this you list the user's DID.
You can use clearsky.app to find a Bluesky user's DID.
Several of the nodes use what are known as Attributes. We've already looked at some of them in the Word List node above, but now let's get a little more detailed.
To find the attributes of a Bluesky post, you can use https://pdsls.dev. This tool lets you put in a link and see what Bluesky stores for the post. We can use this to determine what attributes look like on a post
For example, if we take this post, we can see the following attributes:
embed:
$type: app.bsky.embed.recordWithMedia
media:
$type: app.bsky.embed.external
external:
uri: https://graze.social
thumb:
$type: blob
ref:
$link: bafkreifxp6jwe6ybqk66av6rird53mffqlvnqkbkirnhdlf5yv7lnj4ace
mimeType: image/jpeg
size: 363034
title: Graze.social - Curate Your Bluesky Feeds
description: Design, deploy, and grow feeds of any complexity on Bluesky with Graze.social.
record:
$type: app.bsky.embed.record
record:
cid: bafyreihh5tvpjdxdde3aeuigcywwvl3x2howd3gxoefrvxmybzq4knaxvu
uri: at://did:plc:i6y3jdklpvkjvynvsrnqfdoq/app.bsky.feed.post/3lcvhakboqc2k
Now lets look at how we can use these attributes in our nodes.
Much like a Word List node, a Regex node instructs the feed to include/exclude skeets that have a specified regular expression in one of the listed attributes. In most cases, the Word List node will be sufficient.
However, sometimes you might want to catch only part of a word. For example, in order to try and filter out commercial posts, this Regex node excludes the string "% off" -- which will snag and exclude posts with "25% off" or "50% off":
You can also use an Attribute Comparison node. The main use case for this is filtering out replies.
The remaining nodes in the menu use AI to work some magic on the filter. You can read all about this in our guide to Using AI Nodes.