n8n으로 AI 이미지와 영상 만들기
내장 HTTP Request 노드와 PopNow API로 n8n에서 AI 이미지, 영상, 오디오를 만듭니다. 가져올 수 있는 워크플로 JSON, 자격 증명 설정, 폴링 루프, 웹훅, 자주 나는 오류 해결법을 담았습니다.
n8n은 PopNow를 쓰는 데 커뮤니티 노드가 필요 없습니다. 내장 HTTP Request 노드 두 개와 Wait, If 노드면 작업을 만들고, 기다리고, 파일을 워크플로의 나머지 부분에 넘기기에 충분합니다. 같은 방식이 모든 이미지, 영상, 오디오 모델에 통하므로, 프롬프트 스프레드시트를 텍스트→이미지 모델에 넣거나, 새 제품 사진을 짧은 영상으로 바꾸거나, 대본을 한 줄씩 읽는 음성을 만들 수 있습니다.
이 페이지는 popnow.ai의 n8n 페이지와 짝을 이룹니다. 그 페이지는 고른 모델에 맞는 같은 워크플로를 만들어 줍니다. 직접 설치해 운영하는 n8n에서는 PopNow 커뮤니티 노드도 설치할 수 있습니다. Settings > Community Nodes > Install을 열고 n8n-nodes-popnow를 입력하세요(npm, GitHub).

