Deploy Musician Pipeline

YouTube @musician-parksy + parksy.kr + Google Drive ํ•œ๋ฐฉ ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ.

์ตœ์ข… ๊ฐฑ์‹ : 2026-02-23


ํŒŒ์ดํ”„๋ผ์ธ ๋‹ค์ด์–ด๊ทธ๋žจ

video.mp4
  โ”‚
  โ”œโ”€[1] youtube-studio.js upload โ”€โ”€โ†’ YouTube @musician-parksy
  โ”‚     โ””โ”€โ†’ video.mp4.youtube.json (์‚ฌ์ด๋“œ์นด)
  โ”‚
  โ”œโ”€[2] update-musician-manifest.js โ”€โ”€โ†’ parksy.kr/data/youtube/musician-videos.json
  โ”‚
  โ”œโ”€[3] git add + commit + push โ”€โ”€โ†’ GitHub Pages (parksy.kr ์ž๋™ ๋ฐฐํฌ)
  โ”‚
  โ””โ”€[4] gdrive-sync.sh youtube โ”€โ”€โ†’ Google Drive (์„ ํƒ)

ํŒŒ์ผ ๊ฒฝ๋กœ

parksy-audio (์ด ๋ ˆํฌ)

ํŒŒ์ผ์—ญํ• 
`tools/deploy-musician.sh`ํ•œ๋ฐฉ ๋ฐฐํฌ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ
`tools/update-musician-manifest.js`.youtube.json โ†’ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ์—…๋ฐ์ดํŠธ
`tools/youtube/youtube-studio.js`YouTube API CLI (์—…๋กœ๋“œ/๊ด€๋ฆฌ)
`tools/gdrive-sync.sh`Google Drive rclone ๋™๊ธฐํ™”
`docs/DEPLOY-MUSICIAN-PIPELINE.md`์ด ๋ฌธ์„œ

parksy.kr (๋ณ„๋„ ๋ ˆํฌ)

ํŒŒ์ผ์—ญํ• 
`data/youtube/musician-videos.json`๋น„๋””์˜ค ๋งค๋‹ˆํŽ˜์ŠคํŠธ (๋ฐฐํฌ ๋Œ€์ƒ)
`category/Musician-Parksy/index.html`๋ฎค์ง€์…˜ ํŽ˜์ด์ง€ (๋งค๋‹ˆํŽ˜์ŠคํŠธ ์ฝ์–ด์„œ ๋ Œ๋”๋ง)

๋งค๋‹ˆํŽ˜์ŠคํŠธ ์Šคํ‚ค๋งˆ โ€” musician-videos.json

{
  "collection": "musician-videos",
  "version": "1.0.0",
  "channelId": "@musician-parksy",
  "lastUpdated": "2026-02-23T10:00:00.000Z",
  "count": 1,
  "items": [
    {
      "videoId": "dQw4w9WgXcQ",
      "title": "Parksy Piano Minimal #001",
      "program": "P2",
      "playlist": "๋ฐ•์”จ ์˜ค๋””์˜ค",
      "style": "piano-minimal",
      "composer": "Chopin",
      "work": "Nocturne Op.9 No.1",
      "ambient": "rain",
      "duration": 260,
      "privacy": "private",
      "uploadedAt": "2026-02-23T10:00:00.000Z",
      "sourceFile": "video.mp4"
    }
  ]
}

Item ํ•„๋“œ

ํ•„๋“œํƒ€์ž…ํ•„์ˆ˜์„ค๋ช…
`videoId`stringOYouTube ๋น„๋””์˜ค ID
`title`stringO์˜์ƒ ์ œ๋ชฉ
`program`stringOP2/P3/P4/P5
`playlist`string-ํ”Œ๋ ˆ์ด๋ฆฌ์ŠคํŠธ ์ด๋ฆ„
`style`string-piano-minimal, dark-funeral ๋“ฑ
`composer`string-์ž‘๊ณก๊ฐ€
`work`string-๊ณก๋ช…
`ambient`string-rain/wind/fire
`duration`number-๊ธธ์ด (์ดˆ)
`privacy`string-private/unlisted/public
`uploadedAt`stringOISO 8601
`sourceFile`string-์›๋ณธ ํŒŒ์ผ๋ช…

