← 返回
AI智能 中文

DJ mp3 sourcer

Download music from links (YouTube, Spotify, etc.) by finding the best available source. Searches across platforms in priority order: Bandcamp, Beatport, Ama...
从链接(YouTube、Spotify等)下载音乐,自动寻找最佳音源。按优先级跨平台搜索:Bandcamp、Beatport、Ama...
robinnnnn
AI智能 clawhub v1.0.2 1 版本 99759.8 Key: 无需
★ 0
Stars
📥 1,246
下载
💾 68
安装
1
版本
#latest

概述

DJ MP3 Sourcer

DJ-oriented music downloading skill. Takes any music link and finds the best available source, prioritizing extended mixes and MP3 320k output.

> ⚠️ Legal Notice: This skill is intended for downloading music you have the right to access — purchases, free releases, creative commons, etc. Respect copyright laws in your jurisdiction. The author is not responsible for misuse.

Dependencies

pip install yt-dlp spotdl
brew install ffmpeg  # needed by yt-dlp for audio extraction

# optional
pip install bandcamp-dl  # for free bandcamp downloads

Source Priority

Search in this order — stop at the first match:

  1. Bandcamp — supports artists directly, often has extended mixes
  2. Beatport — DJ-standard, has BPM/key metadata, extended mixes
  3. Amazon Music — digital purchase option
  4. Spotify (via spotdl) — good metadata/tagging, 320k MP3
  5. YouTube (via yt-dlp) — fallback, always works

For paid sources (bandcamp, beatport, amazon), surface the purchase link with price. For free sources, download directly.

If free only mode is enabled, skip steps 1-3 and go straight to spotdl → yt-dlp.

Core Rule: Prefer Extended Mixes

Always prefer the extended mix over radio edits. An extended mix from a lower-priority source beats a radio edit from a higher-priority one.

Example: extended mix on YouTube > radio edit on Spotify.

When searching, append "extended mix" to queries. If only a radio edit exists, note it in the output.

Workflow

  1. Identify the track — extract artist + title:

```bash

yt-dlp --dump-json "" | jq '{title, artist: .artist // .uploader, duration}'

```

  1. Search each source using web_search:

