Type overview & selection
Decide the
typeon this page first, then go copy the template from the matching card.
The 12 type values
| type | Responsibility | Entry base class | Multiplicity | Notes |
|---|---|---|---|---|
asr | Speech recognition | BaseASRProvider | Exclusive (active engine) | Supports per-track routing or singleton sharing |
mt | Machine translation | BaseMTEngineProvider | Exclusive (active engine) | Same as above |
tts | Speech synthesis | BaseTTSProvider | Exclusive (active engine) | Inbound track → headphones / outbound track → virtual microphone / silent |
interpretation | End-to-end simultaneous interpretation | BaseInterpretationProvider | Exclusive (active engine) | Monolithic SI (e.g. iFlytek), bypasses the ASR→MT→TTS cascade |
glossary | Glossary | Data file | Can be enabled in multiples | Just write terms.json |
theme | Theme / UI slots | BaseThemePlugin / QML | Exclusive for the full layer | material/typography/effects can stack |
i18n | Language pack | JSON | Exclusive | Whole-UI translation |
middleware | Pipeline middleware | BasePipelineMiddleware | Can be enabled in multiples | Ordered by priority |
assistant | AI assistant | BaseAssistantPlugin | Can be enabled in multiples | Plugin window / answering / chat copilot |
tool | Tool / text source / select-to-translate | BaseToolPlugin / BasePlugin | Can be enabled in multiples | hotkeys + action_*, not attached to the pipeline |
caption_bridge | Web caption bridge | Workshop plugin community_web_caption_bridge | One transport service | Ships via the Workshop, not bundled into the official package; third parties must not write another bridge |
caption_extractor | Caption extraction for video sites | Open (extractor.js) | Can be enabled in multiples | Adds site support for the browser extension |
Retired ghost types: audio_filter, bundle — deprecated, the host does not recognise them, forbidden in mod.json.
mtplugins usetarget_langsto declare "which languages it can translate into"; the host builds the caption translate-language dropdown from it. See Language codes & translatable languages.
Selection cheat sheet
| What you want to do | Pick this |
|---|---|
| Game / industry name mapping (multiple directions) | glossary (zero code) |
| Change caption colours / opacity | theme (JSON) |
| Replace the backplate / VU meter / decorative visual components | theme + QML, or a standalone ui-qml |
| Text cleanup, profanity filtering | middleware |
| Wire up private speech recognition | asr |
| Wire up DeepL / an LLM / local translation | mt |
| Wire up Edge-TTS / GPT-SoVITS / local TTS | tts |
| End-to-end real-time SI (brings its own ASR+MT+TTS) | interpretation |
| AI interview / defence copilot | assistant |
| Select-to-translate / global hotkey tools | tool |
| Translate the UI into more languages | i18n |
| Add caption extraction for another video site | caption_extractor |
Don't use
middlewarewithaction_*to fake a tool plugin — tools / text sources must use the officialtype: tool, otherwise the hub category is wrong and so are the hotkey semantics.
Hub category mapping
The host maps type onto the category shown on the hub card:
| type | Hub category |
|---|---|
middleware | Pipeline tools |
tool | Pipeline tools |
asr / mt / tts | The matching capability category |
interpretation | Real-time SI |
| Unrecognised type | Other |
UI categories & slot mutual exclusion (summary)
tool→ "Pipeline tools"; unknown type → "Other".- Shared UI slots are mutually exclusive (these only):
overlay_background,caption_view,audio_level,alert_capsule,overlay_decorations,settings_background,history_background,dialog_background,window_background,copilot_window. settings_viewmust not be mutually exclusive (every plugin has its own settings form).- The complete slot list and the background-slot guidelines are in UI slots.
Related
- Layout & mod.json — the authoritative field table
- Runtime architecture & lifecycle — dual-track routing, enabling and mutual exclusion
- Provider signatures & data types
- Example library
