見出し画像

【Nanobanana 解説】JSONプロンプトでポートレートをどこまで変えられるのか #159

JSONで顔はいじれるのか問題

前回の #150 / #151 では、

  • JSONで「共通フレーム」 を作ると
    電車・プロダクト・イラストまで横展開できるで〜

  • ジオラマシリーズも、ぜんぶJSONのフレームで回せるで〜

みたいな話をした。

ただ、読んでる人の中にはきっとこう思った人もおるはず。

「ほんまにJSONでそんな細かくコントロールできるんか?」
「顔とか髪型までいじれるなら見てみたいんやけど?」

ワイ自身も、ちょっと盛って言ってないか?と内心ドキドキしてたので(笑)、
今回はちゃんと実験で証明する回
にしたい。

テーマはシンプルで、

「1枚のポートレートを、JSONだけでどこまで変えられるか?」

を、ガチで試していく。

結論から言うと、

  • JSONだけでゴリゴリやるのは向いてない場所もあるし、

  • JSONが刺さるとめちゃくちゃ気持ちよく効く場所もある。

その「使いどころ」が分かると、
前回のフレームもだいぶ扱いやすくなるはずや。


1. 世界を変えるのはテキスト、細部を磨くのがJSON

いきなり結論からいくと、今回の実験で分かったのはこれ👇

大きな変更(世界観・スタイル・髪型)はテキストの役割
細かい調整(色味・表情・光の向き)はJSONの役割

つまり、

  • 「写真 → イラストにしたい」

  • 「ドキュメンタリー → ハイファッションにしたい」

  • 「ロング → ガチのショートボブにしたい」

みたいな“世界線ごと変える”仕事 は、
メインの英語プロンプト(テキスト)のほうが圧倒的に強い。

一方で、

  • 髪色を黒 → 自然な白にしたい

  • 眉の色を髪に合わせたい

  • ライティングをちょっとだけ強く/弱くしたい

みたいな“同じ世界線の中での微調整” は、
JSONのほうが再現性高くて、めちゃ扱いやすい。

この「二刀流」が分かると、
JSON構造プロンプトはいきなり難しいOSじゃなくて、

「世界を決めるテキストの隣にいる、
パーツごとの微調整レバー」

として使えるようになる。

ここからはその実験ログを、ポートレート1枚をもとに追いかけていく。


2. ベース画像とベースJSON

まずベースになるのは、こんな感じの
モノクロ・フード女子ポートレート

ベースの英語プロンプトは超シンプルで、

A black and white high-fashion editorial portrait of [SUBJECT],
dramatic side lighting creating strong contrast,
deep shadows, clean background,
minimal styling, focus on facial structure,
high-resolution, realistic, no text, no grain.

ここに今回の主役である
「顔まわりのJSON」を足したのがこれ👇

{
  "subject": "high-fashion black and white portrait of a young woman in a hooded jacket",

  "face": {
    "age": "young adult",
    "gender_presentation": "feminine",
    "face_shape": "oval, soft but defined jawline",
    "eyes": {
      "size": "slightly large",
      "shape": "almond",
      "gaze": "looking straight at the viewer, calm and steady"
    },
    "nose": {
      "type": "straight, delicate bridge"
    },
    "lips": {
      "fullness": "medium, slightly full lower lip",
      "expression": "neutral, relaxed"
    },
    "expression": "subtle, calm, slightly mysterious"
  },

  "hair": {
    "length": "long",
    "style": "soft waves falling over shoulders",
    "color": "deep black",
    "extra": "hair coming out from under the hood"
  },

  "wardrobe": {
    "top": "black hooded jacket",
    "details": "hood up, zipper in the center, minimal styling"
  },

  "camera": {
    "framing": "tight portrait, head and upper shoulders centered",
    "angle": "eye level",
    "focus": "sharp focus on eyes and facial features"
  },

  "lighting": {
    "scheme": "dramatic side lighting from the left",
    "contrast": "strong contrast with deep shadows on one side of the face",
    "background": "clean, solid black background"
  },

  "color_style": {
    "mode": "black and white",
    "grain": "no grain, smooth tones"
  },

  "style": "high-fashion editorial, realistic, clean rendering",
  "quality": "high-resolution, detailed skin texture, subtle highlights",
  "negative": "text, watermark, logo, deformed shapes, excessive blur"
}

