
=== 2026-05-12 22:34:14 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/pipeline.py /srv/music-files-platform-next/pipeline/batch-20260512-223414-86e916/_input.json -o /srv/music-files-platform-next/pipeline/batch-20260512-223414-86e916 -cg 2 -cs 2 --skip-feishu --profile __runtime_batch-20260512-223414-86e916 --step1-only ===
[profile] ✅ Loaded profile '__runtime_batch-20260512-223414-86e916' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260512-223414-86e916.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
[   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-20260512-223414-86e916
Skip Suno: False | Step1 only: True | Version: v4
======================================================================

[22:34:16] 🏥 Health check...
[22:34:17] ✅ qishui: OK
[22:34:17] ✅ netease: OK
[22:34:17] ✅ qq: OK

[22:34:17] 🔍 [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] Step 0: Fetching...
[22:34:17] 🔍 [02_Ylang Ylang_20260512] Step 0: Fetching...
[22:34:20] ✅ [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] Step 0: netease | 60c lyrics
[22:34:20] ⬇️  [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] Step 0.5: Download from netease...
[22:34:20] ✅ [02_Ylang Ylang_20260512] Step 0: netease | 37c lyrics
[22:34:20] ⬇️  [02_Ylang Ylang_20260512] Step 0.5: Download from netease...
[22:34:24] ✅ [02_Ylang Ylang_20260512] Step 0.5: 4034961 bytes | 213.0s
[22:34:24] 🔬 [02_Ylang Ylang_20260512] Step 0.75: Audio features...
[22:34:25] ✅ [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] Step 0.5: 4106969 bytes | 199.7s
[22:34:25] 🔬 [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] Step 0.75: Audio features...
[22:34:58] ✅ [02_Ylang Ylang_20260512] Step 0.75: BPM=69.82 Key=C# major (33.5s)
[22:34:58] 🧠 [02_Ylang Ylang_20260512] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-12T14:34:58.373Z", "trace_id": "batch-20260512-223414-86e916", "song_key": "02_Ylang Ylang_20260512", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260512-223414-86e916/02_Ylang Ylang_20260512/song_pgc.mp3", "has_features": true}}
/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')
[22:35:01] ✅ [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] Step 0.75: BPM=100.89 Key=A major (35.3s)
[22:35:01] 🧠 [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-12T14:35:01.019Z", "trace_id": "batch-20260512-223414-86e916", "song_key": "01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260512-223414-86e916/01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512/song_pgc.mp3", "has_features": true}}
  ⚠️ Gemini official 503 on key #1/5, will retry...
  🔄 Retry 1/4 in 3s...
  ⚠️ Gemini official 503 on key #2/5, will retry...
  🔄 Retry 2/4 in 3s...
  ⚠️ Gemini official 503 on key #3/5, will retry...
  🔄 Retry 3/4 in 3s...
  ⚠️ Gemini official 503 on key #4/5, will retry...
  🔄 Retry 4/4 in 3s...
  📊 Gemini official: 45s | prompt_tokens=9518 completion=965
{"__trace__": true, "ts": "2026-05-12T14:35:46.538Z", "trace_id": "batch-20260512-223414-86e916", "song_key": "01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 45.5, "cost_usd": null, "status": "success"}
{"__trace__": true, "ts": "2026-05-12T14:35:46.538Z", "trace_id": "batch-20260512-223414-86e916", "song_key": "01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 45.518}
[22:35:46] ⚠️  [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] Step 1.5: prompt 1112c > 1000c, compressing...
  📏 [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] prompt 1112c → 911c (smart truncate)
[22:35:46] ✅ [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] Step 1.5: prompt compressed 1112c → 911c
[22:35:46] ✅ [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] Step 1: 45.5s | prompt=911c | prompt_ok=True lyrics_ok=True
  📊 Gemini official: 45s | prompt_tokens=9940 completion=1349
{"__trace__": true, "ts": "2026-05-12T14:36:26.805Z", "trace_id": "batch-20260512-223414-86e916", "song_key": "02_Ylang Ylang_20260512", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 45.5, "cost_usd": null, "status": "success"}
{"__trace__": true, "ts": "2026-05-12T14:36:26.805Z", "trace_id": "batch-20260512-223414-86e916", "song_key": "02_Ylang Ylang_20260512", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 88.431}
[22:36:26] ⚠️  [02_Ylang Ylang_20260512] Step 1.5: prompt 1185c > 1000c, compressing...
  📏 [02_Ylang Ylang_20260512] prompt 1185c → 847c (smart truncate)
[22:36:26] ✅ [02_Ylang Ylang_20260512] Step 1.5: prompt compressed 1185c → 847c
[22:36:26] ✅ [02_Ylang Ylang_20260512] Step 1: 45.5s | prompt=847c | prompt_ok=True lyrics_ok=True

======================================================================
SUMMARY | 129s (2.1min)
======================================================================
✅ Done: 2 | ⏳ Awaiting Step 2: 0 | ❌ Failed: 0
[MasterDB] ✅ 批次 batch-20260512-223414-86e916 → +0 新增, ~0 更新 | 总计 708 首
[exit 0]

=== 2026-05-12 22:36:27 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/orchestrate_phase2.py /srv/music-files-platform-next/pipeline/batch-20260512-223414-86e916 --profile __runtime_batch-20260512-223414-86e916 --resume-mode each --skip-feishu ===
[phase2] batch=batch-20260512-223414-86e916 pending=2 groups=1
[phase2] group 1/1 -> 01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512, 02_Ylang Ylang_20260512
[profile] ✅ Loaded profile '__runtime_batch-20260512-223414-86e916' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260512-223414-86e916.yaml
[phase2] 🌐 01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512: target_language=auto
[profile] ✅ Loaded profile '__runtime_batch-20260512-223414-86e916' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260512-223414-86e916.yaml
[phase2] 🌐 02_Ylang Ylang_20260512: 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-20260512-223414-86e916/_manifest.json --resume /srv/music-files-platform-next/pipeline/batch-20260512-223414-86e916 --profile __runtime_batch-20260512-223414-86e916 --skip-feishu
[22:36:28] 🎨 [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] Step 2 Turn 1: generating creative brief...
[22:36:28] 🎨 [02_Ylang Ylang_20260512] Step 2 Turn 1: generating creative brief...
[22:36:38] 🎨 [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] Step 2 brief: 10.5s | in=4441 out=449
[22:36:38] ✅ [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] Step 2 brief: engine=D theme=两人同坐一辆通勤列车，没有对话，只是肩膀偶尔碰到
[22:36:38] 🌐 [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] Step 2: target_language=auto → lang_mode=EN | multi-turn
[22:36:38] 🤖 [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] Step 2 Turn 2: 34573 chars ≈ 8643 tokens → claude-sonnet-4-6
[22:36:40] 🎨 [02_Ylang Ylang_20260512] Step 2 brief: 12.0s | in=4395 out=484
[22:36:40] ✅ [02_Ylang Ylang_20260512] Step 2 brief: engine=C theme=独自收拾房间时，发现自己把每样东西都放回了你习惯的位置
[22:36:40] 🌐 [02_Ylang Ylang_20260512] Step 2: target_language=auto → lang_mode=AUTO | multi-turn
[22:36:40] 🤖 [02_Ylang Ylang_20260512] Step 2 Turn 2: 35613 chars ≈ 8903 tokens → claude-sonnet-4-6
[22:37:03] ⚠️  [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] Step 2 API: originality 58% < 85% | 3 copied phrases
          ❗ ", Round sub-bass.)" ~ ", Round sub-bass.)" (100%)
          ❗ ", Sub-bass sustains, Vinyl crackle more prominent.)" ~ ", Sub-bass sustains, Vinyl crackle more prominent.)" (100%)
          ❗ ", Round sub-bass.)" ~ ", Round sub-bass.)" (100%)
[22:37:03] 🔄 [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] Step 2 API: originality retry 1/3...
[22:37:15] ⚠️  [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] Step 2 API originality retry 1 failed: Expecting value: line 1 column 1 (char 0)
[22:37:15] ⚠️  [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] Step 2 API: best originality 58% after 3 retries
[22:37:15] ✅ [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] Step 2 API: 《Shoulder Weight》 | 25.3s | in=19539 out=1812 | ~$0.086
[22:37:30] ✅ [02_Ylang Ylang_20260512] Step 2 API: 《坐满》 | 50.6s | in=19801 out=2355 | ~$0.095
{"timestamp": "2026-05-12T22:36:27.901367+08:00", "batch_dir": "/srv/music-files-platform-next/pipeline/batch-20260512-223414-86e916", "profile": "__runtime_batch-20260512-223414-86e916", "concurrency": 3, "resume_mode": "each", "pending_song_count": 2, "groups": [{"group_index": 1, "songs": ["/srv/music-files-platform-next/pipeline/batch-20260512-223414-86e916/01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512", "/srv/music-files-platform-next/pipeline/batch-20260512-223414-86e916/02_Ylang Ylang_20260512"], "success_count": 2, "failed_count": 0, "results": [{"status": "success", "song_dir": "/srv/music-files-platform-next/pipeline/batch-20260512-223414-86e916/01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260512-223414-86e916/01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512/step2_json_b.json", "agent_summary": "API direct: Shoulder Weight", "returncode": 0, "stderr": "", "attempt": 1, "attempts": [{"status": "success", "song_dir": "/srv/music-files-platform-next/pipeline/batch-20260512-223414-86e916/01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260512-223414-86e916/01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512/step2_json_b.json", "agent_summary": "API direct: Shoulder Weight", "returncode": 0, "stderr": "", "attempt": 1}]}, {"status": "success", "song_dir": "/srv/music-files-platform-next/pipeline/batch-20260512-223414-86e916/02_Ylang Ylang_20260512", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260512-223414-86e916/02_Ylang Ylang_20260512/step2_json_b.json", "agent_summary": "API direct: 坐满", "returncode": 0, "stderr": "", "attempt": 1, "attempts": [{"status": "success", "song_dir": "/srv/music-files-platform-next/pipeline/batch-20260512-223414-86e916/02_Ylang Ylang_20260512", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260512-223414-86e916/02_Ylang Ylang_20260512/step2_json_b.json", "agent_summary": "API direct: 坐满", "returncode": 0, "stderr": "", "attempt": 1}]}]}], "resume": {"status": "success", "returncode": 0, "stdout_tail": "\n======================================================================\nmusic-pipeline3000 v2 | 2 songs\n======================================================================\nGemini concurrency: 2 | Suno concurrency: 3\nOutput: /srv/music-files-platform-next/pipeline/batch-20260512-223414-86e916\nSkip Suno: False | Step1 only: False | Version: v4\n======================================================================\n\n[22:37:32] 🏥 Health check...\n[22:37:34] ✅ qishui: OK\n[22:37:34] ✅ netease: OK\n[22:37:34] ✅ qq: OK\n\n  📝 [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] lyrics stripped: 2610c → 2606c\n[22:37:34] 🎵 [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] Step 3: Suno generation (weirdness=50, style_influence=50 · 纯音乐)...\n[22:37:34] 🎨 [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] Step 4: SeeDream cover (parallel)...\n  📝 [02_Ylang Ylang_20260512] lyrics stripped: 3972c → 3965c\n[22:37:34] 🎵 [02_Ylang Ylang_20260512] Step 3: Suno generation (weirdness=50, style_influence=50 · 纯音乐)...\n[22:37:34] 🎨 [02_Ylang Ylang_20260512] Step 4: SeeDream cover (parallel)...\n  ✅ submitted: ['3557256e', '09faab8b']\n  ✅ submitted: ['906c30cb', '53bdb21f']\n  🎵 3557256e... → submitted\n  🎵 09faab8b... → submitted\n  🎵 906c30cb... → submitted\n  🎵 53bdb21f... → submitted\n  🎵 3557256e... → queued\n  🎵 09faab8b... → queued\n  🎵 906c30cb... → queued\n  🎵 53bdb21f... → queued\n  🎵 3557256e... → streaming\n  🎵 09faab8b... → streaming\n  🎵 53bdb21f... → streaming\n  🎵 906c30cb... → streaming\n  🎵 906c30cb... → complete\n  🎵 3557256e... → complete\n  🎵 53bdb21f... → complete\n[22:38:55]    🎧 [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] Song 1: https://cdn1.suno.ai/906c30cb-c437-435e-837f-ea2bd40a8763.mp3\n[22:38:55]    🎧 [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] Song 2: https://cdn1.suno.ai/53bdb21f-7575-43e7-89e6-316e7d457fda.mp3\n[22:38:55] 🎛️ [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] Step 3.5: 混音...\n[22:39:07]    🎚️ [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] Song 1: rnb | 低84/中15/高0%\n  🎵 09faab8b... → complete\n[22:39:07]    🎧 [02_Ylang Ylang_20260512] Song 1: https://cdn1.suno.ai/3557256e-b606-44e8-b428-50f725a99291.mp3\n[22:39:07]    🎧 [02_Ylang Ylang_20260512] Song 2: https://cdn1.suno.ai/09faab8b-3480-4b93-95a1-3a412c032371.mp3\n[22:39:07] 🎛️ [02_Ylang Ylang_20260512] Step 3.5: 混音...\n[22:39:15]    🎚️ [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] Song 2: rnb | 低77/中23/高0%\n[22:39:15] ✅ [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] Step 3.5: 20.3s | 2 songs mixed\n[22:39:15] ⚠️  [01_We've Never Met but Can We Have a Cup of Coffee or Something_20260512] Step 4: http_403 (non-fatal)\n[22:39:23]    🎚️ [02_Ylang Ylang_20260512] Song 1: classical | 低89/中10/高0%\n[22:39:31]    🎚️ [02_Ylang Ylang_20260512] Song 2: classical | 低75/中25/高0%\n[22:39:31] ✅ [02_Ylang Ylang_20260512] Step 3.5: 24.0s | 2 songs mixed\n[22:39:31] ⚠️  [02_Ylang Ylang_20260512] Step 4: http_403 (non-fatal)\n\n======================================================================\nSUMMARY | 117s (2.0min)\n======================================================================\n✅ Done: 2 | ⏳ Awaiting Step 2: 0 | ❌ Failed: 0\n[MasterDB] ✅ 批次 batch-20260512-223414-86e916 → +2 新增, ~0 更新 | 总计 710 首\n", "stderr_tail": "[profile] ✅ Loaded profile '__runtime_batch-20260512-223414-86e916' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260512-223414-86e916.yaml\n", "summary": {"timestamp": "2026-05-12T22:39:31.573669+08:00", "wall_clock": 117.3, "total": 2, "success": 2, "awaiting_step2": 0, "failed": 0}}, "status": "success"}
[exit 0]

=== 2026-05-12 22:39:32 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/steps/step5_feishu.py /srv/music-files-platform-next/pipeline/batch-20260512-223414-86e916 ===
[Feishu] ✅ Exported 2 songs to: https://ccnu62373cgc.feishu.cn/sheets/SE88s6ppHh1KWrtG58McKGRin3C
[Feishu] 📐 Expanded master sheet from 647 to 749 rows
[Feishu] ✅ Appended 2 new songs to master sheet (rows 648-649)
[MasterDB] ✅ 批次 batch-20260512-223414-86e916 → +2 新增, ~0 更新 | 总计 649 首
[Feishu IM] ✅ Text sent: 📊 本批次结果表格：https://ccnu62373cgc.feishu.cn/sheets/SE88s6ppHh1K
[22:39:39] 📨 Step 5: Sending files to Feishu IM...
[Feishu IM] ✅ [Shoulder Weight] topic head sent (message_id=om_x100b6f07f40e1cb8b2fe6a6517f7cc0)
[Feishu IM] ✅ [Shoulder Weight] Shoulder Weight_V1_raw.mp3 replied
[Feishu IM] ✅ [Shoulder Weight] Shoulder Weight_V1_mixed.mp3 replied
[Feishu IM] ✅ [Shoulder Weight] Shoulder Weight_V2_raw.mp3 replied
[Feishu IM] ✅ [Shoulder Weight] Shoulder Weight_V2_mixed.mp3 replied
[Feishu IM] ✅ [坐满] topic head sent (message_id=om_x100b6f07f50890b8b3d9dedee2bcdea)
[Feishu IM] ✅ [坐满] 坐满_V1_raw.mp3 replied
[Feishu IM] ✅ [坐满] 坐满_V1_mixed.mp3 replied
[Feishu IM] ✅ [坐满] 坐满_V2_raw.mp3 replied
[Feishu IM] ✅ [坐满] 坐满_V2_mixed.mp3 replied
[Feishu] ✅ Already on file server: /srv/music-files-platform-next/pipeline/batch-20260512-223414-86e916
[Feishu] ✅ Archived to GDrive: /mnt/gdrive/music-pipeline/batch-20260512-223414-86e916
[Feishu] 📦 Local files kept at: /srv/music-files-platform-next/pipeline/batch-20260512-223414-86e916

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