AutomationFlowsAI & RAG › Create Active Learning Notes From Youtube Videos with Gemini and Notion

Create Active Learning Notes From Youtube Videos with Gemini and Notion

ByAbelion Lavv @abelion on n8n.io

Transform YouTube videos into structured Active Learning study sheets using AI.

Event trigger★★★★☆ complexityAI-powered22 nodesForm TriggerHTTP RequestYouTubeMemory Buffer WindowOutput Parser StructuredGoogle GeminiGoogle Gemini ChatAgent
AI & RAG Trigger: Event Nodes: 22 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #12372 — 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
{
  "nodes": [
    {
      "id": "a10c960f-e25e-4bca-911d-0b7f4bbee975",
      "name": "On form submission",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        3248,
        1408
      ],
      "parameters": {
        "options": {
          "path": "7eefa8a2-fe80-46ce-b86c-acd138eb6941",
          "buttonLabel": "Generate Learning Notes",
          "appendAttribution": false
        },
        "formTitle": "YouTube to Active Learning Notes",
        "formFields": {
          "values": [
            {
              "fieldName": "URL",
              "fieldLabel": "YouTube Video URL",
              "placeholder": "input your link youtube",
              "requiredField": true
            }
          ]
        },
        "formDescription": "Transform any YouTube video into structured Active Learning study sheets powered by AI"
      },
      "typeVersion": 2.4
    },
    {
      "id": "0a27dd78-5c4d-4e3e-acb4-646889b385ba",
      "name": "Sticky Note - Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3200,
        656
      ],
      "parameters": {
        "width": 420,
        "height": 544,
        "content": "## \ud83d\ude80 Overview & Setup\n**Turn YouTube videos into Active Learning study sheets.**\n\n### \u2699\ufe0f How it works\n1.  **Input:** Submit a YouTube Link.\n2.  **Process:** The workflow fetches metadata, transcribes audio, and analyzes it using the ICAP framework.\n3.  **Output:** A structured Notion page with learning goals and practice tasks.\n\n### \ud83d\udccb Prerequisites\n* **Notion Template:** [Click here to duplicate](https://www.notion.so/YouTube-to-Notion-Active-Learning-Assistant-Beginner-2db1fc5a596381b1b5dec683689d3d1d?source=copy_link)\n* **API Keys:** RapidAPI, Google Gemini, YouTube Data API.\n\n### \u26a0\ufe0f Before Running\n1.  Paste your **RapidAPI Key** in the *HTTP - Get YouTube Audio* node.\n2.  Paste your **Database ID** in the *Function - Parse Notion JSON* node."
      },
      "typeVersion": 1
    },
    {
      "id": "4462a719-70ef-4aa0-a253-4485c48b2ebd",
      "name": "Sticky Note - Fetch",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3200,
        1216
      ],
      "parameters": {
        "color": 7,
        "width": 888,
        "height": 396,
        "content": "## \ud83d\udce5  Step 1: Get Video Data\nHere, the bot receives your YouTube Link.\n\n**What happens?**\n- It separates the Video ID from the link.\n- It fetches the Title, Channel Name, and Thumbnail image to make your Notion header look good."
      },
      "typeVersion": 1
    },
    {
      "id": "656a39f9-c80b-4167-97c1-e10f8d7d4fe1",
      "name": "Sticky Note - Audio",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4112,
        1248
      ],
      "parameters": {
        "color": 2,
        "width": 880,
        "height": 688,
        "content": "## \ud83c\udfa7 Step 2: Listen & Note-take\nSince AI cannot \"watch,\" we convert the video into text.\n\n**The Process:**\n1. **Download:** Grabs the audio file (.m4a) from YouTube via RapidAPI.\n2. **Transcribe:** Sends the audio file to **Gemini Flash**. This model is chosen because it's fast, cheap, and handles long audio well."
      },
      "typeVersion": 1
    },
    {
      "id": "e473e386-b06f-4b5f-a7f3-fb1425239056",
      "name": "Sticky Note - AI",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        5024,
        1152
      ],
      "parameters": {
        "color": 2,
        "width": 676,
        "height": 672,
        "content": "## \ud83e\udd16 Step 3: \"Active Learning\" Analysis\nThis is the brain of the system. The AI acts as your **Private Tutor**, not just a summarizer.\n\n**AI Tasks (based on Instructions):**\n- Create **Micro-goals** (Specific learning targets).\n- Generate **Cornell Notes** (Critical Q&A).\n- Perform the **Feynman Test** (Explain complex concepts simply).\n- Design a **Simulation Task** for you to practice immediately."
      },
      "typeVersion": 1
    },
    {
      "id": "01ba8b94-8c62-4b81-b43e-a4ecb849d99b",
      "name": "Sticky Note - Storage",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        5728,
        1152
      ],
      "parameters": {
        "color": 2,
        "width": 472,
        "height": 428,
        "content": "## \ud83d\udcbe Step 4: Build Notion Page\nThis part arranges the \"furniture\" in your Notion page to keep it tidy.\n\n**Features:**\n- Uses custom code (JavaScript) to create Checkboxes, Toggles, and Colored Boxes.\n- Sends the structured data to your Notion Database via API."
      },
      "typeVersion": 1
    },
    {
      "id": "afa15c61-be81-4a6b-ba4d-badbc6d74241",
      "name": "Sticky Note - Security",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        5728,
        1600
      ],
      "parameters": {
        "color": 3,
        "width": 400,
        "height": 900,
        "content": "## \ud83d\udee0\ufe0f Checklist Before Running (Must Check!)\n\nIf the workflow fails (red error), check these 3 items first:\n\n### 0. Get the Notion Template \ud83d\udcc4\n*First, duplicate this database to your Notion workspace.*\n- [**\ud83d\udc49 Click Here to Open Template**](https://www.notion.so/YouTube-to-Notion-Active-Learning-Assistant-Beginner-2db1fc5a596381b1b5dec683689d3d1d?source=copy_link)\n- Click **Duplicate** (top-right corner) to save it.\n\n### 1. Notion Database ID \ud83d\uddc2\ufe0f\n*Ensure the ID inside the \"Function\" Node matches your new Notion Database.*\n- **How to Find:** Open your Notion database in a browser -> Check the URL.\n- **Format:** `notion.so/username/[DATABASE_ID]?v=...` (The long string between the username and the question mark).\n- **Example:** `2db1fc5a...`\n\n### 2. API Keys & Quota \ud83d\udd11\n*Ensure your keys are active and you have available quota.*\n\n* **RapidAPI (YouTube Downloader):**\n  - [Get Key Here](https://rapidapi.com/ytdlfree/api/youtube-video-fast-downloader-24-7)\n  - Check the \"My Apps\" menu in RapidAPI to view your remaining monthly quota.\n\n* **Google Gemini API:**\n  - [Create Free API Key](https://aistudio.google.com/app/apikey)\n  - Ensure your Google Cloud project has billing linked (even for the free tier).\n\n### 3. Notion Connection (Integration) \ud83d\udd0c\n*The \"HTTP Request\" Node must be connected to your Notion account.*\n- **How to Check:** Click the HTTP Request Node -> \"Credential\" Tab -> Ensure status is **\"Connected\"**.\n- **Important:** Inside Notion, click the three dots `...` at the top right of your Database page -> `Connections` -> `Connect to` -> Select your n8n integration name."
      },
      "typeVersion": 1
    },
    {
      "id": "46fd1111-9807-44ca-b81b-e1d867f5192e",
      "name": "Set - Prepare Video Metadata",
      "type": "n8n-nodes-base.set",
      "position": [
        3920,
        1408
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "field1",
              "name": "videoId",
              "type": "string",
              "value": "={{ $json.id }}"
            },
            {
              "id": "field2",
              "name": "title",
              "type": "string",
              "value": "={{ $json.snippet.title }}"
            },
            {
              "id": "field3",
              "name": "description",
              "type": "string",
              "value": "={{ $json.snippet.description }}"
            },
            {
              "id": "field4",
              "name": "publishedAt",
              "type": "string",
              "value": "={{ $json.snippet.publishedAt }}"
            },
            {
              "id": "field5",
              "name": "thumbnailUrl",
              "type": "string",
              "value": "={{ $json.snippet.thumbnails.maxres?.url || $json.snippet.thumbnails.high?.url || $json.snippet.thumbnails.default.url }}"
            },
            {
              "id": "field6",
              "name": "videoUrl",
              "type": "string",
              "value": "={{ 'https://www.youtube.com/watch?v=' + $json.id }}"
            },
            {
              "id": "field7",
              "name": "channelTitle",
              "type": "string",
              "value": "={{ $json.snippet.channelTitle }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "4bec85e9-d4dc-461c-8674-3466a9096c45",
      "name": "HTTP - Download Audio File",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        4496,
        1520
      ],
      "parameters": {
        "url": "={{ $json.file }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file"
            }
          }
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "f7dcab68-667c-4abf-a9f2-adca1b4bde27",
      "name": "IF - Skip if No Transcript",
      "type": "n8n-nodes-base.if",
      "position": [
        4768,
        1760
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "condition1",
              "operator": {
                "type": "string",
                "operation": "notEmpty"
              },
              "leftValue": "={{ $json.content?.parts?.[0]?.text }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "8eac35a4-8269-4b77-80cd-f876957219e1",
      "name": "Merge - Attach Metadata + Transcript",
      "type": "n8n-nodes-base.merge",
      "position": [
        5104,
        1408
      ],
      "parameters": {
        "mode": "combine",
        "options": {
          "includeUnpaired": true
        },
        "combineBy": "combineByPosition"
      },
      "retryOnFail": false,
      "typeVersion": 3,
      "alwaysOutputData": false
    },
    {
      "id": "6315aa12-cdad-43d9-a5c6-6d18b2314b88",
      "name": "HTTP - Get YouTube Audio",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        4240,
        1520
      ],
      "parameters": {
        "url": "={{ 'https://youtube-video-fast-downloader-24-7.p.rapidapi.com/download_audio/' + $json.videoId + '?quality=140' }}",
        "options": {},
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "x-rapidapi-host",
              "value": "youtube-video-fast-downloader-24-7.p.rapidapi.com"
            },
            {
              "name": "x-rapidapi-key",
              "value": "PASTE_YOUR_RAPIDAPI_KEY_HERE"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "6a2a6bc0-8c90-4e51-9a7c-7296845f03c7",
      "name": "YouTube - Fetch Video Details",
      "type": "n8n-nodes-base.youTube",
      "position": [
        3680,
        1408
      ],
      "parameters": {
        "options": {},
        "videoId": "={{ $json.VIdeoID }}",
        "resource": "video",
        "operation": "get"
      },
      "typeVersion": 1
    },
    {
      "id": "459a4568-c7cb-429e-8d52-7bdde7bffab7",
      "name": "Memory - Conversation Buffer",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        5344,
        1648
      ],
      "parameters": {
        "sessionKey": "active-learning-session",
        "sessionIdType": "customKey"
      },
      "typeVersion": 1.3
    },
    {
      "id": "91546d20-4d78-41bc-a735-2308eae843cb",
      "name": "Output Parser - Structured JSON",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        5536,
        1648
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"micro_goals\": [\n    \"Goal 1: Mampu menjelaskan konsep X...\",\n    \"Goal 2: Mampu mempraktikkan Y tanpa panduan...\"\n  ],\n  \"cornell_notes\": [\n    {\n      \"trigger\": \"Pertanyaan pemicu (Misal: Mengapa harus X?)\",\n      \"concept\": \"Penjelasan inti atau logika di baliknya...\"\n    }\n  ],\n  \"feynman_explanation\": \"Penjelasan konsep inti dengan bahasa yang sangat sederhana (untuk anak 5 tahun).\",\n  \"simulation_task\": \"Tugas konkret untuk mempraktikkan materi pada kasus/data yang berbeda (bukan menyalin contoh).\",\n  \"key_topics\": [\"Topic 1\", \"Topic 2\"]\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "ac6457de-491b-4dc2-b6d9-213d24f47ecf",
      "name": "Transcribe a recording",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "position": [
        4496,
        1760
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "id",
          "value": "models/gemini-2.5-flash"
        },
        "options": {},
        "resource": "audio",
        "inputType": "binary"
      },
      "retryOnFail": true,
      "typeVersion": 1.1,
      "waitBetweenTries": 5000
    },
    {
      "id": "fe37039f-34e4-4ae5-b392-8fed7165f7db",
      "name": "Google Gemini Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        5152,
        1648
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "64b5a9a2-00a0-4b3c-b3ac-dd2d29db39fa",
      "name": "AI Agent - Active Learning",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        5312,
        1408
      ],
      "parameters": {
        "text": "=# INPUT DATA\nTitle: {{ $json.title }}\nChannel: {{ $('Set - Prepare Video Metadata').item.json.channelTitle }}\nTranscript: {{ $json.content?.parts?.[0]?.text || 'No transcript available' }}\n\n# ROLE\nYou are an Expert Learning Scientist specializing in the ICAP Framework (Interactive, Constructive, Active, Passive).\nYour goal is NOT to summarize the content. Your goal is to create an **Active Learning Worksheet** that forces the user to construct knowledge, not just consume it.\n\n# TASK\nAnalyze the transcript and generate a structured JSON output based on the Active Learning Protocol.\n\n# CRITICAL INSTRUCTIONS (Fill these specific fields):\n1. \"micro_goals\": Extract 2-3 specific, measurable learning outcomes. What should the user BE ABLE TO DO after this? (e.g., \"Build a Pivot Table from scratch\", not \"Understand Pivot Tables\").\n2. \"cornell_notes\": Extract key concepts but format them as a \"Dialogue\".\n   - \"trigger\": A critical question, a 'Why', or a keyword.\n   - \"concept\": The logic, answer, or insight (in user's own words style).\n3. \"feynman_explanation\": Explain the *single most complex concept* in the video using simple language/analogies (No jargon).\n4. \"simulation_task\": Create a specific \"Lab Challenge\". Ask the user to apply the concept to a **DIFFERENT** scenario/dataset than the one in the video.\n5. \"key_topics\": 2-3 main tags.",
        "options": {
          "systemMessage": "You are an Elite Productivity Strategist & Coach.\nYou do not just summarize; you convert information into aggressive, high-impact ACTION PLANS.\nYour goal is to \"Upgrade\" the user's life by extracting the specific \"How-To\", frameworks, and tactical steps from the content.\nAvoid generic advice. Be specific, direct, and \"no-nonsense\"."
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2.1
    },
    {
      "id": "7f6762ee-5049-4f06-b13b-222c4014b6f8",
      "name": "SET - Get YT ID",
      "type": "n8n-nodes-base.set",
      "position": [
        3456,
        1408
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "8ba34655-8879-4f7a-8a29-8c6ae34f0575",
              "name": "VIdeoID",
              "type": "string",
              "value": "={{ $json.URL.match(/(?:v=|youtu.be\\/)([a-zA-Z0-9_-]{11})/)?.[1] || $json.URL }}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "90ead700-ad81-4402-bc8e-f53a1b68dc40",
      "name": "Create Notion Page",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        6000,
        1408
      ],
      "parameters": {
        "url": "https://api.notion.com/v1/pages",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ $json }}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "headerParameters": {
          "parameters": [
            {
              "name": "Notion-Version",
              "value": "2022-06-28"
            }
          ]
        },
        "nodeCredentialType": "notionApi"
      },
      "typeVersion": 4.3
    },
    {
      "id": "fbc07f2c-96e6-4617-a0cf-8575996e9c5d",
      "name": "Set Audio MimeType",
      "type": "n8n-nodes-base.code",
      "position": [
        4240,
        1760
      ],
      "parameters": {
        "jsCode": "const items = $input.all();\n\n// Loop semua item yang masuk\nfor (const item of items) {\n  // Cek apakah ada data binary (biasanya bernama 'data')\n  if (item.binary && item.binary.data) {\n    // Kita paksa ubah label MIME type-nya agar dikenali Gemini\n    // Karena sumber dari RapidAPI biasanya .m4a, kita pakai audio/mp4\n    item.binary.data.mimeType = 'audio/mp4';\n    item.binary.data.fileExtension = 'm4a';\n    item.binary.data.fileName = 'audio_downloaded.m4a';\n  }\n}\n\nreturn items;"
      },
      "typeVersion": 2
    },
    {
      "id": "24f07c3f-613c-456b-be64-ecbca17d9299",
      "name": "Build Page Structure",
      "type": "n8n-nodes-base.code",
      "position": [
        5792,
        1408
      ],
      "parameters": {
        "jsCode": "// 1. Ambil data\nconst rawAi = $input.item.json.output || $input.item.json;\nconst ai = typeof rawAi === 'string' ? JSON.parse(rawAi) : rawAi;\n\n// Fallback Metadata\nconst youtubeNode = $('YouTube - Fetch Video Details').first();\nconst youtubeData = youtubeNode ? youtubeNode.json : {};\nconst setNode = $('Set - Prepare Video Metadata').first();\nconst setData = setNode ? setNode.json : {};\n\nconst videoTitle = youtubeData.snippet?.title || setData.title || \"Untitled\";\nconst videoUrl = `https://www.youtube.com/watch?v=${youtubeData.id || setData.videoId}`;\nconst channelName = youtubeData.snippet?.channelTitle || setData.channelTitle || \"Unknown\";\nconst publishedAt = youtubeData.snippet?.publishedAt || setData.publishedAt || new Date().toISOString();\nconst thumbnailUrl = youtubeData.snippet?.thumbnails?.maxres?.url || youtubeData.snippet?.thumbnails?.high?.url || setData.thumbnailUrl;\n\n// 2. ID DATABASE\nconst database_id = \"PASTE_YOUR_NOTION_DATABASE_ID_HERE\";\n\n// 3. Properties Header\nconst properties = {\n  \"Name\": { \"title\": [{ \"text\": { \"content\": videoTitle.substring(0, 2000) } }] },\n  \"URL\": { \"url\": videoUrl },\n  \"Channel\": { \"select\": { \"name\": channelName.replace(/,/g, '') } },\n  \"Topics\": { \"multi_select\": (ai.key_topics || [\"Learning\"]).map(t => ({ \"name\": t })) },\n  \"Status\": { \"status\": { \"name\": \"\ud83d\udfe2 Processed\" } },\n  \"Summary\": { \"rich_text\": [{ \"text\": { \"content\": ai.feynman_explanation || \"-\" } }] },\n  \"Published Date\": { \"date\": { \"start\": publishedAt } },\n  \"Thumbnail\": { \"files\": [{ \"type\": \"external\", \"name\": \"Cover\", \"external\": { \"url\": thumbnailUrl } }] }\n};\n\n// 4. Page Content (Active Learning Structure)\nconst children = [\n  // --- Header Filosofi (FIXED ANNOTATIONS) ---\n  {\n    \"object\": \"block\",\n    \"type\": \"callout\",\n    \"callout\": {\n      \"rich_text\": [{ \n        \"text\": { \"content\": \"Active Learning Mode: Jangan cuma nonton. Konstruksi pengetahuanmu.\" },\n        \"annotations\": { \"italic\": true } // Fixed: Annotations diluar text\n      }],\n      \"icon\": { \"emoji\": \"\ud83e\udde0\" },\n      \"color\": \"gray_background\"\n    }\n  },\n\n  // --- 1. TARGET (Micro-Goals) ---\n  {\n    \"object\": \"block\",\n    \"type\": \"heading_2\",\n    \"heading_2\": { \"rich_text\": [{ \"text\": { \"content\": \"\ud83c\udfaf Preparation & Micro-Goals\" } }] }\n  },\n  ...(ai.micro_goals || []).map(goal => ({\n    \"object\": \"block\",\n    \"type\": \"to_do\",\n    \"to_do\": { \"rich_text\": [{ \"text\": { \"content\": goal } }], \"checked\": false }\n  })),\n\n  // --- 2. NOTES (Cornell Style) ---\n  {\n    \"object\": \"block\",\n    \"type\": \"heading_2\",\n    \"heading_2\": { \"rich_text\": [{ \"text\": { \"content\": \"\ud83d\udcdd Constructive Notes (Cornell)\" } }] }\n  },\n  ...(ai.cornell_notes || []).map(note => ({\n    \"object\": \"block\",\n    \"type\": \"toggle\",\n    \"toggle\": {\n      \"rich_text\": [{ \n        \"text\": { \"content\": \"\u2753 \" + (note.trigger || \"Pemicu\") }, \n        \"annotations\": { \"bold\": true } \n      }],\n      \"children\": [\n        {\n          \"object\": \"block\",\n          \"type\": \"paragraph\",\n          \"paragraph\": { \"rich_text\": [{ \"text\": { \"content\": \"\ud83d\udca1 \" + (note.concept || \"...\") } }] }\n        }\n      ]\n    }\n  })),\n\n  // --- 3. FEYNMAN TEST ---\n  {\n    \"object\": \"block\",\n    \"type\": \"heading_2\",\n    \"heading_2\": { \"rich_text\": [{ \"text\": { \"content\": \"\ud83d\udde3\ufe0f The Feynman Test\" } }] }\n  },\n  {\n    \"object\": \"block\",\n    \"type\": \"quote\",\n    \"quote\": {\n      \"rich_text\": [{ \"text\": { \"content\": ai.feynman_explanation || \"Penjelasan tidak tersedia.\" } }],\n      \"color\": \"blue_background\"\n    }\n  },\n  {\n    \"object\": \"block\",\n    \"type\": \"paragraph\",\n    \"paragraph\": { \n      \"rich_text\": [{ \n        \"text\": { \"content\": \"Apakah penjelasan di atas sudah cukup sederhana? Bagian mana yang masih macet?\" }, \n        \"annotations\": { \"italic\": true, \"color\": \"gray\" } \n      }] \n    }\n  },\n\n  // --- 4. IMMEDIATE EXECUTION (FIXED ANNOTATIONS) ---\n  {\n    \"object\": \"block\",\n    \"type\": \"heading_2\",\n    \"heading_2\": { \"rich_text\": [{ \"text\": { \"content\": \"\ud83d\udee0\ufe0f Immediate Execution (The Lab)\" } }] }\n  },\n  {\n    \"object\": \"block\",\n    \"type\": \"callout\",\n    \"callout\": {\n      \"rich_text\": [\n        { \n          \"text\": { \"content\": \"Tantangan Simulasi: \" }, \n          \"annotations\": { \"bold\": true } // Fixed: Annotations diluar text\n        },\n        { \"text\": { \"content\": ai.simulation_task || \"Coba terapkan konsep ini sekarang.\" } }\n      ],\n      \"icon\": { \"emoji\": \"\ud83e\uddea\" },\n      \"color\": \"red_background\"\n    }\n  },\n  {\n    \"object\": \"block\",\n    \"type\": \"to_do\",\n    \"to_do\": { \"rich_text\": [{ \"text\": { \"content\": \"Saya sudah mencoba tantangan di atas tanpa melihat tutorial.\" } }], \"checked\": false }\n  }\n];\n\nreturn {\n  json: {\n    parent: { database_id: database_id },\n    properties: properties,\n    children: children\n  }\n};"
      },
      "typeVersion": 2
    }
  ],
  "connections": {
    "SET - Get YT ID": {
      "main": [
        [
          {
            "node": "YouTube - Fetch Video Details",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "On form submission": {
      "main": [
        [
          {
            "node": "SET - Get YT ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Audio MimeType": {
      "main": [
        [
          {
            "node": "Transcribe a recording",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build Page Structure": {
      "main": [
        [
          {
            "node": "Create Notion Page",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Transcribe a recording": {
      "main": [
        [
          {
            "node": "IF - Skip if No Transcript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent - Active Learning",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "HTTP - Get YouTube Audio": {
      "main": [
        [
          {
            "node": "HTTP - Download Audio File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent - Active Learning": {
      "main": [
        [
          {
            "node": "Build Page Structure",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP - Download Audio File": {
      "main": [
        [
          {
            "node": "Set Audio MimeType",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF - Skip if No Transcript": {
      "main": [
        [
          {
            "node": "Merge - Attach Metadata + Transcript",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Memory - Conversation Buffer": {
      "ai_memory": [
        [
          {
            "node": "AI Agent - Active Learning",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Set - Prepare Video Metadata": {
      "main": [
        [
          {
            "node": "Merge - Attach Metadata + Transcript",
            "type": "main",
            "index": 0
          },
          {
            "node": "HTTP - Get YouTube Audio",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "YouTube - Fetch Video Details": {
      "main": [
        [
          {
            "node": "Set - Prepare Video Metadata",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Output Parser - Structured JSON": {
      "ai_outputParser": [
        [
          {
            "node": "AI Agent - Active Learning",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Merge - Attach Metadata + Transcript": {
      "main": [
        [
          {
            "node": "AI Agent - Active Learning",
            "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

Transform YouTube videos into structured Active Learning study sheets using AI.

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

How it Works

Memory Buffer Window, Agent, Output Parser Structured +9
AI & RAG

This Shopify AI automation is an advanced n8n-powered workflow that transforms Shopify product collections into SEO-optimized blog articles with images, while maintaining full visibility and control t

Shopify Trigger, HTTP Request, Google Sheets +7
AI & RAG

This workflow is designed for e-commerce, marketing teams, or creators who want to automate the production of high-quality, AI-generated product visuals and ad creatives.

HTTP Request, Error Trigger, Discord +7
AI & RAG

Categories: Business Automation, Content Creation, SEO, AI

Memory Buffer Window, Agent, n8n +6
AI & RAG

Automatically generate SEO-optimized YouTube Titles, Descriptions, Tags & Hashtags – enriched with blog articles, affiliate links, and product recommendations!

Form Trigger, Form, YouTube +7