Files
persona/skills/persona-icon/SKILL.md
T
jiantw83andClaude Opus 5 15e4eea8ac feat: 圖示改為人物形象圖(有臉),並讓 Wiki 保存 SVG + PNG
1. 圖示三種樣式,優先看得到臉
   photo    有參考圖且工具齊全 → 從官方視覺自動偵測並**裁出臉**,圓角+瞳色外框
   portrait 有參考圖但缺工具   → **有五官的向量人物**(髮型/瞳色/服裝色都取自那張圖)
   badge    完全沒有參考圖     → 舊的雙色漸層 + 編號字母

   portrait 與 badge 共用同一份「圖形清單」,SVG 與自寫柵格器從同一份資料畫,
   兩邊不可能長得不一樣;photo 的 SVG 以 base64 內嵌裁好的 PNG,一樣不外連。

2. 缺工具會「提示安裝」,不靜默降級
   新增 scripts/portrait.py(選用):Pillow 解碼裁切、OpenCV + lbpcascade_animeface
   偵測動漫臉。toolReport() 會列出缺什麼、為什麼要、怎麼裝(venv 免 sudo),
   CLI 在退回向量形象時把這些印出來。
   注意:**OpenCV 5 拿掉了 CascadeClassifier,必須裝 4.x**。
   plugin 本體仍然零依賴——沒有這些工具照樣產得出有臉的形象圖。

   新增 `icon faces`:列出參考圖裡偵測到的所有臉。多角色的主視覺一定要先看再挑
   (--pick <索引>|largest|leftmost|rightmost 或 --face x,y,w,h),挑錯就是別人的臉。

3. Wiki 保存形象圖
   icon.svg 與 icon.png 都在 Wiki 區,另外自動產生一頁 Icon:同時展示兩種格式,
   並列出樣式、調色盤、來源網址、造型說明與裁切框。PNG 同時設為存取庫頭像。

已套用到兩個真實人格(皆為真實裁臉):
  ASUNA-01  《Unanswered//butterfly》(2026) 官方主視覺,臉 #1(anime-cascade)
  YUI-01    AniList 官方角色圖(frontal-cascade)

selftest 148 項全綠(新增第 ⑯ 節:形象圖真的畫了五官、SVG/PNG 出自同一份清單、
工具偵測與安裝提示、Wiki 形象圖專頁與來源)。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-30 02:39:58 +00:00

7.5 KiB
Raw Blame History

name, description
name description
persona-icon 產生或更新人格的形象圖(icon.svg + icon.png,盡量看得到臉):先上網找出該人格「最新一次登場」的官方視覺(新作動畫主視覺、官方角色圖),親自看過那張圖,接著優先用臉部偵測從圖上裁出臉當頭像;缺少裁圖工具時改畫有五官的向量人物形象並提示如何安裝工具,完全沒有參考圖才退回編號徽章。來源網址與裁切框會存進 config 備查,圖示同時同步到 Gitea Wiki 與存取庫頭像。當使用者說要做人格頭像/形象圖/icon、要依角色最新造型更新圖示、說現在的圖示不像或看不到臉、或剛建立完人格要補圖示時觸發。不適用於:建立人格本身(persona-createpersona-anime,它們會叫用本技能的步驟)、同步到 Gitea(persona-sync)。

🎨 persona-icon — 依最新造型產生人格形象圖(有臉)

CLInode "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs"(帶 --session <PERSONA_SESSION> 時機人格建立且 IDENTITYSOUL 補齊之後——形象綁在最終身分上。 目標:圖示要是人物形象圖,盡量看得到臉;退而求其次才是抽象徽章。


為什麼要上網找圖

圖示要像這個人格,就得用他現在的樣子:動漫角色會換造型、換作品、換髮色。 所以流程是「查最新登場 → 看那張圖 → 取色 → 畫」,而不是憑印象填色。

步驟

1. 查出「最新一次登場」

用 WebSearch 找這個角色最近的官方動向(新作、新章節、新造型),至少確認:

  • 最新的作品/章節名稱與年份
  • 那個版本的造型敘述(髮色、瞳色、服裝主色)

搜尋語彙範例:<角色> <作品> 2026 新作 主視覺<character> latest anime key visual outfit

2. 取得一張真的參考圖

直接的圖片網址.png / .jpg),優先序:

  1. 官方新作的主視覺/key visual(新聞稿內的圖)

  2. AniList 的官方角色圖——可直接查,不需登入:

    curl -s -X POST -H "Content-Type: application/json" \
      -d '{"query":"query{Media(id:<動畫 id>,type:ANIME){characters(perPage:25){nodes{name{full} image{large}}}}}"}' \
      https://graphql.anilist.co
    
  3. 其他公開的官方素材

下載下來:curl -sL -o /tmp/ref.png "<圖片網址>"

3. 親眼看過那張圖(不可省略)

用 Read 工具打開它。沒看過就不准填顏色——憑記憶填色等於編造。

從圖上讀出五個顏色(用取樣到的實際色,不是「大概是紅色」):