```

" extended mix site:bandcamp.com"</p><p> "<artist> <title> extended mix site:beatport.com"</p><p> "<artist> <title> site:amazon.com/music"</p><p> ```</p><ol><li><strong>Download or link</strong> — free sources download; paid sources return purchase URL with price</li><li><strong>Tag the file</strong> — artist, title, album, cover art. Note BPM/key if available from beatport.</li></ol><h2>Download Commands</h2><h3>spotdl</h3><pre><code>spotdl download "<spotify-url>" --output "{artist} - {title}" --format mp3 --bitrate 320k </code></pre><h3>yt-dlp</h3><pre><code>yt-dlp -x --audio-format mp3 --audio-quality 0 \ --embed-thumbnail --add-metadata \ --metadata-from-title "%(artist)s - %(title)s" \ -o "%(artist)s - %(title)s.%(ext)s" "<url>" </code></pre><h2>Post-Download: Filename Normalization</h2><p>yt-dlp filenames are often messy (<code>NA -</code> prefixes, <code>(Official Video)</code> suffixes, label names, wrong artist credits). <strong>Always</strong> run the normalization script after downloads complete.</p><p><strong>Usage:</strong></p><pre><code># 1. Write the tracklist as JSON (from the parsed tracklist in step 2) cat > /tmp/tracklist.json << 'EOF' [{"artist": "Karol G", "title": "Ivonny Bonita"}, {"artist": "Doja Cat", "title": "Woman (Never Dull's Disco Rework)"}] EOF # 2. Run the normalize script scripts/normalize-filenames.sh ~/Downloads/set-name /tmp/tracklist.json </code></pre><p>The script fuzzy-matches each mp3 in the directory to a tracklist entry and renames to clean <code>Artist - Title.mp3</code> format. Unmatched files are left untouched.</p><p><strong>The tracklist is the source of truth for filenames</strong>, not YouTube metadata.</p><h2>Configuration</h2><table><thead><tr><th>Setting</th><th>Default</th><th>Notes</th></tr></thead><tbody><tr><td>---------</td><td>---------</td><td>-------</td></tr><tr><td>Output directory</td><td><code>~/Downloads/</code></td><td>Where files are saved (subfolder per set when used with dj-set-ripper)</td></tr><tr><td>Format</td><td>mp3 320k</td><td>High-bitrate MP3; configurable to flac if needed</td></tr><tr><td>Extended mix</td><td>always</td><td>Prefer extended/original mix over radio edit</td></tr><tr><td>Free only</td><td>false</td><td>When true, skip paid sources (bandcamp, beatport, amazon) — only use spotdl and yt-dlp</td></tr></tbody></table><h2>Batch Processing</h2><p>When given multiple links, process in parallel using sub-agents (<code>sessions_spawn</code>). Report results as each track completes.</p><h2>Edge Cases</h2><ul><li><strong>DJ mixes / long sets</strong> — download via yt-dlp directly, skip source searching</li><li><strong>Unavailable tracks</strong> — report clearly, suggest alternatives if found</li><li><strong>Region-locked content</strong> — note restriction, try alternative sources</li><li><strong>Remix vs original</strong> — if the link is a specific remix, search for that exact remix, not the original</li></ul></div> </div> </div> <div id="tab-versions" class="detail-content"> <div class="detail-section"> <h2>版本历史</h2> <p style="margin-bottom:12px;font-size:14px;color:#94a3b8;">共 1 个版本</p> <ul class="version-list"> <li> <div> <span class="version-tag">v1.0.2</span> <span style="font-size:11px;color:#5b6abf;margin-left:8px;background:#eef0ff;padding:1px 8px;border-radius:10px;">当前</span> </div> <div style="font-size:12px;color:#94a3b8;"> 2026-03-29 05:34 安全 安全 </div> </li> </ul> </div> </div> <div id="tab-security" class="detail-content"> <div class="detail-section"> <h2>安全检测</h2> <div class="sec-grid"> <div class="sec-card"> <h4>腾讯云安全 (Keen)</h4> <div class="sec-status sec-safe"> 安全,无风险 </div> <a href="https://tix.qq.com/search/skill?keyword=ed7759935ec1465e0d37067e320ec14e" target="_blank">查看报告</a> </div> <div class="sec-card"> <h4>腾讯云安全 (Sanbu)</h4> <div class="sec-status sec-safe"> 安全,无风险 </div> <a href="https://static.cloudsec.tencent.com/html-report-v2/2026/05/25/397262_af2dcca04b3920a9914b2fa069c055ea.html?q-sign-algorithm=sha1&q-ak=AKID8JMG1bzBC1dz96qNhssfFftujT1NCoFi&q-sign-time=1781287569%3B1812823569&q-key-time=1781287569%3B1812823569&q-header-list=host&q-url-param-list=&q-signature=48656b1580a620652c107a71fdcf42c1086985da" target="_blank">查看报告</a> </div> </div> </div> </div> <!-- Recommended Skills --> <div style="margin-top:24px;"> <h2 style="font-size:18px;font-weight:600;margin-bottom:16px;">🔗 相关推荐</h2> <div class="rec-grid"> <div class="rec-card"> <span class="badge-cat" style="margin-bottom:8px;display:inline-block;">productivity</span> <h3><a href="/s/dj-set-ripper">DJ set ripper</a></h3> <div class="rec-owner">robinnnnn</div> <div class="rec-desc">从DJ Set或混音中下载单曲。给定YouTube、SoundCloud、Mixcloud或1001Tracklists的链接,从页面描述中提取曲目列表...</div> <div class="rec-stats"> <span style="color:#f39c12;">★ 0</span> <span style="color:#5b6abf;">📥 1,190</span> </div> </div> <div class="rec-card"> <span class="badge-cat" style="margin-bottom:8px;display:inline-block;">ai-intelligence</span> <h3><a href="/s/ontology">ontology</a></h3> <div class="rec-owner">oswalpalash</div> <div class="rec-desc">类型化知识图谱,用于结构化智能体记忆与可组合技能。支持创建/查询实体(人员、项目、任务、事件、文档)及关联...</div> <div class="rec-stats"> <span style="color:#f39c12;">★ 710</span> <span style="color:#5b6abf;">📥 243,639</span> </div> </div> <div class="rec-card"> <span class="badge-cat" style="margin-bottom:8px;display:inline-block;">ai-intelligence</span> <h3><a href="/s/self-improving-agent">self-improving agent</a></h3> <div class="rec-owner">pskoett</div> <div class="rec-desc">捕获经验教训、错误和纠正,以实现持续改进。使用时机:(1)命令或操作意外失败;(2)用户纠正……</div> <div class="rec-stats"> <span style="color:#f39c12;">★ 4,058</span> <span style="color:#5b6abf;">📥 797,429</span> </div> </div> </div> </div> </div> <script> document.addEventListener('DOMContentLoaded',function(){ document.querySelectorAll('.detail-tab').forEach(function(btn){ btn.addEventListener('click',function(e){ var tab = this.getAttribute('data-tab'); document.querySelectorAll('.detail-tab').forEach(function(b){b.classList.remove('active')}); document.querySelectorAll('.detail-content').forEach(function(c){c.classList.remove('active')}); this.classList.add('active'); var el = document.getElementById('tab-'+tab); if(el) el.classList.add('active'); }); }); }); </script> <div class="footer"> <p>Skill工具集 © 2026</p> </div></body> </html>