見出し画像

ChatGPTとDALL-E3でイラストメーカーを作る

Last update 10-20-2023
※執筆後にステップ実行の挙動が変わってしまいましたので、動作の様子を見ながらご利用ください。




▼ 本記事について

概要

 OpenAI製の画像生成AIであるDALL-E3(DALL-Eはダリ と読む)は、プロンプトに忠実で品質の良い出力が得られます。生成された画像については、X(旧Twitter)のハッシュタグ #DALLE3を検索してみてください。

 本記事では、ChatGPTとDALL-E3を組み合わせた実験的なイラストメーカーを掲載しています。開発途中ですので理解の上でご利用ください。


関連記事

 いずれもDALL-E3に関連しています。よろしければどうぞ。

上記以外の情報は、下記のメニューより「DALL-E3/ChatGPT関連」へ進んで、各記事を参照してください。



▼ イラストメーカー

※セーラー服なのにレースが付いているなど、base*の内容(変更不可)が不意に反映される例を確認しています。仕様と言えば仕様なのですが…。これについては、「laceを打ち消す内容を加えてください。」の指示で付け焼き刃的に改善されるかもしれません。

概要

 アイコンメーカーと同様に、キャラクターを固定する仕組みがあることが特徴です。データ構造を見直しました。具体的な内容を指示したり、ざっくりと要望を伝えたりして、対話形式で画像生成ができます。

 詳細は後述の使用例をご覧ください。指示を繰り返して良い状態に仕上がったらデータをエクスポートして、新規チャットにてデータのみを差し替えた指示文を入れると良いでしょう。

データ

 現時点では以下の構造でデータを持っています。データのエクスポートやインポートが可能です。既存のプロンプトからのインポートも可能で、互換性のないデータもインポートできるかも…?

identityAttributes : 静的な要素(変更不可)
├ baseIllustrationStyle : 基本画風スタイル
├ baseCharacterTraits : 人物の特徴(性別、顔のパーツ、髪型等)
└ baseClothingAndAccessories : 服装等

dynamicAttributes : 動的な要素
├ additionalIllustrationStyle : 画風スタイル(追加)
├ overlayCharacterTraits :人物の特徴(追加または代替)
├ overlayClothingAndAccessories : 服装等(追加または代替)
├ characterActions : 行動
└ sceneDetails :シーン

指示文(rev. 231020a)

 以下のコードを、DALL-E3を有効にしたChatGPTの新規チャットに貼り付けてください。後述の使用例を参考にしてください。

 なお、「baseで始まるキー」の内容は変更不可で基本的に継承される(ChatGPTが不要と判断した場合のみ除外される)ので、好みの内容があれば先に書き換えてください。画風、人物の特徴、衣服やアクセサリーが設定されています。

アイコン等の画像を生成する高性能チャットボットとして、以下の指示に従って静かに実行してください。

データ:
{
  "identityAttributes": { "description": "This section describes the inherent characteristics and base appearance of the character.",
    "baseIllustrationStyle": { "description": "The foundational art style for the illustration.",
      "value": "colored flat anime illustration"
    },
    "baseCharacterTraits": { "description": "The inherent physical and personality traits of the character.",
      "value": "demure girl, deep dark orange eyes, straight slender eyebrows, brown hair chignon at the upper right"
    },
    "baseClothingAndAccessories": { "description": "The base clothing and accessories that the character typically wears.",
      "value": "lace dress, small red bow"
    } },
  "dynamicAttributes": { "description": "This section describes the changeable attributes and context in which the character can be placed.",
    "additionalIllustrationStyle": { "description": "Additional style that can overlay on the baseIllustrationStyle.",
      "value": "null"
    },
    "overlayCharacterTraits": { "description": "Additional or alternative traits that can overlay on the baseCharacterTraits.",
      "value": "null"
    },
    "overlayClothingAndAccessories": { "description": "Additional or alternative items that can overlay on the baseClothingAndAccessories the character can wear.",
      "value": "null"
    },
    "characterActions": { "description": "The actions or behaviors the character can exhibit.",
      "value": "playing piano, bright smile"
    },
    "sceneDetails": { "description": "The context or environment where the character can be placed.",
      "value": "cozy living room, illuminated by sunlight, grand piano, potted plant, lounging black cat"
    }  }  }

ルール:
・base*の値は変更できません。データのキーは増減できません。
・base*からの変更点はoverlay*に入力して、重複する内容は省略してください。
・additional*は変更点ではなく追加する内容を入力してください。
・データの値は要素ごとにカンマで区切って、内容を損ねない範囲で短くまとめてください。
・PG-12に反しないプロンプトを考案してください。
・プロンプトはデータの内容を損ねない範囲で、可能な限り短くまとめてください。
・プロンプトは必ず「baseIllustrationStyle」と「overlayIllustrationStyle」を先頭に配置してください。続いて「人物に関する内容、背景を除くその他の内容、背景の内容」を配置してください。重要な要素は前に移動してください。
・overlayClothingAndAccessoriesは、衣服やアクセサリーの具体的な名称をカンマ区切りで列挙してください。
・要望の内容は、どちらの番号を今後のベースにするか、何を変更するか、変更可能なキーは何か(1行で示す)、現在の内容を1行で説明するか、自動でアレンジを行うか、データのインポートやエクスポートを行うか、等があります。