以降はこの「ゼロ号機」を固定しておいて、
どこを1〜数行いじるとどこが変わるのかを見ていく。


3. 実験①:モノクロ → カラー(=テキスト側の仕事)

最初の実験は、
モノクロ写真をそのままカラーに戻すやつ。

やったことは、たったこれだけ。

  1. ベースプロンプトから black and white を抜く

  2. JSONの color_style.mode を書き換える

3-1. テキスト側の変更

- A black and white high-fashion editorial portrait of [SUBJECT],
+ A high-fashion editorial portrait of [SUBJECT],

3-2. JSON側の変更

- "color_style": {
-   "mode": "black and white",
-   "grain": "no grain, smooth tones"
- },
+ "color_style": {
+   "mode": "natural color, soft skin tones",
+   "grain": "no grain, smooth tones"
+ },

すると、出てくるのがこの子👇

やってみて分かるのは、

  • 世界線の大枠(モノクロかカラーか)は、テキスト側がガツンと効く

  • JSON側の color_style は「色味のキャラ付け」をサポートしてる感じ

ということ。

「世界を決めるスイッチはテキスト。
JSONはその世界の中で“どんな色気か”を調整するレバー」

ってイメージを持っておくと、この先だいぶ楽になる。


4. 実験②:髪色を変える(JSONが気持ちよく効く場所)

次は、さっきのカラー版をベースに、
髪の色だけ黒 → 自然な白っぽさに変えてみる。

もともとの hair はこう👇

"hair": {
  "length": "long",
  "style": "soft waves falling over shoulders",
  "color": "deep black",
  "extra": "hair coming out from under the hood"
}

ここからやりたいのは、

顔も構図もライティングもそのままにして、
髪だけを「自然な白」に差し替える こと。

なので、いじるのは color の一行だけ。

- "color": "deep black",
+ "color": "soft natural white with a slightly silvery tone",

フルで書くとこう👇

"hair": {
  "length": "long",
  "style": "soft waves falling over shoulders",
  "color": "soft natural white with a slightly silvery tone",
  "extra": "hair coming out from under the hood"
}

出てくるのは、こんな感じの
自然なシルバー寄りホワイトヘア

ここでのポイントは、

  • white だけだとAI的にはかなり雑でブレやすい

  • soft natural white / slightly silvery tone みたいに
    質感まで一緒に書いてあげると安定する

ってところ。

「真っ白ブリーチじゃなくて、
ちょっとシルバー混じりの自然な白髪にしてくれ」

っていう、人間のイメージをそのまま color に押し込んでるイメージやね。

ここはもう、JSONの独壇場って感じで、
hair.color を1行変えるだけで、ほぼ狙いどおりの変化が出る。


5. 実験③:眉色を髪に合わせる(“関係性”を書けるのがJSON)

髪を白寄りにしたとき、
そのままだと 眉だけ黒いまま になりがちで、
ちょっと「ウィッグ感」が出る。

そこで、face の中に eyebrows を足して、
髪色との関係まで書いてみる。

5-1. 変更前(デフォルトの眉イメージ)

"eyebrows": {
  "thickness": "medium",
  "shape": "slightly arched",
  "color": "natural dark"
}

5-2. 変更後(髪に寄せた眉)

- "eyebrows": {
-   "thickness": "medium",
-   "shape": "slightly arched",
-   "color": "natural dark"
- },
+ "eyebrows": {
+   "thickness": "medium",
+   "shape": "slightly arched",
+   "color": "soft ashy gray, slightly lighter than her hair"
+ },

ここで効いているのは、

  • soft ashy gray

  • slightly lighter than her hair

という、“髪との関係”まで書いている部分

「髪よりちょい薄めのグレー眉にしてくれ」

というニュアンスが伝わると、

  • 「白髪だけど若い感じ」

  • 「ふんわりした柔らかい雰囲気」

としてAIが解釈しやすくなる。

正直、画像上の変化は劇的ではない
でも、それがむしろ面白くて、

  • 髪色は1行変えるとドンと変わる

  • 眉色は同じ1行でも“効きが弱い”

みたいな、パーツごとの効き方の違いが体感で分かる。

