{"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"},"credentials":{"openAiApi":{"id":"kYIZ8ZwQHS2d4GiD","name":"(datapopcorn )OpenAi account"}},"typeVersion":1,"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 }}"},"credentials":{"discordWebhookApi":{"id":"w82RWS7nmXLKDczt","name":"n8n test 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":{}},"credentials":{"openAiApi":{"id":"kYIZ8ZwQHS2d4GiD","name":"(datapopcorn )OpenAi account"}},"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."}],"connections":{"HTTP Request":{"main":[[],[],[],[],[],[],[],[],[]]},"OpenAI":{"main":[[]]},"Discord":{"main":[[]]},"OpenAI Chat Model":{"main":[[]]}},"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":{"instanceId":"workflow-10858b75","versionId":"1.0.0","createdAt":"2025-09-29T07:07:46.062321","updatedAt":"2025-09-29T07:07:46.062335","owner":"n8n-user","license":"MIT","category":"automation","status":"active","priority":"high","environment":"production"},"notes":"Excellent quality workflow: Stickynote Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}