構造化プロンプトを制するものは画像生成を制す

この記事は

    1. ChatGPTの画像生成がすごい
    1. プロンプトにはYAMLなどの構造化データが向いている
    1. YAML形式のテンプレート例

の3本立てでお送りします。

1. ChatGPTの画像生成がすごい

先日ChatGPTの画像生成の精度が大幅に上がったことで、話題に事欠きません。

あまりにも利用者が多くなり、無料版では1日3回までに制限されたほどです。

何ができるようになったのか

細かい画風の指定に対応したり、日本語の文字も精度よく出力できるようになっています。

以下、猫の画像からマンガのコマを作成する例です。

1. 猫の画像をマンガ調にしてもらい、「にゃー」という吹き出しを描く

Screenshot 2025-04-02 at 11.52.03


2. 吹き出しの文字部分だけを選択

Screenshot 2025-04-02 at 11.52.29


3. カタカナに変更してもらう

Screenshot 2025-04-02 at 11.53.23


4. よりデフォルメされた画風に変える

Screenshot 2025-04-02 at 11.53.33


このようにある程度細かい指定にも対応でき、違和感もほとんどありません。

しかしやはり人間の細かさには劣る

いくら精度が上がり、細かい対応ができるようになったとはいえ、4コマ漫画の出力などで文字や背景の描き込み量が多くなると、文字が変になったりと精度が下がる印象です。

2. 構造化プロンプトという解決策

YAMLという記述方式があり、主にプログラミングの分野で階層構造を記述するのに利用されています。

YAMLは”YAML Ain’t Markup Language(YAMLはマークアップ言語じゃない)”という再帰的な略語だったりします。

Screenshot 2025-04-02 at 12.35.52


XMLやJSONなども代表的な階層構造データの1つで、そちらも構造化プロンプトとして有効な形式だと思いますが、個人的にはYAMLのほうが人間にも見やすく書きやすいので、YAMLを使っています。

猫の4コママンガを作ってみた

以下の指定で4コママンガを生成してもらいました。

Screenshot 2025-04-02 at 12.55.53
ChatGPT Image 2025年4月2日 11_42_45


出力画像の縦横比の制限で3コマ分しか生成できませんでしたね。

ちなみに吹き出し(speech_bubble)については

指定 出力
speech_bubble: “こんにちは” 「こんにちは」の吹き出し
speech_bubble: “…” 「…」の吹き出し
speech_bubble: null 吹き出し無し

というようにChatGPTが解釈してくれることが多いです。

一度に複数の微修正を頼んでみた

YAMLプロンプトの最大の特徴はその解釈の明快さです。

どの階層のどの部分で何が指定されているかがはっきりしているため、一度に細かい修正をしてもAIが理解してくれる可能性が高いです。

今回は以下のような修正を加えました。

  1. よりリアルに近づけた画風にする
  2. 三毛猫にする
  3. タイトルを「猫の一日」に変更する
  4. 3コママンガにする

それぞれの指定に漏れなく対応できていますね。captionの指定がうまくいかない場合があるのは、改善の余地がありそうです。

Screenshot 2025-04-02 at 12.56.11
ChatGPT Image 2025年4月2日 11_42_49


3. テンプレート例

以下に私が実際に利用したテンプレートを貼っておきます。

これをそのまま使ってもよいですし、ChatGPT自身がテンプレートを作成してくれるので、ChatGPTに改めて頼むのもアリだと思います。

それこそマンガだけでなく、ポスター、サムネイル、絵画など様々な画像のタイプがあるので、それぞれに特化したテンプレートを作ったほうが、より精度が上がる可能性はあります。

title: "作品のタイトルや用途(例:YouTubeサムネイル、4コマ漫画、アイコンなど)"

style:
  type: "マンガ / アニメ / 油絵 / 水彩 / ピクセルアート / フラットデザイン / 3D風 / 写実 / デフォルメ / 和風 / 欧風 など"
  tone: "明るい / 暗い / 落ち着いた / ポップ / シリアス など"
  color_scheme: "モノクロ / パステル調 / 鮮やか / ビビッド / セピア / 手描き風 など"

composition:
  layout: "縦長 / 横長 / スクエア / 4コマ(縦型 or 横型)/ シングルカット / ワイド構図 など"
  perspective: "俯瞰 / アオリ / 正面 / 横 / 背後 / 斜め / 鳥瞰 など"
  background: 
    presence: true  # 背景を描く場合は true
    detail_level: "なし / 簡素 / 通常 / 緻密"
    description: "桜が舞う春の公園 / 荒れ果てた近未来都市 / 教室 / 和室 / 宇宙空間 など"

characters:
  count: 1  # 描かれるキャラクターの数
  main_character:
    species: "人間 / 猫 / ロボット / 妖精 など"
    age: "子供 / 少年 / 青年 / 中年 / 老人 / 不明"
    gender: "男性 / 女性 / 中性 / 不明"
    clothing: "学生服 / パーカー / 着物 / アーマー など"
    accessories: ["メガネ", "帽子", "ネックレス"]
  others:
    - role: "サブキャラ / 敵キャラ / 友達 / 観客 など"
      count: 2
      description: "うしろでこっそり覗いているネズミの親子"

panels: # コマ割りをする場合はここで指定(一枚絵では不要)
  - panel_number: 1 # コマ番号
    caption: "朝の食卓"
    description: "猫がテーブルに乗ってこちらをじっと見ている"
    expression: "無表情"
    speech_bubble: "..."

  - panel_number: 2
    caption: "じりじりと近づいてくる"
    description: "猫が少しずつカメラ(読者)に近づく。足音はしない。"
    expression: "真顔"
    speech_bubble: null

effects:
  line_effects: true  # 効果線の有無(特にマンガ)
  lighting: "逆光 / 柔らかい光 / ドラマチックな陰影 / 光源なし"
  text_overlay: false  # タイトルやキャッチコピーを含める場合 true

output:
  resolution: "1024x1024 / 16:9 / 4:3 / A4 / Instagram用 / YouTubeサムネ用 など"
  format: "PNG / JPEG / SVG"
  transparency: false  # 背景透過の有無