
=== 2026-04-22 15:10:14 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/pipeline.py /srv/music-files-platform-next/pipeline/batch-20260422-151014-29323f/_input.json -o /srv/music-files-platform-next/pipeline/batch-20260422-151014-29323f -cg 2 -cs 2 --skip-feishu --profile __runtime_batch-20260422-151014-29323f --target-language zh --step1-only ===
[profile] ✅ Loaded profile '__runtime_batch-20260422-151014-29323f' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260422-151014-29323f.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')
/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')
[   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   ] 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')
[   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')
[   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')
/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 | 7 songs
======================================================================
Gemini concurrency: 2 | Suno concurrency: 2
Output: /srv/music-files-platform-next/pipeline/batch-20260422-151014-29323f
Skip Suno: False | Step1 only: True | Version: v4
======================================================================

[15:10:16] 🏥 Health check...
[15:10:17] ✅ qishui: OK
[15:10:17] ✅ netease: OK
[15:10:17] ✅ qq: OK

[15:10:17] 🔍 [01_Ocean Eyes_20260422] Step 0: Fetching...
[15:10:17] 🔍 [02_Bad Guy_20260422] Step 0: Fetching...
[15:10:17] 🔍 [03_When the Party's Over_20260422] Step 0: Fetching...
[15:10:17] 🔍 [04_Bury a Friend_20260422] Step 0: Fetching...
[15:10:17] 🔍 [05_Everything I Wanted_20260422] Step 0: Fetching...
[15:10:17] 🔍 [06_Happier Than Ever_20260422] Step 0: Fetching...
[15:10:17] 🔍 [07_No Time to Die_20260422] Step 0: Fetching...
[15:10:20] ✅ [03_When the Party's Over_20260422] Step 0: netease | 950c
[15:10:20] ⬇️  [03_When the Party's Over_20260422] Step 0.5: Download from netease...
[15:10:20] ✅ [02_Bad Guy_20260422] Step 0: netease | 1448c
[15:10:20] ⬇️  [02_Bad Guy_20260422] Step 0.5: Download from netease...
[15:10:20] ✅ [01_Ocean Eyes_20260422] Step 0: netease | 909c
[15:10:20] ⬇️  [01_Ocean Eyes_20260422] Step 0.5: Download from netease...
[15:10:22] ⚠️  [qishui] Source mismatch: requested '6988014596003760129' got '7627018553329403905', skipping
[15:10:22] 🔄 [06_Happier Than Ever_20260422] Step 0: retry 1/2 in 5s...
[15:10:23] ✅ [04_Bury a Friend_20260422] Step 0: netease | 1871c
[15:10:23] ⬇️  [04_Bury a Friend_20260422] Step 0.5: Download from netease...
[15:10:23] ✅ [05_Everything I Wanted_20260422] Step 0: netease | 1573c
[15:10:23] ⬇️  [05_Everything I Wanted_20260422] Step 0.5: Download from netease...
[15:10:25] ✅ [07_No Time to Die_20260422] Step 0: netease | 925c
[15:10:25] ⬇️  [07_No Time to Die_20260422] Step 0.5: Download from netease...
[15:10:26] ✅ [03_When the Party's Over_20260422] Step 0.5: 3684580 bytes | 196.1s
[15:10:26] 🔬 [03_When the Party's Over_20260422] Step 0.75: Audio features...
[15:10:26] ✅ [02_Bad Guy_20260422] Step 0.5: 4128160 bytes | 194.1s
[15:10:26] 🔬 [02_Bad Guy_20260422] Step 0.75: Audio features...
[15:10:27] ✅ [01_Ocean Eyes_20260422] Step 0.5: 3977581 bytes | 202.8s
[15:10:27] 🔬 [01_Ocean Eyes_20260422] Step 0.75: Audio features...
[15:10:28] ⚠️  [qishui] Source mismatch: requested '6988014596003760129' got '7627018553329403905', skipping
[15:10:28] 🔄 [06_Happier Than Ever_20260422] Step 0: retry 2/2 in 10s...
[15:10:42] ✅ [07_No Time to Die_20260422] Step 0.5: 4525504 bytes | 242.3s
[15:10:42] 🔬 [07_No Time to Die_20260422] Step 0.75: Audio features...
[15:10:42] ✅ [05_Everything I Wanted_20260422] Step 0.5: 4773966 bytes | 245.3s
[15:10:42] 🔬 [05_Everything I Wanted_20260422] Step 0.75: Audio features...
[15:10:42] ✅ [04_Bury a Friend_20260422] Step 0.5: 3702372 bytes | 193.2s
[15:10:42] 🔬 [04_Bury a Friend_20260422] Step 0.75: Audio features...
[15:10:43] ⚠️  [qishui] Source mismatch: requested '6988014596003760129' got '7627018553329403905', skipping
[15:10:43] ❌ [06_Happier Than Ever_20260422] Step 0: No audio URL
[15:11:07] ✅ [03_When the Party's Over_20260422] Step 0.75: BPM=123.53 Key=E major (41.6s)
[15:11:07] 🧠 [03_When the Party's Over_20260422] Step 1: Gemini (queuing)...
[15:11:07] 🌐 Step 1: target_language=zh (injecting override directive)
[15:11:08] ✅ [02_Bad Guy_20260422] Step 0.75: BPM=135.06 Key=G major (41.7s)
[15:11:08] 🧠 [02_Bad Guy_20260422] Step 1: Gemini (queuing)...
[15:11:08] 🌐 Step 1: target_language=zh (injecting override directive)
[15:11:35] ✅ [01_Ocean Eyes_20260422] Step 0.75: BPM=96.02 Key=E minor (27.2s)
[15:11:35] 🧠 [01_Ocean Eyes_20260422] Step 1: Gemini (queuing)...
[15:11:35] 🌐 Step 1: target_language=zh (injecting override directive)
[15:11:49] ✅ [07_No Time to Die_20260422] Step 0.75: BPM=143.73 Key=E minor (40.8s)
[15:11:49] 🧠 [07_No Time to Die_20260422] Step 1: Gemini (queuing)...
[15:11:49] 🌐 Step 1: target_language=zh (injecting override directive)
[15:12:14] ✅ [04_Bury a Friend_20260422] Step 0.75: BPM=118.34 Key=G minor (24.4s)
[15:12:14] 🧠 [04_Bury a Friend_20260422] Step 1: Gemini (queuing)...
[15:12:14] 🌐 Step 1: target_language=zh (injecting override directive)
[15:12:16] ✅ [05_Everything I Wanted_20260422] Step 0.75: BPM=120.01 Key=A major (41.6s)
[15:12:16] 🧠 [05_Everything I Wanted_20260422] Step 1: Gemini (queuing)...
[15:12:16] 🌐 Step 1: target_language=zh (injecting override directive)
  📊 Gemini official: 46s | prompt_tokens=9782 completion=1372
[15:12:59] ⚠️  [03_When the Party's Over_20260422] Step 1.5: prompt 1092c > 1000c, compressing...
  📏 [03_When the Party's Over_20260422] prompt 1092c → 914c (smart truncate)
[15:12:59] ✅ [03_When the Party's Over_20260422] Step 1.5: prompt compressed 1092c → 914c
[15:12:59] ✅ [03_When the Party's Over_20260422] Step 1: 45.6s | prompt=914c | prompt_ok=True lyrics_ok=True
  📊 Gemini official: 46s | prompt_tokens=9862 completion=1563
[15:13:02] ⚠️  [02_Bad Guy_20260422] Step 1.5: prompt 1155c > 1000c, compressing...
  📏 [02_Bad Guy_20260422] prompt 1155c → 835c (smart truncate)
[15:13:02] ✅ [02_Bad Guy_20260422] Step 1.5: prompt compressed 1155c → 835c
[15:13:02] ✅ [02_Bad Guy_20260422] Step 1: 45.7s | prompt=835c | prompt_ok=True lyrics_ok=True
  📊 Gemini official: 38s | prompt_tokens=11240 completion=1537
[15:13:40] ⚠️  [07_No Time to Die_20260422] Step 1.5: prompt 1297c > 1000c, compressing...
  📏 [07_No Time to Die_20260422] prompt 1297c → 980c (smart truncate)
[15:13:40] ✅ [07_No Time to Die_20260422] Step 1.5: prompt compressed 1297c → 980c
[15:13:40] ✅ [07_No Time to Die_20260422] Step 1: 37.8s | prompt=980c | prompt_ok=True lyrics_ok=True
  📊 Gemini official: 42s | prompt_tokens=9936 completion=1534
[15:13:41] ⚠️  [01_Ocean Eyes_20260422] Step 1.5: prompt 1164c > 1000c, compressing...
  📏 [01_Ocean Eyes_20260422] prompt 1164c → 833c (smart truncate)
[15:13:41] ✅ [01_Ocean Eyes_20260422] Step 1.5: prompt compressed 1164c → 833c
[15:13:41] ✅ [01_Ocean Eyes_20260422] Step 1: 41.9s | prompt=833c | prompt_ok=True lyrics_ok=True
  📊 Gemini official: 41s | prompt_tokens=11512 completion=1695
[15:14:22] ⚠️  [05_Everything I Wanted_20260422] Step 1.5: prompt 1129c > 1000c, compressing...
  📏 [05_Everything I Wanted_20260422] prompt 1129c → 830c (smart truncate)
[15:14:22] ✅ [05_Everything I Wanted_20260422] Step 1.5: prompt compressed 1129c → 830c
[15:14:22] ✅ [05_Everything I Wanted_20260422] Step 1: 40.9s | prompt=830c | prompt_ok=True lyrics_ok=True
  📊 Gemini official: 46s | prompt_tokens=9924 completion=1427
[15:14:26] ⚠️  [04_Bury a Friend_20260422] Step 1.5: prompt 1232c > 1000c, compressing...
  📏 [04_Bury a Friend_20260422] prompt 1232c → 886c (smart truncate)
[15:14:26] ✅ [04_Bury a Friend_20260422] Step 1.5: prompt compressed 1232c → 886c
[15:14:26] ✅ [04_Bury a Friend_20260422] Step 1: 46.0s | prompt=886c | prompt_ok=True lyrics_ok=True

======================================================================
SUMMARY | 249s (4.1min)
======================================================================
✅ Done: 6 | ⏳ Awaiting Step 2: 0 | ❌ Failed: 1
[MasterDB] ✅ 批次 batch-20260422-151014-29323f → +0 新增, ~0 更新 | 总计 563 首
[exit 0]

=== 2026-04-22 15:14:28 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/orchestrate_phase2.py /srv/music-files-platform-next/pipeline/batch-20260422-151014-29323f --profile grammy --resume-mode each --skip-feishu --target-language zh ===
[phase2] batch=batch-20260422-151014-29323f pending=6 groups=2
[phase2] group 1/2 -> 01_Ocean Eyes_20260422, 02_Bad Guy_20260422, 03_When the Party's Over_20260422
[profile] ✅ Loaded profile 'grammy' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/grammy.yaml
[phase2] 🌐 01_Ocean Eyes_20260422: target_language=zh
[profile] ✅ Loaded profile 'grammy' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/grammy.yaml
[phase2] 🌐 02_Bad Guy_20260422: target_language=zh
[profile] ✅ Loaded profile 'grammy' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/grammy.yaml
[phase2] 🌐 03_When the Party's Over_20260422: target_language=zh
[phase2] retry 1/1 for 02_Bad Guy_20260422 in 10s
[profile] ✅ Loaded profile 'grammy' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/grammy.yaml
[phase2] 🌐 02_Bad Guy_20260422: target_language=zh
[phase2] resume -> /usr/bin/python3 /srv/repos/3000music-platform-next/services/music-pipeline/scripts/pipeline.py /srv/music-files-platform-next/pipeline/batch-20260422-151014-29323f/_manifest.json --resume /srv/music-files-platform-next/pipeline/batch-20260422-151014-29323f --profile grammy --skip-feishu
[phase2] group 2/2 -> all songs already handled, skipping
[15:14:28] 🌐 [01_Ocean Eyes_20260422] Step 2: target_language=zh → lang_mode=ZH
[15:14:28] 🤖 [01_Ocean Eyes_20260422] Step 2 API: 28352 chars ≈ 7088 tokens → claude-sonnet-4-6
[15:14:28] 🌐 [02_Bad Guy_20260422] Step 2: target_language=zh → lang_mode=ZH
[15:14:28] 🤖 [02_Bad Guy_20260422] Step 2 API: 28586 chars ≈ 7146 tokens → claude-sonnet-4-6
[15:14:28] 🌐 [03_When the Party's Over_20260422] Step 2: target_language=zh → lang_mode=ZH
[15:14:28] 🤖 [03_When the Party's Over_20260422] Step 2 API: 27982 chars ≈ 6995 tokens → claude-sonnet-4-6
[15:15:02] ✅ [01_Ocean Eyes_20260422] Step 2 API: 《潮水线》 | 33.9s | in=15020 out=2336 | ~$0.080
[15:15:11] ✅ [03_When the Party's Over_20260422] Step 2 API: 《半截蜡烛》 | 43.1s | in=14830 out=2150 | ~$0.077
[15:15:17] ⚠️  [02_Bad Guy_20260422] Step 2 API attempt 1: JSON parse error: Expecting ',' delimiter: line 5 column 3657 (char 4564)
[15:15:55] ⚠️  [02_Bad Guy_20260422] Step 2 API attempt 2: JSON parse error: Expecting ',' delimiter: line 6 column 164 (char 4759)
[15:16:05] 🌐 [02_Bad Guy_20260422] Step 2: target_language=zh → lang_mode=ZH
[15:16:05] 🤖 [02_Bad Guy_20260422] Step 2 API: 28586 chars ≈ 7146 tokens → claude-sonnet-4-6
[15:16:43] ✅ [02_Bad Guy_20260422] Step 2 API: 《钝刺》 | 38.2s | in=15011 out=2361 | ~$0.080
{"timestamp": "2026-04-22T15:14:28.217176+08:00", "batch_dir": "/srv/music-files-platform-next/pipeline/batch-20260422-151014-29323f", "profile": "grammy", "concurrency": 3, "resume_mode": "each", "pending_song_count": 6, "groups": [{"group_index": 1, "songs": ["/srv/music-files-platform-next/pipeline/batch-20260422-151014-29323f/01_Ocean Eyes_20260422", "/srv/music-files-platform-next/pipeline/batch-20260422-151014-29323f/02_Bad Guy_20260422", "/srv/music-files-platform-next/pipeline/batch-20260422-151014-29323f/03_When the Party's Over_20260422"], "success_count": 3, "failed_count": 0, "results": [{"status": "success", "song_dir": "/srv/music-files-platform-next/pipeline/batch-20260422-151014-29323f/01_Ocean Eyes_20260422", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260422-151014-29323f/01_Ocean Eyes_20260422/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-20260422-151014-29323f/01_Ocean Eyes_20260422", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260422-151014-29323f/01_Ocean Eyes_20260422/step2_json_b.json", "agent_summary": "API direct: 潮水线", "returncode": 0, "stderr": "", "attempt": 1}]}, {"status": "success", "song_dir": "/srv/music-files-platform-next/pipeline/batch-20260422-151014-29323f/02_Bad Guy_20260422", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260422-151014-29323f/02_Bad Guy_20260422/step2_json_b.json", "agent_summary": "API direct: 钝刺", "returncode": 0, "stderr": "", "attempt": 2, "attempts": [{"status": "error", "song_dir": "/srv/music-files-platform-next/pipeline/batch-20260422-151014-29323f/02_Bad Guy_20260422", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260422-151014-29323f/02_Bad Guy_20260422/step2_json_b.json", "error_type": "api_error", "error": "All 2 attempts failed: JSON parse error: Expecting ',' delimiter: line 6 column 164 (char 4759)", "agent_summary": null, "returncode": 1, "stderr": "All 2 attempts failed: JSON parse error: Expecting ',' delimiter: line 6 column 164 (char 4759)", "attempt": 1}, {"status": "success", "song_dir": "/srv/music-files-platform-next/pipeline/batch-20260422-151014-29323f/02_Bad Guy_20260422", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260422-151014-29323f/02_Bad Guy_20260422/step2_json_b.json", "agent_summary": "API direct: 钝刺", "returncode": 0, "stderr": "", "attempt": 2}]}, {"status": "success", "song_dir": "/srv/music-files-platform-next/pipeline/batch-20260422-151014-29323f/03_When the Party's Over_20260422", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260422-151014-29323f/03_When the Party's Over_20260422/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-20260422-151014-29323f/03_When the Party's Over_20260422", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260422-151014-29323f/03_When the Party's Over_20260422/step2_json_b.json", "agent_summary": "API direct: 半截蜡烛", "returncode": 0, "stderr": "", "attempt": 1}]}]}], "resume": {"status": "success", "returncode": 0, "stdout_tail": "g 2: pop | 低61/中37/高1%\n[15:19:27] ✅ [03_When the Party's Over_20260422] Step 3.5: 40.0s | 2 songs mixed\n[15:19:27] ⚠️  [04_Bury a Friend_20260422] Step 2 API originality retry 3 failed: Expecting value: line 1 column 1 (char 0)\n[15:19:27] ⚠️  [04_Bury a Friend_20260422] Step 2 API: best originality 57% after 3 retries\n[15:19:27] ✅ [04_Bury a Friend_20260422] Step 2 API: 《Shed Skin》 | 113.0s | in=52940 out=6514 | ~$0.257\n[15:19:27] ✅ [04_Bury a Friend_20260422] Step 2.5: originality 57% ✓\n[15:19:27] ✅ [04_Bury a Friend_20260422] Step 2: 《Shed Skin》\n[15:19:27] 📁 [04_Bury a Friend_20260422] Renamed → 04_Bury a Friend_Shed_Skin_20260422\n  📝 [04_Bury a Friend_Shed_Skin_20260422] lyrics stripped: 4350c → 4345c\n[15:19:27] 🎵 [04_Bury a Friend_Shed_Skin_20260422] Step 3: Suno generation (weirdness=50, style_influence=50)...\n[15:19:27] 🎨 [04_Bury a Friend_Shed_Skin_20260422] Step 4: SeeDream cover (parallel)...\n[15:19:48]    🎚️ [01_Ocean Eyes_20260422] Song 1: rnb | 低60/中38/高2%\n[15:20:08]    🎚️ [02_Bad Guy_20260422] Song 1: edm | 低85/中13/高2%\n  ⏱  poll timeout, retry...\n  ✅ submitted: ['5fd7c523', '457368c4']\n[15:20:08] ⚠️  [03_When the Party's Over_20260422] Cover download failed: \n[15:20:08] ✅ [03_When the Party's Over_20260422] Step 4: 15.6s | https://platform.cdn.acedata.cloud/seedream/378d9bca-1aea-476e-99e6-674d2b3962d9.jpg\n  🎵 5fd7c523... → streaming\n  🎵 457368c4... → streaming\n[15:20:29]    🎚️ [01_Ocean Eyes_20260422] Song 2: rnb | 低65/中33/高2%\n[15:20:29] ✅ [01_Ocean Eyes_20260422] Step 3.5: 78.7s | 2 songs mixed\n[15:20:47]    🎚️ [02_Bad Guy_20260422] Song 2: edm | 低88/中11/高1%\n[15:20:47] ✅ [02_Bad Guy_20260422] Step 3.5: 96.5s | 2 songs mixed\n  🎵 ca6eb41c... → streaming\n  🎵 7220c007... → streaming\n[15:20:48] ✅ [01_Ocean Eyes_20260422] Step 4: 15.7s | /srv/music-files-platform-next/pipeline/batch-20260422-151014-29323f/01_Ocean Eyes_20260422/cover_seedream.jpg\n[15:20:49] ✅ [02_Bad Guy_20260422] Step 4: 16.2s | /srv/music-files-platform-next/pipeline/batch-20260422-151014-29323f/02_Bad Guy_20260422/cover_seedream.jpg\n  🎵 ca6eb41c... → complete\n  🎵 5fd7c523... → complete\n  🎵 7220c007... → complete\n[15:21:30]    🎧 [05_Everything I Wanted_Tide_Marks_20260422] Song 1: https://cdn1.suno.ai/ca6eb41c-fe6b-4487-8440-48fa29d64947.mp3\n[15:21:30]    🎧 [05_Everything I Wanted_Tide_Marks_20260422] Song 2: https://cdn1.suno.ai/7220c007-663f-42cc-8509-6081bc985ff4.mp3\n[15:21:30] 🎛️ [05_Everything I Wanted_Tide_Marks_20260422] Step 3.5: 混音...\n[15:21:53]    🎚️ [05_Everything I Wanted_Tide_Marks_20260422] Song 1: pop | 低71/中28/高1%\n  🎵 457368c4... → complete\n[15:21:53]    🎧 [04_Bury a Friend_Shed_Skin_20260422] Song 1: https://cdn1.suno.ai/5fd7c523-f137-4c8f-a1fe-2222a1ebde9d.mp3\n[15:21:53]    🎧 [04_Bury a Friend_Shed_Skin_20260422] Song 2: https://cdn1.suno.ai/457368c4-3ff2-4591-bde8-1348ddf474d6.mp3\n[15:21:53] 🎛️ [04_Bury a Friend_Shed_Skin_20260422] Step 3.5: 混音...\n[15:22:15]    🎚️ [05_Everything I Wanted_Tide_Marks_20260422] Song 2: pop | 低71/中27/高2%\n[15:22:15] ✅ [05_Everything I Wanted_Tide_Marks_20260422] Step 3.5: 44.9s | 2 songs mixed\n[15:22:34]    🎚️ [04_Bury a Friend_Shed_Skin_20260422] Song 1: pop | 低53/中41/高6%\n[15:22:34] ✅ [05_Everything I Wanted_Tide_Marks_20260422] Step 4: 28.0s | /srv/music-files-platform-next/pipeline/batch-20260422-151014-29323f/05_Everything I Wanted_Tide_Marks_20260422/cover_seedream.jpg\n[15:22:55]    🎚️ [04_Bury a Friend_Shed_Skin_20260422] Song 2: pop | 低74/中21/高5%\n[15:22:55] ✅ [04_Bury a Friend_Shed_Skin_20260422] Step 3.5: 61.8s | 2 songs mixed\n[15:22:57] ✅ [04_Bury a Friend_Shed_Skin_20260422] Step 4: 79.8s | /srv/music-files-platform-next/pipeline/batch-20260422-151014-29323f/04_Bury a Friend_Shed_Skin_20260422/cover_seedream.jpg\n\n======================================================================\nSUMMARY | 368s (6.1min)\n======================================================================\n✅ Done: 5 | ⏳ Awaiting Step 2: 0 | ❌ Failed: 1\n[MasterDB] ✅ 批次 batch-20260422-151014-29323f → +5 新增, ~0 更新 | 总计 573 首\n", "stderr_tail": "[profile] ✅ Loaded profile 'grammy' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/grammy.yaml\n", "summary": {"timestamp": "2026-04-22T15:22:57.296429+08:00", "wall_clock": 368.1, "total": 7, "success": 5, "awaiting_step2": 0, "failed": 1}}, "status": "success"}
[exit 0]

=== 2026-04-22 15:22:58 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/steps/step5_feishu.py /srv/music-files-platform-next/pipeline/batch-20260422-151014-29323f ===
[Feishu] ✅ Exported 5 songs to: https://ccnu62373cgc.feishu.cn/sheets/PjSksOAxfhHjSlteEyJcdZ04nWj
[Feishu] 📐 Expanded master sheet from 509 to 614 rows
[Feishu] ✅ Appended 5 new songs to master sheet (rows 510-514)
[MasterDB] ✅ 批次 batch-20260422-151014-29323f → +5 新增, ~0 更新 | 总计 514 首
[Feishu IM] ✅ Text sent: 📊 本批次结果表格：https://ccnu62373cgc.feishu.cn/sheets/PjSksOAxfhHj
[15:23:07] 📨 Step 5: Sending files to Feishu IM...
[Feishu IM] ✅ [潮水线] topic head sent (message_id=om_x100b51b33b743ce8b2654729e6afbe3)
[Feishu IM] ✅ [潮水线] cover replied
[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 IM] ✅ [钝刺] topic head sent (message_id=om_x100b51b3387f9894b203a556ba2f009)
[Feishu IM] ✅ [钝刺] cover replied
[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 IM] ✅ [半截蜡烛] topic head sent (message_id=om_x100b51b3391f1c5cb24c012b30a0e0e)
[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 IM] ✅ [Shed Skin] topic head sent (message_id=om_x100b51b3363edc94b3666ca84593b51)
[Feishu IM] ✅ [Shed Skin] cover replied
[Feishu IM] ✅ [Shed Skin] Shed Skin_V1_raw.mp3 replied
[Feishu IM] ✅ [Shed Skin] Shed Skin_V1_mixed.mp3 replied
[Feishu IM] ✅ [Shed Skin] Shed Skin_V2_raw.mp3 replied
[Feishu IM] ✅ [Shed Skin] Shed Skin_V2_mixed.mp3 replied
[Feishu IM] ✅ [Tide Marks] topic head sent (message_id=om_x100b51b3372724bcb25603452b17c06)
[Feishu IM] ✅ [Tide Marks] cover replied
[Feishu IM] ✅ [Tide Marks] Tide Marks_V1_raw.mp3 replied
[Feishu IM] ✅ [Tide Marks] Tide Marks_V1_mixed.mp3 replied
[Feishu IM] ✅ [Tide Marks] Tide Marks_V2_raw.mp3 replied
[Feishu IM] ✅ [Tide Marks] Tide Marks_V2_mixed.mp3 replied
[Feishu IM] ✅ [Paper Spine] topic head sent (message_id=om_x100b51b335c43cb4b39f2f78dae9926)
[Feishu IM] ⚠️  [Paper Spine] Paper Spine_V1_raw.mp3 not found, skipping
[Feishu IM] ⚠️  [Paper Spine] Paper Spine_V1_mixed.mp3 not found, skipping
[Feishu IM] ⚠️  [Paper Spine] Paper Spine_V2_raw.mp3 not found, skipping
[Feishu IM] ⚠️  [Paper Spine] Paper Spine_V2_mixed.mp3 not found, skipping
[Feishu] ✅ Already on file server: /srv/music-files-platform-next/pipeline/batch-20260422-151014-29323f
[Feishu] ✅ Archived to GDrive: /mnt/gdrive/music-pipeline/batch-20260422-151014-29323f
[Feishu] 📦 Local files kept at: /srv/music-files-platform-next/pipeline/batch-20260422-151014-29323f

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