懶人包
- 我盤點部落格 52 張封面:45 張有白髮黃圍巾的吉祥物,1 張畫成另一個角色,還有幾張換了衣服。圍巾黃在三張封面上量到三個不同色碼。
- 原因在封面提示詞:吉祥物那段只寫了「白髮」和「芥末黃針織圍巾」兩個特徵,比例、衣服、鞋子都交給模型自由發揮。
- 角色設定圖(character sheet)把角色畫成一張固定的參考圖:四視圖、六種表情、四個動作、色票、禁止清單。生圖時把它當參考圖附上,模型照圖畫。
- 我用 Codex CLI 拿 3 張現有封面當參考生出設定圖,裁切放大檢查手臂和圍巾結構,再用 Python 加標註與從像素量出來的色票。
- 設定圖和固定提示詞放進 repo 的
docs/mascot.md,封面流程改成每次codex exec -i附上設定圖。這篇的封面就是照新流程生的。
部落格每篇文章的封面都是 AI 生的手繪風圖,裡面有一個白髮、圍黃圍巾的 Q 版小人。他沒有名字,但已經出現在 45 張封面上。我想讓他以後不管誰來生封面、用哪個模型,都長同一個樣子,所以替他做了一張角色設定圖。這篇整理設定圖是什麼、為什麼能讓 AI 生的角色不跑掉,以及我怎麼從現有封面做出這一張。
🧭 角色設定圖是什麼?
角色設定圖(character sheet,動畫業叫 model sheet)是把一個角色的外觀規格畫在同一張紙上的參考圖。Wikipedia 的 Model sheet 條目寫明它的用途:讓多位畫師畫同一個角色時,比例、外觀和姿勢保持一致。合乎設定圖的畫面叫 on-model,偏掉的叫 off-model。
一張設定圖通常包含這幾塊:
| 區塊 | 內容 | 解決什麼 |
|---|---|---|
| 轉面圖(turnaround) | 正面、3/4 側、側面、背面,並排同一條地平線 | 不同角度下比例和造型一致 |
| 表情集 | 同一張臉的多種情緒 | 換表情時臉型不變 |
| 動作姿勢 | 角色常做的幾個動作 | 手腳怎麼接、拿東西怎麼握 |
| 色票 | 每個部位的色碼 | 顏色不隨每次生成飄移 |
| 服裝細節與禁止清單 | 固定穿什麼、絕對不畫什麼 | 擋掉最常出現的偏差 |
| 個性定位 | 角色是誰、會怎麼動 | 決定構圖裡角色的角色 |
character-sheet-raw.png 餵模型,加標註的 character-sheet.png 給人查。
🔍 我的部落格吉祥物跑掉了多少?
動手之前,我先把 public/images/blog/*/cover.png 全部拼成一張縮圖總表逐張看。
| 分類 | 張數 | 說明 |
|---|---|---|
| 有吉祥物 | 45 | 白髮、黃圍巾的手繪 Q 版小人 |
| 沒有角色 | 6 | 早期 OG 圖、純文字或 UI 風封面 |
| 畫成另一個角色 | 1 | rtx-4070-wan22-i2v-loop:正常比例動漫少年、棕色圍巾 |
| 合計 | 52 | 2026-10-25 盤點 |
whisper-cpp-vs-whisperx)和淡黃上衣的(prompt-injection-defense-four-walls)。圍巾顏色我從三張封面取樣,量到 #E3B22C、#D3A738、#F2BD38,三張三個黃。
那張畫錯的 RTX 4070 封面,角色其實是首頁大頭照那一套(public/images/character/):正常比例、棕色圍巾、星星 T 恤。網站上本來就有兩個長得不一樣的角色,模型拿哪個當參考,就畫成哪個。
🧩 為什麼光靠提示詞鎖不住角色?
封面 prompt 由 blog-create skill 的 cover-base-prompt.txt 產生。改版前,吉祥物那段原文是:
Mascot (KEEP FIXED every time): include one small chibi character drawn in the same
hand-drawn ink line style — messy white / silver hair and a mustard-yellow knitted
scarf.
被固定的只有「白髮」和「芥末黃針織圍巾」兩項。頭身比、衣服、褲子、鞋子沒寫,每次都由模型自己補,補出來的就是上面那幾種穿搭。
文字再寫細也有上限。每次生圖都是一次獨立的請求,模型看不到上一張畫了什麼;同一句「cream sweater」每次會落在不同的米白上。iThome 鐵人賽一篇替 20 個角色做三視圖的紀錄也是這樣收斂的:純文字描述做不出一致的角色,改附參考圖才穩定。我的分工是:參考圖固定角色,提示詞描述場景。
各家生圖工具都有「附參考圖」的入口:
| 工具 | 參考圖機制 | 文件寫明的重點 |
|---|---|---|
| Midjourney V7 | --oref <圖片網址> Omni Reference | --ow 調參考權重,範圍 0–1000、預設 100;一次只能放一張;取代 V6 的 --cref(官方文件) |
| OpenAI 圖片編輯 API | 上傳參考圖做 edits | 官方 Ruby SDK 文件:input_fidelity 設 high 更貼近輸入圖的臉與細節,預設 low,適用 gpt-image-1 系列 |
| Gemini 2.5 Flash Image | 參考圖加提示詞 | Google codelab 的流程是先把角色抽成一張參考圖,之後每張都附上(codelab) |
| Codex CLI | codex exec -i <檔案> | 我這次實際使用的方式,見下一節 |
🛠️ 我怎麼從現有封面做出設定圖?
1. 先定特徵:從 45 張封面取多數
我不重新設計角色,只把 45 張封面裡多數一致的特徵寫下來:
| 部位 | 規格 |
|---|---|
| 比例 | 約 2.5 頭身 |
| 頭髮 | 蓬亂白/銀髮,頭頂翹一兩撮 |
| 臉 | 實心黑豆眼帶反光點、兩頰腮紅、小嘴 |
| 圍巾 | 芥末黃粗針織,繞脖子一圈,一端垂胸前,兩端短流蘇 |
| 衣褲鞋 | 寬鬆米白毛衣、炭灰褲管反摺、深棕綁帶短靴 |
| 個性 | 好奇、愛動手的工程學徒,在封面裡一定在跟主題互動 |
2. 用 Codex CLI 生無字設定圖
我挑了 3 張角色最清楚的封面(omniroute、write-swift、whisper-cpp-local)當參考圖,請 Codex 畫一張 16:9 的設定圖:左上四視圖、右上 3×2 表情、下排 4 個動作,全圖不寫字。
codex exec --sandbox workspace-write --skip-git-repo-check -C <工作目錄> \
-i ref1.png -i ref2.png -i ref3.png - < sheet-prompt.txt
這裡有兩件事要知道。Codex CLI(我用 0.163.0)生的圖會落在 ~/.codex/generated_images/<thread>/exec-*.png,不在 prompt 指定的路徑;我在執行前後數一次該目錄的子資料夾,從 155 變 156,新多出來那一個就是這次的圖。輸出尺寸是 1672×941。
3. 裁切放大檢查結構
AI 畫小人最容易錯的是手腳怎麼接。我們的封面檢查清單本來就有兩條:手臂要從肩膀長出來、圍巾是布不能變成手臂。設定圖要給以後每張封面當標準,所以這兩條在設定圖上更不能錯。
我把轉面圖和動作列各裁一張放大看:
- 每隻手臂都從肩膀接出,接一隻手。
- 圍巾只在脖子上,指方向、推拉桿的動作裡圍巾往後飄,沒有跟手臂黏在一起。
- 放大鏡、拉桿、箱子都有手握住。
4. 加標註與色票
無字原圖保留給模型,再用 Python(Pillow)組一張給人看的版本:上方標題、每格下方標籤、底部色票和固定規則。
色碼不是我目測填的。我在原圖上框出圍巾、毛衣、褲子、靴子各自的區域,取像素中位數:
| 部位 | 色碼 |
|---|---|
| 圍巾 | #FAC32A |
| 毛衣 | #F2EBDC |
| 褲子 | #352E29 |
| 短靴 | #483526 |
#0A0A0A、紙底 #FAFAF7 和封面強調色 #F5D547 沿用封面風格殼原本的值。圍巾黃和封面強調色是兩個顏色,規格裡分開寫。
標註時踩到一個小坑:微軟正黑體沒有 ✓、✕ 這兩個符號,畫出來是方框。最後改成用 Pillow 直接畫圓圈和叉叉。
🔗 設定圖怎麼接進每次生封面的流程?
設定圖要真的被用到,才能讓角色不跑掉。我改了三個地方:
| 位置 | 改了什麼 |
|---|---|
docs/mascot.md(blog repo) | 固定特徵、色票、個性、不可以清單、英文固定提示詞、使用步驟 |
public/images/mascot/ | character-sheet-raw.png(餵模型)和 character-sheet.png(給人看) |
| blog-create skill | cover-base-prompt.txt 的吉祥物段落換成完整規格;references/visuals.md 規定每次生封面附上設定圖 |
~/.claude/skills/blog-create/gen-cover.sh --print "<這篇的主題場景>" > cover-prompt.txt
codex exec --sandbox workspace-write --skip-git-repo-check -C <文章資料夾> \
-i public/images/mascot/character-sheet-raw.png - < cover-prompt.txt
文字提示詞和參考圖各管一件事:提示詞寫這篇的主題場景,參考圖固定角色長相。
這篇文章的封面就是照這個流程生的:只附一張設定圖、提示詞只換主題場景,Codex 一次就生出比例、毛衣、褲管反摺和短靴都對得上的吉祥物。我照樣裁切放大檢查:釘圖釘的那隻小人兩隻手都從肩膀接出,圍巾往後飄、沒有黏到手臂上。
⚠️ 限制與還沒決定的事
- 參考圖降低偏差,不保證零偏差。模型仍可能畫錯手或換衣服,裁切放大檢查這一步不能省。
- 設定圖本身是 AI 生的。它的品質決定以後所有封面的上限,所以我只接受結構檢查全過的版本。
- 舊封面沒有重畫。那張 RTX 4070 封面還是正常比例的角色;要不要重生是另一個決定。
- 兩個角色要不要合併。首頁大頭照和封面吉祥物目前是兩套設計,設定圖只管封面這一套。
- 還沒有名字。設定圖上寫「部落格吉祥物」,名字之後再補。
✅ 自己做一張的檢查清單
如果你也有一個反覆出現的 AI 角色,可以照這個順序做:
- 把現有圖全部拼成一張總表,數清楚哪些一致、哪些跑掉。
- 從多數一致的圖抽特徵,寫成表格;跑掉的寫進「不可以」。
- 挑 2–3 張最清楚的圖當參考,生一張無字的設定圖:四視圖、表情、動作。
- 裁切放大檢查手、腳、配件的結構,不合格就重生。
- 從設定圖的像素量色碼,加標註做成給人看的版本。
- 把設定圖路徑和固定提示詞寫進你的生圖流程,每次都附參考圖。