Token导航 LogoToken导航

Agent Skill · 研究检索

playlistgen(playlistgen 搜索)

playlistgen 用于查找、检索和筛选相关信息,适合在 OpenClaw 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

playlistgen 是研究检索类 Agent Skill,可用宿主为 OpenClaw,通过ClawHub获取,权限为接触敏感数据;许可证为 MIT-0,第三方扫描有提醒项,按安装量在研究检索类的 73,675 个 Skill 里排第 23,650。

总安装 4,211周安装 172GitHub Stars 公开资料未说明下载 1,362核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
MIT-0
版本
1.0.3

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:playlistgen(playlistgen 搜索)
来源仓库:https://github.com/asriverwang/playlistgen
安装命令:
openclaw skills install playlistgen
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install playlistgen

这个 Skill 是做什么的

研究检索类 Skill 主要解决「找资料、核对事实、把来源整理清楚」的问题,通常会让助手先检索再总结。

使用法学硕士从本地音乐库生成自然语言播放列表,在对音乐文件夹建立索引后可通过 Web 或 API 访问。

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 OpenClaw;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 openclaw skills install playlistgen;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要接触敏感数据,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

playlistgen 怎么安装?

在终端执行 openclaw skills install playlistgen。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

playlistgen 支持哪些 AI 工具?

公开资料标注支持 OpenClaw。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

playlistgen 需要什么权限?

权限级别是接触敏感数据。该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

playlistgen 是免费的吗?

来源标注的许可证是 MIT-0。本站不代收任何费用,也不托管安装包;能否商用、要不要署名,以许可证原文为准。

playlistgen 用的人多吗?

公开数据是累计安装 4,211 次,近一周安装 172 次,下载 1,362 次。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

playlistgen 安全吗?

第三方扫描有提醒项,说明存在需要人工确认的行为。安装前请打开源码看清它读了什么、联网到哪里。

值得选的地方和要先想清楚的地方

值得选的地方

  • 专注 OpenClaw 一种宿主,触发方式和使用习惯不用来回切换。
  • 许可证明确为 MIT-0,商用和分发边界好判断。

先想清楚的地方

  • 需要接触敏感数据,装到常用环境前要先评估影响面。
  • 第三方扫描存在提醒项或未通过项,需要人工逐条确认。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 OpenClaw,想直接扩展它能力的人。
  • 需要处理研究检索类任务、又不想每次都手写提示词的人。

不太适合

  • 环境里有大量密钥、凭证,不方便给第三方 Skill 读取的人。
  • 需要厂商级技术支持和 SLA 的生产系统。

研究检索类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
find-skills

寻找技能 · Codex、Claude

31,199,81316,486操作浏览器MIT有提醒
self-improving-agent

自我改进 Agent · OpenClaw

16,464,0023,396接触敏感数据MIT-0通过
soultrace

灵魂追踪 · Codex、Claude

7,588,94412需要联网未明确有提醒
self-improving

自我完善 · OpenClaw

6,829,2841,046需要联网MIT-0通过
microsoft-foundry

微软代工厂 · Codex、Claude

6,614,144764调用外部服务未明确有提醒
playlistgen

playlistgen 搜索 · 本页

4,211—接触敏感数据MIT-0有提醒

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

Music Playlist Generation (PlaylistGen)

LLM-powered playlist generation for your local music library that contains music audio files such as mp3, flac, m4a, etc. Integrate this skill with your Agents (e.g., OpenClaw) to enable natural language music discovery and playlist curation through conversation. Point it at your music folder, run the indexer once, and get a natural language playlist generator — accessible via web browser or API.


What it does

  • Scans your local music directory and builds a SQLite database of all songs
  • Extracts basic metadata (title, artist, album, duration, year) from audio tags via ffprobe and file path structure
  • Uses an LLM (Claude Haiku or MiniMax M2.7) to enrich each song with genre, subgenre, mood, energy, language, region, and usage context
  • Serves a local HTTP server with a search UI and player
  • Accepts natural language prompts ("obscure 80s synth for late night driving") and generates curated playlists using LLM reasoning

Setup

Work through these steps with the user. Each step requires user input or confirmation before proceeding.

Step 0 — Install the skill

Clone or install PlaylistGen into the OpenClaw skills directory:

git clone https://github.com/asriverwang/playlistgen ~/.openclaw/skills/playlistgen
cd ~/.openclaw/skills/playlistgen

All subsequent commands assume PlaylistGen is located at ~/.openclaw/skills/playlistgen.

Step 1 — Gather requirements