준비물
- n8n 1.x(클라우드 또는 직접 설치). HTTP Request 노드는 버전 4 이상이어야 합니다.
- API 콘솔에서 받은 PopNow API 키. n8n에는 일 지출 한도를 건 전용 키를 주세요. 그러면 반복이 폭주해도 잔액을 모두 쓰지 않습니다.
- 별도의 USD 잔액에 있는 API 자금. 초기 잔액은 $0이며 API billing에서 입금합니다. 아래 모델의 테스트 실행은 한 번에 $0.01이며 웹사이트 크레딧으로 결제할 수 없습니다.
1. 자격 증명 만들기
n8n에서 Credentials → Add credential → Header Auth를 열고 아래처럼 입력하세요.
| 항목 | 값 |
|---|---|
| Name | PopNow |
| Header name | Authorization |
| Header value | Bearer sk-popnow-… (발급받은 키 앞에 Bearer라는 단어와 공백 하나를 붙입니다) |
워크플로를 만들기 전에 키를 확인하려면 터미널에서 아래를 실행하세요. 잔액을 읽기만 하므로 비용은 들지 않습니다.
curl "https://api.popnow.ai/api/v1/chat/credit" \
-H "Authorization: Bearer $POPNOW_API_KEY"availableUsd, heldUsd, totalUsd은 API 잔액의 USD 십진수 문자열로 읽으세요.
2. 워크플로 가져오기
JSON을 복사하고, n8n 캔버스의 빈 자리를 클릭한 다음 붙여 넣으세요. 이어서 Create task와 Check task를 열고 두 노드 모두에서 PopNow 자격 증명을 고르세요.
워크플로는 Start → Create task → Wait 5 s → Check task → Finished? 순서로 실행됩니다. 작업이 아직 진행 중이면 대기 노드로 되돌아가고, 끝나면 File URL이 state, fileUrl, error를 출력합니다.
각 노드의 역할:
| 노드 | 설정 | 이유 |
|---|---|---|
| Create task | POST /api/v1/jobs/createTask, JSON 본문 { "model", "input" } | model은 모델에 있는 모든 모델 ID이고, input은 그 모델의 스키마와 맞아야 합니다 |
| Create task | 헤더 Idempotency-Key: {{ $execution.id }} | n8n이 이 노드를 다시 실행해도 두 번 과금되지 않고 같은 작업이 돌아옵니다. 멱등성을 참고하세요 |
| Wait 5 s | 5초 | 이미지는 보통 한두 번 반복하면 끝나고, 영상은 1~3분 걸립니다 |
| Check task | GET /api/v1/jobs/recordInfo?taskId=… | 작업의 state와 output을 읽습니다 |
| Finished? | state가 최종 상태이고 아직 복사 중인 파일이 없음 | succeeded, failed, expired는 최종 상태입니다. 작업을 참고하세요 |
| File URL | data.output.assets[0].url | 약 20분 동안 유효한 서명 링크입니다. 파일을 보관해야 하면 다음 노드에서 내려받으세요 |
모델이나 입력 바꾸기
Create task의 JSON 본문을 고치세요. 모든 모델 페이지에 ID, 필드, 가격이 나와 있고, 자주 바꾸는 예는 다음과 같습니다.
| 목적 | model | input |
|---|---|---|
| 이미지 속 글자를 더 정확하게 | google/nano-banana-2.1/text-to-image | prompt, aspect_ratio, resolution (1K에서 $0.048) |
| 사진 편집 | google/nano-banana-2.1/edit | prompt, image_urls |
| 사진을 영상으로 | minimax/h3/image-to-video | prompt, image_url, duration_seconds (768p에서 5초에 $0.185) |
| 내레이션 | google/gemini-3.8-flash-tts/text-to-speech | text, voice_id |
앞 노드의 데이터를 쓰려면 본문을 표현식으로 바꾸세요. 예를 들면 다음과 같습니다.
{{ JSON.stringify({ model: 'alibaba/z-image-turbo/text-to-image', input: { prompt: $json.prompt, aspect_ratio: '16:9' } }) }}앞 노드에서 온 파일은 공개 https URL이거나 먼저 업로드된 파일이어야 합니다. 미디어에 업로드 호출 세 개가 나오며, 이는 HTTP Request 노드 세 개에 그대로 옮길 수 있습니다.
폴링 대신 웹훅 쓰기
오래 걸리는 영상 작업은 반복해서 확인하는 대신 PopNow가 n8n을 부르게 하세요. 두 번째 워크플로에 Webhook 트리거 노드(POST)를 추가하고, 운영용 URL을 복사해서 Create task 본문의 callBackUrl로 넘기세요.
{
"model": "minimax/h3/image-to-video",
"input": { "image_url": "https://media.popnow.ai/movie/lighthouse.webp", "prompt": "The waves roll in slowly" },
"callBackUrl": "https://your-n8n.example.com/webhook/popnow"
}웹훅 URL은 공개 HTTPS여야 하므로 로컬에서 실행하는 n8n에는 터널이 필요합니다. 모든 전송은 서명되며, 웹훅에서 Code 노드로 서명을 검증하는 방법과, 중복 전송을 무시하려고 request_id를 저장해야 하는 이유를 볼 수 있습니다.
n8n 밖에서 같은 호출하기
노드에 붙여 넣기 전에 본문을 시험해 볼 때 유용합니다.
curl -X POST "https://api.popnow.ai/api/v1/jobs/createTask?wait=60" \
-H "Authorization: Bearer $POPNOW_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"model": "alibaba/z-image-turbo/text-to-image", "input": {"prompt": "A small red fox curled up in a teacup, soft morning light, studio photo", "aspect_ratio": "1:1"}}'import os, uuid, requests
res = requests.post(
"https://api.popnow.ai/api/v1/jobs/createTask",
params={"wait": 60},
headers={"Authorization": f"Bearer {os.environ['POPNOW_API_KEY']}", "Idempotency-Key": str(uuid.uuid4())},
json={"model": "alibaba/z-image-turbo/text-to-image", "input": {"prompt": "A small red fox curled up in a teacup, soft morning light, studio photo", "aspect_ratio": "1:1"}},
timeout=90,
).json()
print(res["data"]["state"], res["data"].get("output", {}).get("assets", [{}])[0].get("url"))const res = await fetch('https://api.popnow.ai/api/v1/jobs/createTask?wait=60', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.POPNOW_API_KEY}`,
'Content-Type': 'application/json',
'Idempotency-Key': crypto.randomUUID(),
},
body: JSON.stringify({
model: 'alibaba/z-image-turbo/text-to-image',
input: { prompt: 'A small red fox curled up in a teacup, soft morning light, studio photo', aspect_ratio: '1:1' },
}),
});
const { data } = await res.json();
console.log(data.state, data.output?.assets?.[0]?.url);가격
이 워크플로가 API USD를 쓰는 곳은 Create task뿐이며 작업을 읽는 것은 무료입니다. 실패하거나 만료된 작업은 비용이 없고, 같은 Idempotency-Key로 다시 실행된 노드는 두 번 과금되지 않습니다. 대량 실행 전에는 jobs/quote로 모델별 가격을 확인하고 API 잔액과 환불에서 규칙을 보세요.
자주 나는 오류
| n8n에 보이는 것 | 원인 | 해결 |
|---|---|---|
Create task에서 401 | 자격 증명이 없거나 값에 Bearer 가 빠져 있음 | 헤더 값은 Bearer sk-popnow-…여야 합니다 |
msg에 필드 이름이 든 code: 400 | 필드가 모델 스키마에 없거나 값이 범위를 벗어남 | 모델 페이지를 확인하세요. 알 수 없는 필드는 거부됩니다 |
code: 40201 | 이 작업의 홀드에 필요한 API USD가 부족함 | API billing에서 입금하거나 더 저렴한 모델이나 설정을 고르세요 |
code: 40202 | 키의 지출 한도를 넘게 됨 | API 콘솔에서 이 키의 한도를 올리세요 |
code: 429 | 요청이 너무 많음 | 대기 시간을 늘리거나 병렬 항목을 줄이세요. 요청 제한을 참고하세요 |
| 반복이 끝나지 않음 | 작업이 아직 진행 중이거나 **Finished?**가 잘못된 필드를 읽음 | 영상은 몇 분 걸릴 수 있습니다. Check task가 Create task의 taskId를 읽는지 확인하세요 |
fileUrl은 처음엔 되다가 나중에 403 | 서명 링크는 약 20분 동안 유효함 | 같은 실행에서 파일을 내려받거나, 작업을 다시 읽어 새 링크를 받으세요 |
state: failed | 모델이 끝내지 못했거나 콘텐츠를 거절함 | 과금되지 않았습니다. errorCode를 확인하고 오류를 참고하세요 |
n8n용 공식 PopNow 커뮤니티 노드가 있나요?
네. n8n-nodes-popnow은 npm에 올라가 있고 GitHub에서 오픈소스로 공개되어 있습니다. 직접 설치해 운영하는 n8n에서는 Settings > Community Nodes > Install을 열고 n8n-nodes-popnow를 입력한 뒤 확인하세요. 셸에서 설치하려면 ~/.n8n/nodes에서 npm install n8n-nodes-popnow를 실행하고 n8n을 다시 시작하세요. 아직 인증된 노드가 아니므로 n8n Cloud에서는 설치할 수 없습니다. 꼭 필요하지는 않습니다. 내장 HTTP Request 노드로 API의 모든 기능을 쓸 수 있고, n8n Cloud에서도 작동하며, 이 페이지의 워크플로는 붙여 넣기 한 번으로 가져올 수 있습니다.
n8n에서 여러 생성을 동시에 돌릴 수 있나요?
네. Create task에 도달하는 항목마다 작업이 하나씩 만들어지고, 서로 병렬로 생성됩니다. 요청 제한을 살피고 키에는 지출 한도를 거세요.
생성된 파일을 Google Drive나 S3에 저장하려면 어떻게 하나요?
File URL 뒤에 HTTP Request 노드를 추가하세요. 이 노드가 fileUrl을 파일로 내려받도록(응답 형식 File) 설정한 다음, Google Drive, S3 또는 다른 저장소 노드에 넘기면 됩니다.

