AI 3D Logo Makerを実装するとき、最初に整理したのはモデル名や派手なサンプルではなく、入力契約でした。画面には「3D Logoを作る」という一つの目的が見えますが、実際には二つの異なる仕事があります。
一つはブランド名や業種、シンボル、素材感、配色、背景を文章で渡すText-to-Logoです。もう一つは既存の2Dロゴ画像を起点に、輪郭や識別要素を残しながら立体表現を試す2D-to-3Dです。この二つを同じ入力として扱うと、必須項目、検証、失敗理由、レビュー基準が曖昧になります。
入力をdiscriminated unionとして扱う
フロントエンドとAPIの間では、モードを文字列一つで補足するより、入力型そのものを分けた方が安全です。
type LogoRequest =
| {
mode: "text";
brandName: string;
industry?: string;
symbol?: string;
material?: "metal" | "glass" | "clay" | "plastic";
colors?: string[];
background?: string;
outputCount: 1 | 2 | 3 | 4;
}
| {
mode: "image";
sourceImageId: string;
preserve: Array<"silhouette" | "wordmark" | "colors" | "negative-space">;
material?: "metal" | "glass" | "clay" | "plastic";
outputCount: 1 | 2 | 3 | 4;
};
Text-to-Logoではブランド名または十分なbriefが必要です。2D-to-3Dでは有効な画像参照と、何を残すかの指定が必要です。クライアント側で入力しやすさを改善しつつ、サーバー側でも同じ契約を再検証します。クライアント検証だけでは、古い画面、手書きリクエスト、再送、改変されたpayloadを防げないからです。
実行時の情報を送信直前に固定する
生成数、表示されるcreditコスト、利用可能な設定は変わる可能性があります。そのため、記事や古いスクリーンショットに固定値を書き込み、APIが永遠に同じだと仮定するのは危険です。
送信前の確認画面では、少なくとも次の値を一つのsnapshotとして表示します。
- 選択した入力モード
- 生成する候補数(1〜4)
- 現在画面に表示されているcreditコスト
- 参照画像またはbrand briefの要約
- 保存前に確認する権利と利用目的
サーバーはこのsnapshotをそのまま信頼せず、現在のcapabilityと照合します。料金や利用可能数が変わった場合は、勝手に別条件で実行するより、差分を返して再確認を求める方が安全です。
生成は同期レスポンスではなくjobとして扱う
画像生成は待ち時間があり、成功以外にもqueued、running、failed、expiredといった状態があります。画面をロックしたまま一つのHTTPリクエストを待つ設計では、更新、再接続、重複送信への対処が難しくなります。
実装ではrequestを受け付けたらjob IDを返し、クライアントは状態を取得します。送信ボタンにはidempotency keyを持たせ、二重クリックやネットワーク再送でcreditを二重消費しないようにします。失敗時には「生成できませんでした」だけでなく、入力検証、残高、provider、一時的な処理失敗のどこで止まったかを、人に見せられる範囲で分けます。
completedはapprovedではない
jobがcompletedになっても、ロゴとして採用できるとは限りません。結果画面では1〜4件の候補を同じ条件で比較し、次のreview gateを通します。
- ブランド名やwordmarkの綴りは正しいか
- 元のシルエットとnegative spaceを必要な範囲で保てているか
- 小さいアイコンサイズでも識別できるか
- 立体感、影、素材がブランドの用途に合うか
- 既存商標や第三者素材との類似、利用権に問題がないか
このレビューをUI上の独立したstepにすると、モデルの完了状態と人間の承認状態を混同しにくくなります。再生成、候補選択、ダウンロードのイベントも分けて記録でき、どの入力からどの結果を選んだか追跡しやすくなります。
出力境界を正しく書く
このワークフローが生成するのは3Dスタイルのラスタ画像コンセプトです。編集可能な3Dモデル、ベクター原稿、完全なブランドガイド、商標登録可能性の判断を自動で納品するものではありません。正式利用では、デザイナーによる再作図、タイポグラフィと色指定の整理、縮小テスト、商標調査が必要になる場合があります。
プロダクト説明でもこの境界を消さない方がよいと思います。「3D Logoが生成された」と「運用可能なブランド資産が完成した」は別の状態です。
まとめ
AI画像機能を安定したプロダクトにするには、prompt欄だけでは足りません。Text-to-Logoと2D-to-3Dの入力契約を分け、実行時capabilityを確認し、生成をjobとして追跡し、最後に人間のreview gateを置く必要があります。
今回の実装例は次のページです。リンク先の現在の画面で、二つの入力経路、表示中のコスト、候補数、結果レビューの流れを確認できます。
