8
n8n 한국어amn8n.com

Claude AI 텍스트 생성기를 사용하여 Lightroom에서 Instagram까지 자동화

중급

이것은Social Media, Multimodal AI분야의자동화 워크플로우로, 14개의 노드를 포함합니다.주로 Set, Code, Sort, SplitOut, DataTable 등의 노드를 사용하며. Claude AI를 대체 텍스트 생성기로 사용하여 Lightroom에서 Instagram까지 자동화

사전 요구사항
  • 대상 API의 인증 정보가 필요할 수 있음
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
  "meta": {
    "instanceId": "57636d705a86a73b059f5900e8853e2c306d74773d27ee7f6c0fae07093009ef"
  },
  "nodes": [
    {
      "id": "466448fc-8554-49c7-a6e7-8e5ded1d43ea",
      "name": "메모지",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -32,
        0
      ],
      "parameters": {
        "width": 464,
        "height": 400,
        "content": "### Lightroom → Instagram: Photos-to-Post Queue (n8n)\n\n**Purpose**  \nWatch a Lightroom Cloud album, store new assets in a **Photos** Data Table, and generate AI alt text for captions/accessibility.\n\n**Must-configure**\n- **Lightroom API:** OAuth (Adobe) + **X-API-Key**; set your **LR catalog ID** and **LR album ID**.\n- **n8n base URL:** Publicly reachable; used by the image proxy webhook.\n- **LLM credentials:** Anthropic (or equivalent) for alt text.\n- **Data Table (Photos) minimal schema:** `lr_asset_id` (unique), `lr_asset` (JSON string), `alt` (string).\n- **Schedule:** How often to poll the album.\n- **Dedupe:** Use **rowNotExists** on `lr_asset_id` to avoid duplicates.\n- **Params Node**"
      },
      "typeVersion": 1
    },
    {
      "id": "2694839a-5677-4a39-951d-d1d1a773d756",
      "name": "HTTP 요청",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        736,
        480
      ],
      "parameters": {
        "url": "=https://lr.adobe.io/v2/catalogs/{{ $json[\"LR catalog ID\"] }}/albums/{{ $json[\"LR album ID\"] }}/assets?embed=asset ",
        "options": {
          "response": {
            "response": {
              "responseFormat": "text"
            }
          }
        },
        "sendHeaders": true,
        "authentication": "genericCredentialType",
        "genericAuthType": "oAuth2Api",
        "headerParameters": {
          "parameters": [
            {
              "name": "X-API-Key",
              "value": "={{ $json[\"LR API key\"] }}"
            }
          ]
        }
      },
      "credentials": {
        "oAuth2Api": {
          "id": "nv3KEXFaYuFgl9pg",
          "name": "Lightroom Camille"
        },
        "httpBearerAuth": {
          "id": "HSch2E1Drk2LTOp0",
          "name": "Instagram @camillerouxphoto"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "387d3cfb-7315-4d17-a528-09e9c1e0688c",
      "name": "자바스크립트 코드",
      "type": "n8n-nodes-base.code",
      "position": [
        960,
        480
      ],
      "parameters": {
        "jsCode": "/**\n * Nettoie le préfixe XSSI \"while(1){}\" des réponses Adobe Lightroom\n * puis parse en JSON. L'item résultant contient:\n *  - parsed: l'objet JSON parsé\n *  - raw: le texte brut nettoyé (optionnel, utile pour debug)\n *\n * Le code gère aussi les cas où l'entrée serait déjà un objet,\n * ou si la chaîne ne contient pas le préfixe.\n */\n\nfunction stripAdobePrefix(s) {\n  // supprime \"while(1){}\" avec ou sans espaces\n  const re = /^\\s*while\\s*\\(\\s*1\\s*\\)\\s*{\\s*}\\s*/;\n  return s.replace(re, '');\n}\n\nlet input = $json;\n\n// Si le node précédent a renvoyé la réponse sous un autre champ,\n// adapte cette ligne (par ex. input.body, input.data, etc.)\nif (typeof input !== 'string') {\n  // tente quelques emplacements possibles\n  if (typeof input.body === 'string') input = input.body;\n  else if (typeof input.data === 'string') input = input.data;\n  else if (typeof input.string === 'string') input = input.string;\n  else if (typeof input === 'object') {\n    // déjà un objet ? On renvoie tel quel.\n    return {\n      parsed: input,\n      raw: JSON.stringify(input),\n      _note: 'Entrée déjà objet — pas de nettoyage nécessaire.'\n    };\n  } else {\n    // fallback: stringify\n    input = JSON.stringify(input);\n  }\n}\n\nconst cleaned = stripAdobePrefix(input);\n\n// Essaie de parser proprement\ntry {\n  const parsed = JSON.parse(cleaned);\n  return {\n    parsed,\n    raw: cleaned\n  };\n} catch (err) {\n  // En cas d’erreur, on renvoie quand même la chaîne nettoyée pour debug\n  return {\n    parsed: null,\n    raw: cleaned,\n    error: `JSON.parse a échoué: ${err && err.message ? err.message : String(err)}`\n  };\n}\n"
      },
      "typeVersion": 2
    },
    {
      "id": "56501cf9-12bb-4e24-a27e-6d45d2b65c9d",
      "name": "분할",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        1184,
        480
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "parsed.resources"
      },
      "typeVersion": 1
    },
    {
      "id": "6c46f47f-ba78-490f-90eb-b5d6f4a5f7cf",
      "name": "이미지 분석",
      "type": "@n8n/n8n-nodes-langchain.anthropic",
      "position": [
        2336,
        512
      ],
      "parameters": {
        "text": "You are a photography-savvy describer. Analyze the image and write a factual, SEO-oriented English alt description (single paragraph, up to 500 characters). Focus on visible subject, composition/framing/perspective, lighting (type, direction, quality), colors/contrast, mood, setting/background, and any clearly legible text. Avoid guesses about brand, gear, identities, dates, or locations unless unambiguously visible. No sensitive attributes, no hashtags/emojis, no calls to action. Output only the paragraph.\n",
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "claude-sonnet-4-5-20250929",
          "cachedResultName": "claude-sonnet-4-5-20250929"
        },
        "options": {},
        "resource": "image",
        "imageUrls": "={{ $('Params').item.json[\"n8n instance URL\"] }}/webhook/lr-image?catalogId={{ $('Params').item.json[\"LR catalog ID\"] }}&assetId={{ $json.asset.id }}&format=1280 "
      },
      "credentials": {
        "anthropicApi": {
          "id": "9xU4CUFgJLLaeCNB",
          "name": "Anthropic account"
        }
      },
      "retryOnFail": true,
      "typeVersion": 1
    },
    {
      "id": "86e95eea-9e5c-4791-ac93-938daee1f480",
      "name": "행이 존재하지 않는 경우",
      "type": "n8n-nodes-base.dataTable",
      "position": [
        1632,
        480
      ],
      "parameters": {
        "filters": {
          "conditions": [
            {
              "keyName": "lr_asset_id",
              "keyValue": "={{ $json.asset.id }}"
            }
          ]
        },
        "operation": "rowNotExists",
        "dataTableId": {
          "__rl": true,
          "mode": "list",
          "value": "Z4VvX6MjrmHmlAiY",
          "cachedResultUrl": "/projects/wrMsdivh0K45jnU5/datatables/Z4VvX6MjrmHmlAiY",
          "cachedResultName": "Photos"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "28ffac78-712b-4405-a9e7-161edfb4bce4",
      "name": "행 삽입",
      "type": "n8n-nodes-base.dataTable",
      "position": [
        2560,
        512
      ],
      "parameters": {
        "columns": {
          "value": {
            "alt": "={{ $json.content[0].text }}",
            "lr_asset": "={{ JSON.stringify($('Split Out').item.json.asset) }}",
            "lr_asset_id": "={{ $('Split Out').item.json.asset.id }}"
          },
          "schema": [
            {
              "id": "lr_asset_id",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "lr_asset_id",
              "defaultMatch": false
            },
            {
              "id": "lr_album_id",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "lr_album_id",
              "defaultMatch": false
            },
            {
              "id": "ig_posted_at",
              "type": "dateTime",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "ig_posted_at",
              "defaultMatch": false
            },
            {
              "id": "ig_link",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "ig_link",
              "defaultMatch": false
            },
            {
              "id": "ig_caption",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "ig_caption",
              "defaultMatch": false
            },
            {
              "id": "lr_asset",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "lr_asset",
              "defaultMatch": false
            },
            {
              "id": "alt",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "alt",
              "defaultMatch": false
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "dataTableId": {
          "__rl": true,
          "mode": "list",
          "value": "Z4VvX6MjrmHmlAiY",
          "cachedResultUrl": "/projects/wrMsdivh0K45jnU5/datatables/Z4VvX6MjrmHmlAiY",
          "cachedResultName": "Photos"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "0bfc2470-666e-4aa9-94a5-c5e781fd931d",
      "name": "정렬",
      "type": "n8n-nodes-base.sort",
      "position": [
        1408,
        480
      ],
      "parameters": {
        "options": {},
        "sortFieldsUi": {
          "sortField": [
            {
              "fieldName": "asset.payload.captureDate"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "b4b23fa3-b7cb-441d-8d32-5d7e04745e38",
      "name": "일정 트리거",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        0,
        480
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "66066e44-0326-4f2e-9870-3c35818e75df",
      "name": "항목 반복",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        2080,
        480
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "7fbb8e78-78de-494e-b090-f1b1805c3714",
      "name": "매개변수",
      "type": "n8n-nodes-base.set",
      "position": [
        208,
        480
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "d354b020-5d5c-4270-8dfb-0dc02e9bd9db",
              "name": "LR catalog ID",
              "type": "string",
              "value": "..."
            },
            {
              "id": "ec256e0e-71d9-43bd-8913-99213526b776",
              "name": "LR API key",
              "type": "string",
              "value": "..."
            },
            {
              "id": "fde215d4-14d4-4659-9f57-defdb3c4733f",
              "name": "LR album ID",
              "type": "string",
              "value": "..."
            },
            {
              "id": "978ee1e9-3d6f-4d87-afaf-c9926a20b690",
              "name": "n8n instance URL",
              "type": "string",
              "value": "..."
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "43bc3fd0-5578-4070-bd2a-2562d20e5ded",
      "name": "메모지1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        624,
        320
      ],
      "parameters": {
        "color": 5,
        "width": 512,
        "height": 400,
        "content": "## STEP1 = Download the image list from Lightroom Cloud\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "642efa01-7722-4390-beaa-a3665d184133",
      "name": "메모지2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1168,
        320
      ],
      "parameters": {
        "color": 5,
        "width": 720,
        "height": 400,
        "content": "## STEP2 = Split and sort them\n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "267c95f8-1000-4ce7-8bd9-a2221f554923",
      "name": "메모지3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1920,
        320
      ],
      "parameters": {
        "color": 5,
        "width": 848,
        "height": 400,
        "content": "## STEP3 = Analyse them with IA then save them in the Data Table\n\n\n"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "0bfc2470-666e-4aa9-94a5-c5e781fd931d": {
      "main": [
        [
          {
            "node": "86e95eea-9e5c-4791-ac93-938daee1f480",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7fbb8e78-78de-494e-b090-f1b1805c3714": {
      "main": [
        [
          {
            "node": "2694839a-5677-4a39-951d-d1d1a773d756",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "56501cf9-12bb-4e24-a27e-6d45d2b65c9d": {
      "main": [
        [
          {
            "node": "0bfc2470-666e-4aa9-94a5-c5e781fd931d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "28ffac78-712b-4405-a9e7-161edfb4bce4": {
      "main": [
        [
          {
            "node": "66066e44-0326-4f2e-9870-3c35818e75df",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "2694839a-5677-4a39-951d-d1d1a773d756": {
      "main": [
        [
          {
            "node": "387d3cfb-7315-4d17-a528-09e9c1e0688c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "6c46f47f-ba78-490f-90eb-b5d6f4a5f7cf": {
      "main": [
        [
          {
            "node": "28ffac78-712b-4405-a9e7-161edfb4bce4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "66066e44-0326-4f2e-9870-3c35818e75df": {
      "main": [
        [],
        [
          {
            "node": "6c46f47f-ba78-490f-90eb-b5d6f4a5f7cf",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b4b23fa3-b7cb-441d-8d32-5d7e04745e38": {
      "main": [
        [
          {
            "node": "7fbb8e78-78de-494e-b090-f1b1805c3714",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "387d3cfb-7315-4d17-a528-09e9c1e0688c": {
      "main": [
        [
          {
            "node": "56501cf9-12bb-4e24-a27e-6d45d2b65c9d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "86e95eea-9e5c-4791-ac93-938daee1f480": {
      "main": [
        [
          {
            "node": "66066e44-0326-4f2e-9870-3c35818e75df",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
자주 묻는 질문

이 워크플로우를 어떻게 사용하나요?

위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.

이 워크플로우는 어떤 시나리오에 적합한가요?

중급 - 소셜 미디어, 멀티모달 AI

유료인가요?

이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.

워크플로우 정보
난이도
중급
노드 수14
카테고리2
노드 유형10
난이도 설명

일정 경험을 가진 사용자를 위한 6-15개 노드의 중간 복잡도 워크플로우

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34