{
  "api_version": "1.0",
  "protocol": 1,
  "error_codes": [
    "parse_error",
    "invalid_request",
    "method_not_found",
    "invalid_params",
    "unauthorized",
    "permission_denied",
    "rate_limited",
    "busy",
    "locked",
    "not_available",
    "not_found",
    "user_declined",
    "timeout",
    "internal",
    "api_version_unsupported"
  ],
  "methods": [
    {
      "name": "api.capabilities",
      "permission": null,
      "review": false,
      "nclite": true,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "api_version": {
            "type": "string"
          },
          "app": {
            "type": "string",
            "enum": [
              "studio",
              "nclite"
            ]
          },
          "methods": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "permission": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "review": {
                  "type": "boolean"
                }
              },
              "additionalProperties": true
            }
          },
          "events": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "permission": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": true,
        "required": [
          "api_version",
          "methods",
          "events"
        ]
      }
    },
    {
      "name": "app.info",
      "permission": null,
      "review": false,
      "nclite": true,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "studio",
              "nclite"
            ]
          },
          "version": {
            "type": "string"
          },
          "channel": {
            "type": "string"
          },
          "locale": {
            "type": "string",
            "enum": [
              "ja",
              "en"
            ]
          },
          "features": {
            "type": "object",
            "properties": {},
            "additionalProperties": true
          },
          "api_version": {
            "type": "string"
          }
        },
        "additionalProperties": true,
        "required": [
          "kind",
          "version",
          "api_version"
        ]
      }
    },
    {
      "name": "audio.set_output_gain",
      "permission": "audio.output",
      "review": true,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "gain": {
            "type": "number",
            "description": "10〜400（%）",
            "minimum": 10,
            "maximum": 400
          }
        },
        "additionalProperties": false,
        "required": [
          "gain"
        ]
      },
      "result": {
        "type": "object",
        "properties": {
          "gain": {
            "type": "number"
          }
        },
        "additionalProperties": true,
        "required": [
          "gain"
        ]
      }
    },
    {
      "name": "bgm.get",
      "permission": "state.read",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "source": {
            "type": "string"
          },
          "volume": {
            "type": "integer"
          },
          "auto_duck": {
            "type": "boolean"
          },
          "duck_level": {
            "type": "integer"
          },
          "monitor": {
            "type": "boolean"
          },
          "state": {
            "type": "string"
          },
          "running": {
            "type": "boolean"
          },
          "track_number": {
            "type": "integer"
          },
          "track_count": {
            "type": "integer"
          },
          "position_s": {
            "type": "number"
          }
        },
        "additionalProperties": true
      }
    },
    {
      "name": "bgm.next",
      "permission": "bgm.control",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "moved": {
            "type": "boolean"
          }
        },
        "additionalProperties": true,
        "required": [
          "moved"
        ]
      }
    },
    {
      "name": "bgm.set",
      "permission": "bgm.control",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "volume": {
            "type": "integer",
            "description": "0〜150",
            "minimum": 0,
            "maximum": 150
          },
          "auto_duck": {
            "type": "boolean"
          },
          "duck_level": {
            "type": "integer",
            "description": "0〜60",
            "minimum": 0,
            "maximum": 60
          },
          "monitor": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "source": {
            "type": "string"
          },
          "volume": {
            "type": "integer"
          },
          "auto_duck": {
            "type": "boolean"
          },
          "duck_level": {
            "type": "integer"
          },
          "monitor": {
            "type": "boolean"
          },
          "state": {
            "type": "string"
          },
          "running": {
            "type": "boolean"
          },
          "track_number": {
            "type": "integer"
          },
          "track_count": {
            "type": "integer"
          },
          "position_s": {
            "type": "number"
          }
        },
        "additionalProperties": true
      }
    },
    {
      "name": "bgm.toggle",
      "permission": "bgm.control",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "ok": {
            "type": "boolean"
          },
          "message": {
            "type": "string",
            "description": "ミニUI・Stream Deck と同じ操作の結果の短い文"
          }
        },
        "additionalProperties": true,
        "required": [
          "ok"
        ]
      }
    },
    {
      "name": "chat.history",
      "permission": "chat.read",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "since": {
            "type": "integer",
            "description": "この seq より後",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "description": "1〜200（既定 50）",
            "minimum": 1,
            "maximum": 200
          }
        },
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "seq": {
                  "type": "integer",
                  "description": "受信済みの一覧の通し番号（chat.history の since に使う）"
                },
                "platform": {
                  "type": "string",
                  "enum": [
                    "youtube",
                    "twitch"
                  ]
                },
                "kind": {
                  "type": "string",
                  "description": "chat / membership / membership_gift / redemption / follow など"
                },
                "user": {
                  "type": "object",
                  "properties": {
                    "hash": {
                      "type": "string",
                      "description": "元に戻せない形の視聴者 ID（同じアプリの起動の間だけ同じ人は同じ値）"
                    },
                    "name": {
                      "type": "string"
                    }
                  },
                  "additionalProperties": true
                },
                "text": {
                  "type": "string"
                },
                "at": {
                  "type": "number",
                  "description": "受信した時刻（UNIX 秒）"
                },
                "is_owner": {
                  "type": "boolean"
                },
                "is_moderator": {
                  "type": "boolean"
                },
                "is_member": {
                  "type": "boolean"
                },
                "is_own": {
                  "type": "boolean",
                  "description": "SyncSing（拡張機能を含む）が投稿したもの"
                },
                "deleted": {
                  "type": "boolean"
                },
                "reward_title": {
                  "type": "string"
                },
                "superchat": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "properties": {
                    "type": {
                      "type": "string"
                    },
                    "amount_text": {
                      "type": "string"
                    },
                    "amount": {
                      "type": "number"
                    },
                    "currency": {
                      "type": "string"
                    }
                  }
                },
                "meta": {
                  "type": "object",
                  "properties": {},
                  "additionalProperties": true,
                  "description": "gift_count・months・tier・prime・anonymous・gift_received・membership_text・gifter_name・recipient_name"
                },
                "translation": {
                  "type": "object",
                  "properties": {
                    "source_language": {
                      "type": "string"
                    },
                    "text": {
                      "type": "string"
                    }
                  },
                  "additionalProperties": true
                }
              },
              "additionalProperties": true,
              "required": [
                "seq",
                "platform",
                "kind",
                "user",
                "text"
              ]
            }
          },
          "last_seq": {
            "type": "integer"
          }
        },
        "additionalProperties": true,
        "required": [
          "items",
          "last_seq"
        ]
      }
    },
    {
      "name": "chat.post",
      "permission": "chat.write",
      "review": true,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "空白をまとめて 200 字まで",
            "maxLength": 800
          },
          "platform": {
            "type": "string",
            "enum": [
              "auto",
              "youtube",
              "twitch"
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "text"
        ]
      },
      "result": {
        "type": "object",
        "properties": {
          "posted": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "youtube",
                "twitch"
              ]
            }
          },
          "failed": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "platform": {
                  "type": "string"
                },
                "reason": {
                  "type": "string"
                }
              },
              "additionalProperties": true
            }
          },
          "text": {
            "type": "string"
          }
        },
        "additionalProperties": true,
        "required": [
          "posted",
          "failed",
          "text"
        ]
      }
    },
    {
      "name": "devices.list",
      "permission": "state.read",
      "review": false,
      "nclite": true,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "inputs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "monitors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "references": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": true,
        "required": [
          "inputs",
          "monitors",
          "references"
        ]
      }
    },
    {
      "name": "dictionary.get",
      "permission": "state.read",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "entries": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "entry_id": {
                  "type": "string"
                },
                "source": {
                  "type": "string"
                },
                "replacement": {
                  "type": "string"
                },
                "match_type": {
                  "type": "string"
                },
                "enabled": {
                  "type": "boolean"
                },
                "scope": {
                  "type": "string"
                },
                "own": {
                  "type": "boolean",
                  "description": "この拡張機能が足した項目"
                }
              },
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": true,
        "required": [
          "entries"
        ]
      }
    },
    {
      "name": "dictionary.preview",
      "permission": "state.read",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "maxLength": 500
          }
        },
        "additionalProperties": false,
        "required": [
          "text"
        ]
      },
      "result": {
        "type": "object",
        "properties": {
          "source": {
            "type": "string"
          },
          "result": {
            "type": "string"
          },
          "applied": {
            "type": "integer"
          }
        },
        "additionalProperties": true,
        "required": [
          "result"
        ]
      }
    },
    {
      "name": "dictionary.remove_entry",
      "permission": "dictionary.write",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "entry_id": {
            "type": "string",
            "maxLength": 80
          }
        },
        "additionalProperties": false,
        "required": [
          "entry_id"
        ]
      },
      "result": {
        "type": "object",
        "properties": {
          "removed": {
            "type": "boolean"
          }
        },
        "additionalProperties": true,
        "required": [
          "removed"
        ]
      }
    },
    {
      "name": "dictionary.set_entry",
      "permission": "dictionary.write",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "source": {
            "type": "string",
            "maxLength": 200
          },
          "replacement": {
            "type": "string",
            "maxLength": 200
          },
          "match_type": {
            "type": "string",
            "enum": [
              "contains",
              "exact",
              "prefix"
            ]
          },
          "priority": {
            "type": "integer",
            "description": "-100〜100",
            "minimum": -100,
            "maximum": 100
          },
          "enabled": {
            "type": "boolean"
          },
          "entry_id": {
            "type": "string",
            "description": "変えるとき（自分が足した項目だけ）",
            "maxLength": 80
          }
        },
        "additionalProperties": false,
        "required": [
          "source"
        ]
      },
      "result": {
        "type": "object",
        "properties": {
          "entry_id": {
            "type": "string"
          },
          "disabled_reason": {
            "type": "string"
          }
        },
        "additionalProperties": true,
        "required": [
          "entry_id"
        ]
      }
    },
    {
      "name": "editfx.delete",
      "permission": "editfx.manage",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "video_id": {
            "type": "string",
            "maxLength": 200
          }
        },
        "additionalProperties": false,
        "required": [
          "video_id"
        ]
      },
      "result": {
        "type": "object",
        "properties": {
          "templates": {
            "type": "array",
            "items": {}
          }
        },
        "additionalProperties": true,
        "required": [
          "templates"
        ]
      }
    },
    {
      "name": "editfx.enable",
      "permission": "editfx.manage",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          }
        },
        "additionalProperties": false,
        "required": [
          "enabled"
        ]
      },
      "result": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          }
        },
        "additionalProperties": true,
        "required": [
          "enabled"
        ]
      }
    },
    {
      "name": "editfx.get",
      "permission": "state.read",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "video_id": {
            "type": "string",
            "maxLength": 200
          }
        },
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "selected": {},
          "template": {},
          "templates": {
            "type": "array",
            "items": {}
          },
          "favorites": {
            "type": "array",
            "items": {}
          },
          "lyrics_offset": {},
          "player_control": {},
          "player": {
            "type": "object",
            "properties": {
              "video_id": {
                "type": "string"
              },
              "playing": {
                "type": "boolean"
              },
              "position_s": {
                "type": [
                  "number",
                  "null"
                ]
              }
            },
            "additionalProperties": true
          }
        },
        "additionalProperties": true
      }
    },
    {
      "name": "editfx.preview",
      "permission": "editfx.manage",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "video_id": {
            "type": "string",
            "maxLength": 200
          },
          "on": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "on": {
            "type": "boolean"
          }
        },
        "additionalProperties": true,
        "required": [
          "on"
        ]
      }
    },
    {
      "name": "editfx.save",
      "permission": "editfx.manage",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "template": {
            "type": "object",
            "properties": {
              "video_id": {
                "type": "string"
              },
              "url": {
                "type": "string"
              },
              "events": {
                "type": "array",
                "items": {}
              },
              "title": {
                "type": "string"
              },
              "song": {},
              "duration": {
                "type": "number"
              }
            },
            "additionalProperties": true,
            "description": "256 KiB まで。video_id か url が必要"
          },
          "overwrite": {
            "type": "boolean",
            "description": "同じ曲のテンプレートがあるとき上書きする"
          }
        },
        "additionalProperties": false,
        "required": [
          "template"
        ]
      },
      "result": {
        "type": "object",
        "properties": {
          "selected": {},
          "templates": {
            "type": "array",
            "items": {}
          }
        },
        "additionalProperties": true,
        "required": [
          "templates"
        ]
      }
    },
    {
      "name": "effects.add_favorite",
      "permission": "effects.control",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 40
          }
        },
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "effects": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "今のエフェクトの設定"
          },
          "presets": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                }
              },
              "additionalProperties": true
            }
          },
          "customs": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                }
              },
              "additionalProperties": true
            }
          },
          "selected": {},
          "favorites": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "cycle": {
                  "type": "boolean"
                }
              },
              "additionalProperties": true
            }
          },
          "current_name": {
            "type": "string"
          },
          "last_name": {
            "type": "string"
          }
        },
        "additionalProperties": true,
        "required": [
          "effects",
          "presets"
        ]
      }
    },
    {
      "name": "effects.get",
      "permission": "state.read",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "effects": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "今のエフェクトの設定"
          },
          "presets": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                }
              },
              "additionalProperties": true
            }
          },
          "customs": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                }
              },
              "additionalProperties": true
            }
          },
          "selected": {},
          "favorites": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "cycle": {
                  "type": "boolean"
                }
              },
              "additionalProperties": true
            }
          },
          "current_name": {
            "type": "string"
          },
          "last_name": {
            "type": "string"
          }
        },
        "additionalProperties": true,
        "required": [
          "effects",
          "presets"
        ]
      }
    },
    {
      "name": "effects.load_preset",
      "permission": "effects.control",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "preset": {
            "type": "string",
            "description": "presets の id か custom:<id>",
            "maxLength": 80
          }
        },
        "additionalProperties": false,
        "required": [
          "preset"
        ]
      },
      "result": {
        "type": "object",
        "properties": {
          "effects": {
            "type": "object",
            "properties": {},
            "additionalProperties": true
          },
          "selected": {}
        },
        "additionalProperties": true,
        "required": [
          "effects"
        ]
      }
    },
    {
      "name": "effects.next_favorite",
      "permission": "effects.control",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "ok": {
            "type": "boolean"
          },
          "message": {
            "type": "string",
            "description": "ミニUI・Stream Deck と同じ操作の結果の短い文"
          }
        },
        "additionalProperties": true,
        "required": [
          "ok"
        ]
      }
    },
    {
      "name": "effects.set",
      "permission": "effects.control",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "effects": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "{effects.get の項目名: 値}"
          }
        },
        "additionalProperties": false,
        "required": [
          "effects"
        ]
      },
      "result": {
        "type": "object",
        "properties": {
          "effects": {
            "type": "object",
            "properties": {},
            "additionalProperties": true
          },
          "selected": {}
        },
        "additionalProperties": true,
        "required": [
          "effects"
        ]
      }
    },
    {
      "name": "effects.set_favorites",
      "permission": "effects.control",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "order": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "今のお気に入りの id をすべて並べ替えたもの"
          },
          "cycle": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "{お気に入りの id: true/false}"
          }
        },
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "effects": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "今のエフェクトの設定"
          },
          "presets": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                }
              },
              "additionalProperties": true
            }
          },
          "customs": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                }
              },
              "additionalProperties": true
            }
          },
          "selected": {},
          "favorites": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "cycle": {
                  "type": "boolean"
                }
              },
              "additionalProperties": true
            }
          },
          "current_name": {
            "type": "string"
          },
          "last_name": {
            "type": "string"
          }
        },
        "additionalProperties": true,
        "required": [
          "effects",
          "presets"
        ]
      }
    },
    {
      "name": "effects.simple.get",
      "permission": "state.read",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "simple": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "「簡単」ダイヤルの状態"
          }
        },
        "additionalProperties": true,
        "required": [
          "simple"
        ]
      }
    },
    {
      "name": "effects.simple.set",
      "permission": "effects.control",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "dials": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "{つまみの名前: 数値}"
          },
          "on": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "{つまみの名前: true/false}"
          }
        },
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "simple": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "「簡単」ダイヤルの状態"
          }
        },
        "additionalProperties": true,
        "required": [
          "simple"
        ]
      }
    },
    {
      "name": "effects.toggle_current",
      "permission": "effects.control",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "ok": {
            "type": "boolean"
          },
          "message": {
            "type": "string",
            "description": "ミニUI・Stream Deck と同じ操作の結果の短い文"
          }
        },
        "additionalProperties": true,
        "required": [
          "ok"
        ]
      }
    },
    {
      "name": "entry.action",
      "permission": "entry.control",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "accept_toggle",
              "confirm",
              "skip"
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "action"
        ]
      },
      "result": {
        "type": "object",
        "properties": {
          "ok": {
            "type": "boolean"
          },
          "message": {
            "type": "string",
            "description": "ミニUI・Stream Deck と同じ操作の結果の短い文"
          }
        },
        "additionalProperties": true,
        "required": [
          "ok"
        ]
      }
    },
    {
      "name": "entry.get",
      "permission": "state.read",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "accepting": {
            "type": "boolean"
          },
          "slots": {
            "type": "integer"
          },
          "playing": {
            "type": "integer"
          },
          "waiting": {
            "type": "integer"
          },
          "active": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "platform": {
                  "type": "string"
                },
                "status": {
                  "type": "string"
                },
                "remaining": {
                  "type": "number"
                },
                "note": {
                  "type": "string"
                }
              },
              "additionalProperties": true
            }
          },
          "queue": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "platform": {
                  "type": "string"
                },
                "status": {
                  "type": "string"
                },
                "remaining": {
                  "type": "number"
                },
                "note": {
                  "type": "string"
                }
              },
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": true,
        "required": [
          "accepting",
          "active",
          "queue"
        ]
      }
    },
    {
      "name": "events.subscribe",
      "permission": null,
      "review": false,
      "nclite": true,
      "params": {
        "type": "object",
        "properties": {
          "events": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "購読するイベントの名前"
          },
          "meters": {
            "type": "object",
            "properties": {
              "interval_ms": {
                "type": "number",
                "description": "50〜5000（既定 250）",
                "minimum": 50,
                "maximum": 5000
              }
            },
            "additionalProperties": true
          }
        },
        "additionalProperties": false,
        "required": [
          "events"
        ]
      },
      "result": {
        "type": "object",
        "properties": {
          "subscribed": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "denied": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "seq": {
            "type": "integer"
          }
        },
        "additionalProperties": true,
        "required": [
          "subscribed",
          "denied"
        ]
      }
    },
    {
      "name": "events.unsubscribe",
      "permission": null,
      "review": false,
      "nclite": true,
      "params": {
        "type": "object",
        "properties": {
          "events": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "events"
        ]
      },
      "result": {
        "type": "object",
        "properties": {
          "subscribed": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": true
      }
    },
    {
      "name": "hello",
      "permission": null,
      "review": false,
      "nclite": true,
      "params": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "description": "標準入力でもらったトークン"
          },
          "plugin": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            },
            "additionalProperties": true,
            "required": [
              "uuid",
              "version"
            ]
          },
          "api": {
            "type": "object",
            "properties": {
              "version": {
                "type": "string",
                "description": "例 \"1.0\""
              }
            },
            "additionalProperties": true
          },
          "sdk": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            },
            "additionalProperties": true
          },
          "capabilities": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "token",
          "plugin"
        ]
      },
      "result": {
        "type": "object",
        "properties": {
          "session": {
            "type": "string"
          },
          "api_version": {
            "type": "string"
          },
          "app": {
            "type": "object",
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "studio",
                  "nclite"
                ]
              },
              "version": {
                "type": "string"
              },
              "channel": {
                "type": "string"
              },
              "locale": {
                "type": "string"
              },
              "features": {
                "type": "object",
                "properties": {},
                "additionalProperties": true
              }
            },
            "additionalProperties": true
          },
          "plugin": {
            "type": "object",
            "properties": {
              "tier": {
                "type": "string",
                "enum": [
                  "official",
                  "verified",
                  "registered",
                  "dev"
                ]
              },
              "name": {
                "type": "string"
              }
            },
            "additionalProperties": true
          },
          "granted": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "denied": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "settings": {
            "type": "object",
            "properties": {},
            "additionalProperties": true
          },
          "dirs": {
            "type": "object",
            "properties": {
              "data": {
                "type": "string"
              },
              "log": {
                "type": "string"
              }
            },
            "additionalProperties": true
          },
          "limits": {
            "type": "object",
            "properties": {
              "calls_per_sec": {
                "type": "integer"
              },
              "concurrent": {
                "type": "integer"
              },
              "message_bytes": {
                "type": "integer"
              }
            },
            "additionalProperties": true
          },
          "ping_interval_ms": {
            "type": "integer"
          }
        },
        "additionalProperties": true,
        "required": [
          "session",
          "api_version",
          "granted",
          "dirs"
        ]
      }
    },
    {
      "name": "loadtest.begin",
      "permission": "loadtest.run",
      "review": true,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "max_duration_s": {
            "type": "number",
            "description": "10〜1800（既定 300）",
            "minimum": 10,
            "maximum": 1800
          },
          "mode": {
            "type": "string",
            "enum": [
              "stress",
              "measure"
            ]
          },
          "profile": {
            "type": "string",
            "maxLength": 32
          }
        },
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "session_id": {
            "type": "string"
          },
          "ends_at": {
            "type": "string"
          },
          "max_duration_s": {
            "type": "number"
          },
          "mode": {
            "type": "string"
          },
          "baseline": {
            "type": "object",
            "properties": {
              "audio": {
                "type": "object",
                "properties": {},
                "additionalProperties": true
              },
              "obs": {
                "type": [
                  "object",
                  "null"
                ]
              },
              "obs_recording": {
                "type": [
                  "boolean",
                  "null"
                ]
              }
            },
            "additionalProperties": true
          },
          "warning": {
            "type": [
              "string",
              "null"
            ]
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": true,
        "required": [
          "session_id",
          "baseline",
          "warnings"
        ]
      }
    },
    {
      "name": "loadtest.end",
      "permission": "loadtest.run",
      "review": true,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "session_id": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          },
          "mode": {
            "type": "string",
            "enum": [
              "stress",
              "measure"
            ]
          },
          "duration_s": {
            "type": "integer"
          },
          "samples": {
            "type": "integer"
          },
          "dropouts_total": {
            "type": "integer"
          },
          "max_processing_ms": {
            "type": "number"
          },
          "over_budget_seconds": {
            "type": "integer"
          },
          "obs": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "render_skipped_total": {
                "type": "integer"
              },
              "output_skipped_total": {
                "type": "integer"
              }
            }
          }
        },
        "additionalProperties": true
      }
    },
    {
      "name": "loadtest.status",
      "permission": "loadtest.run",
      "review": true,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "active": {
            "type": "boolean"
          },
          "session_id": {
            "type": "string"
          },
          "owner": {
            "type": "string"
          },
          "elapsed_s": {
            "type": "integer"
          },
          "remaining_s": {
            "type": "integer"
          }
        },
        "additionalProperties": true,
        "required": [
          "active"
        ]
      }
    },
    {
      "name": "log.write",
      "permission": null,
      "review": false,
      "nclite": true,
      "params": {
        "type": "object",
        "properties": {
          "level": {
            "type": "string",
            "enum": [
              "debug",
              "info",
              "warn",
              "error"
            ]
          },
          "message": {
            "type": "string",
            "maxLength": 4096
          }
        },
        "additionalProperties": false,
        "required": [
          "message"
        ]
      },
      "result": {
        "type": "object",
        "properties": {},
        "additionalProperties": true
      }
    },
    {
      "name": "lyrics.get",
      "permission": "state.read",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "track": {
            "type": "string"
          },
          "artist": {
            "type": "string"
          },
          "visible": {
            "type": "boolean"
          }
        },
        "additionalProperties": true,
        "required": [
          "track",
          "artist",
          "visible"
        ]
      }
    },
    {
      "name": "lyrics.load_text",
      "permission": "lyrics.control",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "lyrics": {
            "type": "string",
            "description": "64 KiB まで",
            "maxLength": 65536
          },
          "title": {
            "type": "string",
            "maxLength": 200
          },
          "artist": {
            "type": "string",
            "maxLength": 200
          },
          "duration": {
            "type": "number",
            "description": "秒",
            "minimum": 0,
            "maximum": 21600
          }
        },
        "additionalProperties": false,
        "required": [
          "lyrics"
        ]
      },
      "result": {
        "type": "object",
        "properties": {
          "ok": {
            "type": "boolean"
          }
        },
        "additionalProperties": true,
        "required": [
          "ok"
        ]
      }
    },
    {
      "name": "lyrics.search",
      "permission": "lyrics.control",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "track": {
            "type": "string",
            "maxLength": 200
          },
          "artist": {
            "type": "string",
            "maxLength": 200
          },
          "album": {
            "type": "string",
            "maxLength": 200
          }
        },
        "additionalProperties": false,
        "required": [
          "track"
        ]
      },
      "result": {
        "type": "object",
        "properties": {
          "tracks": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {},
                "track_name": {
                  "type": "string"
                },
                "artist_name": {
                  "type": "string"
                },
                "album_name": {
                  "type": "string"
                },
                "duration": {
                  "type": "number"
                },
                "instrumental": {
                  "type": "boolean"
                },
                "synced_lyrics": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "plain_lyrics": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "additionalProperties": true
            },
            "maxItems": 20
          }
        },
        "additionalProperties": true,
        "required": [
          "tracks"
        ]
      }
    },
    {
      "name": "lyrics.select",
      "permission": "lyrics.control",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "track": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "lyrics.search の tracks の 1 件"
          }
        },
        "additionalProperties": false,
        "required": [
          "track"
        ]
      },
      "result": {
        "type": "object",
        "properties": {
          "ok": {
            "type": "boolean"
          }
        },
        "additionalProperties": true,
        "required": [
          "ok"
        ]
      }
    },
    {
      "name": "lyrics.set_offset",
      "permission": "lyrics.control",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "seconds": {
            "type": "number",
            "description": "-600〜600",
            "minimum": -600,
            "maximum": 600
          },
          "video_id": {
            "type": "string",
            "description": "省略で今の曲",
            "maxLength": 200
          }
        },
        "additionalProperties": false,
        "required": [
          "seconds"
        ]
      },
      "result": {
        "type": "object",
        "properties": {
          "video_id": {
            "type": "string"
          },
          "seconds": {
            "type": "number"
          }
        },
        "additionalProperties": true,
        "required": [
          "video_id",
          "seconds"
        ]
      }
    },
    {
      "name": "lyrics.toggle",
      "permission": "lyrics.control",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "ok": {
            "type": "boolean"
          },
          "message": {
            "type": "string",
            "description": "ミニUI・Stream Deck と同じ操作の結果の短い文"
          }
        },
        "additionalProperties": true,
        "required": [
          "ok"
        ]
      }
    },
    {
      "name": "meters.get",
      "permission": "meters.read",
      "review": false,
      "nclite": true,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "meters": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "{名前: {peak_dbfs: number|null, clip: boolean}}"
          },
          "running": {
            "type": "boolean"
          },
          "busy": {
            "type": "boolean"
          },
          "recording": {
            "type": "boolean"
          }
        },
        "additionalProperties": true,
        "required": [
          "meters",
          "running"
        ]
      }
    },
    {
      "name": "mic.chain.get",
      "permission": "state.read",
      "review": false,
      "nclite": true,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "preset": {
            "type": "string"
          },
          "input_gain_db": {
            "type": "number"
          },
          "presets": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                }
              },
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": true,
        "required": [
          "enabled",
          "preset",
          "presets"
        ]
      }
    },
    {
      "name": "mic.chain.set",
      "permission": "mic.control",
      "review": false,
      "nclite": true,
      "params": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "preset": {
            "type": "string",
            "maxLength": 64
          },
          "input_gain_db": {
            "type": "number",
            "description": "-24〜24",
            "minimum": -24,
            "maximum": 24
          }
        },
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "preset": {
            "type": "string"
          },
          "input_gain_db": {
            "type": "number"
          },
          "presets": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                }
              },
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": true,
        "required": [
          "enabled",
          "preset",
          "presets"
        ]
      }
    },
    {
      "name": "mic.presets.list",
      "permission": "state.read",
      "review": false,
      "nclite": true,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "presets": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                }
              },
              "additionalProperties": true
            }
          },
          "selected": {
            "type": "string"
          }
        },
        "additionalProperties": true,
        "required": [
          "presets"
        ]
      }
    },
    {
      "name": "mic.presets.select",
      "permission": "mic.control",
      "review": false,
      "nclite": true,
      "params": {
        "type": "object",
        "properties": {
          "preset": {
            "type": "string",
            "description": "mic.presets.list の id",
            "maxLength": 64
          }
        },
        "additionalProperties": false,
        "required": [
          "preset"
        ]
      },
      "result": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "preset": {
            "type": "string"
          },
          "input_gain_db": {
            "type": "number"
          },
          "presets": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                }
              },
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": true,
        "required": [
          "enabled",
          "preset",
          "presets"
        ]
      }
    },
    {
      "name": "mic.set",
      "permission": "mic.control",
      "review": false,
      "nclite": true,
      "params": {
        "type": "object",
        "properties": {
          "strength": {
            "type": "integer",
            "description": "0〜5",
            "minimum": 0,
            "maximum": 5
          },
          "denoise": {
            "type": "boolean"
          },
          "voice_tone_db": {
            "type": "number",
            "description": "0〜12",
            "minimum": 0,
            "maximum": 12
          },
          "monitor": {
            "type": "boolean"
          },
          "latency_mode": {
            "type": "string",
            "enum": [
              "normal",
              "low"
            ]
          },
          "lean_buffer": {
            "type": "boolean"
          },
          "loudness_guard": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "applied": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "変えた項目と値"
          },
          "restarted": {
            "type": "boolean",
            "description": "遅延モードを変えて処理を読み直した"
          }
        },
        "additionalProperties": true,
        "required": [
          "applied",
          "restarted"
        ]
      }
    },
    {
      "name": "mic.simple.get",
      "permission": "state.read",
      "review": false,
      "nclite": true,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "simple": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "「簡単」ダイヤルの状態"
          }
        },
        "additionalProperties": true,
        "required": [
          "simple"
        ]
      }
    },
    {
      "name": "mic.simple.set",
      "permission": "mic.control",
      "review": false,
      "nclite": true,
      "params": {
        "type": "object",
        "properties": {
          "dials": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "{つまみの名前: 数値}"
          },
          "on": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "{つまみの名前: true/false}"
          },
          "auto": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "おまかせにするつまみの名前"
          }
        },
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "simple": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "「簡単」ダイヤルの状態"
          }
        },
        "additionalProperties": true,
        "required": [
          "simple"
        ]
      }
    },
    {
      "name": "notify.dismiss",
      "permission": "notify",
      "review": false,
      "nclite": true,
      "params": {
        "type": "object",
        "properties": {
          "proposal_id": {
            "type": "string"
          },
          "notification_id": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "dismissed": {
            "type": "boolean"
          }
        },
        "additionalProperties": true,
        "required": [
          "dismissed"
        ]
      }
    },
    {
      "name": "notify.propose",
      "permission": "notify",
      "review": false,
      "nclite": true,
      "params": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "maxLength": 80
          },
          "summary": {
            "type": "string",
            "maxLength": 400
          },
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "label": {
                  "type": "string"
                },
                "current": {
                  "type": "string"
                },
                "proposed": {
                  "type": "string"
                },
                "reason": {
                  "type": "string"
                }
              },
              "additionalProperties": true
            },
            "maxItems": 20
          }
        },
        "additionalProperties": false,
        "required": [
          "title"
        ]
      },
      "result": {
        "type": "object",
        "properties": {
          "proposal_id": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending"
            ]
          }
        },
        "additionalProperties": true,
        "required": [
          "proposal_id",
          "status"
        ]
      }
    },
    {
      "name": "notify.show",
      "permission": "notify",
      "review": false,
      "nclite": true,
      "params": {
        "type": "object",
        "properties": {
          "level": {
            "type": "string",
            "enum": [
              "info",
              "warn"
            ]
          },
          "title": {
            "type": "string",
            "maxLength": 40
          },
          "body": {
            "type": "string",
            "maxLength": 200
          }
        },
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "notification_id": {
            "type": "string"
          }
        },
        "additionalProperties": true,
        "required": [
          "notification_id"
        ]
      }
    },
    {
      "name": "obs.propose_changes",
      "permission": "obs.write",
      "review": true,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "maxLength": 80
          },
          "note": {
            "type": "string",
            "maxLength": 400
          },
          "changes": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "video",
                    "profile"
                  ]
                },
                "label": {
                  "type": "string"
                },
                "output_width": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 7680
                },
                "output_height": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 7680
                },
                "fps_numerator": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 7680
                },
                "fps_denominator": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 7680
                },
                "category": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "value": {
                  "type": [
                    "string",
                    "number"
                  ]
                }
              },
              "additionalProperties": true,
              "required": [
                "type"
              ]
            },
            "maxItems": 20
          }
        },
        "additionalProperties": false,
        "required": [
          "changes"
        ]
      },
      "result": {
        "type": "object",
        "properties": {
          "proposal_id": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending"
            ]
          }
        },
        "additionalProperties": true,
        "required": [
          "proposal_id",
          "status"
        ]
      }
    },
    {
      "name": "obs.request",
      "permission": "obs.read",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "requestType": {
            "type": "string",
            "description": "読めるのは Get* の許可リストだけ"
          },
          "requestData": {
            "type": "object",
            "properties": {},
            "additionalProperties": true
          }
        },
        "additionalProperties": false,
        "required": [
          "requestType"
        ]
      },
      "result": {
        "type": "object",
        "properties": {
          "responseData": {
            "type": "object",
            "properties": {},
            "additionalProperties": true
          }
        },
        "additionalProperties": true,
        "required": [
          "responseData"
        ]
      }
    },
    {
      "name": "obs.snapshots",
      "permission": "obs.write",
      "review": true,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "snapshots": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "proposal_id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "ts": {
                  "type": "string"
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": true,
        "required": [
          "snapshots"
        ]
      }
    },
    {
      "name": "obs.status",
      "permission": "obs.read",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "connected": {
            "type": "boolean"
          },
          "streaming": {
            "type": "boolean"
          },
          "output_state": {
            "type": "string"
          },
          "obs_version": {
            "type": "string"
          },
          "recording": {
            "type": [
              "boolean",
              "null"
            ]
          }
        },
        "additionalProperties": true,
        "required": [
          "connected",
          "streaming"
        ]
      }
    },
    {
      "name": "overlay.clear",
      "permission": "overlay.draw",
      "review": true,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "overlay": {
            "type": "string",
            "description": "省略で全部"
          }
        },
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "cleared": {
            "type": "integer"
          }
        },
        "additionalProperties": true,
        "required": [
          "cleared"
        ]
      }
    },
    {
      "name": "overlay.set_items",
      "permission": "overlay.draw",
      "review": true,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "overlay": {
            "type": "string",
            "description": "contributes.overlays の id"
          },
          "title": {
            "type": "string",
            "maxLength": 60
          },
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "text",
                    "number",
                    "progress"
                  ]
                }
              },
              "additionalProperties": true,
              "required": [
                "type"
              ]
            },
            "maxItems": 20
          }
        },
        "additionalProperties": false,
        "required": [
          "overlay",
          "items"
        ]
      },
      "result": {
        "type": "object",
        "properties": {
          "layer": {
            "type": "string",
            "description": "統合配信UI の表示の ID"
          },
          "count": {
            "type": "integer"
          }
        },
        "additionalProperties": true,
        "required": [
          "layer",
          "count"
        ]
      }
    },
    {
      "name": "overlay.set_page",
      "permission": "overlay.draw",
      "review": true,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "overlay": {
            "type": "string",
            "description": "contributes.overlays の id（kind: page）"
          },
          "url": {
            "type": "string",
            "description": "http://127.0.0.1:ポート/… か http://localhost:ポート/…",
            "maxLength": 500
          },
          "title": {
            "type": "string",
            "maxLength": 60
          }
        },
        "additionalProperties": false,
        "required": [
          "overlay",
          "url"
        ]
      },
      "result": {
        "type": "object",
        "properties": {
          "layer": {
            "type": "string",
            "description": "統合配信UI の表示の ID"
          }
        },
        "additionalProperties": true,
        "required": [
          "layer"
        ]
      }
    },
    {
      "name": "panel.update",
      "permission": null,
      "review": false,
      "nclite": true,
      "params": {
        "type": "object",
        "properties": {
          "panel": {
            "type": "string",
            "description": "contributes.panels の id"
          },
          "blocks": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "text",
                    "status",
                    "kv",
                    "progress",
                    "timer",
                    "button",
                    "table",
                    "setting",
                    "settings",
                    "url"
                  ]
                }
              },
              "additionalProperties": true,
              "required": [
                "type"
              ]
            },
            "maxItems": 40
          }
        },
        "additionalProperties": false,
        "required": [
          "panel",
          "blocks"
        ]
      },
      "result": {
        "type": "object",
        "properties": {},
        "additionalProperties": true
      }
    },
    {
      "name": "ping",
      "permission": null,
      "review": false,
      "nclite": true,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {},
        "additionalProperties": true
      }
    },
    {
      "name": "player.pause",
      "permission": "player.control",
      "review": true,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "ok": {
            "type": "boolean"
          }
        },
        "additionalProperties": true,
        "required": [
          "ok"
        ]
      }
    },
    {
      "name": "player.play",
      "permission": "player.control",
      "review": true,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "ok": {
            "type": "boolean"
          }
        },
        "additionalProperties": true,
        "required": [
          "ok"
        ]
      }
    },
    {
      "name": "player.seek",
      "permission": "player.control",
      "review": true,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "seconds": {
            "type": "number",
            "description": "0〜21600",
            "minimum": 0,
            "maximum": 21600
          }
        },
        "additionalProperties": false,
        "required": [
          "seconds"
        ]
      },
      "result": {
        "type": "object",
        "properties": {
          "ok": {
            "type": "boolean"
          }
        },
        "additionalProperties": true,
        "required": [
          "ok"
        ]
      }
    },
    {
      "name": "player.set",
      "permission": "player.control",
      "review": true,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "youtube_gain": {
            "type": "number",
            "description": "0〜200（%）",
            "minimum": 0,
            "maximum": 200
          },
          "backing_gain": {
            "type": "number",
            "description": "0〜200（%）",
            "minimum": 0,
            "maximum": 200
          },
          "mixback": {
            "type": "boolean"
          },
          "pitch_semitones": {
            "type": "integer",
            "description": "-6〜6",
            "minimum": -6,
            "maximum": 6
          },
          "pitch_enabled": {
            "type": "boolean"
          },
          "pitch_buffer_ms": {
            "type": "number",
            "enum": [
              120,
              260,
              450
            ]
          },
          "sync_trim_ms": {
            "type": "number",
            "description": "-300〜300",
            "minimum": -300,
            "maximum": 300
          }
        },
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "applied": {
            "type": "object",
            "properties": {},
            "additionalProperties": true
          }
        },
        "additionalProperties": true,
        "required": [
          "applied"
        ]
      }
    },
    {
      "name": "processing.start",
      "permission": "processing.control",
      "review": true,
      "nclite": true,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "running": {
            "type": "boolean"
          }
        },
        "additionalProperties": true,
        "required": [
          "running"
        ]
      }
    },
    {
      "name": "processing.stop",
      "permission": "processing.control",
      "review": true,
      "nclite": true,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "running": {
            "type": "boolean"
          }
        },
        "additionalProperties": true,
        "required": [
          "running"
        ]
      }
    },
    {
      "name": "processing.toggle",
      "permission": "processing.control",
      "review": true,
      "nclite": true,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "running": {
            "type": "boolean"
          }
        },
        "additionalProperties": true,
        "required": [
          "running"
        ]
      }
    },
    {
      "name": "recording.set",
      "permission": "recording.control",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "target_dbfs": {
            "type": "number",
            "description": "-60〜0",
            "minimum": -60,
            "maximum": 0
          },
          "ceiling_db": {
            "type": [
              "string",
              "number"
            ],
            "enum": [
              "off",
              -1,
              -0.5
            ]
          },
          "export_stems": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "applied": {
            "type": "object",
            "properties": {},
            "additionalProperties": true
          }
        },
        "additionalProperties": true,
        "required": [
          "applied"
        ]
      }
    },
    {
      "name": "recording.start",
      "permission": "recording.control",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "recording": {
            "type": "boolean"
          }
        },
        "additionalProperties": true,
        "required": [
          "recording"
        ]
      }
    },
    {
      "name": "recording.stop",
      "permission": "recording.control",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "recording": {
            "type": "boolean"
          }
        },
        "additionalProperties": true,
        "required": [
          "recording"
        ]
      }
    },
    {
      "name": "recording.toggle",
      "permission": "recording.control",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "recording": {
            "type": "boolean"
          }
        },
        "additionalProperties": true,
        "required": [
          "recording"
        ]
      }
    },
    {
      "name": "settings.get",
      "permission": null,
      "review": false,
      "nclite": true,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "settings": {
            "type": "object",
            "properties": {},
            "additionalProperties": true
          }
        },
        "additionalProperties": true,
        "required": [
          "settings"
        ]
      }
    },
    {
      "name": "settings.set",
      "permission": null,
      "review": false,
      "nclite": true,
      "params": {
        "type": "object",
        "properties": {
          "settings": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "{key: 値}（manifest で宣言した項目だけ）"
          }
        },
        "additionalProperties": false,
        "required": [
          "settings"
        ]
      },
      "result": {
        "type": "object",
        "properties": {
          "settings": {
            "type": "object",
            "properties": {},
            "additionalProperties": true
          },
          "changed": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": true,
        "required": [
          "settings",
          "changed"
        ]
      }
    },
    {
      "name": "state.get",
      "permission": "state.read",
      "review": false,
      "nclite": true,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "processing": {
            "type": "object",
            "properties": {
              "running": {
                "type": "boolean"
              },
              "busy": {
                "type": "boolean"
              },
              "strength": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "denoise": {
                "type": "boolean"
              },
              "latency_mode": {
                "type": "string",
                "enum": [
                  "normal",
                  "low"
                ]
              },
              "input": {
                "type": "string",
                "description": "入力の機器名"
              },
              "monitor_enabled": {
                "type": "boolean"
              },
              "singing": {
                "type": "boolean"
              },
              "recording": {
                "type": "boolean"
              }
            },
            "additionalProperties": true
          },
          "player": {
            "type": "object",
            "properties": {
              "active": {
                "type": "boolean"
              },
              "title": {
                "type": "string"
              },
              "channel": {
                "type": "string"
              },
              "video_id": {
                "type": "string",
                "description": "内蔵 YouTube の動画 ID"
              },
              "playing": {
                "type": "boolean"
              },
              "position_s": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "duration_s": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "pitch": {
                "type": "number"
              },
              "pitch_enabled": {
                "type": "boolean"
              },
              "mixback": {
                "type": "boolean"
              }
            },
            "additionalProperties": true
          },
          "lyrics": {
            "type": "object",
            "properties": {
              "track": {
                "type": "string"
              },
              "artist": {
                "type": "string"
              },
              "visible": {
                "type": "boolean"
              }
            },
            "additionalProperties": true
          },
          "broadcast": {
            "type": "object",
            "properties": {
              "software_running": {
                "type": "boolean"
              },
              "summary": {
                "type": "string"
              }
            },
            "additionalProperties": true
          },
          "rights_gate": {
            "type": "boolean"
          },
          "features": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "{機能 ID: 有効か}"
          },
          "language": {
            "type": "string",
            "enum": [
              "ja",
              "en"
            ]
          }
        },
        "additionalProperties": true,
        "required": [
          "processing",
          "player",
          "lyrics",
          "language"
        ]
      }
    },
    {
      "name": "tts.get",
      "permission": "state.read",
      "review": false,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "method": {
            "type": "string"
          },
          "wait_while_singing": {
            "type": "boolean"
          },
          "wait_while_talking": {
            "type": "boolean"
          },
          "queued": {
            "type": "integer"
          },
          "now_reading": {
            "type": "boolean"
          }
        },
        "additionalProperties": true,
        "required": [
          "enabled",
          "method"
        ]
      }
    },
    {
      "name": "tts.reader.stop_all",
      "permission": "tts.control",
      "review": true,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "ok": {
            "type": "boolean"
          },
          "message": {
            "type": "string",
            "description": "ミニUI・Stream Deck と同じ操作の結果の短い文"
          }
        },
        "additionalProperties": true,
        "required": [
          "ok"
        ]
      }
    },
    {
      "name": "tts.reader.toggle",
      "permission": "tts.control",
      "review": true,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "ok": {
            "type": "boolean"
          },
          "message": {
            "type": "string",
            "description": "ミニUI・Stream Deck と同じ操作の結果の短い文"
          }
        },
        "additionalProperties": true,
        "required": [
          "ok"
        ]
      }
    },
    {
      "name": "tts.speak",
      "permission": "tts.speak",
      "review": true,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "maxLength": 300
          },
          "priority": {
            "type": "string",
            "enum": [
              "normal",
              "low"
            ]
          },
          "interrupt_own": {
            "type": "boolean",
            "description": "自分が入れた読み上げを止めてから入れる"
          }
        },
        "additionalProperties": false,
        "required": [
          "text"
        ]
      },
      "result": {
        "type": "object",
        "properties": {
          "utterance_id": {
            "type": "string"
          },
          "queued": {
            "type": "boolean"
          }
        },
        "additionalProperties": true,
        "required": [
          "utterance_id",
          "queued"
        ]
      }
    },
    {
      "name": "tts.stop",
      "permission": "tts.speak",
      "review": true,
      "nclite": false,
      "params": {
        "type": "object",
        "properties": {
          "utterance_id": {
            "type": "string",
            "description": "省略で自分が入れた全部"
          }
        },
        "additionalProperties": false
      },
      "result": {
        "type": "object",
        "properties": {
          "cancelled": {
            "type": "integer"
          }
        },
        "additionalProperties": true,
        "required": [
          "cancelled"
        ]
      }
    }
  ],
  "events": [
    {
      "name": "meters",
      "permission": "meters.read",
      "nclite": true,
      "data": {
        "type": "object",
        "properties": {
          "meters": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "{名前: {peak_dbfs: number|null, clip: boolean}}"
          },
          "running": {
            "type": "boolean"
          },
          "busy": {
            "type": "boolean"
          },
          "recording": {
            "type": "boolean"
          }
        },
        "additionalProperties": true,
        "required": [
          "meters",
          "running"
        ]
      }
    },
    {
      "name": "state.changed",
      "permission": "state.read",
      "nclite": true,
      "data": {
        "type": "object",
        "properties": {
          "changed": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "変わった区分（processing・player・lyrics など）"
          },
          "state": {
            "type": "object",
            "properties": {},
            "additionalProperties": true
          }
        },
        "additionalProperties": true,
        "required": [
          "changed"
        ]
      }
    },
    {
      "name": "processing.changed",
      "permission": "state.read",
      "nclite": true,
      "data": {
        "type": "object",
        "properties": {
          "running": {
            "type": "boolean"
          }
        },
        "additionalProperties": true,
        "required": [
          "running"
        ]
      }
    },
    {
      "name": "settings.changed",
      "permission": null,
      "nclite": true,
      "data": {
        "type": "object",
        "properties": {
          "settings": {
            "type": "object",
            "properties": {},
            "additionalProperties": true
          },
          "changed": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": true,
        "required": [
          "settings"
        ]
      }
    },
    {
      "name": "events.dropped",
      "permission": null,
      "nclite": true,
      "data": {
        "type": "object",
        "properties": {
          "count": {
            "type": "integer"
          },
          "from_seq": {
            "type": "integer"
          },
          "to_seq": {
            "type": "integer"
          }
        },
        "additionalProperties": true,
        "required": [
          "count"
        ]
      }
    },
    {
      "name": "broadcast.changed",
      "permission": "state.read",
      "nclite": false,
      "data": {
        "type": "object",
        "properties": {
          "platform": {
            "type": "string"
          },
          "session_live": {
            "type": "boolean"
          },
          "broadcast_live": {
            "type": "boolean"
          },
          "obs_streaming": {
            "type": "boolean"
          },
          "obs_connected": {
            "type": "boolean"
          }
        },
        "additionalProperties": true
      }
    },
    {
      "name": "obs.changed",
      "permission": "obs.read",
      "nclite": false,
      "data": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "connected": {
            "type": "boolean"
          },
          "streaming": {
            "type": "boolean"
          },
          "output_state": {
            "type": "string"
          },
          "obs_version": {
            "type": "string"
          },
          "recording": {
            "type": [
              "boolean",
              "null"
            ]
          }
        },
        "additionalProperties": true,
        "required": [
          "connected",
          "streaming"
        ]
      }
    },
    {
      "name": "loadtest.sample",
      "permission": "loadtest.run",
      "nclite": false,
      "data": {
        "type": "object",
        "properties": {
          "t": {
            "type": "integer",
            "description": "始めてからの秒"
          },
          "dropouts": {
            "type": "integer",
            "description": "この 1 秒の音切れ"
          },
          "dropouts_total": {
            "type": "integer"
          },
          "processing_ms": {
            "type": "number"
          },
          "hop_budget_ms": {
            "type": "number"
          },
          "over_budget": {
            "type": "boolean"
          },
          "latency_ms": {
            "type": "number"
          },
          "processing_running": {
            "type": "boolean"
          },
          "obs": {
            "type": "object",
            "properties": {
              "cpu": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "memory_mb": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "fps": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "frame_render_ms": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "render_skipped": {
                "type": "integer"
              },
              "output_skipped": {
                "type": "integer"
              }
            },
            "additionalProperties": true
          }
        },
        "additionalProperties": true,
        "required": [
          "t",
          "dropouts",
          "dropouts_total"
        ]
      }
    },
    {
      "name": "loadtest.ended",
      "permission": "loadtest.run",
      "nclite": false,
      "data": {
        "type": "object",
        "properties": {
          "session_id": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          },
          "mode": {
            "type": "string",
            "enum": [
              "stress",
              "measure"
            ]
          },
          "duration_s": {
            "type": "integer"
          },
          "samples": {
            "type": "integer"
          },
          "dropouts_total": {
            "type": "integer"
          },
          "max_processing_ms": {
            "type": "number"
          },
          "over_budget_seconds": {
            "type": "integer"
          },
          "obs": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "render_skipped_total": {
                "type": "integer"
              },
              "output_skipped_total": {
                "type": "integer"
              }
            }
          }
        },
        "additionalProperties": true
      }
    },
    {
      "name": "chat.message",
      "permission": "chat.read",
      "nclite": false,
      "data": {
        "type": "object",
        "properties": {
          "seq": {
            "type": "integer",
            "description": "受信済みの一覧の通し番号（chat.history の since に使う）"
          },
          "platform": {
            "type": "string",
            "enum": [
              "youtube",
              "twitch"
            ]
          },
          "kind": {
            "type": "string",
            "description": "chat / membership / membership_gift / redemption / follow など"
          },
          "user": {
            "type": "object",
            "properties": {
              "hash": {
                "type": "string",
                "description": "元に戻せない形の視聴者 ID（同じアプリの起動の間だけ同じ人は同じ値）"
              },
              "name": {
                "type": "string"
              }
            },
            "additionalProperties": true
          },
          "text": {
            "type": "string"
          },
          "at": {
            "type": "number",
            "description": "受信した時刻（UNIX 秒）"
          },
          "is_owner": {
            "type": "boolean"
          },
          "is_moderator": {
            "type": "boolean"
          },
          "is_member": {
            "type": "boolean"
          },
          "is_own": {
            "type": "boolean",
            "description": "SyncSing（拡張機能を含む）が投稿したもの"
          },
          "deleted": {
            "type": "boolean"
          },
          "reward_title": {
            "type": "string"
          },
          "superchat": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "type": {
                "type": "string"
              },
              "amount_text": {
                "type": "string"
              },
              "amount": {
                "type": "number"
              },
              "currency": {
                "type": "string"
              }
            }
          },
          "meta": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "gift_count・months・tier・prime・anonymous・gift_received・membership_text・gifter_name・recipient_name"
          },
          "translation": {
            "type": "object",
            "properties": {
              "source_language": {
                "type": "string"
              },
              "text": {
                "type": "string"
              }
            },
            "additionalProperties": true
          }
        },
        "additionalProperties": true,
        "required": [
          "seq",
          "platform",
          "kind",
          "user",
          "text"
        ]
      }
    },
    {
      "name": "player.changed",
      "permission": "state.read",
      "nclite": false,
      "data": {
        "type": "object",
        "properties": {
          "active": {
            "type": "boolean"
          },
          "title": {
            "type": "string"
          },
          "channel": {
            "type": "string"
          },
          "video_id": {
            "type": "string",
            "description": "内蔵 YouTube の動画 ID"
          },
          "playing": {
            "type": "boolean"
          },
          "position_s": {
            "type": [
              "number",
              "null"
            ]
          },
          "duration_s": {
            "type": [
              "number",
              "null"
            ]
          },
          "pitch": {
            "type": "number"
          },
          "pitch_enabled": {
            "type": "boolean"
          },
          "mixback": {
            "type": "boolean"
          }
        },
        "additionalProperties": true
      }
    },
    {
      "name": "effects.changed",
      "permission": "state.read",
      "nclite": false,
      "data": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "preset": {
            "type": "string"
          },
          "selected": {}
        },
        "additionalProperties": true
      }
    },
    {
      "name": "entry.changed",
      "permission": "state.read",
      "nclite": false,
      "data": {
        "type": "object",
        "properties": {
          "accepting": {
            "type": "boolean"
          },
          "playing": {
            "type": "integer"
          },
          "waiting": {
            "type": "integer"
          },
          "slots": {
            "type": "integer"
          }
        },
        "additionalProperties": true
      }
    },
    {
      "name": "proposal.result",
      "permission": "notify",
      "nclite": true,
      "data": {
        "type": "object",
        "properties": {
          "proposal_id": {
            "type": "string"
          },
          "result": {
            "type": "string",
            "enum": [
              "approved",
              "declined",
              "applied",
              "partial",
              "failed",
              "reverted"
            ]
          },
          "message": {
            "type": "string"
          },
          "snapshot_id": {
            "type": "string"
          }
        },
        "additionalProperties": true,
        "required": [
          "proposal_id",
          "result"
        ]
      }
    }
  ],
  "host_requests": [
    {
      "name": "ping",
      "params": {
        "type": "object",
        "properties": {
          "ts": {}
        },
        "additionalProperties": true
      },
      "result": {
        "type": "object",
        "properties": {},
        "additionalProperties": true
      }
    },
    {
      "name": "plugin.activate",
      "params": {
        "type": "object",
        "properties": {
          "reason": {
            "type": "string",
            "enum": [
              "startup",
              "command",
              "tool",
              "panel",
              "processing",
              "broadcast",
              "obs"
            ]
          }
        },
        "additionalProperties": true
      },
      "result": {
        "type": "object",
        "properties": {
          "ok": {
            "type": "boolean"
          }
        },
        "additionalProperties": true
      }
    },
    {
      "name": "plugin.shutdown",
      "params": {
        "type": "object",
        "properties": {
          "reason": {
            "type": "string",
            "enum": [
              "app_quit",
              "disable",
              "update",
              "restart"
            ]
          }
        },
        "additionalProperties": true
      },
      "result": {
        "type": "object",
        "properties": {
          "ok": {
            "type": "boolean"
          }
        },
        "additionalProperties": true
      }
    },
    {
      "name": "command.invoke",
      "params": {
        "type": "object",
        "properties": {
          "command": {
            "type": "string"
          },
          "source": {
            "type": "string",
            "enum": [
              "deck",
              "mini",
              "shortcut",
              "panel"
            ]
          },
          "pressed": {
            "type": "string",
            "enum": [
              "short",
              "long"
            ]
          }
        },
        "additionalProperties": true,
        "required": [
          "command"
        ]
      },
      "result": {
        "type": "object",
        "properties": {
          "ok": {
            "type": "boolean"
          },
          "message": {
            "type": "string",
            "description": "失敗のとき、キーに短く出す文"
          }
        },
        "additionalProperties": true,
        "required": [
          "ok"
        ]
      }
    },
    {
      "name": "tool.run",
      "params": {
        "type": "object",
        "properties": {
          "tool": {
            "type": "string"
          }
        },
        "additionalProperties": true,
        "required": [
          "tool"
        ]
      },
      "result": {
        "type": "object",
        "properties": {
          "ok": {
            "type": "boolean"
          }
        },
        "additionalProperties": true
      }
    },
    {
      "name": "settings.changed",
      "params": {
        "type": "object",
        "properties": {
          "settings": {
            "type": "object",
            "properties": {},
            "additionalProperties": true
          },
          "changed": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": true
      },
      "result": {
        "type": "object",
        "properties": {},
        "additionalProperties": true
      }
    }
  ],
  "permissions": [
    {
      "id": "state.read",
      "review": false,
      "nclite": true,
      "available": true,
      "description": {
        "ja": "今の状態を読む（曲・エフェクト・マイクの設定・エントリーの人数・配信の接続状態）",
        "en": "Read the current state (song, effects, mic settings, entry counts, broadcast connection)"
      }
    },
    {
      "id": "meters.read",
      "review": false,
      "nclite": true,
      "available": true,
      "description": {
        "ja": "音量メーター・処理時間・音切れの数を読む",
        "en": "Read level meters, processing time and dropout counts"
      }
    },
    {
      "id": "chat.read",
      "review": false,
      "nclite": false,
      "available": true,
      "description": {
        "ja": "受信したコメントを読む（視聴者の ID はそのまま渡さない）",
        "en": "Read received chat messages (viewer IDs are hashed)"
      }
    },
    {
      "id": "chat.write",
      "review": true,
      "nclite": false,
      "available": true,
      "description": {
        "ja": "チャットへ投稿する（連携タブで選んだアカウント＝配信者本人か Bot の発言として出る）",
        "en": "Post to chat (as the account chosen in the Link tab: you or your bot)"
      }
    },
    {
      "id": "mic.control",
      "review": false,
      "nclite": true,
      "available": true,
      "description": {
        "ja": "ノイズ除去の強さ・マイク音質・声の補正・遅延モードを変える",
        "en": "Change noise removal strength, mic quality, voice tone and latency mode"
      }
    },
    {
      "id": "audio.output",
      "review": true,
      "nclite": false,
      "available": true,
      "description": {
        "ja": "仮想マイクの出力音量を変える（0 にすると配信が無音になる）",
        "en": "Change the virtual-mic output level (0 silences the stream)"
      }
    },
    {
      "id": "processing.control",
      "review": true,
      "nclite": true,
      "available": true,
      "description": {
        "ja": "音声処理を開始・停止する（停止すると配信の声が止まる）",
        "en": "Start and stop audio processing (stopping silences your voice)"
      }
    },
    {
      "id": "recording.control",
      "review": false,
      "nclite": false,
      "available": true,
      "description": {
        "ja": "録音を開始・停止し、録音の設定を変える",
        "en": "Start/stop recording and change recording settings"
      }
    },
    {
      "id": "effects.control",
      "review": false,
      "nclite": false,
      "available": true,
      "description": {
        "ja": "エフェクト・プリセット・お気に入りを切り替える",
        "en": "Switch effects, presets and favorites"
      }
    },
    {
      "id": "editfx.manage",
      "review": false,
      "nclite": false,
      "available": true,
      "description": {
        "ja": "Edit FX のテンプレートを読み書きする",
        "en": "Read and write Edit FX templates"
      }
    },
    {
      "id": "player.control",
      "review": true,
      "nclite": false,
      "available": true,
      "description": {
        "ja": "内蔵 YouTube を操作する（再生・一時停止・シーク・キー変更）",
        "en": "Control the built-in YouTube player (play, pause, seek, key change)"
      }
    },
    {
      "id": "bgm.control",
      "review": false,
      "nclite": false,
      "available": true,
      "description": {
        "ja": "BGM の再生・音量・自動で下げる・次の曲",
        "en": "Control BGM playback, volume, ducking and next track"
      }
    },
    {
      "id": "lyrics.control",
      "review": false,
      "nclite": false,
      "available": true,
      "description": {
        "ja": "歌詞を検索・選択・読み込み・表示切替・補正する",
        "en": "Search, select, load, toggle and offset lyrics"
      }
    },
    {
      "id": "entry.control",
      "review": false,
      "nclite": false,
      "available": true,
      "description": {
        "ja": "エントリーの受付切替・確定・スキップ",
        "en": "Toggle entry acceptance, confirm and skip entries"
      }
    },
    {
      "id": "tts.speak",
      "review": true,
      "nclite": false,
      "available": true,
      "description": {
        "ja": "読み上げに文章を渡す（配信の音に乗る）",
        "en": "Send text to the comment reader (audible on stream)"
      }
    },
    {
      "id": "tts.control",
      "review": true,
      "nclite": false,
      "available": true,
      "description": {
        "ja": "読み上げを ON/OFF・全停止する",
        "en": "Turn the comment reader on/off and stop all speech"
      }
    },
    {
      "id": "dictionary.write",
      "review": false,
      "nclite": false,
      "available": true,
      "description": {
        "ja": "読み方辞書に項目を足す（自分が足した項目だけ消せる）",
        "en": "Add pronunciation entries (can remove only its own)"
      }
    },
    {
      "id": "overlay.draw",
      "review": true,
      "nclite": false,
      "available": true,
      "description": {
        "ja": "統合配信UI のプラグイン用レイヤーへ表示する（配信の映像に出る）",
        "en": "Draw into the plugin layer of the browser overlay (visible on stream)"
      }
    },
    {
      "id": "notify",
      "review": false,
      "nclite": true,
      "available": true,
      "description": {
        "ja": "アプリの画面に通知・提案を出す",
        "en": "Show notifications and proposals in the app"
      }
    },
    {
      "id": "obs.read",
      "review": false,
      "nclite": false,
      "available": true,
      "description": {
        "ja": "OBS の状態・統計・設定の一部を読む（SyncSing 経由。ストリームキーは読めない）",
        "en": "Read OBS status, stats and some settings via SyncSing (never the stream key)"
      }
    },
    {
      "id": "obs.write",
      "review": true,
      "nclite": false,
      "available": true,
      "description": {
        "ja": "OBS の設定変更を提案する（適用はあなたが押す）",
        "en": "Propose OBS setting changes (you apply them)"
      }
    },
    {
      "id": "loadtest.run",
      "review": true,
      "nclite": false,
      "available": true,
      "description": {
        "ja": "負荷テストの枠を取り、計測値を受け取る（配信中は使えない）",
        "en": "Run load tests and receive measurements (not while streaming)"
      }
    },
    {
      "id": "system.unrestricted",
      "review": true,
      "nclite": false,
      "available": true,
      "description": {
        "ja": "隔離せずに動かす（PC のファイル・ネットワーク・ほかのアプリに制限なくアクセスできる）",
        "en": "Run without isolation (unrestricted access to files, network and other apps on this PC)"
      }
    }
  ],
  "limits": {
    "message_bytes": 1048576,
    "calls_per_sec": 20,
    "concurrent": 4,
    "event_queue": 500,
    "ping_interval_s": 15.0,
    "hello_timeout_s": 10.0
  }
}
