오랜만에 n8n을 다시 돌려볼려고 했더니, 완전 다 잊어버렸다.

그래서 다시 정리하고 기록해둠

 

1.[n8n] credentials 설정

- 외부와 연동하는 설정이 되어야 정보를 가져올수 있음

 

2.구글 API 연동

구글 클라우드 > 프로젝트 생성 > API 연동 설정 > 기타 설정

 

2.1 클라이언트 ID 생성

 

2.2. 데이터 접근 허용

 

2.3 게시: 인증을 더하라고 나오는데, n8n에서 설정후 무시하고 진행하면 접근이 허용되더라...

: 테스트 모드에서는 7일단위로 인증을 다시 해야한다는게 있어서, 게시를 클릭해서 프로덕션모드로 설정해두면 된다.(앱 인증은 무시가능)

 

2.4 API 사용 설정

 : 인증은 성공했는데, 막상 실행해보면(노드), 아래 오류발생(링크를 따라갔더니 사용허용까지 설정해야 정상적으로 처리됨(26.04.01 확인, 구글 API 인증/사용 방식/설정이 약간 변경이 있었는듯)

 

Google Sheets API has not been used in project 675402156405 before or it is disabled. 
Enable it by visiting https://console.developers.google.com/apis/api/sheets.googleapis.com/overview?project=.... then retry. 
If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.

 

text to speech를 쓴다면 아래도 추가

1

 

* 중요: text-to-spee API는 유료인데, 무료300$ 크레딧이 있으면 사용가능(계정을 3개월단위로 새로 생성해서 사용하면된다)

 

- text to speech API 연결은 아래 인증방식으로 세팅하면된다.

 

* 이미지 관련해서 사용하던 무료모델이 유료화로 전환됨. 일단 무료 크레딧300$에서 차감된다고 이해했는데, 유료설정후에 사용가능

 - gemini API 사용설정 추가

참고:  https://ai.google.dev/gemini-api/docs/imagen?hl=ko+curl+-X+POST+%5C#rest

 

설정은 https://aistudio.google.com/app/api-keys?project=... 에서 진행

> 카드결재가 연계된 계정인데 한번에 10만원이 결재된다고한다. 300크레딧안에서 사용할수 있또록 조심

 

 

작업과정 요약:

1. 동화 데이터 수집

2. google cloude gemini로 줄거리 요약 및 이미지 생성용 동화 Scene 스크립트 작성

3. google cloude Text-to-Speech 모델로, 한국어/영어 오디오 변환

4. google cloude  이미지모델로 동화 씬 이미지 11장 생성(썸네일1장 + 스토리10장)

5. Vrew로 이미지 + 오디오 간단 합성

6. 유튜브 제목/설명/태그 Chatgpt로 최적화 및 업로드

 

(google colude 모델 비용은 300$ 무료로 제공되는걸로 사용시 영상 50편 이상 제작가능)


1. 영미 고전동화 다운로드(저작권이 60~70년 지난 데이터)

 

2. google cloude gemini로 줄거리 요약 및 이미지 생성용 동화 Scene 스크립트 작성

- gemini로 작성할 Scene 예시(0번, 썸네일)

- (2.5-flash-lite 저비용) https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-lite:generateContent

"scenes": [
    {
      "scene_id": 0,
      "title": "피터팬",
      "title_en": "Peter Pan",
      "one_line": "네버랜드의 신비로운 모험!",
      "script_ko": "창문 너머로 들려오는 '어린 시절'이라는 노래에 이끌려, 웬디와 형제들은 밤하늘을 나는 신비로운 소년 피터팬을 만나게 됩니다.",
      "script_en": "Drawn by the song of 'childhood' from beyond the window, Wendy and her brothers meet the mysterious boy Peter Pan, who flies across the night sky.",
      "image_prompt": "A whimsical night scene with a starry sky over a London rooftop. A silhouette of a young boy with a mischievous grin, Peter Pan, is seen flying with two young children, Wendy and her brothers, holding his hands. The moonlight casts a magical glow. The style should be a classic storybook illustration with rich, deep blues and silvers, emphasizing wonder and adventure. Consistent character designs for Peter, Wendy, and her brothers should be maintained throughout.",
      "negative_prompt": "photorealistic, modern, blurry, disfigured, extra limbs, low quality",
      "seed": 1000,
      "painting_style": "storybook watercolor illustration, vibrant colors, consistent character design"
    },

 

3. google cloude Text-to-Speech 모델로, 한국어/영어 오디오 변환

 - (모델은 검색후 돌려가며 음성 테스트 및 선택) https://texttospeech.googleapis.com/v1/text:synthesize

 

4. google cloude  이미지모델로 동화 씬 이미지 11장 생성(썸네일1장 + 스토리10장)

  * 핵심 *

    - google cloude 이미지 생성모델은 한번 4장까지 생성해서 출력할수 있다고 한다 -> 시도했지만 실패하였다.

    - 할수 없이, 한장씩 전달해서 이미지를 생성해야했다.

      * 그런데 문제는 이렇게 하면, 이미지 스타일이 제각각이고 주인공 생김새나 표현도 다 다르게 생성되는 문제점이 발생한다.

      * 그래서 나는, 11장의 이미지를 차례로 전달하되, 전체 줄거리도 전달하여 전체 맥락을 제공하였다.

      * 추가로 Seed값을 고정시키니 11장 이미지 모두 유사한 스케치 패턴이 적용되었다.

 

5. Vrew로 이미지 + 오디오 간단 합성

 

6. 유튜브 제목/설명/태그 Chatgpt로 최적화 및 업로드

 

 - 태그

  • n8n
  • 유튜브 쇼츠 만들기
  • 유튜브 자동화
  • 유튜브 무료 영상 제작
  • 쇼츠 자동 제작
  • 영상 편집 자동화
  • 유튜브 채널 운영 꿀팁
  • 유튜브 크리에이터 툴
  • 노코드 영상 제작
  • 유튜브 쇼츠 제작 프로그램

 

n8n구동시간 5분, Vrew 이미지/동영상 편집시간 15분, 기타 등 해서 30분안에 업로드 완료!

+ 구글 Cloude 무료 크레딧으로 AI 모델 공짜 사용!

 

 

[1분 동화] 피터팬, 네버랜드로 떠나는 짧은 여행

https://youtube.com/shorts/r74AC9PoOQY?feature=share

 

 

 

완벽하지는 않지만, 그래도 들어줄만한 품질로 완성되었다.

(이정도 수준이면, 잘때 둘째에게 들려줘도 되겠다는 생각이 든다ㅋ)

 

3시간짜리 Audio북을 작업하는데는 꽤나 노하우가 필요했다.

 

- 봉착한 문제들과 해결방법

 

1. text chunk

 

 : google cloud text-to-speech모델은 5000자까지만 한번에 변환이 가능하다.

 : 5000자 이하로 자르고 이걸 차례대로 호출하며 반복적으로 생성해야한다.

 : 이때 특수문자(특히 개행문자) 관련 처리가 까다로웠음

    * 원본 데이터를 저장해서 txt파일로 보관해서 검사할때는 개행을 남겨두고, text2speech로 전달할때는 모든 개행을 점(.)으로 변환하였다.(그래야만 끊어읽기가 적당히 들어가기 때문이다)

    * 사실 이조차도 ChatGPT로 작업을 하면 되겠지만, 여기서도 또 큰 데이터는 한번에 처리가 안되기 때문에, 아쉽게도 이부분은 약간의 수작업과 자동화를 섞을수 밖에 없었다.(body추출은 수동으로, 개행문자 치환등은 code 노드에서)

    * 이때, wait 노드를 on-form-submitted로 하면, 중간에 내가 txt파일을 만들고, 이후에 완성이되면 재시작 버튼을 누르듯 처리가 가능하다.

 

2. audio 합성

 

  : 여러개 분해된 오디오 파일을 FFMpeg (loca docker구동)로 병합한다.

  : 이때 메모리를 최소화하도록 적당히 페라미터들을 세팅해줘야한다.(그래야 변환속도도 빨라지고, PC 메모리가 터지는 문제도 방지할수 있다.)

  : 약 5~10분 정도면 70M정도의 오디파일을 병합할수 있음

  : 이미지와 오디오를 합성하면 150~200M (3시간) 짜리 파일이 생성됨(약 10~15분 소요),

     * PC사양이 너무 낮아서 여러개를 동시에 돌릴수도 없는게 넘 아쉽다.

 

3. 유튜브 업로드 및 업데이트

 

  : 장시간짜리 영상을 업로드할때는, 추가적인 인증을 받아야 업로드가 가능하다.(인증절차는 간단, 업로드 후 처리실패 내용을 알려줌)

  : 유튜브 사이트에서 설정하는 모든 정보를 n8n 노드에서 설정할수 없는게 좀 아쉬운 점이다.

  : 업로드시 공개설정을 비공개(부분공개?)로 올렸다가, 완성시 실제로 이상없이 올라간게 확인되면 설정을 공개로 수동으로 바꿔주게끔 하였다.

 

 

4. Google Sheets로 목록 및 처리순서 관리

 

  : 100개의 동화내역을 미리 만들어두고, 처리 성공하면 N->Y로 바꿔주도록 하였다.

  : 매번 노드 시작 버튼을 눌렀을때 다음번(N)인 목록을 순서대로 가져오도록하여 편의성을 높임.

 

5. 작업비용

 

 : 일단, google colud에 있는 API 위주로 사용하였고, 최초 가입시 300$(약 40만원) 정도를 무료로 쓸수가 있다.

 : 한편당 대략 3~5천원 이내로 비용이 발생하는듯하고, 대략 100편 정도는 무료로 작업이 가능할듯하다.


 

https://youtu.be/IEXjaY98Ti8

 

https://www.youtube.com/@Moonlight-Stories-i7f

 

Moonlight-Stories

영어 고전 동화를 읽어주는 오디오북 채널입니다. 자녀들에게 영미 고전을 들려주세요. 영어 공부를 하고싶은 성인에게도 추천합니다.

www.youtube.com

 

 

n8n 개발하면서, 있었던 시행착오 기록

 

1. merge

: 병렬로 실행한뒤, 여러개의 실행이 완료되었을때 진행시키고 싶을때, merge노드를 추가하여 기다리게 할 수 있다.

 

2. tow input

: 노드에서 2개 이상의 입력을 받았을때, 해당 변수를 추출하는 방법

  -> Code 노드에서 $input 대신에 해당 입력의 이름을 지정하면 됨

const inputData = $("Read/Write Files from Disk").first().binary;
const img_prompt = $("Get row(s) in sheet").first().json.img_prompt

 

3. Response type

 : output respons type을 FILE로 설정하면, binary로 추출되면서, 이전에 전달받은 json값들을 다음노드로 전달할 수 있다.
   (response type을 자동으로 두거나 하면, binary 출력되는데, json 값들이 전달 안되는 경우가 있었다)

 

4. execute once

 : 앞선 노드에서 List를 전달받은경우, Google gemini같은 노드에서는 자동으로 여러번 호출하게 된다.

   (이러면 too many request라는 오류가 발생할 수 있음)

 : 한번만 실행하고 싶은경우, settings에서 Execute Once로 설정하면 1번만 실행되게 제한할수 있다.

 

5. loop

 : List로 전달되면, 반복실행되지만, 명시적으로 반복설정도 가능하다.

 : loop는 반복할 노드들을, done은 완료시 실행할 노드를 연결한다.

 

6.Wait

 : 파일을 생성후, 파일을 읽거나 할때, 제대로 완성되지 않은 파일을 읽을때가 있다.

 : wait설정(1초이상)으로 잠시 대기하게하면 문제가 해결된다.

 

7.파일 정리

 : 여러파일을 작업이후, 파일을 정리(삭제, 이동)하고 싶을때는, 별도의 Excute Command노드를 연결해서 해결가능

mkdir -p /files/audiobook_en/{{ $json.no }}
mv /files/output/image.png /files/audiobook_en/{{ $json.no }}/image.png
mv /files/output/merged_audio.mp3 /files/audiobook_en/{{ $json.no }}/merged_audio.mp3
mv /files/output/audiobook_en_vedio.mp4 /files/audiobook_en/{{ $json.no }}/audiobook_en_vedio.mp4
mkdir -p /files/audiobook_en/{{ $json.no }}/tmp
mv /files/output/tmp/* /files/audiobook_en/{{ $json.no }}/tmp/
rm -rf /files/output/tmp/*
mv /files/output/book.txt /files/audiobook_en/{{ $json.no }}/book.txt

 

8.텔레그램 연동

: slack을 먼저 해보았으나, 쉽지 않았음

: 기존에 텔레그램 API를 사용했던 적이 있어서 해보니, 텔레그램이 더 간단한듯하다

  * 텔레그램 API 설정과정(간단설명): bot father로 신규생성-> ChatID, Token 획득

  * 노드입력 key: Chat ID (전화번호별로 생성되는 ID 값인듯)

  * credential 입력 key: Token(텔레그램 채팅방 별로 생성되는 key)

 

 

 

9. 오디오,영상 합성시 저용량으로 생성하기

- 오디오 합성

cd /files/output/tmp && \
rm -f filelist.txt && \
printf '%s\n' chunk_*.mp3 | \
  sed 's/^chunk_\([0-9][0-9]*\)\.mp3/\1 &/' | \
  sort -n | cut -d' ' -f2- | \
  awk '!seen[$0]++' | \
  sed "s/^/file '/; s/$/'/" > filelist.txt && \
ffmpeg -y -f concat -safe 0 -i filelist.txt \
  -c:a libopus -b:a 48k -vbr on -ac 1 -ar 48000 \
  -application voip -frame_duration 60 \
  /files/output/merged_audio.opus

 

- 영상합성(이미지+오디오)

ffmpeg -y -loop 1 -framerate 2 \
  -i /files/output/image.png -i /files/output/merged_audio.opus \
  -vf "scale=1920:1080:force_original_aspect_ratio=decrease:sws_flags=fast_bilinear,\
pad=1920:1080:(ow-iw)/2:(oh-ih)/2" \
  -c:v libx264 -preset ultrafast -tune stillimage -crf 20 -pix_fmt yuv420p \
  -c:a copy -shortest \
  /files/output/audiobook_en_video.mkv

 

1.유튜브 API 권한 얻기

- google cloud console 접속 및 검색

 

- YouTube API 선택 및 사용하기 클릭

- 사용자 인증정보 만들기(기존에 만들어둔 인증 재사용 가능)

  : 인증생성방법은 기존 글 참고(https://coding-mentor.tistory.com/9)

  : 접속 오류가 발생한다면, 테스트 사용자 추가(메일계정 추가)

 

2.n8n에서 인증 추가(Auth2) + 유튜브 채널 선택하기

- 삽질한 부분: 만약 한 계정에(유튜브 메일계정) 채널이 여러개인 경우 어떻게 특정 채널로 업로드하지?

    ==> n8n 인증 과정에서 메일계정 선택 ==> 채널이 여러개인 경우 채널 선택단계가 나옴

 

- 계정 선택 이후 단계에, 채널이 여러개인경우, 채널을 선택하는 단계가 나옴 (인증이름을 구분하여 관리하고, 유튜브 업로드 노드별로 인증을 구분하면됨)

 

3. n8n 유튜브 업로드

- 영상합성 데이터를 바로 유튜브 노드로 연결할수 있을지도 모르는데,

  나는 생성된 영상을 검증/히스토리관리 하기위해서, 로컬에 저장한다음에 유튜브 노드와 연결하도록 했음

 

Read Mp4 Node

 

- 유튜브 업로드 설정

 

- 추가옵션: 유튜브 사이트에서 설정하는 설명문구, 태그 등을 설정할수 있음(유튜브에서 설정하는 모든 상세설정을 할수 있는건 아니였음),

 * Privacy Status:Unlisted로 하면 부분공개로 업로드되고, 이후에 여러 부가적인 설정을 사이트에서 수정해야할거 같음(100% 자동화가 될수도 있겠지만.. n8n에서 설정할수 있는 옵션이 좀 아쉬웠음)

 

 

 

- 유튜브 업로드 테스트 결과

 

 

* 기존에 인터넷에 올라와 있는 영상합성 자료들은, 온라인(클라우드)상의 API를 호출(사용)하는 형태로 된게 많았다.

  나는 기본적으로 로컬PC(또는 서버환경내)에서 동작하는 프로세스를 구축하고자한다.

  (2틀이상 찾아보고 삽질을 생각보다 오래한듯하다)

 

1.Docker에 ffmpeg 설치

- docker-compose.yml

 : 볼륨을 설정해야만, 도커를 재기동해도 사용하던 설정(workflow 등)을 유지할수 있다.

 : Dockerfile을 빌드하고자 build .을 사용한다.

version: "3.8"

services:
  n8n:
    #image: docker.n8n.io/n8nio/n8n:latest
    build: .
    ports:
      - "5678:5678"       # n8n 웹 UI 접속 포트
    environment:
      - GENERIC_TIMEZONE=Asia/Seoul
      - TZ=Asia/Seoul
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      #- N8N_BASIC_AUTH_PASSWORD=강력한비밀번호
      #- N8N_ENCRYPTION_KEY=랜덤_32자리_키
    volumes:
      - n8n_data:/home/node/.n8n      # n8n 데이터 보존
      - C:/02_repository/youtobe_automation/n8n/files:/files  # 로컬 PC files 폴더를 컨테이너 내부 /files 로 마운트
    restart: unless-stopped

volumes:
  n8n_data:

 

- Dockerfile

 : alpine 리눅스는 apk 패키지 사용함

FROM docker.n8n.io/n8nio/n8n:latest

USER root
#RUN apt-get update && apt-get install -y ffmpeg && rm -rf /var/lib/apt/lists/*
RUN apk add --no-cache ffmpeg
USER node

 

- 빌드 및 실행

 : docker compose up -d --build

 

2. 영상합성

 : 아래와 같은 노드로 구성하였다

 : 이미지/오디오 생성뒤에 바로 FFmpeg노드를 붙여도 될거같은데, 중간에 오디오/이미지 파일을 저장하게 하여, 문제가 발생했을때 확인이 용이하게 하고자 아래와같이 각각의 파일응 저장한 후 로딩하게 하였다.

 

- ffmpeg 명령어는 다음과 같다.

- 입력하는 output경로를 잡고, 생성후에 mp4 생성경로만 잡아주면 된다.

ffmpeg -y -loop 1 -i /files/output/image.png -i /files/output/audio.mp3 -c:v libx264 -tune stillimage -c:a aac -b:a 192k -pix_fmt yuv420p -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2" -shortest /files/output/audiobook_vedio.mp4

 

* 온라인 API를 사용할려면, https://creatomate.com/ 서비스를 활용하면 된다.

  (단 raw데이터 audio/image도 온라인에 올라간 상태여야한다)

 

- 결과물

 

동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.

 

 

 

1.노드 구성

 1) GPT 이미지 생성모델에게 프롬프트를 전달하여 이미지 생성요청

 2) 생성한 바이너리 이미지를 읽어서 png로 저장

 3) 로컬 PC에 저장

 

2.GPT 이미지 모델 연결

1) gemini

: (aisudio) https://aistudio.google.com/prompts/new_chat

: (레퍼런스) https://ai.google.dev/gemini-api/docs/imagen?hl=ko

curl -X POST \
    "https://generativelanguage.googleapis.com/v1beta/models/imagen-4.0-generate-001:predict" \
    -H "x-goog-api-key: $GEMINI_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
        "instances": [
          {
            "prompt": "Robot holding a red skateboard"
          }
        ],
        "parameters": {
          "sampleCount": 4
        }
      }'

 * API-Key를 생성해서 간단하게 테스트 가능: 생성량 제한이 있을껀데, 무한정 무료는 아닐꺼라서... chatgpt에게 물어보면 어느정도 무료로 쓸수 있다고 나오긴함, 

-------------------------------------- chatgpt 답변 -----------------------------

1. Gemini 앱 (웹/모바일): 무제한 무료 사용

  • Gemini 앱 내에서는 Imagen 4 기반 이미지 생성무료로 제공됩니다. 기본 모델 품질 이용 시 요금이 부과되지 않으며, 단, 일일 생성량은 시스템 부하에 따라 제한될 수 있습니다.
    DEV Community+15Zenn+15DEV Community+15
  • 무료 계층에서 주로 쓰는 모델은 Imagen 4이며, **고급 기능(예: 심화 편집, 고속 처리)**은 유료 계층으로 제한됩니다.

 

2) google cloud vertax ai (결국 gemini 모델을 쓰긴함)

 - 무료 크레딧이 있으므로, 그 크레딧을 사용하는 기간에는 안정적으로 이미지 생성 가능

 - vertax ai api를 사용하기 클릭해서 권한받고 진행

 - 레퍼런스 사이트를 찾는 과정이 너무 삽질이 길었다. 구글 could 쪽은 이게 문제인듯....

 - (레펀런스) https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/imagen-api?hl=ko#rest

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \

https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/publishers/google/models/${MODEL_VERSION}:predict \
-d '{
  "instances": [
    {
      "prompt": "..."
    }
  ],
  "parameters": {
    "sampleCount": ...
  }
}'

 

post 주소 예시: https://us-east5-aiplatform.googleapis.com/v1/projects/gen-lang-client-0695181249/locations/us-east5/publishers/google/models/imagen-3.0-generate-002:predict

 

* 인증은 두가지 방식을 지원하는거 같은데(API-KEY, auth2), api-key로는 오류가 나서, 기존 AUTH2 방식(google cloud nature langage)으로 설정한걸 사용했다.

 

3) fal.ai (recraft)

 - 유로 버전은 fal.ai 인터페이스가 가장 쉬운듯(모델도 많음) 

https://fal.ai/models/fal-ai/recraft/v3/text-to-image

 

Recraft V3 | Text to Image | fal.ai

Recraft V3 is a text-to-image model with the ability to generate long texts, vector art, images in brand style, and much more. As of today, it is SOTA in image generation, proven by Hugging Face's industry-leading Text-to-Image Benchmark by Artificial Anal

fal.ai

 

 

3.생성해온 이미지를 png로 변환 (code node)

// predictions[0].bytesBase64Encoded 값 꺼내기
const b64 = $json.predictions[0].bytesBase64Encoded;

// Binary 데이터로 변환해서 반환
return [{
  json: {},   // JSON 결과는 비워두고
  binary: {
    data: {
      data: b64,              // Base64 문자열
      fileName: 'output.png', // 저장할 파일명
      mimeType: $json.predictions[0].mimeType || 'image/png'
    }
  }
}];

3.최종결과

- gemini 버전

 

- vertax 버전(이것도 gemini 모델임)

 

 

 

1.로컬 경로에서 파일을 읽어오기 위한 도커 설정

 : 도커를 compose로 구동하기

 : compose설정에 로컬 볼륨 추가

version: "3.8"

services:
  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    ports:
      - "5678:5678"       # n8n 웹 UI 접속 포트
    environment:
      - GENERIC_TIMEZONE=Asia/Seoul
      - TZ=Asia/Seoul
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      #- N8N_BASIC_AUTH_PASSWORD=강력한비밀번호
      #- N8N_ENCRYPTION_KEY=랜덤_32자리_키
    volumes:
      - n8n_data:/home/node/.n8n      # n8n 데이터 보존
      - C:/02_repository/youtobe_automation/n8n/files:/files                # 로컬 PC files 폴더를 컨테이너 내부 /files 로 마운트
    restart: unless-stopped

volumes:
  n8n_data:

: (실행) docker compose up -d

  (로그)docker compose logs -f

 

2.파일에서 읽어올때, binary 설정을 읽어오는 방법(preprocess)

 : 자바스크립트 코드에서 binary를 버퍼에 담았다가 변환

// 입력 텍스트 가져오기
// const inputData = $input.first().json;
//const rawText = inputData.sampleText || '';
//const title = inputData.testTitle || 'Test';

// 바이너리로 읽은 경우  
const inputData = $input.first().binary;
const buffer = Buffer.from(inputData.data.data, 'base64');
const rawText = buffer.toString('utf8');
const title = 'Sample Book';

 

3. google cloude text-to-speech 설정들 (속도, 어조 등)

 : audio paramter를 개별 설정은 못하고(설정시도했으나 오류로 실패), 하나의 JSON으로 설정함

 : google text-to-speech 설정들

"audioConfig": {
  "audioEncoding": "MP3",      // 필수: 출력 포맷 (LINEAR16, MP3, OGG_OPUS 등)
  "speakingRate": 0.9,         // 말하는 속도 (기본값 1.0, 범위 0.25 ~ 4.0)
  "pitch": 0.0,                // 음성 높낮이, 단위: semitone (-20.0 ~ +20.0)
  "volumeGainDb": 0.0,         // 음량 조정 (dB, 범위 -96.0 ~ +16.0)
  "sampleRateHertz": 24000,    // 출력 샘플링 레이트 (선택 사항)
  "effectsProfileId": ["telephony-class-application"] // 특정 프로필 (전화, 스마트 스피커 최적화 등)
}

 

 

=>결과 파일

 

speech (3).mp3
0.36MB

 

 

크게 2가지의 시행착오(삽질)가 있었다.

 

1.Google Cloude Text-2-Speech API 연계시 문제

2.N8N에서 Google api 페라미터 설정 문제

3.생성된 Binanry 실행(구동) 문제


 

1. 노드 구성

: text 노드에서 샘플 데이터를 가져와서 음성으로 변환하는 작업을 실험하고자 했다.

: claude.ai 한테 아래 프롬프트를 넣으면, n8n에서 로딩할 json파일을 생성해준다.(위의 언급한 3번의 문제를 해결하기 위해, 아래 캡쳐는 json2binary라는 노드를 수동으로 추가한 상황이다)

더보기

n8n에서 샘플 text 파일->구글 음성변환하는 테스트해보고 싶어. n8n 노드를 구성하는 json파일을 구성해줘

 

2. 구글 cloude text-to-speech API 작업

  1) google cloude console에 진입

  2) text-to-speech API 사용 추가 (text to speech 검색 후 사용(?)클릭, 아래는 사용적용후의 캡쳐)

 

    - 카드 정보를 필수로 입력해야 테스트 사용이 가능(일단 등록하고, 향후 중지하거나 제거하면됨)

    - 처음에는 300$의 쿠폰을 주고 3개월간 사용이 가능하다. 

    - 기본 음성모델의 경우 100만자당 4$씩 차감된다! 

        * google text-to-speech 장단점 :

           (장점) 모델별로 성능이 뛰어난 모델 취사 선택 가능, 초기 무료 사용권 제공

           (단점) 따라할 수 있는 레퍼런스(다른 블로거들의 글)가 작은듯?

 

   3) API 사용권한 추가 [삽질 1]

     3.1) google cloude api 종류가 딱 맞아 떨어지는게 없음 -> Google Cloude Natural Language account로 선택

     3.2) 추가한 권한정보(client id, secret)을 넣고 하단에 sign in google을 클릭하는데 400,401,403등 오류가 발생

     3.3) 구글 인증정보에서 두가지 추가: 리다이렉션 주소, 테스트 계정

      - 그런데, 이후에도 연결할수 없다고 오류가 발생해서 테스트 계정(메일주소) 추가

 

 

3. n8n 노드 작업(google text 2 speech 연동)

 3.1) 인증 추가: Google Cloude Nature Language account 로 유형 추가(위에 캡쳐 참고)

 3.2) 설정정보: POST방식, JSON 페라미터 등 설정했으나 오류발생(json 페라미터는 claude.ai 가 만들어준거 사용)

- 실행해보면, 페라미터 오류가 발생하여, 구글 스펙을 찾아봐야함

 : https://cloud.google.com/text-to-speech/docs/create-audio-text-command-line?hl=ko

 

빠른 시작: 명령줄을 사용하여 텍스트에서 오디오 만들기  |  Cloud Text-to-Speech API  |  Google Cloud

명령줄을 사용하여 텍스트에서 오디오를 만들도록 Text-to-Speech에 요청합니다.

cloud.google.com

 

       3.3) 예제로 생성된 JSON을 드래그하여 가져옴, body설정을 using JSON으로 변경 [삽질 2]

 

       --> text를 오디오로 변경성공!

 

     3.4) json으로 생성되어서, binary로 변경저장해야(mp3) 내가 들어볼수있다! [삽질 3]

        : 역시나 chatgpt나 claude.ai한테 물어보면 스크립트 생성해줌

        : code 노드를 하나 추가하고, 자바스크립트를 넣어주면 됨!

        --> 실행해보면 작업성공! 다운로드 받아서 변환된 음성을 들어볼수 있다.

   

 

 

* 일단 여기까지 테스트를 끝냈다.

* todo:

 1) 샘플 text를 json전체로 만들어서 돌려봤는데, 개별 페라미터로 바꾸고 + 노드간 input/ouput으로 연결되도록 추가 설정

 2) 생성된 샘플을 들어보면 너무 품질이 떨어지는 느낌(너무 빠르고 자연스럽게 들리지가 않음)

    - google text-to-speech 모델 종류, 남성/여성 type, 속도 같은 페라미터를 조정해서 자연스러운 case를 수동으로 조정해야할듯

speech.mp3
0.08MB

 

 

로드맵

1.n8n 로컬 docker 설치 및 구동

2.n8n을 이용해서 유튜브 채널에 영상을 제작하는 과정을 자동화해보자

3.주기적으로 자동으로 영상제작 업로드하는 시스템을 배포하자


[step1] Window(로컬PC)에서 docker로 n8n 설치 실행하기

 

1.n8n 이란?

 

n8n은 “시각적(노코드/로코드) 워크플로 자동화 플랫폼”**이에요. 다양한 앱·API·DB를 “노드(node)”로 이어서 파이프라인을 만들고, 필요하면 코드(자바스크립트)로 커스터마이징할 수 있죠. 공식 문서 표현 그대로 업무 자동화와 AI 기능을 결합한 워크플로 엔진입니다. ( 공식: 엔-에잇-엔 (영어로 n-eight-n).)

 

라이선스(실무에서 중요한 포인트)

  • Sustainable Use License(SUL) 기반의 fair-code(소스 공개 + 상업적 사용 일부 제한) 모델입니다.
    • 내부 업무 자동화·컨설팅은 자유롭게 가능.
    • 호스팅해 유료 서비스로 제공/화이트레이블링 등은 별도 상업 라이선스 필요.
    • OSI 의미의 “오픈소스”는 아님(소스 공개이되 사용 제한 존재). docs.n8n.io

 

2.n8n 설치 (by window docker)

1) docker 설치

https://www.docker.com/

 

Docker: Accelerated Container Application Development

Docker is a platform designed to help developers build, share, and run container applications. We handle the tedious setup, so you can focus on the code.

www.docker.com

>  Download docker desktop

 

2) n8n 설치(간단한 버전)

  1. 로컬 docker 볼륨 생성

docker volume create n8n_data

 

  2. n8n 이미지 다운로드

    : 아래 실행 명령어로 갈음(실행시 자동으로 다운로드)

3) n8n 실행

  1. cmd 관리자 권한실행
  2. 명령어 실행
docker run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n

 

     *기본 구동시 port 5678로 고정됨

     *실행시 로컬 볼륨 연결

 

  3. 접속

   : http://localhost:5678/

 

+ Recent posts