
=== 2026-04-19 14:30:05 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/pipeline.py /srv/music-files-platform-next/pipeline/batch-20260419-143005-9b733a/_input.json -o /srv/music-files-platform-next/pipeline/batch-20260419-143005-9b733a -cg 2 -cs 2 --skip-feishu --profile __runtime_batch-20260419-143005-9b733a --step1-only ===
[profile] ✅ Loaded profile '__runtime_batch-20260419-143005-9b733a' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260419-143005-9b733a.yaml
[   INFO   ] MusicExtractorSVM: no classifier models were configured by default
[   INFO   ] On connection Flux::flux → IIR::signal:
[   INFO   ] BUFFER SIZE MISMATCH: max=0 - asked for read size 4096
[   INFO   ] resizing buffer to 36040/4505
[   INFO   ] FrameCutter: dropping incomplete frame
/usr/local/lib/python3.13/dist-packages/scipy/cluster/hierarchy.py:810: ClusterWarning: The symmetric non-negative hollow observation matrix looks suspiciously like an uncondensed distance matrix
  return linkage(y, method='ward', metric='euclidean')

======================================================================
music-pipeline3000 v2 | 2 songs
======================================================================
Gemini concurrency: 2 | Suno concurrency: 2
Output: /srv/music-files-platform-next/pipeline/batch-20260419-143005-9b733a
Skip Suno: False | Step1 only: True | Version: v4
======================================================================

[14:30:07] 🏥 Health check...
[14:30:08] ✅ qishui: OK
[14:30:08] ✅ netease: OK
[14:30:08] ✅ qq: OK

[14:30:08] 🔍 [01_背对背拥抱_20260419] Step 0: Fetching...
[14:30:08] 🔍 [02_不潮不用花钱_20260419] Step 0: Fetching...
[14:30:11] ✅ [01_背对背拥抱_20260419] Step 0: qishui | 375c
[14:30:11] ⬇️  [01_背对背拥抱_20260419] Step 0.5: Download from qishui...
[14:30:12] ✅ [02_不潮不用花钱_20260419] Step 0: netease | 1320c
[14:30:12] ⬇️  [02_不潮不用花钱_20260419] Step 0.5: Download from netease...
[14:30:18] ✅ [02_不潮不用花钱_20260419] Step 0.5: 4541602 bytes | 233.5s
[14:30:18] 🔬 [02_不潮不用花钱_20260419] Step 0.75: Audio features...
[14:30:20] ⚠️  [01_背对背拥抱_20260419] Step 0.5: Only 60.0s preview (expected 234893s)
[14:30:20] 🔒 [01_背对背拥抱_20260419] Step 0.5: source_id locked, skipping cross-platform fallback
[14:30:20] ❌ [01_背对背拥抱_20260419] Step 0.5: All platforms returned preview (60.0s), skipping song
[14:30:52] ✅ [02_不潮不用花钱_20260419] Step 0.75: BPM=111.99 Key=A minor (34.2s)
[14:30:52] 🧠 [02_不潮不用花钱_20260419] Step 1: Gemini (queuing)...
  📊 Gemini official: 37s | prompt_tokens=11170 completion=1157
[14:31:29] ✅ [02_不潮不用花钱_20260419] Step 1: 37.0s | prompt=880c | prompt_ok=True lyrics_ok=True

======================================================================
SUMMARY | 81s (1.3min)
======================================================================
✅ Done: 1 | ⏳ Awaiting Step 2: 0 | ❌ Failed: 1
[MasterDB] ✅ 批次 batch-20260419-143005-9b733a → +0 新增, ~0 更新 | 总计 546 首
[exit 0]

