Logic

Nodes for Beginners

A guide to each of the nodes you can add to a feed

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.

Logic

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.

Word Lists

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 Lists

Entity List nodes let us capture skeets in the feed that meet certain filters, like the language they are in, or the hashtags included:

  • langs - Filter by language.
  • urls - Filter for urls.
  • domains - Filter for url domains.
  • mentions - Filter for mentions of user. You can also supply a list/starter pack. When anyone in the list is mentioned the post is included.
  • hashtags - Filter posts with a #hashtag

Embed

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.

Lists

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:

Starter Pack

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:

Social Graph

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!

Social List

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.

Attributes

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.

Regex

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":

Attribute Comparison

You can also use an Attribute Comparison node. The main use case for this is filtering out replies.

AI Nodes

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.