Skip to content

目录结构与 mod.json ​

本页是 mod.json 字段的唯一权威表。其它卡片提到字段时只给链接,不重复列表。


目录结构 ​

text
my_mod/
├── mod.json                 # 必选(或 manifest.json)
├── locales/                 # 推荐:插件自包含多语言词条(全类型通用)
│   ├── zh-CN.json
│   └── en-US.json
├── assets/icons/            # 推荐:插件专属矢量 SVG 图标(拒绝 Emoji / 字符图标)
├── icon.svg                 # 推荐;也会自动探测 icon.png / webp / jpg
├── README.md                # 可选,工坊展示说明
├── libs/  vendor/           # 可选:插件私有 Python 依赖(见运行时环境)
├── theme.json               # type=theme
├── terms.json               # type=glossary(唯一词表格式)
├── ja.json                  # type=i18n(整包语言包)
├── provider.py              # Python 入口
└── *.qml                    # ui_extensions

规则:

  • 一个 MOD = 一个文件夹,id 全局唯一;目录名建议与 id 同形但不强制。
  • 工坊安装后的目录名 = 插件 id(<数据目录>/workshop/<id>/)——所以不要假设目录名,见 前置插件依赖。
  • 二进制运行库放插件私有目录(bin/、llama/ 之类),不要放进 data/models/ (那是纯权重目录,用户点「清除缓存」会误伤)。
  • 单包体积上限 20 MB,见 打包与体积上限。

字段表 ​

字段必填默认说明
id是—全局唯一,形如 myteam.mt.deeplx。无 id 直接拒绝加载。禁止占用 builtin.* / community.* / workshop.* 官方保留段
name建议未命名 MOD显示名
version建议1.0.0语义化版本。本地加载允许缺省;发布到插件工坊时必填 x.y.z,提新版本必须大于线上最高版本(发布页可直接改)
author建议未知作者—
description否""工坊简介
type建议glossary见 类型总览
entrypoint视类型""见下方「entrypoint 规则」
icon否自动探测svg / png / webp / jpg
preview_image否—工坊预览图相对路径
tags否[]含 cloud → 视为云端 API;含 local / offline → 本地离线。决定设置页是否挂模型卡与硬件评级
documentation_url否""官方文档外链(会显示在卡片上)
target_app_version是(外部/工坊插件)—适配代次。写 "0.2"。未声明一律判定「版本不匹配」,拒绝识别与安装(内置与随包 extensions/ 免检);见 兼容与版本门禁
min_app_version否1.0.0最低兼容客户端版本。1.0.0 = 不限制;见 兼容与版本门禁
tier否freefree / pro / community
supported_langs否[]源语言能力列表;用于音轨源语言收敛与卡片展示。MT 的目标语种请写 target_langs
target_langs否(MT 建议)回落 supported_langs翻译目标语种能力全集,决定字幕「翻译语言」下拉框可激活的语种;支持 zh-TW / pt-BR 等代码,为空时按 33 语种通用能力处理。见 语言代码与可翻译语种
aliases否[]短名别名(如 ["cool"]),设置页/路由可解析回完整 ID
requires_hf否按 tags/id 推断false = 纯 API/云端,启动可跳过 transformers 预热;true = 需要 HF
requires_cuda否—false = 不强依赖 NVIDIA(AMD ROCm / Vulkan / CPU 都行)→ 宿主不再弹「需 CUDA」红框
model_artifacts否[]本地模型工件声明,见 模型工件
requires_plugins否[]前置插件依赖(≤ 8 条),见 前置插件依赖
requires_runtime否[]宿主运行库依赖(≤ 4 条),见 宿主运行库
capabilities否{}引擎能力声明(音色表 / 克隆 / 删除 / 原生语速),见 能力声明
config_schema否[]声明式配置表单,见 config_schema
ui_extensions否{}插槽 → QML 文件映射,见 UI 插槽
hotkeys否[]声明式全局热键,见 全局热键
host_events否[]声明要接收的宿主事件名(["*"] = 全部),见 事件总线
permissions否[]能力声明字符串(net / clipboard / hotkey / window…),用于工坊展示与未来门禁
supports_glossary否按 type/tags/id 推断true = 原生吃术语库/热词
style_layer否full(仅 theme)full / material / typography / effects
has_settings_tab / tab_id / tab_title否—独立设置 Tab,见 自定义设置页
language_code / language_name否—仅 i18n
enabled否theme/i18n 为 false,其余 true首次启用状态(用户开关会覆盖它)
source_lang / target_lang否""词库类插件的默认语向

不要写在 mod.json 里的:window_backdrop(会被忽略)——它属于 theme.json,见 theme。

⚠️ target_app_version 是唯一一个“不写就装不上”的字段。 没它的话:本地放进 extensions/ 也不进列表、Steam/官网工坊包直接拒绝安装。 0.1.x 时代的老插件必须补上(一行)才能上 0.2.x,详见 兼容与版本门禁。


entrypoint 规则 ​

type格式例
asr / mt / tts / middleware / assistant / interpretation / toolfile.py:ClassNamecopilot.py:MyCopilot
同上,省略类名file.py类名默认 Plugin
glossary词表路径terms.json
theme主题路径theme.json
i18n字典路径ja.json
caption_extractor脚本路径extractor.js
caption_bridge工坊插件本身一般不用自己写,见 类型总览

entrypoint 必须指向真实存在的文件与类名——宿主找不到会拒绝加载并在日志/卡片上说明。


关于「文件放哪」的路径约定 ​

用途路径备注
模型权重<数据目录>/models/<org>--<name>/由宿主下载,插件不要自己拼目录名,用 inspect_model_artifact()["target_dir"]
插件私有数据(缓存、词库、导出)<安装目录>/data/plugins/<plugin_id>/用 self.get_data_dir() / host.get_plugin_data_dir(id)
插件私有 Python 依赖<插件目录>/libs/ 或 vendor/宿主自动注入 sys.path,见 运行环境与安全红线
私有二进制(llama-server 等)<插件目录>/bin/ 之类或直接走 宿主运行库

相关 ​

TransBox - 赋能全人类无界限跨语言交流