초기 프로젝트 구성: 반려동물 음악 롱폼 자동 생성 파이프라인

- ACE-Step 1.5 음악 생성 (과학적 근거 기반)
- FLUX 이미지 생성 (신카이 마코토 스타일)
- ffmpeg 영상 렌더링 (워터마크 포함)
- YouTube Data API 롱폼 업로드
- 프롬프트 및 문서 포함
This commit is contained in:
javamon
2026-04-21 15:41:20 +09:00
commit 37d13be48d
13 changed files with 1777 additions and 0 deletions

230
docs/PET_MUSIC_SCIENCE.md Executable file
View File

@@ -0,0 +1,230 @@
# 반려동물 음악 생성 가이드 (ACE-Step 1.5)
> AI 서버의 ACE-Step 1.5를 활용한 과학 기반 반려동물 음악 생성
---
## 개요
| 항목 | 값 |
|------|-----|
| AI 모델 | ACE-Step 1.5 |
| 서버 | 192.168.0.46 |
| 경로 | `/home/javamon/ACE-Step-1.5/` |
| API 포트 | 8001 |
| 체크포인트 | acestep-v15-turbo, acestep-5Hz-lm-1.7B, acestep-5Hz-lm-4B |
---
## 과학적 근거
### 주요 연구
| 연구 | 저자 | 연도 | 핵심 발견 |
|------|------|------|----------|
| Influence of Auditory Stimulation on Dogs | Wells, Graham, Hepper (Queen's Univ Belfast) | 2002 | 클래식 → 수면 증가/짖기 감소, 헤비메탈 → 짖기/불안 증가 |
| Behavioral Effects of Auditory Stimulation | Kogan, Schoenfeld-Tacher, Simon (Colorado State) | 2012 | 클래식 → 수면 시간 증가, 4개월간 45분 세션 관찰 |
| Effect of Different Genres on Stress Levels | Bowman, Dowell, Evans + Scottish SPCA (Glasgow) | 2017 | **레게 + 소프트 록**에서 HRV 최고 (스트레스 최소) |
| Effects of Music Pitch and Tempo | Amaya, Satomura et al. | 2020 | 느린 템포 → 최대 이완 / 저음 피치 → 경계심 유발 |
| Effect of Music on Stress during Vet Visit | King, Flint, Hunt, Werzowa, Logan | 2022 | 품종 크기별 BPM 맞춤, 솔로 하프 효과 확인 |
| Through a Dog's Ear | Leeds, Spector, Wagner | 2008 | 50-60 BPM 솔로 피아노에서 70%+ 진정 반응 |
| Cats Prefer Species-Appropriate Music | Snowdon, Teie (Univ of Wisconsin) | 2015 | 고양이는 퍼링(25-50Hz) + 고음 성대(1000Hz+) 주파수에 반응 |
### 강아지 - 긍정 반응 유발 요소
| 파라미터 | 최적값 | 근거 |
|---------|--------|------|
| 템포 | **50-80 BPM** | Through a Dog's Ear: 50-60 BPM에서 70%+ 진정 |
| 장르 | 레게, 소프트 록, 클래식 | Glasgow 2017: HRV 측정 |
| 악기 | 솔로 피아노, 하프, 어쿠스틱 기타 | 단순 편성일수록 효과적 |
| 다이나믹 | pp~mp (매우 좁은 범위) | King 2022 |
| 주파수 | 200Hz - 4kHz 중심 | 중음역 지배적 |
| 리듬 | 일정하고 예측 가능 | 싱코페이션 없음 |
| 화성 | I-IV-V, 협화음만 | 단순 진행 |
### 강아지 - 품종 크기별 BPM (King 2022)
| 크기 | 안정시 심박수 | 권장 BPM |
|------|-------------|---------|
| 대형견 | 95 ± 20 | 75-115 |
| 중형견 | 100 ± 20 | 80-120 |
| 소형견 | 120 ± 20 | 100-140 |
### 고양이 - 긍정 반응 유발 요소
| 파라미터 | 최적값 | 근거 |
|---------|--------|------|
| 퍼링 주파수 | 25-50 Hz 드론 | Snowdon & Teie 2015 |
| 성대 모방 | 1000-1600 Hz 슬라이딩 | 고양이 울음소리 주파수 대역 |
| 템포 | 느림 (50-60 BPM) 또는 퍼링 리듬 | 호흡/심박 동조 |
| 악기 | 첼로 하모닉스, 바이올린 고음부 | 고양이 성대 주파수와 유사 |
| 기법 | 포르타멘토, 글리산도 | 고양이 발성 모방 |
### 반드시 피해야 할 요소
| 요소 | 이유 |
|------|------|
| 헤비메탈/하드 록 | 짖기 증가, 몸 떨림 (Wells 2002, Kogan 2012) |
| 빠른 템포 (>120 BPM) | 각성도 증가 |
| 급격한 볼륨 변화 | 놀람 반응 유발 |
| 극저음 피치 | 공격 신호로 인식 (Morton 규칙) |
| 높은 피치 날카로운 소리 | 짖기/공포 반응 |
| 복잡한 편성 | 진정 효과 감소 |
| 타악기 (드럼, 심벌) | 예측 불가 충격음 |
---
## ACE-Step 실행 방법
### 1. API 서버 시작
```bash
ssh javamon@192.168.0.46
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
```
### 2. 음악 생성 요청
```bash
curl -X POST http://192.168.0.46:8001/release_task \
-H "Content-Type: application/json" \
-d @request.json
```
### 3. 결과 조회
```bash
curl -X POST http://192.168.0.46:8001/query_result \
-H "Content-Type: application/json" \
-d '{"task_id": "<반환된 task_id>"}'
```
### 4. 오디오 다운로드
```bash
curl -o output.wav "http://192.168.0.46:8001/v1/audio?path=<파일경로>"
```
---
## 프롬프트 (강아지용)
### A. 솔로 피아노 (최대 진정)
```json
{
"think": true,
"caption": "Extremely gentle solo piano piece. Warm, soft touch with narrow dynamic range (pp to mp). Simple stepwise melody with small intervals, repetitive soothing phrases. Consonant harmony only, simple I-IV-V progression. Mid-range frequencies dominant (200Hz-4kHz). No bass rumble, no high-frequency shimmer. Gradual fade-in, meditative and peaceful. Designed for canine relaxation based on psychoacoustic research.",
"lyrics": "[Instrumental]",
"bpm": 58,
"duration": 180,
"keyscale": "C major",
"language": "instrumental",
"timesignature": "4"
}
```
### B. 소프트 레게 (스트레스 감소)
```json
{
"think": true,
"caption": "Gentle soft reggae instrumental with acoustic guitar offbeat skank and warm piano chords. Light bass in 100-250Hz range, no drums or percussion. Simple repetitive melody, tropical and mellow. Very narrow dynamic range, smooth and flowing with no sudden changes. Mid-range focused, relaxed and soothing atmosphere.",
"lyrics": "[Instrumental]",
"bpm": 68,
"duration": 180,
"keyscale": "G major",
"language": "instrumental",
"timesignature": "4"
}
```
### C. 하프 클래식 (수의사 방문 전)
```json
{
"think": true,
"caption": "Solo harp playing simplified classical arrangements. Gentle arpeggios with warm resonance, extremely soft dynamics. Predictable harmonic rhythm, no tempo changes. Narrow frequency range focused on mid-register. Calming, ethereal, spa-like atmosphere. Slow and deliberate with natural ring-out between phrases.",
"lyrics": "[Instrumental]",
"bpm": 54,
"duration": 180,
"keyscale": "F major",
"language": "instrumental",
"timesignature": "4"
}
```
---
## 프롬프트 (고양이용)
### A. 퍼링 기반 앰비언트
```json
{
"think": true,
"caption": "Ultra-soft ambient piece with cello harmonics and gentle violin in higher register (1000-1600Hz range). Purring-like low drone undertone. Sliding portamento notes mimicking cat vocalizations. Extremely quiet, meditative, no rhythm section. Slow glissando strings, warm ethereal pad. No percussion, no sudden dynamic changes. Based on feline acoustic frequency preferences.",
"lyrics": "[Instrumental]",
"bpm": 60,
"duration": 180,
"keyscale": "A major",
"language": "instrumental",
"timesignature": "4"
}
```
### B. 고양이 자장가 (분리불안용)
```json
{
"think": true,
"caption": "Delicate lullaby for cats with soft violin playing in the 1000-1500Hz range, mimicking feline vocal frequency. Gentle sustained notes with natural vibrato and portamento slides. Background warm pad with subtle purring rhythm (25-30Hz pulse). Extremely minimal, quiet, and predictable. No low bass, no percussion, no sharp attacks. Soothing and hypnotic repetition.",
"lyrics": "[Instrumental]",
"bpm": 55,
"duration": 180,
"keyscale": "D major",
"language": "instrumental",
"timesignature": "4"
}
```
---
## 활용 시나리오
| 상황 | 추천 프롬프트 | 시간 |
|------|-------------|------|
| 강아지 수면/휴식 | 솔로 피아노 (A) | 3-5분 반복 |
| 강아지 분리불안 | 소프트 레게 (B) | 30분+ 연속 |
| 수의사 방문 전 | 하프 클래식 (C) | 이동 중 재생 |
| 고양이 휴식 | 퍼링 앰비언트 (A) | 3-5분 반복 |
| 고양이 분리불안 | 고양이 자장가 (B) | 30분+ 연속 |
| 유튜브 콘텐츠 | 강아지+고양이 혼합 | 1시간 영상용 |
---
## 유튜브 콘텐츠 연계 (향후)
- 애니밀리 채널에 "반려동물 음악" 카테고리 추가 가능
- 1시간 루프 영상 (수면음악, ASMR 류)
- 과학적 근거 자막 오버레이로 차별화
- ACE-Step으로 매일 다른 변주 자동 생성
---
## 참고문헌
1. Wells DL, Graham L, Hepper PG (2002). The influence of auditory stimulation on the behaviour of dogs housed in a rescue shelter. *Animal Welfare*, 11, 385-393.
2. Kogan LR, Schoenfeld-Tacher R, Simon AA (2012). Behavioral effects of auditory stimulation on kenneled dogs. *Journal of Veterinary Behavior*, 7, 268-275.
3. Bowman A, Dowell FJ, Evans NP, Scottish SPCA (2017). The effect of different genres of music on the stress levels of kennelled dogs. *Physiology & Behavior*, 171, 207-215.
4. Amaya V, Satomura H et al. (2020). Effects of music pitch and tempo on the behaviour of kennelled dogs. *Animals*, 11(1), 10.
5. King C, Flint H, Hunt ABG, Werzowa S, Logan DW (2022). Effect of music on stress parameters in dogs during a mock veterinary visit. *Frontiers in Veterinary Science*.
6. Leeds J, Spector L, Wagner S (2008). *Through a Dog's Ear: Using Sound to Improve the Health & Behavior of Your Canine Companion*.
7. Snowdon CT, Teie D (2015). Affective responses in tamarins elicited by species-specific music. *Biology Letters*, 6(1), 30-32.
8. Snowdon CT, Teie D, Savage M (2015). Cats prefer species-appropriate music. *Applied Animal Behaviour Science*, 166, 106-111.
---
*작성: 2026-04-21*

277
docs/PROJECT_PLAN.md Executable file
View File

@@ -0,0 +1,277 @@
# Animily Music 프로젝트 계획
> 반려동물 음악 유튜브 롱폼 자동 생성 파이프라인
---
## 개요
| 항목 | 값 |
|------|-----|
| 서버 | 192.168.0.46 (AI 서버) |
| 프로젝트 경로 | `/home/javamon/project/animily_music/` |
| 음악 생성 | ACE-Step 1.5 (localhost:8001) |
| 이미지 생성 | FLUX via ComfyUI (localhost:8188) |
| 영상 합성 | ffmpeg |
| 업로드 | YouTube Data API (롱폼) |
| 크론탭 | 매주 토요일 02:00 (주석 처리 상태) |
| 기존 코드 | 절대 수정 금지 (완전 독립 프로젝트) |
---
## 음악 생성 전략
### ACE-Step 제한
- 1회 최대 생성: **10분 (600초)**
- 세그먼트 방식으로 긴 곡 구성
### 길이별 구성
| 영상 길이 | 음악 생성 | 방식 |
|----------|----------|------|
| **2시간 (기본)** | 10분 × 12세그먼트 = ~119분 | 크로스페이드 이어붙이기 |
| 6시간 | 2시간 음악 × 3회 반복 | ffmpeg loop |
| 12시간 | 2시간 음악 × 6회 반복 | ffmpeg loop |
### 세그먼트 이어붙이기 규칙
- 12개 세그먼트 각각 약 10분 (595초) 생성
- 세그먼트 간 5초 크로스페이드 → 약 119분 완성
- 동일 key/BPM 유지, caption만 미세 변주 (단조로움 방지)
- 마지막 세그먼트는 자연스러운 페이드아웃
---
## 영상 구성
### 화면
| 요소 | 위치 | 상세 |
|------|------|------|
| 배경 이미지 | 전체 화면 | FLUX 생성 (1920×1080, 16:9) |
| Ken Burns 효과 | 전체 | 미세한 줌인/패닝 (정지 느낌 방지) |
| **워터마크** | **우측 상단** | 영상 처음부터 끝까지 상시 표시 |
### 워터마크 상세
| 항목 | 값 |
|------|-----|
| 텍스트 | **ANIMILY** |
| 위치 | 우측 상단 (x=w-tw-80, y=40) |
| 폰트 | ONE Mobile OTF Bold (`/usr/share/fonts/truetype/ONE_Mobile_Bold.otf`) |
| 폰트 크기 | 36 (롱폼 16:9 기준) |
| 색상 | white @ 40% 투명도 |
| 그림자 | black @ 30%, offset (1,1) |
| 표시 시간 | **영상 전체 (처음부터 끝까지 상시)** |
#### ffmpeg 워터마크 필터
```
drawtext=text='ANIMILY':fontfile=/usr/share/fonts/truetype/ONE_Mobile_Bold.otf:fontsize=36:fontcolor=white@0.4:x=w-tw-80:y=40:shadowcolor=black@0.3:shadowx=1:shadowy=1
```
> 참고: 기존 쇼츠(1080x1920 세로)는 fontsize=30, x=w-tw-25, y=25
> 롱폼(1920x1080 가로)은 비율에 맞게 조정
### 이미지 스타일
- **화풍**: 신카이 마코토 스타일
- **주제**: 반려동물 + 자연 풍경 (평화로운 분위기)
- **해상도**: 1920×1080 (16:9 가로)
- **영상당 1장** 생성 (썸네일 겸용)
### FLUX 프롬프트 예시
```
makoto shinkai style, dreamy golden hour sky with layered clouds,
a peaceful meadow with a sleeping puppy curled up in soft grass,
warm sunlight filtering through trees, detailed sky gradients,
soft bokeh, cinematic wide shot composition, 8k quality, no text, no watermark
```
---
## 유튜브 업로드 설정
### 메타데이터
| 항목 | 값 |
|------|-----|
| 카테고리 | 음악 (10) |
| 공개 설정 | 즉시 공개 (public) |
| 재생목록 | **뮤직큐우** (`PLr8dPYZT-hCUjL-OgPxJdF81Dvn_g8Vbg`) |
### 제목 형식
```
🐕 강아지가 좋아하는 음악 2시간 | 수면음악, 분리불안 완화 [과학적 검증]
🐱 고양이가 편안해지는 음악 6시간 | 퍼링 주파수 기반 [수면, 휴식]
🐾 반려동물 힐링 음악 12시간 | 솔로 피아노, 스트레스 해소
```
### 설명 (description)
```
{title}
🎵 저작권 프리 음악 (Copyright Free)
본 음악은 AI로 생성된 저작권 프리 음악입니다.
개인/상업적 용도 모두 자유롭게 사용하실 수 있습니다.
출처 표기 없이 자유롭게 사용 가능합니다.
🎵 Copyright Free Music
This music is AI-generated and copyright-free.
Free to use for any personal or commercial purpose.
No attribution required.
━━━━━━━━━━━━━━━━━━━━━━━━
🔬 과학적 근거
• University of Glasgow + Scottish SPCA (2017): 레게/소프트록에서 개 스트레스 최소
• Through a Dog's Ear (2008): 50-60 BPM 솔로 피아노에서 70%+ 진정 반응
• Snowdon & Teie (2015): 고양이는 퍼링 주파수(25-50Hz)에 긍정 반응
━━━━━━━━━━━━━━━━━━━━━━━━
🐾 반려동물 행동교정 플랫폼 애니밀리
📲 앱 다운로드: 앱스토어/구글플레이에서 '애니밀리' 검색
🌐 https://conimals.co.kr/
🤖 AI 생성 음악 (ACE-Step 1.5)
#반려동물음악 #강아지수면음악 #고양이음악 #펫힐링 #저작권프리
#dogmusic #catmusic #petrelaxation #copyrightfree #royaltyfree
```
### 고정 댓글
```
🎵 저작권 프리 음악입니다!
개인/상업적 용도 모두 자유롭게 사용하세요.
출처 표기 불필요, 다운로드 자유 ✅
🎵 This is copyright-free music!
Free for personal and commercial use.
No attribution needed ✅
```
---
## 프로젝트 구조
```
/home/javamon/project/animily_music/
├── config.py # 설정 (API URL, 경로, 채널 정보)
├── generate_music.py # ACE-Step API → 12세그먼트 생성 + 크로스페이드
├── generate_image.py # FLUX (ComfyUI API) → 신카이 마코토 이미지
├── render_video.py # 이미지 + 음악 + 워터마크 → ffmpeg 영상
├── upload_youtube.py # YouTube Data API 롱폼 업로드 + 고정댓글
├── scheduler.py # 메인 오케스트레이터
├── prompts/
│ ├── dog_music.json # 강아지 음악 프롬프트 (과학 기반)
│ ├── cat_music.json # 고양이 음악 프롬프트 (퍼링 기반)
│ └── image_prompts.json # FLUX 이미지 프롬프트 (신카이 스타일)
├── outputs/ # 임시 생성물 (영상 완성 후 정리)
├── logs/
├── token_animily.pickle # YouTube OAuth token
├── requirements.txt
└── venv/
```
---
## 모듈별 역할
### generate_music.py
1. 프롬프트 로드 (dog/cat 랜덤 or 스케줄)
2. ACE-Step API에 10분 세그먼트 12개 순차 요청
3. 각 세그먼트 동일 key/BPM, caption만 변주
4. pydub로 5초 크로스페이드 이어붙이기
5. 최종 ~119분 WAV 출력
### generate_image.py
1. FLUX 프롬프트 로드 (신카이 마코토 + 반려동물)
2. ComfyUI API (localhost:8188) 호출
3. 1920×1080 이미지 1장 생성
4. 썸네일용 리사이즈 (1280×720) 별도 저장
### render_video.py
1. ffmpeg: 이미지 → Ken Burns 효과 (미세 줌/패닝)
2. 워터마크 "ANIMILY" 우측 상단 오버레이
3. 오디오 합성
4. 6시간/12시간은 2시간 영상을 ffmpeg concat으로 반복
5. 출력: MP4 (H.264 + AAC)
### upload_youtube.py
1. YouTube Data API v3 (OAuth2)
2. 영상 업로드 (public, 카테고리: 음악)
3. 재생목록 추가/생성
4. 고정 댓글 작성 (저작권 프리 안내)
### scheduler.py
1. 콘텐츠 종류 결정 (강아지/고양이/혼합, 길이)
2. generate_music → generate_image → render_video → upload
3. 완료 후 outputs/ 정리
4. 로그 기록
---
## 크론탭
```bash
# 반려동물 음악 롱폼 (매주 토요일 02:00) - 비활성
# 0 2 * * 6 cd /home/javamon/project/animily_music && /home/javamon/project/animily_music/venv/bin/python scheduler.py >> /home/javamon/project/animily_music/logs/cron.log 2>&1
```
---
## GPU 리소스 충돌 방지
- 기존 auto_shorts 스케줄: 01:01 (프리캐시) → 03:00 (영상 생성)
- animily_music: **토요일 02:00** → auto_shorts와 시간 겹침 없음 (토요일만)
- ACE-Step과 FLUX/ComfyUI는 순차 실행 (동시 사용 시 OOM)
- 순서: ACE-Step 음악 생성 → ACE-Step 종료 → ComfyUI FLUX 이미지 → 종료 → ffmpeg 렌더
---
## 콘텐츠 스케줄 (주 1회)
| 주차 | 대상 | 길이 | 비고 |
|------|------|------|------|
| 1주 | 강아지 수면음악 | 2시간 | 솔로 피아노 |
| 2주 | 고양이 릴렉스 | 2시간 | 퍼링 앰비언트 |
| 3주 | 강아지 분리불안 | 6시간 | 소프트 레게 |
| 4주 | 반려동물 종합 | 12시간 | 하프 + 피아노 |
→ 4주 사이클 반복, 프롬프트 변주로 매번 다른 곡
---
## 의존성 (requirements.txt)
```
pydub
google-auth
google-auth-oauthlib
google-api-python-client
requests
Pillow
```
---
## 참고
- 과학적 근거 상세: [PET_MUSIC_GENERATION.md](PET_MUSIC_GENERATION.md)
- 기존 쇼츠 파이프라인: `/home/javamon/project/auto_shorts/` (수정 금지)
- ACE-Step 문서: `/home/javamon/ACE-Step-1.5/README.md`
---
*작성: 2026-04-21*