Sound & Emotion Architecture MCP Server โ ์ต์ข ๋จ์ผ ์ฐธ์กฐ ๋ฌธ์
v0.1 (5/5 ํต๊ณผ) โ ฮฆ ๋ถํด 8 tool, Pydantic ๊ฐ์ , REAPER CLI
v0.2 (8/8 ํต๊ณผ) โ 6๊ถ 29 ํธ๋ฆฌ, ๋ฌด์/์์ฑ, ์ผํ์ , ฮฆโ
์ ์ค (11 tool)
v0.3 (14/14 ํต๊ณผ) โ ๊ฐญ 4๊ฐ ๋ดํฉ, parksy-audio ๋ฐฑ์๋ ์ง๊ฒฐ (14 tool)
v0.3-perfect (12/12) โ W ํ์ต, 23ํธ๋ฆฌ ๊นจ์, ๊ฐ๊ด/์ฃผ๊ด release ๋ถ๋ฆฌ (17 tool)
โโโโโโโโโโโโโโโโโโโโโ
v1.0 final โ ๋ณด๊ฐ๋ณธ 4๊ฑด ์ฑํ + 1๊ฑด ํ๊ธฐ + 2๊ฑด ๊ฐํ. ์ ์ ์์ฒด ๋งค๊น ํ๊ธฐ.
์ด์ ๋ฐฑ์(v0.3)์ "120/100 ๋๋ ์ ์"๋ ์ ํ ๋ง์ผํ ์ด์์์ ๋ช ์ ์ธ์ ํ๋ค.
v1.0 final์ ์์ฒด ์ฑ์ ์ ํ์ง ์๋๋ค. ์ ์ ์ฑ์ ์ ์ธ๋ถ์ ์์ํ๋ค:
| ํ๊ฐ์ | ํ๊ฐ ์์ | ํ๊ฐ ๊ธฐ์ค | ||
| **๋ฐ์จ (์ฃผ๊ด)** | v0.3.1 release ํ | ์์ ์ ๋ง์กฑ๋, "๋ค์๋งํ๊ฐ" | ||
|---|---|---|---|---|
| **Claude Code ๋ค๋ฅธ ์ธ์คํด์ค / Gemini / ChatGPT** | v0.3.0 release ํ | ๊ฐ๊ด ๊ฒ์ดํธ 8๊ฐ ํต๊ณผ ์ฌ๋ถ | ||
| **score_engine.score_file()** | ๋งค ํธ๋๋ง๋ค | LUFS/LRA/TP/Freq/Dynamic 100์ |
๋ณธ ๋ฌธ์๋ ํ์ ์๋๊น์ง๋ง ๋ช ์ํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ ์ ์๋ ์ธ๋ถ ์ฑ์ ์ ๋ฐ๋๋ค.
| ๋ณด๊ฐ๋ณธ ํญ๋ชฉ | v1.0 ๊ฒฐ์ | |
| โ v0.3.0(๊ฐ๊ด) / v0.3.1(์ฃผ๊ด) Release ๋ถ๋ฆฌ | **์ฑํ** (๊ฒ์ ์ฒด์ธ์ ) | |
|---|---|---|
| โ 23 ํธ๋ฆฌ ํ์ฑํ (5โ24/29) | **์ฑํ** + ์์ ์ ๊ฒ์ฆ ๊ฒ์ดํธ ์ถ๊ฐ | |
| โ R1 ๋ ธ๋ ๊ต๋ + 28์ผ ๋ฒํผ | **์ฑํ** (๋ฐ์จ ์ด์ ํ์ค ์ ํฉ) | |
| โ W JSON ์ธ๋ถ ๋ถ๋ฆฌ + perceptron ํ์ต | **์ฑํ** (๋ฐ์จ ์์ฐ ์งํ ๋ฉ์ปค๋์ฆ) | |
| โ ์๊ฐ ๋ชจ์ ์ ํฉ (5.5h ๋ฐ์จ / 48h Claude) | **์ฑํ** | |
| โ ๏ธ G5 ๊ฐ๊ดํ (1์ด+RMS>0.001) | **๊ฐํ**: 5์ด+RMS>0.01+centroid>200Hz | |
| โ ๏ธ G7 ๊ฐ๊ดํ (mp4 โฅ100KB) | **๊ฐํ**: mp4 duration โฅ wav duration ยฑ 1์ด | |
| โ "108โ120์ ๋๋ฌ" ์ฃผ์ฅ | **ํ๊ธฐ** (์ธ๋ถ ์ฑ์ ์์) |
**parksy-audio ์์ฐ 100% wrap + ฮฆ ํฉ์ฑ์ฌ์ ๋ถํด + v0.3.0(๊ฐ๊ด ์๋) / v0.3.1(์ฃผ๊ด ๋ฐ์จ) ์ด์ค release.**
์ ๊ท ์ํฅ ์์ง 0์ค. ์ ๊ท ์ฝ๋ ~1,020์ค (v0.3 540 + ๋ณด๊ฐ 480). parksy-audio 13ํด/8 local-agent/DiffSinger v1/SoVITS v2ProPlus/voice_filter 1561์ ์ ๋ถ import.
ฮฆ_final: V_terminal ร M ร N ร Books ร Regions ร W โ โ(audio) ร โ(score)
ฮฆ_final = ฮ โ ฮฆโ' โ ฮฆโ' โ ฮฆโ'(T) โ ฮฆโ โ A(W*) โ ฮฆโ
โ
W* = load_W() (ํ์ต๋จ, ์ธ๋ถ JSON)
๊ธฐํธ:
V_terminal โ โยนยน โ ฮฆโ
์ถ๋ ฅ (vox + breath + rh fusion)
A: โยนยน โ Eโธ โ ์ด๋ํฐ (W* ํ์ต ๊ฐ๋ฅ ํ๋ ฌ)
W* = load_W() โ ~/.sea_mcp/W_matrix.json (perceptron lr=0.05)
ฮฆโ'(T) = ฮฆโ โ T โ feature + 23 ํธ๋ฆฌ ํ์ฑ (29 ์ค ํ๊ท 22~24)
ฮฆโ' = ฮฆโ โ M โ H โ narrative+midi + motif intervals + humanize/express
ฮฆโ' = ฮฆโ โ Q โ render+post + score_gate (๊ฐ๊ด)
ฮ = publish + visual โ Telegram audio+video + git commit + check_gate
| ํ์ | ์๋ฏธ | |
| Lรฉvi-Strauss | Plutchik 8์ถ = 4์ ๋๋ฆฝ + ๋ฌด์ ๋จ์ผ์งํฉ. **A(W*)๋ ํ์ต์ผ๋ก ์งํํ๋ ๊ตฌ์กฐ** | |
|---|---|---|
| Foucault | TPO ํ๊ฒฝ๊ถ๋ ฅ์ฅ + ํด๋์ ๊ถ๋ ฅ์ฅ + **๊ฐ๊ด/์ฃผ๊ด ๊ถ๋ ฅ์ฅ ๋ถ๋ฆฌ (v030/v031)** | |
| Nietzsche | ๊ฐ์ธ โ velocity + EWI ๋์ค๋์์ค + **humanize ยฑ5ms ์ง๋** | |
| Eco | MIDI ๋ค์คํด์ + ์ผ์์ ๋ ฅ + **23 ํธ๋ฆฌ ๊นจ์ = ๋ชจ๋ ๊ธฐํ ํ์ฑํ** |
| ์์ฐ | ์์น | sea_mcp ํ์ฉ | tool # | |||
| MCP 13ํด | `parksy-audio/mcp_voice/` | editable import | โ | |||
|---|---|---|---|---|---|---|
| singing_engines.registry | `mcp_voice/parksy_voice/singing_engines/` | ฮฆโ V_vox ๋ฐฑ์๋ | 11 | |||
| contracts.SingSpec/VoiceQC | `mcp_voice/parksy_voice/contracts.py` | ฮฆโ ๊ณ์ฝ | 11 | |||
| qc.measure_wav() | `mcp_voice/parksy_voice/qc.py` | ฮฆโ 1์ฐจ | 6 | |||
| score_engine.score_file() | `local-agent/score_engine.py` | ฮฆโ 100์ ๊ฒ์ดํธ | 13 | |||
| optimizer.run_v4() | `local-agent/optimizer.py` | broadcast ๋ง์คํฐ๋ง | 7 | |||
| humanize_preset.apply() | `local-agent/humanize_preset.py` | A/B grade ยฑ5ms | 5 | |||
| piano_expression.inject_7stage() | `local-agent/piano_expression.py` | C/D grade 7-Stage | 5 | |||
| midi_quality_gate.classify_midi() | `local-agent/midi_quality_gate.py` | A~F ๊ฒ์ดํธ | 5 | |||
| make_visual_video.render() | `local-agent/make_visual_video.py` | 1280ร720 mp4 | 14 | |||
| voice_filter.md (1561์) | `parksy-audio/voice_filter.md` | TTS ๋ผ์ฐํ | (ํ์ฅ ์ฌ๋กฏ) | |||
| parksy_ko_v1.onnx 334MB | `PARKSY_DS/export/` | DiffSinger ๋ชจ๋ธ | 11 | |||
| voice_models (SoVITS 70+) | `/mnt/e/parksy-data/voice_models/` (symlink) | ๊ฐ์ฐฝ fallback | 11 | |||
| nsf_hifigan_44.1k | `checkpoints/` (symlink) | DiffSinger vocoder | 11 | |||
| BBC SO + VSCO-2-CE + Pianoteq 9 + Ample Guitar + MT Power Drum | REAPER VSTi | ๋ผ์ฐํธ ๋งคํธ๋ฆญ์ค | 6 | |||
| Galaxy Tab S9 5G (EWI USB + ๋ง์ดํฌ) | ๋ฐ์จ ๋ณด์ | merge_terminal ์ ๋ ฅ | 11 | |||
| Tailscale ํ์๋ง | ๊ฐ๋ ์ค | FastMCP SSE :8011 | server | |||
| dtslib GitHub 28๋ ํฌ | gh:dtslib1979 | sea_archive | 8 | |||
| Telegram Bot (Parksy Air) | 8621929617 | publish | 8 | |||
| Lyria 3 (cm/jingle/shorts) | `parksy-audio/lyria3/` | motif fallback BGM | (ํ์ฅ) |
ํฉ๊ณ: parksy-audio 13 ์์ฐ + ๋ฐ์จ ์ธํ๋ผ 7 = 20๊ฐ ์์ฐ 100% ์ฌํ์ฉ.
| # | Tool | ฮฆ ๋จ๊ณ | ๋์ | ๋ฐฑ์๋ | ||||
| 1 | `encode_emotion` | ฮฆโ-a | v0.1 | self | ||||
|---|---|---|---|---|---|---|---|---|
| 2 | `apply_environment` | ฮฆโ-b | v0.1 | self | ||||
| 3 | `extract_features` | ฮฆโ | v0.1 patched | + 23ํธ๋ฆฌ ๊ฐ์ค | ||||
| 4 | `parse_narrative` | ฮฆโ-a | v0.1 | konlpy / fallback | ||||
| 5 | `generate_midi` | ฮฆโ-b | v0.1 patched | + motif + trance + humanize | ||||
| 6 | `render_audio` | ฮฆโ-a | v0.1 patched | REAPER ๋ผ์ฐํธ ๋งคํธ๋ฆญ์ค | ||||
| 7 | `post_process` | ฮฆโ-b | v0.1 patched | optimizer.run_v4 | ||||
| 8 | `publish_telegram` | ฮ | v0.1 patched | + sendVideo | ||||
| 9 | `compress_to_trance` | ฮฆโ ๋ณด์กฐ | v0.2 | self | ||||
| 10 | `select_motif` | ฮฆโ ๋ณด์กฐ | v0.2 | self | ||||
| 11 | `merge_terminal` | ฮฆโ | v0.2 patched | + DiffSinger preview | ||||
| 12 | `terminal_to_emotion` | A | v0.3 | **W* = load_W()** โ ํ์ต | ||||
| 13 | `score_gate` | ฮฆโ QC | v0.3 | local-agent.score_engine | ||||
| 14 | `visual_render` | ฮ ๋ณด์กฐ | v0.3 | local-agent.make_visual_video | ||||
| 15 | **`record_feedback`** | ฮด_W | **v1.0** | W ํ์ต (perceptron) | ||||
| 16 | **`check_gate`** | ฮด_release | **v1.0** | ๊ฐ๊ด 8 ๊ฒ์ดํธ ์๋ ์ธก์ | ||||
| 17 | **`activate_all_trees`** | ฮด_trees | **v1.0** | 7 ์นดํ ๊ณ ๋ฆฌ โ 22~24 ํธ๋ฆฌ |
v0.1 8๊ฐ + v0.2 3๊ฐ + v0.3 3๊ฐ + v1.0 3๊ฐ = 17 tool
๋ฐ์จ ๋ฉ๋ชจ๋ฆฌ ์ ํฉ: ์คํ๋ผ์ธ ๋ ๋ action 42230 = -91dB ๋ฌด์ (BBC SO ํ์ ).
| ์์/์์ง | ๋ผ์ฐํธ | ๋ช ๋ น | ๋ฌด์ ์ํ | |||
| **BBC Symphony Orchestra** | **Play+Record (action 1013)** | PowerShell ์๋ํ | โ ์์ | |||
|---|---|---|---|---|---|---|
| Spitfire LABS | Play+Record (action 1013) | ๋์ผ | โ | |||
| **VSCO-2-CE (SFZ)** | CLI `-renderproject` | recmode=5 | โ ์์ | |||
| Ample Guitar | CLI | recmode=5 | โ | |||
| Keyzone Piano | CLI | recmode=5 | โ | |||
| MT Power Drum | CLI | recmode=5 | โ | |||
| Pianoteq 9 | CLI | recmode=5 | โ | |||
| Lyria3 (์ด๋ฏธ wav) | ์ง์ path | render_audio ์ฐํ | โ | |||
| DiffSinger v1 ONNX | sing.py ์งํธ์ถ | parksy_voice.sing | โ |
BBC SO ๋ผ์ฐํธ: play_record โ manual_record_prompt
VSCO ๋ผ์ฐํธ: cli โ play_record โ manual_record_prompt
Ample/Piano: cli โ manual_record_prompt
DiffSinger: diffsinger_v1 โ sovits_v2pro โ rvc_parksy โ lyria3_bgm โ raw_silence
sea_mcp/
โโโ src/
โ โโโ server.py โ 17 tool ๋ฑ๋ก
โ โโโ lookup/
โ โ โโโ tree_lookup.py โ 29 ํธ๋ฆฌ
โ โโโ integrations/
โ โ โโโ parksy_audio.py โ ์ํฌํธ ๊ฒ์ดํธ์จ์ด
โ โโโ tools/
โ โโโ emotion.py (v0.1)
โ โโโ feature.py โ patched (+23ํธ๋ฆฌ)
โ โโโ narrative.py (v0.1)
โ โโโ midi.py โ patched (+motif+trance+humanize)
โ โโโ audio.py โ patched (+๋ผ์ฐํธ ๋งคํธ๋ฆญ์ค)
โ โโโ publish.py โ patched (+sendVideo)
โ โโโ trance.py (v0.2)
โ โโโ motif.py (v0.2)
โ โโโ perform.py โ patched (+DiffSinger preview)
โ โโโ adapter.py โ v0.3 (+ load_W ํธ์ถ)
โ โโโ score_gate.py (v0.3)
โ โโโ visual.py (v0.3)
โ โโโ adapter_calibration.py โ v1.0 ์ ๊ท (W ํ์ต)
โ โโโ trees_full_activation.py โ v1.0 ์ ๊ท (23ํธ๋ฆฌ)
โ โโโ release_gate.py โ v1.0 ์ ๊ท (๊ฐ๊ด ๊ฒ์ดํธ 8)
โโโ scripts/
โ โโโ reaper_play_record.ps1 โ BBC SO ์๋ํ
โโโ templates/
โ โโโ default.rpp / vsco_orchestra.rpp / vsco_solo.rpp
โ โโโ ample_guitar.rpp / pianoteq.rpp / mt_power_drum.rpp
โ โโโ tracks/ โ .RTrackTemplate 6์ข
โโโ tests/
โ โโโ test_pipeline.py (v0.1, 5/5)
โ โโโ test_v2.py (v0.2, 8/8)
โ โโโ test_v3.py (v0.3, 14/14 + 1 E2E)
โ โโโ test_v1_final.py โ v1.0 12/12 ๋ณด๊ฐ + ๊ฐํ G5/G7
โโโ pyproject.toml
โโโ README.md โ ๋ณธ ๋ฌธ์ link
์ด 39/39 + 1 E2E ํ ์คํธ (v0.1 5 + v0.2 8 + v0.3 14 + v1.0 12).
| # | ๊ฒ์ดํธ | ์ธก์ | ์๊ณ | |||
| G1 | unit_tests | `pytest -v` ์นด์ดํธ | โฅ 39 | |||
|---|---|---|---|---|---|---|
| G2 | e2e_zero_error | tool_call_errors | = 0 | |||
| G3 | bbcso_track | sox RMS | > 0.001 | |||
| G4 | vsco_track | sox RMS | > 0.001 | |||
| G5 (๊ฐํ) | diffsinger_audible | duration + RMS + spectral_centroid | โฅ5์ด + RMS>0.01 + centroid>200Hz | |||
| G6 | score_threshold | score_engine total | โฅ 80 | |||
| G7 (๊ฐํ) | visual_mp4 | duration_match | mp4_dur โฅ wav_dur ยฑ 1์ด | |||
| G8 | github_release | gh release view | exists |
8/8 ์๋ ํต๊ณผ ์: gh release create v0.3.0 ์๋ ๋ฐํ. ๋ฐ์จ ๋ช
์ OK ๋ถํ์.
| # | ๊ฒ์ดํธ | ์๋ฏธ | ||
| P1 | galaxy_tab_input | EWI+๊ฐ์ฐฝ+์ค๋ฅธ์ โ fusion[11] ์ ์ ์์ + ํฐ ์๋ฆผ | ||
|---|---|---|---|---|
| P2 | parksy_signature | ๋ฐ์จ ๊ฐ์ฐฝ+์์ฑ 1ํธ๋ OK | ||
| P3 | musical_validity | 23ํธ๋ฆฌ ๋์ ํ์ฑ์ด ์์ ์ ์ผ๋ก OK (๋ฐ์จ ์ฒญ์ทจ) |
๋ฐ์จ ๋ช
์ ๋ช
๋ น ์์๋ง ํ์ฑ: "v0.3.1 release ์์".
v0.3.0 (๊ฐ๊ด) โโโฌโโ release ์๋ ๋ฐํ
โ - ๋ฐ์จ ์๊ฐ 0h
โ - GitHub Release ์์ฑ
โ - ๋ฐฑ์ + ์ฝ๋ ์๋ ์ฒจ๋ถ
โ
โโโ v0.3.1 ์ง์
์กฐ๊ฑด ์ถฉ์กฑ
โ
โผ
v0.3.1 (์ฃผ๊ด) โโ ๋ฐ์จ ๋ช
์ ๋ช
๋ น ์ ์ง์
- P1/P2/P3 ๊ฒ์ดํธ
- ๋ฐ์จ ๊ฐ์ฐฝ ๋
น์
- ๋ฐ์จ OK ์ v0.3.1 release
| Day | ๋ ์ง | ํ์ | ์์ | ๋ฐ์จ ์๊ฐ | ||||
| 0 | 2026-05-07 (์) | ๋ฐ์จ | ๋ถํธ์คํธ๋ฉ (gh repo + .env + Claude Desktop) | **0.5h** | ||||
|---|---|---|---|---|---|---|---|---|
| 1 | 05-08 (๋ชฉ) | auto | adapter.py + adapter_calibration.py (W ํ์ต) | โ | ||||
| 2 | 05-09 (๊ธ) | auto | tree_lookup + feature patch + trees_full_activation | โ | ||||
| 3 | 05-10 (ํ ) | auto | motif + trance + midi patch | โ | ||||
| 4 | 05-11 (์ผ) | auto | server.py 17 tool ๋ฑ๋ก + ๋จ์ ํ ์คํธ 39/39 | โ | ||||
| 5 | 05-12 (์) | buffer | ๊ฒ์ฆ + ํด์ (R1 ๋๋น) | โ | ||||
| 6 | 05-13 (ํ) | auto | integrations/parksy_audio.py | โ | ||||
| 7 | 05-14 (์) | auto | score_gate.py + visual.py | โ | ||||
| 8 | 05-15 (๋ชฉ) | auto | perform.py DiffSinger preview | โ | ||||
| 9 | 05-16 (๊ธ) | auto | audio.py optimizer_v4 ๋ฐฑ์๋ | โ | ||||
| 10 | 05-17 (ํ ) | auto | release_gate.py (G1-G8) | โ | ||||
| 11 | 05-18 (์ผ) | buffer | ๊ฒ์ฆ + R1 ๋๋น | โ | ||||
| 12 | 05-19 (์) | ๋ฐ์จ | REAPER PowerShell ์๋ํ ๊ฒ์ฆ (BBC SO) | **1.0h** | ||||
| 13 | 05-20 (ํ) | auto | RPP 5์ข ์ ๋น (1/2) | โ | ||||
| 14 | 05-21 (์) | auto | RPP 5์ข ์ ๋น (2/2) | โ | ||||
| 15 | 05-22 (๋ชฉ) | auto | safe_replace + GUID ๊ฒ์ฆ (R4 ๋์) | โ | ||||
| 16 | 05-23 (๊ธ) | ๋ฐ์จ | RTrackTemplate 6์ข ์ ์ฅ (REAPER GUI) | **0.5h** | ||||
| 17 | 05-24 (ํ ) | ๋ฐ์จ | BBC SO 1ํธ๋ ํฐ ์์ ๊ฒ์ฆ | **0.5h** | ||||
| 18 | 05-25 (์ผ) | auto | VSCO 1ํธ๋ + DiffSinger preview ์๋ | โ | ||||
| 19 | 05-26 (์) | buffer | ์๋น + R1 ๋๋น | โ | ||||
| 20 | 05-27 (ํ) | auto | E2E ํตํฉ ํ ์คํธ + Telegram 50MB ๊ฒ์ฆ (R3) | โ | ||||
| 21 | 05-28 (์) | auto | ๊ฐ๊ด ๊ฒ์ดํธ G1-G8 ์ผ๊ด ์ธก์ | โ | ||||
| 22 | 05-29 (๋ชฉ) | auto | ๋๋ฝ ๋ณด๊ฐ + ์ฌ์คํ | โ | ||||
| 23 | 05-30 (๊ธ) | buffer | ๋ง์ง๋ง ๊ฒ์ฆ | โ | ||||
| 24 | 05-31 (ํ ) | auto | **v0.3.0 release ์๋ ๋ฐํ** โ | โ | ||||
| 25 | 06-01 (์ผ) | ๋ฐ์จ | Galaxy Tab EWI+๊ฐ์ฐฝ+์ค๋ฅธ์ ์ ๋ ฅ (P1) | **1.0h** | ||||
| 26 | 06-02 (์) | ๋ฐ์จ | Parksy Signature ๊ฐ์ฐฝ ๋ น์ (P2) | **1.0h** | ||||
| 27 | 06-03 (ํ) | buffer | ์ฃผ๊ด ๊ฒ์ฆ ์๋น | โ | ||||
| 28 | 06-04 (์) | ๋ฐ์จ | **v0.3.1 release ๋ฐ์จ OK ๊ฒ์ฆ** | **1.0h** |
ํฉ๊ณ: ๋ฐ์จ 7์ผ ร ํ๊ท 47๋ถ = 5.5h | Claude ์๋ 14์ผ ร ํ๊ท 4h = 48h | Buffer 7์ผ
| ID | ์ํ | ํ๋ฅ | ์ํฅ | ์ํ | ||||
| R0 | BBC SO PS ์๋ํ ์ขํ ์คํจ | ์ค | ๋ | CLI ๋ผ์ฐํธ fallback (VSCO ์ฐ์ ) + manual_record_prompt | ||||
|---|---|---|---|---|---|---|---|---|
| R1 | ๋ฐ์จ ๋ฌผ๋ฆฌ๋ ธ๋ ๊ต๋ ์ถฉ๋ | **๋** | ๋งค์ฐ ๋ | **28์ผ ๋ฒํผ + ๋ฐ์จ 5์ผ๋ง ์ง์ + ๋น๋๊ธฐ ํ** | ||||
| R2 | KoNLPy JDK ํ๊ฒฝ ์ถฉ๋ | ์ค | ์ค | Day 0 java -version ๊ฒ์ฆ + fallback ๊ฐ์ ์ต์ | ||||
| R3 | Telegram sendVideo 50MB | ๋ฎ | ์ค | 1280ร720 1๋ถ ~30MB ์์ + ffmpeg crf 28 ์์ถ | ||||
| R4 | RTrackTemplate GUID ์ถฉ๋ | ์ค | ์ค | Day 15 ์๋ GUID ์ถ์ถ + uuid4 ์ฌ์์ฑ | ||||
| R5 | DiffSinger v1 ์ถ๋ ฅ ๋ฌด์ฑ/์ก์ | ์ค | ์ค | sovits_v2pro fallback chain | ||||
| R6 | score_gate 70์ ๋ฏธ๋ฌ | ์ค | ์ค | ํธ์ถ์ max 3ํ ์ฌ์๋ + ์๊ณ 60 ์์ ํํฅ | ||||
| R7 | EWI USB ์ธ์ ์คํจ | ๋ฎ | ๋ | ํฐ ๋ง์ดํฌ + PC ํค๋ณด๋ fallback | ||||
| R8 | parksy-audio import ๊นจ์ง | ๋ฎ | ๋ | `setup_paths()` + `HAS_*` ํ๋๊ทธ graceful degrade | ||||
| R9 | Vast.ai ๋น์ฉ ํญ์ฃผ | 0 | โ | v1.0 ์ ๋ถ CPU only |
ENGINES_PRIORITY = [
{"id": "diffsinger_v1", "fallback": "sovits_v2pro"},
{"id": "sovits_v2pro", "fallback": "rvc_parksy"},
{"id": "rvc_parksy", "fallback": "lyria3_bgm"},
{"id": "lyria3_bgm", "fallback": "raw_silence_with_log"},
{"id": "raw_silence_with_log", "fallback": None},
]
REAPER_ROUTES_PRIORITY = {
"bbcso": ["play_record", "manual_record_prompt"],
"vsco_orch": ["cli", "play_record", "manual_record_prompt"],
"vsco_solo": ["cli", "play_record", "manual_record_prompt"],
"ample": ["cli", "manual_record_prompt"],
"piano": ["cli", "manual_record_prompt"],
"drums": ["cli", "manual_record_prompt"],
}
TG_BOT_TOKEN=8621929617:AAH-XpVJ4PKVJV8m9-qB2aLupMHO0nYfZLQ
TG_CHAT_ID=6858098283
REAPER_EXE=/mnt/c/Program Files/REAPER/reaper.exe
SEA_RPP_DIR=/home/dtsli/parksy-audio/templates
SEA_REPO=/home/dtsli/dtslib/sea_archive
PARKSY_AUDIO_ROOT=/home/dtsli/parksy-audio
PARKSY_DIFFSINGER_ONNX=/home/dtsli/parksy-audio/PARKSY_DS/export/parksy_ko_v1.onnx
PARKSY_VOICE_MODELS_DIR=/mnt/e/parksy-data/voice_models
SEA_SCORE_THRESHOLD=80
SEA_W_MATRIX_PATH=/home/dtsli/.sea_mcp/W_matrix.json
SEA_FEEDBACK_LOG=/home/dtsli/.sea_mcp/feedback_log.jsonl
dependencies = [
"mcp>=1.0", "fastmcp", "pydantic>=2.0",
"httpx", "konlpy", "mido", "numpy",
]
# parksy-audio editable: pip install -e ~/parksy-audio/mcp_voice
"sea": {
"command": "python",
"args": ["-m", "src.server"],
"cwd": "/home/dtsli/sea_mcp",
"env": {
"TG_BOT_TOKEN": "...",
"PARKSY_AUDIO_ROOT": "/home/dtsli/parksy-audio",
"...": "์ .env ์ ์ฒด"
}
}
| ํ์ผ | ์ญํ | ์ค์ | ๋์ | |||
| `src/lookup/tree_lookup.py` | 29 ํธ๋ฆฌ ๋ฃฉ์ | ~70 | v0.2 | |||
|---|---|---|---|---|---|---|
| `src/tools/trance.py` | ๋ฌด์/์์ฑ ์์ถ | ~80 | v0.2 | |||
| `src/tools/motif.py` | ์ผํ์ ๋ชจํฐํ | ~90 | v0.2 | |||
| `src/tools/perform.py` | ฮฆโ Parksy Orchestra | ~120 | v0.2 | |||
| `src/tools/adapter.py` | ฮฆโ โปยน ์ด๋ํฐ | ~80 | v0.3 | |||
| `src/tools/score_gate.py` | ฮฆโ QC | ~60 | v0.3 | |||
| `src/tools/visual.py` | ์์ ๋ ๋ | ~50 | v0.3 | |||
| `src/integrations/parksy_audio.py` | ์ํฌํธ ๊ฒ์ดํธ์จ์ด | ~30 | v0.3 | |||
| `scripts/reaper_play_record.ps1` | BBC SO ์๋ํ | ~70 | v0.3 | |||
| **`src/tools/adapter_calibration.py`** | **W ํ์ต** | **~120** | **v1.0** | |||
| **`src/tools/trees_full_activation.py`** | **23ํธ๋ฆฌ ๊นจ์** | **~150** | **v1.0** | |||
| **`src/tools/release_gate.py`** | **๊ฐ๊ด ๊ฒ์ดํธ G1-G8** | **~150** | **v1.0** |
| ํ์ผ | ๋ณ๊ฒฝ | |
| `src/server.py` | 17 tool ๋ฑ๋ก | |
|---|---|---|
| `src/tools/feature.py` | + tree_lookup + 23ํธ๋ฆฌ (`_auto_select_trees`โ`activate_all_trees`) | |
| `src/tools/midi.py` | + motif + trance LFO + humanize | |
| `src/tools/audio.py` | + ๋ผ์ฐํธ ๋งคํธ๋ฆญ์ค + optimizer_v4 | |
| `src/tools/publish.py` | + sendVideo + async httpx | |
| `src/tools/adapter.py` | + load_W() ํธ์ถ (v1.0 ์ถ๊ฐ) |
| ๋ฒ์ | ์ ๊ท | ํจ์น ์ถ๊ฐ | ๋์ | |||
| v0.1 | 597 | โ | 597 | |||
|---|---|---|---|---|---|---|
| v0.2 | 350 | 0 | 947 | |||
| v0.3 | 320 | 250 | 1,517 | |||
| **v1.0** | **420** | **30** | **~1,970** |
ํ ์คํธ ํฉ๊ณ: 39/39 + 1 E2E
| ๋ช ๋ น | ๋์ | ๋ฐ์จ ์๊ฐ | ||
| `"Day 0 ์์"` | ๋ ํฌ + editable + .env + Claude Desktop | 0.5h | ||
|---|---|---|---|---|
| `"Sprint 1 ์์"` | Day 1~5 ์๋ (Wํ์ต/23ํธ๋ฆฌ/๋ชจํฐํ/ํตํฉ) | 0h | ||
| `"Sprint 2 ์์"` | Day 6~11 ์๋ (๋ฐฑ์๋ wrap) | 0h | ||
| `"Sprint 3 ์์"` | Day 12~18 (๋ฐ์จ PC ๋จ๊ณ๋ง ๋ฉ์ถค) | 1.5h | ||
| `"Sprint 4 ์์"` | Day 19~24 ์๋ (E2E + ๊ฐ๊ด ๊ฒ์ดํธ) | 0h | ||
| `"v0.3.0 release"` | G1-G8 ์ผ๊ด โ 8/8 ํต๊ณผ ์ gh release | 0h | ||
| `"v0.3.1 ์์"` | Day 25~28 (๋ฐ์จ ๊ฐ์ฐฝ ๋ น์ ํฌํจ) | 3h | ||
| `"ํผ๋๋ฐฑ ์ ๋ ฅ"` | record_feedback โ W ๊ฐฑ์ | 1๋ถ/ํธ๋ | ||
| `"ํ์ฌ ์ํ"` | Sprint ์งํ๋ฅ + ๋ฏธ์๋ฃ ๊ฒ์ดํธ + ๋ค์ ์ก์ | 0h | ||
| `"๊ฐ์ N ํ์"` | ํน์ ๋ณด๊ฐ ๋ชจ๋๋ง ๋จ๋ ์์ฑ | 0h | ||
| `"BBC SO ๊ฒ์ฆ"` | reaper_play_record.ps1 โ ํฐ ์๋ฆผ | 0.5h |
1. W ํ๋ ฌ ํ์ต ๋ฐ์ดํฐ ๋์ ์๋ โ ๋ฐ์จ 50๊ฑด ํผ๋๋ฐฑ ์ ๋ ฅ ์๋๊ฐ v0.4 ์ง์ ๊ฒฐ์
2. 23 ํธ๋ฆฌ ๋์ ํ์ฑ์ ์์ ์ ์๋ฏธ โ 24๊ฐ ๋์ ํ์ฑ์ด ์ง์ง ์ข์ ์์ ์ธ์ง P3 ๊ฒ์ดํธ๋ก ๊ฒ์ฆ
3. G6 ์๊ณ 80์ ์ด "๋ค์๋งํ๊ฐ"์ ์ง์ง ๊ธฐ์ค์ธ์ง โ ๋ฐ์จ ์ฒญ์ทจ ๋์ ํ ๋์ ์๊ณ๋ก ๊ฐฑ์
4. score_engine 5์ถ์ด ๋ฐ์จ ์ฒญ๊ฐ ๋ชจ๋ธ๊ณผ ์ผ์นํ๋์ง โ LUFS/LRA/TP/Freq/Dynamic 5์ถ ์ธ ๋๋ฝ๋ ์ฐจ์ ๊ฐ๋ฅ์ฑ
5. lyria3 fallback ๋ฏธ๊ตฌํ โ motif ๋ฏธ์ ํ ์ BGM ํธ์ถ (TODO)
6. YouTube ์๋ ์ ๋ก๋ ๋ฏธ๊ตฌํ โ publish ํ์ฅ ์ฌ๋กฏ (TODO)
| ํญ๋ชฉ | v1.0 final | v0.4 ๋ชฉํ | ||
| W ํ์ต๋ฅ | ๊ณ ์ lr=0.05 | ์ ์์ (Adam-style) | ||
|---|---|---|---|---|
| ํธ๋ฆฌ ๊ฐ์ค์น | ๋๋ฉ์ธ ์ง์ | ๋ฐ์จ 100ํธ๋ ๋ฐ์ดํฐ ํ๊ท | ||
| ๊ฒ์ดํธ ์๊ณ | ๊ณ ์ ๊ฐ | ๋ฐ์จ ํ๊ท ์ ์ ๊ธฐ๋ฐ ๋์ | ||
| Parksy Signature | ๋ฐ์จ ์๋ OK | LoRA v4 ์๋ ํ๊ฐ | ||
| HRV ์๋ trance | ๋ฏธ๊ตฌํ | OUKITEL WP35 Pro PPG โ ์์ฑ ๊ณ์ | ||
| RVC ๋ฐ์จ ์์ | ๋ฏธ๊ตฌํ | DiffSinger + RVC ์ค๋ฒ๋ ์ด |
๋ฐ์จ๊ฐ ๋ณด๋ผ ํ ๋ง๋:
**"Day 0 ์์"**
โ Claude Code ๋์:
1. gh repo create dtslib1979/sea_mcp --private
2. ~/sea_mcp/ ๋๋ ํ ๋ฆฌ + git init
3. pip install -e ~/parksy-audio/mcp_voice (editable)
4. ~/sea_mcp/.env ์์ฑ
5. ~/.claude.json์ "sea" MCP ํญ๋ชฉ ์ถ๊ฐ
6. Day 0 ๊ฒ์ดํธ 4๊ฐ ๊ฒ์ฆ (parksy_voice import / score_engine import / gh repo / .env)
7. ๋ฐ์จํํ ํ ๋ ๊ทธ๋จ ์๋ฆผ: "Day 0 OK. Sprint 1 ์๋ ์ง์ ํ ๊น์?"
๋ฐ์จ ๋ต๋ณ:
๋ณธ ๋ฌธ์๋ SEA-MCP์ ๋จ์ผ ์ฐธ์กฐ ๋ฌธ์๋ค.
์ด์ ๋ฌธ์ ๋ณด์กด:
๋ณธ ๋ฌธ์๋ ์ ์๋ฅผ ๋งค๊ธฐ์ง ์๋๋ค.
๋์ ์ธ๋ถ ์ฑ์ ์ ์์:
# Gemini / ChatGPT / Claude ๋ค๋ฅธ ์ธ์คํด์ค์ ๋ณธ .md ๋์ง๊ณ :
"์ด ๋ฌธ์๋ฅผ 100์ ๋ง์ ์ผ๋ก ํ๊ฐํด์ค. ์
ํ ๋ง์ผํ
ํํผํ๊ณ ๊ฐ๊ด ์ฑ์ ."
๋ฐ์จ ์ฃผ๊ด ํ๊ฐ:
๋ณธ ์ํคํ ํธ๋ ํ์ ์๋๊น์ง๋ง ๋ช ์ํ๋ค. ๊ฒฐ๊ณผ ์ ์๋ ์ธ๋ถ์ ๋งก๊ธด๋ค.
๋ฌธ์ ๋ โ SEA-MCP Final Architecture v1.0
dtslib | parksy.kr | eae.kr | dtslib.com
์ฌ์ ์๋ฑ๋ก๋ฒํธ: 475-01-03493
Single Source of Truth โ Honest Closure Edition