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)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
Lightroom 사진 Instagram 자동 게시기(AI 자막)
Lightroom 사진 Instagram 자동 게시기(AI 자막)
Set
Sort
Limit
+
Set
Sort
Limit
17 노드Camille Roux
소셜 미디어
GitHub 동기화 대시보드 - V2
提交 기록과 롤백 기능을 갖춘 GitHub 워크플로우 버전 관리 대시보드
If
N8n
Set
+
If
N8n
Set
94 노드Eduard
데브옵스
Arunava의 다중 에이전트 지능형 Reddit 자동화
AI 브랜드 언급 및 Baserow 추적으로 Reddit 게시물 자동 댓글 작성
If
Set
Code
+
If
Set
Code
35 노드Arunava
소셜 미디어
Twitter 브랜드 자동 홍보
사용Anthropic Claude AI및Google Sheets보고서자동进行Twitter品牌推广
Set
Code
Wait
+
Set
Code
Wait
26 노드Pavlo Hurhu
소셜 미디어
WhatsApp, 이메일 및 Twilio SMS를 통해 전송된 식단 업데이트 알림
식품 메뉴 업데이트 알림
If
Set
Code
+
If
Set
Code
22 노드Oneclick AI Squad
소셜 미디어
콘텐츠생성기 v3
AI驱动블로그자동화:사용GPT-4생성并게시SEO기사至WordPress및Twitter
If
Set
Code
+
If
Set
Code
144 노드Jay Emp0
콘텐츠 제작