Communitygithub.com

zaddy99999/youtube-publish

터미널에서 완성된 동영상이나 쇼츠를 안전하게 YouTube에 업로드합니다. 사용자가 YouTube 채널을 인증하거나, 제목·설명·태그가 포함된 동영상을 하나 또는 여러 개 업로드하거나, 게시 시간을 예약하거나, 배치 업로드 시 중복 게시를 방지하려 할 때 사용합니다. 기본값은 비공개 업로드이며 업로드 원장을 유지합니다.

youtube-publish란 무엇인가요?

이 스킬은 SDK 의존성 없이 YouTube Data API v3를 사용하여 비디오를 업로드하는 도구로, plain `fetch`와 재개 가능한 청크 업로드를 활용합니다. 배치 업로드에 최적화되어 있으며, 기본적으로 비공개로 업로드하고 SHA-256 해시 원장을 유지하여 재실행 시 중복 업로드를 방지합니다. 또한 메타데이터 린트, 드라이런, 할당량 인식 기능을 제공합니다. 지원 플랫폼은 Node.js 기반 터미널 환경이며, Google Cloud Console에서 OAuth 클라이언트 ID를 발급받아 한 번만 인증하면 이후 자동으로 갱신됩니다. 사용자는 `jobs.json` 파일을 통해 여러 비디오의 파일 경로, 제목, 설명, 태그, 공개 범위, 예약 시간을 정의하고 `upload.mjs` 스크립트로 실행합니다. 드라이런 모드로 먼저 계획을 확인하고, 할당량 소진 시 자동 중단되며 남은 작업은 다음 날 재실행할 수 있습니다. 중요한 점은 절대 토큰이나 시크릿을 출력·로그·커밋하지 않으며, 업로드 원장을 임의로 삭제하지 않아야 한다는 것입니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/zaddy99999/video-editing-skills/tree/main/skills/youtube-publish

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

youtube-publish은(는) 무엇을 하나요?

SDK 의존성 없는 YouTube Data API v3 업로더 (plain fetch, 재개 가능 청크 업로드). 배치 업로드용으로 제작됨: 기본 비공개, SHA-256 원장으로 재실행 시 중복 업로드 방지, 메타데이터 린트, 드라이런 및 할당량 인식.

일회성 설정 (사용자가 수행, 에이전트는 수행하지 않음)

  1. Google Cloud Console: 프로젝트 생성, YouTube Data API v3 사용 설정, 유형 데스크톱 앱의 OAuth 클라이언트 ID 생성.
  2. 커밋하지 않고 클라이언트를 스크립트에 제공: export YOUTUBE_CLIENT_ID=... YOUTUBE_CLIENT_SECRET=... (또는 다운로드한 JSON을 저장소 외부에 두고 --client-secrets 전달).
  3. 채널을 한 번 인증:
    node scripts/auth.mjs --token-file .youtube-token.json
    
    동의 페이지를 열고, 리디렉션을 127.0.0.1에서 캐치하며 (PKCE + 상태 확인), 리프레시 토큰을 모드 600으로 저장합니다. 토큰은 절대 출력되지 않습니다.

워크플로

# 1. 드라이런: 메타데이터 검증, 파일 해싱, 건너뛰기/업로드 계획 및 할당량 비용 표시
node scripts/upload.mjs --jobs jobs.json --dry-run

# 2. 업로드 (기본 비공개)
node scripts/upload.mjs --jobs jobs.json --token-file .youtube-token.json

# 단일 파일
node scripts/upload.mjs --file publish/short.mp4 --title "How I automated my edits" --tags shorts,automation --privacy unlisted

jobs.json:

[
  { "file": "publish/short-01.mp4", "title": "...", "description": "...", "tags": ["shorts"], "privacy": "private" },
  { "file": "publish/short-02.mp4", "title": "...", "privacy": "private", "publishAt": "2026-11-01T17:00:00Z" }
]

상대 file 경로는 jobs 파일의 폴더를 기준으로 확인됩니다.

규칙

  • render-qc를 통과하고 사용자가 승인한 파일만 업로드합니다.
  • 기본 공개 범위는 private입니다. public은 사용자가 명시적으로 요청하고 --allow-public을 전달한 경우에만 허용됩니다. 예약된 동영상(publishAt)은 반드시 private이어야 하며, YouTube가 해당 시간에 공개로 전환합니다.
  • 항상 먼저 --dry-run을 실행하고 계획을 사용자에게 보여줍니다.
  • 토큰, 클라이언트 시크릿, .env* 파일 또는 원장을 절대 출력, 로그 또는 커밋하지 마십시오. 저장소의 .gitignore는 *token*.json, *credentials*.json, *client_secret*.json, .env* 및 *ledger*.json을 포함합니다.
  • 원장(.youtube-upload-ledger.json)은 게시된 내용의 진실 공급원입니다. 각 업로드 후 저장됩니다. "재시도"를 위해 삭제하지 마십시오. 사용자가 실제로 두 번째 복사본을 원하는 경우에만 --force-duplicate를 사용하십시오.
  • 할당량: 프로젝트는 기본적으로 하루 10,000유닛을 받으며, 한 번의 업로드는 역사적으로 1,600유닛을 소비합니다(약 하루 6회 업로드). --max-uploads(기본값 6)는 실행이 할당량을 소진하기 전에 중지합니다. --units-per-upload는 Google이 비용을 변경할 경우 추정치를 조정합니다. quotaExceeded 발생 시 실행이 중지되고 남은 작업은 다음 날 재실행할 수 있습니다(원장은 완료된 작업을 건너뜁니다).
  • 제목: 플레이스홀더(TODO, untitled, {{...}}) 없음, 최대 100자, < 또는 > 없음. 태그 총 최대 500자. 린트가 이를 적용합니다.
  • 인증되지 않은 API 프로젝트는 Google이 앱을 심사할 때까지 업로드를 비공개로 강제할 수 있습니다. 모든 업로드가 비공개로 반환되면 사용자에게 알리십시오.

확인

각 결과에는 videoId(비공개 상태인 동안 https://youtu.be/<id> 열기) 또는 skipped 사유가 있습니다. node scripts/upload.mjs --check-auth는 업로드 없이 자격 증명을 테스트합니다.

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

관련 스킬