
=== 2026-05-07 15:03:51 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/pipeline.py /srv/music-files-platform-next/pipeline/batch-20260507-145720-5140af/_input.json -o /srv/music-files-platform-next/pipeline/batch-20260507-145720-5140af -cg 2 -cs 2 --skip-feishu --profile __runtime_batch-20260507-145720-5140af --step1-only ===
[profile] ✅ Loaded profile '__runtime_batch-20260507-145720-5140af' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260507-145720-5140af.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-20260507-145720-5140af
Skip Suno: False | Step1 only: True | Version: v4
======================================================================

[15:03:52] 🏥 Health check...
[15:03:55] ✅ qishui: OK
[15:03:55] ✅ netease: OK
[15:03:55] ✅ qq: OK

[15:03:55] 🔍 [01_People_20260507] Step 0: Fetching...
[15:03:55] 🔍 [02_Calm Down_20260507] Step 0: Fetching...
[15:03:58] ✅ [01_People_20260507] Step 0: netease | 1865c lyrics
[15:03:58] ⬇️  [01_People_20260507] Step 0.5: Download from netease...
[15:03:58] ✅ [02_Calm Down_20260507] Step 0: netease | 2876c lyrics
[15:03:58] ⬇️  [02_Calm Down_20260507] Step 0.5: Download from netease...
[15:04:03] ✅ [01_People_20260507] Step 0.5: 3683593 bytes | 184.8s
[15:04:03] 🔬 [01_People_20260507] Step 0.75: Audio features...
[15:04:04] ✅ [02_Calm Down_20260507] Step 0.5: 4673083 bytes | 239.4s
[15:04:04] 🔬 [02_Calm Down_20260507] Step 0.75: Audio features...
[15:04:36] ✅ [01_People_20260507] Step 0.75: BPM=99.02 Key=G# major (33.1s)
[15:04:36] 🧠 [01_People_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T07:04:36.790Z", "trace_id": "batch-20260507-145720-5140af", "song_key": "01_People_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-145720-5140af/01_People_20260507/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')
  ⚠️ Gemini official 503 on key #1/5, will retry...
  🔄 Retry 1/4 in 3s...
[15:04:40] ✅ [02_Calm Down_20260507] Step 0.75: BPM=107.03 Key=B major (35.8s)
[15:04:40] 🧠 [02_Calm Down_20260507] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-05-07T07:04:40.735Z", "trace_id": "batch-20260507-145720-5140af", "song_key": "02_Calm Down_20260507", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260507-145720-5140af/02_Calm Down_20260507/song_pgc.mp3", "has_features": true}}
  📊 Gemini official: 55s | prompt_tokens=11840 completion=2303
{"__trace__": true, "ts": "2026-05-07T07:05:36.055Z", "trace_id": "batch-20260507-145720-5140af", "song_key": "02_Calm Down_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 55.3, "cost_usd": null, "status": "success"}
{"__trace__": true, "ts": "2026-05-07T07:05:36.055Z", "trace_id": "batch-20260507-145720-5140af", "song_key": "02_Calm Down_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 55.32}
[15:05:36] ⚠️  [02_Calm Down_20260507] Step 1.5: prompt 1138c > 1000c, compressing...
  📏 [02_Calm Down_20260507] prompt 1138c → 839c (smart truncate)
[15:05:36] ✅ [02_Calm Down_20260507] Step 1.5: prompt compressed 1138c → 839c
[15:05:36] ✅ [02_Calm Down_20260507] Step 1: 55.3s | prompt=839c | prompt_ok=True lyrics_ok=True
  ⚠️ Gemini official 503 on key #2/5, will retry...
  🔄 Retry 2/4 in 3s...
  📊 Gemini official: 75s | prompt_tokens=9592 completion=1560
{"__trace__": true, "ts": "2026-05-07T07:06:56.699Z", "trace_id": "batch-20260507-145720-5140af", "song_key": "01_People_20260507", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 74.6, "cost_usd": null, "status": "success"}
{"__trace__": true, "ts": "2026-05-07T07:06:56.700Z", "trace_id": "batch-20260507-145720-5140af", "song_key": "01_People_20260507", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 139.909}
[15:06:56] ⚠️  [01_People_20260507] Step 1.5: prompt 1190c > 1000c, compressing...
  📏 [01_People_20260507] prompt 1190c → 820c (smart truncate)
[15:06:56] ✅ [01_People_20260507] Step 1.5: prompt compressed 1190c → 820c
[15:06:56] ✅ [01_People_20260507] Step 1: 74.6s | prompt=820c | prompt_ok=True lyrics_ok=True

======================================================================
SUMMARY | 182s (3.0min)
======================================================================
✅ Done: 2 | ⏳ Awaiting Step 2: 0 | ❌ Failed: 0
[MasterDB] ✅ 批次 batch-20260507-145720-5140af → +0 新增, ~0 更新 | 总计 635 首
[exit 0]

=== 2026-05-07 15:06:57 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/orchestrate_phase2.py /srv/music-files-platform-next/pipeline/batch-20260507-145720-5140af --profile __runtime_batch-20260507-145720-5140af --resume-mode each --skip-feishu ===
[phase2] batch=batch-20260507-145720-5140af pending=2 groups=1
[phase2] group 1/1 -> 01_People_20260507, 02_Calm Down_20260507
[profile] ✅ Loaded profile '__runtime_batch-20260507-145720-5140af' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260507-145720-5140af.yaml
[phase2] 🌐 01_People_20260507: target_language=auto
[profile] ✅ Loaded profile '__runtime_batch-20260507-145720-5140af' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260507-145720-5140af.yaml
[phase2] 🌐 02_Calm Down_20260507: 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-20260507-145720-5140af/_manifest.json --resume /srv/music-files-platform-next/pipeline/batch-20260507-145720-5140af --profile __runtime_batch-20260507-145720-5140af --skip-feishu
[15:06:57] 🌐 [01_People_20260507] Step 2: target_language=auto → lang_mode=EN
[15:06:57] 🤖 [01_People_20260507] Step 2 API: 34516 chars ≈ 8629 tokens → claude-sonnet-4-6
[15:06:57] 🌐 [02_Calm Down_20260507] Step 2: target_language=auto → lang_mode=EN
[15:06:57] 🤖 [02_Calm Down_20260507] Step 2 API: 37236 chars ≈ 9309 tokens → claude-sonnet-4-6
[15:07:33] ⚠️  [01_People_20260507] Step 2 API: originality 53% < 85% | 0 copied phrases
[15:07:33] 🔄 [01_People_20260507] Step 2 API: originality retry 1/3...
[15:07:59] ⚠️  [02_Calm Down_20260507] Step 2 API: originality 42% < 85% | 8 copied phrases
          ❗ "Oh-oh-oh-oh-oh-oh-oh-oh-oh-oh-oh" ~ "Oh-oh-oh-oh-oh-oh-oh-oh-oh-oh-oh" (100%)
          ❗ "You got me like woah-woah-woah-woah-woah-woah-woah-woah-woah" ~ "You got me like woah-woah-woah-woah-woah-woah-woah-woah-woah" (100%)
          ❗ "at the beginning of phrases, creating a rich, sweet tension that resolves stepwise.)" ~ "at the beginning of phrases, creating a rich, sweet tension that resolves stepwise.)" (100%)
          ❗ "When it's you I can't say no-oh-oh-oh-oh-oh-oh-oh-oh-oh-oh" ~ "When it's you I can't say no-oh-oh-oh-oh-oh-oh-oh-oh-oh-oh" (100%)
          ❗ "You got me like woah-woah-woah-woah-woah-woah-woah-woah-woah" ~ "You got me like woah-woah-woah-woah-woah-woah-woah-woah-woah" (100%)
[15:07:59] 🔄 [02_Calm Down_20260507] Step 2 API: originality retry 1/3...
[15:08:07] ⚠️  [01_People_20260507] Step 2 API retry 1: originality 54%
[15:08:07] 🔄 [01_People_20260507] Step 2 API: originality retry 2/3...
[15:08:50] ⚠️  [01_People_20260507] Step 2 API originality retry 2 failed: Expecting value: line 1 column 1 (char 0)
[15:08:50] ⚠️  [01_People_20260507] Step 2 API: best originality 54% after 3 retries
[15:08:50] ✅ [01_People_20260507] Step 2 API: 《Fold Before Dawn》 | 69.9s | in=39412 out=4701 | ~$0.189
[15:09:04] ⚠️  [02_Calm Down_20260507] Step 2 API originality retry 1 failed: Expecting value: line 1 column 1 (char 0)
[15:09:04] ⚠️  [02_Calm Down_20260507] Step 2 API: best originality 42% after 3 retries
[15:09:04] ✅ [02_Calm Down_20260507] Step 2 API: 《Sugarcane Rush》 | 61.3s | in=19199 out=3101 | ~$0.104
{"timestamp": "2026-05-07T15:06:57.647461+08:00", "batch_dir": "/srv/music-files-platform-next/pipeline/batch-20260507-145720-5140af", "profile": "__runtime_batch-20260507-145720-5140af", "concurrency": 3, "resume_mode": "each", "pending_song_count": 2, "groups": [{"group_index": 1, "songs": ["/srv/music-files-platform-next/pipeline/batch-20260507-145720-5140af/01_People_20260507", "/srv/music-files-platform-next/pipeline/batch-20260507-145720-5140af/02_Calm Down_20260507"], "success_count": 2, "failed_count": 0, "results": [{"status": "success", "song_dir": "/srv/music-files-platform-next/pipeline/batch-20260507-145720-5140af/01_People_20260507", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260507-145720-5140af/01_People_20260507/step2_json_b.json", "agent_summary": "API direct: Fold Before Dawn", "returncode": 0, "stderr": "", "attempt": 1, "attempts": [{"status": "success", "song_dir": "/srv/music-files-platform-next/pipeline/batch-20260507-145720-5140af/01_People_20260507", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260507-145720-5140af/01_People_20260507/step2_json_b.json", "agent_summary": "API direct: Fold Before Dawn", "returncode": 0, "stderr": "", "attempt": 1}]}, {"status": "success", "song_dir": "/srv/music-files-platform-next/pipeline/batch-20260507-145720-5140af/02_Calm Down_20260507", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260507-145720-5140af/02_Calm Down_20260507/step2_json_b.json", "agent_summary": "API direct: Sugarcane Rush", "returncode": 0, "stderr": "", "attempt": 1, "attempts": [{"status": "success", "song_dir": "/srv/music-files-platform-next/pipeline/batch-20260507-145720-5140af/02_Calm Down_20260507", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260507-145720-5140af/02_Calm Down_20260507/step2_json_b.json", "agent_summary": "API direct: Sugarcane Rush", "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-20260507-145720-5140af\nSkip Suno: False | Step1 only: False | Version: v4\n======================================================================\n\n[15:09:06] 🏥 Health check...\n[15:09:08] ✅ qishui: OK\n[15:09:08] ✅ netease: OK\n[15:09:08] ✅ qq: OK\n\n  📝 [01_People_20260507] lyrics stripped: 4299c → 4293c\n[15:09:08] 🎵 [01_People_20260507] Step 3: Suno generation (weirdness=50, style_influence=50)...\n[15:09:08] 🎨 [01_People_20260507] Step 4: SeeDream cover (parallel)...\n  📝 [02_Calm Down_20260507] lyrics stripped: 6896c → 5000c\n[15:09:08] 🎵 [02_Calm Down_20260507] Step 3: Suno generation (weirdness=50, style_influence=50)...\n[15:09:08] 🎨 [02_Calm Down_20260507] Step 4: SeeDream cover (parallel)...\n  ✅ submitted: ['0fd926f2', 'f5001d3d']\n  ✅ submitted: ['f7d29f6d', 'a13a1cc3']\n  🎵 0fd926f2... → submitted\n  🎵 f5001d3d... → submitted\n  🎵 f7d29f6d... → submitted\n  🎵 a13a1cc3... → submitted\n  🎵 0fd926f2... → queued\n  🎵 f5001d3d... → queued\n  🎵 f7d29f6d... → queued\n  🎵 a13a1cc3... → queued\n  🎵 0fd926f2... → streaming\n  🎵 f5001d3d... → streaming\n  🎵 f7d29f6d... → streaming\n  🎵 a13a1cc3... → streaming\n  🎵 0fd926f2... → complete\n  🎵 f7d29f6d... → complete\n  🎵 a13a1cc3... → complete\n[15:11:36]    🎧 [01_People_20260507] Song 1: https://cdn1.suno.ai/f7d29f6d-b169-4e9f-b1d3-fb2fa011768e.mp3\n[15:11:36]    🎧 [01_People_20260507] Song 2: https://cdn1.suno.ai/a13a1cc3-19d7-43dc-8d5d-874ec564dc2d.mp3\n[15:11:36] 🎛️ [01_People_20260507] Step 3.5: 混音...\n[15:11:54]    🎚️ [01_People_20260507] Song 1: pop | 低66/中31/高3%\n  🎵 f5001d3d... → complete\n[15:11:54]    🎧 [02_Calm Down_20260507] Song 1: https://cdn1.suno.ai/0fd926f2-929f-4db3-9def-c9925e0516bd.mp3\n[15:11:54]    🎧 [02_Calm Down_20260507] Song 2: https://cdn1.suno.ai/f5001d3d-1051-4cba-aaa4-82c94bd5eeae.mp3\n[15:11:54] 🎛️ [02_Calm Down_20260507] Step 3.5: 混音...\n[15:12:09]    🎚️ [01_People_20260507] Song 2: edm | 低60/中37/高3%\n[15:12:09] ✅ [01_People_20260507] Step 3.5: 32.9s | 2 songs mixed\n[15:12:09] ⚠️  [01_People_20260507] Step 4: http_403 (non-fatal)\n[15:12:22]    🎚️ [02_Calm Down_20260507] Song 1: pop | 低78/中20/高2%\n[15:12:35]    🎚️ [02_Calm Down_20260507] Song 2: pop | 低77/中20/高4%\n[15:12:35] ✅ [02_Calm Down_20260507] Step 3.5: 41.3s | 2 songs mixed\n[15:12:35] ⚠️  [02_Calm Down_20260507] Step 4: http_403 (non-fatal)\n\n======================================================================\nSUMMARY | 207s (3.5min)\n======================================================================\n✅ Done: 2 | ⏳ Awaiting Step 2: 0 | ❌ Failed: 0\n[MasterDB] ✅ 批次 batch-20260507-145720-5140af → +2 新增, ~0 更新 | 总计 638 首\n", "stderr_tail": "[profile] ✅ Loaded profile '__runtime_batch-20260507-145720-5140af' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260507-145720-5140af.yaml\n", "summary": {"timestamp": "2026-05-07T15:12:35.516813+08:00", "wall_clock": 207.3, "total": 2, "success": 2, "awaiting_step2": 0, "failed": 0}}, "status": "success"}
[exit 0]

=== 2026-05-07 15:12: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-20260507-145720-5140af ===
[Feishu] ✅ Exported 2 songs to: https://ccnu62373cgc.feishu.cn/sheets/YROKsomEChAhMltzuOccM0A3noc
[Feishu] 📐 Expanded master sheet from 577 to 679 rows
[Feishu] ✅ Appended 2 new songs to master sheet (rows 578-579)
[MasterDB] ✅ 批次 batch-20260507-145720-5140af → +2 新增, ~0 更新 | 总计 579 首
[Feishu IM] ✅ Text sent: 📊 本批次结果表格：https://ccnu62373cgc.feishu.cn/sheets/YROKsomEChAh
[15:12:45] 📨 Step 5: Sending files to Feishu IM...
[Feishu IM] ✅ [Fold Before Dawn] topic head sent (message_id=om_x100b50f7f812a4e0b2e4cb073ddbb1a)
[Feishu IM] ✅ [Fold Before Dawn] Fold Before Dawn_V1_raw.mp3 replied
[Feishu IM] ✅ [Fold Before Dawn] Fold Before Dawn_V1_mixed.mp3 replied
[Feishu IM] ✅ [Fold Before Dawn] Fold Before Dawn_V2_raw.mp3 replied
[Feishu IM] ✅ [Fold Before Dawn] Fold Before Dawn_V2_mixed.mp3 replied
[Feishu IM] ✅ [Sugarcane Rush] topic head sent (message_id=om_x100b50f7f9076c80b15324c8e8a1cc8)
[Feishu IM] ✅ [Sugarcane Rush] Sugarcane Rush_V1_raw.mp3 replied
[Feishu IM] ✅ [Sugarcane Rush] Sugarcane Rush_V1_mixed.mp3 replied
[Feishu IM] ✅ [Sugarcane Rush] Sugarcane Rush_V2_raw.mp3 replied
[Feishu IM] ✅ [Sugarcane Rush] Sugarcane Rush_V2_mixed.mp3 replied
[Feishu] ✅ Already on file server: /srv/music-files-platform-next/pipeline/batch-20260507-145720-5140af
[Feishu] ✅ Archived to GDrive: /mnt/gdrive/music-pipeline/batch-20260507-145720-5140af
[Feishu] 📦 Local files kept at: /srv/music-files-platform-next/pipeline/batch-20260507-145720-5140af

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