=== 2026-04-19 14:31:30 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/orchestrate_phase2.py /srv/music-files-platform-next/pipeline/batch-20260419-143005-9b733a --profile base --resume-mode each --skip-feishu ===
[phase2] batch=batch-20260419-143005-9b733a pending=1 groups=1
[phase2] group 1/1 -> 02_不潮不用花钱_20260419
[profile] ✅ Loaded profile 'base' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/base.yaml
[phase2] 🌐 02_不潮不用花钱_20260419: target_language=auto
[phase2] resume -> /usr/bin/python3 /srv/repos/3000music-platform-next/services/music-pipeline/scripts/pipeline.py /srv/music-files-platform-next/pipeline/batch-20260419-143005-9b733a/_manifest.json --resume /srv/music-files-platform-next/pipeline/batch-20260419-143005-9b733a --profile base --skip-feishu
[14:31:30] 🌐 [02_不潮不用花钱_20260419] Step 2: target_language=auto → lang_mode=EN
[14:31:30] 🤖 [02_不潮不用花钱_20260419] Step 2 API: 27090 chars ≈ 6772 tokens → claude-sonnet-4-6
[14:32:14] ⚠️  [02_不潮不用花钱_20260419] Step 2 API: originality 59% < 85% | 7 copied phrases
          ❗ "What you feel is what you get" ~ "What you see is what you get" (95%)
          ❗ "What you feel is what you get" ~ "What you see is what you get" (95%)
          ❗ "What you feel is what you get" ~ "What you see is what you get" (95%)
          ❗ "What you feel is what you get" ~ "What you see is what you get" (95%)
          ❗ "What you feel is what you get" ~ "What you see is what you get" (95%)