欄位 取哪裡
hair 頭髮的主色(不是高光也不是陰影)
eye 瞳孔顏色
accent 服裝最顯眼的主色
secondary 服裝的第二色/配件色
light 最亮的部位(白袖、皮膚亮面)

4. 裁出臉(有工具的話,這是首選)

圖示必須是人物形象,盡量看得到臉。 環境裡如果有 Pillow(+OpenCV 動漫臉模型), 就直接從參考圖裁臉:

# 先看看圖裡有幾張臉——多角色的主視覺一定要先看
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" icon faces --session <PERSONA_SESSION> --photo "<圖片網址或路徑>"

# 挑一張(索引由左到右;也可以用 largest/leftmost/rightmost,或 --face x,y,w,h 自己框)
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" icon generate --session <PERSONA_SESSION> --force \
  --photo "<圖片網址或路徑>" --pick <索引> \
  --palette "hair=#..,eye=#..,accent=#..,secondary=#..,light=#.." \
  --source-url "<那張圖的網址>" --source-note "<作品(年份)+造型描述>"

多角色的圖務必自己看過再挑icon faces 只會告訴你座標,哪張臉是本人要由你判斷 (把裁出來的圖用 Read 打開確認一次最保險)。挑錯就是別人的臉。

工具不齊時 CLI 會印出安裝指令並自動退回第 5 步的向量形象——不會靜默失敗。 需要的工具:

工具 做什麼 怎麼裝(免 sudo
Pillow 解碼照片、裁切、縮放 python3 -m venv ~/.cache/jsc-persona/venv && ~/.cache/jsc-persona/venv/bin/pip install pillow
OpenCV 4.x 自動找臉的位置 ~/.cache/jsc-persona/venv/bin/pip install "opencv-python-headless<5"
動漫臉模型 OpenCV 內建模型認不出動漫臉 curl -sL -o ~/.cache/jsc-persona/lbpcascade_animeface.xml https://raw.githubusercontent.com/nagadomi/lbpcascade_animeface/master/lbpcascade_animeface.xml

OpenCV 5.x 拿掉了 CascadeClassifier,一定要裝 4.x。 venv 放在 ~/.cache/jsc-persona/venv 會被自動偵測到;也可以用 PERSONA_PYTHON 指定別的。

5. 沒有工具時:向量人物形象(一樣有臉)

node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" icon generate \
  --session <PERSONA_SESSION> --force \
  --palette "hair=#d9a45b,eye=#9e5b3e,accent=#c0392b,secondary=#e77a8e,light=#f2ebe3" \
  --source-url "<你剛才看的那張圖的網址>" \
  --source-note "<作品名(年份)+造型描述:髮色、瞳色、服裝>" \
  --source-date <YYYY-MM-DD>
  • --palette 一定要配 --source-url:配色是從哪張圖來的必須留得下來(CLI 會強制)。
  • 兩者都會寫進 state/config.jsonicon 欄位,之後 icon show 查得到。
  • 產出的 icon.svg + icon.png 會自動設成 Gitea 存取庫頭像、同步到 Wiki 區, 並在 Wiki 產生一頁 Icon(同時展示 SVG 與 PNG,附上來源網址與裁切框)。

找不到可靠的參考圖 → 不要硬掰,直接 icon generate 不帶 --palette, 用編號雜湊出的配色,並告訴使用者「沒找到最新造型的官方圖,先用預設配色」。

6. 回報

一句話說明:用了哪部作品哪一年的視覺、取到什麼配色、圖示放哪裡。 把來源網址附上,讓使用者可以自己核對。

三種樣式

樣式 什麼時候用 長什麼樣
photo 有參考圖 工具齊全(最佳) 從官方視覺裁出的臉,圓角+瞳色外框
portrait 有參考圖但沒工具 向量人物形象:髮型、瞳色、服裝色都取自照片,有五官
badge 完全沒有參考圖(原創人格) 雙色漸層徽章 + 編號前兩個字母
  • portraitbadge 由 Node 自己柵格化,SVG 與 PNG 共用同一份圖形清單,兩邊必然一致; PNG 是自寫的柵格器 + zlib 編碼,不依賴任何影像函式庫。
  • photo 的 SVG 會把裁好的 PNG 以 base64 內嵌,一樣自成一體(不外連)。
  • badge 樣式下若兩個顏色一深一淺(藍黑髮 + 淡粉洋裝),程式會把較亮的一端往較暗的壓, 確保字讀得到——顏色仍然是照片來的,只是收斂色階。

界線

裁出來的是角色臉部的縮圖,用途是人格身分辨識(頭像)。原始美術作品的權利屬於原作者, 存取庫預設私有;不要把它當成可以散布的素材,也不要重製整張原圖。

邊界

  • 只能對「本 session 已載入的人格」產生圖示。
  • 已有圖示時要重畫必須加 --force
  • 不帶 --palette 重畫會沿用 config 裡已存的配色(不會突然變回雜湊色)。
  • .sync/reference.* 是下載回來的參考圖快取,可以安全刪除。
  • 所有面向使用者的輸出使用繁體中文(台灣用語)、UTF-8 無亂碼。