상표 검색 서비스 ‘마크뷰(MarkView)’를 활용한 영상 콘텐츠 제작 과정을 자동화하여,
반복적인 영상 제작·블로그 콘텐츠 작성 업무를 효율화하는 것을 목표한 자동화 프로젝트입니다.
[기획 개요]
상표 관심 키워드를 중심으로
마크뷰 검색 실제 영상을 자동 생성하고
입력받은 주제에 맞는 블로그 글 생성
유튜브 영상을 자동으로 제작, 업로드 자동화
Notion에 발행용 블로그 포스트 및 영상 링크 업로드 + Notion 업로드 실패 시 Gmail로 발송
최종 블로그 발행만 사람이 검토 후 수동 진행
👉 “팩트(영상)는 자동 / 판단(발행)은 사람”
[전체 워크플로우 구조 개요]
[수동]
1. 검색어 선정 및 블로그 주제 선정
↓
[자동]
2. n8n챗 웹페이지(로컬)에 입력 | 입력 형식: [검색어], 주제
3. [검색어]를 마크뷰에서 검색하는 영상 자동 생성
4. 생성 후 유튜브에 자동 업로드(유튜브API 사용, 실패 시 저장한 로컬 경로 반환)
4. 주제를 기반으로 블로그용 글 생성
5. 블로그 포스팅용 글 + 영상 유튜브 링그 노션에 적재
↓
[수동]
6. 담당자 검토(이미지 추가 및 문단 정리) 후 블로그 발행
<aside>
[결과요약]
start.ps1 실행만으로 사용 가능
본 자동화는 n8n Chat UI를 단일 입력 인터페이스로 두고,
까지를 단일 워크플로우로 처리합니다.

<aside> 💡
즉,
n8n을 통한 사용자 입력과 결과물 업로드 처리
별도 단일 프로그램을 통해서 영상 자동 생성
두 가지로 분리하였습니다.
</aside>
[실행 흐름]
1. chat Trigger 를 통해서 검색어와 생성할 주제 키워드 입력
2. AI Agnet로 주제 5개 생성, 5 중 1 택
3. 영상 폼 결정 (일반 또는 숏폼)
4. 자동 업로드 결정 (자동 또는 수동)
5. 영상 생성 요청
- n8n -> Video worker
- Http Request 요청으로(post)
- body에는 검색어, 자동업로드 여부, 영상폼에 대한 정보를 적재
6. 영상 생성 완료, 업로드 결과 chat으로 응답
- 영상 생성 실패 시 로드 출력
7. 주제에 맞는 블로그 포스팅 글 작성(AI Agent)
8. 포스팅 글과 영상URL Notion에 적재
- Notion 업로드 실패 시 Chat으로 출력
MARKVIEW-CONTENT-AUTOMATION
├─ infra
│ └─ docker-compose.yml //전체 서비스의 실행 환경 정의
│
├─ n8n // n8n 워크플로우 Json 파일(Import 용)
│ └─ AX_chat - ver5_2026-01-16.json
│
├─ services
│ └─ video-worker //실제로 일을 하는 모든 로직은 여기
│ ├─ app //API & 비즈니스 로직 | 외부(n8n)와 내부(영상 파이프라인)를 연결하는 중간 계층
│ │ ├─ __init__.py
│ │ ├─ config.py // 서비스 설정 중앙 관리
│ │ ├─ constants.py // 상수 Enum 정의
│ │ ├─ file_utils.py // 파일/경로/정리 유틸
│ │ ├─ main.py // FastAPI 엔트리포인트(REST API)
│ │ ├─ schemas.py // 요청/응답 스키마
│ │ ├─ uploader.py // Drive/YouTube 업로드 로직
│ │ ├─ youtube_metadata.py // 유튜브 관련 메타데이터 빌더
│ │ └─ services/
│ │ └─ generate_service.py // 영상 생성 파이프라인 서비스
│ │
│ ├─ markview-video-automation //영상 생성 팩토리
│ │ ├─ output
│ │ │ ├─ video
│ │ │ ├─ converted
│ │ │ └─ playwright-report
│ │ │
│ │ ├─ playwright-ax
│ │ │
│ │ ├─ scripts
│ │ │ └─ convert-latest-video.mjs //녹화된 영상 convert 도구(ffmpeg)
│ │ │
│ │ ├─ test-results
│ │ │
│ │ ├─ tests
│ │ │ └─ basic.spec.ts //녹화 영상 행동 시나리오 구현 코드
│ │ │
│ │ ├─ package.json
│ │ ├─ package-lock.json
│ │ └─ playwright.config.ts
│ │
│ ├─ runner
│ │ └─ run_video.py //npm → playwright → 변환 전체 트리거
│ │
│ ├─ scripts
│ │ └─ init_youtube_token.py //YouTube인증, 토큰 재발급
│ │
│ └─ secrets
│ └─ youtube
│ ├─ client_secret.json
│ └─ token.json
│
├─ reauth.ps1 //유튜브 인증 갱신
├─ start.ps1 //자동화 도구 실행
└─ stop.ps1 //자동화 도구 종료