SyncSing Studio
Developers

manifest.json の書き方(API 1.0 / 1.1)

拡張機能のフォルダ(パッケージ)のいちばん上に置きます。JSON Schema は ../schemas/manifest-1.schema.json (公開 URL: https://linkstudio.shop/schemas/syncsing-plugin-manifest-1.json)。雛形の .vscode/settings.json で、VS Code の入力補完に使えます。 アプリと同じ検査は python sdk/tools/syncsing_plugin.py validate <フォルダ> でできます。

例

{
  "manifest_version": 1,
  "uuid": "3f9a1c2e-5b7d-4e8a-9c21-7d6f0a1b2c3d",
  "name": { "ja": "はじめての拡張機能", "en": "My first extension" },
  "description": { "ja": "説明", "en": "Description" },
  "version": "0.1.0",
  "api_version": "1.0",
  "min_app_version": "0.28.0",
  "targets": ["studio"],
  "author": { "identity_id": "あなたの SyncSing Identity ID", "name": "あなたの名前", "url": "https://example.com" },
  "homepage": "https://example.com/my-plugin",
  "license": "MIT",
  "icon": "icon.png",
  "entry": { "kind": "exe", "path": "bin/my-plugin.exe", "args": [] },
  "permissions": ["state.read", "meters.read", "notify"],
  "activation": ["onStartup"],
  "contributes": {
    "commands": [ { "id": "hello", "title": { "ja": "あいさつ", "en": "Hello" }, "deck": true } ],
    "tools":    [ { "id": "run", "title": "実行する", "description": "ツール枠に出るタイル" } ],
    "panels":   [ { "id": "main", "title": "結果", "placement": "tools" } ],
    "overlays": [],
    "settings": [
      { "key": "duration", "type": "slider", "title": "時間", "default": 60, "min": 10, "max": 600, "step": 10, "unit": "s" }
    ]
  },
  "network": { "hosts": ["api.example.com"], "purpose": "天気を取りに行くため" },
  "resources": { "max_memory_mb": 256, "priority": "below_normal" }
}

項目

項目必須内容
manifest_version○1
uuid○サーバーが発行する UUID v4(小文字)。版を上げても同じ
name / description○ /文字列か {"ja": …, "en": …}(ja は必須)
version○1.2.3(後ろに -beta.1 などを付けてもよい)
api_version○"1.0"
min_app_versionSyncSing Studio の版(NC Lite では見ません)
min_nclite_version開発キット 1.3。SyncSing NC Lite の版(Studio では見ません。NC Lite 1.6.0 から読みます)
targets○studio・nclite(1 つ以上)
author○identity_id(作者の SyncSing Identity ID)・name・url(https)
icon拡張機能のアイコン(相対パス)。透過の使える PNG・正方形・256×256 まで・200 KB まで。設定の一覧・ツールのカードとアイコン表示・入れるときの許可画面・ショートカットとミニUI のコマンドに出ます。無い・決まりに合わないときは 🧩 で表示されます(validate で確かめられます)
entry○kind は exe だけ。path は相対パス(/ 区切り・.exe)
permissions○使う権限(PERMISSIONS_JA.md)
activationいつ起動するか: onStartup(既定)・onProcessingStart・onBroadcastStart・onObsConnected・onCommand:<id>・onTool:<id>・onPanel:<id>
contributes.commandsコマンド(32 個まで)。deck: true なら Stream Deck の「拡張機能のコマンド」・ミニUI のタイル・ショートカットにも出ます。hold: true(0.30.5。deck・hold は true か false だけ)なら「押している間だけ」のコマンドになり、Stream Deck のキーとミニUI のタイルは押したときに pressed: "down"、離したときに pressed: "up" を送ります(ショートカット・パネルのボタンは short。up が届かないこともあるので、拡張機能の側でも一定時間で自動で戻してください)
contributes.toolsツール枠のタイル(8 個まで)。押すと tool.run
contributes.panelsパネル(4 個まで)。placement は tools(ツール枠)か link(連携タブ)。中身は panel.update で
contributes.overlays統合配信UI に出す表示(4 個まで。overlay.draw が必要)。統合配信UI の「+」に「🧩 拡張機能の名前」で出ます。kind は items(既定。文字・数値・進み具合を overlay.set_items で)か page(自分で配るページを overlay.set_page で埋め込む)
contributes.settings設定の項目(64 個まで)。画面はアプリが作ります(HTML は使えません)
network.hosts通信する先(宣言。審査で突き合わせます)。purpose に目的。空だと隔離中はインターネットにつなげません(1 つ以上書くとインターネットへの接続が許されます)
resourcesmax_memory_mb(64〜2048)・priority(normal は loadtest.run を持つとき、または audio.capture と audio.inject の両方を持つとき(API 1.1)だけ)
assistant開発キット 1.3。アシスタント向けの説明・開く先・画像(下の「アシスタント向けの説明」)。書くときは、Studio 向けなら min_app_version を 0.30.0 以上に、NC Lite 向けなら min_nclite_version を 1.6.0 以上に

アシスタント向けの説明(assistant・開発キット 1.3)

SyncSing Studio 0.30.0 からのアシスタント(困りごとの原因探し・使い方の説明)は、利用者がこの拡張機能について聞いたときだけ、ここに書いた説明を読んで答えます。

"min_app_version": "0.30.0",
"assistant": {
  "summary": "コメントを数えて、配信画面に棒グラフで出す",
  "description": "使い方:\n1. カードの「集計する言葉」に 1 行 1 つで言葉を入れる(8 個まで)\n2. 「集計を始める」を押す\n…\nよくある困りごと: 数が増えない → 「集計を始める」を押したあとのコメントだけを数えます",
  "open_targets": [
    {"id": "card", "type": "plugin", "label": "カードを開く"},
    {"id": "board", "type": "plugin_tab", "label": "集計", "panel": "main"},
    {"id": "editor", "type": "panel_url", "label": "編集画面を開く", "panel": "main", "index": 0},
    {"id": "reset", "type": "command", "label": "集計をリセット", "command": "reset"},
    {"id": "help", "type": "link", "label": "使い方のページ", "url": "https://example.com/help"}
  ],
  "images": [
    {"id": "card", "path": "assistant/card.webp", "caption": "カードの画面。左上が「集計を始める」", "open": "card"}
  ]
}
項目決まり
summary1〜200 文字。文字列か {"ja", "en"}
description1〜8,000 文字(改行可)。使い方・設定の意味・よくある困りごとと直し方を、この拡張機能の画面の言葉で書く
open_targets0〜5 個。アシスタントが「開く」ボタンを出せる先。id(英小文字・数字・- の 24 文字まで)・type・label(1〜40 文字)
open_targets[].typeplugin(この拡張機能のカード)/plugin_tab(カードの中のパネル。panel に contributes.panels の id)/panel_url(パネルに出している「開く」付きの url 部品のページ。panel とその中の何番目か index(0 が最初・省略で 0)。自分で配る localhost のページ(URL にトークンやポートが入るもの)を開くときはこれ。アプリが既定のブラウザで開きます)/command(command に contributes.commands の id。押すと command.invoke が届く。拡張機能のプロセスからブラウザを開くのは環境によって失敗するので、ページを開くのには使わない)/link(外部のページ。url は https:// だけ・500 文字まで・空白・引用符・ユーザー名なし)
images0〜8 枚。id・path(パッケージの中の .webp)・caption(0〜200 文字)・open(任意。押したときの開く先の id)
画像のファイルWebP の静止画だけ(中身も WebP であること。動く WebP は不可)・1 枚 200 KB まで・長い辺 1,568 px まで・撮影情報などのメタデータ(EXIF / XMP)なし

設定の種類(contributes.settings[].type)

type書くもの
slidermin・max・default・step・unit
numbermin・max・default・integer
toggledefault(true / false)
selectoptions: [{value, label}]・default
multiいくつでも選べるチェックの並び。options: [{value, label}](20 個まで)・default(value の配列)。値は選んだ value の配列
textdefault・max_length(4000 まで)・multiline・secret(伏せ字)
colordefault(#RRGGBB)
voicevox_styledefault(VOICEVOX のスタイル ID・数字の文字列。省略時 "3")。0.30.5 / NC Lite 1.6.5。options は書けません(書くと断られます)。アプリに入れられる全部の声が出て、ダウンロード済みに ✓、「ダウンロード済みだけ出す」で絞れます。まだの声を選ぶと、アプリが確認してからダウンロードします。値は文字列で届くので、数に直して audio.inject.voicevox の style_id に使います
fileextensions・folder(任意。data フォルダの中の置き場所。書くと値はファイル名だけ)・max_bytes(既定 20 MB・50 MB まで)・default。画面に「選ぶ…」が出て、利用者が選んだファイルをアプリが data フォルダ(folder の中)へ写し、その名前を値に入れます(拡張機能は隔離されていて利用者のファイルを直接読めないため)
buttoncommand(commands の id)
list辞書のような 1 行 1 件の表。columns: [{key, type: text/emoji/number/select/toggle/file, title, …}](file 列は extensions・folder・max_bytes を file と同じく書けて、行ごとに「選ぶ…」が出ます)・max_items(200 まで)・add_label

共通: key・title・description・group(同じ見出しのものをまとめて、折りたためる欄で出します)・advanced(「詳細」の欄へ)。パネルの settings 部品を使うと、設定を見出しごとにまとめて 1 つの部品で出せます。

パッケージ(.ssplugin)

この資料は開発キットに入っているものと同じ内容です。拡張機能の作成・配布には拡張機能 開発者規約が適用されます。