{
  "nodes": [
    {
      "id": "4bf26356-9c59-4cee-8eb8-8553b23a172f",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        560,
        -120
      ],
      "parameters": {
        "width": 660,
        "height": 460,
        "content": "![]({{ $env.WEBHOOK_URL }}\n# Daily Cartoon (w/ AI Translate)\n\n### How it works\n- Automates the retrieval of Calvin and Hobbes daily comics.\n- Extracts the comic image URL from the website.\n- Translates comic dialogues to English and Korean(Other Language)\n- Posts the comic and translations to Discord daily.\n\n### Set up steps\n- Estimated setup time: ~10-15 minutes.\n- Use a **Schedule Trigger** to automate the workflow at 9 AM daily.\n- Add nodes for parameter setup, HTTP request, data extraction, and integration with Discord.\n- Add detailed notes to each node in the workflow for easy understanding."
      },
      "typeVersion": 1,
      "notes": "This stickyNote node performs automated tasks as part of the workflow."
    },
    {
      "id": "52d19472-41b4-4d71-874e-064ef9d6f248",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        620,
        380
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 9
            }
          ]
        }
      },
      "typeVersion": 1.2,
      "notes": "This scheduleTrigger node performs automated tasks as part of the workflow."
    },
    {
      "id": "bcc15f37-c048-4d9a-83cd-367856470095",
      "name": "OpenAI",
      "type": "n8n-nodes-base.noOp",
      "position": [
        1620,
        380
      ],
      "parameters": {
        "text": "Please write the original language and Korean together. \n\nEXAMPLE)\nCalvin: \"YOU'VE NEVER HAD AN OBLIGATION, AN ASSIGNMENT, OR A DEADLINE IN ALL YOUR LIFE! YOU HAVE NO RESPONSIBILITIES AT ALL! IT MUST BE NICE!\" (너는 평생 한 번도 의무, 과제, 혹은 마감일 없었잖아! 전혀 책임이 없다니! 정말 좋겠다!)\nHobbes: \"WIPE THAT INSOLENT SMIRK OFF YOUR FACE!\" (그 뻔뻔한 미소를 그만 지어!)\n",
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini",
          "cachedResultName": "GPT-4O-MINI"
        },
        "options": {},
        "resource": "image",
        "imageUrls": "{{ $env.BASE_URL }}",
        "operation": "analyze"
      },
      "typeVersion": 1.6,
      "notes": "This openAi node performs automated tasks as part of the workflow."
    },
    {
      "id": "35004d43-4061-476a-9af6-7d0b82ae86bd",
      "name": "param",
      "type": "n8n-nodes-base.set",
      "position": [
        840,
        380
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "59d36aef-2991-4fd2-9fbe-dad9a701b40f",
              "name": "year",
              "type": "string",
              "value": "={{ $now.format('yyyy') }}"
            },
            {
              "id": "b6b329f2-ba08-4516-bdb9-c5d124c02110",
              "name": "month",
              "type": "string",
              "value": "={{ $now.format('MM') }}"
            },
            {
              "id": "3cba75d1-a281-4e14-9bf7-e0bc0cc7c768",
              "name": "day",
              "type": "string",
              "value": "={{ $now.format('dd') }}"
            }
          ]
        }
      },
      "typeVersion": 3.4,
      "notes": "This set node performs automated tasks as part of the workflow."
    },
    {
      "id": "cf2c953f-1ff2-4abc-8abd-95e05603e64a",
      "name": "Discord",
      "type": "n8n-nodes-base.discord",
      "position": [
        1840,
        380
      ],
      "parameters": {
        "content": "=Daily Cartoon ({{ $('param').item.json.year }}/{{ $('param').item.json.month }}/{{ $('param').item.json.day }})\n{{ $('Information Extractor').item.json.output.cartoon_image }}\n\n{{ $json.content }}\n",
        "options": {},
        "authentication": "{{ $credentials.webhook }}"
      },
      "typeVersion": 2,
      "notes": "This discord node performs automated tasks as part of the workflow."
    },
    {
      "id": "5eec9870-a509-4090-a540-76b22bb3eac9",
      "name": "OpenAI Chat Model",
      "type": "n8n-nodes-base.noOp",
      "position": [
        1260,
        560
      ],
      "parameters": {
        "model": "gpt-4o-mini-2024-07-18",
        "options": {}
      },
      "typeVersion": 1,
      "notes": "This lmChatOpenAi node performs automated tasks as part of the workflow."
    },
    {
      "id": "352db81e-7571-47cb-b028-dec18e15ccce",
      "name": "Information Extractor",
      "type": "n8n-nodes-base.noOp",
      "position": [
        1260,
        380
      ],
      "parameters": {
        "text": "=Please just extract the src value in the <img class=\"img-fluid Lazyloaded\"> tag from HTML below. I don't need anything other than the value.\n\ne.g.)\nEXAMPLE INPUT)\n<img class=\"img-fluid lazyloaded\" srcset=\"{{ $env.WEBHOOK_URL }} 900w\" data-srcset=\"{{ $env.WEBHOOK_URL }} 900w\" sizes=\"\n (min-width: 992px) 900px,\n (min-width: 768px) 600px,\n (min-width: 576px) 300px,\n 900px\" width=\"100%\" alt=\"Calvin and Hobbes Comic Strip for March 03, 2023 \" src=\"{{ $env.WEBHOOK_URL }}\">\n\n\nEXAMPLE OUTPUT)\n{{ $env.WEBHOOK_URL }}\n\n--\n(INPUT)\n{{ $json.data }}",
        "options": {},
        "attributes": {
          "attributes": [
            {
              "name": "cartoon_image",
              "description": "EXAMPLE OUTPUT) {{ $env.WEBHOOK_URL }}"
            }
          ]
        }
      },
      "typeVersion": 1,
      "notes": "This informationExtractor node performs automated tasks as part of the workflow."
    },
    {
      "id": "517799ed-559c-4d17-b8aa-58bd4ee92ed3",
      "name": "HTTP Request",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1040,
        380
      ],
      "parameters": {
        "url": "{{ $env.BASE_URL }}",
        "options": {}
      },
      "typeVersion": 4.2,
      "notes": "This httpRequest node performs automated tasks as part of the workflow."
    }
  ],
  "pinData": {},
  "connections": {
    "517799ed-559c-4d17-b8aa-58bd4ee92ed3": {
      "main": [
        [
          {
            "node": "error-handler-517799ed-559c-4d17-b8aa-58bd4ee92ed3",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "error-handler-517799ed-559c-4d17-b8aa-58bd4ee92ed3-0694a4c5",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "error-handler-517799ed-559c-4d17-b8aa-58bd4ee92ed3-1e6431c1",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "error-handler-517799ed-559c-4d17-b8aa-58bd4ee92ed3-67cbef12",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "error-handler-517799ed-559c-4d17-b8aa-58bd4ee92ed3-1a7e3503",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "error-handler-517799ed-559c-4d17-b8aa-58bd4ee92ed3-92d57807",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "error-handler-517799ed-559c-4d17-b8aa-58bd4ee92ed3-63a43953",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "error-handler-517799ed-559c-4d17-b8aa-58bd4ee92ed3-f4ec2697",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "error-handler-517799ed-559c-4d17-b8aa-58bd4ee92ed3-693b99fe",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "bcc15f37-c048-4d9a-83cd-367856470095": {
      "main": [
        [
          {
            "node": "error-handler-bcc15f37-c048-4d9a-83cd-367856470095-b7fe2a8c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "cf2c953f-1ff2-4abc-8abd-95e05603e64a": {
      "main": [
        [
          {
            "node": "error-handler-cf2c953f-1ff2-4abc-8abd-95e05603e64a-ba5a4410",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5eec9870-a509-4090-a540-76b22bb3eac9": {
      "main": [
        [
          {
            "node": "error-handler-5eec9870-a509-4090-a540-76b22bb3eac9-3bf6cb24",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "name": "Stickynote Workflow",
  "settings": {
    "executionOrder": "v1",
    "saveManualExecutions": true,
    "callerPolicy": "workflowsFromSameOwner",
    "errorWorkflow": null,
    "timezone": "UTC",
    "executionTimeout": 3600,
    "maxExecutions": 1000,
    "retryOnFail": true,
    "retryCount": 3,
    "retryDelay": 1000
  },
  "description": "Automated workflow: Stickynote Workflow. This workflow integrates 9 different services: stickyNote, httpRequest, scheduleTrigger, set, discord. It contains 13 nodes and follows best practices for error handling and security.",
  "meta": {
    "versionId": "1.0.0",
    "createdAt": "2025-09-29T07:07:46.484807",
    "updatedAt": "2025-09-29T07:07:46.484838",
    "owner": "n8n-user",
    "license": "MIT",
    "category": "automation",
    "status": "active",
    "priority": "high",
    "environment": "production"
  },
  "tags": [
    "automation",
    "n8n",
    "production-ready",
    "excellent",
    "optimized"
  ],
  "notes": "Excellent quality workflow: Stickynote Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."
}