직접 만들고, 내 생각을 더하다
세상의 트렌드를 읽고 싶어하는 한 사람으로, 목공 DIY를 좋아하고, AI, n8n을 사용해 자동화 프로세스를 배우고 있다.

n8n + ComfyUI로 유튜브 쇼츠 이미지 완전 자동화한 실제 워크플로우 공개

n8n과 ComfyUI를 연동해 매일 아침 유튜브 쇼츠 이미지를 완전 자동 생성하는 실전 7단계 워크플로우 공개. 날씨·트렌드·과거 주제를 GPT에 주입해 중복 없는 콘텐츠를 월 $1~2로 운영하는 법을 노드 단위로 상세히 설명합니다.

매일 아침 8시 20분, 나는 아무것도 하지 않는다. 커피 한 잔 마시는 동안 n8n이 알아서 오늘 날씨를 확인하고, 유튜브 트렌드를 뒤지고, GPT로 쇼츠 대본을 쓰고, ComfyUI로 이미지 3장을 생성해서 Google Drive에 저장한다. 이게 1년 가까이 하루도 안 빠지고 돌아가고 있다.

처음엔 "이게 진짜 될까?" 반신반의했는데, 지금은 이 파이프라인 없이 콘텐츠 만드는 게 상상이 안 될 정도가 되었다.
오늘은 이 전체 구조를 노드 단위로 뜯어서 보여주려고 한다.
코드는 최소화하고, 왜 이렇게 설계했는지에 집중할 거다.


🗺️ 전체 파이프라인, 7단계로 한눈에 보기

"n8n ComfyUI 자동화"라고 하면 뭔가 복잡할 것 같지만, 구조는 생각보다 단순해. 크게 3개 레이어로 나뉜다.
 

이 구조의 핵심은 데이터 수집을 병렬로 처리한다는 거다.
Schedule Trigger가 실행되는 순간 Google Sheets 조회, 날씨 API 호출, YouTube 검색이 동시에 돌아간다. 순차 실행이면 30초 걸릴 걸 병렬로 하면 10초 안에 끝난다.
n8n에서 병렬 처리는 노드를 그냥 같은 트리거에 연결하면 돼서 설정 자체는 별거 없다.


📡 데이터 수집 레이어 — 왜 날씨랑 YouTube까지 끌어오나?

처음엔 그냥 GPT한테 "오늘 쇼츠 주제 뽑아줘" 하면 되는 거 아니야? 라고 생각했다. 근데 이렇게 하면 금방 한계가 온다. GPT는 컨텍스트 없이는 매일 비슷한 주제를 정하기 때문이다. 그래서 3가지 데이터를 주입하는 구조를 만들어 보았다.


📊 1. Google Sheets — 과거 15개 주제·본문 불러오기

Google Sheets에 날짜·주제·본문·제목·BGM을 매일 기록해두는데, 이걸 다시 읽어서 GPT에 넣어준다. 목적은 하나다 — 중복 방지.

날짜 기준으로 내림차순 정렬해서 최근 15개만 잘라내는 Code 노드가 핵심이다. 아무리 프롬프트를 잘 짜도 GPT는 맥락이 없으면 같은 주제를 반복한다(명심하자!).
"최근에 이런 거 했으니 이건 빼" 라는 정보를 명시적으로 넣어줘야 제대로 돌아간다.

🌤️ 2. OpenWeatherMap — 날씨 컨텍스트 주입

날씨 데이터가 콘텐츠랑 무슨 상관이야? 싶겠지만, 실제로 유효하다.
맑은 날 아침에 올리는 쇼츠랑 흐린 저녁에 올리는 쇼츠는 분위기가 달라야 한다. 예를 들어, 화창한 날에 비나 눈이 오는 주제를 선정하면 곤란하다. 그런 걸 방지하는 것도 필요하다.

Code 노드에서 온도·날씨 상태를 받아서 계절·시간대·날씨 키워드로 변환한다. 이 키워드가 GPT 주제 선택 프롬프트에 주입되면, "오늘 비 오고 흐린 날이니까 실내에서의 성찰 쪽 주제" 같은 방향으로 자연스럽게 흘러가도록 한다.

📹 3. YouTube API — 실시간 트렌드 30개 수집

관련 해시태그로 YouTube 쇼츠를 조회수 기준 상위 50개 검색하고, 그 중 제목만 30개 추출한다. 이게 GPT가 "요즘 뭐가 잘 되는지" 파악하는 트렌드 레이더가 된다.

