# 報告：Gemini の画像 API で第61話 P1 を1枚試す（2026-10-30）

## 結論
**生成できなかった。** API への依頼は1回だけ送ったが、Google から「無料枠ではこのモデルの上限が 0」という返事が来て断られた（429 RESOURCE_EXHAUSTED）。依頼のとおり、やり直していない。
画像の API は**支払いの設定（有料の枠）がないと使えない**。料金のページにも、このモデルの無料枠は「Not available」と書いてある。
スクリプトはできていて、依頼の中身（プロンプト・添付・4:5・1K の指定）も確かめた。支払いの設定をすれば、同じコマンドをもう一度動かすだけで試せる。

## やったこと
1. KIOXIA はつながっていて、鍵のファイル `/Volumes/KIOXIA/gemini_api_key.txt` もあった
2. スクリプト `~/r2r2r-scripts/manga/gemini_panel.py` を作った（commit `6542019`。git に入れたのはこのファイルだけ）
   - 鍵はファイルから読むだけ。表示も保存もしない（JSON とスクリプトに鍵の文字がないことを確かめた）
   - 引数：`--prompt`、`--image`（何枚でも。渡した順に添付）、`--out-dir`、`--model`、`--name`
   - google-genai 2.34.0 を使う
   - 縦横比と大きさは `generationConfig.imageConfig` の `aspectRatio="4:5"` と `imageSize="1K"` で指定する。公式の API の資料で確かめた。4:5 と 1K はどちらも使える値に入っている。Python では `types.ImageConfig(aspect_ratio=..., image_size=...)`
   - 出てくるもの：PNG と、同じ名前の JSON（モデル名・使用量・かかった時間・返事の中身。画像のデータは入れない）。失敗したときは、Google からの返事を JSON に残す
3. 添付が合っているか：プロンプトの冒頭「USE ATTACHED REFERENCES」には「ハコブくん.png」と「blank 4:5 canvas」の2つが書いてあり、添付する2枚（canvas_4x5_1024x1280.png → ハコブくん.png の順）と食い違いはなかった。プロンプトは全文をそのまま渡した（9,534 バイト。空ではない）
4. 生成は1回だけ → 断られた（下にある返事の文）

## モデルを選んだ理由
鍵で使える画像のモデル（一覧から取ったもの）：
- gemini-2.5-flash-image（Nano Banana）
- gemini-3-pro-image ／ gemini-3-pro-image-preview ／ nano-banana-pro-preview（Nano Banana Pro）
- **gemini-3.1-flash-image** ／ gemini-3.1-flash-image-preview（Nano Banana 2）
- gemini-3.1-flash-lite-image（Nano Banana 2 Lite。軽い版なので外す）
- gemini-nano-banana-2.1（Nano Banana 2.1）

**選んだモデル：`gemini-3.1-flash-image`（Nano Banana 2。preview ではない正式版）**
- Google の公式の発表（Workspace Updates、2026年2月）に、アプリの Gemini は Nano Banana 2（Gemini 3.1 Flash Image）を使い、Fast・Thinking・Pro のどれでも Nano Banana Pro に代わる、と書いてある
  https://workspaceupdates.googleblog.com/2026/02/introducing-nano-banana-2-in-gemini-app.html
- Nano Banana 2.1（2026年10月に出た）はもっと新しいが、アプリの Gemini で使われている、と書いた公式の資料は見つからなかった。API の資料（https://ai.google.dev/gemini-api/docs/models/gemini-nano-banana-2.1 ）にも、アプリのリリースノート（https://gemini.google/release-notes/ ）にも書いていない。なので、「アプリと同じもの」という条件で 2 を選んだ

