AutomationFlowsAI & RAG › Turn Course Videos Into Clickup Learning Tasks with Wayinvideo and Gpt‑4o‑mini

Turn Course Videos Into Clickup Learning Tasks with Wayinvideo and Gpt‑4o‑mini

ByIncrementors @incrementors on n8n.io

Submit any course or lecture video URL along with the course title, module name, assignee, due date, and priority and the workflow automatically converts the entire module into a ClickUp task list. WayinVideo summarizes the video and extracts key learning highlights, then…

Event trigger★★★★☆ complexityAI-powered18 nodesForm TriggerHTTP RequestAgentOpenAI ChatClickUpGoogle Sheets
AI & RAG Trigger: Event Nodes: 18 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #15553 — we link there as the canonical source.

This workflow follows the Agent → 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
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "beef18db-1b18-435f-b79b-b7ca441bb745",
      "name": "Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1136,
        -752
      ],
      "parameters": {
        "color": 4,
        "width": 508,
        "height": 1140,
        "content": "## Online Course Video to ClickUp Task List Generator \u2014 WayinVideo Summarization + GPT-4o-mini + ClickUp + Sheets\n\nFor L&D teams, student communities, training managers, and knowledge workers who watch online courses and want to automatically convert every module into an actionable ClickUp task list \u2014 so learning translates directly into doing. Submit any course or lecture video URL via the form. WayinVideo Summarization API generates a structured summary with numbered highlights and tags. GPT-4o-mini reads the summary and returns a pure JSON array of 5\u201312 tasks \u2014 each with a title, description, task type, estimated minutes, and checklist steps. Each task is created in ClickUp with the priority, due date, and course-prefixed title. Every task is also logged to Google Sheets with the ClickUp Task ID and URL.\n\n## How it works\n- **1. Form \u2014 Course Video + Details** collects the video URL, course title, module title, assignee name, due date, and priority level\n- **2. WayinVideo \u2014 Submit Summarization** submits the URL to the Summarization API\n- **3. Wait \u2014 90 Seconds** gives the API initial processing time\n- **4. WayinVideo \u2014 Get Summary Results** polls the summaries results endpoint\n- **5. IF \u2014 Summary Complete?** checks for SUCCEEDED \u2014 if not, retries via 30-second wait\n- **7. Code \u2014 Extract Summary Data** extracts summary, numbered highlights, tags, and maps the priority string to a ClickUp priority number and converts the due date to a Unix timestamp\n- **8. AI Agent \u2014 Extract Learning Tasks** uses GPT-4o-mini with strict JSON output rules to extract 5\u201312 structured tasks with checklist steps\n- **10. Code \u2014 Parse Tasks Array** parses the JSON array from AI output with error handling, prefixes task titles with the course name, and returns one item per task\n- **11. ClickUp \u2014 Create Task** creates one ClickUp task per learning objective with priority, due date, and course-learning tags\n- **12. Google Sheets \u2014 Log Tasks** appends one row per task with ClickUp Task ID, URL, type, estimated time, and all module metadata\n\n## Set up steps\n1. In **2** and **4** \u2014 replace `YOUR_WAYINVIDEO_API_KEY`\n2. In **9. OpenAI \u2014 GPT-4o-mini Model** \u2014 connect your OpenAI credential\n3. In **11. ClickUp \u2014 Create Task** \u2014 connect your ClickUp OAuth2 credential and replace `YOUR_CLICKUP_LIST_ID` (right-click your list in ClickUp \u2192 Copy link \u2192 ID is the last segment in the URL)\n4. In **12. Google Sheets \u2014 Log Tasks** \u2014 connect your Google Sheets OAuth2 credential and replace `YOUR_GOOGLE_SHEET_ID`\n5. Create a Google Sheet tab named Course Tasks Log with columns: Course Title, Module Title, Video URL, Task Number, Task Title, Task Type, Estimated Minutes, Total Tasks in Module, ClickUp Task ID, ClickUp Task URL, Assigned To, Due Date, Priority, Generated On"
      },
      "typeVersion": 1
    },
    {
      "id": "5aecae4c-aa1a-4a93-84f3-e5a26ac42dfb",
      "name": "Section \u2014 Form Input",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -480,
        -480
      ],
      "parameters": {
        "color": 5,
        "width": 276,
        "height": 452,
        "content": "## Form Input\nUser submits course video URL, course title, module title, assignee name, task due date, and priority level. Priority is mapped to ClickUp numbers: urgent=1, high=2, normal=3, low=4."
      },
      "typeVersion": 1
    },
    {
      "id": "040303b1-6b96-4826-8e1e-7143a8bc31c3",
      "name": "Section \u2014 WayinVideo Summarization Submit and Poll",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -160,
        -448
      ],
      "parameters": {
        "color": 6,
        "width": 660,
        "height": 420,
        "content": "## WayinVideo Summarization Submit and Poll\nSubmits the course video URL to the Summarization API. Waits 90 seconds for initial processing. Polls the results endpoint until status equals SUCCEEDED."
      },
      "typeVersion": 1
    },
    {
      "id": "fc607626-f32c-4b6c-bad6-7c41317da904",
      "name": "Section \u2014 Summary Status Check and Retry Loop",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        528,
        -592
      ],
      "parameters": {
        "color": 6,
        "width": 308,
        "height": 772,
        "content": "## Summary Status Check and Retry Loop\nIF checks for SUCCEEDED status. TRUE proceeds to summary extraction. FALSE waits 30 seconds and polls again. Loop continues until summary is ready."
      },
      "typeVersion": 1
    },
    {
      "id": "88140aab-b057-4cdf-878c-43ca2a8a9cda",
      "name": "Section \u2014 Summary Extraction and AI Learning Task Extraction",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        864,
        -544
      ],
      "parameters": {
        "color": 6,
        "width": 564,
        "height": 596,
        "content": "## Summary Extraction and AI Learning Task Extraction\nFormats summary, numbered highlights, and maps priority and due date. GPT-4o-mini returns a pure JSON array of 5\u201312 tasks \u2014 each with title, description, type, estimated minutes, and checklist steps."
      },
      "typeVersion": 1
    },
    {
      "id": "7e7372db-b40f-4149-842b-9370f35fea83",
      "name": "Section \u2014 Task Parse, ClickUp Create, and Sheet Log",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1456,
        -416
      ],
      "parameters": {
        "color": 4,
        "width": 788,
        "height": 340,
        "content": "## Task Parse, ClickUp Create, and Sheet Log\nParses the JSON task array with error handling and prefixes titles with the course name. Creates one ClickUp task per learning objective. Logs every task to Google Sheets with ClickUp Task ID and URL."
      },
      "typeVersion": 1
    },
    {
      "id": "9ae48f6e-6b69-4c84-8d72-d83fe178c30c",
      "name": "1. Form \u2014 Course Video + Details",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -416,
        -288
      ],
      "parameters": {
        "options": {},
        "formTitle": "Course Video to ClickUp Task Generator",
        "formFields": {
          "values": [
            {
              "fieldLabel": "Course Video URL",
              "placeholder": "https://www.youtube.com/watch?v=xxxxxxx or Zoom/Vimeo/Loom link",
              "requiredField": true
            },
            {
              "fieldLabel": "Course Title",
              "placeholder": "e.g. Complete Python Bootcamp, Advanced SEO Mastery",
              "requiredField": true
            },
            {
              "fieldLabel": "Module / Lecture Title",
              "placeholder": "e.g. Module 3 \u2014 Functions and Loops, Week 2 \u2014 On-Page SEO",
              "requiredField": true
            },
            {
              "fieldLabel": "Assign Tasks To",
              "placeholder": "e.g. John Smith, Marketing Team, Self",
              "requiredField": true
            },
            {
              "fieldLabel": "Task Due Date",
              "placeholder": "e.g. 2025-05-10",
              "requiredField": true
            },
            {
              "fieldLabel": "Task Priority",
              "placeholder": "e.g. High / Normal / Low",
              "requiredField": true
            }
          ]
        },
        "formDescription": "Paste your course or lecture video URL. AI will summarize the module and automatically create a ClickUp task list with all learning objectives and action items."
      },
      "typeVersion": 2.2
    },
    {
      "id": "ee589678-b3be-4110-85c5-a66691d3f269",
      "name": "2. WayinVideo \u2014 Submit Summarization",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -112,
        -288
      ],
      "parameters": {
        "url": "https://wayinvideo-api.wayin.ai/api/v2/summaries",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"video_url\": \"{{ $json['Course Video URL'] }}\",\n  \"target_lang\": \"en\"\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer YOUR_TOKEN_HERE"
            },
            {
              "name": "x-wayinvideo-api-version",
              "value": "v2"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "2e1fb45b-046c-4548-a0ff-5b81c87f18e7",
      "name": "3. Wait \u2014 90 Seconds",
      "type": "n8n-nodes-base.wait",
      "position": [
        128,
        -288
      ],
      "parameters": {
        "amount": 90
      },
      "typeVersion": 1.1
    },
    {
      "id": "f110c588-f069-4935-b54b-313856656dd7",
      "name": "4. WayinVideo \u2014 Get Summary Results",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        368,
        -288
      ],
      "parameters": {
        "url": "=https://wayinvideo-api.wayin.ai/api/v2/summaries/results/{{ $('2. WayinVideo \u2014 Submit Summarization').item.json.data.id }}",
        "options": {},
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer YOUR_TOKEN_HERE"
            },
            {
              "name": "x-wayinvideo-api-version",
              "value": "v2"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "0230f615-3e91-4ca7-8141-ff5c0ff2fdbb",
      "name": "5. IF \u2014 Summary Complete?",
      "type": "n8n-nodes-base.if",
      "position": [
        608,
        -288
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "status-check",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.data.status }}",
              "rightValue": "SUCCEEDED"
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "d64916fe-669f-4a5f-bead-0668873f71a8",
      "name": "6. Wait \u2014 30 Seconds Retry",
      "type": "n8n-nodes-base.wait",
      "position": [
        608,
        -80
      ],
      "parameters": {
        "amount": 30
      },
      "typeVersion": 1.1
    },
    {
      "id": "6e90c7e6-23ae-4d5d-bf9e-0d18245cb2ef",
      "name": "7. Code \u2014 Extract Summary Data",
      "type": "n8n-nodes-base.code",
      "position": [
        896,
        -304
      ],
      "parameters": {
        "jsCode": "// Extract summary data from WayinVideo\nconst summaryData = $('4. WayinVideo \u2014 Get Summary Results').item.json.data;\n\nconst summary = summaryData.summary || '';\nconst highlights = Array.isArray(summaryData.highlights)\n  ? summaryData.highlights.map((h, i) => `${i + 1}. ${h.desc}`).join('\\n')\n  : '';\nconst tags = Array.isArray(summaryData.tags)\n  ? summaryData.tags.join(', ')\n  : '';\n\n// Get form data\nconst courseTitle = $('1. Form \u2014 Course Video + Details').item.json['Course Title'];\nconst moduleTitle = $('1. Form \u2014 Course Video + Details').item.json['Module / Lecture Title'];\nconst assignTo = $('1. Form \u2014 Course Video + Details').item.json['Assign Tasks To'];\nconst dueDate = $('1. Form \u2014 Course Video + Details').item.json['Task Due Date'];\nconst priority = $('1. Form \u2014 Course Video + Details').item.json['Task Priority'];\nconst videoUrl = $('1. Form \u2014 Course Video + Details').item.json['Course Video URL'];\n\n// Map priority to ClickUp priority number\nconst priorityMap = {\n  'urgent': 1,\n  'high': 2,\n  'normal': 3,\n  'low': 4\n};\nconst priorityNumber = priorityMap[priority.toLowerCase()] || 3;\n\n// Convert due date to Unix timestamp (milliseconds)\nconst dueDateTimestamp = new Date(dueDate).getTime();\n\nreturn [{\n  json: {\n    summary,\n    highlights,\n    tags,\n    courseTitle,\n    moduleTitle,\n    assignTo,\n    dueDate,\n    dueDateTimestamp,\n    priority,\n    priorityNumber,\n    videoUrl\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "1a41b04b-bef2-4421-95ab-eb7cf0a14c6c",
      "name": "8. AI Agent \u2014 Extract Learning Tasks",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1136,
        -304
      ],
      "parameters": {
        "text": "={{ $json.summary }}\n\nKey Highlights:\n{{ $json.highlights }}",
        "options": {
          "systemMessage": "=You are an expert learning and development specialist who converts course module summaries into actionable ClickUp tasks.\n\nYour job is to read this course module summary and extract every specific learning objective, practice exercise, and action item as a separate ClickUp task.\n\n---\n\n## MODULE DETAILS\n- Course: {{ $json.courseTitle }}\n- Module: {{ $json.moduleTitle }}\n- Assigned To: {{ $json.assignTo }}\n- Due Date: {{ $json.dueDate }}\n- Priority: {{ $json.priority }}\n- Video URL: {{ $json.videoUrl }}\n\n---\n\n## TASK EXTRACTION RULES\n1. Extract ONLY actionable tasks \u2014 things someone must DO or PRACTICE\n2. Each task must be specific and achievable \u2014 not vague goals\n3. Task titles must start with an action verb \u2014 e.g. 'Complete', 'Practice', 'Build', 'Review', 'Implement', 'Watch'\n4. Task descriptions must explain WHAT to do and WHY it matters from the module\n5. Generate minimum 5 tasks, maximum 12 tasks per module\n6. Every task must be clearly derived from the module content\n7. Include a mix of: review tasks, practice tasks, implementation tasks, and reflection tasks\n\n---\n\n## OUTPUT FORMAT\nReturn ONLY a valid JSON array \u2014 no text before or after, no markdown backticks.\n\n[\n  {\n    \"task_number\": 1,\n    \"task_title\": \"[Action verb] + specific task name \u2014 5-10 words\",\n    \"task_description\": \"What to do: [2-3 sentences explaining the task]\\n\\nWhy it matters: [1 sentence on importance from the module]\\n\\nReference: {{ $json.videoUrl }}\",\n    \"task_type\": \"[Choose one: Review / Practice / Build / Implement / Reflect]\",\n    \"estimated_minutes\": [Number \u2014 realistic time to complete this task],\n    \"checklist_items\": [\n      \"Step 1 to complete this task\",\n      \"Step 2 to complete this task\",\n      \"Step 3 if applicable\"\n    ]\n  }\n]\n\n---\n\nRULES:\n- Return ONLY the JSON array \u2014 nothing else\n- task_title must start with an action verb\n- estimated_minutes must be a realistic number (15-120)\n- checklist_items must be specific steps \u2014 not generic\n- Extract minimum 5 tasks\n\nNow extract the tasks from this course module:"
        },
        "promptType": "define"
      },
      "typeVersion": 3.1
    },
    {
      "id": "3ad4483b-4295-4299-b641-a180b0555046",
      "name": "9. OpenAI \u2014 GPT-4o-mini Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1136,
        -96
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {},
        "builtInTools": {}
      },
      "typeVersion": 1.3
    },
    {
      "id": "de9904b3-2410-4dae-a44a-2d2c2a3e8cf1",
      "name": "10. Code \u2014 Parse Tasks Array",
      "type": "n8n-nodes-base.code",
      "position": [
        1504,
        -304
      ],
      "parameters": {
        "jsCode": "// Parse AI output \u2014 extract JSON array of tasks\nconst output = $input.first().json.output || '';\n\nlet tasks = [];\ntry {\n  const cleaned = output\n    .replace(/```json/gi, '')\n    .replace(/```/g, '')\n    .trim();\n\n  const match = cleaned.match(/\\[\\s*\\{[\\s\\S]*\\}\\s*\\]/);\n  if (match) {\n    tasks = JSON.parse(match[0]);\n  } else {\n    tasks = JSON.parse(cleaned);\n  }\n} catch (e) {\n  throw new Error('Could not parse tasks from AI output: ' + output.substring(0, 300));\n}\n\nif (!Array.isArray(tasks) || tasks.length === 0) {\n  throw new Error('No tasks extracted from AI output.');\n}\n\n// Get module data\nconst courseTitle = $('7. Code \u2014 Extract Summary Data').item.json.courseTitle;\nconst moduleTitle = $('7. Code \u2014 Extract Summary Data').item.json.moduleTitle;\nconst assignTo = $('7. Code \u2014 Extract Summary Data').item.json.assignTo;\nconst dueDateTimestamp = $('7. Code \u2014 Extract Summary Data').item.json.dueDateTimestamp;\nconst priorityNumber = $('7. Code \u2014 Extract Summary Data').item.json.priorityNumber;\nconst videoUrl = $('7. Code \u2014 Extract Summary Data').item.json.videoUrl;\nconst summary = $('7. Code \u2014 Extract Summary Data').item.json.summary;\n\n// Return one item per task\nreturn tasks.map(task => ({\n  json: {\n    taskNumber: task.task_number || 0,\n    taskTitle: `[${courseTitle}] ${task.task_title || 'Learning Task'}`,\n    taskDescription: task.task_description || '',\n    taskType: task.task_type || 'Practice',\n    estimatedMinutes: task.estimated_minutes || 30,\n    checklistItems: Array.isArray(task.checklist_items) ? task.checklist_items : [],\n    courseTitle,\n    moduleTitle,\n    assignTo,\n    dueDateTimestamp,\n    priorityNumber,\n    videoUrl,\n    summary,\n    totalTasks: tasks.length\n  }\n}));"
      },
      "typeVersion": 2
    },
    {
      "id": "c1807339-d6fb-4b17-8273-aeb59beeedde",
      "name": "11. ClickUp \u2014 Create Task",
      "type": "n8n-nodes-base.clickUp",
      "position": [
        1744,
        -304
      ],
      "parameters": {
        "name": "={{ $json.taskTitle }}",
        "additionalFields": {
          "tags": [
            "course-task",
            "learning"
          ],
          "status": "To Do",
          "dueDate": "={{ $json.dueDateTimestamp }}",
          "priority": "={{ $json.priorityNumber }}"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "025b0078-9c82-44ed-b7ed-e8545e568706",
      "name": "12. Google Sheets \u2014 Log Tasks",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1984,
        -304
      ],
      "parameters": {
        "columns": {
          "value": {
            "Due Date": "={{ $('7. Code \u2014 Extract Summary Data').item.json.dueDate }}",
            "Priority": "={{ $('7. Code \u2014 Extract Summary Data').item.json.priority }}",
            "Task Type": "={{ $('10. Code \u2014 Parse Tasks Array').item.json.taskType }}",
            "Video URL": "={{ $('10. Code \u2014 Parse Tasks Array').item.json.videoUrl }}",
            "Task Title": "={{ $('10. Code \u2014 Parse Tasks Array').item.json.taskTitle }}",
            "Assigned To": "={{ $('10. Code \u2014 Parse Tasks Array').item.json.assignTo }}",
            "Task Number": "={{ $('10. Code \u2014 Parse Tasks Array').item.json.taskNumber }}",
            "Course Title": "={{ $('10. Code \u2014 Parse Tasks Array').item.json.courseTitle }}",
            "Generated On": "={{ $now.toFormat('dd MMMM yyyy HH:mm') }}",
            "Module Title": "={{ $('10. Code \u2014 Parse Tasks Array').item.json.moduleTitle }}",
            "ClickUp Task ID": "={{ $json.id }}",
            "ClickUp Task URL": "={{ $json.url }}",
            "Estimated Minutes": "={{ $('10. Code \u2014 Parse Tasks Array').item.json.estimatedMinutes }}",
            "Total Tasks in Module": "={{ $('10. Code \u2014 Parse Tasks Array').item.json.totalTasks }}"
          },
          "schema": [],
          "mappingMode": "defineBelow",
          "matchingColumns": []
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Course Tasks Log"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "YOUR_GOOGLE_SHEET_ID"
        }
      },
      "typeVersion": 4.5
    }
  ],
  "connections": {
    "3. Wait \u2014 90 Seconds": {
      "main": [
        [
          {
            "node": "4. WayinVideo \u2014 Get Summary Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "11. ClickUp \u2014 Create Task": {
      "main": [
        [
          {
            "node": "12. Google Sheets \u2014 Log Tasks",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5. IF \u2014 Summary Complete?": {
      "main": [
        [
          {
            "node": "7. Code \u2014 Extract Summary Data",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "6. Wait \u2014 30 Seconds Retry",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "6. Wait \u2014 30 Seconds Retry": {
      "main": [
        [
          {
            "node": "4. WayinVideo \u2014 Get Summary Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "10. Code \u2014 Parse Tasks Array": {
      "main": [
        [
          {
            "node": "11. ClickUp \u2014 Create Task",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9. OpenAI \u2014 GPT-4o-mini Model": {
      "ai_languageModel": [
        [
          {
            "node": "8. AI Agent \u2014 Extract Learning Tasks",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "7. Code \u2014 Extract Summary Data": {
      "main": [
        [
          {
            "node": "8. AI Agent \u2014 Extract Learning Tasks",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "1. Form \u2014 Course Video + Details": {
      "main": [
        [
          {
            "node": "2. WayinVideo \u2014 Submit Summarization",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "4. WayinVideo \u2014 Get Summary Results": {
      "main": [
        [
          {
            "node": "5. IF \u2014 Summary Complete?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "2. WayinVideo \u2014 Submit Summarization": {
      "main": [
        [
          {
            "node": "3. Wait \u2014 90 Seconds",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8. AI Agent \u2014 Extract Learning Tasks": {
      "main": [
        [
          {
            "node": "10. Code \u2014 Parse Tasks Array",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

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

About this workflow

Submit any course or lecture video URL along with the course title, module name, assignee, due date, and priority and the workflow automatically converts the entire module into a ClickUp task list. WayinVideo summarizes the video and extracts key learning highlights, then…

Source: https://n8n.io/workflows/15553/ — 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

🎯 Create viral TikToks, Shorts, Reels, podcasts, and ASMR videos in minutes — all on autopilot.

OpenAI, HTTP Request, Form Trigger +7
AI & RAG

Digistars - Scrape & Crawl. Uses httpRequest, n8n-nodes-firecrawl-scraper, googleSheets, lmChatOpenAi. Event-driven trigger; 63 nodes.

HTTP Request, N8N Nodes Firecrawl Scraper, Google Sheets +5
AI & RAG

🧠 Automate end-to-end SEO blog creation and WordPress publishing using a GPT-5 multi-agent workflow with real-time research, metadata generation, and optional featured images.

Output Parser Structured, HTTP Request, OpenAI +10
AI & RAG

The workflow runs every hour with a randomized delay of 5–20 minutes to help distribute load. It records the exact date and time a lead is emailed so you can track outreach. Follow-ups are automatical

Google Sheets, Agent, OpenAI Chat +5
AI & RAG

This n8n workflow automates turning short user ideas into production-ready real-estate marketing assets (photorealistic images and optional 360° videos). A form submission seeds a prompt board → an LL

Form Trigger, Google Sheets, Agent +6