ベクター画像が生成できる画像生成サービス「Recraft」を試す
ここで知った。
編集可能なベクターグラフィックスを生成し、SVGとして書き出すことができる新しい画像生成サービス「Recraft AI」に非常に感銘を受けました。
これは、ラスターグラフィックしか出力できないツールよりも非常に便利です。
こちらが私のノートです。APIを使って、カリフォルニアブラウンペリカンが自転車に乗っている素晴らしい画像を生成したことについて書いています。
Simonさんのブログ記事
ベクター画像を生成できるってのはいろいろ役に立ちそう。ちょっと前の仕事で、アイコン的な画像をいろいろ作らないといけないことがあって、もっと早く知りたかったと思うと同時に、今後も活用できそうな気がしたので、少し試してみようと思う。
「Recraft」公式サイト
料金ページはこちら。
2024/11/17時点での、ざっくりまとめはこんな感じ。
Freeプラン | Basicプラン | Advancedプラン | Proプラン | |
---|---|---|---|---|
月額料金 | 無料 | $10 | $27 | $48 |
クレジット | 50/日 | 1000/月 | 4000/月 | 8400/月 |
生成画像の公開 | パブリック | プライベート | プライベート | プライベート |
所有/商用権利 | ✘ (Recraftが持つ) |
◯ (ユーザが持つ) |
◯ (ユーザが持つ) |
◯ (ユーザが持つ) |
Creative Upscale | ? | ◯ | ◯ | ◯ |
生成優先度 | ? | ◯ | ◯ | ◯ |
並列処理 | 2 | 10 | 10 | 10 |
1回のプロンプトあたり 最大同時生成数 |
2 | 4 | 4 | 4 |
追加チャージ | ✘ | 無制限 $4で400クレジット |
無制限 $4で400クレジット |
無制限 $4で400クレジット |
あとEnterpriseプランもあるみたい。
QAにもいろいろ書いてあるけど、商用利用については有料アカウントにする必要がある。
Recraftでの著作権の扱いはどうなっていますか?
作成した画像の所有権は誰にありますか? 無料ユーザーが作成した画像はRecraftに所有権があります。これらの画像は公開(コミュニティギャラリーで表示可能)され、商用利用はできません。作成物の所有権を持ち、非公開にして商用利用したい場合は、有料プランにアップグレードしてください。所有権と商用利用に関する詳細は、こちらをご覧ください。
生成した画像をストックウェブサイトで販売できますか?
サブスクリプションがない場合、画像はRecraftの所有物であり、ストックウェブサイトでは画像の所有権が必要なことが多いため販売はできません。
有料プラン中に生成した画像は、サブスクリプション終了後に公開されますか?
いいえ、有料サブスクリプション中に作成した画像は、サブスクリプション終了後も引き続き非公開のままです。
ここに詳しい説明がある
クレジット消費については以下に記載がある
- ラスター画像の場合
- 以下の操作で、1回あたり 1クレジット
- 生成
- 再生成
- 部分変更
- クラリティアップスケール
- 部分削除
- ベクター化
- 背景の削除
- 背景の変更
- 以下の操作で、1回あたり 1クレジット
- ベクター画像の場合
- 以下の操作で、1回あたり 2クレジット
- 生成
- 部分変更
- 部分削除
- 背景削除
- 背景変更
- 以下の操作で、1回あたり 2クレジット
- モックアップ
- 以下の操作で、1回あたり 2クレジット
- 画像をモックアップに変換
- モックアップ画像の生成
- 以下の操作で、1回あたり 2クレジット
- クリエイティブアップスケール
- 1回あたり 20クレジット
モックアップについてはこちら
アップスケールについてはこちら
Recraft AI 画像アップスケーラーは、小さな画像を高解像度画像に変換するプロセスをシンプルでシームレスにします。画像のアップスケールには2種類の方法があります。クラリティアップスケール(1 Recraftクレジット)は画像の解像度を上げ、画像をよりシャープで綺麗にします。クリエイティブアップスケール(20クレジット)は、小さなディテールや顔の精細化に重点を置いて解像度を上げます。少し時間がかかりますが、結果は素晴らしいものです。
RecraftはAPIも提供している
$1で1000APIユニットを購入し、各処理によってAPIユニット消費数が異なるという感じっぽい。
内容 | 料金 (USD) | APIユニット消費量 |
---|---|---|
ラスター画像生成(1枚あたり) | $0.04 | 40 |
ベクター画像生成(1枚あたり) | $0.08 | 80 |
画像スタイル作成 | $0.04 | 40 |
画像のベクター化 | $0.04 | 40 |
画像背景の削除 | $0.04 | 40 |
Clarity upscale | $0.04 | 40 |
Generative upscale | $0.8 | 800 |
GUIとAPIでできること・できないことの差分があるのかはわからないけど、上でも記載した所有権・商用利用権のFAQには、
Q: APIを提供していますか。
A:はい、APIがあります。現在はテストモードで利用可能です。 APIへのアクセス権を購入し、APIを通じて画像を生成した場合、生成されたコンテンツは完全にあなたのものとなります。
とあるので、これなら使い勝手が良さそうに思える。
ただし、モデルの学習目的での利用は不可。
Q: 生成された画像を使って、自分のAIを訓練したり教えたりすることはできますか?
A: 資産は、人工知能モデル、システム、ネットワーク、または同様の技術を訓練するために使用することはできません。 これらの制限に違反した場合、本契約は直ちに終了し、お客様に付与されたすべての権利は Recraft に返還されるものとします。
GUIでの操作
まずはGUIで試してみる。Freeプランでアカウント作成してログイン。以下のような画面が表示される。
これはあらかじめ用意されている"HOW TO: Basics"というプロジェクトの画面で、プロジェクトごとにキャンバス上で作業を行う、という感じになっているっぽい。
ここで直接いろいろ試してもいいのだけど、新しいプロジェクトを作って試そうと思う。左上のホームアイコンをクリック。
プロジェクトの一覧が表示される。先程の"HOW TO: Basics"も含めて、他にもHOW TOなプロジェクトが用意されている。これらを見るのも参考になると思う。
では新しいプロジェクトを作成。
新しいプロジェクトが開いた。
以降はこのプロジェクト上で、各HOW TOにある物を試してみようと思う。
HOW TO: Basics
まず基本的な画像の生成から。左のメニューで"Image"をクリック。
キャンバス上に領域が作成される。左のメニューでプロンプトを入力すると、画像が生成される様子。左のメニュー内の"Recraft V3 Raw"というところをクリック。
これが「スタイル」というやつで、Recraftではスタイルごとに生成される画像の雰囲気に一貫性を持たせることができる。デフォルトでも多数のスタイルが用意されているが、自分で画像をアップロードして独自のスタイルを作成することもできる。多分内部的にはファインチューニングされたモデルということになるのだと思う。
下の方にスクロールすると、スタイルの右上の表示が”V3”と”20B”という2つになっているのがわかる。これがRecraftのモデル。
2つのモデルがある。
-
Recraft20B
- 2024年2月にリリースされた最初のAIモデル。
- デザイナー向けに開発された初のAIモデルで、ベクター画像とラスター画像の両方を作成可能
-
Recraft V3
- 2024年10月にリリースされた新モデル。
- Hugging Face の Artificial Analysis Text to Image Model LeaderboardでELO評価1172で1位を獲得したSOTAモデル
今回は"Photorealism"を選択。
日本語での動作も確認したいので、日本語でプロンプトを入力して"Recraft"をクリック。
こんな感じで生成される。ちなみに、右上でクレジットが消費されているのがわかる。試しに3回ほど生成したので多めに減っているが、今回の例だと1回で2クレジット消費されている?
クレジット消費のリストに書いてあることと違うなーと思ったけど、ここの設定画原因だな。1回で2画像生成するようになっていた(2画像x3回実施したので、初期50クレジット-6クレジット=44クレジットということ)。お試しの間は1にしたほうがいいかもね。
上記のように複数画像生成するようになっている場合は、下で切り替えることができる。
気に入らなければ再度"Recraft"すれば再生成されるし、必要ならばプロンプトを書き換えたりすればよい。
背景を削除してみる。画像を選択した状態で、上のハサミのアイコンをクリックする。
背景が削除された。
背景を変えてみる。画像が選択された状態で、上部の、消しゴムと服の間のアイコンをクリック。
背景部分の表示が変わり、また左のボタンも"Recraft"から"Change background"に変わる。ここでプロンプトを入力して"Change background"をクリック。
背景が書き換わった。今回の画像だとちょっと背景との境界が曖昧なので微妙かもだけど(これはこれでなんか月明かりがバックにあるように見えなくもない)、イラスト的な画像だといいかもしれない。
部分的な修正も試してみる。イラスト的な画像を新たに生成した。
上のメニューからなげなわアイコンをクリックして、画像の一部を囲む。
左のボタンが"Modify area"に変わったので、プロンプトを入力してクリック。
一度試してみたけどちょっとうまくいかなかったので、少しプロンプトを書き換えてみたらこうなった。
右上のExportからダウンロードができる。
他にも色々できることはあるので、HOW TOのプロジェクトや公式のブログ記事などを見ると良さそう。
とりあえず注意しないといけないのは、日本語IMEの変換ENTERで送信されてしまうこと。プロンプト入力中だと画像が生成されてしまうので無駄にクレジットを減らしてしまう。。。。
ベクター画像の生成
最初に気になったベクター画像の生成だけど、以下の2つの方法になる様子。
- ラスター画像をベクター変換する
- ベクター画像に対応しているスタイルを使用する
ベクター画像に対応しているスタイルは以下のようにすればフィルタできるっぽい。
"Vector art"というスタイルを使って画像を生成してみる。
こんな感じで生成してダウンロードするとSVG形式が選択できるようになっている。
ラスター画像からのベクター変換はこのアイコンから可能。
ダウンロードしたSVGをInkscapeで開いてみるとパスが選択できる。
つまりこういうことも簡単。
当然パスを動かすこともできるので、素材などをを作る場合にもかなり有用だと思う。
その場合はもちろん商用プランのサブスクリプションが必要。
API
RecraftはAPIからも利用できる。APIでは以下が可能な模様。
- ラスター/ベクター画像の生成
- 画像のベクター変換
- 背景の削除
- Clarity Upscale
- Generative Upscale (Creative Upscaleのことかな?)
- スタイルの作成
API経由で画像を生成するには、まずAPIユニットを購入、そしてAPIキーを発行する必要がある。
右上のアイコンから"API"をクリック。
APIユニット数を指定して"Buy"で購入。決済はStripeになる。
決済完了後、APIキーを発行する。
適当なキー名を入力して作成。
APIキーが生成された。キーは再度表示はできないので、適切に保管。
ではAPIで試してみる。Colaboratoryで。APIキーはColaboratoryのシークレットに保存しておく。
RecraftのAPIは以下にSwaggerのドキュメントが用意されている。
もう一つの方法として、Recraft APIはOpenAI APIとの互換性が「ある程度」あるらしく、OpenAI Python SDKを使うこともできるらしい。ただし、すべてのパラメータやオプションが同じというわけではないようなのでそこは注意が必要。
今回はrequestsを使ってやってみる。
画像の生成
まずラスター画像
import requests
from google.colab import userdata
import json
base_url = "https://external.api.recraft.ai/v1"
api_key = userdata.get("RECRAFT_API_TOKEN")
headers = {
"Authorization": f"Bearer {api_key}"
}
payload = {
"prompt": "競馬場でレースを走っている競走馬たち",
"style": "digital_illustration",
"model": "recraftv3",
}
response = requests.post(
f"{base_url}/images/generations",
headers=headers,
json=payload,
)
print(json.dumps(response.json(), indent=2, ensure_ascii=False))
https://external.api.recraft.ai/v1/images/generations
にプロンプトを投げるとラスター画像が生成される。このときモデルやスタイルを指定することもできる。
以下のような感じでURLが返ってくる。
{
"created": XXXXXXXXXX,
"data": [
{
"url": "https://img.recraft.ai/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/rs:fit:1024:1024:0/raw:1/plain/abs://external/images/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
}
]
}
Colaboratoryだとこんな感じで表示できる。
from IPython.display import Image
image_file = "image.png"
image_url = response.json()["data"][0]["url"]
image_response = requests.get(image_url)
if image_response.status_code == 200:
with open(image_file, 'wb') as f:
f.write(image_response.content)
print("画像が正常に保存されました")
else:
print(f"画像のダウンロードに失敗: {image_response.status_code}")
display(Image(image_file))
ベクター画像の場合はスタイルにvector_illustration
を指定すれば良い。
image_file = "vector_image.svg"
payload = {
"prompt": "かわいい栗毛の競走馬",
"style": "vector_illustration",
"substyle": "kawaii", # 各スタイルごとにより細かいサブスタイルを指定できる
"model": "recraft20b", # モデルごとにサブスタイルは異なる
}
response = requests.post(
f"{base_url}/images/generations",
headers=headers,
json=payload,
)
if response.status_code == 200:
image_url = response.json()["data"][0]["url"]
print("Image URL:", image_url)
image_response = requests.get(image_url)
if image_response.status_code == 200:
with open(image_file, 'wb') as f:
f.write(image_response.content)
print("画像が正常に保存されました")
else:
print(f"画像のダウンロードに失敗: {image_response.status_code}")
else:
print(f"画像の生成に失敗: {response.status_code}")
from IPython.display import SVG
display(SVG(image_file))
もちろんこのファイルはInkscapeなどで編集できる。
なお、一番下に注意書きがある
- 現在、生成された画像はすべて無期限に保存されます。しかし、このポリシーは将来変更される可能性があり、一定であることを信頼すべきではありません。
- 画像は認証なしで直接リンクから一般にアクセスできます。しかし、URLには一意の画像識別子が含まれ、暗号署名されているため、失われたリンクを復元することはほぼ不可能です。
- 現在、画像生成レートはユーザーごとに定義され、1分あたり100枚に設定されています。このレートは将来調整される可能性があります。
生成されたURLについてはどこかに残しておいたほうがいいかもね。
他にもいろいろなパラメータやオプションについて記載があるので、ドキュメントとSwaggerドキュメントを読むことをオススメ。
まとめ
ベクター画像が生成できるのはとても良い。
自分はそれほど画像生成の頻度は高くないので、月額のGUIよりも、$1から始めれるAPIでの利用のほうが都合が良いし、その場合は商用利用もできて、かなり仕事で使えそうである。
GUIも使い勝手はよいので、もっとデザイン寄りで頻度高めに利用するなら月額もいいかもね。