## Google からの返事（そのまま。長いので主なところ）
```
429 RESOURCE_EXHAUSTED
You exceeded your current quota, please check your plan and billing details. For more information on this error, head to: https://ai.google.dev/gemini-api/docs/rate-limits. To monitor your current usage, head to: https://ai.dev/rate-limit.
* Quota exceeded for metric: generativelanguage.googleapis.com/generate_content_free_tier_requests, limit: 0, model: gemini-3.1-flash-image, description: Generate content requests per day limit exceeded on Free Tier.
* Quota exceeded for metric: generativelanguage.googleapis.com/generate_content_free_tier_requests, limit: 0, model: gemini-3.1-flash-image, description: Generate content requests per minute limit exceeded on Free Tier.
* Quota exceeded for metric: generativelanguage.googleapis.com/generate_content_free_tier_input_token_count, limit: 0, model: gemini-3.1-flash-image, description: Generate content input tokens per minute limit exceeded on Free Tier.
Please retry in 1h46m9.026243828s.
```
「limit: 0」なので、待っても無料枠のままでは使えない（「1時間46分後にやり直して」と書いてあるが、上限が 0 なので意味がない）。返事の全文は下の JSON に入っている：
`作成データ/縦長試作_20261030/API試し/第61話_P1_api_gemini-3.1-flash-image_20261030_141350.json`

## 確かめて報告すること
1. **大きさ**：画像が返ってこなかったので測れない
2. **絵柄**：画像がないので、なし
3. **費用**：生成していないので、使用量は返ってきていない。かかった費用は 0 円。
   代わりに、入力のトークン数を数える API（count_tokens。画像は作らない）で数えた入力の量と、料金のページの単価から、1枚あたりの見込みを出した：
   - 入力：2,855 トークン（プロンプト＋添付2枚）× $0.50／100万トークン ＝ $0.0014
   - 出力：1K の画像1枚 ＝ $0.067（1,120 トークン × $60／100万トークン）
   - 合計 **約 10.7 円／枚**（$0.068）
   - レート：1ドル ＝ 156.23 円（Bloomberg Linea、2026-09-17 の値。今日の値は見つからなかったので、見つかった中で一番新しいものを使った）
   - 料金のページ：https://ai.google.dev/gemini-api/docs/pricing （Gemini 3.1 Flash Image：有料の枠、無料枠は Not available）
   - モデルが考える分のトークンも数えられると、少し高くなるかもしれない。実際の額は、1枚作ったときの使用量で確かめたい
4. **モデル名・時間**：gemini-3.1-flash-image。依頼を送ってから断られるまで 0.85 秒

## 決めてほしいこと
- Google AI Studio で、この鍵のプロジェクトに支払いの設定（有料の枠）をするかどうか。設定したら、次のコマンドで同じ1枚をもう一度試せる：
  ```
  cd ~/r2r2r-scripts
  D="$HOME/Library/Mobile Documents/com~apple~CloudDocs/デスクトップ/ADAPT DESIGN/じぶんの/PixelstoMotors/ハコブくん/4コママンガ作成データ"
  python3 manga/gemini_panel.py --prompt "$D/縦長試作_20261030/第61話_P1_プロンプト.txt" \
    --image "$D/canvas_4x5_1024x1280.png" --image "$D/ハコブくん.png" \
    --out-dir "$D/縦長試作_20261030/API試し" --model gemini-3.1-flash-image --name 第61話_P1
  ```
- 2枚目以降と、Panel 2〜4 は作っていない

---

# 追記：支払いの設定のあとにもう一度生成した結果（2026-10-30 14:23）

生成は1回だけ。前と同じコマンド・同じプロンプト・同じ添付（下地 → ハコブくん.png）で動かした。**今回は成功した。**

- 画像：`作成データ/縦長試作_20261030/API試し/第61話_P1_api_gemini-3.1-flash-image_20261030_142359.png`
- 返事の記録：同じ名前の `.json`

## 1. 大きさ
- **928 × 1152 画素**（横 × 縦）
- 比は 0.8056。4:5（0.8）とは 0.7% しか違わず、ほぼ 4:5。1K を指定すると、このモデルは 1024 × 1280 ではなく 928 × 1152 で返してくる
- 気づいたこと：返ってきた画像は **JPEG** だった（返事の `image/jpeg`）。スクリプトは拡張子を .png 固定で保存するので、中身が JPEG なのに名前は .png になっている。見るだけなら困らないが、直すかどうか決めてほしい

