> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://help.graze.social/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# Nodes for Beginners

Nodes are the building blocks of your feed's rules. Each one checks one thing about a post: does it mention LEGO, is it a reply, is the author on my list. You combine them to describe exactly the posts you want.

This page covers the handful of nodes most feeds are built from, and a few recipes to copy. When you need every option for every node, see the [Editor Documentation](https://www.graze.social/docs/editor-documentation). For a step-by-step first feed, see [Creating Your First Feed](https://www.graze.social/docs/creating-your-first-feed).

## Finding the nodes

In the editor, click **Rules** (the filter icon) in the left sidebar. The palette has four tabs:

- **Basic**: words, links, post types, lists and the Logic node. Most feeds only need these.
- **AI**: nodes that use a model to judge each post.
- **Markup**: notes and arrows for documenting your canvas. They don't change what matches.
- **Custom**: reusable custom nodes.

Pick a node, click the canvas to place it, then drag it into your Feed's **Rules** section or into a Logic block. A node left loose on the canvas looks faded and does nothing.

## Logic: the backbone

The Rules section holds one node, and it's almost always a **Logic** block. Everything else goes inside it.

A Logic block has one setting:

- **All of these**: a post must pass every node inside. Use this to narrow your feed down.
- **Any of these**: a post only needs to pass one. Use this to offer alternatives.

You can put Logic blocks inside Logic blocks. Say you want a feed of LEGO builds, with photos or videos. That's:

1. An **All of these** block containing:
2. A **Word List** that **contains** "lego".
3. An **Any of these** block, containing an **Embed** node set to **contains** **Image** and another set to **contains** **Video**.

Everything in the outer block is required, and the inner block is satisfied by either kind of media.

## Word List

The node you'll use most. It matches posts that contain (or are missing) any of the words on your list.

- Choose the field to search. **Text** (the post itself) is the usual choice, but you can also search **Alt Text**, **Link Card Title**, **User Bio** and more.
- Choose **contains** to include matching posts, or **missing** to exclude them.
- Add one word or phrase per row with **Add Another**.

By default, a Word List matches whole words and ignores case, so "art" won't match "cartoon", and "LEGO" matches "lego". You can change both from the gear menu.

If any word on the list appears, the node is active. To catch a phrase but not its parts (say, "LEGO Technic" but not "LEGO" on its own), enter the whole phrase.

> Wildcards like `cat*` don't work in a normal Word List. If you type one, the node offers to switch on **Regex Match** for you.

## Post Type

Use **Post Type** set to **is not** **reply** to keep replies out of your feed, or **is not** **quote** to drop quote posts. It's the simplest node there is, and most feeds want one.

## Embed

**Embed** checks what's attached to a post: **Link**, **Quote Post**, **Image**, **Gallery**, **Image Group**, **Gif** or **Video**. Set it to **contains** to require one, or **missing** to exclude it. **Image** covers galleries too.

## Entity List

**Entity List** checks the structured parts of a post rather than its words: **Hashtags**, **Languages**, **URLs**, **Mentions**, **Domains** and **Post Self Labels**. It's the best way to:

- Keep a feed to one or more languages (**Include** **Languages**).
- Follow a hashtag (**Include** **Hashtags**, typed with or without the `#`).
- Collect posts linking to particular sites (**Include** **Domains**).

## Lists of people

Four nodes let you include or exclude posts by who wrote them:

- **Member of List**: people on a Bluesky list. Paste the list's link, or search for it.
- **Starter Pack**: people in a Bluesky starter pack.
- **Social Graph**: people a given account **follows**, or its **followers**.
- **Users**: specific accounts, by handle or DID.

Each one has **Include** and **Exclude**. Exclude is handy for keeping known spammers out.

> Careful with **Include** inside **All of these**: it means only posts by those people can match. If you want "also show posts from these people", put the node in an **Any of these** block.

## AI nodes

When keywords can't capture what you're after, the **AI** tab can help. The most useful for beginners:

- **Natural Language**: write what you want in plain English, like "is a photo of a finished LEGO build", and a model judges each post.
- **Content Moderation**: keep offensive posts out. New nodes are set to **OK** **at least** 90%.
- **Topic Analysis**: match broad topics like **Sports** or **Science & Technology**.

See [Using AI Nodes](https://www.graze.social/docs/using-ai-nodes) for how they work and how to set thresholds.

## Recipes

### A keyword feed

1. **All of these**
2. **Word List**: **Text** **contains** your keywords.
3. **Word List**: **Text** **missing** words that bring in the wrong posts. For a LEGO feed, "game" and "twitch" keep video-game posts out.
4. **Post Type**: **is not** **reply**.

### A community feed from a list

Keep a list of members on Bluesky, and show everything they post:

1. **All of these**
2. **Member of List**: **Include**, with your list's link.
3. **Post Type**: **is not** **reply**.

Add or remove people on Bluesky and the feed follows along. To let people join just by following an account, use **Social Graph** with that account's **followers** instead.

### A community feed about a topic

Show posts from your list only when they're on topic:

1. **All of these**
2. **Member of List**: **Include**, with your list's link.
3. **Any of these**, containing a **Word List** of your keywords and a **Natural Language** node describing the topic.

The Word List catches posts that use your exact words, and the Natural Language node catches the ones that don't. Because **Member of List** sits above them in **All of these**, the Natural Language node only has to judge your members' posts, which keeps its use of the hourly budget down.

### A fuzzy topic

Some topics are hard to pin down with keywords: "posts asking for book recommendations", "job postings", "good news". Use a **Natural Language** node with a clear statement, and put cheaper nodes such as a **Languages** filter or a Word List above it in the same **All of these** block. Natural Language has an hourly budget per feed, and you're only charged for posts it actually judges, so narrowing the posts that reach it keeps you inside the budget. See [Natural Language and Ask a Question](https://www.graze.social/docs/natural-language-and-ask-a-question).

## Checking your work

Use [Debug](https://www.graze.social/docs/debugging-a-post) to test any Bluesky post against your rules. It shows a pass or fail on every node, so you can see exactly why a post did or didn't make it into your feed.