AutomationFlowsAI & RAG › Episode 11: AI Shorts Factory App

Episode 11: AI Shorts Factory App

Episode 11: AI shorts factory app. Uses httpRequest, googleSheets, lmChatOpenAi, lmChatOllama. Event-driven trigger; 96 nodes.

Event trigger★★★★★ complexityAI-powered96 nodesHTTP RequestGoogle SheetsOpenAI ChatOllama ChatLm Chat Deep SeekOpenRouter ChatGoogle Gemini ChatLm Chat Azure Open Ai
AI & RAG Trigger: Event Nodes: 96 Complexity: ★★★★★ AI nodes: yes Added:
Episode 11: AI Shorts Factory App — n8n workflow card showing HTTP Request, Google Sheets, OpenAI Chat integration

This workflow follows the Chainllm → Form Trigger recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "name": "Episode 11: AI shorts factory app",
  "nodes": [
    {
      "parameters": {},
      "type": "n8n-nodes-base.limit",
      "typeVersion": 1,
      "position": [
        2440,
        -600
      ],
      "id": "c8bcb106-e8e7-4b0b-a056-c18027d0f89a",
      "name": "Limit"
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [
        2060,
        -220
      ],
      "id": "78c54309-ffb1-4b8a-81c9-38708cef35e2",
      "name": "Loop Over Items"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.together.xyz/v1/images/generations",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBearerAuth",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "model",
              "value": "black-forest-labs/FLUX.1-schnell-Free"
            },
            {
              "name": "prompt",
              "value": "={{ $json.image_prompt }}"
            },
            {
              "name": "width",
              "value": "={{ 720 }}"
            },
            {
              "name": "height",
              "value": "={{ 1280 }}"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        2380,
        -220
      ],
      "id": "2cb31f5c-2bd2-4e6e-9f2f-5db2ecc8ea95",
      "name": "Generate AI image",
      "alwaysOutputData": false,
      "credentials": {
        "httpBearerAuth": {
          "name": "<your credential>"
        }
      },
      "onError": "continueErrorOutput"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $('Configure me').item.json.ai_agents_no_code_tools_url }}/api/v1/media/storage",
        "sendBody": true,
        "contentType": "multipart-form-data",
        "bodyParameters": {
          "parameters": [
            {
              "name": "url",
              "value": "={{ $json.data[0].url }}"
            },
            {
              "name": "media_type",
              "value": "image"
            }
          ]
        },
        "options": {
          "timeout": 10000
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        2620,
        -280
      ],
      "id": "6067fa48-0fa0-421e-8956-c016520b6163",
      "name": "Upload image to server",
      "retryOnFail": true
    },
    {
      "parameters": {
        "url": "={{ $('Configure me').item.json.ai_agents_no_code_tools_url }}/api/v1/media/storage/{{ $('Start generating TTS (chatterbox)').item.json.file_id }}/status",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        3520,
        -100
      ],
      "id": "f4a27732-2672-449b-922d-add8306c31aa",
      "name": "Get status of TTS generation",
      "retryOnFail": true
    },
    {
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "leftValue": "={{ $json.status }}",
                    "rightValue": "ready",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "id": "91402596-3978-4dfc-91b7-9ffe3521b862"
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "ready"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "0c29765e-4213-434c-9bf3-c5e854dd6ee8",
                    "leftValue": "={{ $json.status }}",
                    "rightValue": "processing",
                    "operator": {
                      "type": "string",
                      "operation": "equals",
                      "name": "filter.operator.equals"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "processing"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "4a6cfd86-e690-417e-aa6d-ae497e1177ae",
                    "leftValue": "={{ $json.status }}",
                    "rightValue": "not_found",
                    "operator": {
                      "type": "string",
                      "operation": "equals",
                      "name": "filter.operator.equals"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "failed"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3.2,
      "position": [
        3680,
        -100
      ],
      "id": "152d7c6d-a3cf-49bb-bdf5-17dd888ffc4e",
      "name": "TTS status switch"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $('Configure me').item.json.ai_agents_no_code_tools_url }}/api/v1/media/video-tools/generate/tts-captioned-video",
        "sendBody": true,
        "contentType": "form-urlencoded",
        "specifyBody": "string",
        "body": "={{ \n\n[\n  `background_id=${$('Upload image to server').item.json.file_id}`,\n  $json.tts_audio_id ? `audio_id=${$json.tts_audio_id}` : false,\n  $json.tts_audio_id ? '' : `text=${encodeURIComponent($('Loop Over Items').item.json.text)}`,\n  $json.tts_audio_id ? '' :  `kokoro_voice=${$('Configure TTS').item.json.kokoro_voice}`,\n  $json.tts_audio_id ? '' : `kokoro_speed=${$('Configure TTS').item.json.kokoro_speed}`\n].filter(Boolean).join('&') \n\n}}",
        "options": {
          "redirect": {
            "redirect": {}
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        4380,
        -300
      ],
      "id": "2cae7eed-1f1c-41f4-b628-e55d6dbab50b",
      "name": "Start generating captioned TTS video"
    },
    {
      "parameters": {
        "url": "={{ $('Configure me').item.json.ai_agents_no_code_tools_url }}/api/v1/media/storage/{{ $('Start generating captioned TTS video').item.json.file_id }}/status",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        4780,
        -300
      ],
      "id": "590d2efa-563e-425e-963c-8f9d8722334e",
      "name": "Get video generation status",
      "retryOnFail": true
    },
    {
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "leftValue": "={{ $json.status }}",
                    "rightValue": "ready",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "id": "91402596-3978-4dfc-91b7-9ffe3521b862"
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "ready"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "0c29765e-4213-434c-9bf3-c5e854dd6ee8",
                    "leftValue": "={{ $json.status }}",
                    "rightValue": "processing",
                    "operator": {
                      "type": "string",
                      "operation": "equals",
                      "name": "filter.operator.equals"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "processing"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "4a6cfd86-e690-417e-aa6d-ae497e1177ae",
                    "leftValue": "={{ $json.status }}",
                    "rightValue": "not_found",
                    "operator": {
                      "type": "string",
                      "operation": "equals",
                      "name": "filter.operator.equals"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "failed"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3.2,
      "position": [
        4960,
        -300
      ],
      "id": "69617e40-7b27-4d51-9618-f46517572a44",
      "name": "Video generation switch"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "a7fdacca-749e-4f69-84fd-50075e0e3409",
              "name": "video_id",
              "value": "={{ $('Start generating captioned TTS video').item.json.file_id }}",
              "type": "string"
            },
            {
              "id": "6c99c267-5c41-4697-ba19-b51d9e8c9a4e",
              "name": "tts_id",
              "value": "={{ $('Global TTS audio id').item.json.tts_audio_id }}",
              "type": "string"
            },
            {
              "id": "21dd08a7-f785-4829-8609-a99950f21572",
              "name": "image_id",
              "value": "={{ $('Upload image to server').item.json.file_id }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        5220,
        -40
      ],
      "id": "ffa78367-acfb-4825-b0cf-c748ac1f7aeb",
      "name": "Setup media fields"
    },
    {
      "parameters": {
        "aggregate": "aggregateAllItemData",
        "options": {}
      },
      "type": "n8n-nodes-base.aggregate",
      "typeVersion": 1,
      "position": [
        2380,
        300
      ],
      "id": "08dc73cd-fcce-49e8-b876-874335730b21",
      "name": "Combine loop items"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $('Configure me').item.json.ai_agents_no_code_tools_url }}/api/v1/media/video-tools/merge",
        "sendBody": true,
        "contentType": "form-urlencoded",
        "bodyParameters": {
          "parameters": [
            {
              "name": "video_ids",
              "value": "={{ $json.data.map(item => item.video_id).join(',') }}"
            },
            {
              "name": "background_music_id",
              "value": "={{ $('Background music results').item.json.background_music_id }}"
            },
            {
              "name": "background_music_volume",
              "value": "={{ $('Background music results').item.json.background_music_volume }}"
            }
          ]
        },
        "options": {
          "redirect": {
            "redirect": {}
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        2580,
        300
      ],
      "id": "3fde82bc-b92c-4628-bf7e-171fd97ef7ba",
      "name": "Start merging the videos"
    },
    {
      "parameters": {
        "url": "={{ $('Configure me').item.json.ai_agents_no_code_tools_url }}/api/v1/media/storage/{{ $('Start merging the videos').item.json.file_id }}/status",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        3000,
        300
      ],
      "id": "61d7ca62-a873-4a62-bd1a-c097fec8597f",
      "name": "Get status of the video merge"
    },
    {
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "leftValue": "={{ $json.status }}",
                    "rightValue": "ready",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "id": "91402596-3978-4dfc-91b7-9ffe3521b862"
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "ready"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "0c29765e-4213-434c-9bf3-c5e854dd6ee8",
                    "leftValue": "={{ $json.status }}",
                    "rightValue": "processing",
                    "operator": {
                      "type": "string",
                      "operation": "equals",
                      "name": "filter.operator.equals"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "processing"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "4a6cfd86-e690-417e-aa6d-ae497e1177ae",
                    "leftValue": "={{ $json.status }}",
                    "rightValue": "not_found",
                    "operator": {
                      "type": "string",
                      "operation": "equals",
                      "name": "filter.operator.equals"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "failed"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3.2,
      "position": [
        3180,
        300
      ],
      "id": "eba2ed7e-e1a2-42e5-b274-926edb995f80",
      "name": "Video merge status switch"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "13b0dde8-b067-41d2-b7c2-fa5addf56a25",
              "name": "download_url",
              "value": "={{ $('Configure me').item.json.ai_agents_no_code_tools_url }}/api/v1/media/storage/{{ $('Start merging the videos').item.json.file_id }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        3980,
        300
      ],
      "id": "6ee81c36-e169-4884-b2b0-082927c1a25c",
      "name": "Setup final video download URL"
    },
    {
      "parameters": {
        "amount": 10
      },
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        2620,
        -120
      ],
      "id": "11fc118f-7551-4a0c-bca3-7a60de327b39",
      "name": "Wait for the error / rate limit to go away"
    },
    {
      "parameters": {
        "amount": 1
      },
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        3340,
        -100
      ],
      "id": "2179d4c3-97f8-4048-810f-3cefb8676f02",
      "name": "Wait until the TTS gets generated"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $('Configure me').item.json.ai_agents_no_code_tools_url }}/api/v1/media/audio-tools/tts/chatterbox",
        "sendBody": true,
        "contentType": "multipart-form-data",
        "bodyParameters": {
          "parameters": [
            {
              "name": "text",
              "value": "={{ $('Loop Over Items').item.json.text }}"
            },
            {
              "name": "sample_audio_id",
              "value": "={{ $('Configure TTS').item.json.chatterbox_clone_voice_id ?? '' }}"
            },
            {
              "name": "exaggeration",
              "value": "={{ $('Configure TTS').item.json.chatterbox_exaggeration }}"
            },
            {
              "name": "cfg_weight",
              "value": "={{ $('Configure TTS').item.json.chatterbox_cfg_weight }}"
            },
            {
              "name": "temperature",
              "value": "={{ $('Configure TTS').item.json.chatterbox_temperature }}"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        3160,
        -100
      ],
      "id": "8875949b-8c20-4341-96c8-c43419adebb1",
      "name": "Start generating TTS (chatterbox)"
    },
    {
      "parameters": {
        "amount": 1
      },
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        4580,
        -300
      ],
      "id": "3a64a8cf-1711-43ab-80a9-73e7b559e162",
      "name": "Wait until the video gets generated"
    },
    {
      "parameters": {
        "amount": 1
      },
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        2800,
        300
      ],
      "id": "0a61605b-2271-4e0f-99d6-9f822538dc59",
      "name": "Wait until the videos gets merged together"
    },
    {
      "parameters": {
        "documentId": {
          "__rl": true,
          "value": "12roXp7Ds8S0nA_Us2MjdKkAldJYUdTV80A7vcjwR6yI",
          "mode": "list",
          "cachedResultName": "reddit stories",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/12roXp7Ds8S0nA_Us2MjdKkAldJYUdTV80A7vcjwR6yI/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "value": "gid=0",
          "mode": "list",
          "cachedResultName": "Sheet1",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/12roXp7Ds8S0nA_Us2MjdKkAldJYUdTV80A7vcjwR6yI/edit#gid=0"
        },
        "filtersUI": {
          "values": [
            {
              "lookupColumn": "video_id"
            }
          ]
        },
        "options": {
          "returnFirstMatch": true
        }
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.6,
      "position": [
        2320,
        -600
      ],
      "id": "fc6e9bfa-28b8-4d5f-b7e6-b56d38b00dcd",
      "name": "Get story",
      "alwaysOutputData": true,
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "leftValue": "={{ $('Configure TTS').item.json.tts_engine }}",
                    "rightValue": "kokoro",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "id": "5ae108d7-13b2-41aa-ab18-45a80515ad51"
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "kokoro"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "a3dbceb9-96f7-4f78-b5e4-81bd6cb9a422",
                    "leftValue": "={{ $('Configure TTS').item.json.tts_engine }}",
                    "rightValue": "chatterbox",
                    "operator": {
                      "type": "string",
                      "operation": "equals",
                      "name": "filter.operator.equals"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "chatterbox"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3.2,
      "position": [
        2940,
        -280
      ],
      "id": "35342540-eb5e-4ced-83c0-a53413abbad4",
      "name": "TTS switch"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "d41f1ef6-7591-41b7-805d-94b58caba5c4",
              "name": "tts_audio_id",
              "value": "={{ $('Start generating TTS (chatterbox)').item.json.file_id }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        3940,
        -120
      ],
      "id": "53ac3c61-abb9-4548-bfb8-2b9318b7fbf8",
      "name": "Setup TTS file_id"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "87d65a77-d25e-42b2-86ac-7b1c4efb2990",
              "name": "text",
              "value": "={{ $json.text.includes(\"<think>\") ? $json.text.split(\"</think>\")[1].trim() : $json.text.trim() }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        3240,
        -600
      ],
      "id": "30b3f8f2-619e-4748-8150-aeea60caa87f",
      "name": "Cleanup text"
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "value": "gpt-4.1-mini",
          "mode": "list",
          "cachedResultName": "gpt-4.1-mini"
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [
        2080,
        -1080
      ],
      "id": "50100cb0-cee8-4a23-8e28-fd7c237b53ef",
      "name": "OpenAI Chat Model",
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "68de9e0e-e234-4509-a57a-4c4c42590620",
              "name": "tts_audio_id",
              "value": "={{ $json.tts_audio_id }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        4200,
        -300
      ],
      "id": "79af5a2e-20f3-4558-a10f-77f5e21eaf32",
      "name": "Global TTS audio id"
    },
    {
      "parameters": {
        "content": "# Pick your choice of LLM \u26a0\ufe0f",
        "height": 700,
        "width": 700,
        "color": 3
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        1540,
        -1560
      ],
      "id": "10fff934-e552-4074-b0bf-a28a8c4013a2",
      "name": "Sticky Note2"
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOllama",
      "typeVersion": 1,
      "position": [
        1620,
        -1420
      ],
      "id": "24a5a896-47fd-4b2b-94f2-9146cb9f2a87",
      "name": "Ollama Chat Model",
      "credentials": {
        "ollamaApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatDeepSeek",
      "typeVersion": 1,
      "position": [
        1940,
        -1420
      ],
      "id": "1edc786e-6c30-4130-b3fb-19eb240afedc",
      "name": "DeepSeek Chat Model"
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "typeVersion": 1,
      "position": [
        2080,
        -1420
      ],
      "id": "bb61849d-53ee-4b44-a4a6-7969360df560",
      "name": "OpenRouter Chat Model"
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "typeVersion": 1,
      "position": [
        1620,
        -1080
      ],
      "id": "3ae2da78-5dc7-4253-8c56-175aa031b2d2",
      "name": "Google Gemini Chat Model"
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
      "typeVersion": 1,
      "position": [
        1620,
        -1260
      ],
      "id": "c75bcf77-c21f-4653-926e-37fdcec0f09f",
      "name": "Azure OpenAI Chat Model"
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatXAiGrok",
      "typeVersion": 1,
      "position": [
        1780,
        -1260
      ],
      "id": "e2725813-5a43-436c-af34-2fe52c9524e0",
      "name": "xAI Grok Chat Model"
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "claude-sonnet-4-20250514",
          "cachedResultName": "Claude 4 Sonnet"
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
      "typeVersion": 1.3,
      "position": [
        1940,
        -1260
      ],
      "id": "ec015205-4e8a-4342-8817-53a0d33f9fc9",
      "name": "Anthropic Chat Model"
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatXAiGrok",
      "typeVersion": 1,
      "position": [
        2080,
        -1260
      ],
      "id": "627f0061-1395-471e-b3bb-e347028c6ed9",
      "name": "xAI Grok Chat Model1"
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatGroq",
      "typeVersion": 1,
      "position": [
        1940,
        -1080
      ],
      "id": "51bf836a-eb46-44fa-a089-9629906a41a5",
      "name": "Groq Chat Model"
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatAwsBedrock",
      "typeVersion": 1,
      "position": [
        1780,
        -1420
      ],
      "id": "7e9c7d7a-3545-4ea3-a5d6-6ddc4d03f5eb",
      "name": "AWS Bedrock Chat Model"
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatMistralCloud",
      "typeVersion": 1,
      "position": [
        1780,
        -1080
      ],
      "id": "187ad812-734c-4aca-b3e8-f2bb4f91fdec",
      "name": "Mistral Cloud Chat Model"
    },
    {
      "parameters": {
        "content": "# 4. Pick a story \u26a0\ufe0f\nmake sure to add the `video_id` filter with an empty value",
        "height": 400,
        "width": 600
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        2280,
        -820
      ],
      "id": "1ff4a376-73b7-4c88-9b3e-acb1aeeaa47a",
      "name": "Sticky Note4"
    },
    {
      "parameters": {
        "content": "# 5. Create script from the story",
        "height": 400,
        "width": 880
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        2920,
        -820
      ],
      "id": "28de4a46-e4e8-442c-b437-c85ad2657c67",
      "name": "Sticky Note5"
    },
    {
      "parameters": {
        "content": "# 9. Merge the videos",
        "height": 360,
        "width": 1180
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        2280,
        180
      ],
      "id": "9e4fa47a-f004-4955-b89e-cf4b44085dc3",
      "name": "Sticky Note6"
    },
    {
      "parameters": {
        "operation": "update",
        "documentId": {
          "__rl": true,
          "value": "12roXp7Ds8S0nA_Us2MjdKkAldJYUdTV80A7vcjwR6yI",
          "mode": "list",
          "cachedResultName": "reddit stories",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/12roXp7Ds8S0nA_Us2MjdKkAldJYUdTV80A7vcjwR6yI/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "value": "gid=0",
          "mode": "list",
          "cachedResultName": "Sheet1",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/12roXp7Ds8S0nA_Us2MjdKkAldJYUdTV80A7vcjwR6yI/edit#gid=0"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "id": "={{ $('Get story').item.json.id }}",
            "video_id": "={{ $('Start merging the videos').item.json.file_id }}"
          },
          "matchingColumns": [
            "id"
          ],
          "schema": [
            {
              "id": "id",
              "displayName": "id",
              "required": false,
              "defaultMatch": true,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "title",
              "displayName": "title",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "content",
              "displayName": "content",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "video_id",
              "displayName": "video_id",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "displayName": "row_number",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "readOnly": true,
              "removed": true
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.6,
      "position": [
        3620,
        300
      ],
      "id": "725188a0-37ba-4cfd-9526-4cd560e17154",
      "name": "Save the video id",
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "content": "# 6. Generate an image with Flux \u26a0\ufe0f",
        "height": 520,
        "width": 580
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        2280,
        -380
      ],
      "id": "00dfbbe2-8567-466e-9156-7990a290cef1",
      "name": "Sticky Note7"
    },
    {
      "parameters": {
        "content": "# 7. Create speech from text",
        "height": 520,
        "width": 1200
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        2900,
        -380
      ],
      "id": "38a1b40a-2c5c-4fa8-a222-9348a72fb595",
      "name": "Sticky Note8"
    },
    {
      "parameters": {
        "content": "# 8. Generate captioned video",
        "height": 520,
        "width": 1240
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        4140,
        -380
      ],
      "id": "982b4ed9-6efa-4d00-bad4-a337c08037c8",
      "name": "Sticky Note9"
    },
    {
      "parameters": {
        "content": "# 10. Save to Sheets \u26a0\ufe0f",
        "height": 360,
        "width": 380
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        3500,
        180
      ],
      "id": "da1993b8-0193-414c-8fc3-34732fb3c5e6",
      "name": "Sticky Note11"
    },
    {
      "parameters": {
        "url": "={{ $('Setup final video download URL').item.json.download_url }}",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        4380,
        300
      ],
      "id": "1a3500c4-094a-4e29-8108-76037ca6ee0f",
      "name": "Download the video"
    },
    {
      "parameters": {
        "text": "=<Instructions>\nBreak up the text to multiple chunks that I can use for generating a youtube video, and for each chunk add an image generation prompt.\n\nAlso create a title and a description for the video.\n\nUse the following art style for the image prompts:\n\nArt style:\n{{ $('Configure me').item.json.art_style }}\n\n</Instructions>\n\n<Text>\n{{ $json.text }}\n</Text>\n\n/nothink",
        "schemaType": "manual",
        "inputSchema": "{\n    \"type\": \"object\",\n    \"properties\": {\n        \"scenes\": {\n            \"type\": \"array\",\n            \"description\": \"user name\",\n            \"items\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"text\": {\n                        \"type\": \"string\",\n                        \"description\": \"the text of the scene, it will be used for TTS\"\n                    },\n                    \"image_prompt\": {\n                        \"type\": \"string\",\n                        \"description\": \"prompt for image generation\"\n                    }\n                },\n                \"required\": [\n                    \"text\",\n                    \"image_prompt\"\n                ]\n            }\n        },\n        \"title\": {\n            \"type\": \"string\",\n            \"description\": \"the title of the youtube video\"\n        },\n        \"description\": {\n            \"type\": \"string\",\n            \"description\": \"the description of the youtube video\"\n        }\n    },\n    \"required\": [\n        \"scenes\",\n        \"title\",\n        \"description\"\n    ]\n}",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.informationExtractor",
      "typeVersion": 1.1,
      "position": [
        3360,
        -600
      ],
      "id": "ca6d8393-efd4-402a-af0d-aca78d92594a",
      "name": "Create the script"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=<Instructions>\nUsing the below content, create 10s-60s long {{ $('Configure me').item.json.content_type }}.\nThe generated script will be used in a YouTube video.\nReturn clear text, no markdowns or any other styling is needed.\n</Instructions>\n\n<Post>\n{{ $('Limit').item.json.title }}\n\n{{ $('Limit').item.json.content }}\n</Post>\n\n/nothink",
        "batching": {}
      },
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "typeVersion": 1.7,
      "position": [
        2960,
        -600
      ],
      "id": "db837a21-6232-4827-bd63-ddc005ba0099",
      "name": "Create the motivational speech"
    },
    {
      "parameters": {
        "fieldToSplitOut": "output.scenes",
        "options": {}
      },
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1,
      "position": [
        3640,
        -600
      ],
      "id": "cf072a94-0c12-4eb0-a3e4-89b26bb863d3",
      "name": "Split Out"
    },
    {
      "parameters": {
        "content": "# 11. Upload to YouTube \u26a0\ufe0f",
        "height": 360,
        "width": 900,
        "color": 4
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        3920,
        180
      ],
      "id": "c3c9866d-7717-4ea3-9685-b3d68bed8907",
      "name": "Sticky Note13"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://www.googleapis.com/upload/youtube/v3/videos?part=snippet,status&uploadType=resumable",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "youTubeOAuth2Api",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            },
            {
              "name": "X-Upload-Content-Type",
              "value": "video/mp4"
            }
          ]
        },
        "sendBody": true,
        "contentType": "raw",
        "rawContentType": "RAW/JSON",
        "body": "={\n  \"snippet\": {\n    \"title\": \"{{ $('Create the script').item.json.output.title }}\",\n    \"description\": \"{{ $('Create the script').item.json.output.description }}\",\n    \"tags\": \"\",\n    \"categoryId\": \"24\",\n    \"defaultLanguage\": \"en\",\n    \"defaultAudioLanguage\": \"en\"\n  },\n  \"status\": {\n    \"privacyStatus\": \"public\",\n    \"license\": \"youtube\",\n    \"embeddable\": true,\n    \"publicStatsViewable\": true,\n    \"madeForKids\": false\n  }\n}\n",
        "options": {
          "response": {
            "response": {
              "fullResponse": true
            }
          }
        }
      },
      "id": "503f1fc6-3ee8-4793-a4fb-f468e5ba58ae",
      "name": "Start Youtube upload",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.1,
      "position": [
        4180,
        300
      ],
      "credentials": {
        "youTubeOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "disabled": true
    },
    {
      "parameters": {
        "method": "PUT",
        "url": "={{ $('Download the video').item.json.headers.location }}",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "youTubeOAuth2Api",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "video/mp4"
            }
          ]
        },
        "sendBody": true,
        "contentType": "binaryData",
        "inputDataFieldName": "data",
        "options": {}
      },
      "id": "200ceb8b-ab0c-431f-9d5f-6ad9138723c4",
      "name": "Upload video to YouTube",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.1,
      "position": [
        4580,
        300
      ],
      "credentials": {
        "youTubeOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "disabled": true
    },
    {
      "parameters": {
        "content": "# How to set up this automation?\n\n## 1. Make a copy of the [Reddit Google Spreadsheet template](https://docs.google.com/spreadsheets/d/1W3BP1fxhmWqJGmhaYTflLnd7l0N1RaQUzXeI3Y5b7Fo/edit?usp=sharing) to your Google Drive\n## 2. Modify the Google Sheets nodes, select the one you just created\n## 3. Start the `AI Agents No-Code Tools` server\n## 4. Open the `Configure me` node, and setup the server url. You can also edit the subreddit, content type and art style if you want\n## 5. Create a free account on [Together AI](http://together.ai/), [create and API key](https://api.together.ai/settings/api-keys) and copy it\n## 6. Set up the `Generate AI Image` Node - create a new Bearer Auth credential and paste the API key from Together AI\n## 7. Set up the `Start YouTube upload` and `Upload video to YouTube` nodes - select/setup your YouTube credentials\n",
        "height": 400,
        "width": 1640,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        2280,
        -2560
      ],
      "id": "382b4677-edf5-4991-a988-462dc90e0ede",
      "name": "Sticky Note14"
    },
    {
      "parameters": {
        "url": "=https://www.reddit.com/r/{{ $('Configure me').item.json.subreddit }}/top.json?t=month&limit=100",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        2740,
        -1200
      ],
      "id": "ab96a05d-5595-4861-ae8b-bab0ab84a627",
      "name": "Get stories from reddit"
    },
    {
      "parameters": {
        "fieldToSplitOut": "data.children",
        "options": {}
      },
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1,
      "position": [
        2900,
        -1200
      ],
      "id": "01527db1-5efc-4e02-8b64-5f40e5aefa1d",
      "name": "For Each story"
    },
    {
      "parameters": {
        "operation": "appendOrUpdate",
        "documentId": {
          "__rl": true,
          "value": "12roXp7Ds8S0nA_Us2MjdKkAldJYUdTV80A7vcjwR6yI",
          "mode": "list",
          "cachedResultName": "reddit stories",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/12roXp7Ds8S0nA_Us2MjdKkAldJYUdTV80A7vcjwR6yI/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "value": "gid=0",
          "mode": "list",
          "cachedResultName": "Sheet1",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/12roXp7Ds8S0nA_Us2MjdKkAldJYUdTV80A7vcjwR6yI/edit#gid=0"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "title": "={{ $json.data.title }}",
            "content": "={{ $json.data.selftext }}",
            "id": "={{ $json.data.id }}"
          },
          "matchingColumns": [
            "id"
          ],
          "schema": [
            {
              "id": "id",
              "displayName": "id",
              "required": false,
              "defaultMatch": true,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "title",
              "displayName": "title",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "content",
              "displayName": "content",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "video_id",
              "displayName": "video_id",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.6,
      "position": [
        3060,
        -1200
      ],
      "id": "035dde32-1ece-4119-bcc5-dadeba1b81af",
      "name": "Save it to Google Sheets",
      "retryOnFail": true,
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "content": "# 2. Update reddit stories \u26a0\ufe0f",
        "height": 460,
        "width": 1080
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        2280,
        -1320
      ],
      "id": "e705aaca-eeae-4664-86cb-7ac23130a593",
      "name": "Sticky Note17"
    },
    {
      "parameters": {
        "formTitle": "AI Agents A-Z Shorts Factory",
        "formFields": {
          "values": [
            {
              "fieldLabel": "Would you like to update the sheet by downloading the stories from reddit?",
              "fieldType": "dropdown",
              "fieldOptions": {
                "values": [
                  {
                    "option": "no"
                  },
                  {
                    "option": "yes"
                  }
                ]
              },
              "requiredField": true
            },
            {
              "fieldLabel": "Would you like to use background music in the final video?",
              "fieldType": "dropdown",
              "fieldOptions": {
                "values": [
                  {
                    "option": "no"
                  },
                  {
                    "option": "yes"
                  }
                ]
              },
              "requiredField": true
            },
            {
              "fieldType": "html",
              "elementName": "warning",
              "html": "<h2>Make sure the server has enough resources!</h1>\n<h3>Minimum 4vCPUs are recommended (more is better)</h3>\n<h3>Chatterbox requires at least 8gb free ram</h2>\n<h3>Kokoro requires at least 5gb free ram</h2>"
            },
            {
              "fieldLabel": "Which TTS engine would you like to use?",
              "fieldType": "dropdown",
              "fieldOptions": {
                "values": [
                  {
                    "option": "kokoro"
                  },
                  {
                    "option": "chatterbox"
                  }
                ]
              },
              "requiredField": true
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.formTrigger",
      "typeVersion": 2.2,
      "position": [
        1300,
        -1900
      ],
      "id": "33977dfb-72bc-4461-9b9e-ec1ad4dd0008",
      "name": "On form submission1"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "673ecb92-5253-45ae-ab8b-17d673845442",
              "leftValue": "={{ $('On form submission1').item.json['Would you like to update the sheet by downloading the stories from reddit?'] }}",
              "rightValue": "yes",
              "operator": {
                "type": "string",
                "operation": "equals"
              }
            },
            {
              "id": "9a8bc757-1144-451d-b36a-18e74140a30e",
              "leftValue": "={{ !$('Aggregate').item.json.data?.[0] }}",
              "rightValue": 1,
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ],
          "combinator": "or"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        2600,
        -1060
      ],
      "id": "ba4da449-454e-47b9-b9ec-ff6cde85df85",
      "name": "Update reddit stories?"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "0cde6e03-a8da-4f1a-91c7-4adee90614c9",
              "leftValue": "={{ $('On form submission1').item.json['Would you like to use background music in the final video?'] }}",
              "rightValue": "yes",
              "operator": {
                "type": "string",
                "operation": "equals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        3500,
        -1040
      ],
      "id": "d3bd8b4b-88a9-40c7-a6ef-0c9e333e7ec9",
      "name": "Background music?"
    },
    {
      "parameters": {
        "formFields": {
          "values": [
            {
              "fieldLabel": "Voice sample",
              "fieldType": "file",
              "multipleFiles": false,
              "acceptFileTypes": ".mp3, .wav",
              "requiredField": true
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.form",
      "typeVersion": 1,
      "position": [
        3520,
        -2060
      ],
      "id": "49ba6c34-841d-44d3-be57-847861c304e2",
      "name": "Upload voice sample"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $('Configure me').item.json.ai_agents_no_code_tools_url }}/api/v1/media/storage",
        "sendBody": true,
        "contentType": "multipart-form-data",
        "bodyParameters": {
          "parameters": [
            {
              "parameterType": "formBinaryData",
              "name": "file",
              "inputDataFieldName": "=Voice_sample"
            },
            {
              "name": "media_type",
              "value": "audio"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        3540,
        -1840
      ],
      "id": "f0b67be6-be95-4009-93f0-4338b64d60a9",
      "name": "Upload voice sample to the server"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $('Configure me').item.json.ai_agents_no_code_tools_url }}/api/v1/media/storage",
        "sendBody": true,
        "contentType": "multipart-form-data",
        "bodyParameters": {
          "parameters": [
            {
              "parameterType": "formBinaryData",
              "name": "file",
              "inputDataFieldName": "=Background_music"
            },
            {
              "name": "media_type",
              "value": "audio"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        3900,
        -1200
      ],
      "id": "2b82bf2e-9a8e-41c4-917c-70f137be38a6",
      "name": "Upload background music to the server"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "7bbb518a-c4f1-49a5-9e72-3e9d939b131b",
              "name": "ai_agents_no_code_tools_url",
              "value": "http://192.168.68.60:8000",
              "type": "string"
            },
            {
              "id": "485a5788-cda6-4015-aa8d-d7b7ff012266",
              "name": "subreddit",
              "value": "selfimprovement",
              "type": "string"
            },
            {
              "id": "afa3df27-f529-452f-8976-63a0af466584",
              "name": "content_type",
              "value": "motivational speech",
              "type": "string"
            },
            {
              "id": "ddd725fb-b9f6-45d6-90df-88c50ba53a20",
              "name": "art_style",
              "value": "=Use the following prompt as a template for the image generation prompt, use the content to create a unique image for the scene.\n\nCreate a cinematic image in a dramatic, high-contrast photographic style, with a cool blue color grading. The subject is a figure [doing something, like walking under a waterfall, sitting under a tree, watching the sunset, whatever makes sense from the content's perspective], captured from a distance. The foreground should be softly blurred to focus attention on the landscape details. The mood should convey strength, wisdom, and a sense of calm determination. The overall visual should feel inspirational and dignified, resembling a powerful nature documentary scene.",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1640,
        -1900
      ],
      "id": "1317b2ea-97b2-450b-a209-8b23b5a30e90",
      "name": "Configure me"
    },
    {
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "b538c801-3185-4763-b9d5-5a38088325fa",
                    "leftValue": "={{ $('On form submission1').item.json['Which TTS engine would you like to use?'] }}",
                    "rightValue": "chatterbox",
                    "operator": {
                      "type": "string",
                      "operation": "equals",
                      "name": "filter.operator.equals"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "chatterbox"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "leftValue": "={{ $('On form submission1').item.json['Which TTS engine would you like to use?'] }}",
                    "rightValue": "kokoro",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "id": "9643d386-ce0c-4543-99d6-2eaebe2f0c2e"
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "kokoro"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3.2,
      "position": [
        2340,
        -1820
      ],
      "id": "12cb8201-eddd-4229-97f6-45aac39f8d65",
      "name": "Switch"
    },
    {
      "parameters": {
        "url": "={{ $('Configure me').item.json.ai_agents_no_code_tools_url }}/api/v1/media/audio-tools/tts/kokoro/voices",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        2560,
        -1540
      ],
      "id": "fe182de1-b1fc-41a7-8382-1f1ad43f0bf1",
      "name": "Get supported kokoro voices"
    },
    {
      "parameters": {
        "defineForm": "json",
        "jsonOutput": "=[\n   {\n      \"fieldLabel\": \"Voice\",\n      \"requiredField\": true,\n      \"fieldType\": \"dropdown\",\n      \"fieldOptions\": {\n        \"values\": {{ $json.voices.map(item => { return {option: `${item}`} }) }}\n      }\n   },\n   {\n      \"fieldLabel\": \"Speed\",\n      \"fieldType\": \"number\",\n      \"placeholder\": \"The default is 1\",\n      \"requiredField\": true\n   }\n]",
        "options": {}
      },
      "type": "n8n-nodes-base.form",
      "typeVersion": 1,
      "position": [
        2720,
        -1540
      ],
      "id": "63a21795-78d8-44c6-8cca-2f3d490d57d8",
      "name": "Setup kokoro"
    },
    {
      "parameters": {
        "formFields": {
          "values": [
            {
              "fieldLabel": "Clone voice?",
              "fieldType": "dropdown",
              "fieldOptions": {
                "values": [
                  {
                    "option": "no"
                  },
                  {
                    "option": "yes"
                  }
                ]
              },
              "requiredField": true
            },
            {
              "fieldLabel": "Setup advanced options?",
              "fieldType": "dropdown",
              "fieldOptions": {
                "values": [
                  {
                    "option": "no"
                  },
                  {
                    "option": "yes"
                  }
                ]
              },
              "requiredField": true
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.form",
      "typeVersion": 1,
      "position": [
        2560,
        -1840
      ],
      "id": "abe6e69b-caac-4798-b412-a5e860d4af36",
      "name": "Setup chatterbox"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "7f58fc2c-48a2-4bed-b21a-84a080c84daf",
              "name": "tts_engine",
              "value": "={{ $('On form submission1').item.json['Which TTS engine would you like to use?'] }}",
              "type": "string"
            },
            {
              "id": "351324cf-a658-48f5-9150-0c8a9304fb41",
              "name": "kokoro_voice",
              "value": "={{ $json.Voice }}",
              "type": "string"
            },
            {
              "id": "f094be8b-c33a-44ba-8fc9-cb08d9cce918",
              "name": "kokoro_speed",
              "value": "={{ $json.Speed }}",
              "type": "number"
            },
            {
              "id": "4b98a5f0-83c9-46c9-b7dd-10a4e7633577",
              "name": "chatterbox_exaggeration",
              "value": "={{ $json.chatterbox_exaggeration }}",
              "type": "number"
            },
            {
              "id": "95751284-1328-4522-b4b2-cb00002db8e2",
              "name": "chatterbox_cfg_weight",
              "value": "={{ $json.chatterbox_cfg_weight }}",
              "type": "string"
            },
            {
              "id": "099815a4-0abb-4368-83ac-53f2213d88d5",
              "name": "chatterbox_temperature",
              "value": "={{ $json.chatterbox_temperature }}",
              "type": "string"
            },
            {
              "id": "637133d4-83eb-4535-b7c3-233009ab5208",
              "name": "chatterbox_clone_voice_id",
              "value": "={{ $json.chatterbox_voice_sample_id }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        3760,
        -1540
      ],
      "id": "d7eeded4-9399-4a0f-96dd-180be6bc2582",
      "name": "Configure TTS"
    },
    {
      "parameters": {
        "formFi

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Episode 11: AI shorts factory app. Uses httpRequest, googleSheets, lmChatOpenAi, lmChatOllama. Event-driven trigger; 96 nodes.

Source: https://github.com/gyoridavid/ai_agents_az/blob/main/episode_11/workflow_motivational_shorts.json — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

Content - Newsletter Agent. Uses formTrigger, chainLlm, outputParserStructured, httpRequest. Event-driven trigger; 91 nodes.

Form Trigger, Chain Llm, Output Parser Structured +8
AI & RAG

A Telegram bot that converts natural-language work descriptions into detailed cost estimates using AI parsing, vector search, and the open-source DDC CWICR database with 55,000+ construction work item

HTTP Request, Telegram, Telegram Trigger +6
AI & RAG

Content - Newsletter Agent. Uses formTrigger, chainLlm, outputParserStructured, httpRequest. Event-driven trigger; 87 nodes.

Form Trigger, Chain Llm, Output Parser Structured +7
AI & RAG

Bitlab-Chatbot. Uses telegramTrigger, telegram, snowflake, httpRequest. Event-driven trigger; 87 nodes.

Telegram Trigger, Telegram, Snowflake +13
AI & RAG

This template attempts to replicate OpenAI's DeepResearch feature which, at time of writing, is only available to their pro subscribers.

Output Parser Structured, OpenAI Chat, Form Trigger +8