Skip to content

TransBox 插件开发文档 ​

面向:MOD 作者 / 接私有 ASR・MT・TTS 的工程师 / 直接照文档实现插件的 AI 代理。

本文档按知识卡片组织:一页一个主题,每件事只写一遍,其它页只放链接。 想改文档 → 找到该主题唯一的那张卡片改,不要在多页里重复写同一件事。

契约的单一事实来源是客户端源码(src/transbox/plugins/、src/transbox/ui/bridge/)。 官网页与源码冲突时以源码为准;发现不符欢迎在插件工坊反馈。

本目录与客户端仓库的 docs/plugin-dev/ 同源同结构,两边保持一致。 只含可复制代码资产的《插件规范》仍保留在原 URL。


5 分钟上手 ​

  1. 复制一个官方示例目录(extensions/example_glossary_gaming/、extensions/community_select_translate/、extensions/community_cloud_mimo_asr/…)
  2. 改 mod.json 的 id / name(id 全局唯一,形如 myteam.mt.deeplx,禁止 builtin.* 段)
  3. 放进扫描目录 → 设置 → 扩展工坊 → 刷新 → 打开开关启用
  4. 引擎类(asr / mt / tts)再到对应设置页把它选为当前引擎;data 类(theme / glossary / i18n)启用即生效

细节见 快速开始。


文档地图 ​

起步 ​

卡片一句话
快速开始最小可跑插件长什么样
目录结构与 mod.json一个插件文件夹必须是啥样,字段全都在这
运行架构与生命周期扫描根 / 双轨分流 / 启用停用 / 互斥规则

按类型开发 ​

卡片一句话
类型总览与选型12 种 type,我该选哪个
glossary 术语库零代码,只写 terms.json
theme 主题theme.json 令牌换肤 + 字幕窗参数
UI 扩展(QML)替换底板 / 音柱 / 字幕视图
middleware 中间件在流水线任意阶段拦截
asr 语音识别接私有识别引擎
mt 机器翻译接 DeepL / LLM / 本地翻译
tts 语音合成音色表 / 克隆音色 / 流式 / 语速
interpretation 同传直通端到端同传(绕过本地 ASR→MT→TTS)
assistant AI 助手面试副驾 / 答题浮窗
tool 工具划词翻译 / 全局快捷键工具
i18n 语言包整包界面翻译 + 插件自包含词条
caption_extractor 视频站字幕给别的视频站加字幕提取

Host SPI(插件调用宿主) ​

卡片一句话
SPI 索引与速查表全部方法一眼看完 + 基类能力
字幕与翻译把文本送进字幕 / 调活跃翻译引擎
配置与私有数据读写本插件配置 / KV / 数据目录
会话与宿主状态历史上下文 / 流水线状态 / 已装插件
全局热键声明式热键与运行时注册
模型工件声明权重仓库,宿主负责下载与就绪
事件总线插件↔宿主双向事件与标准事件表
朗读与提示speak / toast / 防录屏
插件浮窗多开、置顶、穿透、防录屏的 QML 窗
文件选择与长任务系统文件对话框 / 可取消进度条

Provider 契约(强制签名) ​

卡片一句话
能力声明与只读契约宿主怎么在不启动你服务的前提下问能力
Provider 签名与数据类型MT / ASR / TTS 方法签名 + Transcript 等
本地服务型引擎强制契约惰性启动 / 端口 / 设备 / 子进程 / 持久化

配置与界面 ​

卡片一句话
config_schema 声明式表单字段类型、显隐、预设、计算设备
自定义设置页需要「去获取 Key / 测试连接」时
UI 插槽可替换的槽位清单 + 背景插槽准则

调试与发布 ​

卡片一句话
热调试改文件 → 刷新 → 看日志
打包与体积上限导出 zip,20 MB 硬上限与出路
发布渠道Steam 创意工坊 / 官网插件工坊
前置插件依赖requires_plugins + 按 id 定位目录
宿主运行库requires_runtime,二进制别打进包

参考 ​

卡片一句话
示例库每种类型照抄哪个目录
语言代码与可翻译语种target_langs / supported_langs 区别、代码归一、33 语种表
线程契约哪些 API 能在哪个线程调
运行环境与安全红线预置库 / libs vendor / 禁止 pip
兼容与版本门禁target_app_version(必填)、命名迁移、min_app_version、废弃 type
宿主实现清单已开放的能力(别猜不存在的钩子)

