コンテンツにスキップ

画像処理 API

この仕様は、Mankai のリモート画像処理サービスが使用する HTTP API を定義します。利用者は、設定 → 画像処理でサーバーのベース URL を追加します。Mankai は処理サービスのメタデータを読み込み、サーバーが定義した設定項目を表示します。処理サービスを有効にすると、リーダーの各画像をサーバーに送信します。

アプリでの設定方法と使い方は、画像処理を参照してください。

メソッド パス 認証 目的
GET / 不要 処理サービスのメタデータと設定を返します。
POST /process 任意 1 枚の画像を処理します。
POST /auth/login 不要 認証が有効な場合にログインします。
POST /auth/refresh 不要 アクセストークンを更新します。

利用者が入力する URL はベース URL です。たとえば https://images.example.com/mankai を入力すると、画像処理のエンドポイントは https://images.example.com/mankai/process になります。

レスポンス — 200 OK

interface ImageProcessorInfo {
id: string // Stable server/processor identifier
name?: string
version?: string
description?: string
authors?: string[] // Default: []
repository?: string
authenticationEnabled?: boolean // Default: false
configs?: Config[] // Default: []
}
type ConfigType =
'text' | 'password' | 'number' | 'slider' | 'boolean' | 'select' | 'color'
interface Config {
key: string // Unique within this processor
name: string // User-facing label or localization key
description?: string
type: ConfigType
defaultValue: string | number | boolean
options?: string[] // Used by "select"
min?: number // Used by "slider"
max?: number // Used by "slider"
step?: number // Used by "slider"
supportsOpacity?: boolean // Used by "color", defaults to false
}

例を示します。

{
"id": "com.example.manga-denoise",
"name": "Manga Denoise",
"version": "1.0.0",
"description": "Removes scan noise while preserving line art.",
"authors": ["Example Lab"],
"repository": "https://example.com/manga-denoise",
"authenticationEnabled": false,
"configs": [
{
"key": "strength",
"name": "Strength",
"description": "Higher values remove more noise.",
"type": "slider",
"defaultValue": 0.5,
"min": 0,
"max": 1,
"step": 0.1
},
{
"key": "preserveText",
"name": "Preserve text",
"type": "boolean",
"defaultValue": true
}
]
}

画像をバイナリのまま送信するため、リクエストには multipart/form-data を使用します。以下の 3 つのパートだけを含めてください。

パート コンテンツタイプ 値
image image/png パイプライン内の現在の画像を表す PNG ファイルです。
configs application/json サーバーが定義したすべての設定の現在値です。
context application/json 論理ポイント単位で表したリーダーの表示サイズです。

configs は、JavaScript プラグインの設定 API と同じキーと値の形式を使用します。

interface ConfigValue {
key: string
value: string | number | boolean
}
type ConfigValues = ConfigValue[]

configs パートの例を示します。

[
{ "key": "strength", "value": 0.8 },
{ "key": "preserveText", "value": true }
]

context パートは次の形式です。

interface ProcessContext {
pointSize: {
width: number
height: number
}
}

サーバーは、処理済みの画像を直接返す必要があります。ステータスコードは 2xx、Content-Type は image/* としてください。PNG、JPEG、WebP、HEIF、およびクライアントのプラットフォームが対応するその他の画像形式を使用できます。処理済みの画像は、次の画像処理サービスに渡されるため、実用的な解像度と画質を維持してください。

authenticationEnabled を true にすると、POST /process に JWT の Bearer 認証が必要になります。Mankai はユーザー名とパスワードの入力欄を表示し、HTTP プラグインと同じトークンの取得と更新の流れを使用します。

リクエストボディ

{
"username": "user",
"password": "secret"
}

レスポンス — 200 OK

{
"accessToken": "short-lived JWT",
"refreshToken": "long-lived refresh token"
}

リクエストボディ

{
"refreshToken": "long-lived refresh token"
}

レスポンス — 200 OK

{
"accessToken": "new short-lived JWT"
}