{
  "meta": {
    "templateCredsSetupCompleted": false
  },
  "name": "Turn every new blog post into X/Twitter thread variants",
  "tags": [],
  "nodes": [
    {
      "id": "overview",
      "name": "Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -540,
        0
      ],
      "parameters": {
        "color": 1,
        "width": 460,
        "height": 700,
        "content": "## Turn every new blog post into X/Twitter thread variants\n\nWatches an RSS feed and turns each new post into ready-to-post X/Twitter threads \u2014 three complete variants, each built around a different hook (curiosity, challenge, story), so you can pick the angle that fits.\n\n### How it works\n\n1. **On new blog post** polls any RSS/Atom feed and fires once per new item.\n2. **Generate thread variants** sends the post URL to SocialSwarm, which fetches the article and writes three full threads from it. Every tweet arrives with its character count already calculated, so nothing needs re-checking before it goes out.\n3. **One item per thread** splits the result so each thread becomes its own item \u2014 ready to loop over, filter, or send onward.\n\n### Setup\n\n1. Create a SocialSwarm API key on the [developer portal](https://social-swarm-main-aa77a19.zuplo.site). There is a free plan and it does not ask for a card.\n2. On **Generate thread variants**, add a **SocialSwarm API** credential and paste the key.\n3. Replace the feed URL on **On new blog post** with your own.\n4. Execute once to check the output, then activate.\n\n### Customization tips\n\n- Switch **Number of Variants** to 5 for more angles per post.\n- Set **Source Type** to `Text` to repurpose newsletters or release notes instead of a feed.\n- Add your own node after **One item per thread** to send drafts to Slack, Google Sheets, Buffer, or X.\n- A manual run processes every recent feed item \u2014 add a **Limit** node after the trigger to handle only the newest."
      },
      "typeVersion": 1
    },
    {
      "id": "section-pipeline",
      "name": "Pipeline",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        180
      ],
      "parameters": {
        "color": 7,
        "width": 1040,
        "height": 300,
        "content": "## RSS post \u2192 thread variants\n\nEach new feed item goes to SocialSwarm as a URL, then splits into one item per thread. Add your scheduler or inbox after the last node."
      },
      "typeVersion": 1
    },
    {
      "id": "rss-trigger",
      "name": "On new blog post",
      "type": "n8n-nodes-base.rssFeedReadTrigger",
      "position": [
        80,
        320
      ],
      "parameters": {
        "feedUrl": "https://blog.n8n.io/rss/"
      },
      "typeVersion": 1
    },
    {
      "id": "socialswarm",
      "name": "Generate thread variants",
      "type": "n8n-nodes-socialswarm.socialSwarm",
      "position": [
        420,
        320
      ],
      "parameters": {
        "operation": "generate",
        "sourceUrl": "={{ $json.link }}",
        "sourceType": "url",
        "variantCount": 3
      },
      "typeVersion": 1
    },
    {
      "id": "split-variants",
      "name": "One item per thread",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        760,
        320
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "variants"
      },
      "typeVersion": 1
    }
  ],
  "settings": {
    "executionOrder": "v1"
  },
  "connections": {
    "On new blog post": {
      "main": [
        [
          {
            "node": "Generate thread variants",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate thread variants": {
      "main": [
        [
          {
            "node": "One item per thread",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}