์Šคํฌ๋ฆฝํŠธ ์‚ฌ์šฉ๋ฒ•

deploy-musician.sh (์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ)

# ๊ธฐ๋ณธ โ€” ์—…๋กœ๋“œ + ๋งค๋‹ˆํŽ˜์ŠคํŠธ + push
./tools/deploy-musician.sh video.mp4 \
  --program P2 --composer "Chopin" --work "Nocturne Op.9 No.1" \
  --ambient rain --style piano-minimal

# Drive ํฌํ•จ
./tools/deploy-musician.sh video.mp4 --program P2 --drive

# ์ด๋ฏธ ์—…๋กœ๋“œ๋œ ์˜์ƒ (์‚ฌ์ด๋“œ์นด ์žˆ์Œ)
./tools/deploy-musician.sh video.mp4 --skip-upload --program P2

# ๋ญ ํ• ์ง€๋งŒ ํ™•์ธ
./tools/deploy-musician.sh video.mp4 --dry-run --program P2

์˜ต์…˜

ํ”Œ๋ž˜๊ทธ๊ธฐ๋ณธ๊ฐ’์„ค๋ช…
`--program`P2ํ”„๋กœ๊ทธ๋žจ (P2/P3/P4/P5)
`--composer`-์ž‘๊ณก๊ฐ€
`--work`-๊ณก๋ช…
`--ambient`-์•ฐ๋น„์–ธํŠธ ํƒ€์ž…
`--style`piano-minimal์Šคํƒ€์ผ
`--playlist`๋ฐ•์”จ ์˜ค๋””์˜คํ”Œ๋ ˆ์ด๋ฆฌ์ŠคํŠธ
`--privacy`privateYouTube ๊ณต๊ฐœ ์„ค์ •
`--duration`-๊ธธ์ด (์ดˆ)
`--drive`offGoogle Drive ๋™๊ธฐํ™” ํฌํ•จ
`--dry-run`off๊ณ„ํš๋งŒ ์ถœ๋ ฅ
`--skip-upload`off์—…๋กœ๋“œ ๊ฑด๋„ˆ๋œ€

Exit ์ฝ”๋“œ

์ฝ”๋“œ์˜๋ฏธ
0์„ฑ๊ณต (Drive ์‹คํŒจ๋„ 0)
1YouTube ์—…๋กœ๋“œ ์‹คํŒจ
2์‚ฌ์šฉ๋ฒ• ์—๋Ÿฌ
3parksy.kr ๊ฒฝ๋กœ ์—†์Œ ๋˜๋Š” ๋งค๋‹ˆํŽ˜์ŠคํŠธ ์‹คํŒจ

update-musician-manifest.js

node tools/update-musician-manifest.js --help    # ์‚ฌ์šฉ๋ฒ•

node tools/update-musician-manifest.js \
  --sidecar video.mp4.youtube.json \
  --parksy-kr ~/parksy.kr \
  --program P2 --composer "Chopin" --work "Nocturne Op.9 No.1" \
  --ambient rain --style piano-minimal

parksy.kr ๊ฒฝ๋กœ ํƒ์ƒ‰ ์ˆœ์„œ

๋‘ ์Šคํฌ๋ฆฝํŠธ ๋ชจ๋‘ ๋™์ผํ•œ ์ˆœ์„œ๋กœ parksy.kr์„ ์ฐพ์Œ:

1. $PARKSY_KR_PATH ํ™˜๊ฒฝ๋ณ€์ˆ˜

2. ํ˜•์ œ ๋””๋ ‰ํ† ๋ฆฌ ../parksy.kr (parksy-audio ๊ธฐ์ค€)

3. ~/parksy.kr (Termux)

4. /d/PARKSY/parksy.kr (PC)


๊ธฐ์กด ์‹œ์Šคํ…œ ์—ฐ๊ฒฐ

youtube-studio.js (์—…๋กœ๋“œ)