주의할 점은 트렌드 제목을 그대로 베끼는 게 아니라 맥락 참고용으로만 쓰게 프롬프트를 설계해야 한다. 안 그러면 GPT가 제목을 그냥 변형해서 뱉어버릴 수 있다.


🤖 GPT 프롬프트 자동화 3단계 — 주제 → 본문 → 제목

GPT 노드가 3개 직렬로 연결돼 있다. 각각 역할이 완전히 다르다. 이걸 하나로 합치려고 했다가 퀄리티가 확 떨어져서 분리했다.


노드 모델 역할 핵심 파라미터
OpenAI-주제 gpt-4.1-mini 각도 분석 후 오늘 주제 1개 선택 temp 0.9, 15~20자 제목만 출력
OpenAI-본문 gpt-4.1-mini 200~230자 쇼츠 대본 작성 4비트 구조 강제, frequency_penalty 0.6
OpenAI-제목 gpt-4.1-mini 후킹 유튜브 제목 1개 생성 18~32자, presence_penalty 0.4

셋 다 gpt-4.1-mini를 쓰는 이유는 단순하다. 비용 대비 품질이 이 용도엔 충분하기 때문이다.
gpt-4o 쓰다가 바꿨는데, 솔직히 쇼츠 대본 200자짜리 생성에는 차이를 못 느꼈다. 비용은 약 5배 차이나고. 

Tip. 본문 스크립트는 한국 사람들이 듣기에 자연스러워야 한다. 그래서, 이 부분은 휴먼이 개입하는 것이 좋다. 난 클로드에게 기존 스크립트들과 프롬프트를 넣어놓은 상태에서 자연스러운 문장으로 바꿔주도록 한번 더 작업을 한 후, 내가 읽으면서 일부 문장을 더 수정하는 편이다. 

중복 방지 로직이 핵심이다

주제 생성 프롬프트에서 제일 공들인 부분이 각도 코드 시스템이다. 가족 관계, 인생 성찰, 관계의 어려움, 건강·노후, 일상의 평안 — 5개 영역에 각각 5~6개 세부 각도(G-1, I-2 같은 코드)를 붙여놨다.

🔑 각도 코드 중복 방지 흐름

  1. Sheets에서 불러온 최근 15개 주제에서 각도 코드 빈도 계산
  2. 3회 이상 등장한 각도는 이번 주제에서 자동 제외
  3. 미사용·최소 사용 각도 중에서만 선택

이거 없으면 GPT가 2주 안에 거의 같은 주제를 반복한다. 테스트해봤는데 각도 코드 없이 그냥 "최근 주제 목록" 넣었을 때는 주제 다양성이 확 줄어들더라. 명시적인 코드 시스템이 있어야 GPT가 제대로 회피한다.


🖼️ ComfyUI API 연동 — 이미지 3장 자동 생성하는 법

이 파이프라인에서 제일 재밌는 부분이다. n8n에서 ComfyUI를 쓰는 방법은 크게 두 가지인데, ComfyUI 커뮤니티 노드를 쓰거나 HTTP Request로 API 직접 호출하거나. 나는 ComfyUI 전용 n8n 노드를 사용하고 있다.

워크플로우 JSON을 n8n에서 직접 주입하는 구조

ComfyUI 노드의 핵심은 workflow 파라미터에 ComfyUI API 형식의 JSON을 통째로 넣는 거다. 이게 처음엔 낯선데 익숙해지면 강력하다. ComfyUI에서 워크플로우 짜고 → "Save (API format)"으로 내보내고 → n8n 노드에 붙여넣으면 된다.

🎨 이미지 생성 파이프라인 내부 구조

  • KSampler — seed를 매번 랜덤으로 바꿔서 다양한 이미지 생성 (Math.random() * 3435973836)
  • CLIPTextEncode — GPT 이미지 프롬프트 주입 (본문 내용 분석 후 자동 생성된 영문 프롬프트)
  • UNETLoader — HiDream I1 Full FP8 모델 로드
  • ImageUpscaleWithModel — 4x_NMKD-Siax로 업스케일
  • ImageScale — 최종 1296×2304px (쇼츠 9:16 비율) 리사이즈

Loop Over Items로 3장 순차 생성

이미지를 3장 만드는 방식은 단순하다. Code 노드에서 이미지 프롬프트를 3개 배열로 만들고, Loop Over Items 노드가 하나씩 순차적으로 ComfyUI에 넘긴다. 각 이미지는 역할이 달라 — 상황 반영 이미지, 희망/반전 이미지, 실천/행동 이미지 순서다. 단순히 3장 찍는 게 아니라 쇼츠 스토리 구조에 맞게 이미지 컨셉 자체가 달라지도록 설계했다.

