【Nanobanana 解説】JSONプロンプトでポートレートをどこまで変えられるのか #159
JSONで顔はいじれるのか問題
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. 実験①:モノクロ → カラー(=テキスト側の仕事)
最初の実験は、
モノクロ写真をそのままカラーに戻すやつ。
やったことは、たったこれだけ。
ベースプロンプトから black and white を抜く
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活用
いいなと思ったら応援しよう!
よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!