소개
시도하고자 했던 것과 그 이유를 알려주세요.
저는 강의나 발표를 위해 논문이나 다른 데서 그림으로 된 자료를 슬라이드로 만듭니다. 그러다 보면 수백 장의 슬라이드가 그림만 포함되어 있어 각 슬라이드에 제목을 일일이 작성하는 작업이 번거로웠습니다. 일부 슬라이드에는 이미 제목이 있거나 단순히 출처 정보만 있어, 수작업으로 처리하기가 매우 비효율적이었습니다. 이를 자동화하여 작업의 효율성을 높이고자 했습니다.
진행 방법
어떤 도구를 사용했고, 어떻게 활용하셨나요?
도구: n8n (워크플로우 자동화 플랫폼), Google Slides API, Google Drive API, OpenAI GPT-4o API
핵심 추가 단계: 원본 파일 보호를 위한 복사본 생성 및 페이지마다 썸네일(전체 슬라이드 이미지)을 받아 제목 생성에 활용
Form Trigger를 통해 워크플로우를 시작
사용자가 Google Slides 링크나 파일 ID를 입력할 수 있는 웹 폼 제공
Extract File ID Function 노드에서 입력값 파싱
전체 URL 또는 파일 ID만 입력해도 정상 처리
Get Original Info로 원본 프레젠테이션 정보 가져오기
Create Working Copy (HTTP Request 노드)
Google Drive API를 통해 원본의 복사본 생성
원본 파일은 전혀 수정하지 않음
파일명: "원본제목 - 제목 추가 완료 (날짜)"
Get Slides 노드로 복사본의 전체 슬라이드 데이터를 가져옴
Split Slides Function 노드로 개별 슬라이드 단위로 분리
각 슬라이드에 인덱스, 전체 수, 마지막 슬라이드 여부 등 메타데이터 추가
Split In Batches 노드(batch size=1)로 슬라이드를 하나씩 순차 처리
Check Title Function 노드로 제목 존재 여부 확인
텍스트가 없거나 10단어 이하인 경우
"출처" 또는 "source"만 있는 경우
위 조건에 해당하면 제목 생성 필요로 판단
If No Title 조건 분기
제목이 필요한 경우만 Vision API 처리
이미 제목이 있으면 건너뛰기
Get Slide Thumbnail (HTTP Request 노드)
Google Slides API의 썸네일 엔드포인트 호출
URL:
https://slides.googleapis.com/v1/presentations/{{presentationId}}/pages/{{slideId}}/thumbnailParameters:
thumbnailProperties.thumbnailSize=LARGEOAuth2 인증으로 접근 권한 확보
Analyze image (OpenAI LangChain 노드)
GPT-4 Vision API 호출
썸네일 이미지 URL(
contentUrl) 전달프롬프트: "슬라이드 이미지를 읽고 한줄 제목으로 만들어 줘. 제목만 적고 ** 같은 기호 적지마."
Prepare Update Function 노드
Google Slides batchUpdate API 요청 준비
텍스트 박스 생성, 제목 삽입, 스타일 적용 명령 구성
Insert Title HTTP Request 노드
Google Slides API batchUpdate 엔드포인트 호출
준비된 요청으로 제목 삽입
Merge Results 노드
제목 추가된 슬라이드와 건너뛴 슬라이드 결과 병합
Check If Last Slide IF 노드
isLastSlide == true조건 확인True: 완료 처리
False: Split In Batches로 루프하여 다음 슬라이드 처리
Respond to Form
처리 완료 메시지와 함께 새 파일 링크 제공
프롬프트 전문
슬라이드 이미지를 읽고 한줄 제목으로 만들어 줘. 제목만 적고 ** 같은 기호 삭제해 줘.Tip:
썸네일 API를 활용하여 전체 슬라이드 이미지를 확보함으로써 더 정확한 제목 생성 가능
원본 파일 보호를 위해 복사본에서 작업하는 것이 안전
Form Trigger를 사용하면 비개발자도 쉽게 사용 가능
결과와 배운 점(수백번 반복한 점).
이 워크플로우를 통해 지루하고 반복적인 슬라이드 제목 작성 작업을 완전히 자동화했습니다. n8n과 GPT-4 Vision API를 결합한 자동화 방식은 작업 효율성을 크게 향상시켜 주었습니다. 작업 중 얻은 중요한 교훈은 다음과 같습니다:
구글 노드와 api: n8n의 구글 노드는 내가 원하는 기능은 절대 제공하지 않았습니다. 결국 api 보고 클로드에게 던져주며 하소연해서 겨우 만들었습니다.
원본 파일 보호: 실수를 방지하기 위해 항상 복사본에서 작업하는 것이 중요했습니다.
반복과 조건부 처리: batch, If 노드를 활용하는 방법을 몰라 꽤나 고생했습니다. 지금도 돌아만 가는 수준인데 이거 좀 깔끔하게 구현하는 방법을 알고 싶네요.
인증 처리: Google OAuth2와 openAI 인증은 원없이 써봤네요.
더 하고 싶은 부분: Form Trigger와 Respond to Webhook을 활용하면 웹 인터페이스를 통해 누구나 쉽게 사용할 수 있는 도구로 만들 수 있을 것 같은데 아직 못했습니다..
본 사례가 유사한 자동화 작업을 고려하는 분들께 도움이 되었으면 좋겠습니다.
P.S. 내일 강의인데.. 여기서 시간과 에너지 다 썼네요. 이제 진짜 강의록 만들어야 겠습니다.