実行ステップ(静かに実行すること、無限ループ):
1. base*と同じ内容がoverlay*に見つかった場合は、overlay*側を削除してください。
2. identityAttributesにdynamicAttributesをマージした内容をtemporaryに入れてください。descriptionの内容を確認してください。
3. temporaryの内容でDALL-Eの「英語の」プロンプトを作ってください。さらに、dynamicAttributes側の要素を一つだけアレンジしたプロンプトも作ってください。
4. 2つのプロンプトとアレンジ内容を表示して、プロンプトをそのまま使用して画像を生成してください。具体的な指示がなければ正方形としてください。
5. 変更の提案を考案して一文で表示して、要望を尋ねてください。ここで初期化を指示された場合は、overlay*の値を消去してください。
6. 要望に従って、identityAttributesからの変更・追加の内容であるdynamicAttributesを適切に変更してください。
7. 再びステップ1.から実行してください。

使用例(生成)

 順を追って説明します。適当すぎる例ですが参考になれば幸いです。

(1)新規チャットにて指示文を送信すると、初期データの内容をもとに画像を生成します。

初回の生成

(2)「季節は夏で、軽いグレーのギンガムのサマードレスに着替えて、脇に小さなテーブルとジュースを置いて、はにかんだ笑顔で首をかしげてください。」を指示します。

2回目の生成

(3)「夜で部屋は薄暗いです。ピンクのドレス型のナイティに着替え、髪をほどいています。何かを思い出して涙がこぼれます。」を指示します。

3回目の生成

(4)「初期化してください。春、岡にある公園の桜の木の下で好きと言われて、嬉しそうに顔を赤くしました。斜め上から見た全身像にしてください。画像は正方形のままです。」を指示します。「斜め上から見た」の文言により縦長に変えられてしまったので、正方形の指示を与えています。

※初期化の指示は、overlay*(追加や差し替えのキー)の値のみをクリアするものなのですが、characterActions(行動)やsceneDetails(シーン)までクリアしてしまう場合があるかもしれないので注意してください。

4回目の生成

(5)「人物を後ろ向きにして、振り向かせてください。」を指示します。

5回目の生成

(6)「頭に小鳥がとまり、腰をひねって困った表情で両手を上げてください。」を指示します。

6回目の生成

(7)「季節を秋に変更して、子供がクレヨンで雑に描いたらくがき風にしてください。」を指示します。

7回目の生成

使用例(生成ヒント)

 例えば「現状に合わせてdynamicAttributes全体をアレンジして、実行を再開してください。」という指示を出すと、勝手に色々と手を加えた上で生成してくれます。「おまかせで変更してください。」の指示のみでも可能かもしれません。

使用例(データの入出力)

(1)「エクスポートしてください。改行は控えめにしてください。」の指示で、現在のデータをjson形式で取り出すことができます。データに日本語が混入する現象を確認しています(プロンプトは英語で作成するので問題はありません)。

データのエクスポート

(2)「以下のデータをインポートしてください。」や「以下のプロンプトをインポートしてください」の指示で、記載したデータを取り込むことができます。プロンプトの場合は、dynamicAttributesのみが変更される点に注意してください。

 インポートが期待通りにできない場合は指示を工夫するか、新規チャットに指示文を貼り付けてjson形式のデータを差し替えてください。

インポートに使用したプロンプトの画像(左側)
プロンプトのインポート
インポート後の生成(データが復元されて同じ画像を出力した)

データの説明

 現在の内容を文章で説明させることもできます。

データを文章化



▼ アイコンメーカー(旧版)

※アイコンに限らない汎用性があるため、バージョンアップしたイラストメーカーを公開しました。

概要

 具体的な内容を指示したり、ざっくりと要望を伝えたりして、対話形式で画像生成ができます。その性質上、特にアイコンの制作に適していると思います。動作としては、指示文に書かれた初期のデータを元に2枚の画像を生成した後、変更の要望等を指示するとデータが更新されて再度生成…を繰り返します。

留意点

 単純に内容の変更を指示するとデータが上書きされ、以前の値が失われます。これにより想定しない事が起こった場合は、指示の際に変更前の内容を維持するよう明示するか、内容の追加を指示することで回避してください。

 よくありそうな例として、丸くしたい場合は「SNSの丸アイコン風にしてください」と指示すると、"design"に設定されると思います。フレームは"frameStyle"が別で存在しているので設定が可能です。

 指示文の5.と6.では、指示された内容の変更に合わせて、指示された以外の内容の変更も行っています。不都合があれば、この箇所を削除してください。これを加えたきっかけは、どの場所に移動させても服装が変化しなかったことです。

データ

 人物やその他の様々なデータを持っています(指示文参照)。チャットでの指示により値が変化して、それをもとに新しい画像を生成します。

機能

 2枚の画像の選択(次はどちらをベースにするか)、内容の変更、現在のデータの説明、自動アレンジ、データのインポートやエクスポート、初期化(依頼すると初期データに戻ります)等々…に対応していると思いますが、ほとんどテストしていませんのでご了承ください。

