news 2026/10/14 18:26:26

Slopsmith 插件开发快速入门:20 行代码写出你的第一个 plugin.json 插件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Slopsmith 插件开发快速入门:20 行代码写出你的第一个 plugin.json 插件

【免费下载链接】slopsmith

Self-hosted Docker web app for browsing, playing & practicing interactive full-band music notation, with an extensive plugin system

项目地址:https://gitcode.com/gh_mirrors/sl/slopsmith
点击查看免费下载

Slopsmith 是一款自托管的 Docker Web 应用,用于浏览、播放和练习交互式全乐队乐谱(吉他、贝斯、键盘、鼓与人声),最吸引开发者的正是它强大的插件系统。本教程带你从零开始,用约 20 行代码写出第一个 Slopsmith 插件——一份 plugin.json 清单加最小前后端文件,重启容器即可在导航栏看到它。

🧩 先认识 Slopsmith 插件系统:30 秒看懂机制

Slopsmith 的插件就是一个放在plugins/目录下的文件夹。启动时,插件加载器 plugins/init.py 会自动发现每个子目录中的plugin.json清单文件,然后按声明挂载:

  • 导航链接(nav)——出现在顶部导航栏
  • 独立页面(screen.html+screen.js)——插件自己的完整界面
  • 设置面板(settings.html)——注入到 Settings 页
  • 后端 API(routes.py)——注册在/api/plugins/<插件id>/下的 FastAPI 路由

上图:Slopsmith 曲库浏览器。顶部导航栏里 “Create from Tab”“Download CDLC” 等入口,正是插件通过nav字段自动挂载的结果——你的第一个插件也会出现在这个位置。

插件能做的事情非常广泛:仓库自带的 3D Highway 就是一个典型例子,它把整个播放器视觉换成了带景深相机和灯光的 3D 效果。

🚀 快速开始:Docker 一键部署 Slopsmith

插件开发需要一个运行中的 Slopsmith。整个过程只需三步:

git clone https://gitcode.com/gh_mirrors/sl/slopsmith cd slopsmith DLC_PATH=/path/to/your/songs docker compose up -d
  1. 克隆仓库并进入目录
  2. 用DLC_PATH指向你的歌曲文件夹(PSARC 或 sloppak 歌曲)
  3. 启动容器后,浏览器打开http://localhost:8000

上图:Slopsmith 播放器主界面——这也是你的插件脚本将要运行其中的环境。

📦 第一个 plugin.json:20 行代码的核心

插件清单的完整 schema 见 docs/plugin-manifest.schema.json,其中只有id和name是必填字段,其余全部按需组合。以下是本教程示例的完整plugin.json(11 行):

{ "id": "my_first_plugin", "name": "My First Plugin", "version": "1.0.0", "nav": { "label": "My First Plugin", "screen": "plugin-my_first_plugin" }, "screen": "screen.html", "script": "screen.js", "routes": "routes.py" }

各字段速查表:

字段必填作用
id✅唯一标识(仅限字母数字、_、.、-),用于 API 路径
name✅显示名称
nav否导航栏链接,screen指定点击后跳转的页面 ID
screen否插件页面的 HTML 片段文件
script否页面注入后加载的 JavaScript
settings否设置面板({ "html": "settings.html" })
routes否后端路由模块,须导出setup(app, context)
styles否插件自编译的样式表(须位于assets/下)
tour否新手引导步骤文件(JSON)
type否设为"visualization"可进入 Highway 可视化选择器

创建插件目录结构:

plugins/ my_first_plugin/ plugin.json screen.html screen.js routes.py

💡 参考真实案例:内置小游戏插件 plugins/minigames/plugin.json 还额外声明了settings.server_files(参与设置导出/导入)和diagnostics(参与诊断包导出),都是可选的进阶字段。

🖥️ 最小前端:screen.html 与 screen.js

screen.html是一段HTML 片段(不能有<html>/<body>标签),会被注入到<div class="screen">容器中,可直接使用 Tailwind 工具类:

<div class="max-w-3xl mx-auto px-6 pt-24"> <h1 class="text-3xl font-bold text-white mb-2">My First Plugin</h1> <p id="hello-output" class="text-gray-400">Loading…</p> </div>

screen.js运行在全局作用域,可访问window.playSong、window.showScreen、window.slopsmith事件总线等核心 API。建议用 IIFE 包裹,避免污染全局变量:

(function () { 'use strict'; fetch('/api/plugins/my_first_plugin/hello') .then((r) => r.json()) .then((data) => { document.getElementById('hello-output').textContent = data.message; }); })();

⚙️ 最小后端:8 行 routes.py 写出你的 API

routes.py必须导出一个setup(app, context)函数。context字典提供持久配置目录config_dir、get_dlc_dir()、元数据库meta_db、日志器log等——后端状态请写入config_dir下(该目录在 Docker 卷中持久保存):

def setup(app, context): log = context["log"] log.info("my_first_plugin ready") @app.get("/api/plugins/my_first_plugin/hello") def hello(): return {"message": "Hello, Slopsmith!"}

路由统一注册在/api/plugins/{plugin_id}/前缀下,天然避免与其他插件冲突。注意:日志请一律使用context["log"],不要用print()。

📥 安装与验证:重启容器即可生效

插件安装就是“丢文件夹 + 重启”,没有任何注册步骤:

  1. 确认 4 个文件已放入plugins/my_first_plugin/(若用 Docker 卷挂载了插件目录,则放入对应宿主机目录)
  2. 重启容器:docker compose restart
  3. 刷新浏览器http://localhost:8000,顶部导航栏应出现My First Plugin入口
  4. 点击导航进入插件页面,应显示后端返回的Hello, Slopsmith!
  5. 也可直接访问http://localhost:8000/api/plugins/my_first_plugin/hello验证 API