[14:32:14] 🔄 [02_不潮不用花钱_20260419] Step 2 API: originality retry 1/3...
[14:33:01] ⚠️  [02_不潮不用花钱_20260419] Step 2 API retry 1: originality 71%
[14:33:01] 🔄 [02_不潮不用花钱_20260419] Step 2 API: originality retry 2/3...
[14:33:40] ⚠️  [02_不潮不用花钱_20260419] Step 2 API originality retry 2 failed: Expecting value: line 1 column 1 (char 0)
[14:33:40] ⚠️  [02_不潮不用花钱_20260419] Step 2 API: best originality 71% after 3 retries
[14:33:40] ⚠️  [02_不潮不用花钱_20260419] Step 2 API: title 《Soft Landing》 collides with existing release; title retry 1/3
[14:34:17] ✅ [02_不潮不用花钱_20260419] Step 2 API title retry 1: 《Squeaking Soles》 ✓
[14:34:17] ✅ [02_不潮不用花钱_20260419] Step 2 API: 《Squeaking Soles》 | 127.1s | in=49760 out=6283 | ~$0.244
{"timestamp": "2026-04-19T14:31:30.674877+08:00", "batch_dir": "/srv/music-files-platform-next/pipeline/batch-20260419-143005-9b733a", "profile": "base", "concurrency": 3, "resume_mode": "each", "pending_song_count": 1, "groups": [{"group_index": 1, "songs": ["/srv/music-files-platform-next/pipeline/batch-20260419-143005-9b733a/02_不潮不用花钱_20260419"], "success_count": 1, "failed_count": 0, "results": [{"status": "success", "song_dir": "/srv/music-files-platform-next/pipeline/batch-20260419-143005-9b733a/02_不潮不用花钱_20260419", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260419-143005-9b733a/02_不潮不用花钱_20260419/step2_json_b.json", "agent_summary": "API direct: Squeaking Soles", "returncode": 0, "stderr": "", "attempt": 1, "attempts": [{"status": "success", "song_dir": "/srv/music-files-platform-next/pipeline/batch-20260419-143005-9b733a/02_不潮不用花钱_20260419", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260419-143005-9b733a/02_不潮不用花钱_20260419/step2_json_b.json", "agent_summary": "API direct: Squeaking Soles", "returncode": 0, "stderr": "", "attempt": 1}]}]}], "resume": {"status": "success", "returncode": 0, "stdout_tail": "utput: /srv/music-files-platform-next/pipeline/batch-20260419-143005-9b733a\nSkip Suno: False | Step1 only: False | Version: v4\n======================================================================\n\n[14:34:19] 🏥 Health check...\n[14:34:21] ✅ qishui: OK\n[14:34:21] ✅ netease: OK\n[14:34:21] ✅ qq: OK\n\n[14:34:21] 🔬 [01_背对背拥抱_20260419] Step 0.75: Audio features...\n  📝 [02_不潮不用花钱_20260419] lyrics stripped: 2705c → 2698c\n[14:34:21] 🎵 [02_不潮不用花钱_20260419] Step 3: Suno generation (weirdness=50, style_influence=50)...\n[14:34:21] 🎨 [02_不潮不用花钱_20260419] Step 4: SeeDream cover (parallel)...\n  ✅ submitted: ['e2fac3f3', '839c274f']\n  🎵 e2fac3f3... → submitted\n  🎵 839c274f... → submitted\n[14:34:33] ✅ [01_背对背拥抱_20260419] Step 0.75: BPM=129.7 Key=D# major (12.4s)\n[14:34:33] 🧠 [01_背对背拥抱_20260419] Step 1: Gemini (queuing)...\n  🎵 e2fac3f3... → queued\n  🎵 839c274f... → queued\n  🎵 e2fac3f3... → streaming\n  🎵 839c274f... → streaming\n  📊 Gemini official: 41s | prompt_tokens=5279 completion=1227\n[14:35:14] ✅ [01_背对背拥抱_20260419] Step 1: 41.1s | prompt=838c | prompt_ok=True lyrics_ok=True\n[14:35:14] 🌐 [01_背对背拥抱_20260419] Step 2: target_language=auto → lang_mode=AUTO\n[14:35:14] 🤖 [01_背对背拥抱_20260419] Step 2 API: 27133 chars ≈ 6783 tokens → claude-sonnet-4-6\n[14:35:43] ⚠️  [01_背对背拥抱_20260419] Step 2 API: originality 76% < 85% | 0 copied phrases\n[14:35:43] 🔄 [01_背对背拥抱_20260419] Step 2 API: originality retry 1/3...\n  🎵 e2fac3f3... → complete\n  🎵 839c274f... → complete\n[14:36:20]    🎧 [02_不潮不用花钱_20260419] Song 1: https://cdn1.suno.ai/e2fac3f3-84a7-48cc-adec-8c22609d6b9f.mp3\n[14:36:20]    🎧 [02_不潮不用花钱_20260419] Song 2: https://cdn1.suno.ai/839c274f-0f39-4f7d-ab0d-e8a577a355aa.mp3\n[14:36:20] 🎛️ [02_不潮不用花钱_20260419] Step 3.5: 混音...\n[14:36:40]    🎚️ [02_不潮不用花钱_20260419] Song 1: rock | 低58/中38/高4%\n[14:36:40] ⚠️  [01_背对背拥抱_20260419] Step 2 API retry 1: originality 81%\n[14:36:40] 🔄 [01_背对背拥抱_20260419] Step 2 API: originality retry 2/3...\n[14:36:56]    🎚️ [02_不潮不用花钱_20260419] Song 2: rock | 低49/中42/高9%\n[14:36:56] ✅ [02_不潮不用花钱_20260419] Step 3.5: 36.2s | 2 songs mixed\n[14:36:58] ✅ [02_不潮不用花钱_20260419] Step 4: 20.2s | /srv/music-files-platform-next/pipeline/batch-20260419-143005-9b733a/02_不潮不用花钱_20260419/cover_seedream.jpg\n[14:37:25] ✅ [01_背对背拥抱_20260419] Step 2 API retry 2: originality 87% ✓\n[14:37:25] ✅ [01_背对背拥抱_20260419] Step 2 API: 《拧不开的盖》 | 131.3s | in=51895 out=6577 | ~$0.254\n[14:37:25] ✅ [01_背对背拥抱_20260419] Step 2.5: originality 87% ✓\n[14:37:25] ✅ [01_背对背拥抱_20260419] Step 2: 《拧不开的盖》\n[14:37:25] 📁 [01_背对背拥抱_20260419] Renamed → 01_背对背拥抱_拧不开的盖_20260419\n  📝 [01_背对背拥抱_拧不开的盖_20260419] lyrics stripped: 3137c → 3131c\n[14:37:25] 🎵 [01_背对背拥抱_拧不开的盖_20260419] Step 3: Suno generation (weirdness=50, style_influence=50)...\n[14:37:25] 🎨 [01_背对背拥抱_拧不开的盖_20260419] Step 4: SeeDream cover (parallel)...\n  ✅ submitted: ['976278b4', '61ad3930']\n  🎵 976278b4... → submitted\n  🎵 61ad3930... → submitted\n  🎵 976278b4... → queued\n  🎵 61ad3930... → queued\n  🎵 976278b4... → streaming\n  🎵 61ad3930... → streaming\n  🎵 61ad3930... → complete\n  🎵 976278b4... → complete\n[14:39:52]    🎧 [01_背对背拥抱_拧不开的盖_20260419] Song 1: https://cdn1.suno.ai/976278b4-ca7b-44d6-ade7-eac6673b413e.mp3\n[14:39:52]    🎧 [01_背对背拥抱_拧不开的盖_20260419] Song 2: https://cdn1.suno.ai/61ad3930-b701-457a-8e4c-afba36c6d39f.mp3\n[14:39:52] 🎛️ [01_背对背拥抱_拧不开的盖_20260419] Step 3.5: 混音...\n[14:40:13]    🎚️ [01_背对背拥抱_拧不开的盖_20260419] Song 1: hip_hop | 低40/中54/高6%\n[14:40:32]    🎚️ [01_背对背拥抱_拧不开的盖_20260419] Song 2: hip_hop | 低41/中52/高7%\n[14:40:32] ✅ [01_背对背拥抱_拧不开的盖_20260419] Step 3.5: 40.3s | 2 songs mixed\n[14:40:35] ✅ [01_背对背拥抱_拧不开的盖_20260419] Step 4: 16.5s | /srv/music-files-platform-next/pipeline/batch-20260419-143005-9b733a/01_背对背拥抱_拧不开的盖_20260419/cover_seedream.jpg\n\n======================================================================\nSUMMARY | 374s (6.2min)\n======================================================================\n✅ Done: 2 | ⏳ Awaiting Step 2: 0 | ❌ Failed: 0\n[MasterDB] ✅ 批次 batch-20260419-143005-9b733a → +2 新增, ~0 更新 | 总计 548 首\n", "stderr_tail": "[profile] ✅ Loaded profile 'base' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/base.yaml\n[   INFO   ] MusicExtractorSVM: no classifier models were configured by default\n[   INFO   ] On connection Flux::flux → IIR::signal:\n[   INFO   ] BUFFER SIZE MISMATCH: max=0 - asked for read size 4096\n[   INFO   ] resizing buffer to 36040/4505\n/usr/local/lib/python3.13/dist-packages/scipy/cluster/hierarchy.py:810: ClusterWarning: The symmetric non-negative hollow observation matrix looks suspiciously like an uncondensed distance matrix\n  return linkage(y, method='ward', metric='euclidean')\n", "summary": {"timestamp": "2026-04-19T14:40:35.057768+08:00", "wall_clock": 374.0, "total": 2, "success": 2, "awaiting_step2": 0, "failed": 0}}, "status": "success"}
[exit 0]

