{
  "name": "小红书图文笔记-n8n",
  "nodes": [
    {
      "parameters": {
        "content": "\n\n## 输入你的昵称以及想要生成的小红书文案主题",
        "height": 416,
        "width": 832
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        288,
        976
      ],
      "id": "799503e2-2331-4797-b0f6-96a791c6136e",
      "name": "解析表格URL"
    },
    {
      "parameters": {
        "content": "\n\n\n## 利用AI能力生成小红书文案，并根据生成的文案提炼出一段可以直接用于AI绘画的、生动具体的提示词，为后续生图做准备，这里调用的APII都是我们本地部署的文本模型：Qwen3-4B",
        "height": 480,
        "width": 1264,
        "color": 5
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        1200,
        624
      ],
      "id": "253f7cf6-0140-4a5a-9434-0635fad57388",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "content": "\n\n\n\n## 数据汇总，新增一条飞书多维表格记录",
        "height": 480,
        "width": 720,
        "color": 3
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        2576,
        624
      ],
      "id": "21393948-7078-423d-933e-146396146a53",
      "name": "Sticky Note2"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "cdd33424-d48c-4bb0-85cf-f3d6b2d36257",
              "name": "prompt",
              "value": "={{ ($json.output.prompt) }}",
              "type": "string"
            },
            {
              "id": "718c0a66-c78d-4947-bf05-9ef1f21cf267",
              "name": "negative_prompt",
              "value": "low quality, blurry, distorted, watermark, text, signature",
              "type": "string"
            },
            {
              "id": "2a0ad282-9f1f-4b9b-a78c-fb5b84ce7b7c",
              "name": "ratio",
              "value": "3:4",
              "type": "string"
            },
            {
              "id": "2dcdd6c8-458b-4253-89e7-f59e64900aee",
              "name": "steps",
              "value": 9,
              "type": "number"
            },
            {
              "id": "7419130a-fd48-431e-ab78-ff84d10d0561",
              "name": "cfg",
              "value": 0,
              "type": "number"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1664,
        1376
      ],
      "id": "aad01816-4cd1-4158-9b4c-900c4ce79929",
      "name": "准备图片生成参数"
    },
    {
      "parameters": {
        "content": "  \n\n\n## 调用本地部署的生图模型Z-image-Turbo，将prompt转化为实际的小红书封面图\n\n",
        "height": 400,
        "width": 736,
        "color": 4
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        1472,
        1232
      ],
      "id": "19816332-f30a-495c-bfa7-4eadf0391300",
      "name": "Sticky Note5"
    },
    {
      "parameters": {
        "content": "\n\n\n## 将生成的图片上传到飞书，获取当前上传成功的图片 Token\n",
        "height": 400,
        "width": 464,
        "color": 5
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        2320,
        1232
      ],
      "id": "fae4c75d-9d98-48c4-84ea-e4c1d5faa145",
      "name": "Sticky Note6"
    },
    {
      "parameters": {},
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        368,
        1120
      ],
      "id": "670a02f7-8058-4bc8-af69-f94d133928a2",
      "name": "手动触发器"
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "value": "/mnt/moark-models/Qwen3-4B",
          "mode": "id"
        },
        "builtInTools": {},
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.3,
      "position": [
        1376,
        976
      ],
      "id": "2fcd94db-c29d-4006-bbd3-eb2af16695c3",
      "name": "OpenAI Chat Model",
      "credentials": {
        "openAiApi": {
          "id": "LnaC5BHYPG338VOS",
          "name": "OpenAi account"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "http://127.0.0.1:8000/generate",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "prompt",
              "value": "={{ $json.prompt }}"
            },
            {
              "name": "negative_prompt",
              "value": "={{ $json.negative_prompt }}"
            },
            {
              "name": "ratio",
              "value": "={{ $json.ratio }}"
            },
            {
              "name": "steps",
              "value": "={{ $json.steps }}"
            },
            {
              "name": "cfg",
              "value": "={{ $json.cfg }}"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        2000,
        1376
      ],
      "id": "55d4793b-e7b2-4304-9c31-769f79c9204c",
      "name": "HTTP Request"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=# 角色：资深小红书内容创作者\n\n你是一位精通社交媒体传播、深谙小红书平台调性的内容创作专家。你的笔记总是能精准抓住用户眼球，获得大量点赞、收藏和评论。\n\n# 任务\n\n你的任务是根据用户提供的 **[主题]**，创作一篇完整的、具有爆款潜力的小红书图文笔记。\n\n# 创作要求与规则\n\n1.  **标题**：\n    *   必须引人注目，使用大量 Emoji 吸引眼球。\n    *   多采用“数字 + 关键词”、“提问式”、“揭秘式”或“保姆级教程”等爆款标题格式。\n    *   字数控制在 20 字以内。\n\n2.  **正文**：\n    *   **开篇**：第一句话必须能接住标题的钩子，迅速抓住读者兴趣。\n    *   **Emoji 运用**：全文必须大量、高频地使用 Emoji，用作段落分隔、重点突出和情绪表达，营造轻松活泼的氛围。\n    *   **结构化**：内容必须分点、分段阐述，逻辑清晰。多使用数字序号（❶、❷、❸）或小标题来引导阅读。\n    *   **价值导向**：内容必须对用户有实际帮助，提供干货、技巧、经验或避坑指南。\n    *   **语气**：使用亲切、真实的口吻，多用“姐妹们”、“家人们”、“我真的哭死”等网络热词，像在和好朋友分享秘密。\n    *   **结尾 CTA**：在文末必须有明确的号召性用语（Call to Action），引导用户进行互动，例如：“快@你的闺蜜一起来看”、“记得点赞收藏，不然就找不到了哦”、“评论区交作业”等。\n    *   在文末必须附上 5-10 个高度相关的标签。\n\n# 输出格式\n\n请严格按照以下格式输出json，不要有任何多余的解释或说明：\n{\"title\":\"[此处填写你创作的标题]\",\n\"content\":\"[此处填写你创作的正文内容，包含Emoji、分段、结尾 CTA、以及最后引用的标签]\"}\n---\n\n# 开始创作\n\n现在，请根据以下主题进行创作：\n\n**主题：`{{ $('填写小红书的主题').item.json['需要生成的小红书主题'] }}`**\n",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 3,
      "position": [
        1376,
        752
      ],
      "id": "c21ac5c9-ebc4-4b72-8a14-42b159f1e5d9",
      "name": "AI: 生成小红书文案"
    },
    {
      "parameters": {
        "resource": "space",
        "operation": "space:upload",
        "parent_type": "bitable_image",
        "parent_node": "={{ $('读取飞书多维表格获取应用token').item.json.app_token }}",
        "fileFieldName": "=data",
        "file_name": "={{ $('数据清洗2').item.json.output.title }}.jpg"
      },
      "type": "n8n-nodes-feishu-lite.feishuNode",
      "typeVersion": 1,
      "position": [
        2512,
        1376
      ],
      "id": "08267926-5daf-46da-a2f9-6d597efe7bd7",
      "name": "上传图片至飞书",
      "credentials": {
        "feishuCredentialsApi": {
          "id": "zIFMVsXYnBp9Z6wI",
          "name": "Feishu account"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "// 1. 获取输入 (对应 Python 的 _input.first().json.output)\n// 这里的 $input.first() 获取第一个输入项\nconst text = $input.first().json.output;\n\n// 安全检查：如果 text 不是字符串，直接返回 null\nif (typeof text !== 'string') {\n  return null;\n}\n\n// 2. 正则替换 (对应 Python 的 re.sub)\n// /g 表示全局替换\n// [\\s\\S] 用来匹配包括换行符在内的所有字符 (替代 Python 的 re.DOTALL)\nconst cleanedText = text.replace(/<think>[\\s\\S]*?<\\/think>/g, '').trim();\n\ntry {\n  // 3. JSON 解析与构建输出\n  const data = JSON.parse(cleanedText);\n  \n  // 对应 Python 的 output[\"output\"] = data\n  // n8n JS 节点通常返回 { json: { key: value } } 的格式\n  return {\n    json: {\n      output: data\n    }\n  };\n  \n} catch (e) {\n  // 4. 异常处理 (对应 Python 的 return None)\n  // 解析失败时返回 null (该 Item 会被 n8n 过滤掉)\n  return null;\n}"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        2304,
        752
      ],
      "id": "a19d0799-752a-40c6-bf6a-7c211a4d3eda",
      "name": "数据清洗2"
    },
    {
      "parameters": {
        "jsCode": "// 获取输入\nconst items = $input.all();\nif (items.length === 0) return [];\n\nconst text = items[0].json.output;\n\n// 检查是否为字符串，防止报错\nif (typeof text !== 'string') {\n  return { json: { error: \"Input is not a string\", original: text } };\n}\n\n// 对应 Python 的 re.sub(r'<think>.*?</think>', '', flags=re.DOTALL)\n// JS 中 [\\s\\S] 用来匹配包括换行符在内的所有字符\nconst cleanedText = text.replace(/<think>[\\s\\S]*?<\\/think>/g, '').trim();\n\ntry {\n  // 对应 json.loads\n  const data = JSON.parse(cleanedText);\n  return { json: { output: data } };\n} catch (e) {\n  return { json: { error: \"JSON parse failed\", cleaned_text: cleanedText } };\n}"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1728,
        752
      ],
      "id": "01d4cf2b-9032-4832-83f4-febb8788afe7",
      "name": "数据清洗1"
    },
    {
      "parameters": {
        "resource": "bitable",
        "operation": "bitable:table:record:add",
        "app_toke": "={{ $('读取飞书多维表格获取应用token').item.json.app_token }}",
        "table_id": "={{ $('读取飞书多维表格获取应用token').item.json.table_id }}",
        "body": "={{ JSON.stringify({ \"fields\": $json.fields }) }}"
      },
      "type": "n8n-nodes-feishu-lite.feishuNode",
      "typeVersion": 1,
      "position": [
        3040,
        816
      ],
      "id": "4083537d-4521-411f-bb51-e9cac9bd1f98",
      "name": "数据汇总并新增记录",
      "credentials": {
        "feishuCredentialsApi": {
          "id": "zIFMVsXYnBp9Z6wI",
          "name": "Feishu account"
        }
      }
    },
    {
      "parameters": {
        "resource": "bitable",
        "operation": "bitable:parseUrl",
        "url": "={{ $json['飞书多维表格地址'] }}"
      },
      "type": "n8n-nodes-feishu-lite.feishuNode",
      "typeVersion": 1,
      "position": [
        848,
        1120
      ],
      "id": "36cc2679-0fb7-44a3-afad-0bfffd647744",
      "name": "读取飞书多维表格获取应用token",
      "credentials": {
        "feishuCredentialsApi": {
          "id": "zIFMVsXYnBp9Z6wI",
          "name": "Feishu account"
        }
      }
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "932eed72-9266-427a-996b-61e859337a16",
              "name": "用户昵称",
              "value": "模力方舟",
              "type": "string"
            },
            {
              "id": "ca795eab-32b3-4e6d-b754-436e6f49e2cd",
              "name": "需要生成的小红书主题",
              "value": "香港迪士尼三日游玩",
              "type": "string"
            },
            {
              "id": "705fe9c2-3a6f-4a6c-ac44-751a5ab7e63e",
              "name": "飞书多维表格地址",
              "value": "https://ai.feishu.cn/wiki/BUWGwpKkOim4whkT1fEcGyfInrt?table=tbl3tS9m4W00WXCN&view=vewKljSG6K",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        608,
        1120
      ],
      "id": "f2e597bf-bb59-424e-83d7-208eb58254dd",
      "name": "填写小红书的主题"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=# 角色：小红书爆款封面视觉导演\n\n## 核心定位\n你是一位精通“高点击率”美学的视觉导演。你的任务是阅读用户提供的**一篇完整小红书笔记**，从中自动识别标题和正文，提炼核心信息，并编写一段**能让AI绘画模型生成高质量封面图的中文提示词**。\n\n## 输入数据\n- **完整笔记内容**：{{ $json.output.content }}\n\n## 任务流程\n\n### 第一步：内容拆解与提炼\n由于输入是一整段文本，请按以下逻辑处理：\n1.  **识别主标题**：默认文本的第一行或带有Emoji的最醒目的一句话即为标题。从中提取最吸睛的关键词（例如：“福州攻略”、“绝美机位”），作为 `title`。\n2.  **分析正文**：阅读标题之后的内容，提取一个最吸引人的痛点、亮点或场景，作为副标题素材。\n3.  **确定视觉风格**：根据整体内容决定风格（如：杂志拼贴风、高饱和度多巴胺风、极简ins风、特写摄影风）。\n\n### 第二步：构建绘画提示词 (Prompt)\n请按照以下公式构建提示词：\n`[画面主体与场景] + [视觉风格与配色] + [排版与文字指令] + [画质修饰词]`\n\n**提示词编写技巧：**\n*   **语言要求**：**必须使用中文编写**。\n*   **主体明确**：如果是旅游，主体是标志性景点；如果是美食，主体是诱人的食物特写。\n*   **文字植入**：必须在提示词中明确描述文字在画面中的位置（例如：画面中央是醒目的大标题...）。\n*   **引号规则**：提示词中涉及的具体文字内容，**必须使用中文引号“ ”**包裹。例如：`文字内容为“福州攻略”`。\n*   **去平台化**：严禁出现 \"小红书\" 三个字，请用 \"社交媒体风格\" 或 \"时尚杂志风格\" 代替。\n\n## 输出格式规范 (至关重要)\n1.  **仅输出标准 JSON**：不要包含 Markdown 代码块（即不要写 ```json ... ```），不要包含任何开场白或结束语。\n2.  **JSON 结构**：\n    *   `title`: 你提取出的简短主标题（用于后续流程存档或文件名）。\n    *   `prompt`: 最终生成的**中文**绘画提示词。\n\n## 示例数据\n\n**理想输出**：\n{\n\"title\": \"标题\",\n\"prompt\": \"高质量旅游摄影，三坊七巷的热闹古街场景，夜晚温暖的灯光，灯笼高挂，前景聚焦在诱人的鱼丸特写上。杂志拼贴画风格，色彩鲜艳明快。画面中央是醒目的粗体大标题“三坊七巷”，下方有副标题“好吃好玩”，整体呈现时尚社交媒体海报风格，8k分辨率，超高细节。\"\n}\n\n## 开始任务\n请根据用户的输入，严格遵守上述规则，直接输出 JSON 数据。",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 3,
      "position": [
        1952,
        752
      ],
      "id": "f3f0c8a7-74c2-4c87-bdb9-837ba26d3205",
      "name": "AI Agent"
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "value": "/mnt/moark-models/Qwen3-4B",
          "mode": "id"
        },
        "builtInTools": {},
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.3,
      "position": [
        1952,
        976
      ],
      "id": "d4e74111-6439-4620-9dea-3a3298e4571e",
      "name": "OpenAI Chat Model2",
      "credentials": {
        "openAiApi": {
          "id": "LnaC5BHYPG338VOS",
          "name": "OpenAi account"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "// 初始化 fields 对象\nconst fields = {};\n\n// 1. 获取其他节点的数据\n// 注意：Python 的 _('Name') 变成了 $('Name')\nfields[\"用户昵称\"] = $('填写小红书的主题').first().json['用户昵称'];\nfields[\"主题\"] = $('填写小红书的主题').first().json['需要生成的小红书主题'];\n\n// 获取 \"数据清洗1\" 节点的输出\n// 建议加上可选链操作符 (?.) 防止上游数据缺失报错\nfields[\"小红书标题\"] = $('数据清洗1').first().json.output?.title;\nfields[\"状态\"] = \"已完成\";\nfields[\"小红书文案\"] = $('数据清洗1').first().json.output?.content;\n\n// 2. 处理图片/文件 Token\n// 构造包含 file_token 的数组\nconst image_urls = [\n  {\n    \"file_token\": $input.first().json.data.file_token\n  }\n];\n\nfields[\"小红书封面\"] = image_urls;\n\n// 3. 返回 n8n 标准格式\n// 需要包裹在 json 属性中\nreturn {\n  json: {\n    fields: fields\n  }\n};"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        2752,
        816
      ],
      "id": "8143b8fb-4181-4e15-a89a-7753e9141988",
      "name": "构造飞书数据"
    }
  ],
  "pinData": {},
  "connections": {
    "准备图片生成参数": {
      "main": [
        [
          {
            "node": "HTTP Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "手动触发器": {
      "main": [
        [
          {
            "node": "填写小红书的主题",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI: 生成小红书文案",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request": {
      "main": [
        [
          {
            "node": "上传图片至飞书",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI: 生成小红书文案": {
      "main": [
        [
          {
            "node": "数据清洗1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "上传图片至飞书": {
      "main": [
        [
          {
            "node": "构造飞书数据",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "数据清洗2": {
      "main": [
        [
          {
            "node": "准备图片生成参数",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "数据清洗1": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "读取飞书多维表格获取应用token": {
      "main": [
        [
          {
            "node": "AI: 生成小红书文案",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "填写小红书的主题": {
      "main": [
        [
          {
            "node": "读取飞书多维表格获取应用token",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "数据清洗2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model2": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "构造飞书数据": {
      "main": [
        [
          {
            "node": "数据汇总并新增记录",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1",
    "availableInMCP": false
  },
  "versionId": "0cb6049c-4400-47b5-815b-e93438ee3ea7",
  "meta": {
    "templateCredsSetupCompleted": true,
    "instanceId": "995b77f8cfd6e888aa57d886db46ee6eb48d63d53a28826c257c3d85de4e5288"
  },
  "id": "538sWUQBYIumE9de",
  "tags": []
}