✅ 看到导航链接 + 页面内容 + API 三处全部正常,恭喜你——第一个 Slopsmith 插件就跑通了。

⚠️ 常见坑位:为什么我的插件没出现

现象排查方向
导航栏没有链接plugin.json必须是合法 JSON;id只允许字母、数字、_、.、-;确认容器已重启
页面空白screen.html里误写了<html>/<body>标签;打开浏览器控制台看screen.js报错
API 返回 404routes.py缺少setup(app, context)导出;路由路径前缀是否写成了/api/plugins/my_first_plugin/
样式全丢使用了核心未扫描的 Tailwind 类(如任意值text-[11px]),需按 docs/plugin-styles.md 自编译样式表并声明styles字段
改了代码没生效前后端改动都要重启容器;Python 模块有缓存

加载过程的所有警告都会以[Plugin]前缀写入服务器日志,用docker compose logs查看是最快的排错入口。

📚 进阶路线:从入门到完整插件

掌握基本骨架后,建议按以下路径升级你的插件:

  • 加设置面板:plugin.json加"settings": { "html": "settings.html" },片段会被注入 Settings 页
  • 加新手引导:参考 plugins/app_tour_library/tour.json 的 spotlight 步骤格式
  • 声明能力域(capabilities):让其他插件与核心能感知你的 provider/requester 关系,详见 docs/capability-domains.md
  • 写 Highway 可视化插件:"type": "visualization"+window.slopsmithViz_<id>渲染器工厂,参考 plugins/highway_3d/plugin.json
  • 参与诊断与备份:diagnostics与settings.server_files字段说明见 CLAUDE.md

完整插件规范(前端全局 API、playSong包装链、WebSocket 协议、load_sibling等)都在 CLAUDE.md 中,社区插件开发约定见 CONTRIBUTING.md;想写小游戏类插件可再读 plugins/minigames/README.md 中的 SDK 用法。

从这份 20 行的 plugin.json 起步,重启容器,你的功能就会出现在 Slopsmith 的导航栏里——这就是它插件系统的全部“仪式感”。🎸

【免费下载链接】slopsmith

Self-hosted Docker web app for browsing, playing & practicing interactive full-band music notation, with an extensive plugin system

项目地址:https://gitcode.com/gh_mirrors/sl/slopsmith
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 18:26:12

WuKongIM 的 GitHub Issue 追踪体系与 Issue Agent 自动化修复实战指南

即时通讯后端 【免费下载链接】WuKongIM More than just IM 不只是即时通讯(IM) 项目地址&#xff1a; https://gitcode.com/gh_mirrors/wu/WuKongIM 点击查看 免费下载 WuKongIM 仓库将所有 Bug 报告、需求&#xff08;PRD&#xff09;与工程技能的发布动作统一收敛到 GitHub…

作者头像 李华
网站建设 2026/10/14 18:26:10

TMS320F28035定点FFT实战:从Q15精度到内存布局的完整指南

简介&#xff1a;这份资源面向数字信号处理初学者与嵌入式DSP开发者&#xff0c;聚焦在TI TMS320F28035浮点DSP上实现快速傅里叶变换的完整代码工程&#xff0c;可用于频谱分析、滤波等实时信号处理场景的学习与移植参考。压缩包共约2000个文件&#xff0c;整体10.33MB&#xf…

作者头像 李华
网站建设 2026/10/14 18:24:50

C++无锁队列concurrentqueue实战:高吞吐低延迟消息管道构建指南

简介&#xff1a;本资源是C11环境下高性能、工业级无锁并发队列concurrentqueue的完整开源实现&#xff0c;面向中高级C开发者、系统编程工程师及高并发场景&#xff08;如实时消息处理、游戏服务器、高频交易中间件&#xff09;的技术实践者&#xff0c;解决多线程环境下安全、…

作者头像 李华
网站建设 2026/10/14 18:23:42

基于NIOS II软核的FPGA电子钟设计:从Verilog到C语言的软硬件协同实践

简介&#xff1a;这是一份基于FPGA与NIOS II软核处理器的电子钟完整设计工程&#xff0c;适用于正在学习SOPC嵌入式系统、Verilog硬件描述语言或准备相关课程设计/竞赛的读者。工程围绕Qsys生成的timer_1ms定时器计时、8个数码管显示、三按键切换调节当前时间与闹钟、闪烁标志标…

作者头像 李华
网站建设 2026/10/14 18:23:19

蓝桥杯EDA备赛指南:13-15届真题模拟题拆解与PCB设计流程精讲

简介&#xff1a;涵盖蓝桥杯EDA组第十三届至第十五届省赛、国赛真题及多轮模拟测试与官方训练资源包&#xff0c;面向参加蓝桥杯EDA赛项的备赛选手、电子设计竞赛指导老师及嵌入式/EDA爱好者。压缩包共97个文件&#xff0c;容量38.07MB&#xff0c;包含了31个zip形式的工程文件…

作者头像 李华
网站建设 2026/10/14 18:23:17

SCoop库实现Arduino协作式多任务:从delay阻塞到Task/Signal调度

简介&#xff1a;SCoop-master.zip 是面向 Arduino 平台的多线程库压缩包&#xff0c;适用于需要并发处理多任务、提高程序响应速度的中高级开发者。该库允许在单片机上同时运行多个任务&#xff0c;解决传统顺序编程中任务互相等待的问题&#xff0c;常用于传感器采集、显示刷…

作者头像 李华