=== 2026-04-19 14:40:36 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/steps/step5_feishu.py /srv/music-files-platform-next/pipeline/batch-20260419-143005-9b733a ===
[Feishu] ✅ Exported 2 songs to: https://ccnu62373cgc.feishu.cn/sheets/L1IdsAtUghkBMAt0Sb8cD3Kgncb
[Feishu] 📐 Expanded master sheet from 493 to 595 rows
[Feishu] ✅ Appended 2 new songs to master sheet (rows 494-495)
[MasterDB] ✅ 批次 batch-20260419-143005-9b733a → +2 新增, ~0 更新 | 总计 495 首
[Feishu IM] ✅ Text sent: 📊 本批次结果表格：https://ccnu62373cgc.feishu.cn/sheets/L1IdsAtUghkB
[14:40:44] 📨 Step 5: Sending files to Feishu IM...
[Feishu IM] ✅ [拧不开的盖] cover sent
[Feishu IM] ✅ [拧不开的盖] 拧不开的盖_V1_raw.mp3 sent
[Feishu IM] ✅ [拧不开的盖] 拧不开的盖_V1_mixed.mp3 sent
[Feishu IM] ✅ [拧不开的盖] 拧不开的盖_V2_raw.mp3 sent
[Feishu IM] ✅ [拧不开的盖] 拧不开的盖_V2_mixed.mp3 sent
[Feishu IM] ✅ [Squeaking Soles] cover sent
[Feishu IM] ✅ [Squeaking Soles] Squeaking Soles_V1_raw.mp3 sent
[Feishu IM] ✅ [Squeaking Soles] Squeaking Soles_V1_mixed.mp3 sent
[Feishu IM] ✅ [Squeaking Soles] Squeaking Soles_V2_raw.mp3 sent
[Feishu IM] ✅ [Squeaking Soles] Squeaking Soles_V2_mixed.mp3 sent
[Feishu] ✅ Already on file server: /srv/music-files-platform-next/pipeline/batch-20260419-143005-9b733a
[Feishu] ✅ Archived to GDrive: /mnt/gdrive/music-pipeline/batch-20260419-143005-9b733a
[Feishu] 📦 Local files kept at: /srv/music-files-platform-next/pipeline/batch-20260419-143005-9b733a

📊 https://ccnu62373cgc.feishu.cn/sheets/L1IdsAtUghkBMAt0Sb8cD3Kgncb
[exit 0]