생성 완료된 이미지는 ComfyUI 노드에서 파일명을 반환하는데, 이걸 Google Drive 노드에 바로 넘겨서 저장한다. 루프가 끝나면 다시 Loop Over Items 노드로 돌아가서 다음 이미지 처리 — 이게 3번 반복되는 구조다.

Tip. 이미지를 상황과 맥락에 맞게 다양한 이미지로 생성하기 위해, 계속해서 랜덤 생성할 수 있는 코드 노드를 개선해오고 있다. 처음에는 이 노드에 많은 것을 담으려고 했다. 예를 들어, 계절과 옷, 장신구, 환경 등을 앞의 정보들을 반영한 후 모두 랜덤으로 선택하도록 하고 싶었다.  그런데 너무 복잡해지기만 하고 제대로 작동하지 못했다. 그래서, 지금은 계절이 바뀌는 시점에 맞게 내가 개입해서 코드 노드를 교체하고 있다. 그렇게 하니 코드가 좀 더 단순해져 이미지 생성시 원하는 계절을 더 잘 표현하는 효과가 있었다. 


💰 운영 비용 절감 실측 — 실제로 얼마나 드나?

이 시스템 만들지 않았다면, 이미지 소스를 사거나 프리랜서한테 맡겨야 했을 것이다. 아니면 포기하던가... 지금 돌아가는 환경을 보면 비용 절감 효과가 진짜 크다고 본다. 실제 월 비용 공개해 보자.

항목 사용량 (월 30회 기준) 월 비용
GPT-4.1 mini (주제+본문+제목) 약 150K tokens/월 약 $0.12
OpenWeatherMap API 30회 호출 무료
YouTube Data API v3 30회 검색 무료 (할당량 내)
ComfyUI (로컬 GPU) 90장 생성 (3장×30회) 전기세만
합계 월 $1~2 수준

⚡ ComfyUI 로컬 운영의 진짜 장점

이미지 생성 비용이 사실상 0이다. 클라우드 이미지 API(Midjourney, DALL-E 등)는 이미지 1장에 $0.04~0.08 정도 드는데, 월 90장이면 $4~7다. 1년이면 $50~80 차이. ComfyUI 로컬로 뽑으면 그 비용 전체가 절감되고, 품질 컨트롤도 훨씬 세밀하게 할 수 있다.


❓ 자주 받는 질문들

Q. n8n에서 ComfyUI API 연동이 어렵지 않나요?
ComfyUI 전용 n8n 커뮤니티 노드가 있어서 생각보다 어렵지 않다. ComfyUI에서 API 형식으로 워크플로우를 내보내고 n8n 노드에 붙여넣는 게 전부다. 다만 ComfyUI를 n8n이 접근할 수 있는 주소로 열어놔야 하는데, 로컬이면 같은 네트워크면 되고 Docker 환경이면 호스트 IP 설정만 맞추면 된다.
Q. GPT 프롬프트가 너무 길면 비용이 많이 들지 않나요?
주제 선택 프롬프트가 길기는 한데 gpt-4.1-mini 기준으로 입력 1M 토큰당 $0.40이라 실제 비용 임팩트는 작다. 하루 1회 실행 기준으로 주제 프롬프트 토큰이 대략 2,000~3,000 토큰 정도라서 월 30회 돌려도 $0.10 수준이다.
Q. 이 워크플로우로 생성된 콘텐츠 품질이 실제로 쓸 만한가요?
초기엔 60~70% 정도 퀄리티였는데 프롬프트 고도화 거듭하면서 지금은 80~90% 수준까지 올라왔다고 본다. 핵심은 GPT를 맹신하지 않고 금지 표현, 구조 규칙, 중복 체크를 시스템으로 만들어 놓는 거가 아닐까 싶다. 자동화는 결국 프롬프트 품질만큼 나온다.

🚀 마무리 — 1년 가까이 운영하면서 진짜 느낀 것

n8n + ComfyUI 자동화를 운영하면서 느낀 건, 자동화의 가치는 시간 절약이 아니라 일관성이라는 거다. 손으로 만들면 컨디션에 따라 퀄리티가 널뛰는데, 시스템이 만들면 매일 비슷한 수준이 유지된다. 이게 채널 운영할 때 생각보다 중요한 요소가 아닐까 싶다.

물론 처음 세팅하는 데 시간이 꽤 들것이다. 특히 프롬프트 고도화는 몇 달짜리 작업이 될 수 있다. 근데 한 번 세팅해두면 그 이후론 거의 손댈 일이 없다. 오늘 소개한 구조가 그 시행착오의 결과물이다.

댓글 쓰기