uncloth.app ガイド
uncloth.app API で生成された結果

アダルト写真フィルター
アプリのためのAPI

エンドポイントは 1 つ、プリセットは 11 種類。写真を送れば仕上がった結果が返ります。プラットフォームがどれだけの規模で動いていても同じです。

本番環境で動かすために作られています

uncloth.app は、生成画像を実験ではなくプロダクトの信頼できる一部として必要とするプラットフォームのための画像変換 API です。写真と使いたいプリセットを送っていただければ、仕上がった結果をお返しします。

エンドポイントの背後にあるものはすべて当社が運用します。キャパシティ、キューイング、配信、復旧まで。お客様側の実装は、認証付きの HTTP 呼び出し 1 回と、進捗をリアルタイムで受け取る場合の WebSocket 接続 1 本だけです。

リクエストの挙動は当社の混雑状況に左右されません。同じ呼び出しは、導入初日でもピーク負荷時でも同じように動作します。

1 枚の写真、すべてのプリセット

以下の結果はすべて同じ元写真から生成したもので、リクエストで変更したのはプリセット id だけです。

11 種類のプリセット

ジョブに feature=<id> を指定します。省略した場合は undress にフォールバックします。不明な id は有効な一覧とともに拒否されるため、入力ミスは誤った画像を返さずに明確なエラーになります。

01
ビキニfeature=bikini
02
バストサイズfeature=breast_size
03
バニースーツfeature=bunny_suit
04
レースランジェリーfeature=lace_lingerie
05
緊縛feature=shibari
06
ストッキングfeature=stocking
07
タトゥーfeature=tattoo
08
脱衣デフォルトfeature=undress
09
チアリーダー衣装feature=cheerleader_outfit
10
サッカーユニフォームfeature=footy
11
胸の露出feature=flash_tits

4 回の呼び出しで完結

01

写真を送る

画像、プリセット、同意確認を含む multipart の POST。ジョブ id がすぐに返ります。

02

進捗を追う

ジョブ用エンドポイントをポーリングするか、WebSocket を購読して処理中の進捗イベントをリアルタイムで受け取ります。

03

結果を受け取る

完了したジョブにはアーティファクト id が含まれます。同じキーで取得すれば画像のバイト列が得られます。

04

無料で再試行

同じ Idempotency-Key で呼び出しを繰り返すと、元のジョブが返ります。再試行で 2 つ目の結果が生成されることはありません。

実装のすべて

1 つのヘッダーですべての呼び出しを認証します。レスポンスはキーを保有するクライアントの範囲に限定され、ジョブもイベントも結果も同様です。

POST/api/v1/jobsジョブを作成します。Multipart: image、feature、consent。Idempotency-Key ヘッダー。
GET/api/v1/jobs/:idジョブの状態、進捗、結果の id。
GET/api/v1/artifacts/:id生成された画像をダウンロードします。
GET/api/v1/featuresプリセットの一覧。公開されており、キーは不要です。
WS/api/v1/ws認証メッセージ後にリアルタイムの job.updated イベントを受信します。

ベース URL はキーとともに発行されます。

ジョブを作成
curl -X POST https://api.uncloth.app/api/v1/jobs \
  -H "X-API-Key: $UNCLOTH_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -F feature=bikini \
  -F consent=confirmed \
  -F image=@photo.jpg

# { "data": { "id": "job_...", "status": "queued" } }
結果を受け取る
curl -H "X-API-Key: $UNCLOTH_KEY" \
  https://api.uncloth.app/api/v1/jobs/JOB_ID

# { "data": { "status": "succeeded",
#     "outputs": [ { "id": "art_..." } ] } }

curl -H "X-API-Key: $UNCLOTH_KEY" \
  https://api.uncloth.app/api/v1/artifacts/ART_ID \
  -o result.png

応答し続けるための設計

キャパシティ、キュー、配信経路は当社が運用するため、お客様のプラットフォームで抱える必要はありません。以下は、このサービスをどのように構築し運用しているかについての約束です。

10分で削除

お客様の画像は、結果を受け取ってから10分後に当社のシステムから削除されます。学習・確認その他いかなる目的でも保持しません。

可用性 99.9% を目標

当社が設計・運用・計測の基準とするサービスレベルであり、個々のコンポーネントではなく API のエッジで計測しています。

グローバルな基盤

リクエストは分散されたキャパシティで処理されるため、ある地域の需要が他のすべての利用者の待ち行列になることはありません。

自動スケーリング

キャパシティは負荷に追随します。トラフィックの急増が変えるのはスループットだけで、API の形やコードからの呼び出し方は変わりません。

標準でフェイルオーバー

どの単一コンポーネントも、お客様側で対処が必要な中断を起こさずに切り離し・交換できます。処理中の作業は失われず復旧されます。

キーごとの分離

キーから見えるのは自分のジョブ、イベント、結果だけです。レスポンスが内部識別子やインフラの詳細を露出することはありません。

契約としての冪等性

Idempotency-Key ヘッダーにより再試行が安全になります。繰り返しても処理が二重に走ることはなく、元のジョブが返ります。

永続的なキューイング

受け付けた作業は開始前に記録され、後から復旧できます。経路上のどこかで再起動が起きても、ジョブが失われることはありません。

厳格な入力検証

JPEG、PNG、WebP を 20 MiB まで受け付けます。ファイル名や申告された種別ではなく、内容で検証します。

よくある質問

認証はどうしますか?

REST の呼び出しでは X-API-Key ヘッダーを使います。WebSocket では接続後の最初のメッセージでキーを送るため、URL やプロキシのログに残ることはありません。

リクエストがタイムアウトしたらどうなりますか?

同じ Idempotency-Key で再送してください。元のジョブが返り、2 つ目の結果が生成されることはありません。

対応する形式とサイズは?

JPEG、PNG、WebP を 20 MiB まで。ファイルの実際の内容を検証するため、名前を変えたり種別を偽ったファイルは拒否されます。

1 枚の写真に複数のプリセットを適用できますか?

できます。プリセットごとに個別のジョブとなるため、同じ元画像でプリセットごとにジョブを 1 件ずつ送信し、それぞれ個別に追跡してください。

ポーリングは必須ですか?

いいえ。WebSocket に接続して認証すると、直近のジョブのスナップショットが届き、その後はリアルタイムの更新が続きます。ポーリングもフォールバックとして利用できます。

同意は強制されますか?

はい。consent=confirmed のない作成呼び出しは API の境界で拒否されます。必須フィールドであり、お客様が責任を負う申告です。

料金はいくらですか?

価格は利用量に応じて決まり、アクセス提供時にお見積りします。プラットフォームの内容と想定スループットをお知らせいただければ、具体的な数字をご提示します。

画像は保管されますか?

元画像と結果はプライベートなストレージに保管され、それらを作成したキーにのみ提供されます。保持期間の条件はアクセス提供の一環として取り決めます。

何を作っているか教えてください

アクセスは実装ごとに提供します。プラットフォームの内容、想定する利用量、画像に写る人物からどのように同意を得ているかをお知らせください。認証情報とベース URL をお送りします。

一般公開の登録はありません。セルフサービスのキー発行もありません。