JSONのいいところは、
こういう「パーツごとの微調整」を
箱単位で管理できることやと思う。


6. 実験④:髪型を変える → ここでJSONの限界が見える

次は、みんな大好き(?)
ロングヘア → ショートボブ化にチャレンジしてみた。

さっきの hair を、こんな感じに書き換える👇

- "hair": {
-   "length": "long",
-   "style": "soft waves falling over shoulders",
-   "color": "deep black",
-   "extra": "hair coming out from under the hood"
- },
+ "hair": {
+   "length": "short",
+   "style": "soft, slightly wavy bob framing her face",
+   "color": "deep black",
+   "extra": "short hair visible around her face from under the hood, not reaching her shoulders"
+ },

日本語にすると、

  • 「長い髪が肩にかかっている」
    → 「顔まわりをふんわり囲むショートボブ」

  • 「フードから長い髪が出ている」
    → 「フードの下から、肩までは届かない短めの髪が少しだけ見えている」

…と書いてるわけやけど、
実際に出てきたのがこちら👇

うん、悪くない。
悪くないけど…ボブか?これは?
という結果にw

ここで分かったのは、

  • short も bob も、AIにとっては解釈の幅が広すぎる

  • 「肩上」「顎ライン」「ゆるウェーブボブ」などバリエーションが多すぎて、
    JSONだけで形をガチ固定するのは難しい

ということ。

髪型は「テキスト+JSON」の二段構えが現実解

じゃあどうするかというと、
ここは素直にテキスト側に戻したほうが早い。

例えば、ベースプロンプト自体を

- A high-fashion editorial portrait of [SUBJECT],
+ A high-fashion editorial portrait of [SUBJECT] with a clean short bob haircut,

みたいに、

「このモデルはショートボブです」

という世界観レベルの指定
メインプロンプトのほうでガツンと書いておく。

そのうえで、

  • JSON側の length / style / extra を
    「顔まわりで揃える」「肩に届かない」方向にチューニングする

という二段構えにするのが、一番安定する。


7. 最後に:JSONの“使いどころ”はどこか?

今回、1枚のポートレートをぐりぐりいじりながら分かったのは、

JSONで“全部”コントロールしようとするとシンドい。
でも、使いどころさえ分かればめちゃ心強い。

という現実やった。

ざっくりまとめると、こんな分担になる👇

📝 テキスト(メインプロンプト)が得意なこと

  • モノクロ ↔ カラー

  • 写真 ↔ イラスト ↔ アメコミ

  • ハイファッション ↔ スナップ ↔ ドキュメンタリー

  • ロング ↔ ショートボブ ↔ ベリーショート
    …みたいな世界線そのものの変更

🧩 JSONが得意なこと

  • 同じ世界線の中でのパーツ単位の微調整

    • 髪色のニュアンス

    • 眉色を髪に合わせる

    • 表情を neutral ↔ slight smile にする

    • 光の向き・強さ・コントラストをちょっといじる

  • 「この写真路線は維持したまま、
    ここだけ変えたい」という時のレバー


前回の #150 / #151
「JSONで世界を組むフレーム側の話」 やったとしたら、
今回のポートレート回は、

「その世界の中で、顔のパーツを箱としてどう扱うか」
そして、どこまでをJSONに任せて、どこからをテキストに戻すか

の実戦編、という位置づけや。


もしこの記事読んで、

  • 「この髪色のとこ、別の色でも試した」

  • 「ボブはこう書いたら安定したで」

みたいな実験ログあったら、
ぜひコメントで教えてもらえるとワイがめちゃ喜びます。

スキ・フォローももちろん大歓迎です🫶
ワイは、スキというリアクションを普通にエネルギーに変換するタイプです。

ではまた、次の「顔いじりJSON」シリーズで✋

#AI画像生成 #画像生成AI #プロンプト設計 #JSONプロンプト #構造化プロンプト #ポートレート生成 #AIポートレート #ヘアカスタム #ライティング調整 #スタイル制御 #note技術ログ #クリエイター向け #制作プロセス #学習メモ #実験記録 #デジタルクリエイティブ #コンテンツ制作 #Tips #検証記事 #note活用

いいなと思ったら応援しよう!

KITAcore|キタコレ@ログプレイヤー よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!