feat: v2 파이프라인 — 매일 2곡 다양한 장르 BGM 자동 생성/업로드

- daily_precache.py: Claude Code CLI 프리캐시 (날짜/계절/기념일 테마)
- daily_scheduler.py: ACE-Step 음악 → FLUX 이미지 → 영상 렌더 → 큐
- upload_scheduled.py: auto_shorts 동일 큐 방식 업로드
- PRECACHE_GUIDE_MUSIC.md: 19개 장르, 감성 제목, 재생목록 자유 생성
- generate_image.py: --lowvram 제거, GPU VRAM 확인 추가
- config.py: @animily-music 토큰 경로 변경

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
javamon
2026-05-25 19:24:50 +09:00
parent 37d13be48d
commit c3f8d6b288
8 changed files with 1688 additions and 22 deletions

144
docs/PIPELINE_V2.md Normal file
View File

@@ -0,0 +1,144 @@
# Animily Music v2 파이프라인
> 매일 2곡 다양한 장르 BGM 자동 생성 → @animily-music 유튜브 업로드
> 작성: 2026-05-25
---
## 크론 스케줄
| 시간 | 스크립트 | 설명 |
|------|---------|------|
| **00:30** | `daily_scheduler.py` | 프리캐시 → 음악 생성 → 이미지 생성 → 영상 렌더 → 큐 저장 |
| **매시간** | `upload_scheduled.py` | upload_queue.json에서 현재 시간 건 업로드 (07:00, 15:00) |
---
## 파이프라인 흐름
```
1. Claude Code CLI → precache/{날짜}.json (2곡 기획)
- 날짜/계절/기념일/요일 기반 장르+테마 결정
- PRECACHE_GUIDE_MUSIC.md 참조
2. ACE-Step (localhost:8001) → WAV 음악 생성
- 3~5분, batch_size=1, thinking=True
- 완료 후 ACE-Step 프로세스 kill (GPU 해제)
3. FLUX via ComfyUI (localhost:8189) → PNG 이미지 생성
- 1344x768 (16:9), 신카이 마코토 스타일
- TTS systemctl stop+disable 후 시작
- 완료 후 ComfyUI kill
4. ffmpeg → MP4 영상 렌더링
- 이미지 + Ken Burns + 워터마크(ANIMILY) + 음악
5. upload_queue.json → 큐 저장
- track_001: upload_hour=7
- track_002: upload_hour=15
6. GPU Cleanup
- ACE-Step/ComfyUI/TTS 전부 kill
- drop_caches, TTS service enable+start
- auto_shorts 03:00 전 완료 보장
```
---
## 파일 구조
```
/home/javamon/project/animily_music/
├── daily_precache.py # Claude Code CLI 프리캐시 생성
├── daily_scheduler.py # 메인 오케스트레이터
├── upload_scheduled.py # 큐 기반 업로드 (매시간 크론)
├── PRECACHE_GUIDE_MUSIC.md # Claude Code CLI 참조 가이드
├── config.py # 설정
├── generate_music.py # ACE-Step API (레거시, v1용)
├── generate_image.py # FLUX ComfyUI (레거시, v1용)
├── render_video.py # ffmpeg 렌더 (레거시, v1용)
├── scheduler.py # v1 스케줄러 (레거시)
├── upload_youtube.py # v1 업로드 (레거시)
├── token_animily_music.pickle # @animily-music YouTube OAuth 토큰
├── precache/ # 프리캐시 JSON
├── upload_queue.json # 업로드 큐
├── outputs/ # 임시 생성물
├── logs/ # 로그
└── prompts/ # 프롬프트 (레거시)
```
---
## YouTube 채널
| 항목 | 값 |
|------|-----|
| 채널명 | 애니밀리 뮤직 Animily Music |
| URL | https://www.youtube.com/@animily-music |
| ID | UCtT5K3-D9gAid7lT7XmrfvA |
| 토큰 | token_animily_music.pickle |
---
## 재생목록 (자동 생성)
신나는 음악, 감성 음악, 잔잔한 음악, 집중 음악, 수면 음악, 카페 음악, 운동 음악, 드라이브 음악
---
## 장르 (19개)
로파이, 재즈, 클래식, EDM, 앰비언트, 어쿠스틱, 팝, 록, R&B, 펑크, 보사노바, 레게, 시네마틱, 블루스, 포크, 컨트리, 신스웨이브, 디스코, 가스펠
---
## GPU 리소스 관리
- ACE-Step: ~11GB (음악 생성 중만)
- FLUX: ~33GB (이미지 생성 중만)
- **동시 사용 금지** — 순차 실행 (ACE-Step → kill → FLUX → kill)
- TTS: `sudo systemctl stop/disable qwen-tts.service` (FLUX 전)
- 완료 후: `sudo systemctl enable/start qwen-tts.service`
---
## 출처 표기 정책
사용자가 BGM 사용 시 설명란에 출처 필수:
```
🎵 Music by 애니밀리 뮤직 (Animily Music)
🔗 https://www.youtube.com/@animily-music
```
---
## ACE-Step API
| 항목 | 값 |
|------|-----|
| URL | http://localhost:8001 |
| 시작 | `cd /home/javamon/ACE-Step-1.5 && source venv/bin/activate && python -m uvicorn acestep.api_server:app --host 0.0.0.0 --port 8001 --workers 1` |
| Kill | `fuser -k 8001/tcp && pkill -9 -f acestep.api_server` |
| 제출 | POST /release_task |
| 폴링 | POST /query_result |
| 다운로드 | GET /v1/audio?path=... |
| 헬스 | GET /health |
---
## ComfyUI GPU 안정성 (2026-05-25 패치)
### 근본 원인
1. TTS가 systemd Restart=always 서비스 → kill해도 10초 후 재시작
2. MemAvailable ≠ GPU VRAM → nvidia-smi로 확인 필요
3. 스케줄러 중복 실행 → GPU 프로세스 충돌
### 해결
- TTS: `systemctl stop + disable` (Restart=always 우회)
- GPU VRAM: `nvidia-smi --query-compute-apps` 로 프로세스 확인
- 메모리 해제: `drop_caches` + 180초 대기 + 40GB 미만 시 포기
- ComfyUI 시작 후 OOM 크래시 감지 (pgrep 생존 확인)
---
*마지막 업데이트: 2026-05-25*