Ask the user:

  1. Where is their music directory? (e.g. /home/user/Music, /media/data/Music)
  2. Do they have an Anthropic API key, MiniMax API key, or both? (Anthropic Haiku preferred)
  3. What IP/port should playlist links use? (default http://localhost:5678 works for local use; set MUSIC_SERVER_URL to a LAN/Tailscale IP if they want links to work on other devices)

Step 2 — Create the virtual environment

cd ~/.openclaw/skills/playlistgen
python3 -m venv venv
venv/bin/pip install requests openai anthropic mutagen

Also check that ffprobe is available:

ffprobe -version
# If missing: sudo apt install ffmpeg   (Linux) or brew install ffmpeg (macOS)

Step 3 — Create .env

Copy env.sample.md to .env and fill in the values from Step 1:

cp env.sample.md .env

Required keys:

  • MUSIC_DIR — the user's music directory
  • ANTHROPIC_API_KEY (recommended) and/or MINIMAX_API_KEY

Optional:

  • MUSIC_SERVER_URL — public IP for playlist links (e.g. http://192.168.1.100:5678)
  • PORT — default is 5678

Step 4 — Present MUSIC_RULES.md for review

Read MUSIC_RULES.md and summarize the two sections to the user:

  • Prompt Interpretation — how the LLM converts a natural language request into music tags (genre counts, long-tail rules, language/energy/era detection)
  • Final Playlist Curation — how the LLM selects and orders the final tracks (diversity, transitions, artist limits)

Ask the user: "Do you want to use the default rules, or customize them before we start?"

If they want to customize:

  • Walk through each rule and ask if they want to change it
  • Common customizations: artist limit (currently 3), whether to bias toward niche/mainstream, energy transition strictness
  • Write the changes directly into MUSIC_RULES.md — no code changes needed

If they use defaults: proceed.

Step 5 — Index the music library

This enriches every song with LLM-generated tags (genre, subgenre, mood, energy, language, region, usage context). It runs once and is safe to resume if interrupted.

source .env
venv/bin/python3 smart_indexer.py \
  --path "$MUSIC_DIR" \
  --llm haiku \
  --key "$ANTHROPIC_API_KEY" \
  --db "${DB_PATH:-music.db}" \
  --batch 40 \
  --workers 1
Note: When using haiku, always set --workers 1. Haiku is efficient enough for single-worker throughput, but will throw 429 (rate limit) errors if batches are sent in parallel.

Use --llm minimax --key "$MINIMAX_API_KEY" if using MiniMax instead (MiniMax supports higher worker counts).

Timing heads-up to give the user: indexing takes roughly 1–3 hours per 5,000 songs depending on the response time and quality of the LLM model. Progress is saved after every batch so they can stop and resume without losing work. By default the indexer prints a live progress line with rate, ETA, and error counts:

Phase 2 (LLM): 2057 songs in 103 batches | haiku / claude-haiku | workers=1 | timeout=120s
Phase 2 (LLM): 45/103 (43.7%) [2.3 songs/s] | avg 8.7s/batch | ETA 4m12s

Errors, retries, and dropped batches are always printed (even without --verbose) so the agent can diagnose issues. Add --verbose for full per-batch detail including raw LLM response snippets.

Warning: Playlist generation quality depends directly on how many songs have been enriched. Advise the user to wait until at least 500 songs have been indexed by the LLM before starting the server and using the service. They can monitor progress via the live Phase 2 (LLM): N/M (X%) output and resume at any time if they need to pause.

When done, tell the user:

  • "Indexed N songs. Your music database is saved at <absolute path to music.db> — this file contains all your indexed metadata and LLM enrichments. Keep it safe and do not delete it. Indexing costs time and API credits, so this file is valuable. If you migrate to a different machine or agent, copy this file over and point DB_PATH to it to avoid re-indexing."

Step 6 — Start the server

bash start.sh

Verify it's up:

curl -s http://localhost:5678/api/stats | python3 -m json.tool | head -5

Tell the user: "PlaylistGen is running at http://localhost:5678 — open it in a browser to search your library."


Day-to-day operations

Generate a playlist (API)

POST http://localhost:5678/api/generate
{"prompt": "obscure 80s synth for late night driving", "max_count": 30}
→ {"title": "...", "url": "http://.../player?saved=XXXX", "count": 28}

Share only the returned url. Do not construct player URLs manually.

Search the library

GET http://localhost:5678/api/search?q=radiohead

Re-index after adding new music

source .env
venv/bin/python3 smart_indexer.py --path "$MUSIC_DIR" --llm haiku --key "$ANTHROPIC_API_KEY" --db "${DB_PATH:-music.db}" --workers 1

Skips already-indexed songs automatically.

Refresh catalog vocabulary (after re-indexing)

GET http://localhost:5678/api/catalog/vocab/refresh

Or just restart the server — it rebuilds on startup.

Update playlist rules

Edit MUSIC_RULES.md directly. Changes take effect on next server start. Restart:

bash start.sh

Check server status

curl -s http://localhost:5678/api/stats
tail -f playlist_server.log

API Reference

Base URL: http://localhost:5678 (or whatever PORT and MUSIC_SERVER_URL are set to).

Never construct player URLs manually. Always use the url field returned by the server.

Generating a playlist — try automated first, fall back to manual

Always try the automated endpoint first:

POST /api/generate
{"prompt": "obscure 80s synth for late night driving", "max_count": 30}

→ {"title": "...", "url": "http://<host>:5678/player?saved=XXXX", "count": 28, "tags": {...}}

Share only the returned url. Do not modify it. One call handles everything (interpret → fetch → curate → save).

If /api/generate returns {"error": ...}, switch to the manual workflow below.

Manual workflow (fallback)

Use this only when /api/generate fails. You participate in the pipeline directly.

Step 1 — Interpret prompt → structured tags

Fetch valid tags first: GET /api/catalog/vocab

Pick tags following these field rules:

  • genres — 2 values
  • subgenres — 3 regular + 1 long-tail (count ≤ 2)
  • moods — 2 regular + 1 long-tail
  • usage_contexts — 2 regular + 1 long-tail
  • year — [start_year, end_year] if era implied, else []
  • energy — ["high"], ["low", "medium"], etc., or []
  • language — single value if language-specific, else ""
  • regions — list if geography implied, else []
  • popularity_hint — "mainstream", "indie", "niche", "obscure", or "any"

Step 2 — Fetch candidates

Language is a hard filter. Region and popularity are NOT filtered here — pass them to Step 3.

GET /api/songs?genre=Rock,Indie&subgenre=Shoegaze,Dream+Pop&mood=Melancholic,Dreamy&usage_context=night&language=&limit=300
→ {"songs": [...], "count": N}

All params are substring-matched, comma-separated for multiple values. Returns up to 300 songs with full metadata.

Step 3 — Curate: select and order final playlist

Each song has: path (use as ID), artist, title, genre, subgenre, mood, energy, language, region, year, popularity. Select and order them yourself, then pass the paths to Step 4.

Step 4 — Save and get player URL

POST /api/playlist/save
{"title": "My Playlist", "songs": ["path1", "path2", ...]}
→ {"url": "http://<host>:5678/player?saved=XXXX", "title": "...", "count": N}

Share only the returned url. Do not modify it.

Other endpoints

EndpointDescription
GET /api/statsLibrary stats: total songs, top artists/albums
GET /api/search?q=<text>Keyword search on title/artist/album (50 results)
`GET /api/interpret?q=<prompt>&provider=claude\minimax`LLM prompt → structured tags (default: claude)
GET /api/catalog/vocabFull tag→count dict for all fields
GET /api/catalog/vocab/refreshRebuild vocab from DB, rewrite catalog JSON file
GET /Web search UI
GET /player?saved=<key>Playlist player page

Song fields

FieldTypeNotes
pathstringAbsolute filesystem path — use as song ID in all API calls
urlstringRelative path — use as audio src in browser
titlestring
artiststring
albumstring
yearstring
genrestringe.g. "Rock", "Electronic"
subgenrestringe.g. "Shoegaze", "Synthpop"
moodstringComma-separated, e.g. "Melancholic, Dreamy"
usage_contextstringe.g. "night", "driving"
energystring"low", "medium", or "high"
languagestringe.g. "English", "Mandarin"
regionstringe.g. "UK", "USA", "Taiwan"
popularitystring"mainstream", "indie", "niche", "obscure"
durationfloatSeconds

Architecture summary

ComponentRole
playlist_server.pyHTTP server: all API endpoints, web UI, player
smart_indexer.pyOne-time LLM enrichment — run standalone
MUSIC_RULES.mdEditable rules for interpret and curate LLM prompts
music.dbSQLite: songs table + playlists table
music_catalog_vocab.jsonAuto-generated tag→count snapshot (written at server start)

Playlist generation pipeline (inside /api/generate):

  1. Interpret prompt → structured tags (LLM, guided by MUSIC_RULES.md)
  2. Fetch candidates from DB — language is a hard filter; region/popularity are not
  3. Curate: LLM selects and orders final playlist (guided by MUSIC_RULES.md)
  4. Save playlist to DB → return player URL

Key design principles:

  • All LLM rules live in MUSIC_RULES.md, not in code
  • The catalog vocabulary is pre-built at startup (zero DB I/O per request)
  • Language is enforced at fetch time; region/popularity are soft hints at curation time
  • Player URLs come from the server — never construct them manually

平台分布

OpenClaw

93.58%
按下载量换算1,275

安全审计

VirusTotal

未展示

ClawScan

可疑

Static analysis

通过

权限和风险

接触敏感数据

该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在提醒或未通过项,安装前请自行复核。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills