{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "53e29fe4-13de-4a1b-b443-1979ebb40226",
      "name": "On form submission",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        768,
        -32
      ],
      "parameters": {
        "options": {},
        "formTitle": "Wallpaper Poster",
        "formFields": {
          "values": [
            {
              "fieldLabel": "Topic",
              "requiredField": true
            },
            {
              "fieldType": "dropdown",
              "fieldLabel": "Style Anime",
              "fieldOptions": {
                "values": [
                  {
                    "option": "Studio Ghibli"
                  },
                  {
                    "option": "Hayao Miyazaki"
                  },
                  {
                    "option": "Makoto Shinkai"
                  },
                  {
                    "option": "Yoshitaka Amano"
                  },
                  {
                    "option": "Akira Toriyama"
                  }
                ]
              }
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "41dc894d-ac9a-4b8b-ac60-2016294d050a",
      "name": "Set URL",
      "type": "n8n-nodes-base.set",
      "position": [
        1488,
        -32
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "9d00e8b4-24cb-48bf-ad0d-d33a021453bf",
              "name": "prompt_url",
              "type": "string",
              "value": "=https://image.pollinations.ai/prompt/{{ $('Prompt Generator').item.json.text }}.jpg?width=720&height=1280&model=flux&nologo=true"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "e6f9f829-6a75-4b02-9300-046cd5b4bdf4",
      "name": "Generate Image",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1664,
        -32
      ],
      "parameters": {
        "url": "={{ $json.prompt_url }}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "55e74bb7-0680-4aa2-96e1-05a37715df76",
      "name": "Upload IMG",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1840,
        -32
      ],
      "parameters": {
        "url": "https://getlate.dev/api/v1/media",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "multipart-form-data",
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "files",
              "parameterType": "formBinaryData",
              "inputDataFieldName": "data"
            }
          ]
        },
        "genericAuthType": "httpBearerAuth"
      },
      "credentials": {
        "httpBearerAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "5ad5da87-1d34-4ccd-86c1-b56d5f9053ff",
      "name": "Create Video",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        720,
        336
      ],
      "parameters": {
        "url": "https://queue.fal.run/fal-ai/minimax/hailuo-02-fast/image-to-video",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n     \"prompt\": \"seamless looping video with gentle, ambient motion. Add slow, continuous effects such as drifting particles, subtle light flicker, soft haze, floating dust, rippling water, moving clouds, or faint color shifts. The motion should be cyclical and loopable, with no clear start or end, maintaining a calm and dreamy Lofi vibe suitable for a background visual. Camera movement is static.\",\n     \"image_url\": \"{{ $json.files[0].url }}\",\n     \"prompt_optimizer\": false\n   }",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpBearerAuth": {
          "name": "<your credential>"
        },
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "669828e6-a7c9-4cef-8e4e-3350745c4983",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        880,
        336
      ],
      "parameters": {
        "amount": 10
      },
      "typeVersion": 1.1
    },
    {
      "id": "18c79d61-05ed-4a1e-abfe-465ace7d42c5",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        1200,
        336
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "f281e5e7-0bbb-4b46-b795-c1365177a813",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.status }}",
              "rightValue": "COMPLETED"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "909184ed-dad3-43d9-a8cc-3084a728246d",
      "name": "Get Status",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1040,
        336
      ],
      "parameters": {
        "url": "={{ $json.status_url }}",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "cda825da-a458-4130-9247-7bc06dcc87c2",
      "name": "Get Video",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1360,
        336
      ],
      "parameters": {
        "url": "={{ $('Create Video').first().json.response_url }}",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "de43537f-caa1-4dc1-a30d-bc2f74461cdf",
      "name": "Tag Generator",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        1568,
        336
      ],
      "parameters": {
        "text": "=Generate exactly 5 related keywords for the topic: {{ $('On form submission').item.json.Topic }}.  \nFormat them in a single line, styled as Twitter hashtags, separated by commas.  \nOutput only in the format shown below, with no extra text or explanation.  \nExample output: #keyword1, #keyword2, #keyword3, #keyword4, #keyword5",
        "batching": {},
        "promptType": "define"
      },
      "typeVersion": 1.7
    },
    {
      "id": "f863f307-5ae8-403f-8782-4164ad278783",
      "name": "Prompt Generator",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        1184,
        -32
      ],
      "parameters": {
        "text": "=Topic:\n{{ $json.Topic }}\n\nAnime style artist: {{ $json['Style Anime'] }}",
        "batching": {},
        "messages": {
          "messageValues": [
            {
              "message": "=Role & Purpose  \nYou are an AI Agent specialized in generating one high-quality text-to-image prompt for anime wallpaper creation. Your role is to craft one visually rich, stylistically accurate, and detailed prompt descriptions that guide image generation models toward stunning anime-style backgrounds, based on any given topics.\n\nCapabilities  \n- Generate a descriptive prompt for anime wallpapers.\n- Specify style details such as lighting, mood, perspective, and color palette, and in the style of defined anime artist.  \n- Include environmental and character elements that enhance anime aesthetics.   \n- Ensure consistency in anime art styles (studio-inspired, cel-shaded, soft painting).  \n- Each prompt must be in one line of paragraph, no extra characters like quotes, dash, or hypens.  \n\nInteraction Style  \n- Be concise but vivid; balance brevity with detailed imagery.  \n- Use structured descriptions (setting \u2192 style \u2192 mood \u2192 details).  \n- Maintain a creative, aesthetic-driven tone.  \n- Always ensure clarity.\n- Never include image aspect ratio or size.\n\nNotes  \n- Avoid generic phrases; focus on unique scene-building details.  \n- Ensure the prompt highlights \"anime style\" explicitly.  \n- Always include atmosphere or mood keywords (e.g., serene, dramatic, dreamy).    \n"
            }
          ]
        },
        "promptType": "define"
      },
      "typeVersion": 1.7
    },
    {
      "id": "f1b46418-2b1d-4c9a-b066-0063030526cb",
      "name": "Tiktok Post",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1856,
        336
      ],
      "parameters": {
        "url": "https://getlate.dev/api/v1/posts",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"content\": \"{{ $('Tag Generator').item.json.text }} Epic Anime Wallpaper\",\n  \"publishNow\": true,\n  \"platforms\": [\n    {\n      \"platform\": \"tiktok\",\n      \"accountId\": \"xxxxxxxxxxxxxxxxxxxxx\",\n      \"platformSpecificData\": {\n        \"tiktokSettings\": {\n          \"privacy_level\": \"PUBLIC_TO_EVERYONE\",\n          \"video_made_with_ai\": true,\n          \"allow_comment\": true,\n          \"allow_duet\": false,\n          \"allow_stitch\": false,\n          \"commercial_content_type\": \"none\",\n          \"content_preview_confirmed\": true,\n          \"express_consent_given\": true\n        }\n      }\n    }\n  ],\n  \"mediaItems\": [\n    { \"type\": \"video\", \"url\": \"{{ $('Get Video').first().json.video.url }}\" }\n  ]\n}\n",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBearerAuth"
      },
      "credentials": {
        "httpBearerAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "e3e9456a-177e-418a-a88a-42c26f943911",
      "name": "Groq Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGroq",
      "position": [
        1184,
        64
      ],
      "parameters": {
        "model": "openai/gpt-oss-120b",
        "options": {}
      },
      "credentials": {
        "groqApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "827d2bd5-6880-43bd-9a2c-cd38c74ec278",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        672,
        240
      ],
      "parameters": {
        "color": 5,
        "width": 832,
        "height": 304,
        "content": "## 2. ANIMATED VIDEO GENERATOR"
      },
      "typeVersion": 1
    },
    {
      "id": "8f617a95-ac58-4051-b29a-a0ce9d8aa502",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1040,
        -144
      ],
      "parameters": {
        "color": 5,
        "width": 992,
        "height": 336,
        "content": "## 1. IMAGE GENERATOR"
      },
      "typeVersion": 1
    },
    {
      "id": "1f23b989-ccc6-4875-93ee-416f716c4d69",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1520,
        240
      ],
      "parameters": {
        "color": 5,
        "width": 512,
        "height": 304,
        "content": "## 3. POST TO TIKTOK"
      },
      "typeVersion": 1
    },
    {
      "id": "0fb96474-bf17-42fa-8c3a-4552d4a83d8e",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        672,
        -144
      ],
      "parameters": {
        "color": 5,
        "width": 336,
        "height": 336,
        "content": "## START HERE"
      },
      "typeVersion": 1
    },
    {
      "id": "eda1ad07-ba9e-434e-87a3-c6d653bd3c7f",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        128,
        -144
      ],
      "parameters": {
        "width": 512,
        "height": 688,
        "content": "## Animated Anime Wallpaper TikTok Post  \n### This n8n template demonstrates how to generate animated anime wallpapers and automatically post them on TikTok.  \n\nBy default, the workflow creates an anime-themed image based on user input, converts it into an animated video, and then automatically publishes it to TikTok.  \n\n**Possible Customizations:**  \n- Replace the default **Form Trigger** with a **Scheduled Trigger**.  \n- Connect a topics database (e.g., Google Sheets or Airtable) to automatically generate and post animated anime wallpapers on TikTok at regular intervals.  \n\n### How It Works  \n1. The user opens an n8n form and enters the desired anime wallpaper topic and style.  \n2. Based on the input, **OpenAI GPT-OSS (via Groq)** generates a text-to-image prompt.  \n3. The **Flux AI model on Pollination AI** generates an anime wallpaper image from the prompt.  \n4. Using the generated image, the **Minimax Hailuo 02 Fast model on Fal AI** creates an animated video.  \n5. The final video is automatically published to TikTok via the **GetLate API**.  \n\n### Requirements  \n- Groq API Key  \n- Fal AI API Key  \n- GetLate API connected to your TikTok account  \n"
      },
      "typeVersion": 1
    },
    {
      "id": "eb8ce4dc-0e9a-409e-b4fe-d07ece793330",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2064,
        -144
      ],
      "parameters": {
        "color": 7,
        "width": 576,
        "height": 336,
        "content": "## How to Use  \n\n1. Open the **Groq Chat Model** node, add your **Groq API Key**, and select an LLM model.  \n   - By default, this template uses **OpenAI GPT-OSS 120B**.  \n2. Open the **n8n Form** using either the **Test URL** or the **Production URL**.  \n3. Get your API key from [getlate.dev](https://getlate.dev/) and add the credentials in both the **Upload IMG** node and the **TikTok Post** node.  \n4. Get your API key from [Fal.ai](https://fal.ai/dashboard/keys) and make sure to top up credits.  \n5. Add your **Fal AI credentials** to the following nodes: **Create Video**, **Get Status**, and **Get Video**.  \n6. Once everything is set up, copy your **n8n Form URL** and open it in your browser to start using the workflow.  \n"
      },
      "typeVersion": 1
    },
    {
      "id": "55052995-06fe-4f64-8306-e65a3541d299",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2064,
        240
      ],
      "parameters": {
        "color": 7,
        "width": 576,
        "height": 304,
        "content": "## Documentation\n1. [Minimax Hailuo API on Fal](https://fal.ai/models/fal-ai/minimax/hailuo-02-fast/image-to-video/api)\n2. [Pollination AI](https://github.com/pollinations/pollinations)\n3. [GetLate.dev](https://getlate.dev/docs)\n4. [Groq API](https://console.groq.com/docs/quickstart)"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "Get Video",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait": {
      "main": [
        [
          {
            "node": "Get Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set URL": {
      "main": [
        [
          {
            "node": "Generate Image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Video": {
      "main": [
        [
          {
            "node": "Tag Generator",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Status": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload IMG": {
      "main": [
        [
          {
            "node": "Create Video",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Video": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Tag Generator": {
      "main": [
        [
          {
            "node": "Tiktok Post",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Image": {
      "main": [
        [
          {
            "node": "Upload IMG",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Groq Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Prompt Generator",
            "type": "ai_languageModel",
            "index": 0
          },
          {
            "node": "Tag Generator",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Prompt Generator": {
      "main": [
        [
          {
            "node": "Set URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "On form submission": {
      "main": [
        [
          {
            "node": "Prompt Generator",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}