{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "41c3bd43-1ed6-4434-a9d7-0eb8acd3e063",
      "name": "Assign parameters",
      "type": "n8n-nodes-base.set",
      "position": [
        -1240,
        60
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "b836ba12-262a-4fed-a31d-9e2f6514137a",
              "name": "startUrls",
              "type": "array",
              "value": "=[\n     \"{{ $json['Youtube URL'] }}\"   \n    ]"
            },
            {
              "id": "c96b80ed-077b-4eaa-a371-77127ef5ee4b",
              "name": "",
              "type": "string",
              "value": ""
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "1107a130-42e7-4234-95d7-c72fa327e17c",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1460,
        -280
      ],
      "parameters": {
        "color": 6,
        "width": 380,
        "height": 660,
        "content": "### \ud83d\udd27 Step-by-Step Setup\n\n#### 1\ufe0f\u20e3 Form & Parameter Assignment\n- **Node**: `Form Trigger`\n- **How it works**: Collects the YouTube URL via a form embedded in your n8n instance.\n- **API Required**: None\n- **Additional Node**: `Set`\n  - Converts the single input URL into the format Apify expects: an array of `{ url }` objects."
      },
      "typeVersion": 1
    },
    {
      "id": "19f794fc-7a7e-4c04-b413-ddcc16a58d3a",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1060,
        -280
      ],
      "parameters": {
        "width": 420,
        "height": 660,
        "content": "#### 2\ufe0f\u20e3 Apify Actors for Data Extraction\n- **Node**: `HTTP Request (Query Metadata)`\n  - **URL**: `https://api.apify.com/v2/acts/streamers~youtube-scraper/run-sync-get-dataset-items`\n  - **Payload**: JSON with `startUrls` array and filtering options like `maxResults`, `isHD`, etc.\n- **Node**: `HTTP Request (Query Transcript)`\n  - **URL**: `https://api.apify.com/v2/acts/topaz_sharingan~Youtube-Transcript-Scraper/run-sync-get-dataset-items`\n  - **Payload**: `startUrls` array\n- **API Required**: Apify API Token (via HTTP Query Auth)\n- **Notes**: You must have an Apify account and actor credits to use these actors."
      },
      "typeVersion": 1
    },
    {
      "id": "b32862a1-954b-4ba0-a249-1b8ad5cc1365",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -620,
        -280
      ],
      "parameters": {
        "color": 3,
        "width": 560,
        "height": 660,
        "content": "#### 3\ufe0f\u20e3 OpenAI GPT-4o & DALL\u00b7E Generation\n- **Node**: `OpenAI (Prompt Creator)`\n  - Uses the transcript and title to generate a DALL\u00b7E-compatible visual prompt.\n- **Node**: `OpenAI (Image Generator)`\n  - Resource: `image`\n  - Model: DALL\u00b7E (default with GPT-4o key)\n- **API Required**: OpenAI API Key\n- **Prompt Strategy**:\n```markdown\nCreate a minimalist YouTube thumbnail in an illustration style. The background should be a very simple, uncluttered setting with soft, ambient lighting that subtly reflects the essence of the transcript. The overall mood should be professional and non-cluttered, ensuring that the text overlay stands out without distraction. Do not include any text.\n```"
      },
      "typeVersion": 1
    },
    {
      "id": "c9c56605-3c8a-4f89-bc21-f124ac8a835e",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -40,
        -280
      ],
      "parameters": {
        "height": 660,
        "content": "#### 4\ufe0f\u20e3 Resize for YouTube Format\n- **Node**: `Edit Image`\n- **Purpose**: Resize final image to 1280x720 with `ignoreAspectRatio` set to true.\n- **No API required** \u2014 this runs entirely in n8n.\n\n---"
      },
      "typeVersion": 1
    },
    {
      "id": "7cd80358-da9e-45a1-865b-d4897b7fd08f",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1460,
        -460
      ],
      "parameters": {
        "color": 4,
        "width": 1660,
        "content": "### \ud83d\udc64 Need more help? \n**Robert Breen**  \nAutomation Consultant | AI Workflow Designer | n8n Expert  \n\ud83d\udce7 [robert@ynteractive.com](mailto:robert@ynteractive.com)  \n\ud83d\udd17 [LinkedIn](https://www.linkedin.com/in/robert-breen-29429625/)"
      },
      "typeVersion": 1
    },
    {
      "id": "03071d6f-19c8-4322-81df-86976686304b",
      "name": "Get URL",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -1400,
        220
      ],
      "parameters": {
        "options": {},
        "formTitle": "Get URL",
        "formFields": {
          "values": [
            {
              "fieldLabel": "Youtube URL",
              "placeholder": "https://www.youtube.com/watch?v=lW5xEm7iSXk",
              "requiredField": true
            }
          ]
        },
        "formDescription": "get URL"
      },
      "typeVersion": 2.2
    },
    {
      "id": "41fb5123-61fa-4221-ab83-7aa62f6186f2",
      "name": "Query Metadata",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1000,
        180
      ],
      "parameters": {
        "url": "=https://api.apify.com/v2/acts/streamers~youtube-scraper/run-sync-get-dataset-items\n",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n    \"downloadSubtitles\": false,\n    \"hasCC\": false,\n    \"hasLocation\": false,\n    \"hasSubtitles\": false,\n    \"is360\": false,\n    \"is3D\": false,\n    \"is4K\": false,\n    \"isBought\": false,\n    \"isHD\": false,\n    \"isHDR\": false,\n    \"isLive\": false,\n    \"isVR180\": false,\n    \"maxResultStreams\": 0,\n    \"maxResults\": 1,\n    \"maxResultsShorts\": 0,\n    \"preferAutoGeneratedSubtitles\": false,\n    \"saveSubsToKVS\": false,\n    \"startUrls\": [\n        {\n            \"url\": \"{{ $('Get URL').item.json['Youtube URL'] }}\" ,\n            \"method\": \"GET\"\n        }\n    ]\n} ",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpQueryAuth"
      },
      "credentials": {
        "httpQueryAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "efbce0a6-7735-4afb-abce-60d0d3fc6d7a",
      "name": "Query Transcript",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -800,
        100
      ],
      "parameters": {
        "url": "=https://api.apify.com/v2/acts/topaz_sharingan~Youtube-Transcript-Scraper/run-sync-get-dataset-items",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "startUrls",
              "value": "={{ $('Assign parameters').item.json.startUrls }}"
            }
          ]
        },
        "genericAuthType": "httpQueryAuth"
      },
      "credentials": {
        "httpQueryAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "9c564d2d-dcdd-4f2e-bd72-5edf38a0e0e4",
      "name": "Image Prompt Generator",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        -580,
        240
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o",
          "cachedResultName": "GPT-4O"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=Analyze the transcript and video title below and generate a single, detailed prompt for DALL-E to create a YouTube thumbnail image. The prompt must include:\n\nCreate a minimalist YouTube thumbnail in an illustration style. The background should be a very simple, uncluttered setting with soft, ambient lighting that subtly reflects the essence of the transcript. The overall mood should be professional and non-cluttered, ensuring that the text overlay stands out without distraction. Do not include any text.\n\nTranscript: {{ $json.max_transcript }}\nVideo Title: {{ $json.videoTitle }}"
            }
          ]
        },
        "jsonOutput": true
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "5eacaebd-8705-48cf-88c1-44704cbb737b",
      "name": "Create Image",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        -240,
        220
      ],
      "parameters": {
        "prompt": "={{ $json.message.content.prompt }}",
        "options": {
          "size": "1792x1024",
          "returnImageUrls": false
        },
        "resource": "image"
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "3172d569-b188-45dd-879f-c1ea5c0e7d8c",
      "name": "Resize Image",
      "type": "n8n-nodes-base.editImage",
      "position": [
        20,
        200
      ],
      "parameters": {
        "width": 1280,
        "height": 720,
        "options": {
          "format": "jpeg",
          "fileName": "={{ $('Query Transcript').item.json.videoTitle }}"
        },
        "operation": "resize",
        "resizeOption": "ignoreAspectRatio"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Get URL": {
      "main": [
        [
          {
            "node": "Assign parameters",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Image": {
      "main": [
        [
          {
            "node": "Resize Image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Resize Image": {
      "main": [
        []
      ]
    },
    "Query Metadata": {
      "main": [
        [
          {
            "node": "Query Transcript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Query Transcript": {
      "main": [
        [
          {
            "node": "Image Prompt Generator",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Assign parameters": {
      "main": [
        [
          {
            "node": "Query Metadata",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Image Prompt Generator": {
      "main": [
        [
          {
            "node": "Create Image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}