## 2. 絵柄（気づいたことだけ）
- 脚や靴の残像はない。人の手や体も描かれていない
- セリフ「ちょっと、引っかかってる！」は1文字も違わない。吹き出しの尾は右上に向いていて、端には付いていない
- 下地はむらのない緑。ハコブくんの体の部品（横の丸窓・後ろのパネル）はリファレンスと合っている。足されているのは上の停止ボタンだけ
- 少しずれているところ：
  - 吹き出しの上の端が、画像の高さの約5%にある（指示は 8〜20%）
  - ハコブくんの天面が少し見えていて、停止ボタンが全部見えている（指示は「上から見せない。ドームの頭が少しのぞくだけ」）
  - 袋の後ろの床に、スピード線が描かれている（指示は「床の線を描かない」）

## 3. 費用
返事の使用量：
- 入力：2,855 トークン（文字 2,339・画像 516）
- 出力：1,644 トークン（画像 1,120・残り 524）。残りの 524 は種類が書かれていないが、モデルが考える分（thinking）と思われる

料金のページの単価（Gemini 3.1 Flash Image、有料の枠）で計算した：
- 入力：2,855 × $0.50／100万 ＝ $0.0014
- 出力の画像：1,120 × $60／100万 ＝ $0.0672
- 出力の残り：524 × $3／100万（文字と thinking の単価）＝ $0.0016
- **合計 約 11.0 円／枚**（$0.0702）
- 残りの 524 も画像の単価で数えられたとすると、多くて約 15.6 円（$0.100）
- レート：1ドル ＝ 156.23 円（Bloomberg Linea、2026-09-17 の値。今日の値は見つからなかった）
- 料金のページ：https://ai.google.dev/gemini-api/docs/pricing

## 4. モデル・時間
- モデル：gemini-3.1-flash-image（返事の model_version も同じ）
- 時間：13.1 秒

## 決めてほしいこと
- 2枚目以降と Panel 2〜4 を作るかどうか（今回は作っていない）
- スクリプトの拡張子を、返ってきた形式（JPEG なら .jpg）に合わせるかどうか


---

# 追記：第61話 Panel 2〜4 を生成した（2026-10-30 14:40）

各コマ1回だけ。やり直しはしていない。スクリプトを直して、返ってきた形式に合った拡張子で保存するようにした（commit 00025f2）。3枚とも JPEG で返ってきたので .jpg で保存している。
モデルは gemini-3.1-flash-image。費用は 1ドル＝156.23円（2026-09-17 の値）で計算した。単価は、入力 $0.50、出力の画像 $60、出力の残り（thinking）$3（どれも100万トークンあたり）。

| コマ | 画素数（比） | 入力トークン | 出力トークン（画像＋残り） | 1枚の費用 | 時間 |
|---|---|---|---|---|---|
| P2 | 928×1152（0.8056） | 3,443 | 1,681（1,120＋561） | 約 11.0 円（$0.0706） | 18.2 秒 |
| P3 | 928×1152（0.8056） | 3,478 | 1,572（1,120＋452） | 約 11.0 円（$0.0703） | 19.4 秒 |
| P4 | 928×1152（0.8056） | 3,867 | 1,865（1,120＋745） | 約 11.1 円（$0.0714） | 13.6 秒 |

**3枚の合計：約 33.2 円（$0.212）**

出力先：`作成データ/縦長試作_20261030/API試し/第61話_P{2,3,4}_api_gemini-3.1-flash-image_20261030_1440xx.jpg`（同じ名前の .json がある）
メモ：P2〜P4 のプロンプトの「USE ATTACHED REFERENCES」には、下地（4:5 の白紙）の行がない。下地は指示どおり最初に添付した。
