Visual Craft - 視覺化設計與重繪
先判定意圖,再選流程。
Intent decision tree
- 使用者要修改既有圖片,且要求保留其中部分內容時,判定為 edit。
- 使用者提供圖片,但圖片只用於風格、構圖、氛圍或主體參考時,判定為 generate。
- 使用者沒有提供圖片時,判定為 generate。
判定依據是使用者希望如何使用圖片,不是附件是否存在。 同一張圖片可以是 edit 的修改目標,也可以只是 generate 的參考素材。
edit:節點、連線、群組與文字以來源為準,只修改使用者授權的部分。
generate:先從需求建立內容與結構,再依 references/canvas-design-system.md 完成視覺設計。
Generate 工作開始前必須完整讀取該 reference。
樣式掛在角色上,不掛在圖元上。「主標題」「註解卡片」「控制流虛線」是角色, 具體的字級與色值是筆調與顏色對它的實作。這一層讓同一套樣式能同時落到 SVG 與 PPTX——角色是契約,媒材是實作。
先讀 references/roles.md。 沒有角色詞彙,下面三層無從掛載。
| 層 | 決定 | 預設 | 定義在 |
|---|---|---|---|
| 筆調 | 每個角色的幾何:圓角、線寬、線型、密度 | pens/ 三選一 |
references/layer-pen.md |
| 顏色 | 每個角色的墨色:填色、邊框、文字 | themes/ 八選一 |
themes/ |
| 結構 | 怎麼排 | 沿用素材 | references/layer-structure.md |
媒材對映:SVG 見 references/render-svg.md,PPTX 見 references/render-pptx.md。
Rendered-output QA branch:產出或大幅修改 SVG、PPTX 或其他固定版面視覺成品時,完成內容核對與本 skill 的格式檢查後,執行 visual-output-qa skill。
它擁有跨媒材的 rendered truth 原則與最終交付 verdict;本 skill 只保留圖表設計、內容保留與媒材建構規則。
字級是硬底線。 最小字級以畫布寬度的百分比定義(內文 2.0%、標題 3.5%),
因為 SVG 會縮放,絕對 px 沒有意義。預設畫出來的字通常太小,就是因為
畫布給得大方而字級照抄螢幕習慣。完整表與版面最佳化定義在 references/typography.md。
一次只換一層。 使用者說「換個配色」就只動顏色;說「改成分層的」就只動結構。 同時動兩層會讓他無法判斷是哪一項造成差異——想連換就分兩次做。
選筆調與顏色
先問這張圖給誰看。 不確定就用下面兩個起手式,多數情況夠了。
| 起手式 | 給誰看 |
|---|---|
console + muted-ledger |
內部文件、簽呈、評估報告,之後會印出來 |
console + solarized-light |
技術文件、規格書,在螢幕上讀 |
要別的組合再往下看。筆調與顏色各選一個,兩者獨立。
筆調(pens/)
| 給誰看 | 用哪個 | 特徵 |
|---|---|---|
| 技術文件、螢幕、節點多 | console |
方正緊湊、細框 |
| 投影、會議、非技術聽眾 | briefing |
柔和寬鬆、粗框 |
| 附錄線稿、黑白影印 | blueprint |
純框線、無填色 |
顏色(themes/)
| 給誰看 | 用哪個 | 類別數 |
|---|---|---|
| 技術讀者、長時間螢幕閱讀 | solarized-light |
3 |
| 會被印出來或影印 | muted-ledger |
3 |
| 要跟既有前端介面一致 | tailwind-default |
4 |
| 技術簡報、網格紙感、亮藍焦點 | gridline-studio |
4 |
| 教學簡報、暖白底、橘色焦點 | warm-clarity |
3 |
| 四階流程,起點深、暖冷有方向、會印出來 | dusk-ramp |
4 |
| 四階流程,螢幕、要色相跨得遠 | spectral-ramp |
4 |
附錄線稿(僅配 blueprint) |
blueprint-mono |
3 |
唯一的搭配限制:blueprint 筆調必須配 blueprint-mono 主題,反之亦然。
其餘非 blueprint 的筆調與主題可自由組合。
換色前先列對照表
套色之前,先列出這張圖的「角色 → 色槽」對照,交給使用者確認。 單獨換配色時尤其要列——那條路徑不經過 edit 流程步驟 1 的清單, 沒有任何東西會逼你回頭確認每個顏色現在代表什麼。
| 圖上的東西 | 角色 | 色槽 |
|---|---|---|
| 主要流程節點 | surface/card |
cat-1 |
| 這一步最重要 | text/emphasis |
accent |
| 失敗與風險 | state/issue |
cat-s |
對照表列出來,cat-s 被拿去當強調色這類錯配當場就看得見;
不列,它會一路活到交付——沒有腳本擋得住它(見 maintenance/checks.md)。
先問要不要看預覽
開始重繪前,問一次使用者要不要先看樣式長什麼樣,並附上
docs/style-reference.html——那頁有全部筆調與顏色的實際樣貌,
瀏覽器打開就能看,還能按「灰階檢視」確認黑白列印後仍讀得懂。
盲選的代價是整輪重畫,而「一次只換一層」的規則讓修正更慢。 先看一眼比較快。
怎麼講
推薦時說用途,不說參數。「這張給主管看且會印出來,我用 muted-ledger」
就夠了;灰階間距、明度下限這些是內部推導,不要出現在第一句。
被閘門擋下來時也一樣:先說該怎麼辦,理由收在後面。
✗ 線稿模式邊框需對畫布 3:1,明度上限 30,10% 間距放不下三類。 ✓ 線稿最多只能放兩個類別,這張有三個。可以分組成兩類, 或改用填色的畫法。(純框線的邊框要在白紙上看得見,能用的顏色深度有限。)
流程
Generate 流程
- 將需求整理為圖的目的、受眾、核心訊息、節點、關係、群組與輸出媒材。
- 圖片參考只提取使用者指定的風格、構圖、氛圍或主體特徵,不假設要保留其像素或內容。
- 讀
references/canvas-design-system.md,先寫一句可操作的 visual philosophy,再以它約束空間、色彩、型級、節奏與焦點。 - 選擇角色、筆調與顏色。結構可從需求建立,不受「沿用素材」限制。
- 產出後依「核對後交付」檢查內容與格式,再執行
visual-output-qaskill 檢查實際呈現。
完成條件:圖能獨立說明核心訊息,需求中的每個節點與關係都有對應圖元,且沒有未經需求支持的資訊。
Edit 流程
1. 讀素材,抽出結構
| 素材 | 讀法 |
|---|---|
| SVG | 直接讀原始碼。節點取 rect/path 加其內的 text;連線取 line/path 加 marker-end 判方向;群組取包住多個節點的底層 rect 或 <g> |
| PPTX | 用 pptx skill 解壓後讀 ppt/slides/slideN.xml。圖形取 <p:sp>,文字取 <a:t>,連線取 <p:cxnSp>。先跑 markitdown 存一份文字基準供步驟 4 比對 |
| Mermaid/DOT 等原碼 | 直接解析,節點與邊都是明寫的 |
| 文字條列 | 節點是名詞,連線是「→」「接著」「送到」,群組是縮排或小標 |
抽完後列出清單給使用者確認——節點、連線、群組各幾個。 這份清單同時是步驟 4 的核對基準。 若素材看似缺少回滾、核准等流程環節,列為待確認缺口;不自行補入。
2. 判定原結構編碼的維度
這一步決定哪些 preset 可以選。詳見 references/layer-structure.md。
| 群組代表 | 維度 | 可用 preset |
|---|---|---|
| 階段、步驟、時序 | 有序 | phase-bands、layered-stack |
| 角色、系統、團隊 | 參與方 | swimlanes |
| 沒有群組 | — | chain |
同維度之內可以互換,跨維度不行。
橫帶改成上下分層,還是三個有序群組,沒有多出任何資訊——換得。 橫帶改成泳道就不行:泳道編碼「誰做的」,而素材從沒說哪個節點屬於哪個角色。 硬換等於憑空指派。
使用者要求跨維度時,停下來說明缺什麼,請他補上對照關係再繼續。 補上之後就換得——缺的是資訊,不是權限。
3. 套用筆調與顏色並推導
python scripts/derive.py themes/<theme>.md
exit 0 才能繼續——腳本會擋下對比不足與灰階不可分。
類別數只有純框線模式有硬上限(3),那是邊框對畫布 3:1 推導出來的。
填色模式沒有上界,能放幾個由色票的明度跨度決定;超過 5 個時腳本會提醒,
但不擋——那是讀者的記憶負擔,不是物理限制。
fill: outline 讓所有色階塌回畫布,邊框變成唯一區隔,對比要對畫布解,
可用明度範圍因此縮小。這是筆調層唯一會影響顏色層的地方,
其餘互不干涉,細節見 references/layer-pen.md。
參考檔
| 檔 | 內容 | 何時讀 |
|---|---|---|
roles.md |
角色詞彙:文字/表面/線條 | 最先讀,其餘都掛在它上面 |
layer-color.md |
顏色層:色階推導與對比約束 | 選定主題後 |
layer-pen.md |
筆調層:圓角、線寬、線型、空間骨架 | 選定筆調後 |
layer-structure.md |
結構層:維度判定與 preset | 步驟 2 |
typography.md |
型級、最小字級、版面最佳化 | 寫任何文字前 |
adding-a-theme.md |
從色票到新主題的完整流程 | 使用者給新色票時 |
render-svg.md |
SVG 實作:節點路徑、輸出結構 | 產出 SVG 前 |
render-pptx.md |
PPTX 實作:圖形對映、文字保護 | 產出 PPTX 前 |
canvas-design-system.md |
新圖的 visual philosophy、構圖、色彩、節奏與精修準則 | generate 模式必讀 |
要修改這個 skill 本身(改推導公式、調閘門、加色票、重構參考檔)時,
先讀 maintenance/README.md。那裡有常數登記表、閘門清單,
以及實際發生過的回歸——這套系統的多數錯誤是「修 A 引出 B」。
一般重繪工作不需要讀 maintenance/。
docs/ 底下的東西給人看,agent 不要讀。目前只有 style-reference.html:
用瀏覽器開,頁面結構就是上表這個模型。所有數值都來自上表的參考檔,
讀它的原始碼只是把已經是文字的東西再推導一次,白花 context。
4. 核對後交付
- 文字比對 — 最優先。PPTX 用
markitdown前後 diff,必須為空; SVG 逐字比對每個<text>。 - 內容核對 — 對回步驟 1 的清單,節點、連線、群組逐項比。
- 量文字與字級 —
python scripts/check_fit.py out.svg --roles <cls=role,…>作為格式建構前置檢查,檢查估算溢出與最小字級。它不是 rendered-artifact verdict;塞不下時調版面,不縮字。 - 重跑
derive.py— 確認交付的色值與主題檔一致。 若改動過derive.py或任何主題,先跑python scripts/test_themes.py, 再跑python scripts/render_reference.py更新docs/style-reference.html。 - 檢查實際呈現:執行
visual-output-qaskill,使用最終交付 renderer 驗證 hard conditions;只有PASS才交付。
底線
類別色是承諾。 cat-1 一旦代表某個群組,它在該圖不得再出現在別處。
cat-s 只標異常。 warning、issue、error、blocker 才用它。強調、目前步驟、「最重要的那一步」用 accent。
紅色的訊號太強,一旦同時出現在正常內容與問題上,讀者就分不出哪個是重點、哪個是警告。
一個表面只有一個意思。 卡片是一個東西;色帶區域是一個範圍;虛線框是註解。 註解畫成卡片,讀者會把說明讀成機制的一部分。
顏色不單獨承載意義。 每個由顏色編碼的區隔都要有第二通道——標籤、位置、形狀或線型。 掉成灰階後仍要讀得懂。
同形狀等於沒有 landmark。 動作、元件、資料源、治理關卡畫成同一種圓角矩形, 讀者每次都得重新讀字才知道那是什麼。
素材原本的視覺缺陷值得指出,但不要默默修掉。 標籤太長、群組不平衡、 兩個節點其實是同一件事——說出來讓使用者決定,不要在重繪時一併「改善」。