按目标找页面 ​

我想…看这几页
先跑起来一个最小插件快速开始 → 目录结构
接一个云端 ASR / MT / TTStypes 总览 → 对应类型页 → config/schema
声明翻译模型能翻哪些语言mt → 语言代码与可翻译语种
接一个本地推理服务(llama-server 之类)本地服务型引擎强制契约(必读)→ 模型工件
做界面/主题相关UI 插槽 → theme
加词库 / 语言包(零代码)glossary / i18n
让 AI 帮我写插件快速开始 的「丢给 AI 的提示词」+ 目录结构 + 对应类型页
发布出去打包与体积上限 → 发布渠道

三个最容易踩的坑 ​

本地服务型插件(自己起 llama-server / tts-server / 自研 HTTP 服务)务必先读 本地服务型引擎强制契约。这三条都是用户能直接看到的 BUG。

  1. 别在 initialize() 里启动本地服务 —— 宿主会在打开设置页、查模型状态/音色时做只读查询; 旧写法会让用户「只是看一眼设置」就白等数秒并吃掉数 GB 显存。启动放 ensure_loaded() 或请求入口。
  2. 端口别用 8080/8081/8082 —— 实测常被 Steam steamwebhelper 等占用;用高位不常用段并让宿主/自己顺延。
  3. 服务端的音色/注册表必须自己落盘 —— 只存内存的话,用户每次重启都要重新注册(实测 tts-server 就是这样)。

另外两条高频问题:

  1. 定位兄弟插件目录不要硬编码目录名 —— 工坊安装时目录名 = 插件 id。用 host.plugin_dir(id)(见 前置插件依赖)。
  2. 大体积二进制 / 大模型不要打进包 —— 上传通道上限 20 MB。二进制走 运行库,权重走 模型工件。

《插件规范》旧章节 → 新卡片 ​

官网原《插件规范》(单页 1700+ 行)已按主题拆分为上面的卡片。 为避免同一件事写两遍,单页里只保留可复制的代码资产,其余章节改为指向卡片:

《插件规范》原章节去哪
§0 直接丢给 AI:系统提示词模板保留在原页(§0 Prompt-and-Go)
§1 目录结构目录结构与 mod.json
§2 mod.json 字段表目录结构与 mod.json
§3 支持的 type类型总览与选型
§3.1 caption_extractor视频站字幕提取
§4 entrypoint 规则目录结构与 mod.json
§5.1 Glossaryglossary 术语库
§5.2 Themetheme 主题
§5.3 i18n(整包语言包)i18n 语言包
§5.4 插件自包含国际化i18n 语言包
§5.5 tooltool 工具
§6 config_schemaconfig_schema 声明式表单
§6.2 QML 消费与免重启热响应UI 扩展(QML)
§6.3 云端定制设置页自定义设置页
§7.0 独立开发环境存根 (SDK Stub)保留在原页(没有宿主源码时开发用)
§7.1–7.9 基类签名 / 数据类型 / Host SPIProvider 签名与数据类型 + SPI 索引与速查表
§7.10 本地离线模型工件与外部运行时模型工件
§7.11 requires_runtime宿主运行库
§8 最小可运行模板(7 个)保留在原页(可直接复制改名的完整代码)
§9 本地热调试热调试
§10 创意工坊一键发布与增量更新打包与体积上限 + 发布渠道
§11 插件自包含国际化规范i18n 语言包
§12 运行环境与红线运行环境与安全红线
§13 官方示例索引示例库
§14 给 AI 代理的实现检查清单保留在原页
§15 UI 插槽(摘要)UI 插槽 + QML 界面插槽与 HostContext

相关文档(开发者中心其它页) ​

文档内容
插件规范Prompt-and-Go 提示词模板 / 独立开发 SDK Stub / 7 个完整可复制模板 / AI 实现检查清单
客户端内部实现Python 类加载、配置装配、安全模型(插件契约见本卡树)
QML 界面插槽与 HostContext插槽属性、hostContext 子系统、settings_view 注入
本地源码与开发环境客户端源码环境(uv / Python 3.11–3.12)
工坊与自发行发布导出 zip、Steam 上传、本地扩展目录分发
官网插件工坊(作者/运维手册)作者中心上传、订阅、审核与运维

核心团队保留规范演进权。问题请开 GitHub Issue。

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