画像処理 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 になります。
処理サービスの情報
「処理サービスの情報」のセクションGET /
「GET /」のセクションレスポンス — 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 } ]}画像処理
「画像処理」のセクションPOST /process
「POST /process」のセクション画像をバイナリのまま送信するため、リクエストには 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 プラグインと同じトークンの取得と更新の流れを使用します。
POST /auth/login
「POST /auth/login」のセクションリクエストボディ
{ "username": "user", "password": "secret"}レスポンス — 200 OK
{ "accessToken": "short-lived JWT", "refreshToken": "long-lived refresh token"}POST /auth/refresh
「POST /auth/refresh」のセクションリクエストボディ
{ "refreshToken": "long-lived refresh token"}レスポンス — 200 OK
{ "accessToken": "new short-lived JWT"}