指示文(rev. 231014c)

※初期バージョンに改良を加え、データを少し変更しています。使い方などの変更はありません。

 以下のコードを、DALL-E3を有効にしたChatGPTの新規チャットに貼り付けてください。1枚はデータそのまま、もう1枚はアレンジしてプロンプトを生成します。データの値や「おすすめでアレンジ」の表現にあまり根拠はないので、お好みで書き換えてみてください。

アイコン画像を生成する高性能チャットボットとして、以下の指示に従って静かに処理してください。

データ:
{
  "physicalAttributes": {"properties": {
    "hairStyle": {"description": "髪型", "value": "pink medium pigtail"},
    "accessories": {"description": "アクセサリー", "value": "white bow"},
    "animal": {"description": "動物", "value": ""}
  }},
  "currentStatus": {"properties": {
    "activity": {"description": "行動", "value": "school commute"},
    "emotion": {"description": "感情", "value": "happy, softly smile"},
    "pose": {"description": "ポーズ", "value": "v-sign"},
    "clothing": {"description": "服装", "value": "white sailor uniform"}
  }},
  "context": {"properties": {
    "person": {"description": "人物基礎", "value": "teenage girl, dark orange round eye,small mouth"},
    "backgroundDetails": {"description": "背景", "value": "city ​​sidewalk, sunny spring day"},
    "pictureAtmosphere1": {"description": "ベース画風", "value": "anime illustration"},
    "pictureAtmosphere2": {"description": "拡張画風", "value": ""},
    "design": {"description": "デザイン", "value": ""},
    "frameStyle": {"description": "フレーム", "value": ""},
    "zoomFocus": {"description": "焦点", "value": "bust-up"}
  }}
}

ルール:
・データは値のみを変更し、キーの増減は行わないでください。
・プロンプトの順番は「pictureAtmosphere、人物に関するもの、それ以外」で、重要なものを前に移動してください。
・pictureAtmosphere1は変更せず、画風の変更はpictureAtmosphere2を使用してください。anime illustrationを基本として運用します。
・contextの内部は指示がない限り変更しないでください。
・clothingは具体的な衣服の名称を列挙してください。
・プロンプトはデータの内容を損ねない範囲で、可能な限り短くまとめてください。
・要望の内容は、どちらの番号を採用するか、何を変更するか、何が変更可能か(1行で示す)、現在の内容を1行で表示するか、自動でアレンジを行うか、データのインポートやエクスポートを行うか、等があります。

実行ステップ(静かに実行すること、無限ループ):
1. 現在のデータをDALL-Eの「英語の」プロンプトに変換して、「おすすめでアレンジ(pictureAtmosphereは類似した内容に限定)」したプロンプトも1つ作ってください。2つのプロンプトをそのまま表示してください。
2. 1番目と2番目のプロンプトをそのまま使用して、「正方形の画像を生成」してください。
3. 要望を尋ねてください。
4. 要望に従って、全データを確認しながら適切に変更してください。変更内容を記憶してください。
5. 要望、変更内容、backgroundDetails等をもとに「ワンシーン」を予想してください。
6. 現在のcurrentStatusとbackgroundDetailsをもとに予想を少しだけ加味して、clothingをはじめとするcurrentStatusの内容を変更してください。変更の概要のみ出力してください。
7. 再びステップ1.から実行してください。


使用例(1-生成)

 指示文を貼り付けて送信した後の回答(抜粋)です。指示文に書いてあるデータを元にプロンプトを2つ生成して表示し、それぞれの画像を生成します。

1回目の生成(指示文内のデータを使用)

使用例(2-シチュエーションの変更)

 水族館デートの指示に従ってデータを更新してからワンシーンを予想し、さらにデータを更新して、データを元にプロンプトを作って画像を生成します。

2回目の生成

使用例(3-人物などの変更)

 上記では人物の変更を指示して、データを更新しています。そしてワンシーンを予想してデータを更新し、データを元にプロンプトを作って画像を生成します。下記がその結果です。

3回目の生成

 さらに、丸いアイコンで使うことを想定した指示を出しています。結果は下記のとおりです。

4回目の生成

使用例(4-様々な変更とデータのエクスポート)

 最後に色々な要望を出してみました。画像の内容に関することであれば、ポリシーに反しない限りどのような要望も可能です。その結果が下記です。

5回目の生成

使用例(5-データのインポートと実行の再開)

 上記ではさらに、説明をさせたり、現在のデータを出力させたりしています。この後、内容を少し書き換えてインポートしました。

インポートの指示

 最後に、ステップ1.からの実行を再開してみました。これにより、保存したデータを使って続きから作業することができます。

インポートしたデータを使って生成

 人物、背景、画風など一部のデータだけを初期値に戻したので、街の中で登山の格好をしています。



▼ その他

 私が書いた他の記事は、メニューよりたどってください。

 noteのアカウントはメインの@Mayu_Hiraizumiに紐付けていますが、記事に関することはサブアカウントの@riddi0908までお願いします。


この記事が気に入ったらサポートをしてみませんか?